15次发布

0.1.5 2024年7月23日
0.1.4 2024年6月9日
0.1.3 2024年5月17日
0.0.9 2024年5月2日
0.0.7 2024年3月31日

网络编程 中排名 378

Download history 296/week @ 2024-05-03 111/week @ 2024-05-10 513/week @ 2024-05-17 122/week @ 2024-05-24 112/week @ 2024-05-31 313/week @ 2024-06-07 127/week @ 2024-06-14 115/week @ 2024-06-21 121/week @ 2024-06-28 198/week @ 2024-07-05 121/week @ 2024-07-12 201/week @ 2024-07-19 171/week @ 2024-07-26 193/week @ 2024-08-02 233/week @ 2024-08-09 170/week @ 2024-08-16

每月下载量 804

MIT 许可证

25KB
401

Rust Anthropic SDK

Rust Anthropic SDK 为您提供了一个简单高效的方式与 Anthropic API 进行交互,允许您异步发送请求并处理响应。此 SDK 支持流式和非流式响应,适用于不同的使用场景。

功能 ✨

  • 异步请求处理 🚀
  • 支持流式 API 响应 🌊
  • 易于配置身份验证和请求参数 🔧
  • 具有详细信息的错误处理 🛠️💬
  • 可选的详细模式以输出原始响应输出 📃

安装

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

[dependencies]
anthropic_sdk = "0.1.5"
dotenv = "0.15.0"
serde_json = "1.0"
tokio = { version = "1.0", features = ["full"] }

使用方法

基本使用

对于非流式响应,您可以使用 SDK 如下所示

// examples/basic_usage.rs

use anthropic_sdk::Client;
use dotenv::dotenv;
use serde_json::json;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    dotenv().ok();
    let secret_key = std::env::var("ANTHROPIC_API_KEY").unwrap_or_default();

    let request = Client::new()
        .version("2023-06-01")
        .auth(secret_key.as_str())
        .model("claude-3-opus-20240229")
        .messages(&json!([
            {"role": "user", "content": "Write me a poem about bravery"}
        ]))
        .max_tokens(1024)
        // .verbose(true) // Uncomment to return the response as it is from Anthropic
        .build()?;

    if let Err(error) = request
        .execute(|text| async move { println!("{text}") })
        .await
    {
        eprintln!("Error: {error}");
    }

    Ok(())
}

此示例演示了如何向 Anthropic API 发送请求并打印响应。

流式使用

对于流式响应,SDK 可以如下使用

// examples/streaming_usage.rs

use anthropic_sdk::Client;
use dotenv::dotenv;
use serde_json::json;
use std::sync::{Arc, Mutex};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    dotenv().ok();
    let secret_key = std::env::var("ANTHROPIC_API_KEY").unwrap_or_default();

    let request = Client::new()
        .auth(secret_key.as_str())
        .model("claude-3-opus-20240229")
        .messages(&json!([
            {"role": "user", "content": "Write me a poem about bravery"}
        ]))
        .system("Make it sound like Edgar Allan Poe")
        .temperature(0.1)
        .max_tokens(1024)
        .stream(true)
        .build()?;

    let message = Arc::new(Mutex::new(String::new()));
    let message_clone = message.clone();

    if let Err(error) = request
        .execute(move |text| {
            let message_clone = message_clone.clone();
            async move {
                println!("{text}");

                {
                    let mut message = message_clone.lock().unwrap();
                    *message = format!("{}{}", *message, text);
                }
            }
        })
        .await
    {
        eprintln!("Error: {error}");
    }

    let final_message = message.lock().unwrap();
    println!("Message: {}", *final_message); // or get the whole message at the end

    Ok(())
}

在此示例中,响应在流式传输时进行处理。一旦收到文本块,就会立即打印,整个消息在最后也可用。

工具使用

要使用 Anthropic Tool use,SDK 可以如下使用

// examples/tool_use_usage.rs

use anthropic_sdk::{Client, ToolChoice};
use dotenv::dotenv;
use serde_json::json;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    dotenv().ok();
    let secret_key = std::env::var("ANTHROPIC_API_KEY").unwrap_or_default();

    let request = Client::new()
        .auth(secret_key.as_str())
        .model("claude-3-opus-20240229")
        .beta("tools-2024-04-04") // add the beta header
        .tools(&json!([
          {
            "name": "get_weather",
            "description": "Get the current weather in a given location",
            "input_schema": {
              "type": "object",
              "properties": {
                "location": {
                  "type": "string",
                  "description": "The city and state, e.g. San Francisco, CA"
                }
              },
              "required": ["location"]
            }
          }
        ]))
        .tool_choice(ToolChoice::Auto)
        .messages(&json!([
          {
            "role": "user",
            "content": "What is the weather like in San Francisco?"
          }
        ]))
        .max_tokens(1024)
        .build()?;

    if let Err(error) = request
        .execute(|text| async move { println!("{text}") })
        .await
    {
        eprintln!("Error: {error}");
    }

    Ok(())
}

此示例演示了如何使用 Anthropic API 中的工具执行特定任务,如获取天气。

字段说明

  • version: (可选) 指定要使用的 API 版本。
  • auth: 设置 API 的身份验证令牌。
  • model: 定义用于生成响应的模型。
  • messages: 包含 API 处理的输入消息。
  • max_tokens: (可选) 限制响应中的标记数量。
  • stream: (可选) 启用流式模式以实时接收响应。
  • temperature: (可选) 调整响应生成的随机性。
  • system: (可选) 为响应提供额外的上下文或指令。
  • tools: (可选) 指定用于专用任务的工具。
  • tool_choice: (可选) 指定在多个工具可用时使用的工具。
  • verbose:(可选)当设置为true时,返回API的原始响应。
  • metadata:(可选)包含有关请求的附加信息。
  • stop_sequences:(可选)指定API应停止生成更多令牌的序列。
  • top_k:(可选)限制模型只从最可能的下一个K个令牌中进行采样。
  • top_p:(可选)使用核采样来限制模型的累积概率。

配置

在运行示例之前,请确保在项目根目录下创建一个.env文件并设置您的Anthropic API密钥

ANTHROPIC_API_KEY=your_api_key_here

或者,您可以在系统中设置ANTHROPIC_API_KEY环境变量。

功能请求 📬

如果您有任何想法或对新功能的需求,我们非常乐意听取您的意见!请将您的建议发送至[email protected],我们一定会考虑在未来的更新中采纳。您的意见对我们改进非常重要!🌟🚀

依赖项

~6–17MB
~252K SLoC