Rust与AI:如何在Rust开发中使用ChatGPT

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

为什么Rust和AI不是幻想,而是实用工具

\n\n

当我们听到“人工智能”和“Rust”出现在同一句话中时,通常想到的是用Python编写的复杂神经网络。但如果我告诉你,Rust可以成为与ChatGPT交互的优秀后端呢?没有慢速的Python,没有像TensorFlow那样的依赖——只有干净、快速、安全的代码与OpenAI API通信。

\n\n

在本文中,我们不会从头开始训练神经网络——我们将做一些更实用的事情:用Rust编写一个程序,向ChatGPT发送请求并获取响应。然后,我们将教它生成代码、文档,甚至修复错误。听起来像魔法?实际上,这只需要几个crate和一个正确的API密钥。

\n\n

如果你曾想为自己的Rust项目添加语言模型形式的“大脑”——你来对地方了。我们开始吧!

\n\n

我们需要什么:工具和准备

\n\n

在编写代码之前,让我们弄清楚将ChatGPT集成到Rust应用程序中需要什么。

\n\n

必要组件

\n
    \n
  • Rust — 已安装的编译器(rustc)和包管理器Cargo。如果你还没有Rust——curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  • \n
  • OpenAI API密钥 — 在platform.openai.com注册,创建密钥并将其放入环境变量OPENAI_API_KEY中
  • \n
  • Rust库 — 我们将使用crate reqwest(用于HTTP请求)、serde和serde_json(用于处理JSON)、tokio(异步运行时)
  • \n
\n\n

创建项目

\n
cargo new rust_chatgpt\ncd rust_chatgpt
\n\n

将依赖项添加到Cargo.toml:

\n\n
[dependencies]\nreqwest = { version = "0.12", features = ["json"] }\ntokio = { version = "1", features = ["full"] }\nserde = { version = "1.0", features = ["derive"] }\nserde_json = "1.0"
\n\n

现在可以运行cargo build——依赖项将自动拉取。

\n\n

用Rust编写第一个ChatGPT请求

\n\n

与ChatGPT“对话”的最简单方法是向端点https://api.openai.com/v1/chat/completions发送POST请求。Rust凭借其严格的类型系统非常适合此任务:我们将清晰地描述请求和响应的结构,编译器将在每一步为我们检查。

\n\n

API的数据结构

\n

OpenAI API期望JSON具有特定的模式。让我们用serde来描述它:

\n\n
use serde::{Deserialize, Serialize};\n\n#[derive(Serialize)]\nstruct ChatRequest {\n    model: String,\n    messages: Vec<Message>,\n    temperature: f32,\n}\n\n#[derive(Serialize, Deserialize, Clone)]\nstruct Message {\n    role: String,\n    content: String,\n}\n\n#[derive(Deserialize)]\nstruct ChatResponse {\n    choices: Vec<Choice>,\n}\n\n#[derive(Deserialize)]\nstruct Choice {\n    message: Message,\n}
\n\n

注意:Message既用于发送也用于接收——因此我们添加了Serialize和Deserialize两个属性。

\n\n

异步请求

\n

现在编写一个函数,发送消息并返回ChatGPT的响应:

\n\n
use std::env;\n\nasync fn ask_chatgpt(prompt: &str) -> Result<String, Box<dyn std::error::Error>> {\n    let api_key = env::var("OPENAI_API_KEY")\n        .expect("环境变量OPENAI_API_KEY未设置");\n\n    let client = reqwest::Client::new();\n\n    let request_body = ChatRequest {\n        model: "gpt-4o-mini".to_string(), // 快速且便宜的模型\n        messages: vec![\n            Message {\n                role: "system".to_string(),\n                

博客

书籍推荐