6 个版本
0.0.6 | 2024 年 7 月 28 日 |
---|---|
0.0.5 | 2024 年 7 月 1 日 |
0.0.4 | 2024 年 6 月 25 日 |
#131 在 机器学习
每月下载量 164
在 misan 中使用
43KB
693 行
Misanthropy
Misanthropy 是 Anthropic API 的 Rust 绑定集合,提供对 Claude 和其他 Anthropic 模型的便捷访问。它包含两个主要组件
misanthropy
: Anthropic API 的 Rust 客户端库misan
: 用于与 API 快速交互的命令行界面(CLI)工具
功能
- 简单的 Rust 接口,用于 Anthropic API
- 支持消息中的文本和图像内容
- 支持实时响应的流式传输
- 可配置的客户端,具有模型和令牌限制的默认值
- CLI 工具,用于从命令行快速与 API 交互
用法
库
以下是一个使用 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文件。
依赖项
~7-18MB
~259K SLoC