掌握RAG,让AI像“查资料”一样回答问题——新手程序员必备收藏指南!
本文深入讲解了RAG的核心原理、知识库构建流程及三种架构2-Step、Agentic、Hybrid帮助读者理解如何让AI基于知识库检索信息并生成准确回答。文章涵盖了从文档加载到向量存储的完整流程并提供了实际应用场景及架构选择建议适合想要学习大模型应用的小白和程序员参考收藏。简单来说想象你是一个刚入职的新员工老板问你“公司去年的销售数据是多少”你会怎么回答❌ 瞎编“大概一个亿吧”你根本不知道✅ 查资料找到公司内部报表然后回答“根据年度报告去年销售额是 1.2 亿”大语言模型LLM也面临同样的问题有限上下文 —— 不能一次性读完所有文档知识过时 —— 训练数据截止到某个时间点RAGRetrieval-Augmented Generation 就是让 AI 学会查资料再回答用户提问 → 从知识库检索相关文档 → 把文档给 LLM → LLM 基于文档回答这样 AI 的回答就有了事实依据不再是一本正经地胡说八道。无 RAG vs 有 RAG 的 LLM 回答对比本节目标理解 RAG 的核心原理和价值掌握知识库构建的完整流程区分三种 RAG 架构2-Step、Agentic、Hybrid学会根据场景选择合适的架构业务场景假设你要构建一个企业知识问答系统员工问“公司的报销流程是什么” → 查公司制度文档员工问“项目 A 的技术方案是什么” → 查项目文档员工问“上周五谁批准了这个需求” → 查审批记录这些信息都在公司内部ChatGPT 不知道。你需要构建知识库 —— 把公司文档转成可搜索的形式实现检索 —— 根据问题找到相关文档生成回答 —— LLM 基于检索结果回答核心概念检索流水线RAG 的工作流程分为两大阶段阶段一构建知识库离线数据源 → 文档加载 → 切分块 → 向量化 → 存入向量数据库import { PDFLoader } from langchain/community/document_loaders/fs/pdf; import { RecursiveCharacterTextSplitter } from langchain/textsplitters; import { OpenAIEmbeddings } from langchain/openai; import { MemoryVectorStore } from langchain/classic/vectorstores/memory; const loader new PDFLoader(./company-handbook.pdf); const docs await loader.load(); const splitter new RecursiveCharacterTextSplitter({ chunkSize: 1000, chunkOverlap: 200 }); const chunks await splitter.splitDocuments(docs); const embeddings new OpenAIEmbeddings(); const vectorStore await MemoryVectorStore.fromDocuments(chunks, embeddings);阶段二检索与生成在线用户问题 → 向量化 → 在向量库中搜索 → 取出相关文档 → 交给 LLM 生成答案const retriever vectorStore.asRetriever({ k: 5 }); const relevantDocs await retriever.invoke(公司报销流程是什么); const context relevantDocs.map(doc doc.pageContent).join(/n/n); const answer await model.invoke([ { role: system, content: 基于以下上下文回答问题。如果上下文中没有相关信息就说我不知道。 上下文 ${context} }, { role: user, content: 公司报销流程是什么 } ]);RAG 两阶段检索流水线检索流水线组件RAG 系统由四个核心组件组成每个都可以独立替换1. 文档加载器Document Loaders从各种数据源加载文档import { PDFLoader } from langchain/community/document_loaders/fs/pdf; import { NotionLoader } from langchain/community/document_loaders/notion; import { GithubRepoLoader } from langchain/community/document_loaders/github; const pdfDocs await new PDFLoader(./report.pdf).load(); const notionDocs await new NotionLoader({ ... }).load(); const githubDocs await new GithubRepoLoader(https://github.com/org/repo).load();支持的数据源包括PDF、Word、Notion、Slack、Google Drive、GitHub 等。2. 文本分割器Text Splitters长文档需要切分成小块才能有效检索import { RecursiveCharacterTextSplitter } from langchain/textsplitters; const splitter new RecursiveCharacterTextSplitter({ chunkSize: 1000, chunkOverlap: 200, separators: [/n/n, /n, 。, ., ] }); const chunks await splitter.splitDocuments(docs);为什么要切分LLM 上下文窗口有限小块更精确减少干扰信息切分后可以定位具体段落3. 嵌入模型Embedding Models把文本转成向量语义相近的文本向量也相近import { OpenAIEmbeddings } from langchain/openai; const embeddings new OpenAIEmbeddings({ model: text-embedding-3-small }); const vector await embeddings.embedQuery(什么是报销流程);4. 向量存储Vector Stores专门存储和搜索向量的数据库import { MemoryVectorStore } from langchain/classic/vectorstores/memory; import { PineconeStore } from langchain/pinecone; import { ChromaStore } from langchain/community/vectorstores/chroma; const memoryStore await MemoryVectorStore.fromDocuments(docs, embeddings); const pineconeStore await PineconeStore.fromDocuments(docs, embeddings, { pineconeIndex: myPineconeIndex });RAG 四大核心组件架构三种 RAG 架构根据检索和生成的协作方式RAG 分为三种架构架构特点控制性灵活性延迟2-Step RAG先检索后生成✅ 高❌ 低⚡ 快Agentic RAGAgent 决定何时检索❌ 低✅ 高⏳ 不定Hybrid RAG混合有验证步骤⚖️ 中⚖️ 中⏳ 不定三种 RAG 架构对比架构 12-Step RAG最简单的架构 —— 固定流程先检索后生成。用户问题 → 检索相关文档 → 生成答案 → 返回给用户import { ChatOpenAI } from langchain/openai; const model new ChatOpenAI({ model: gpt-4.1 }); async function twoStepRAG(question: string) { const docs await retriever.invoke(question); const context docs.map(d d.pageContent).join(/n/n); const response await model.invoke([ { role: system, content: 基于以下上下文回答问题。 上下文 ${context} 如果上下文中没有相关信息请说明。 }, { role: user, content: question } ]); return response.content; } const answer await twoStepRAG(公司年假政策是什么);优点简单可预测延迟稳定固定 1 次 LLM 调用容易调试缺点不灵活每次都必须检索检索结果不好时没有补救机会适用场景FAQ、文档问答、知识库查询架构 2Agentic RAGAgent 自己决定何时检索、检索什么。用户问题 → Agent 判断 → 需要检索 ↓ 是 使用检索工具 → 信息够吗 ↓ 不够 继续检索... ↓ 够了 生成答案 → 返回给用户import { createAgent, tool } from langchain; import * as z from zod; const searchKnowledgeBase tool( async ({ query }) { const docs await retriever.invoke(query); return docs.map(d d.pageContent).join(/n/n---/n/n); }, { name: search_knowledge_base, description: 搜索公司知识库获取政策、流程、项目等信息, schema: z.object({ query: z.string().describe(搜索查询) }) } ); const fetchLatestNews tool( async ({ topic }) { return 关于 ${topic} 的最新消息...; }, { name: fetch_latest_news, description: 获取最新行业新闻和动态, schema: z.object({ topic: z.string().describe(新闻主题) }) } ); const ragAgent createAgent({ model: gpt-4.1, tools: [searchKnowledgeBase, fetchLatestNews], systemPrompt: 你是一个企业知识助手。 回答问题时 1. **如果问题涉及公司内部信息政策、流程、项目使用 search_knowledge_base** 2. **如果需要最新的外部信息使用 fetch_latest_news** 3. **如果是常识性问题可以直接回答** 始终基于检索到的信息回答不要编造。 }); const response await ragAgent.invoke({ messages: [{ role: user, content: 公司最近有什么新政策 }] });优点灵活Agent 自主判断可以多次检索直到信息充足可以结合多种工具缺点延迟不可预测可能过度检索或检索不当调试困难适用场景复杂问答、研究助手、多源信息整合架构 3Hybrid RAG结合两者优点增加验证和纠错步骤。用户问题 → 查询增强 → 检索文档 → 信息足够 ↓ 不够 优化查询 → 重新检索 ↓ 够了 生成答案 → 答案质量OK ↓ 不OK 重新生成或换方法 ↓ OK 返回给用户import { StateGraph, START, END, Annotation } from langchain/langgraph; const State Annotation.Root({ question: Annotationstring(), enhancedQuery: Annotationstring(), documents: Annotationstring[](), answer: Annotationstring(), isDocsSufficient: Annotationboolean(), isAnswerGood: Annotationboolean(), retryCount: Annotationnumber() }); async function enhanceQuery(state: typeof State.State) { const enhanced await model.invoke([ { role: system, content: 优化用户查询使其更适合知识库检索。输出优化后的查询。 }, { role: user, content: state.question } ]); return { enhancedQuery: enhanced.content }; } async function retrieveDocuments(state: typeof State.State) { const docs await retriever.invoke(state.enhancedQuery); return { documents: docs.map(d d.pageContent) }; } async function validateDocuments(state: typeof State.State) { const validation await model.withStructuredOutput(z.object({ isSufficient: z.boolean(), reason: z.string() })).invoke([ { role: system, content: 判断检索到的文档是否足够回答问题。 }, { role: user, content: 问题${state.question}/n/n文档${state.documents.join(/n)} } ]); return { isDocsSufficient: validation.isSufficient }; } async function generateAnswer(state: typeof State.State) { const response await model.invoke([ { role: system, content: 基于以下文档回答问题/n${state.documents.join(/n/n)} }, { role: user, content: state.question } ]); return { answer: response.content }; } async function validateAnswer(state: typeof State.State) { const validation await model.withStructuredOutput(z.object({ isGood: z.boolean(), feedback: z.string() })).invoke([ { role: system, content: 评估答案质量是否准确、完整、基于文档。 }, { role: user, content: 问题${state.question}/n答案${state.answer}/n文档${state.documents.join(/n)} } ]); return { isAnswerGood: validation.isGood }; } function routeAfterDocValidation(state: typeof State.State) { if (state.isDocsSufficient) return generateAnswer; if (state.retryCount 2) return generateAnswer; return enhanceQuery; } function routeAfterAnswerValidation(state: typeof State.State) { if (state.isAnswerGood) return end; if (state.retryCount 2) return end; return generateAnswer; } const hybridRAG new StateGraph(State) .addNode(enhanceQuery, enhanceQuery) .addNode(retrieveDocuments, retrieveDocuments) .addNode(validateDocuments, validateDocuments) .addNode(generateAnswer, generateAnswer) .addNode(validateAnswer, validateAnswer) .addEdge(START, enhanceQuery) .addEdge(enhanceQuery, retrieveDocuments) .addEdge(retrieveDocuments, validateDocuments) .addConditionalEdges(validateDocuments, routeAfterDocValidation) .addEdge(generateAnswer, validateAnswer) .addConditionalEdges(validateAnswer, routeAfterAnswerValidation) .compile();优点有质量保证可以自我纠错兼顾控制性和灵活性缺点实现复杂延迟较高需要设计验证逻辑适用场景高质量要求的问答、专业领域、需要准确性保证的场景完整示例企业知识问答系统import { PDFLoader } from langchain/community/document_loaders/fs/pdf; import { RecursiveCharacterTextSplitter } from langchain/textsplitters; import { OpenAIEmbeddings } from langchain/openai; import { MemoryVectorStore } from langchain/classic/vectorstores/memory; import { createAgent, tool } from langchain; import * as z from zod; const loader new PDFLoader(./company-handbook.pdf); const docs await loader.load(); const splitter new RecursiveCharacterTextSplitter({ chunkSize: 1000, chunkOverlap: 200 }); const chunks await splitter.splitDocuments(docs); const embeddings new OpenAIEmbeddings(); const vectorStore await MemoryVectorStore.fromDocuments(chunks, embeddings); const retriever vectorStore.asRetriever({ k: 5 }); const searchCompanyDocs tool( async ({ query }) { const results await retriever.invoke(query); if (results.length 0) { return 未找到相关信息。; } return results.map((doc, i) [文档 ${i 1}]/n${doc.pageContent} ).join(/n/n---/n/n); }, { name: search_company_docs, description: 搜索公司内部文档。 可搜索内容包括 - 公司政策休假、报销、福利等 - 工作流程审批、报告、会议等 - 组织架构部门、职责、联系方式等, schema: z.object({ query: z.string().describe(搜索关键词或问题) }) } ); const knowledgeBot createAgent({ model: gpt-4.1, tools: [searchCompanyDocs], systemPrompt: 你是公司内部知识助手。 工作原则 1. **用户询问公司相关问题时必须先搜索文档** 2. **基于搜索结果回答不要编造信息** 3. **如果搜索不到相关信息明确告知用户** 4. **引用时说明来源根据公司手册...** 回答风格 - 简洁明了 - 分点列出重要信息 - 如有疑问建议联系相关部门 }); async function chat() { const questions [ 公司的年假政策是什么, 如何申请报销, IT 部门的联系方式是什么 ]; for (const question of questions) { console.log(/n问${question}); const response await knowledgeBot.invoke({ messages: [{ role: user, content: question }] }); console.log(答${response.messages.at(-1)?.content}); } } chat();已有知识库怎么办如果你已经有现成的知识库SQL 数据库、CRM、Wiki 等不需要重建两种接入方式方式 1包装成工具Agentic RAGconst searchCRM tool( async ({ customerId }) { const result await crmApi.getCustomer(customerId); return JSON.stringify(result); }, { name: search_crm, description: 查询客户信息, schema: z.object({ customerId: z.string() }) } ); const agent createAgent({ tools: [searchCRM, searchKnowledgeBase, searchWiki] });方式 2查询后提供上下文2-Step RAGasync function answerWithExistingKB(question: string) { const sqlResult await db.query(SELECT * FROM faq WHERE question LIKE %${question}%); const response await model.invoke([ { role: system, content: 基于以下数据库查询结果回答问题/n${JSON.stringify(sqlResult)} }, { role: user, content: question } ]); return response.content; }如何选择 RAG 架构场景推荐架构原因FAQ / 文档问答2-Step RAG简单高效延迟可控研究助手 / 多源查询Agentic RAG需要灵活决策专业领域 / 高准确性Hybrid RAG需要质量验证已有知识库Agentic RAG包装成工具即可RAG 架构选择指南常见问题Q1检索结果不准确怎么办优化切分策略 —— 调整 chunkSize 和 overlap改进嵌入模型 —— 尝试不同的 embedding 模型查询增强 —— 重写用户查询增加关键词混合检索 —— 结合关键词搜索和向量搜索Q2知识库很大向量存储选哪个开发/测试MemoryVectorStore小规模生产Chroma、SQLite-VSS大规模生产Pinecone、Weaviate、MilvusQ3如何保证答案基于文档系统提示明确要求 —— “只基于上下文回答”添加引用 —— 要求 LLM 标注来源答案验证 —— Hybrid RAG 的验证步骤本章小结RAG 的核心要点解决的问题LLM 知识有限且过时让 AI 基于你的数据回答检索流水线文档加载 → 切分 → 向量化 → 存储查询 → 检索 → 生成三种架构2-Step RAG固定流程简单高效Agentic RAGAgent 自主决策灵活Hybrid RAG有验证步骤高质量核心组件Document Loaders加载各种数据源Text Splitters切分长文档Embedding Models文本向量化Vector Stores存储和搜索向量选择建议简单场景用 2-Step复杂场景用 Agentic高质量要求用 HybridRAG 是构建企业级 AI 应用的核心技术掌握它就能让 AI 真正服务于你的业务数据如何学习大模型 AI 由于新岗位的生产效率要优于被取代岗位的生产效率所以实际上整个社会的生产效率是提升的。但是具体到个人只能说是“最先掌握AI的人将会比较晚掌握AI的人有竞争优势”。这句话放在计算机、互联网、移动互联网的开局时期都是一样的道理。我在一线科技企业深耕十二载见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事早已在效率与薪资上形成代际优势我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套AI 大模型突围资料包✅ 从零到一的 AI 学习路径图✅ 大模型调优实战手册附医疗/金融等大厂真实案例✅ 百度/阿里专家闭门录播课✅ 大模型当下最新行业报告✅ 真实大厂面试真题✅ 2026 最新岗位需求图谱所有资料 ⚡️ 朋友们如果有需要《AI大模型入门进阶学习资源包》下方扫码获取~① 全套AI大模型应用开发视频教程包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点② 大模型系统化学习路线作为学习AI大模型技术的新手方向至关重要。 正确的学习路线可以为你节省时间少走弯路方向不对努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划带你从零基础入门到精通③ 大模型学习书籍文档学习AI大模型离不开书籍文档我精选了一系列大模型技术的书籍和学习文档电子版它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。④ AI大模型最新行业报告2025最新行业报告针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。⑤ 大模型项目实战配套源码学以致用在项目实战中检验和巩固你所学到的知识同时为你找工作就业和职业发展打下坚实的基础。⑥ 大模型大厂面试真题面试不仅是技术的较量更需要充分的准备。在你已经掌握了大模型技术之后就需要开始准备面试我精心整理了一份大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。以上资料如何领取为什么大家都在学大模型最近科技巨头英特尔宣布裁员2万人传统岗位不断缩减但AI相关技术岗疯狂扩招有3-5年经验大厂薪资就能给到50K*20薪不出1年“有AI项目经验”将成为投递简历的门槛。风口之下与其像“温水煮青蛙”一样坐等被行业淘汰不如先人一步掌握AI大模型原理应用技术项目实操经验“顺风”翻盘这些资料真的有用吗这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。以上全套大模型资料如何领取