news 2026/2/8 12:03:10

FastGPT Agent ReAct 原理全解析!从源码到实战,吃透这一篇就够了!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FastGPT Agent ReAct 原理全解析!从源码到实战,吃透这一篇就够了!

本文介绍了 ReAct 、Plan-and-Execute 两种大模型推理模式,以及 FastGPT 对 ReAct 的三种实现方式。

01 ReAct 和 Plan

ReAct(Reasoning and Acting),让大模型通过「观察-思考-行动」三个步骤,循环往复,能够自主决定使用一些工具去解决问题。从代码层面来讲,本质是递归(or 循环),而递归结束的条件往往是超过次数限制、问题已经得到解决等条件。

Plan-and-Execute,相较于 ReAct,会先让大模型制定计划、步骤(子任务),然后按照计划依次执行。中间可能会调整计划,如有必要。

从一些测评集来看,ReAct响应速度更快,消耗 token 量少,但处理复杂任务的表现不及 Plan-and-Execute。这似乎也是意料之中。

笔者认为,在智能客服、需要即时响应等情况下,ReAct是最优解。且大部分实际生产环境中,计划可以由基于 Cot(Chain-of-Thought) 设计模式的 Prompt 来完成。

FastGPT中「工具调用」可以看做是 ReAct 的思路。

02 FastGPT 代码

代码所在目录:

1. 入口与主流程

工具调用的主入口是 dispatchRunTools(见 runTool/index.ts),它负责根据当前节点、上下文、历史消息等,决定是否需要调用工具,并组织好调用工具所需的参数和上下文。

  1. 工具调用的三种模式

根据所用大模型的能力,分为三种调用方式:

  • ToolChoice(如 OpenAI 的 tool_calls):runToolWithToolChoice
  • FunctionCall(如 OpenAI 的 function_call):runToolWithFunctionCall
  • PromptCall(通过 prompt 让大模型决定是否调用工具):runToolWithPromptCall

dispatchRunTools 会根据模型的能力选择合适的调用方式。

科普一下 tool_calls 和 function_call 的区别:

function_call(旧版本)

  • 每次只能调用一个函数
  • 已被标记为 deprecated(废弃)

tool_calls(新版本)

  • 支持并行调用多个函数
  • 当前推荐的标准做法

最新的模型,目前主要使用 tool_calls,提供给大模型 tool schema,没有显式的使用Prompt干预整个过程。也可以看一下古老的PromptCall是如何处理的。附源码中的Prompt。

import { replaceVariable } from '@fastgpt/global/common/string/tools'; export const Prompt_Tool_Call = `<Instruction> 你是一个智能机器人,除了可以回答用户问题外,你还掌握工具的使用能力。有时候,你可以依赖工具的运行结果,来更准确的回答用户。 工具使用了 JSON Schema 的格式声明,其中 toolId 是工具的唯一标识, description 是工具的描述,parameters 是工具的参数及参数表述,required 是必填参数的列表。 请你根据工具描述,决定回答问题或是使用工具。在完成任务过程中,USER代表用户的输入,TOOL_RESPONSE代表工具运行结果,ANSWER 代表你的输出。 你的每次输出都必须以0,1开头,代表是否需要调用工具: 0: 不使用工具,直接回答内容。 1: 使用工具,返回工具调用的参数。 例如: USER: 你好呀 ANSWER: 0: 你好,有什么可以帮助你的么? USER: 现在几点了? ANSWER: 1: {"toolId":"searchToolId1"} TOOL_RESPONSE: """ 2022/5/5 12:00 Thursday """ ANSWER: 0: 现在是2022年5月5日,星期四,中午12点。 USER: 今天杭州的天气如何? ANSWER: 1: {"toolId":"searchToolId2","arguments":{"city": "杭州"}} TOOL_RESPONSE: """ 晴天...... """ ANSWER: 0: 今天杭州是晴天。 USER: 今天杭州的天气适合去哪里玩? ANSWER: 1: {"toolId":"searchToolId3","arguments":{"query": "杭州 天气 去哪里玩"}} TOOL_RESPONSE: """ 晴天. 西湖、灵隐寺、千岛湖…… """ ANSWER: 0: 今天杭州是晴天,适合去西湖、灵隐寺、千岛湖等地玩。 </Instruction> ------ 现在,我们开始吧!下面是你本次可以使用的工具: """ {{toolsPrompt}} """ 下面是正式的对话内容: USER: {{question}} ANSWER: `; export const getMultiplePrompt = (obj: { fileCount: number; imgCount: number; question: string; }) => { const prompt = `Number of session file inputs: Document:{{fileCount}} Image:{{imgCount}} ------ {{question}}`; return replaceVariable(prompt, obj); };

