数据截至 (上游 commit 65b4508389c8)
Rig — 架构与原理
30 秒导读: Rig 是一个 Rust 库,用一套统一抽象把「20+ 个 LLM 供应商 + 10+ 个向量库」包在同一个接口后面,让你用最少的样板代码搭出从「一句话问答」到「带工具、带知识库的多轮 agent」的应用。它最出彩的一手,是把 agent 的多轮循环抽成一台完全不做 IO、可以序列化到磁盘再换个进程恢复的状态机。
本页是整套文档的入口:先讲清「Rig 是什么」(零基础),再给一张顶层全景图看懂大盘,最后给一张阅读地图告诉你哪一章讲什么、按什么顺序读。
1. 这是什么(零基础也能懂)
一句话定义
Rig 是一个 Rust 语言的 LLM 应用框架:你写业务逻辑,它负责把「调用哪个大模型、怎么发请求、怎么解析回复、怎么循环调用工具、怎么查知识库」这些脏活标准化。
解决什么问题 / 给谁用
假设你要用 Rust 写一个「会查资料、会调用工具的 AI 助手」,不用 Rig 你会遇到三件麻烦事:
- 每个供应商 API 都不一样。 OpenAI 的请求体、Anthropic 的请求体、Cohere 的请求体字段全不同;换个模型就得重写一遍。
- 工具调用要手写循环。 模型说「我要调
search工具」,你得解析出来、真的去执行、把结果塞回对话、再问一次模型……这个循环容易写错。 - 接向量库做 RAG 又是一套。 MongoDB、Qdrant、Postgres 的向量检索 API 各不相同。
Rig 把这三件事分别用**三个统一特征(trait)**盖住,你只依赖抽象,不依赖具体供应商。给谁用:Rust 后端 / agent / RAG 系统的开发者。
它能做什么(功能)
- 一套接口调 20+ 供应商的 completion(文本生成)和 embedding(向量化)模型。
- 高层
Agent类型:系统提示 + 上下文文档 + 工具 + 多轮循环,开箱即用。 - 一套接口接 10+ 向量库,直接当 agent 的知识库(RAG)。
- 结构化输出(让模型返回能反序列化成 Rust 结构体的 JSON)。
- 流式输出、多轮流式、对话记忆、生命周期 hooks、OpenTelemetry 遥测。
- 转录、音频生成、图像生成等多模态能力。核心库与 agent 运行时还能编译到浏览器 WASM(WASI 目标不支持,见
crates/rig-agent/src/lib.rs:24)。
用起来什么样
最小示例——三行核心逻辑就能问一次模型(改编自仓库 README.md 的 Simple example,走根 rig 门面包;cargo add rig 即用):
// 示意,改编自 README.md Simple example
use rig::prelude::*; // 带入 client.agent(...) 等构造扩展
use rig::providers::openai;
#[tokio::main]
async fn main() -> Result<(), anyhow::Error> {
let client = openai::Client::from_env()?; // 从环境变量读 API key
let agent = client.agent(openai::GPT_5_2) // 造一个 agent
.preamble("You are a helpful assistant.")
.build();
let response = agent.prompt("Entertain me!").await?; // 问一句,拿到字符串
println!("{response}");
Ok(())
}
注意最后一行 .prompt("...").await?:从「一句话」到「一个 String」,中间那套「发请求 / 解析 / 可能还要循环调工具」全被 Rig 藏起来了。
一句话直觉 / 类比
把 Rig 想成 LLM 世界的 ORM + 连接池:ORM 让你不管底层是 MySQL 还是 Postgres 都用同一套查询接口;Rig 让你不管底层是 OpenAI 还是 Anthropic 都用同一套 agent.prompt(...)。你换供应商,只改一行 Client。
本节到此不碰任何底层代码。你只要记住:Rig = 「LLM / 工具 / 向量库」三件事的统一抽象层 + 一个能自己跑多轮循环的 agent。