模型 / 数据集
0xPlaygrounds/rig avatar
0xPlaygrounds/rig

Rig:用 Rust 写 LLM 应用,先想清楚这三件事再动手

⚙️🦀 Build modular and scalable LLM Applications in Rust

8,640 个 Star962 个 ForkRustMIT

秒懂

它是什么?
Rig 是一个 Rust 编写的 LLM 应用框架,把 20 多家模型提供商和 10 多种向量库收敛到同一套接口后面。本文基于其 README 与仓库结构,分析它的分层设计、上手成本,以及它在快速迭代期里隐藏的维护风险。
适合谁用?
Rig 适合那些已经确定用 Rust 写后端,并且需要同时对接多个模型提供商或向量库的团队。它的统一接口能省掉大量胶水代码,GenAI 语义兼容对可观测性有要求的项目也是实打实的加分项。
能商用吗?
可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库在最近一天内有新的提交。
用什么语言写的?
主要是 Rust(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

为什么 Rust 生态需要另一个 LLM 框架

Python 生态里 LangChain 这类工具已经成了事实标准,但 Rust 这边一直缺一个位置对等的选择。Rig 要填的坑很具体:当你需要同时对接 OpenAI、Anthropic、本地部署的模型,再配上几个不同的向量数据库时,每一家都有自己的 SDK、自己的请求格式、自己的错误处理。这类胶水代码写起来不难,但维护起来非常烦人。Rig 的思路是把这些差异全部挡在统一接口后面,让你面向一套抽象编程,而不是面向五六套 SDK 编程。从 README 的定位看,它服务的是那些已经决定用 Rust 做后端、又不希望被某一家云厂商绑死的团队。值得注意的是,它的适用对象不是初学者,而是有明确工程约束的开发者。

rig-core 与 rig-agent 的分层逻辑

Rig 的架构值得仔细看,它把两层东西分得很清楚。rig-core 这层是 provider-neutral 的,包含消息定义、completion 模型、可移植的工具接口、memory 和向量存储的契约,以及内置的 provider 映射。这一层不关心你怎么编排 Agent,它只负责定义 LLM 世界里那些通用概念。rig-agent 则完全不同,它装的是 classic builder、prompt 和 streaming 的 trait、类型化钩子、上下文工具、结果抽取,还有一个可序列化的 AgentRun 状态机。这个状态机意味着 Agent 的运行状态可以被保存和恢复,这为流程中断、恢复、审计提供了基础。根目录的 rig facade 把两层都重新导出,所以大多数代码只需要依赖 rig 一个 crate。这种拆分的好处是,如果你只想用 Rig 做纯 completion 调用而不需要 Agent 编排,可以只依赖 rig-core,把不需要的东西挡在编译单元之外。

从 README 能看到的运行方式

仓库没有在 README 里给出完整的代码示例,但从文档结构和 crate 布局可以还原出基本用法。Rig 的入口是 rig 这个 facade crate,通过 cargo add rig 即可引入。核心概念是构建一个 provider 的 client,然后通过 builder 模式创建 completion 请求或 Agent。文档提到 classic agent runtime 默认启用,这意味着开箱就能跑多轮对话和流式输出。对于 embedding 和向量检索,Rig 提供了统一的 vector store 接口,支持 10 种以上后端。一个典型的调用链大概是:先初始化某个 provider 的 client,然后调用 completion 方法传入模型名和消息,或者用 agent builder 配置工具和上下文。具体的方法签名和 trait 定义在 docs.rs 的 API 参考里,README 没有展开,实际使用时需要去翻 API 文档。

版本节奏快,破坏性变更是常态

这是 Rig 最需要被认真对待的一点。仓库里有一个显眼的警告框,原文是 Here be dragons,直接告诉你未来几个月会有一大波功能上线,而且后续更新必定包含破坏性变更。这不是客套话,从 release 记录看,v0.42.0 发布于 2026 年 8 月 17 日,v0.41.0 是 7 月 28 日,v0.40.0 是 7 月 11 日,不到两个月发了三个版本。版本号停留在 0.x 阶段本身就意味着 API 还没有稳定承诺。对于生产项目,这意味着每次升级都要重新审视 API 变更,做好迁移准备。项目方说会标注变更并提供迁移路径,但迁移路径写得再清楚,也改变不了你需要花时间去改代码这个事实。如果你的团队没有专门的人跟进上游变更,Rig 的迭代速度本身就会成为一种维护负担。

WASM 支持的边界比看起来更窄

Rig 宣称支持浏览器 WASM,也就是 wasm32-unknown-unknown 目标,这听起来很吸引人。但仔细看 README 里的限制说明,支持范围只覆盖 portable core 和 classic runtime。WASI 不支持,rig-rmcp 和 MCP 相关功能仅限原生环境。这意味着如果你想把 Agent 跑到浏览器里,基础的消息处理和简单的 Agent 编排可以,但一旦涉及 MCP 工具调用就走不通了。这个边界对实际项目影响很大,因为很多 Agent 应用的价值恰恰在于通过 MCP 连接外部工具。如果你计划做纯前端的 LLM 应用,需要先确认自己的功能需求是否落在 WASM 支持矩阵内,而不是假设所有功能都能在浏览器里跑。文档里提到了完整的支持矩阵在 crates/rig-agent/README.md 里,动手之前应该先去核对。

可观测性:GenAI 语义兼容的含金量

Rig 宣称完全兼容 OpenTelemetry 的 GenAI Semantic Convention。这条值得单独拿出来说,因为它解决的是一个非常实际的问题。当你的应用同时调用多家模型提供商时,每家返回的元数据格式都不一样,日志和指标很难统一处理。GenAI Semantic Convention 提供了一套标准化的属性命名和语义定义,比如 token 用量、模型名称、请求延迟这些字段都有统一的规范。Rig 直接兼容这套规范,意味着你不需要自己写一层转换逻辑就能把不同 provider 的调用数据统一送进可观测性系统。对于有合规要求或者需要精细成本核算的团队,这能省下不少事。不过 README 没有展开说明这套兼容具体覆盖了哪些字段和操作,实际使用前还是需要查阅 OpenTelemetry 的规范文档和 Rig 的 API 参考来确认。

谁在用,以及这个名单说明了什么

README 列出了一批使用 Rig 的公司和项目,这个名单本身能读出一些信息。St Jude 的 proteinpaint 是基因组学可视化工具,用它做聊天机器人。Neon 的 app.build Agent 后端用 Rust 重写。ilert 把 Rig 当作多 provider 抽象层用在它的 agentic LLM proxy 里。Nethermind 的 NINE 框架也基于 Rig。这些用例有一个共同点:它们都不是简单的 demo 项目,而是有真实用户的生产系统,且大部分是开发者工具或数据密集型应用。这个名单里没有传统的 CRUD 业务系统,也没有电商类应用。这说明 Rig 目前的吸引力集中在开发者工具、数据分析和基础设施类项目上,这些领域的团队本来就更愿意用 Rust,也更看重多 provider 灵活性和性能。

编辑结论

Rig 适合那些已经确定用 Rust 写后端,并且需要同时对接多个模型提供商或向量库的团队。它的统一接口能省掉大量胶水代码,GenAI 语义兼容对可观测性有要求的项目也是实打实的加分项。但要注意,项目自己在 README 里就标注了 Here be dragons,未来版本会持续引入破坏性变更,v0.42.0 到 v0.40.0 之间不到两个月就发了三个版本,节奏很快。如果你的项目要长期维护,先用一个独立的模块把 Rig 的调用包起来,固定住依赖版本,再考虑深入使用。浏览器 WASM 支持只覆盖 portable core 和 classic runtime,rig-rmcp 和 MCP 功能仅限原生环境,有浏览器端 Agent 需求的要提前验证这部分。对于只需要调用一两家模型的简单场景,直接用各家的官方 SDK 可能更省事,不必为一个还在快速变动的框架付出学习成本。

官方来源

  1. 0xPlaygrounds/rig on GitHub
  2. License: MIT
  3. Project website
  4. README
  5. Releases
社区笔记

社区笔记