async-openai
OpenAI 的异步 Rust 库
Logo 由此 仓库创建
概述
async-openai
是一个非官方的 OpenAI Rust 库。
- 基于 OpenAI OpenAPI 规范
- 当前功能:
- 助手 (v2)
- 音频
- 批量
- 聊天
- 完成 (遗留)
- 嵌入
- 文件
- 微调
- 图片
- 模型
- 审核
- 上传
- 所有可用 API 的 SSE 流
- 请求(除 SSE 流)包括表单提交在 速率限制 时会使用指数回退重试。
- 所有请求对象的简洁生成模式。
- 微软 Azure OpenAI 服务(仅匹配 OpenAI 规范的 API)
用法
库从环境变量 OPENAI_API_KEY
读取 API 密钥。
# 在 macOS/Linux
export OPENAI_API_KEY='sk-...'
# 在 Windows Powershell
$Env:OPENAI_API_KEY='sk-...'
- 访问 examples 目录了解如何使用
async-openai
。 - 访问 docs.rs/async-openai 查看文档。
图片生成示例
use async_openai::{
types::{CreateImageRequestArgs, ImageSize, ResponseFormat},
Client,
};
use std::error::Error;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
// 创建客户端,从环境变量 OPENAI_API_KEY 读取 API 密钥。
let client = Client::new();
let request = CreateImageRequestArgs::default()
.prompt("客厅里沙发和地毯上的猫")
.n(2)
.response_format(ResponseFormat::Url)
.size(ImageSize::S256x256)
.user("async-openai")
.build()?;
let response = client.images().create(request).await?;
// 下载并保存图片到 ./data 目录。
// 每个 URL 都在独立的 Tokio 任务中下载并保存。
// 如果目录不存在,则创建它。
let paths = response.save("./data").await?;
paths
.iter()
.for_each(|path| println!("图片文件路径: {}", path.display()));
Ok(())
}
为 README 调整大小,实际大小为 256x256
贡献
感谢你花时间来贡献和改进这个项目。我们非常欢迎你的贡献!
所有形式的贡献,例如新功能请求、错误修复、问题、文档、测试、评论、例子 等,都非常欢迎。
一个好的起点是查看现有的 open issues。
为保持项目的质量,代码贡献至少应满足以下要求:
- 命名和文档:所有结构名称、字段名称和文档注释都来自 OpenAPI 规范。规范中没有名称的嵌套对象可自行命名。
- 测试: 对支持的更改需要进行测试和/或示例。现有示例、文档测试、单元测试和集成测试应与更改保持一致(如适用)。
- 范围:将范围限制为官方文档中可用的 API,例如 API 参考 或 OpenAPI 规范。其他 LLM 或 AI 提供商提供 OpenAI 兼容的 API,但它们可能并不完全一致。在这种情况下,以 OpenAI 规范为准。
- 一致性:保持库公开的所有“API”的代码风格一致;这将带来很好的开发者体验。
本项目遵守 Rust 行为准则
互补库
- openai-func-enums 提供过程宏,使得使用 OpenAI API 的工具调用功能的库更容易。它还提供了派生宏,可以添加到已有的 clap 应用子命令中,以便自然语言使用命令行工具。还支持 openai 的 并行工具调用,并允许你在多个工具调用并发运行或在自己的操作系统线程中选择。
- async-openai-wasm 提供 WASM 支持。
许可证
此项目使用 MIT 许可证。