当前位置: 首页 > news >正文

(5)LangGraph4j框架ReActAgent实现

LangGraph4j框架ReActAgent实现

ReAct-Agent概念

ReAct-Agent 是一种大模型应用中的智能体架构。ReAct 是 Re (Reasoning,推理)和 Act(Action,行动)两个单词的简写,用通俗的话来说,它可以让大模型像人一样“思考”和“行动”,实现更强的任务处理能力。这里把它拆解为两个关键部分来说明:

Re(Reasoning,推理)

大模型通过“推理”步骤来理解任务或者问题。就像你面对一个复杂的问题时,先分析现状、列出条件,然后在脑海中一步步推导出答案一样,ReAct 中的“推理”部分会利用模型的语言理解能力,生成逻辑清晰的分析路径。

Act(Action,行动)

仅仅推理还不够,智能体还需要“行动”,也就是执行特定的操作。比如:

  • 通过调用某个工具(例如计算器、数据库查询、外部api接口)来获取信息或解决问题。
  • 根据现有信息做出决定并采取下一步行动。

在 ReAct 框架中,“行动”这一步和“推理”紧密结合。模型不会一次性给出答案,而是以“边想边做”的方式,循环地进行推理和行动,直到完成任务。

实际运作流程

  1. 模型先“想”一想:分析问题,给出可能需要的步骤。
  2. 模型再“做”一做:如果需要,它可以去查外部信息、调用工具,或者生成一个具体操作。
  3. 根据结果再“想” :拿到行动的反馈后,重新推理,调整步骤,直到问题解决。

ReAct 的特点

  • 动态灵活:不像传统模型“一问一答”,ReAct 模型会动态地调整策略。
  • 能调用外部工具:通过执行操作(例如数据库查询或API调用),可以解决大模型本身无法直接处理的问题。
  • 更接近人类思维:这种“想一步,做一步”的方式更像人类解决复杂问题的过程。

通俗来说,ReAct 就是让模型“像人一样,先动脑后动手,再动脑接着手”,在不断循环中完成任务。

工具调用

LangGraph4j 中的 ReAct-Agent

ReactAgent 接口提供了构建和运行状态图(StateGraph)的功能。它包含两个主要内部类:CallAgent 和 ExecuteTools,分别用于调用 AI 模型生成响应和执行工具请求。

整个流程体现了典型的 ReAct 模式:

  • Reasoning (推理): CallAgent 生成思考并决定是否调用工具。
  • Action (动作): ExecuteTools 执行具体工具操作。
  • 循环直到获得最终答案(final_response)为止。
状态图设计
  • 使用 StateGraph 定义执行流程:

    • 起始节点为 START → agent

    • agent根据是否需要调用工具 (shouldContinue) 决定下一步:

      • “continue” → action
      • “end” → END
    • action 节点执行完工具后再次回到 agent

new StateGraph<>(State.SCHEMA, stateSerializer).addNode("agent", node_async(callAgent)).addNode("action", node_async(executeTools))	.addEdge(START, "agent").addConditionalEdges("agent",edge_async(shouldContinue),Map.of("continue", "action", "end", END)).addEdge("action", "agent");

在这里插入图片描述

CallAgent
  • 负责调用 LangChain4J 的聊天模型或流式聊天模型来生成 AI 响应。

  • 根据是否启用流式输出选择不同的执行策略:

    • 非流式模式直接调用 ChatModel.execute() 获取完整响应。
    • 流式模式使用 StreamingChatModel.chat() 并结合 StreamingChatGenerator 来处理逐步生成的结果。
  • 将响应结果映射为结构化格式,支持两种情况:

    • 如果需要执行工具,则返回 messages 字段表示待执行的工具调用。
    • 如果任务完成,则返回 final_response 表示最终答案。
ExecuteTools
  • 处理由 AI 生成的工具调用请求。
  • 使用 LangChain4jToolService 执行这些工具,并将结果整合后返回。
  • 如果没有找到工具请求,则返回提示信息。
http://www.dtcms.com/a/279407.html

相关文章:

  • mit6.5840-lab4C-Snapshot-25Summer
  • Java Stream流详解
  • 文心一言 4.5 开源深度剖析:中文霸主登场,开源引擎重塑大模型生态
  • C++11 std::is_permutation:从用法到原理的深度解析
  • 什么是延迟双删
  • 算法训练营day18 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
  • 通过 ip a 查看网络接口名
  • 【算法】贪心算法:摆动序列C++
  • 2025js——面试题(8)-http
  • Linux 系统下的 Sangfor VDI 客户端安装与登录完全攻略 (CentOS、Ubuntu、麒麟全线通用)
  • 程序跑飞是什么?
  • 核电概念盘中异动,中核科技涨停引领板块热度
  • 物联网技术促进能量收集创新应用落地
  • 第一章编辑器开发基础第一节绘制编辑器元素_4输入字段(4/7)
  • 【一维 前缀和+差分】
  • 互斥锁与同步锁
  • IIS错误:Service Unavailable HTTP Error 503. The service is unavailable.
  • Unity Shader 预热与缓存优化
  • Unity中HumanBodyBones骨骼对照
  • 卡在“pycharm正在创建帮助程序目录”
  • 笔试——Day6
  • 达梦国产数据库安装
  • React Hook 详解:原理、执行顺序与 useEffect 的执行机制
  • 切比雪夫多项式
  • leetcode 1290. 二进制链表转整数 简单
  • C++类模版与友元
  • 进程、线程、协程
  • windows内核研究(进程与线程-进程结构体EPROCESS)
  • Django基础(一)———创建与启动
  • 【反转链表专题】【LeetCode206.反转链表】【LeetCode25.K个一组翻转链表】【LeetCode234.回文链表】