【AI大模型】如何使用 LangChain 建立一个会话式的 RAG Agent 系统,看完这一篇你就懂了!!!

发布时间:2026/11/2 5:42:21

【AI大模型】如何使用 LangChain 建立一个会话式的 RAG Agent 系统,看完这一篇你就懂了!!! 前言在许多问答应用程序中我们希望允许用户进行来回对话这意味着应用程序需要记住过去问题和答案以及将这些问题和答案纳入当前思维的逻辑。在本文中我们重点介绍如何添加整合历史消息的逻辑。我们将介绍两种方法链我们始终在其中执行检索步骤Agent我们让 LLM 自行决定是否以及如何执行检索步骤或多个步骤。聊天记录聊天记录是用户与聊天模型之间对话的记录。它用于在整个对话过程中保持上下文和状态。聊天记录是一系列消息每条消息都与特定角色相关联例如“user”、“assistant”、“system”或“tool”。大多数对话都以设置对话上下文的系统消息开始。接下来是包含用户输入的用户消息然后是包含模型响应的助手消息。助手assistant可以直接响应用户或者如果配置了工具请求则调用工具来执行特定任务。因此完整的对话通常涉及两种交替消息模式的组合用户和助手代表来回对话。助手和工具消息表示的 agent 工作流其中助手正在调用工具来执行特定任务。由于聊天模型对输入大小有最大限制因此管理聊天记录并根据需要对其进行修剪以避免超出上下文窗口非常重要。在处理聊天记录时保留正确的对话结构至关重要。管理聊天记录的关键准则对话应遵循以下结构之一第一则消息是“user”消息或“system”消息后跟“user”消息然后是“assistant”消息。最后一条消息应该是“user”消息或包含工具调用结果的“tool”消息。使用工具调用时“tool”消息应仅跟在请求工具调用的“assistant”消息之后。理解正确的对话结构对于在聊天模型中正确实现记忆至关重要。原始的 RAG 系统我略过了加载文档、拆分文档和生成索引的步骤因为这和本文关系不大。添加聊天记录我们构建的 RAG 链直接使用输入查询来检索相关上下文。但在对话设置中用户查询可能需要对话上下文才能被理解。例如考虑以下的会话用户“物理学对马斯克有什么影响”AI“物理学为马斯克提供了一个理解复杂和反直觉事物的研究框架比如量子力学。它教会他使用第一性原理思考问题这是一种将事物分解到最基本实质再进行推理的方法对探索未知领域非常重要。这种方法帮助他在创新时能追溯问题的本质从而产生独创性的解决方案。”用户“马斯克对这个学科有什么看法”为了回答第二个问题我们的系统需要理解“这个学科”指的是“物理学”。针对这个问题我们需要更新现有的 RAG 链提示模板更新我们的提示模板以支持历史消息作为输入。上下文问题添加一个子链该子链接受最新的用户问题并在聊天历史的上下文中重新表述它。这可以简单地被认为是构建一个新的“历史感知”检索器retriever。而之前我们有查询 - 检索器现在我们将有查询对话历史- LLM - 重新表述的查询 - 检索器首先我们需要定义一个子链该子链接收历史消息和最新的用户问题如果问题引用了历史信息中的任何信息则重新表述该问题。我们将使用一个包含名为“chat_history”的 MessagesPlaceholder 变量的提示。这允许我们使用“chat_history”输入键将消息列表传递给提示模板这些消息将插入在系统消息之后和包含最新问题的人工消息之前。请注意我们利用辅助函数 create_history_aware_retriever 来完成此步骤该函数管理 chat_history 为空的情况否则按顺序应用 prompt | llm | StrOutputParser() | retriever。create_history_aware_retriever 构造一个链该链接受键 input 和 chat_history 作为输入并具有与检索器相同的输出模式。该链将输入查询的改写添加到我们的检索器中以便检索包含对话的上下文。现在我们可以构建完整的 QA 链。我们将使用 create_stuff_documents_chain 生成 question_answer_chain输入键为 context、chat_history 和 input——它接受检索到的上下文以及对话历史记录和查询以生成答案。更详细的解释在这里我们使用 create_retrieval_chain 构建最终的 rag_chain。此链按顺序应用 history_aware_retriever 和 question_answer_chain保留中间输出例如检索到的上下文以方便使用。它具有输入键 input 和 chat_history并在其输出中包含 input、chat_history、context 和 answer。我们来试验一下因为我们的链包含“chat_history”输入所以调用者需要管理聊天记录。我们可以通过将输入和输出消息附加到列表中来实现这一点。但是在生产中问答应用程序通常会将聊天历史记录保存到数据库中并能够适当地读取和更新它。LangGraph 实现了内置的持久层使其成为支持多轮对话的聊天应用程序的理想选择。所以现在将我们的聊天模型包装在最小的 LangGraph 应用程序中使我们能够自动保存消息历史记录从而简化多轮应用程序的开发。核心逻辑如下此应用程序开箱即用地支持多个对话线程。我们传入一个配置字典为线程指定唯一标识符以控制运行哪个线程。这使应用程序能够支持与多个用户的交互。可以通过应用程序的状态检查对话历史记录以下就是我们这个会话式 RAG 系统的架构图了引入 AgentAgent 利用 LLM 的推理能力在执行过程中做出决策。使用 Agent 可以让你在检索过程中减轻一些判断力。尽管它们的行为比链更难预测但它们在这种情况下具有一些优势Agent 直接生成检索器的输入而不一定需要我们明确构建上下文就像我们上面所做的那样Agent 可以执行多个检索步骤来处理查询或者完全不执行检索步骤例如响应用户的一般问候。Agent 可以访问工具并管理其执行。在本例中我们将把检索器转换为 LangChain 工具供 Agent 使用现在我们已经定义了工具和 LLM我们可以创建 Agent 了。我们将使用 LangGraph 来构建 Agent。目前我们使用高级接口来构建 Agent但 LangGraph 的优点在于如果你想要修改代理逻辑这个高级接口由低级、高度可控的 API 支持。注意我加入了内存检查点来存储历史记录。这就是我们构建对话式 RAG Agent 所需的全部内容。让我们观察一下它的行为。请注意如果我们输入不需要检索步骤的查询Agent 就不会执行该步骤此外如果我们输入确实需要检索步骤的查询Agent 将生成工具的输入上面的输出很长我的图只截取了其中一部分。上图中Agent 没有将我们的查询逐字逐句地插入到工具中而是删除了“什么”等不必要的单词。同样的原则允许 Agent 在必要时使用对话的上下文请注意Agent 能够推断出我们查询中的“他”指的是“马斯克”并生成了一个合理的搜索查询在本例中为“马斯克 对 物理学 的 看法”。最后的最后感谢你们的阅读和喜欢我收藏了很多技术干货可以共享给喜欢我文章的朋友们如果你肯花时间沉下心去学习它们一定能帮到你。因为这个行业不同于其他行业知识体系实在是过于庞大知识更新也非常快。作为一个普通人无法全部学完所以我们在提升技术的时候首先需要明确一个目标然后制定好完整的计划同时找到好的学习方法这样才能更快的提升自己。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】大模型知识脑图为了成为更好的 AI大模型 开发者这里为大家提供了总的路线图。它的用处就在于你可以按照上面的知识点去找对应的学习资源保证自己学得较为全面。经典书籍阅读阅读AI大模型经典书籍可以帮助读者提高技术水平开拓视野掌握核心技术提高解决问题的能力同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说阅读经典书籍是非常有必要的。实战案例光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这时候可以搞点实战案例来学习。面试资料我们学习AI大模型必然是想找到高薪的工作下面这些面试题都是总结当前最新、最热、最高频的面试题并且每道题都有详细的答案面试前刷完这套面试题资料小小offer不在话下640套AI大模型报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
延伸阅读

