#语言模型 #llm #sdk #对话 #发送消息 #anthropic #API密钥

llm-bridge

使用通用接口与各种大型语言模型 (LLM) API 交互的 SDK

4 个版本

0.2.0 2024年7月28日
0.1.2 2024年7月9日
0.1.1 2024年5月29日
0.1.0 2024年5月27日

#912网页编程

Download history 259/week @ 2024-05-24 42/week @ 2024-05-31 31/week @ 2024-06-07 11/week @ 2024-06-14 1/week @ 2024-06-21 102/week @ 2024-07-05 13/week @ 2024-07-12 138/week @ 2024-07-26 7/week @ 2024-08-02

每月下载量 167

MIT 许可证

64KB
1K SLoC

LLM Bridge

Rust 的 LLM API 适配器 SDK

这是一个用于与各种大型语言模型 (LLM) API 交互的 Rust SDK,从 Anthropic API 开始。它允许您向语言模型发送消息并进行对话。

功能

  • 向 Anthropic API 发送单条消息并获取响应
  • 与 Anthropic 的语言模型进行多轮对话
  • 为每个请求自定义模型、最大令牌数和温度
  • 使用 Rust 结构体处理 API 错误并解析响应

支持的 API

目前,此 SDK 仅支持 Anthropic API。然而,计划在未来添加对其他语言模型 API 的支持。请持续关注更新!

安装

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

[dependencies]
llm-bridge = "x.x.x"

使用方法

首先,确保您已从 Anthropic 获取了 API 密钥。将 API 密钥设置为名为 ANTHROPIC_API_KEY 的环境变量。

发送单条消息

要向 Anthropic API 发送单条消息并获取响应

use llm_bridge::client::{ClientLlm, LlmClient};
use llm_bridge::error::ApiError;

#[tokio::main]
async fn main() {
    let api_key = "YOUR API KEY".to_string();
    let client_type = ClientLlm::OpenAI;
    let mut client = LlmClient::new(client_type, api_key);

    let response = client
        .request()
        .user_message("Hello, GPT!")
        .send()
        .await
        .expect("Failed to send message");
    println!("Response: {:?}", response);
    // Assert the response
    assert_eq!(response.role(), "assistant");
    assert_eq!(response.usage().input_tokens, 18);
    assert!(response.usage().output_tokens > 0);
    assert!(!response.first_message().is_empty());
}

另一个示例:使用 Anthropic 的 API 并覆盖请求上的某些默认设置

use llm_bridge::client::{ClientLlm, LlmClient};
use llm_bridge::error::ApiError;

#[tokio::main]
async fn main() {
    let api_key = "YOUR API KEY".to_string();
    let client_type = ClientLlm::Anthropic;
    let mut client = LlmClient::new(client_type, api_key);

    let response = client
        .request()
        .model("claude-3-haiku-20240307")
        .user_message("Hello, Claude!")
        .max_tokens(100)
        .temperature(1.0)
        .system_prompt("You are a haiku assistant.") // optional
        .send()
        .await
        .expect("Failed to send message");
    println!("Response: {:?}", response);
    // Assert the response
    assert_eq!(response.role(), "assistant");
    assert_eq!(response.model(), "claude-3-haiku-20240307");
    assert_eq!(response.usage().input_tokens, 18);
    assert!(response.usage().output_tokens > 0);
    assert!(!response.first_message().is_empty());
}

工具使用(函数调用)

LLM Bridge 现在支持工具使用(也称为 OpenAI 术语中的函数调用)。此功能允许您定义 LLM 可以用来执行特定任务的工具或函数。

创建工具

要创建工具,请使用 Tool 构建器

#[tokio::main]
async fn main() {
    use llm_bridge::tool::Tool;

    let weather_tool = Tool::builder()
        .name("get_weather")
        .description("Get the current weather in a given location")
        .add_parameter("location", "string", "The city and state, e.g. San Francisco, CA", true)
        .add_enum_parameter("unit", "The unit of temperature", false, vec!["celsius".to_string(), "fahrenheit".to_string()])
        .build()
        .expect("Failed to build tool");
}

使用 OpenAI 的工具

以下是如何使用 OpenAI 的 GPT 模型使用工具的示例 Note:如果使用 Anthropic LLM,则函数定义和响应处理方式相同。

use llm_bridge::client::{ClientLlm, LlmClient};
use llm_bridge::tool::Tool;

#[tokio::main]
async fn main() {
    let api_key = "your_openai_api_key".to_string();
    let client_type = ClientLlm::OpenAI;
    let mut client = LlmClient::new(client_type, api_key);

    let weather_tool = Tool::builder()
        .name("get_weather")
        .description("Get the current weather in a given location")
        .add_parameter("location", "string", "The city and state, e.g. San Francisco, CA", true)
        .add_enum_parameter("unit", "The unit of temperature", false, vec!["celsius".to_string(), "fahrenheit".to_string()])
        .build()
        .expect("Failed to build tool");

    let response = client
        .request()
        .add_tool(weather_tool)
        .model("gpt-4o")
        .user_message("What's the weather like in New York?")
        .system_prompt("You are a helpful weather assistant.")
        .send()
        .await
        .expect("Failed to send message");

    if let Some(tools) = response.tools() {
        for tool in tools {
            println!("Tool used: {}", tool.name);
            println!("Tool input: {:?}", tool.input);
        }
    } else {
        println!("No tools were used in this response");
    }

    println!("Response: {}", response.first_message());
}

在此示例中,我们定义了一个 get_weather 工具并将其添加到请求中。LLM 可能会根据需要使用此工具来获取用户问题的天气信息。

贡献

欢迎贡献!如果您发现任何问题或有改进建议,请打开一个问题或提交一个拉取请求。

依赖关系

~4–15MB
~214K SLoC