#openai-api #openai #chat-completion #model #image #access #api-key

rs_openai

OpenAI Rust库为Rust应用程序提供了方便地访问OpenAI API的方式

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编程

MIT 许可证

96KB
1.5K SLoC

OpenAI Rust库

Crates.io Crates.io Crates.io docs.rs build rust-clippy analyze

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文档以获取所有可用函数的示例。

要求

通常,我们希望支持我们的客户使用的Rust版本。如果您遇到任何版本问题,请在我们的支持页面上告诉我们。

贡献

此存储库的主要目的是继续发展OpenAI Rust库,使其更快、更易于使用。OpenAI Rust库的开发在GitHub上公开进行,我们感谢社区为错误修复和改进做出贡献。请阅读以下内容,了解您如何参与改进OpenAI Rust库。

行为准则

OpenAI Rust 库已经采纳了行为准则,我们期望项目参与者遵守。请阅读以下完整文本,以便了解哪些行为是可以接受的,哪些行为是不被容忍的。

贡献指南

阅读我们的贡献指南,了解我们的开发流程、如何提出错误修复和建议,以及如何构建和测试对 OpenAI Rust 库的更改。

良好问题

在提出问题之前,请务必阅读问题报告清单。不符合指南的问题可能会立即被关闭。

谢谢

作为一名 Rust 初学者,我获得了许多经验、思考和想法,都来自 64bitasync-openai,感谢你和你项目的工作!

许可证

OpenAI Rust 库根据 MIT 许可协议 许可。

依赖项

~9–22MB
~341K SLoC