llm
Rust语言的多后端LLM统一SDK,一套API对接10+主流AI提供商
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
Rust语言的多后端LLM统一SDK,一套API对接10+主流AI提供商
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:你是一个 Rust 工程师,正在开发一个 AI 应用。项目需要同时调用 GPT-4o 处理复杂推理、Claude 3.5 Sonnet 做代码审查、Ollama 本地跑一个轻量模型做隐私敏感任务——按照传统做法,你得同时集成 OpenAI SDK、Anthropic SDK、Ollama SDK,维护三套认证、三套错误处理、三套 API 签名逻辑。代码散乱、升级维护成本极高。
graniet/llm 就是来解决这个问题的:它用 Rust 语言实现了对 14 个主流 LLM / Agent / 语音提供商的统一抽象,开发者只需要学会一套 Builder API,就能在这 14 个后端之间自由切换,所有底层差异都被 trait 适配器层抹平。
这个项目由 Tristan Granier(Jared Kofron 协助)开发维护,GitHub 显示项目非常活跃——最后代码推送在 2026 年 6 月 6 日,每隔几天就有 commit 更新。MIT 许可证允许商用,当前已获得 356 颗 GitHub Stars 和 87 个 Fork。
值得注意的是,该 crate 的名字 llm 之前属于另一个已归档项目 rustformers/llm。当前实现是一个全新且完全不同的库,开发者专门在 README 中做了声明,避免用户混淆。这说明作者对 crate 命名权有清晰的规划,而非随意占用。
graniet/llm 的架构设计采用了经典的 Trait-based Adapter Pattern,核心是两个统一接口 trait:
ChatProvider:统一聊天补全,屏蔽各后端消息格式差异(OpenAI 的 messages array 和 Anthropic 的 roles 格式完全不同,适配器层负责转换)CompletionProvider:统一文本补全接口项目用 Rust 的条件编译特性(feature flags)管理各后端的依赖,按需启用 feature 避免依赖冗余。例如 cargo add llm --features openai,anthropic,agent 即可只引入需要的依赖。
支持的提供商列表:
| 类别 | 提供商 |
|---|---|
| 通用 LLM | OpenAI、Anthropic Claude、Google Gemini、DeepSeek、xAI、Groq、Cohere、Mistral、OpenRouter、HuggingFace |
| 本地/私有 | Ollama |
| 云服务 | AWS Bedrock、Azure OpenAI |
| 语音 | ElevenLabs |
总计 14 个后端,涵盖了从闭源商业 API 到开源本地部署的主流选择。
依赖层关键库:
reqwest:异步 HTTP 客户端,带连接池和流式响应tokio:异步运行时,#[async_trait] 实现 trait 异步方法serde + serde_json:序列化/反序列化,所有 API 请求和响应都用 JSONaxum(可选):REST API Server 模式,提供 OpenAI 标准格式端点clap(CLI):命令行参数解析graniet/llm 的 Chain 模块是其最有特色的功能之一,允许将多个 LLM 调用串联成流水线。每个步骤可以选用不同的后端——第一步用 GPT-4o 做初步分析,第二步用 Claude 做深度推理,第三步用 Ollama 本地模型做总结,全部在一行链式调用里完成。Chain 模块支持 Chat 和 Completion 两种执行模式,并内置了日志记录能力(chain_logging_example.rs)。
agent feature 启用的 AgentBuilder 模块提供了更高级的智能体抽象:
validated_llm 模块)这使得构建多 Agent 协作系统成为可能,多个智能体通过共享内存通信,各自使用不同的 LLM 后端。
evaluator 模块支持同时向多个 LLM 提供商发送相同请求,并行收集响应后按评分函数排序,挑选最佳结果。这对于需要做模型选型或 A/B 测试的场景非常有价值——一行代码就能完成"让 GPT-4o、Claude 3.5、Gemini Pro 同时回答同一问题,取评分最高者"的流程。
除了核心的聊天和补全,graniet/llm 还覆盖了以下模态:
resilient_llm 模块封装了重试 + 指数退避 + jitter 逻辑,当 LLM API 临时不可用或触发速率限制时自动重试,无需开发者手动处理。这对生产环境至关重要。
graniet/llm 提供了完整的命令行工具,安装方式:
cargo install llm
常用命令:
llm # 交互式聊天
llm openai:gpt-4o # 指定提供商和模型
llm set OPENAI_API_KEY xxx
llm default openai:gpt-4o
llm --provider anthropic --model claude-3-5-sonnet --temperature 0.7
还支持管道输入:echo "Hello World" | llm,以及剪贴板集成(需要 arboard feature)。
启用 api feature 后,可以用一行命令将 graniet/llm 作为 REST API 服务器启动,提供 OpenAI 标准格式的端点:
cargo install llm --features api
llm serve
适合将 LLM 能力以 HTTP 接口形式暴露给其他服务或前端应用。
graniet/llm 是一个纯 Rust 库/CLI 项目,不提供 Dockerfile,也没有 Web UI,需要 Rust toolchain 环境。
Rust 开发者(库集成):在 Cargo.toml 中添加一行即可:
llm = { version = "1.3.8", features = ["openai", "anthropic", "agent"] }
非 Rust 用户(CLI):需要先安装 Rust(rustup),然后 cargo install llm,约 10 分钟可完成。
REST API 模式:需要额外启用 api feature,构建时间更长。
整体部署难度为"简单",前提是有 Rust 环境。对纯 Python/Node.js 团队来说,有一定门槛。
graniet/llm 存在几个值得注意的局限:
secrecy crate 保护敏感信息,但项目没有提供密钥加密存储方案,需要用户自行管理graniet/llm 代表了一个明确的趋势:LLM 能力的统一抽象层正在从 Python 生态向 Rust 生态延伸。此前 Python 有 LangChain、LiteLLM 等成熟方案,但 Rust 侧一直缺乏同类产品。graniet/llm 以 MIT 许可证 + 持续活跃 commit + 14 个后端支持,在 Rust AI 工具链中占据了独特生态位。
对于已经在 Rust 项目中需要集成 AI 能力的开发者,这是目前最好的选择——它比手工适配每个 API 至少节省 80% 的集成工作量。