SuperAPI AI 工具集

rag

智能体与模型

查看项目

更新于 10-15 09:44

技能介绍

用途

该模块是 langchainx 中面向检索增强生成(RAG)的组件集合,用 Rust 提供从文档向量化、向量存储、相似度检索到对话式检索问答链的完整抽象,帮助开发者搭建基于自有文档的问答与摘要应用。

主要能力

嵌入(Embedder)

定义 Embedder trait,包含两个异步方法:embed_documents 将一组文档文本转为向量,embed_query 将单条查询文本转为向量。可用的嵌入后端及其 feature flag 如下:

  • OpenAI:OpenAiEmbedder,默认启用
  • Ollama:OllamaEmbedder,feature ollama
  • FastEmbed(本地):FastEmbed,feature fastembed
  • MistralAI:MistralAiEmbedder,feature mistralai

向量存储(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 传入输入并获取回答。

使用方式

  1. 选择并配置嵌入后端(如 OpenAiEmbedder::default())。
  2. 构建向量存储,例如通过 PgVectorBuilder 设置嵌入器与连接字符串,并调用 build()。
  3. 使用 add_documents! 宏索引文档。
  4. 用 Retriever::new(store, 5) 创建检索器。
  5. 通过 ConversationalRetrieverChainBuilder 设置 LLM、检索器与记忆并 build()。
  6. 调用 chain.invoke(prompt_args! { "input" => "..." }) 获取回答。

依赖通过 Cargo feature 控制,例如 langchainx = { features = ["postgres"] }。

适用场景

  • 基于自有文档的问答系统
  • 带对话记忆的检索式聊天
  • 文档摘要与关键点提取
  • 多来源文档(文本、CSV、HTML、PDF、Git 提交、源码)的索引与检索

限制

各嵌入后端与部分加载器需通过对应 feature flag 启用;向量存储的具体后端(如 PgVector)需自行配置连接。资料未提供各后端的性能、成本、配额或平台支持范围等信息。