用途
该模块是 langchainx 中面向检索增强生成(RAG)的组件集合,用 Rust 提供从文档向量化、向量存储、相似度检索到对话式检索问答链的完整抽象,帮助开发者搭建基于自有文档的问答与摘要应用。
主要能力
嵌入(Embedder)
定义 Embedder trait,包含两个异步方法:embed_documents 将一组文档文本转为向量,embed_query 将单条查询文本转为向量。可用的嵌入后端及其 feature flag 如下:
- OpenAI:
OpenAiEmbedder,默认启用 - Ollama:
OllamaEmbedder,featureollama - FastEmbed(本地):
FastEmbed,featurefastembed - MistralAI:
MistralAiEmbedder,featuremistralai
向量存储(VectorStore)
定义 VectorStore trait,包含关联类型 Options,以及两个异步方法:add_documents 写入文档并返回文档 ID 列表,similarity_search 按查询文本与数量上限返回相似文档。提供 add_documents! 与 similarity_search! 宏,用于以默认选项进行简洁调用。
检索器(Retriever)
Retriever 将 VectorStore 包装为可在链中使用的组件,构造时指定检索文档数量,例如 Retriever::new(vector_store, 5)。
文档加载器(Document Loaders)
所有加载器实现 Loader,返回 Stream<Item = Result<Document, LoaderError>>。基础加载器包括 TextLoader、CsvLoader、HtmlLoader。按 feature 启用的加载器包括:PdfLoader(lopdf/pdf-extract)、GitCommitLoader(git)、HtmlToMarkdownLoader(html-to-markdown)、SourceCodeLoader(tree-sitter)。
对话式检索问答链
示例展示使用 ConversationalRetrieverChainBuilder 组合 LLM、Retriever 与记忆(SimpleMemory),构建带对话记忆的检索问答链,并通过 chain.invoke 传入输入并获取回答。
使用方式
- 选择并配置嵌入后端(如
OpenAiEmbedder::default())。 - 构建向量存储,例如通过
PgVectorBuilder设置嵌入器与连接字符串,并调用build()。 - 使用
add_documents!宏索引文档。 - 用
Retriever::new(store, 5)创建检索器。 - 通过
ConversationalRetrieverChainBuilder设置 LLM、检索器与记忆并build()。 - 调用
chain.invoke(prompt_args! { "input" => "..." })获取回答。
依赖通过 Cargo feature 控制,例如 langchainx = { features = ["postgres"] }。
适用场景
- 基于自有文档的问答系统
- 带对话记忆的检索式聊天
- 文档摘要与关键点提取
- 多来源文档(文本、CSV、HTML、PDF、Git 提交、源码)的索引与检索
限制
各嵌入后端与部分加载器需通过对应 feature flag 启用;向量存储的具体后端(如 PgVector)需自行配置连接。资料未提供各后端的性能、成本、配额或平台支持范围等信息。