#async-client #messages #anthropic #async-stream #stream #client #client-key

misanthropic

Anthropic Messages API 的异步、易于使用的客户端

1 个不稳定版本

新版本 0.1.0 2024年8月23日

#2#client-key

MIT 许可证

62KB
1K SLoC

misanthropic

是一个非官方的简单、易于使用的 Anthropic Messages API 客户端。

使用方法

流式传输

// Create a client. `key` will be consumed, zeroized, and stored securely.
let client = Client::new(key)?;

// Request a stream of events or errors. `json!` can be used, a `Request`, or a
// combination of strings and concrete types like `Model`. All Client request
// methods accept anything serializable for maximum flexibility.
let stream = client
    // Forces `stream=true` in the request.
    .stream(json!({
      "model": Model::Sonnet35,
      "max_tokens": args.max_tokens,
      "temperature": 0,
      "system": args.system,
      "messages": [
        {
          "role": Role::User,
          "content": specs,
        }
      ],
    }))
    .await?
    // Filter out rate limit and overloaded errors. This is optional but
    // recommended for most use cases. The stream will continue when the
    // server is ready. Otherwise the stream will include these errors.
    .filter_rate_limit()
    // Filter out everything but text pieces (and errors).
    .text();

// Collect the stream into a single string.
let content: String = stream
    .try_collect()
    .await?;

单个消息

// Create a client. `key` will be consumed and zeroized.
let client = Client::new(key)?;

// Request a single message. The parameters are the same as the streaming
// example above. If a value is `None` it will be omitted from the request.
// This is less flexible than json! but some may prefer it. A Builder pattern
// is not yet available but is planned to reduce the verbosity.
let message = client
    .message(Request {
        model: Model::Sonnet35,
        messages: vec![Message {
            role: Role::User,
            content: args.prompt.into(),
        }],
        max_tokens: 1000.try_into().unwrap(),
        metadata: serde_json::Value::Null,
        stop_sequences: None,
        stream: None,
        system: None,
        temperature: Some(1.0),
        tool_choice: None,
        tools: None,
        top_k: None,
        top_p: None,
    })
    .await?;

println!("{}", message);

功能

  • 异步但不直接依赖 tokio
  • 流式响应
  • 消息响应
  • 支持图像,无论是否有 image crate
  • 消息的 Markdown 格式化,包括图像
  • 支持提示缓存
  • 支持自定义请求和端点
  • 支持 Amazon Bedrock
  • 支持 Vertex AI

常见问题解答

  • 为什么叫 misanthropic 真的没有原因。我只是喜欢这个词。Anthropic 既是公司名也是表示“与人类有关”的词。这个包既不是官方的,也与人类无关,所以就叫 misanthropic
  • reqwest 是否依赖 tokio? 在某些平台上是的。
  • 能否与 Amazon 或 Vertex 一起使用 misanthropic 目前还不能,但它已在路线图上。目前,Client 支持自定义端点,可以直接访问内部的 reqwest::Client 来对头部等进行必要的调整。
  • 这个包是否经过审计? 没有,但欢迎审计。已尽力确保安全和隐私。API 密钥使用 memsecurity 包在内存中加密,任何包含敏感副本的头信息都被标记为敏感。rustls 是一个可选功能,推荐用于安全。默认开启。

依赖项

~7–19MB
~284K SLoC