9 个不稳定版本 (3 个破坏性更新)
0.4.1 | 2023年5月15日 |
---|---|
0.4.0 | 2023年5月15日 |
0.3.4 | 2023年4月5日 |
0.3.3 | 2023年3月31日 |
0.1.0 | 2023年3月22日 |
#1301 in Web编程
96KB
1.5K SLoC
OpenAI Rust库
OpenAI Rust库为Rust应用程序提供了方便地访问OpenAI API的方式。
安装
[dependencies]
rs_openai = { version = "0.4.1" }
功能
- 音频(包括文本和Json响应值)
- 聊天(包括SSE流)
- 补全(包括SSE流)
- 编辑
- 嵌入
- 引擎(已弃用)
- 文件
- 微调(包括SSE流)
- 图像
- 模型
- 内容审核
- 增强回退
- 支持Microsoft Azure端点
使用方法
该库需要使用您账户的秘密密钥进行配置,该密钥可在网站上找到。我们建议将其设置为环境变量。
# .env
OPENAI_API_KEY=sk-...
OPENAI_API_ORGANIZATION=org-...
以下是一个使用从环境变量加载的API密钥初始化库并创建补全的示例
use dotenvy::dotenv;
use rs_openai::{
chat::{ChatCompletionMessageRequestBuilder, CreateChatRequestBuilder, Role},
OpenAI,
};
use std::env::var;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
dotenv().ok();
let api_key = var("OPENAI_API_KEY").unwrap();
let client = OpenAI::new(&OpenAI {
api_key,
org_id: None,
});
let req = CreateChatRequestBuilder::default()
.model("gpt-3.5-turbo")
.messages(vec![ChatCompletionMessageRequestBuilder::default()
.role(Role::User)
.content("To Solve LeetCode's problem 81 in Rust.")
.build()?])
.build()?;
let res = client.chat().create(&req).await?;
println!("{:?}", res);
Ok(())
}
流
与ChatGPT类似,我们支持stream
模式用于创建聊天补全、创建补全和列出微调事件。在这些情况下,当可用时,令牌将作为数据-only 服务器发送事件发送。请查看以下代码的演示。
use dotenvy::dotenv;
use futures::StreamExt;
use rs_openai::{
chat::{ChatCompletionMessageRequestBuilder, CreateChatRequestBuilder, Role},
OpenAI,
};
use std::env::var;
use std::io::{stdout, Write};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
dotenv().ok();
let api_key = var("OPENAI_API_KEY").unwrap();
let client = OpenAI::new(&OpenAI {
api_key,
org_id: None,
});
// stream mode
let req = CreateChatRequestBuilder::default()
.model("gpt-3.5-turbo")
.messages(vec![ChatCompletionMessageRequestBuilder::default()
.role(Role::User)
.content("To Solve LeetCode's problem 81 in Rust.")
.build()?])
.stream(true)
.build()?;
let mut stream = client.chat().create_with_stream(&req).await?;
let mut lock = stdout().lock();
while let Some(response) = stream.next().await {
response.unwrap().choices.iter().for_each(|choice| {
if let Some(ref content) = choice.delta.content {
write!(lock, "{}", content).unwrap();
}
});
stdout().flush()?;
}
Ok(())
}
请参阅完整的API文档以获取所有可用函数的示例。
-
有关如何使用async-openai,请访问示例目录。
-
有关文档,请访问docs.rs/rs_openai。
要求
通常,我们希望支持我们的客户使用的Rust版本。如果您遇到任何版本问题,请在我们的支持页面上告诉我们。
贡献
此存储库的主要目的是继续发展OpenAI Rust库,使其更快、更易于使用。OpenAI Rust库的开发在GitHub上公开进行,我们感谢社区为错误修复和改进做出贡献。请阅读以下内容,了解您如何参与改进OpenAI Rust库。
行为准则
OpenAI Rust 库已经采纳了行为准则,我们期望项目参与者遵守。请阅读以下完整文本,以便了解哪些行为是可以接受的,哪些行为是不被容忍的。
贡献指南
阅读我们的贡献指南,了解我们的开发流程、如何提出错误修复和建议,以及如何构建和测试对 OpenAI Rust 库的更改。
良好问题
在提出问题之前,请务必阅读问题报告清单。不符合指南的问题可能会立即被关闭。
谢谢
作为一名 Rust 初学者,我获得了许多经验、思考和想法,都来自 64bit 的 async-openai,感谢你和你项目的工作!
许可证
OpenAI Rust 库根据 MIT 许可协议 许可。
依赖项
~9–22MB
~341K SLoC