当前位置: 首页 > news >正文

用 Rust 构建 LLM 应用的高性能框架

langchainrust:用 Rust 构建 LLM 应用的高性能框架

一个受 LangChain 启发的 Rust 实现,提供 LLM、Agent、Chain、Memory、向量数据库、RAG 等核心组件,完全异步、类型安全、零成本抽象。

项目简介

随着大语言模型(LLM)的爆发式发展,Python 版的 LangChain 已成为构建 AI 应用的事实标准。但对于追求高性能、类型安全和内存安全的开发者来说,Rust 才是更合适的选择。

langchainrust是一个用 Rust 实现的 LangChain 框架,保留了 LangChain 的核心设计理念,同时充分发挥 Rust 的优势:

  • 完全异步 - 基于 Tokio 的 async/await,高并发低延迟
  • 类型安全 - 编译期捕获错误,告别运行时崩溃
  • 零成本抽象 - 高性能设计,无额外运行开销
  • 易于扩展 - 清晰的 trait 设计,方便自定义组件

GitHub 地址:https://github.com/atliliw/langchainrust


核心特性

1. LLM 集成(OpenAI 兼容)

支持 OpenAI API 及兼容接口(如 Qwen、Azure、国内代理),支持流式和非流式输出:

uselangchainrust::{OpenAIChat,OpenAIConfig,BaseChatModel};uselangchainrust::schema::Message;letconfig=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(),streaming:false,temperature:Some(0.7),max_tokens:Some(500),..Default::default()};letllm=OpenAIChat::new(config);letmessages=vec![Message::system("你是一个 Rust 专家。"),Message::human("解释 Rust 的所有权机制。"),];letresponse=llm.chat(messages,None).await?;println!("{}",response.content);

2. 向量数据库集成

提供两种向量数据库支持,覆盖开发测试和生产环境:

InMemoryVectorStore - 开发测试首选

内存向量存储,零配置,适合快速原型开发:

uselangchainrust::{Document,InMemoryVectorStore,OpenAIEmbeddings,SimilarityRetriever,RetrieverTrait,};usestd::sync::Arc;// 创建 Embeddings(真实 AI 向量生成)letembeddings=Arc::new(OpenAIEmbeddings::new(OpenAIEmbeddingsConfig::default()));// 创建内存向量库letstore=Arc::new(InMemoryVectorStore::new());letretriever=SimilarityRetriever::new(store.clone(),embeddings);// 添加文档(自动生成向量)letdocs=vec![Document::new("Rust 是一门系统编程语言。"),Document::new("向量数据库用于存储和检索向量。"),];retriever.add_documents(docs).await?;// 语义搜索letresults=retriever.retrieve_with_scores("什么是向量存储?",3).await?;
QdrantVectorStore - 生产级方案

高性能分布式向量数据库,支持百万级向量:

uselangchainrust::vector_stores::{QdrantVectorStore,QdrantConfig,QdrantDistance};letconfig=QdrantConfig::new("http://localhost:6334","knowledge_base").with_vector_size(1536).with_distance(QdrantDistance::Cosine);letstore=Arc::new(QdrantVectorStore::new(config).await?);letretriever=SimilarityRetriever::new(store.clone(),embeddings);// 使用方式与 InMemoryVectorStore 完全相同retriever.add_documents(docs).await?;letresults=retriever.retrieve("查询问题",5).await?;
向量数据库对比
特性InMemoryVectorStoreQdrantVectorStore
适用场景开发测试生产环境
持久化内存磁盘/云存储
容量受内存限制百万级+
性能极快
分布式不支持支持
配置零配置需部署服务
OpenAI Embeddings

支持 OpenAI 的文本嵌入模型,自动生成高质量向量:

模型维度特点
text-embedding-ada-0021536性价比最优
text-embedding-3-small1536新一代,性能更好
text-embedding-3-large3072最高质量

3. RAG 检索增强生成

完整的 RAG 流程:索引 -> 检索 -> 生成

