aizs

Crates.ioaizs
lib.rsaizs
version0.1.3
sourcesrc
created_at2025-02-02 18:41:06.38014
updated_at2025-02-02 19:02:13.015257
descriptionRust SDK for Chinese LLM APIs including Tongyi, DeepSeek, Wenxin,hunyuan, and Xinghuo
homepage
repository
max_upload_size
id1539788
size24,227
(1rr)

documentation

README

AIC AIZS API

这是一个用 Rust 编写的统一中文大语言模型 API 客户端库,支持多个主流的中文大语言模型服务,包括:

  • 阿里通义千问
  • 腾讯混元
  • 百度文心一言
  • 讯飞星火
  • DeepSeek

author

特性

  • 统一的 API 接口:所有模型共用同一套接口,便于切换和集成
  • 异步支持:基于 tokio 的异步实现,提供高性能的并发处理能力
  • 强类型系统:充分利用 Rust 的类型系统,提供类型安全的 API
  • 错误处理:使用 anyhow 提供清晰的错误处理机制
  • 超时控制:内置请求超时机制,防止请求挂起
  • 完整的测试用例:每个模型都配备了单元测试
  • 可扩展性:易于添加新的模型支持

支持的模型

阿里通义千问

  • 支持最新的通义千问大模型
  • 支持 qwen-turbo 等多个模型版本
  • 支持温度和最大令牌数调整

腾讯混元

  • 支持最新的腾讯混元大模型
  • 支持温度和 top_p 参数调整
  • 支持自定义模型参数

百度文心一言

  • 支持最新的文心一言大模型
  • 自动处理 access_token 获取和刷新
  • 支持对话上下文管理

讯飞星火

  • 支持最新的讯飞星火大模型
  • 支持自定义域名和参数配置
  • 提供完整的会话管理

DeepSeek

  • 支持最新的 DeepSeek 大模型
  • 支持自定义模型参数
  • 提供简单易用的接口

安装

在你的 Cargo.toml 文件中添加以下依赖:

[dependencies]
aic_aizs_api = "0.1.0"
tokio = { version = "1.0", features = ["full"] }

详细使用示例

基础用法

use aic_aizs_api::models::deepseek::DeepseekClient;
use aic_aizs_api::types::Message;
use aic_aizs_api::traits::LLMClient;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 创建客户端实例
    let client = DeepseekClient::new("your-api-key".to_string());

    // 准备消息
    let messages = vec![
        Message::system("You are a helpful assistant."),
        Message::user("What is Rust programming language?"),
    ];

    // 发送请求
    let response = client.chat(messages).await?;
    println!("Response: {}", response);

    Ok(())
}

多模型集成示例

use aic_aizs_api::{
    models::{
        deepseek::DeepseekClient,
        tongyi::TongyiClient,
        wenxin::WenxinClient,
    },
    traits::LLMClient,
    types::Message,
};

async fn chat_with_model(client: &impl LLMClient, message: &str) -> Result<String, Box<dyn std::error::Error>> {
    let messages = vec![
        Message::system("You are a helpful assistant."),
        Message::user(message),
    ];
    
    Ok(client.chat(messages).await?)
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 初始化不同的模型客户端
    let deepseek = DeepseekClient::new(std::env::var("DEEPSEEK_API_KEY")?);
    let tongyi = TongyiClient::new(std::env::var("TONGYI_API_KEY")?);
    let wenxin = WenxinClient::new(
        std::env::var("WENXIN_API_KEY")?,
        std::env::var("WENXIN_SECRET_KEY")?,
    );

    // 使用不同的模型
    let question = "什么是 Rust 编程语言?";
    
    println!("DeepSeek 回答:{}", chat_with_model(&deepseek, question).await?);
    println!("通义千问回答:{}", chat_with_model(&tongyi, question).await?);
    println!("文心一言回答:{}", chat_with_model(&wenxin, question).await?);

    Ok(())
}

环境变量配置

各模型需要配置对应的环境变量。在 Windows 系统中,可以通过以下方式设置:

# DeepSeek
$env:DEEPSEEK_API_KEY="your_api_key"

# 腾讯混元
$env:HUNYUAN_APP_ID="your_app_id"
$env:HUNYUAN_API_KEY="your_api_key"

# 阿里通义千问
$env:TONGYI_API_KEY="your_api_key"

# 百度文心一言
$env:WENXIN_API_KEY="your_api_key"
$env:WENXIN_SECRET_KEY="your_secret_key"

# 讯飞星火
$env:XINGHUO_APP_ID="your_app_id"
$env:XINGHUO_API_KEY="your_api_key"
$env:XINGHUO_API_SECRET="your_api_secret"

API 文档

LLMClient Trait

所有模型客户端都实现了 LLMClient trait:

#[async_trait]
pub trait LLMClient {
    async fn chat(&self, messages: Vec<Message>) -> Result<String>;
}

Message 类型

用于发送消息的结构体:

pub struct Message {
    pub role: String,
    pub content: String,
}

impl Message {
    // 创建系统消息
    pub fn system(content: impl Into<String>) -> Self;
    
    // 创建用户消息
    pub fn user(content: impl Into<String>) -> Self;
    
    // 创建助手消息
    pub fn assistant(content: impl Into<String>) -> Self;
}

错误处理

库使用 anyhow 进行错误处理,所有错误都会被包装成 Result 类型返回。常见错误包括:

  • API 密钥无效:检查环境变量中的 API 密钥是否正确设置
  • 网络连接问题:检查网络连接和代理设置
  • API 调用超时:可能需要调整超时设置或检查网络状况
  • 服务端错误:查看具体的错误信息和 HTTP 状态码
  • 响应解析错误:通常是 API 响应格式发生变化导致

性能优化建议

  1. 合理设置超时时间
  2. 使用连接池
  3. 启用压缩
  4. 复用客户端实例
  5. 使用异步并发处理多个请求

常见问题

  1. API 密钥配置问题

    • 确保环境变量正确设置
    • 检查密钥格式是否正确
  2. 网络连接问题

    • 检查防火墙设置
    • 确认代理配置
  3. 响应解析错误

    • 查看原始响应内容
    • 确认 API 版本是否兼容

版本历史

  • v0.1.0
    • 初始版本发布
    • 支持五大中文大语言模型
    • 提供统一的异步接口

贡献指南

  1. Fork 项目
  2. 创建特性分支
  3. 提交更改
  4. 推送到分支
  5. 创建 Pull Request

许可证

MIT License

鸣谢

感谢以下项目和团队:

  • Rust 语言团队
  • tokio 异步运行时
  • reqwest HTTP 客户端
  • serde 序列化框架
Commit count: 0

cargo fmt