收藏 | 从零开始学LangGraph,构建能思考的Agentic RAG系统,小白也能轻松上手!
传统RAG检索系统存在检索质量差、无法处理查询歧义、无法自纠正错误等问题导致幻觉率高。Agentic RAG通过引入Think-Act-Observe循环实现主动推理和自我修正。文章详细介绍了Agentic RAG的设计哲学和核心能力并使用LangGraph框架进行实践展示了如何构建一个动态检索、自我反思、多工具协作的智能检索系统。通过LangGraph的状态管理、可视化调试等优势即使是小白也能轻松上手提升RAG系统的响应质量和用户体验。当RAG学会思考用LangGraph构建Agentic RAG系统完全指南2024年我们还在为能用的RAG系统欢呼2025年RAG已经成为企业AI的标配但到了2026年如果你还在用传统的线性RAG——检索、增强、生成——你可能正在浪费用户的时间。根据2025年的生产环境数据高达30%的RAG响应存在事实性错误而这些错误的根源几乎都指向同一个问题检索质量。这篇文章将带你从传统RAG的困境出发深入理解Agentic RAG的设计哲学并通过LangGraph构建一个真正会思考的检索系统。一、传统RAG的致命缺陷1.1 线性管道的脆弱性传统RAG的工作流程非常直观用户提问 → 向量检索 → 拼接上下文 → LLM生成回答这个流程看起来完美但实际生产中却处处踩坑问题一检索器装聋作哑当用户问Lilian Weng关于reward hacking的类型有什么观点时检索器可能只返回了reward hacking相关的片段却漏掉了types这个关键限定词。结果LLM基于不完整的信息生成了一个看似合理但完全偏离重点的回答。问题二查询歧义无法处理用户问那个产品怎么样——哪个产品传统RAG没有任何机制来澄清或细化查询只能硬着头皮检索然后生成一个模糊的回答。问题三错误无法自纠正当检索到的文档与问题无关时传统RAG没有意识到错误的能力。它只会忠实地把无关内容喂给LLM然后LLM会产生一个自信但错误的回答——这就是所谓的幻觉问题。1.2 为什么简单方案不够用你可能会想“那我们加个re-ranker或者调大top-k”这些都是治标不治本。真正的问题在于传统RAG是被动的而复杂问题需要主动的推理。就像一个只会按图索骥的图书管理员传统RAG从不质疑用户的查询从不反思检索结果的质量也从不主动寻找更多信息。而Agentic RAG就是要让系统具备这种主动性。二、什么是Agentic RAG2.1 从管道到循环范式的根本转变Agentic RAG的核心转变是从线性管道到推理循环。这不是简单的技术升级而是思维方式的根本改变。传统RAG的工作模式就像一个只会执行命令的流水线工人1.收到问题2.去仓库找资料3.把资料交给写手4.写手生成答案问题出在哪里每个环节都是盲执行。工人不会质疑问题是否清晰不会检查找来的资料是否相关更不会在发现问题后主动修正。Agentic RAG的工作模式则像一个有经验的咨询顾问5.先理解你的问题必要时追问澄清6.判断需要查哪些资料去哪里查7.拿到资料后评估是否真的有用8.如果资料不对换个角度再查9.确认信息可靠后才给出专业答案这就是从被动执行到主动推理的质变。2.2 Think-Act-Observe循环Agentic RAG的核心是Think-Act-Observe思考-行动-观察循环这个循环会持续进行直到系统认为已经获得足够信息来回答问题。Think思考LLM分析当前状态决定下一步做什么·这个问题需要查资料吗·用户真正想问的是什么·我现有的信息足够吗Act行动执行具体的操作·调用检索工具·改写查询词·选择合适的数据源Observe观察评估行动结果·检索到的文档相关吗·信息是否完整·需要进一步行动吗2.3 五大核心能力详解一个成熟的Agentic RAG系统具备以下五种核心能力它们共同构成了系统的智能能力1智能查询理解系统能够深入理解用户问题的真实意图而不是简单地匹配关键词。工作原理·意图识别分析问题是问什么、“怎么问”、“为什么问”·实体抽取识别问题中涉及的关键实体人名、产品名、概念等·复杂度评估判断问题是否需要多步推理或简单查询就能解决实际例子用户问那个产品怎么样→ 意图识别用户想了解某个产品 → 实体抽取那个没有指明具体产品 → 系统回复您指的是哪个产品能提供更具体的名称吗能力2动态检索策略系统不会用固定的检索策略而是根据问题类型动态选择。支持的策略·向量检索基于语义相似度适合概念性问题·关键词检索精确匹配术语适合事实查询·混合检索结合向量和关键词取长补短·多跳检索当结果不足时自动扩展搜索范围能力3自我反思与纠错当检索结果不理想时系统能够意识到问题并主动纠正。纠错机制·相关性评分判断检索到的内容是否真的有用·质量评估检查信息是否过时、是否有偏见·改写决策当文档不相关时决定如何改写查询能力4多工具协作系统不局限于向量数据库可以调用多种外部工具。常用工具·向量数据库存储文档的检索器·Web搜索API搜索实时信息·数据库查询查询结构化数据·计算工具执行数学运算·外部API调用第三方服务能力5记忆与上下文系统记住对话历史在后续交互中保持连贯性。记忆类型·短期记忆当前会话的上下文·长期记忆跨会话的历史信息·工作记忆中间推理步骤的保存2.4 Agentic RAG vs 传统RAG特性传统RAGAgentic RAG执行模式线性管道循环推理检索方式被动检索主动决策错误处理无法纠错自我反思工具支持单一向量库多工具协作幻觉率~30%5%响应延迟低略高什么时候选择Agentic RAG·检索失败时需要自动重试·答案不在知识库中时需要追问·需要多轮交互·对质量要求高2.5 核心架构组件一个完整的Agentic RAG系统通常包含以下组件查询分析器Query Analyzer·判断是否需要检索·识别查询意图和实体·生成检索策略检索器Retriever·向量相似度检索·关键词匹配·混合检索策略查询改写器Query Rewriter·扩展查询词·消除歧义·语义增强文档评分器Document Grader·评估文档相关性·过滤无关内容·生成质量信号回答生成器Answer Generator·基于有效上下文生成回答·标注引用来源·处理不确定情况2.6 为什么选择LangGraph在众多Agent框架中LangGraph有几个独特优势状态管理内置的状态机制让复杂的多步推理变得可控。每一步的状态变化都有迹可循便于调试和优化。可视化可以清晰地看到每一步的决策过程。出了问题一眼就能看出卡在哪一步。持久化支持会话记忆和断点恢复。长对话不会丢失上下文用户体验更连贯。灵活性既可以用预置模板快速开始也可以完全自定义。从简单到复杂平滑过渡。生产就绪支持流式输出、错误重试、并发控制等企业级特性。最重要的是LangGraph的设计哲学与Agentic RAG高度契合——用图来表示状态流转用节点来封装逻辑用边来定义决策。三、用LangGraph构建Agentic RAG3.1 环境准备首先安装必要的依赖pip install langgraph langchain langchain-openai chromadb你需要准备·OpenAI API Key或其他LLM服务·一个向量数据库本例使用Chroma3.2 定义核心组件Step 1: 创建向量检索器from langchain_openaiimportOpenAIEmbeddings, ChatOpenAI from langchain_community.vectorstoresimportChroma from langchain.text_splitterimportRecursiveCharacterTextSplitter from langchain_community.document_loadersimportTextLoader# 加载文档loaderTextLoader(your_knowledge_base.txt)documentsloader.load()# 分割文档text_splitterRecursiveCharacterTextSplitter(chunk_size1000,chunk_overlap200)splitstext_splitter.split_documents(documents)# 创建向量存储vectorstoreChroma.from_documents(documentssplits,embeddingOpenAIEmbeddings())retrievervectorstore.as_retriever(search_kwargs{k:5})Step 2: 定义检索工具from langchain.toolsimporttool tool def retrieve_documents(query: str)-str:从知识库中检索相关文档 docsretriever.invoke(query)return\n\n.join([doc.page_contentfordocindocs])retriever_toolretrieve_documentsStep 3: 初始化LLMfrom langchain.chat_modelsimportinit_chat_model llminit_chat_model(gpt-4.1,temperature0)3.3 构建状态图from langgraph.graphimportStateGraph, MessagesState, START, END from langgraph.prebuiltimportToolNode, tools_condition from langchain.messagesimportHumanMessage# 创建状态图workflowStateGraph(MessagesState)MessagesState 是LangGraph预置的状态类它包含一个messages列表用于存储对话历史。3.4 实现核心节点节点1: 查询生成/响应决策def generate_query_or_respond(state: MessagesState):让LLM决定是否需要检索 responsellm.bind_tools([retriever_tool]).invoke(state[messages])return{messages:[response]}节点2: 查询改写REWRITE_PROMPT 分析用户问题的语义意图生成一个更适合检索的改写版本。 原始问题{question}请生成一个改进后的问题要求1. 保留核心意图2. 添加可能的同义词3. 消除歧义 改写后的问题 def rewrite_question(state: MessagesState):改写原始问题以提高检索质量 questionstate[messages][0].content promptREWRITE_PROMPT.format(questionquestion)responsellm.invoke([{role:user,content:prompt}])return{messages:[HumanMessage(contentresponse.content)]}节点3: 文档评分from pydanticimportBaseModel, Field from typingimportLiteral class GradeDocuments(BaseModel):文档相关性评分 binary_score: strField(descriptionyes 如果文档相关no 如果不相关)GRADE_PROMPT 你是一个文档相关性评估器。 检索到的文档{context}用户问题{question}判断文档是否包含与问题相关的信息 只回答yes或no。 def grade_documents(state: MessagesState)-Literal[generate_answer,rewrite_question]:评估检索文档的相关性 questionstate[messages][0].content contextstate[messages][-1].content promptGRADE_PROMPT.format(questionquestion,contextcontext)graderllm.with_structured_output(GradeDocuments)responsegrader.invoke([{role:user,content:prompt}])ifresponse.binary_scoreyes:returngenerate_answerelse:returnrewrite_question节点4: 生成回答GENERATE_PROMPT 基于以下上下文回答用户问题。如果上下文中没有足够信息请明确说明。 上下文{context}问题{question}回答请标注信息来源 def generate_answer(state: MessagesState):基于检索到的上下文生成回答 questionstate[messages][0].content contextstate[messages][-1].content promptGENERATE_PROMPT.format(questionquestion,contextcontext)responsellm.invoke([{role:user,content:prompt}])return{messages:[response]}3.5 组装完整工作流# 添加节点workflow.add_node(generate_query_or_respond)workflow.add_node(retrieve, ToolNode([retriever_tool]))workflow.add_node(rewrite_question)workflow.add_node(generate_answer)# 设置入口workflow.add_edge(START,generate_query_or_respond)# 条件边决定是否检索workflow.add_conditional_edges(generate_query_or_respond, tools_condition,# 自动判断是否调用了工具{tools:retrieve, END: END# 如果不需要检索直接结束})# 条件边评估文档质量workflow.add_conditional_edges(retrieve, grade_documents# 返回 generate_answer 或 rewrite_question)# 回答后结束workflow.add_edge(generate_answer, END)# 改写后重新开始检索workflow.add_edge(rewrite_question,generate_query_or_respond)# 编译图graphworkflow.compile()3.6 执行和调试# 执行查询forchunkingraph.stream({messages:[{role:user,content:Lilian Weng关于reward hacking的类型有什么观点}]}):fornode, updateinchunk.items(): print(f {node} )update[messages][-1].pretty_print()print()输出示例generate_query_or_respond[调用工具: retrieve_documents]retrieve[检索到3篇文档]grade_documents[评分: no - 文档不相关]rewrite_question[改写为:Lilian Weng reward hacking types classification categorization]generate_query_or_respond[调用工具: retrieve_documents]retrieve[检索到5篇文档]grade_documents[评分:yes- 文档相关]generate_answer根据Lilian Weng的文章reward hacking主要有三种类型...四、进阶技巧与最佳实践4.1 多检索器协同复杂场景下你可能需要多个专业检索器tool def search_product_docs(query: str)-str:搜索产品文档returnproduct_retriever.invoke(query)tool def search_api_docs(query: str)-str:搜索API文档returnapi_retriever.invoke(query)tool def search_troubleshooting(query: str)-str:搜索故障排除指南returntroubleshoot_retriever.invoke(query)tools[search_product_docs, search_api_docs, search_troubleshooting]LLM会根据问题自动选择合适的工具。4.2 添加记忆能力使用LangGraph的checkpointer实现会话记忆from langgraph.checkpoint.memoryimportInMemorySaver checkpointerInMemorySaver()graphworkflow.compile(checkpointercheckpointer)# 执行时指定thread_idconfig{configurable:{thread_id:user_123}}resultgraph.invoke({messages:[...]}, config)4.3 流式输出对于长回答使用流式输出提升用户体验asyncforeventingraph.astream({messages:[...]},stream_modevalues):ifmessagesinevent: print(event[messages][-1].content,end,flushTrue)4.4 错误处理与重试为关键节点添加错误处理from tenacityimportretry, stop_after_attempt, wait_exponential retry(stopstop_after_attempt(3),waitwait_exponential(multiplier1,min4,max10))def retrieve_with_retry(state: MessagesState): try:returnretrieve_documents(state)except Exception as e: print(f检索失败: {e}, 正在重试...)raise4.5 性能优化缓存检索结果from functoolsimportlru_cache lru_cache(maxsize1000)def cached_retrieve(query: str)-str:returnretriever.invoke(query)并行检索importasyncio async def parallel_retrieve(queries: list[str])-list[str]: tasks[async_retrieve(q)forqinqueries]returnawait asyncio.gather(*tasks)批量处理对于大量文档使用批量嵌入# 批量嵌入比逐个嵌入快10倍以上embeddingsOpenAIEmbeddings()batch_embeddingsembeddings.embed_documents([doc.page_contentfordocindocuments])五、常见问题与避坑指南5.1 检索质量差怎么办症状检索到的文档与问题无关解决方案10.检查分块策略chunk_size是否合适11.尝试混合检索向量关键词12.添加re-ranker重排序13.优化查询改写prompt5.2 响应太慢怎么办症状用户等待时间过长解决方案14.减少循环迭代次数设置最大重试次数15.使用更快的模型如GPT-4o-mini16.实现流式输出17.缓存常见查询5.3 幻觉仍然存在症状LLM生成错误信息解决方案18.强化文档评分逻辑19.在prompt中明确不知道就说不知道20.添加事实核查节点21.使用结构化输出强制引用来源5.4 状态管理混乱症状多轮对话中上下文丢失解决方案22.使用checkpointer持久化状态23.定期总结对话历史24.为每个用户使用独立的thread_id六、总结Agentic RAG代表了RAG技术的下一代演进——从被动的管道到主动的智能体。核心要点回顾传统RAGAgentic RAG线性流程循环推理被动检索主动决策无法纠错自我反思单一策略多工具协作LangGraph的优势·状态管理清晰·可视化调试友好·支持复杂控制流·生态成熟稳定最后对于正在迷茫择业、想转行提升或是刚入门的程序员、编程小白来说有一个问题几乎人人都在问未来10年什么领域的职业发展潜力最大答案只有一个人工智能尤其是大模型方向当下人工智能行业正处于爆发式增长期其中大模型相关岗位更是供不应求薪资待遇直接拉满——字节跳动作为AI领域的头部玩家给硕士毕业的优质AI人才含大模型相关方向开出的月基础工资高达5万—6万元即便是非“人才计划”的普通应聘者月基础工资也能稳定在4万元左右。再看阿里、腾讯两大互联网大厂非“人才计划”的AI相关岗位应聘者月基础工资也约有3万元远超其他行业同资历岗位的薪资水平对于程序员、小白来说无疑是绝佳的转型和提升赛道。对于想入局大模型、抢占未来10年行业红利的程序员和小白来说现在正是最好的学习时机行业缺口大、大厂需求旺、薪资天花板高只要找准学习方向稳步提升技能就能轻松摆脱“低薪困境”抓住AI时代的职业机遇。如果你还不知道从何开始我自己整理一套全网最全最细的大模型零基础教程我也是一路自学走过来的很清楚小白前期学习的痛楚你要是没有方向还没有好的资源根本学不到东西下面是我整理的大模型学习资源希望能帮到你。扫码免费领取全部内容最后1、大模型学习路线2、从0到进阶大模型学习视频教程从入门到进阶这里都有跟着老师学习事半功倍。3、 入门必看大模型学习书籍文档.pdf书面上的技术书籍确实太多了这些是我精选出来的还有很多不在图里4、AI大模型最新行业报告2026最新行业报告针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。5、面试试题/经验【大厂 AI 岗位面经分享107 道】【AI 大模型面试真题102 道】【LLMs 面试真题97 道】6、大模型项目实战配套源码适用人群四阶段学习规划共90天可落地执行第一阶段10天初阶应用该阶段让大家对大模型 AI有一个最前沿的认识对大模型 AI 的理解超过 95% 的人可以在相关讨论时发表高级、不跟风、又接地气的见解别人只会和 AI 聊天而你能调教 AI并能用代码将大模型和业务衔接。大模型 AI 能干什么大模型是怎样获得「智能」的用好 AI 的核心心法大模型应用业务架构大模型应用技术架构代码示例向 GPT-3.5 灌入新知识提示工程的意义和核心思想Prompt 典型构成指令调优方法论思维链和思维树Prompt 攻击和防范…第二阶段30天高阶应用该阶段我们正式进入大模型 AI 进阶实战学习学会构造私有知识库扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架抓住最新的技术进展适合 Python 和 JavaScript 程序员。为什么要做 RAG搭建一个简单的 ChatPDF检索的基础概念什么是向量表示Embeddings向量数据库与向量检索基于向量检索的 RAG搭建 RAG 系统的扩展知识混合检索与 RAG-Fusion 简介向量模型本地部署…第三阶段30天模型训练恭喜你如果学到这里你基本可以找到一份大模型 AI相关的工作自己也能训练 GPT 了通过微调训练自己的垂直大模型能独立训练开源多模态大模型掌握更多技术方案。到此为止大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗为什么要做 RAG什么是模型什么是模型训练求解器 损失函数简介小实验2手写一个简单的神经网络并训练它什么是训练/预训练/微调/轻量化微调Transformer结构简介轻量化微调实验数据集的构建…第四阶段20天商业闭环对全球大模型从性能、吞吐量、成本等方面有一定的认知可以在云端和本地等多种环境下部署大模型找到适合自己的项目/创业方向做一名被 AI 武装的产品经理。硬件选型带你了解全球大模型使用国产大模型服务搭建 OpenAI 代理热身基于阿里云 PAI 部署 Stable Diffusion在本地计算机运行大模型大模型的私有化部署基于 vLLM 部署大模型案例如何优雅地在阿里云私有部署开源大模型部署一套开源 LLM 项目内容安全互联网信息服务算法备案…扫码免费领取全部内容3、这些资料真的有用吗这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2424212.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!