用途
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 示例)
- 加载文档:使用 Document 构造文档列表。
- 切分文档:使用 RecursiveCharacterTextSplitter,设置 chunk_size=500、chunk_overlap=50。
- 创建嵌入并存储:使用 OpenAIEmbeddings(model="text-embedding-3-small"),通过 InMemoryVectorStore.from_documents 存储。
- 创建检索器:vectorstore.as_retriever(search_kwargs={"k": 4})。
- 在 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 生态。
限制
技能资料未提供关于收费、价格、平台支持范围、性能指标或效果保证的信息。嵌入维度由所选模型决定,无法自行配置;同一向量库中不能混用不同模型的嵌入。