深入学LangChain官方文档-KnowledgeBase与RAG外部知识如何进入模型上下文本篇对应的官方文档Retrieval说明运行时检索、知识库构成与 2-Step / Agentic / Hybrid RAG 的架构取舍。Build a semantic search engine with LangChain给出Document、Embedding、Vector Store 与 Retriever 的最小知识库链路。本篇讲解范围本篇把企业资料变成可进入模型上下文的检索证据并说明三类 RAG 的选择边界多知识域怎样路由给不同专家、连续对话怎样交接控制权留给下一篇 Router 与 Handoffs。公司制度、产品说明和项目记录都在变模型却不会因为文件躺在服务器上就自动知道其中内容。难点也不是“把 PDF 喂给模型”。一次调用的上下文有限整库塞入会让成本、延迟和噪声一起上升。RAG 要做的是先把外部资料加工成能被定位的证据再只取回当前问题需要的片段。以“本季度差旅住宿标准是多少哪天生效”为例最终回答必须能指回制度版本和具体条款。模型擅长把证据组织成自然语言制度库、版本号和权限系统才负责保存权威事实。这个职责分离是 RAG 能否进入生产的起点。知识库不是文件夹而是可检索的证据集合LangChain 用Document表示一段文本及其元数据。page_content放可供检索的内容metadata则记录来源 URL、制度版本、章节、适用部门或生效日期。元数据不是附属装饰。当员工问的是“上海研发中心的标准”它决定哪些候选片段有资格参与回答。原始文档通常太长必须切成 chunk。chunk 太大相关条款会被无关段落稀释太小条件、例外和金额会被拆散。切分应服从资料结构制度可按标题和条款切工单可按问题和解决步骤切。切完后仍要让每个 chunk 带回原文的版本和位置否则命中也无法解释“依据哪一条”。Embedding 找候选原文才提供证据Embedding 把文本转为向量让语义相近的问题和片段在向量空间中更接近。它解决的是“用户没有复述原句时怎样召回候选”并不判断条款是否仍有效更不替业务系统作最终裁决。VectorStore保存文本、向量和元数据并提供相似度搜索能力Retriever则把自然语言 query 转成一组相关Document。两者分开后存储技术可以替换检索策略也能按场景调整。业务代码拿到的是原始文本片段和 metadata而不是一串无法引用的向量。对于带有效期的制度召回前应先用 metadata 过滤版本或组织范围再按语义选相关性。否则一个语义很像但已废止的 chunk 仍可能排名靠前。检索质量因此来自资料治理、切分、metadata、Embedding 和过滤条件的合力而不是单独换一个向量数据库。“相关”不等于“允许进入上下文”。部门、角色、数据分级和生效日期应在召回路径中明确执行RAG 可以把符合资格的证据交给模型但不能替代访问控制或把无权限资料借由语义检索泄露出去。先选可控的运行方式再谈“智能”LangChain 把 RAG 常见形态概括为 2-Step、Agentic 和 Hybrid。选择它们的关键不是名称而是“检索是否是回答的固定前提”“谁决定是否再查一次”“可以接受多少可变延迟”。2-Step RAG 在生成前固定检索调用次数清楚、延迟更可预测适合制度问答和文档助手。Agentic RAG 把 Retriever 或外部知识源做成工具让 Agent 在推理中决定要不要查、查什么适合研究助手或多种知识工具并存的场景。Hybrid RAG 在中间加入查询改写、相关性验证或答案校验用更多步骤换取更强的控制。一个最小的 2-Step RAG 入口下面的示例只保留“资料入库—召回—把证据交给模型”三件事。生产环境还需要身份过滤、持久化存储、版本更新和评估但不能把这些责任混进 Retriever 的接口里。fromlangchain_core.documentsimportDocumentfromlangchain_core.vectorstoresimportInMemoryVectorStorefromlangchain_openaiimportChatOpenAI,OpenAIEmbeddings documents[Document(page_content2026 年第三季度上海研发中心住宿上限为每晚 800 元。,metadata{source:travel-policy-2026q3,city:上海,effective:2026-07-01},)]embeddingsOpenAIEmbeddings(modeltext-embedding-3-large)storeInMemoryVectorStore(embeddings)store.add_documents(documents)retrieverstore.as_retriever(search_kwargs{k:3})question上海研发中心本季度住宿标准是多少evidenceretriever.invoke(question)context\n.join(doc.page_contentfordocinevidence)modelChatOpenAI(modelqwen3.7-plus)answermodel.invoke(f仅依据以下制度回答并说明来源\n{context}\n\n问题{question})print(answer.content)retriever.invoke(question)返回的是候选Documentcontext才是本次模型调用真正看到的证据窗口。若结果为空、metadata 不匹配或版本不合格系统应先暴露“没有足够依据”的状态而不是让模型用常识补齐答案。这里的InMemoryVectorStore只适合演示不能替代生产知识库的更新、权限和备份设计。Agentic RAG 让检索成为一项工具能力当问题可能来自制度库、项目文档或外部服务时把检索封装为工具会更灵活。Agent 可以先追问条件、选择知识源或在证据不足时再次调用工具代价是调用次数和延迟不再固定工具权限与审计也必须继续沿用第 15、16 篇的审批和 Middleware 体系。无论是 2-Step 还是 AgenticRetriever 返回的片段都只是“可引用的候选证据”。它不能证明答案完整也不会自动发现知识库已经过期。对高风险问题检索结果应携带来源和版本对没有命中的问题产品应允许追问、转人工或明确拒答。RAG 的失败点大多在模型之外空召回、过期文档和不相关片段会把错误带进生成阶段。可操作的处理顺序是先记录 query、命中片段、版本和最终回答再用真实问题集检查“是否找对”“是否答全”“是否带对来源”最后才调整切分、过滤、查询改写或模型提示。把“召回为空时不编造”写成产品行为往往比继续增加上下文更重要。结论RAG 是证据路径不是知识替身第 11 篇建立了 Retrieval 的入口本篇把它补成一条可运行的知识路径资料经切分和向量化进入 Vector StoreRetriever 根据问题返回相关Document模型只基于这一小段证据组织回答。固定、可预测的知识问答先用 2-Step需要动态选择资料源时再考虑 Agentic 或 Hybrid。下一篇转向另一类复杂性当问题应该交给不同专家时Router 和 Handoff 如何分别承担分发与跨轮次控制权交接。