在生产环境中,问答类应用通常会将聊天记录持久化到数据库中,并能够适当地读取和更新这些记录。
LangGraph 实现了一个内置的持久化层,使其非常适合支持多轮对话的聊天应用。
为了管理多轮对话和多路(thread)对话,我们只需在编译应用时指定一个 checkpointer(检查点管理器)。由于Graph中的节点会将消息附加到状态State中,因此我们可以在多次调用中保留一致的聊天记录。
LangGraph 自带了一个简单的内存检查点管理器,我们在下方示例中会使用它。
我们现在可以沿用与之前类似的调用方式:
请注意,模型在第二个问题中生成的查询语句结合了对话上下文。
在这里,LangSmith 的追踪记录尤其有帮助,因为我们可以清楚地看到,在每一个步骤中,聊天模型能够访问到哪些消息。
Agents(智能体)利用大型语言模型(LLM)的推理能力在执行过程中做出决策。使用智能体可以将更多的检索过程决策权交由模型处理。尽管它们的行为不像上面的 “chain(链式流程)” 那样可预测,但它们能够为了完成一个查询:
- 执行多轮检索步骤,或
- 反复优化某一次检索。
下面我们将构建一个最简化的RAG(检索增强生成)智能体。借助 LangGraph 提供的预构建 ReAct 智能体构造器(ReAct agent constructor),我们只需一行代码即可实现。

我们之前的实现中,流程在最后的生成步骤结束。而这里的关键区别在于:
工具调用(tool invocation)不会直接结束流程,而是循环回到最初的 Agent 智能体 LLM 调用。
模型随后可以选择:
- 使用已检索到的上下文回答问题,或者
- 生成另一个工具调用,以获取更多信息。
我们来测试一下这个机制。下面我们构造一个问题,这个问题通常需要多轮检索步骤才能得到答案:
这个智能体的行为包括:
- 生成搜索一个task decomposition 标准方法的查询
- 收到回答后,又生成了第二个查询,用于查找任务标准分解方法的常归扩展;
- 在获取了所有必要的上下文之后,最终回答了问题。
通过 LangSmith 的追踪记录(trace),我们可以查看完整的执行步骤序列,包括延迟时间和其他元数据。
通过前面3个章节和本章节的学习我们已经完成了构建一个基础对话式问答应用的全部步骤:
- 我们使用 chain(链式流程) 构建了一个可预测的应用,每次用户输入最多生成一个查询;
- 我们使用 agent(智能体) 构建了一个可以执行多轮查询的应用,适合更复杂的场景。
我是一名有十年以上经验的Java老码农,曾经沉迷于代码的世界,也曾在传统业务系统中摸爬滚打。但时代在变,AI 正在重塑技术格局。我不想被浪潮甩在身后,所以选择重新出发,走上 AI 学习与转型的旅程。
这个公众号,记录的不是鸡汤,也不是“割韭菜”的教程,而是我一个程序员真实的思考、学习、实战经验,以及从困惑到突破的全过程。
如果你也是在技术瓶颈中思考转型、想了解 AI 如何与传统开发结合、又或仅仅想看一个普通工程师的进化之路,欢迎关注,一起探索,一起成长。
关注我 和我一起,紧跟着AI的步伐,不被时代抛弃。✨
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/241414.html原文链接:https://javaforall.net
