5个版本

0.1.4 2024年8月5日
0.1.3 2024年8月2日
0.1.2 2024年8月1日
0.1.1 2017年8月27日
0.1.0 2017年8月27日

#923 in 网络编程

Download history 232/week @ 2024-07-29 151/week @ 2024-08-05

每月383次下载

MIT许可证

510KB
5.5K SLoC

OpenAI

Crates.io Documentation

OpenAI库为Rust应用提供了访问OpenAI REST API的便捷途径。该库旨在尽可能紧密地遵循Python和Node.js官方OpenAI SDK的实现。然而,它是不官方的,并且不由OpenAI维护。

注意:此项目仍在开发中,不应在生产环境中使用,结构的多方面可能会改变。

文档

REST API文档可在platform.openai.com找到。该库的完整API可在docs.rs中找到。

安装

将以下内容添加到您的Cargo.toml

[dependencies]
open_ai = "0.1.4"

用法

该库的完整API可在文档中找到。

use open_ai::{OpenAI, ClientOptions};
use open_ai::resources::chat::{ChatCompletionContent::{Multiple, Text},
    ChatCompletionContentPart::Image, ChatCompletionCreateParams, Detail,
    ChatCompletionMessageParam::{Assistant, System, User}, ImageURL,
};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let openai = OpenAI::new(ClientOptions::new())?;

    let completion = openai.chat.completions.create(ChatCompletionCreateParams {
        messages: vec![System{ content: "You are a helpful assistant.", name: None },
            User{ content: Text("Who won the world series in 2020?"), name: None },
            Assistant{ content: Some("The Los Angeles Dodgers won the World Series in 2020."), name: None, tool_calls: None },
            User{ content: Text("Where was it played?"), name: None }],
        model: "gpt-4o-mini",
        ..Default::default()
    }).await?;

    println!("{:?}", completion);
    Ok(())
}

虽然您可以直接提供api_key,但我们建议使用环境变量以保持API密钥安全。

示例

请参考示例目录以获取使用示例。

OpenAI助手Beta

Crab AI库包括对目前处于beta阶段的OpenAI助手API的支持。此功能允许您使用助手创建和管理线程、消息和运行。助手API旨在帮助构建能够以更动态和上下文感知的方式与用户交互的对话式代理。

示例:创建线程和消息

以下示例演示了如何使用助手API创建线程并在其中添加消息。

let thread = openai.beta.threads.create(ThreadCreateParams::default()).await?;

let message = openai.beta.threads.messages.create(
    &thread.id,
    MessageCreateParams {
        role: message_create_params::Role::User,
        content: message_create_params::Content::Text("I need to solve the equation `3x + 11 = 14`. Can you help me?".to_string()),
        ..Default::default()
    },
    None,
).await?;

此示例展示了如何使用线程初始化对话并向其中添加消息。

创建运行并轮询完成

以下示例演示了如何使用助手API创建运行并轮询,直到其达到终端状态。

let run = openai.beta.threads.runs.create_and_poll(
    &thread.id,
    RunCreateParams {
        assistant_id: "asst_ABcDEFgH12345678910xZZZz".to_string(),
        instructions: Some("Please address the user as Jane Doe. The user has a premium account.".to_string()),
        ..Default::default()
    },
    None
).await?;

if run.status == RunStatus::Completed {
    let messages = openai.beta.threads.messages.list(&run.thread_id, None, None).await?;

    for message in messages.data.iter().rev() {
        match &message.content.first().unwrap() {
            messages::MessageContent::Text { text } => {
                println!("{:?} > {:?}", message.role, text.value);
            }
            _ => {}
        }
    }
}

通过整合这些功能,open_ai库为利用OpenAI API的最新功能(包括目前处于beta阶段的助手API)提供了一个强大的接口。

依赖

~7–19MB
~283K SLoC