SuperAPI AI 工具集

langchain rag pipeline

智能体与模型

查看项目

更新于 10-16 18:23

技能介绍

用途

LangChain RAG Pipeline 是一项用于构建检索增强生成(RAG)系统的技能。当需要搭建任何 RAG 系统时,可调用该技能获取从文档加载到生成回答的完整实现指导。

主要能力

该技能覆盖 RAG 的三个核心阶段:

  • 索引(Index):加载 → 切分 → 嵌入 → 存储
  • 检索(Retrieve):查询 → 嵌入 → 搜索 → 返回文档
  • 生成(Generate):文档 + 查询 → LLM → 响应

涉及的关键组件包括:

  • 文档加载器(Document Loaders):从文件、网页、数据库摄取数据
  • 文本切分器(Text Splitters):将文档拆分为块
  • 嵌入(Embeddings):将文本转换为向量
  • 向量库(Vector Stores):存储并搜索嵌入

技能同时提供 Python 与 TypeScript 两种语言的示例代码。

向量库选择

技能列出了常见向量库及其适用场景与持久化方式:

  • InMemory:用于测试,仅存于内存
  • FAISS:本地、高性能,持久化到磁盘
  • Chroma:用于开发,持久化到磁盘
  • Pinecone:用于生产、托管,持久化到云端

使用方式

完整 RAG 流程(Python 示例)

  1. 加载文档:使用 Document 构造文档列表。
  2. 切分文档:使用 RecursiveCharacterTextSplitter,设置 chunk_size=500、chunk_overlap=50。
  3. 创建嵌入并存储:使用 OpenAIEmbeddings(model="text-embedding-3-small"),通过 InMemoryVectorStore.from_documents 存储。
  4. 创建检索器:vectorstore.as_retriever(search_kwargs={"k": 4})。
  5. 在 RAG 中使用:使用 ChatOpenAI(model="gpt-4.1"),检索相关文档,拼接上下文后调用模型。

TypeScript 版本使用 @langchain/openai、@langchain/classic/vectorstores/memory、@langchain/textsplitters、@langchain/core/documents 等包,流程与 Python 一致。

文档加载

  • PDF:Python 使用 PyPDFLoader("./document.pdf");TypeScript 使用 @langchain/community/document_loaders/fs/pdf 的 PDFLoader。
  • 网页:Python 使用 WebBaseLoader("https://docs.langchain.com");TypeScript 使用 CheerioWebBaseLoader。
  • 目录:使用 DirectoryLoader 加载目录下所有文本文件,可配置 glob 模式与 loader_cls。

文本切分

使用 RecursiveCharacterTextSplitter,可配置 chunk_size、chunk_overlap 以及分隔符层级 separators=["\n\n", "\n", " ", ""]。

向量库操作

  • Chroma:可通过 from_documents 创建并指定 persist_directory 与 collection_name;也可加载已有库。TypeScript 版本可连接运行中的 Chroma 服务器(url: "http://localhost:8000")。
  • FAISS:使用 from_documents 创建并 save_local 保存;加载时需 allow_dangerous_deserialization=True。TypeScript 使用 FaissStore 的 save 与 load。

检索

  • 基础相似度搜索:similarity_search(query, k)。
  • 带分数检索:similarity_search_with_score,返回文档与相关性分数。
  • 带过滤检索:similarity_search 可传入 filter,例如 {"language": "python"}。

与智能体结合

可将 RAG 封装为工具供智能体使用:定义 search_docs 工具,内部调用 retriever.invoke(query) 并拼接文档内容,然后通过 create_agent 创建智能体并传入该工具。TypeScript 版本使用 tool 与 createAgent。

可配置与不可配置项

可配置:

  • 分块大小/重叠
  • 嵌入模型
  • 返回结果数量(k)
  • 元数据过滤器
  • 搜索算法:相似度、MMR

不可配置:

  • 嵌入维度(由模型决定)
  • 在同一向量库中混用不同模型的嵌入

常见问题修正

技能给出了若干修正建议:

  • 分块大小:500–1500 通常较好;过小会丢失上下文,过大会触及限制。
  • 分块重叠:使用分块大小的 10–20% 作为重叠,以保持边界处的上下文连续性。
  • 持久化:使用持久化向量库而非内存向量库,避免重启后数据丢失。
  • 嵌入模型一致性:索引与查询应使用同一嵌入模型。
  • FAISS 反序列化:加载本地索引时需设置 allow_dangerous_deserialization=True。
  • 维度匹配:确保嵌入维度与向量库索引维度一致,例如索引为 1536 维时不应使用 512 维嵌入。

适用场景

适用于需要构建 RAG 系统的开发场景,包括文档问答、基于文档的智能体工具、本地或云端向量检索等。技能同时覆盖 Python 与 TypeScript 生态。

限制

技能资料未提供关于收费、价格、平台支持范围、性能指标或效果保证的信息。嵌入维度由所选模型决定,无法自行配置;同一向量库中不能混用不同模型的嵌入。