内容
# langchainrust
[](https://www.rust-lang.org/)
[](LICENSE)
[](https://crates.io/crates/langchainrust)
[](https://docs.rs/langchainrust)
一个受LangChain启发的Rust框架,用于构建LLM应用程序。
**解决的问题**: 构建代理、RAG、BM25关键词搜索、混合检索、LangGraph工作流、MCP工具、防护栏、多代理交接 - 所有这些都使用纯Rust。
---
## 核心功能
| 组件 | 描述 |
|-----------|-------------|
| **LLM** | OpenAI / Ollama / DeepSeek / Moonshot / Zhipu / Qwen / Anthropic Claude / Gemini + 多模态视觉 + 助手API(含requires_action工具调度) |
| **嵌入** | OpenAI / DeepSeek / Qwen / 本地(ort ONNX Runtime,功能门控) / 模拟 |
| **代理** | ReActAgent / FunctionCallingAgent / 计划-执行 / 交接 多代理交接 / 流式函数调用 |
| **A2A** | 代理到代理协议,AgentCard/任务/消息 + 服务器(含任务持久化) + 客户端 |
| **MCP** | 模型上下文协议客户端 + 服务器(_stdio + SSE),MCP工具适配为BaseTool |
| **记忆** | 缓冲区 / 窗口 / 摘要 / 摘要缓冲区 / 持久化 / 向量存储(语义检索) / **上下文窗口(v0.4.1,截断+摘要)** |
| **会话** | 多轮会话生命周期管理,可插拔存储(SessionManager + SessionStore) |
| **链** | LLMChain / 顺序链 / 会话链 / 路由链 / 检索QA / 会话检索 / 拼接 / 提炼 / MapReduce + **链流式(v0.4.1)** |
| **RAG** | 文档分割(含语义分割),向量存储,语义检索,多查询,HyDE,重新排序,**查询来源** |
| **结构化输出** | **with_structured_output(v0.4.1)**,StructuredOutputExt特征 + JsonOutputParser降级 |
| **BM25** | 关键词搜索,中文/英文分词,自动合并,分段 |
| **混合** | BM25 + 向量混合检索,RRF融合,统一索引 |
| **LangGraph** | 图工作流,人工干预,子图,并行,检查点 |
| **防护栏** | 输入/输出安全防护栏,敏感信息 / 禁止词 / 最大长度,防护代理 |
| **令牌计数器** | Tiktoken计数 + TokenTrackingLLM用量统计 + ModelPricing成本估算 |
| **输出解析器** | StrOutputParser,JsonOutputParser,逗号分隔列表,结构化,类型 |
| **工具** | 计算器 / 日期时间 / 数学 / URL获取 / 维基百科 / 网络搜索 / Python REPL / HTTP工具 / 文件工具(沙箱) / SQL工具(只读) / **计算机使用工具(v0.4.1)** |
| **向量数据库** | 内存 / Qdrant / MongoDB / ChromaDB / Redis / SQLite / PGVector / Pinecone / **文件向量存储(v0.4.1)** |
| **文档加载器** | 文本 / JSON / Markdown / PDF / CSV / HTML + **网页抓取器 / 站点地图 / Docx(v0.4.1)** |
| **缓存** | LLM缓存,支持TTL |
| **提示** | 提示模板 / 聊天提示模板 / 少量示例提示模板 |
| **回调** | 标准输出 / LangSmith / 文件处理 / OpenTelemetry |
| **评估** | 精确匹配 / 字符串距离 / 嵌入相似性 / LLM作为裁判 / 成对裁判 / 包含关键词 / 正则匹配 / 长度检查 / 蓝色 / 真实性 |
完整文档: [中文文档](https://github.com/atliliw/langchainrust/blob/main/docs/USAGE.md) | [英文文档](https://github.com/atliliw/langchainrust/blob/main/docs/USAGE_EN.md)
---
## 架构
```
┌─────────────────────────────────────────────────────────────┐
│ langchainrust │
├─────────────────────────────────────────────────────────────┤
│ LLM层 │
│ ├── OpenAI聊天 / Ollama聊天 │
│ ├── DeepSeek / Moonshot / Zhipu / Qwen(兼容OpenAI) │
│ ├── Anthropic聊天(Claude API)/ Gemini聊天 │
│ ├── 函数调用(绑定工具)/ 流式(流聊天) │
│ ├── 多模态视觉(图像内容 + 人与图像) │
│ ├── OpenAI助手API(含requires_action工具调度) │
│ └── with_structured_output(结构化输出特征) │
├─────────────────────────────────────────────────────────────┤
│ 嵌入层 │
│ ├── OpenAI嵌入 / DeepSeek嵌入 │
│ ├── Qwen嵌入 / 模拟嵌入 │
│ └── 本地嵌入(ort ONNX Runtime,功能门控) │
├─────────────────────────────────────────────────────────────┤
│ 代理层 │
│ ├── ReActAgent / FunctionCallingAgent │
│ ├── 计划-执行代理(计划-执行-重计划) │
│ ├── 交接(多代理交接)/ 流式函数调用 │
│ ├── 防护代理(防护栏安全防护) │
│ ├── 代理执行器 │
│ ├── A2A服务器/客户端(代理到代理协议) │
│ └── LangGraph(状态图,子图,并行) │
├─────────────────────────────────────────────────────────────┤
│ MCP层 │
│ ├── MCP客户端(stdio + SSE)-> MCP工具适配器 -> BaseTool │
│ └── MCP服务器(暴露BaseTool给主机调用) │
├─────────────────────────────────────────────────────────────┤
│ 检索层 │
│ ├── RAG(文本分割器,语义分割器,向量存储) │
│ ├── BM25(关键词搜索,自动合并) │
│ ├── 混合(BM25 + 向量,RRF融合) │
│ ├── HyDE / 多查询 / 重新排序 │
│ └── 加载器(文本/JSON/MD/PDF/CSV/HTML/Docx/网络/站点地图) │
├─────────────────────────────────────────────────────────────┤
│ 存储层 │
│ ├── 向量数据库(内存,Qdrant,MongoDB,ChromaDB, │
│ │ Redis,SQLite,PGVector,Pinecone,文件) │
│ └── 会话(会话管理器 + 会话存储) │
├─────────────────────────────────────────────────────────────┤
│ 实用层 │
│ ├── 记忆(缓冲区,窗口,摘要,摘要缓冲区,向量, │
│ │ 上下文窗口[截断+摘要]) │
│ ├── 链(LLM链,顺序链,检索QA,...) │
│ │ + 链流式(逐token输出) │
│ ├── 提示(提示模板,聊天提示模板,少量示例) │
│ ├── 工具(计算器,日期时间,URL获取,HTTP/文件/SQL, │
│ │ 计算机使用工具) │
│ ├── 输出解析器 │
│ ├── 令牌计数器(Tiktoken + 成本跟踪) │
│ ├── LLM缓存 │
│ ├── 评估(10种评估器,含真实性) │
│ └── 回调(LangSmith,标准输出,文件处理,OpenTelemetry) │
└─────────────────────────────────────────────────────────────┘
```
---
## v0.4.1 新增功能
- **助手requires_action工具调度**: `OpenAIAssistant` 遇 `requires_action` 自动解析 tool_calls → ToolRegistry 执行 → submit_tool_outputs → 继续轮询至 completed
- **A2A代理协议**: `A2AServer` 暴露代理 + `A2AClient` 调远程代理,JSON-RPC 风格(tasks/send/get/cancel),内存任务持久化
- **with_structured_output**: `StructuredOutputExt` 特征,一行拿强类型结构,按提供者走函数调用或 JsonOutputParser 降级
- **链流式**: `BaseChain::stream()` + LLMChain/会话链 覆写,逐token回调 `on_llm_new_token`
- **上下文窗口长上下文管理**: 截断(按token数截断)+ 摘要(LLM摘要压缩)策略,令牌计数器集成
- **文件向量存储**: JSON持久化向量存储,原子写入(tmp+rename),跨实例持久化,维度校验
- **计算机使用工具**: Anthropic计算机使用API接入 + 原生截图/输入(功能门控 `computer-use-native`)
- **更多文档加载器**: DocxLoader(ZIP+XML)、WebScraperLoader(递归爬取+同域过滤)、SitemapLoader(sitemap.xml解析)
- **本地嵌入ort**: ONNX Runtime神经网络嵌入(功能门控 `local-embeddings`),替代词袋占位
- **wiremock测试基础设施**: 开发依赖 + mock辅助函数,默认测试不打真实网络
- **MSRV声明**: `rust-version = "1.82"`,CI含1.82矩阵
- **criterion基准测试**: benches/ 下 retrieval(6)/splitter(4)/embedding(4) 组基准测试
- **12+新示例**: 覆盖evaluation/mcp_server/guardrails/sessions/context_window/vectorstore_memory/semantic_splitter/file_vectorstore/otel/assistants/handoffs/plan_execute/token_counter
## v0.4.0 新增功能
- **评估模块**: 10种评估器(字面/语义/规则/经典NLP/RAG),`EvalRunner` 跑评估集出报告,`Faithfulness` 检测RAG幻觉
- **MCP服务器**: `MCPServer` 把本地工具暴露为MCP服务器,供Claude Desktop / Cursor调用
- **向量检索记忆**: `VectorStoreRetrieverMemory` 按当前输入语义召回历史
- **OpenAI助手API**: `OpenAIAssistant` 服务端会话状态(Assistants / Threads / Run)
- **语义分块**: `SemanticSplitter` 相邻句相似度骤降处断块
- **本地嵌入**: `LocalEmbeddings` 离线,纯Rust无外部依赖
- **OpenTelemetry追踪**: `OtelHandler` 执行事件转OTel span(功能 `opentelemetry`)
---
## v0.3.0 新增功能
- **MCP协议**: 连接任意MCP服务器(stdio/SSE),工具自动适配为 `BaseTool` 供代理调用
- **多模态视觉**: `ImageContent` + `Message::human_with_image`,OpenAI / Ollama均支持
- **会话管理**: `SessionManager` + 可插拔 `SessionStore`,多轮对话生命周期
- **令牌计数器**: `TiktokenCounter` + `TokenTrackingLLM` 用量统计 + `ModelPricing` 成本估算
- **防护栏**: 输入/输出验证,敏感信息 / 禁止词 / 最大长度,`GuardedAgent`
- **计划-执行代理**: 计划 → 执行 → 失败重规划(`PlanExecuteAgent`)
- **交接**: `HandoffManager` + `HandoffTool`,主代理委托专业代理
- **流式工具调用**: `StreamingFunctionCallingAgent` 流式输出 + 工具调用事件
- **扩展工具**: `HTTPTool` / `FileTool`(沙箱)/ `SQLTool`(只读)
- **PGVector / Pinecone**: 新增两个向量库后端
- **HTML加载器**: 去标签/脚本/样式,提取纯文本
详见 [使用指南(中文)](https://github.com/atliliw/langchainrust/blob/main/docs/USAGE.md)。
---
## 安装
```toml
[dependencies]
langchainrust = "0.4.1"
tokio = { version = "1.0", features = ["full"] }
# 可选功能
langchainrust = { version = "0.4.1", features = ["mongodb-persistence"] } # MongoDB存储
langchainrust = { version = "0.4.1", features = ["qdrant-integration"] } # Qdrant向量数据库
langchainrust = { version = "0.4.1", features = ["redis-storage"] } # Redis存储
langchainrust = { version = "0.4.1", features = ["sqlite-storage"] } # SQLite存储 (+ SQLTool)
langchainrust = { version = "0.4.1", features = ["pgvector-storage"] } # PGVector (需自配 sqlx/pgvector 依赖)
langchainrust = { version = "0.4.1", features = ["local-embeddings"] } # 本地ONNX嵌入(需ort)
# PineconeStore / 文件向量存储无需功能,默认可用
```
---
## 快速开始
```rust
use langchainrust::{OpenAIChat, OpenAIConfig, BaseChatModel};
use langchainrust::schema::Message;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = OpenAIConfig {
api_key: std::env::var("OPENAI_API_KEY")?,
base_url: "https://api.openai.com/v1".to_string(),
model: "gpt-3.5-turbo".to_string(),
..Default::default()
};
let llm = OpenAIChat::new(config);
let response = llm.chat(vec![
Message::system("You are a helpful assistant."),
Message::human("What is Rust?"),
], None).await?;
println!("{}", response.content);
Ok(())
}
```
### 多提供者支持
```rust
use langchainrust::{
DeepSeekChat, MoonshotChat, ZhipuChat, QwenChat,
AnthropicChat, OllamaChat,
};
let deepseek = DeepSeekChat::from_env();
let moonshot = MoonshotChat::with_model("moonshot-v1-128k");
let claude = AnthropicChat::from_env();
let ollama = OllamaChat::new("llama3.2");
```
### BM25关键词搜索
```rust
use langchainrust::{BM25Retriever, Document};
let mut retriever = BM25Retriever::new();
retriever.add_documents_sync(vec![
Document::new("Rust is a systems programming language"),
Document::new("Python is a scripting language"),
]);
let results = retriever.search("systems programming", 3);
for result in results {
println!("Document: {}", result.document.content);
println!("Score: {}", result.score);
}
```
更多示例见 [使用指南(中文)](https://github.com/atliliw/langchainrust/blob/main/docs/USAGE.md)。
---
## 示例
`examples/` 目录提供25个可运行示例,覆盖核心功能:
| 分类 | 示例 | 需API Key |
|------|------|-----------|
| basic | chat / streaming / multi_provider / token_counter | 是 |
| agent | function_calling / multi_tool / assistants / handoffs / plan_execute | 是 |
| rag | bm25_search / document_loaders / file_vectorstore / semantic_splitter | 否 |
| langgraph | basic_graph / conditional_edge | 否 |
| memory | buffer_memory / context_window / sessions / vectorstore_memory | 否 |
| chains | llm_chain / sequential_chain | 是 |
| evaluation | evaluation | 否 |
| guardrails | guardrails | 否 |
| mcp_server | mcp_server | 否 |
| otel | otel_tracing | 否 |
需要API Key的示例从环境变量读取:
```bash
export OPENAI_API_KEY="your-key"
cargo run --example basic_chat"
```
无需API Key的示例(BM25 / LangGraph / Memory / 加载器)可直接运行,适合快速体验。
---
## 文档
| 文档 | 内容 |
|------|---------|
| [使用指南(中文)](https://github.com/atliliw/langchainrust/blob/main/docs/USAGE.md) | LLM、代理、记忆、RAG、BM25、混合、LangGraph、MCP、会话、防护栏、令牌计数器、计划-执行、交接、流式详细用法 |
| [使用指南(英文)](https://github.com/atliliw/langchainrust/blob/main/docs/USAGE_EN.md) | 详细用法说明 |
| [API文档](https://docs.rs/langchainrust) | Rust API文档 |
---
## 测试
```bash
cargo test
---
## 贡献
欢迎贡献!见 [CONTRIBUTING.md](CONTRIBUTING.md).
---
## 许可证
MIT或Apache-2.0,二选一。
连接信息
猜你喜欢
暂无推荐服务器