3 个稳定版本
2.0.1 | 2023年3月22日 |
---|---|
1.0.1 | 2023年3月22日 |
#1878 in 网页编程
46 每月下载次数
86KB
2K SLoC
openai-req
使用 tokio 和 reqwest 实现的 OpenAI API 客户端。请参考仓库中的测试文件夹或代码注释以获取用法示例。
用法。
-
导入库
[dependencies] openai-req="2"
-
首先,您需要构建客户端。最小客户端只需要 API 密钥。以下是从 toml 文件中读取密钥的简单示例。
假设您有一个在 key.toml 文件中的密钥,如下所示
key = "{YOUR_KEY}"
构造客户端的函数,通过读取 key.toml 将如下所示
#[derive(Deserialize)] struct Config{ key: String } fn get_client() -> OpenAiClient{ let key_config= fs::read_to_string("key.toml") .expect("failed reading config file"); let openai:Config = toml::from_str(&key_config) .expect("can't parse config file"); return OpenAiClient::new(&openai.key); }
-
接下来,您通常构造 Request 结构,并触发 run 方法,将其传递给客户端引用。以下是一个聊天完成的示例
async fn chat() -> Result<ChatSuccess,anyhow::Error> { let client = get_client(); let messages = vec!(Message{ role: Role::User, content: "hello!".to_string(), }); let chat_request = ChatRequest::new(messages); Ok(chat_request.run(&client).await?) }
-
对于不接受任何参数的 GET 请求,您通常在响应类型上调用静态
get
函数。通常该类型被称为 SomethingListResponseasync fn models() -> Result<ModelListResponse,anyhow::Error> { let client = get_client(); Ok(ModelListResponse::get(&client).await?) }
-
最后,对于下载文件的请求,请求类型将有两个方法
asyncfn download_to_file(&self, client:&OpenAiClient,target_path:&str) -> Result<()>
和
asyncfn download(&self, client:&OpenAiClient) -> Result<Pin<Box<dyn Stream<Item=Result<Bytes,reqwest::Error>>>>>
第一个接受本地文件系统的路径,并在此处创建下载的文件。第二个只是返回异步数据流,并让您决定如何处理它。
以下是一个示例
async fn file_download() -> Result<(),anyhow::Error> { let client = get_client(); let files = FileListResponse::get(&client).await?; let info = files.data.first().ok_or(anyhow!("No files available"))?; let download_request: FileDownloadRequest = info.clone().into(); download_request.download_to_file(&client, "fine-tune2.json").await }
支持的 API
- 模型
- 列表
- 检索
- 补全
- 创建
- 聊天
- 创建
- 编辑
- 创建
- 图像
- 创建
- 创建编辑
- 创建变体
- 嵌入
- 创建
- 音频
- 创建转录
- 创建翻译
- 文件
- 列表
- 上传
- 删除
- 检索文件
- 检索文件内容
- 微调
- 创建微调
- 列出微调
- 检索微调
- 列出微调事件
- 删除微调模型
- 审核
- 创建审核
依赖项
~8–20MB
~308K SLoC