更多相关文章

2026/10/25 14:56:12

3.5英寸Skylake单板计算机:工业边缘网关实战部署全解析

3.5英寸的单板计算机(SBC)配上Skylake处理器,这套组合放在今天看似乎有点“复古”,但你要是跑过几个工控项目,就会明白这类板子到现在仍然是很多方案里的主力选手。我最近刚完成一个基于3.5英寸Skylake SBC的工业边缘网…

2026/10/24 14:06:23

【干货收藏】Skill Graphs:解锁大模型深度认知能力的新范式

人们普遍低估了结构化知识的力量。它能催生全新类型的应用。 现在大家写的 Skills,大多只捕捉某件事的一个侧面:一个用于总结的 Skill、一个用于代码审查的 Skill,诸如此类。通常是一个文件,只承载一种能力。 对简单任务来说这没问…

2026/11/2 5:40:06

VoiceStudio实战:从文本到成品的本地TTS语音工作流搭建指南

聊起VoiceStudio,先说句实在话——这两年AI配音工具多到让人眼花缭乱,但大多数产品要么是网页接口的“黑盒”,要么是单个模型包的“玩具”,真正能让人舒服地完成一段从文本到成品音频的完整工作链的,少之又少。我折腾V…

2026/11/2 5:40:06

储能辅助火电机组二次调频控制策略与容量优化配置

二次调频这件事,凡是碰过火电机组AGC逻辑的人都知道痛点在哪:调度指令一下来,机组要花几十秒甚至几分钟才能把出力顶上去,锅炉蓄热、汽压恢复、煤量跟得上跟不上,全是一笔烂账。储能辅助火电机组二次调频控制策略及容量…

2026/11/2 5:40:06

AI驱动的优化技术栈:从线性规划到Vibe Coding

1. 项目概述:当优化科学遇上AI革命十年前我第一次用Gurobi求解一个简单的线性规划问题时,光是配置License就花了三天时间。如今在开源求解器和AI辅助建模的加持下,同样的工作只需要三分钟——这就是技术迭代带给科研工作者的真实红利。这个融…

2026/11/2 5:40:06

keyCode、key与code:键盘事件编码链路及快捷键实战

调一个快捷键功能,按下去没反应,加个日志一看,e.keyCode打出来是 229。换一个键,变成 0。再换一个,明明按的是同一个物理位置,切换输入法之后又变成了别的数字。这种事我第一次碰到的时候盯着控制台看了半小…

2026/11/2 5:40:06

AB1500量产工装MP Tool 3.7.0.1:频偏校准与MAC防冲突

简介:Airoha.AB1500_FamilyMPTool_3.7.0.1.zip 是面向洛达AB1500系列蓝牙芯片开发者与量产测试人员的调试烧录工具包,可用于固件更新、功能测试与故障排查,覆盖从原型验证到批量生产的多个环节。压缩包共21个文件,以15个DLL动态库…

2026/11/2 5:35:06

西门子S7-1200与Modbus RTU通信全链路调试指南

1. 为什么这个“西门子1200 Modbus RTU”组合值得你花两小时认真读完我第一次在某高校自动化实验室调试一台旧款变频器时,被Modbus RTU的CRC校验卡了整整三天。PLC程序编译通过、接线反复确认过五遍、串口助手收发数据也看似正常——可就是读不到寄存器值。最后发现…

2026/11/1 0:01:26

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/1 1:01:33

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

工业级SPI隔离设计:硬件抗扰与信号完整性实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

PLFM_RADAR:主动探测数据通道,构建低误报的数据感知系统

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

工业SPI隔离设计:MAX14431与STM32F746硬件抗干扰实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/1 0:01:26

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/1 1:01:33

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