1 个不稳定版本

0.0.6 2024年7月28日

187命令行工具

Download history 139/week @ 2024-07-27 2/week @ 2024-08-03

141 每月下载量

MIT 许可证

62KB
1K SLoC

Misanthropy

Crates.io docs.rs Rust

Misanthropy 是 Anthropic API 的 Rust 绑定集合,提供对 Claude 和其他 Anthropic 模型的便捷访问。它包含两个主要组件

  1. misanthropy:Anthropic API 的 Rust 客户端库
  2. 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 架构。

  1. 首先,将 schemars 添加到依赖项
[dependencies]
schemars = "0.8"
  1. 定义您的工具输入结构并派生 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>,
}
  1. 从您的输入结构创建一个 Tool
use misanthropy::{Anthropic, MessagesRequest, Tool};

let weather_tool = Tool::new::<GetWeather>();
  1. 将工具添加到您的请求
let request = MessagesRequest::default()
    .with_tool(weather_tool)
    .with_system("You can use the GetWeather tool to check the weather.");
  1. 当 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