6 个版本

0.0.6 2024 年 7 月 28 日
0.0.5 2024 年 7 月 1 日
0.0.4 2024 年 6 月 25 日

#131机器学习

Download history 229/week @ 2024-06-22 173/week @ 2024-06-29 36/week @ 2024-07-06 149/week @ 2024-07-27 15/week @ 2024-08-03

每月下载量 164
misan 中使用

MIT 许可证

43KB
693

Misanthropy

Crates.io docs.rs Rust

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

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

  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文件。

依赖项

~7-18MB
~259K SLoC