2 releases
0.1.3 | Nov 10, 2024 |
---|---|
0.1.2 | Nov 10, 2024 |
#319 in #llm
83 downloads per month
24KB
536 lines
AIC AIZS API
这是一个用 Rust 编写的统一中文大语言模型 API 客户端库,支持多个主流的中文大语言模型服务,包括:
- 阿里通义千问
- 腾讯混元
- 百度文心一言
- 讯飞星火
- DeepSeek
author
- 作者:天边云
- 网址:http://www.aizs.com
特性
- 统一的 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 响应格式发生变化导致
性能优化建议
- 合理设置超时时间
- 使用连接池
- 启用压缩
- 复用客户端实例
- 使用异步并发处理多个请求
常见问题
-
API 密钥配置问题
- 确保环境变量正确设置
- 检查密钥格式是否正确
-
网络连接问题
- 检查防火墙设置
- 确认代理配置
-
响应解析错误
- 查看原始响应内容
- 确认 API 版本是否兼容
版本历史
- v0.1.0
- 初始版本发布
- 支持五大中文大语言模型
- 提供统一的异步接口
贡献指南
- Fork 项目
- 创建特性分支
- 提交更改
- 推送到分支
- 创建 Pull Request
许可证
MIT License
鸣谢
感谢以下项目和团队:
- Rust 语言团队
- tokio 异步运行时
- reqwest HTTP 客户端
- serde 序列化框架
Dependencies
~7–19MB
~258K SLoC