uselangchainrust::{Document,InMemoryVectorStore,OpenAIEmbeddings,OpenAIChat,OpenAIConfig,SimilarityRetriever,RetrieverTrait,BaseChatModel,};uselangchainrust::schema::Message;usestd::sync::Arc;asyncfnrag_example()->Result<(),Box<dynstd::error::Error>>{// 1. 初始化组件letembeddings=Arc::new(OpenAIEmbeddings::new(OpenAIEmbeddingsConfig::default()));letllm=OpenAIChat::new(OpenAIConfig::default());letstore=Arc::new(InMemoryVectorStore::new());letretriever=SimilarityRetriever::new(store.clone(),embeddings);// 2. 构建知识库letknowledge=vec![Document::new("Rust 由 Mozilla 研发,2015 年发布 1.0。"),Document::new("Rust 的所有权系统确保内存安全。"),Document::new("Cargo 是 Rust 的包管理器。"),];retriever.add_documents(knowledge).await?;// 3. 检索相关文档letquestion="Rust 什么时候发布的?";letrelevant=retriever.retrieve_with_scores(question,3).await?;// 4. 构建上下文letcontext=relevant.iter().map(|r|r.document.content.as_str()).collect::<Vec<_>>().join("\n");// 5. LLM 生成答案letmessages=vec![Message::system("根据上下文回答问题。"),Message::human(&format!("上下文:\n{}\n\n问题: {}",context,question)),];letresponse=llm.chat(messages,None).await?;println!("{}",response.content);// 输出: Rust 于 2015 年发布 1.0 版本。Ok(())}
向量自动生成机制

add_documents()内部实现批量向量生成:

pubasyncfnadd_documents(&self,documents:Vec<Document>)->Result<()>{// 1. 提取文本lettexts:Vec<&str>=documents.iter().map(|d|d.content.as_str()).collect();// 2. 批量生成向量(一次 API 调用)letembeddings=self.embeddings.embed_documents(&texts).await?;// 3. 存储self.store.add_documents(documents,embeddings).await?;Ok(())}

批量生成优化:一次 API 调用处理多个文档,节省时间和成本。

4. Agent 与工具调用

实现 ReActAgent(Reasoning + Acting),支持工具调用、多步推理、错误重试:

uselangchainrust::{ReActAgent,AgentExecutor,BaseAgent,BaseTool,Calculator,DateTimeTool,SimpleMathTool,};usestd::sync::Arc;// 注册工具lettools:Vec<Arc<dynBaseTool>>=vec![Arc::new(Calculator::new()),Arc::new(DateTimeTool::new()),Arc::new(SimpleMathTool::new()),];// 创建 Agentletagent=ReActAgent::new(llm,tools.clone(),None);letexecutor=AgentExecutor::new(Arc::new(agent)asArc<dynBaseAgent>,tools).with_max_iterations(5);// 执行任务letresult=executor.invoke("计算 37 + 48,然后告诉我今天是星期几".to_string()).await?;println!("结果: {}",result);

内置工具:

  • Calculator - 数学计算
  • DateTimeTool - 日期时间查询
  • SimpleMathTool - 基础数学运算(sin, sqrt, factorial 等)
  • URLFetch - URL 抓取和解析

5. 提示词模板

支持字符串模板和聊天模板,变量替换、模板组合:

uselangchainrust::prompts::{PromptTemplate,ChatPromptTemplate};uselangchainrust::schema::Message;usestd::collections::HashMap;// 字符串模板lettemplate=PromptTemplate::new("你好,{name}!今天是{day}。");letmutvars=HashMap::new();vars.insert("name","开发者");vars.insert("day","周一");letprompt=template.format(&vars)?;// 聊天模板letchat_template=ChatPromptTemplate::new(vec![Message::system("你是一个{role},专精于{domain}。"),Message::human("你好,我是{name}。"),Message::human("{question}"),]);

6. 对话记忆

三种记忆管理策略:

uselangchainrust::{ChatMessageHistory,ConversationBufferMemory};// 简单历史记录letmuthistory=ChatMessageHistory::new();history.add_message(Message::human("你好!"));history.add_message(Message::ai("你好!很高兴见到你!"));// 缓冲记忆(保留所有历史)letmemory=ConversationBufferMemory::new();// 窗口记忆(保留最近 K 条)letwindow_memory=ConversationBufferWindowMemory::new(5);

7. Chain 工作流

支持 LLMChain(单步)和 SequentialChain(多步流水线):

uselangchainrust::{LLMChain,SequentialChain,BaseChain};usestd::sync::Arc;usestd::collections::HashMap;useserde_json::Value;// 单步 Chainletchain1=LLMChain::new(llm1,"分析以下主题: {topic}");// 多步顺序 Chain(流水线)letchain2=LLMChain::new(llm2,"根据分析生成总结: {analysis}");letpipeline=SequentialChain::new().add_chain(Arc::new(chain1),vec!["topic"],vec!["analysis"]).add_chain(Arc::new(chain2),vec!["analysis"],vec!["summary"]);// 执行letmutinputs=HashMap::new();inputs.insert("topic".to_string(),Value::String("2024年AI发展".to_string()));letresults=pipeline.invoke(inputs).await?;

安装使用

快速安装

[dependencies] langchainrust = "0.2.1" tokio = { version = "1.0", features = ["full"] } # 启用 Qdrant 向量数据库 # langchainrust = { version = "0.2.1", features = ["qdrant-integration"] }

环境配置

exportOPENAI_API_KEY="your-api-key"exportOPENAI_BASE_URL="https://api.openai.com/v1"# 可选:支持自定义端点

启动 Qdrant(可选)

dockerrun-p6333:6333-p6334:6334\-v$(pwd)/qdrant_storage:/qdrant/storage\qdrant/qdrant

项目结构

src/ ├── core/ # 核心抽象 │ ├── language_models/ # BaseChatModel trait │ ├── runnables/ # Runnable trait (LCEL) │ └── tools/ # BaseTool trait ├── language_models/ # LLM 实现 │ └── openai/ # OpenAI 客户端 ├── embeddings/ # 文本嵌入 │ ├── openai.rs # OpenAI Embeddings │ └── mock.rs # Mock Embeddings ├── vector_stores/ # 向量数据库 │ ├── memory.rs # InMemoryVectorStore │ ├── qdrant.rs # QdrantVectorStore │ └── mod.rs # VectorStore trait ├── retrieval/ # RAG 组件 │ ├── retriever.rs # SimilarityRetriever │ ├── splitter.rs # 文档分割器 │ └── loaders/ # PDF/CSV 加载器 ├── agents/ # Agent 框架 │ └── react/ # ReActAgent ├── prompts/ # 提示词模板 ├── memory/ # 记忆管理 ├── chains/ # Chain 工作流 ├── tools/ # 内置工具 └── schema/ # 数据结构(Message 等)

测试

运行测试

# 运行所有测试cargotest# 显示测试输出cargotest----nocapture# RAG 测试(InMemory)cargotesttest_rag_inmemory_full_pipeline ----nocapture--include-ignored# RAG 测试(Qdrant)cargotesttest_rag_qdrant_full_pipeline--featuresqdrant-integration ----nocapture--include-ignored

3. 错误处理

使用Result<T, Box<dyn Error>>统一错误传播:

fnprocess()->Result<(),Box<dynstd::error::Error>>{letresponse=llm.chat(messages,None).await?;letresult=agent.invoke(query).await?;Ok(())}


资源链接

  • GitHub 仓库: https://github.com/atliliw/langchainrust
  • crates.io: https://crates.io/crates/langchainrust
  • API 文档: https://docs.rs/langchainrust

langchainrust 让 Rust 开发者也能轻松构建 LLM 应用,享受高性能和安全性,欢迎试用和反馈!

http://www.jsqmd.com/news/619340/

相关文章:

  • 零基础快速上手:Jellyfin MetaShark插件完整使用指南
  • GBrain 项目详解:你的个人 AI 知识大脑(Memex)
  • OBS-VirtualCam核心技术实现:从架构设计到性能优化
  • HarmonyOS6 三方库插件实战:RcRate 评分组件交互逻辑与事件处理机制深度解析
  • guix studio 下载
  • PHP异步I/O配置失效的7大征兆:CPU空转却响应超时?这可能是你的libuv版本与PHP-FPM共存导致的隐式阻塞!
  • 医疗器械软件生命周期管理注意事项
  • 如何高效使用x64dbg:5个专业逆向分析技巧
  • 从激活焦虑到一键安心:KMS_VL_ALL_AIO如何重塑Windows授权体验
  • Linux I/O 演进史:从管道到零拷贝,一篇串起个服务端核心原语呕
  • 2026 HDU 春季十连测
  • 企业年会知识竞赛互动环节设计指南:提升参与感与团队凝聚力
  • 如何保证模型结构化输出
  • OpenClaw邮件处理机器人:Qwen3-14b_int4_awq实现的智能分类与回复
  • 多智能体强化学习—QPLEX:优势分解与协同决策的深度解析
  • 微信立减金回收价格公示,如何避坑 - 猎卡回收公众号
  • WebSocket实现实时通知
  • Python自动化调色:DaVinci Resolve API实战指南与场景应用
  • 支持多语种的知识竞赛软件有哪些?顶伯等主流工具功能对比
  • 3步革命性自动化:Win11Debloat如何智能重塑你的Windows体验
  • OpenClaw邮件自动化:Qwen3-4B处理每日百封邮件实战
  • CMU 15-445 Project1 通关秘籍:手把手教你实现可扩展哈希表(附完整测试用例)
  • 2026年智能书籍要点总结App避坑攻略:Top5解析,别让伪效率工具浪费你的时间
  • 魔兽争霸III终极优化指南:WarcraftHelper插件让你的经典游戏焕发第二春 [特殊字符]
  • 从Excel到Markdown:3分钟让你的Obsidian表格整齐如初
  • 三电平有源电力滤波器方案:全套软硬件资料,基于DSP28335,可实现直接量产
  • 记录
  • GAMES101【lecture5-8】精讲:从光栅化到着色,图形学核心流程实战解析
  • ElevenLabs、Descript、EasyDubbing,谁更适合做 YouTube/Tiktok 多语言内容?
  • 20252912 2024-2025-2 《网络攻防实践》实验五