
langchain-rust
用 Rust 写 LLM 应用,类型安全、性能好、部署轻
langchain-rust 是 LangChain 的 Rust 实现,目标是在 Rust 生态中提供编写 LLM 应用所需的核心抽象。它把提示词模板、模型调用、链式组合、记忆、输出解析、向量存储与检索等能力封装成 Rust 库,让开发者不必从零拼接 HTTP 请求和状态管理,就能构建问答、RAG、Agent 等程序。项目支持 OpenAI 等主流模型接口,并可通过 trait 扩展自定义 LLM、Embedding 与向量库。相比 Python 版,它更强调类型安全、零成本抽象和并发性能,适合对延迟、资源占用和部署体积敏感的服务端场景。当前星标约 1.3k,处于成长期,API 仍在演进,适合愿意跟进版本变化、追求 Rust 工程化 LLM 应用的团队。
项目数据
使用教程
环境要求
- 已安装 Rust 工具链(可使用 cargo 命令)
- 一个已存在的 Cargo 项目(执行 cargo add 的目录)
- OpenAI API Key(README 提到可用环境变量或直接传参方式提供)
- 需要异步运行时(示例使用 #[tokio::main])
安装与启动步骤
-
1添加依赖
在现有 Cargo 项目根目录执行 cargo add,把 langchain-rust 加入依赖;库内部依赖 serde_json 做序列化。
cargo add langchain-rust -
2初始化模型
用 OpenAI::default() 创建模型,可 with_model 指定型号;不想用环境变量时用 OpenAIConfig 传 key。
use langchain_rust::llm::openai::{OpenAI, OpenAIModel}; let open_ai = OpenAI::default().with_model(OpenAIModel::Gpt4oMini.to_string()); -
3直接调用模型
调用 invoke 传入字符串即可拿到模型回复;示例中问的是训练数据里没有的内容。
let resp = open_ai.invoke("What is rust").await.unwrap(); println!("{}", resp); -
4构建提示词链
用 message_formatter! 组合 system 消息与 human 模板,再交给 LLMChainBuilder 生成链。
let prompt = message_formatter![ fmt_message!(Message::new_system_message("You are world class technical documentation writer.")), fmt_template!(HumanMessagePromptTemplate::new(template_fstring!("{input}", "input"))) ]; let chain = LLMChainBuilder::new().prompt(prompt).llm(open_ai.clone()).build().unwrap(); -
5加入对话历史
模板里用 fmt_placeholder! 占位,调用时通过 history 传入历史消息列表实现多轮上下文。
let prompt = message_formatter![ fmt_message!(Message::new_system_message("You are world class technical documentation writer.")), fmt_placeholder!("history"), fmt_template!(HumanMessagePromptTemplate::new(template_fstring!("{input}", "input"))) ]; -
6运行验证
用 cargo run 执行你的示例程序,观察终端输出的模型回复与链返回结果。
cargo run
关键配置
| 配置项 | 必填 | 说明 | 示例 |
|---|---|---|---|
openai_api_key | 是 | OpenAI 密钥,可通过环境变量或 with_api_key 传入 | sk-xxxxxxxx |
model | 否 | with_model 指定的模型型号,示例使用 Gpt4oMini | Gpt4oMini |
如何确认成功
运行后终端打印出模型对 "What is rust" 的回复,链调用成功时输出 Result: ... 而非 panic 报错。
常见问题
Q:不想用环境变量提供密钥怎么办?
A:可在初始化模型时用 OpenAIConfig::default().with_api_key("sk-xxxxxxxx") 直接传入密钥,再链式调用 with_model 指定型号。
Q:支持哪些模型和向量库?
A:LLM 支持 OpenAI、Azure OpenAI、Ollama、Anthropic Claude;Embedding 还支持 FastEmbed、MistralAI;向量库含 OpenSearch、Postgres 等。
Q:怎么让模型记住之前的对话?
A:在 message_formatter! 中用 fmt_placeholder!("history") 占位,调用 chain.invoke 时通过 prompt_args! 的 history 传入历史消息列表。
Q:为什么一定要 serde_json?
A:README 明确说明该库运行严重依赖 serde_json 做数据序列化,添加依赖后无需额外处理。
注意事项
- 项目仍处于成长期,API 可能随版本演进发生变化,升级前留意版本变更。
- 密钥属敏感信息,示例中的 sk-xxxxxxxx 只是占位,请勿把真实密钥提交到仓库。
- README 只给出 cargo add 的安装方式,未涉及 Docker、云部署等其他安装途径。
核心亮点
- 用 Rust trait 抽象 LLM、Embedding、向量库,可替换实现且编译期检查接口
- 提供链式组合、提示模板、记忆与输出解析等常用模块,减少重复造轮子
- 面向服务端场景,运行时开销小、并发友好,适合对性能和部署体积敏感的项目
不足之处
- 生态与文档成熟度不及 Python 版 LangChain,示例和第三方集成数量有限
- API 仍在快速演进,版本升级可能带来破坏性变更,需要跟进维护
适用场景
- 用 Rust 构建低延迟的 RAG 问答服务
- 在已有 Rust 后端中集成 LLM 能力,避免引入 Python 运行时
- 开发对资源占用敏感的 Agent 或对话服务并部署到边缘环境
替代项目
langchain、llm-chain、rig
项目介绍
下一篇:langchain-skills
同类项目推荐
ComfyUI_Custom_Nodes_AlekPet
开源
给 ComfyUI 装上语音翻译和姿态检测,工作流更全能
Custom nodes that extend the capabilities of Comfyui
langchain
开源
组装 AI 应用的乐高积木,从想法到上线不换工具
The agent engineering platform.
transformers
开源
全球最大的模型仓库全家桶,想用的模型一把抓
Transformers: the model-definition framework for state-of-the-art machine learning m···
bruno
开源
把 API 测试当代码管理,用 Git 搞定协作与版本追踪
Opensource IDE For Exploring and Testing API's (lightweight alternative to Postman/I···