1 个不稳定版本
0.0.6 | 2024年7月28日 |
---|
187 在 命令行工具
141 每月下载量
62KB
1K SLoC
Misanthropy
Misanthropy 是 Anthropic API 的 Rust 绑定集合,提供对 Claude 和其他 Anthropic 模型的便捷访问。它包含两个主要组件
misanthropy
:Anthropic API 的 Rust 客户端库misan
:用于与 API 快速交互的命令行界面 (CLI) 工具
功能
- Anthropic API 的简单、惯用的 Rust 接口
- 支持消息中的文本和图像内容
- 支持实时响应的流式传输
- 可配置的客户端,具有模型和令牌限制的默认值
- 用于从命令行快速与 API 交互的 CLI 工具
用法
库
以下是使用 misanthropy
库的基本示例
use misanthropy::{Anthropic, MessagesRequest, Content};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Anthropic::from_env()?;
let mut request = MessagesRequest::default();
request.add_user(Content::text("Hello, Claude!"));
let response = client.messages(request).await?;
println!("{}", response.format_nicely());
Ok(())
}
有关更多示例,请查看 misanthropy
包中的 examples
目录。这些示例演示了库的各种功能和用例。
CLI
misan
CLI 工具提供了与 Anthropic API 交互的命令行界面。有关使用说明,请运行
misan --help
配置
ANTHROPIC_API_KEY
:使用您的 Anthropic API 密钥设置此环境变量。- 默认模型和最大令牌可以在创建
Anthropic
客户端时设置或按请求覆盖。
高级功能
流式响应
该库支持实时交互的流式响应
let mut stream = client.messages_stream(request)?;
while let Some(event) = stream.next().await {
match event {
Ok(event) => {
// Handle the streaming event
}
Err(e) => eprintln!("Error: {}", e),
}
}
高级功能
使用工具
该库支持在对话中定义和使用工具。工具使用 schemars
包定义,以生成工具输入的 JSON 架构。
- 首先,将
schemars
添加到依赖项
[dependencies]
schemars = "0.8"
- 定义您的工具输入结构并派生
JsonSchema
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
/// Get the current weather for a location.
#[derive(JsonSchema, Serialize, Deserialize)]
struct GetWeather {
/// The city and country, e.g., "London, UK"
location: String,
/// Temperature unit: "celsius" or "fahrenheit"
unit: Option<String>,
}
- 从您的输入结构创建一个
Tool
use misanthropy::{Anthropic, MessagesRequest, Tool};
let weather_tool = Tool::new::<GetWeather>();
- 将工具添加到您的请求
let request = MessagesRequest::default()
.with_tool(weather_tool)
.with_system("You can use the GetWeather tool to check the weather.");
- 当 AI 使用工具时,您可以反序列化输入
if let Some(tool_use) = response.content.iter().find_map(|content| {
if let Content::ToolUse(tool_use) = content {
Some(tool_use)
} else {
None
}
}) {
if tool_use.name == "GetWeather" {
let weather_input: GetWeather = serde_json::from_value(tool_use.input.clone())?;
println!("Weather requested for: {}", weather_input.location);
// Here you would typically call an actual weather API
}
}
这种方法允许您定义强类型工具输入,AI 可以使用它,同时也在您的代码中提供了处理工具使用的方法。
许可证
该项目采用 MIT 许可证 - 请参阅 LICENSE 文件以获取详细信息。
依赖项
~8–20MB
~296K SLoC