3. 工具调用的详细流程

以 runToolWithToolChoice 为例,流程如下(见 runTool/toolChoice.ts):

  1. 准备工具描述:将所有可用工具(toolNodes)转为 OpenAI tool schema,传递给大模型。
  2. 构造对话历史:包括系统 prompt、历史消息、用户输入等。
  3. 请求大模型:带上 tools schema,请求大模型,模型会决定是否需要调用工具,并返回 tool_calls。
  4. 执行工具:根据大模型返回的 tool_calls,找到对应的工具节点,解析参数,实际执行工具(本质是调度 workflow 的子流程)。
  5. 结果回传:将工具执行结果通过 SSE 或直接返回给前端,并递归判断是否需要继续调用工具或结束。
  6. 工具节点的定义与参数
  • 工具节点(toolNodes)包含了工具的唯一标识(nodeId)、描述、参数 schema(JSON Schema 格式)等。
  • 工具参数的定义和校验也在节点 schema 中完成,最终会被序列化为 JSON 传递给大模型。

4. 递归结束条件

  1. 工具有交互节点,并被选择

  2. 没有工具需要调用

大模型返回的结果中没有需要调用的工具(如 toolCalls/functionCalls/toolJson 为空),说明流程已结束。

  1. 递归次数达到上限

有一个保护参数 maxRunToolTimes(如 ToolChoice 默认 30),防止死循环,超过则强制终止。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

第一阶段(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 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/5 17:09:28

Spoolman终极指南:彻底解决3D打印丝材管理难题

你是否曾经遇到过这样的情况&#xff1a;正准备开始3D打印&#xff0c;却发现丝材剩余量不够完成整个模型&#xff1f;或者在不同打印机之间切换时&#xff0c;总是记不清哪台机器上装的是什么规格的丝材&#xff1f;更糟糕的是&#xff0c;你是否曾经因为忘记库存情况而重复购…

作者头像 李华
网站建设 2026/2/6 22:19:09

1小时搞定!用AI快速验证你的续杯商业创意

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 快速开发一个续杯概念验证原型&#xff0c;包含&#xff1a;1.简易3D饮料杯模型&#xff1b;2.续杯动画效果&#xff1b;3.基本交互界面&#xff1b;4.数据统计展示。使用Three.js实…

作者头像 李华
网站建设 2026/2/5 20:00:44

Kotaemon日志分析助手:ELK栈联动排查系统问题

Kotaemon日志分析助手&#xff1a;ELK栈联动排查系统问题 在现代企业级应用的运维现场&#xff0c;一个常见的场景是&#xff1a;监控系统突然报警&#xff0c;订单服务响应延迟飙升。值班工程师迅速打开Kibana&#xff0c;面对成千上万条滚动的日志记录&#xff0c;开始手动筛…

作者头像 李华
网站建设 2026/2/6 22:17:51

1小时开发:无线网卡诊断工具原型制作

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 构建一个无线网卡诊断MVP工具&#xff0c;核心功能&#xff1a;1. 基础错误检测&#xff1b;2. 驱动状态检查&#xff1b;3. 一键修复按钮。要求&#xff1a;使用快马平台快速开发&…

作者头像 李华
网站建设 2026/2/6 11:53:37

电商大促前必做:用Percona Toolkit做好MySQL压测

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个电商数据库压力测试套件&#xff0c;集成pt-stress进行定制化负载测试&#xff0c;使用pt-upgrade比较不同MySQL版本的性能差异。要求包含TPS/QPS监控图表&#xff0c;能够…

作者头像 李华