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
每月下载量 804
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