ReAct Agent 与 Agent 编排:从单 Agent 闭环到多 Agent 协作(纯享版)

ReAct Agent 与 Agent 编排:从单 Agent 闭环到多 Agent 协作(纯享版)

ReAct Agent 与 Agent 编排:从单 Agent 闭环到多 Agent 协作


本篇文章,大概会花费你10分钟时间,带你对Agent进行更加深入的了解。

目录:

一、这 10 分钟到底会讲什么

开场:

今天我只讲一条主线:
单个 Agent 怎么跑起来,多 Agent 又是怎么被编排起来的。
前者的核心是 ReAct 闭环,后者的核心是 Agent orchestration(编排)。
而 CloudWeGo Eino ADK,给这两件事提供了工程化落地方式。

什么是编排?
广义上来讲:只要你在组织多个执行单元的顺序、依赖、分工、路由,这都叫编排。

  • 单个 Agent 内部的多节点流程编排,算编排
  • 多个 Agent 之间的协作编排,也算编排

而今天编排的主角是,多Agent之间的协作。


二、我将会分8节来讲


第 1 节:为什么要讲 ReAct 和 Agent 编排

时间:1 分钟

这一页我只说一个问题:

“能对话”为什么不等于“能上线”?

原因:

很多人第一次接触 Agent,会觉得它无非就是 Prompt + Model + Tool
但真到生产环境中,这些是远远不够的。
因为一个能上线的 Agent,不只是要会回答,还要会:调工具传状态控制流程中断恢复输出可观测的执行过程

所以今天这场分享,其实不是在讲“一个聪明的模型”,
而是在讲“一个可治理的 Agent 系统”。

第 2 节:先讲清 Agent 的最小运行时骨架

时间:1 分钟

这一页讲三个词:

  • Agent
  • Runner
  • AgentEvent

可以这样说:

在 Eino ADK 里,我觉得最重要的不是某个具体 Agent,而是它背后的运行时骨架。

Agent 解决的是:谁来执行任务
Runner 解决的是:这个任务怎么被统一托管起来
AgentEvent 解决的是:执行过程中发生了什么

这意味着,Agent 不再只是一次性返回一个字符串,
而是持续地产出事件流:
可能是模型输出、可能是 tool call、可能是 transfer,也可能是 interrupt。

所以 Eino 的切入点很精准:
把 Agent 运行过程也当成一等公民。

这里有一点可以确定:

后面我们讲 ReAct 和编排,其实都建立在这套运行时骨架上。

第 3 节:ReAct 到底是什么

时间:1.5 分钟

本页是核心页,
所以需要大家着重注意:

ReAct 的核心不是“某种 prompt 技巧”,
而是一种闭环范式:
Reason → Act → Observe

也就是:模型先思考下一步怎么做然后调用工具去拿外部信息再把工具结果喂回模型继续推理

这个闭环会不断重复,直到模型不再产生 tool call,才结束。
在这里插入图片描述

所以这就是ReAct最关键的价值:

它为什么重要?
因为它把模型的推理,锚定在了外部事实之上。
以前模型是“自己想”;
现在模型是“边查边想”。
所以它的可解释性更强,幻觉风险也更低。

这里抛一个面试点:

面试里经常会问两个控制点:
终止条件是什么?
答:模型不再产生 tool call。
为什么要有 MaxIterations/MaxStep?
答:防止无限循环,控制成本和可用性。

若这一页理解透了,则后面所有内容都顺了。
切记,所谓的范式,不过是一套方法模板罢了,没有大家想象的高大上。


第 4 节:Eino 里 ReAct 是怎么落地的

时间:1.5 分钟

这页我不会讲太细的源码,而是重点讲工程表达。

可以这样说:

在 Eino 里,ReAct 不是停留在概念层,而是被明确表达成了一个执行闭环。

最直观的理解就是:
ChatModel 和 ToolsNode 之间形成了一个环。

模型先输出 tool call,工具执行后把 observation 写回状态,再回到模型继续推理。
这个过程一直循环,直到没有 tool call,或者命中直接结束条件。

在 ADK 里,这个闭环最典型的封装就是 ChatModelAgent
它本质上就是一个工程化的 ReAct Agent。

它帮你处理了很多工程问题,比如:工具调用循环最大迭代次数某些工具执行后直接返回显式退出协议

记住这句很关键的话:

因此,我更愿意把 ChatModelAgent 理解成:
不是“一个聊天模型”,而是“一个带 ReAct 运行时的 Agent 封装”。

这一点,真的很加分。


第 5 节:Agent 编排到底在编排什么

时间:1 分钟

本页承上启下,非常重要。

可以这样说:

如果 ReAct 解决的是“一个 Agent 内部怎么闭环”,
那 Agent 编排解决的就是:
多个 Agent 之间怎么协作。

所以这两件事不是同一个层面的问题。ReAct 关注的是单 Agent 内部:推理、行动、观察Orchestration 关注的是多 Agent 外部:分工、路由、状态共享、控制权转移

也就是说:
ReAct 是单体闭环,编排是群体协作。

然后直接引到后面三种模式:

在 Eino ADK 里,最值得讲的三种编排模式分别是:Workflow AgentsSupervisorPlan-Execute

第 6 节:三种典型编排模式,一次讲清

时间:2 分钟

这一页很朴素,你可以直接把这三种编排当成 “三兄弟”

第一种:Workflow Agents

可以这样说:

Workflow Agents 是确定性编排。
路怎么走,是代码提前写死的。
比如顺序执行、循环执行、并行执行。

它的优点是:可预测、易审计、易测试。
它的缺点是:灵活性不如模型自主决策。

第二种:Supervisor

Supervisor 是中心化调度。
也就是有一个总控 Agent,负责把任务分配给不同子 Agent。
子 Agent 负责干活,总控负责继续判断下一步。

它更像一个项目经理模式。

第三种:Plan-Execute

Plan-Execute 是“先规划,再执行,再重规划”。
它适合长任务、复杂任务。
因为它不是边走边猜,而是先把任务拆成步骤,再一步一步做。

所以它比纯 ReAct 更适合长链路研究型任务。

然后你做个总收束:

这三种模式,本质上对应三种不同的控制哲学:Workflow:代码决定流程Supervisor:中心调度决定流程Plan-Execute:规划结果决定流程

第 7 节:几个最容易讲混的边界

时间:2.5 分钟

这一页不贪多,只讲3个最有价值的。

边界 1:Transfer vs AgentAsTool

Transfer 是控制权交接。
我把任务交给你,你接着往下做。

AgentAsTool 是工具式调用。
我调用你,等你返回结果,然后我继续处理。

所以一个是“交棒”,一个是“外包”。

边界 2:BreakLoop vs Exit

BreakLoop 是局部退出。
只跳出当前 Loop。

Exit 是全局终止。
后面的 Agent 都不再执行。

边界 3:ADK Workflow Agents ≠ compose.Workflow

若这个搞混了,将会非常致命

ADK 里的 Workflow Agents,是多 Agent 的编排模式。
compose.Workflow 是底层 DAG 编排框架。

后者强调的是数据流映射,而且它不支持环。
所以 ReAct 这种闭环,不能拿 compose.Workflow 去表达,
得用 Graph 或 ChatModelAgent 这种方式去做。

第 8 节:收尾

时间:0.5 分钟

这 10 分钟,如果只记住一句话,我希望是这句:

ReAct 解决的是单 Agent 如何形成“推理—行动—观察”的闭环;
Agent 编排解决的是多个 Agent 如何分工、协作和治理。
Eino ADK 的价值,就在于把这两件事都做成了可工程化落地的运行时。


所以从面试视角看,真正重要的不是你会不会调一个模型,
而是你能不能讲清:一个 Agent 为什么能跑起来多个 Agent 为什么能协作起来它们为什么能被治理、被中断、被恢复、被追踪

三、总结

本篇文章,以下几点最为重要。

  • ReAct 是单 Agent 闭环
  • 本篇说的编排是多 Agent 协作
  • Workflow / Supervisor / Plan-Execute 是三种不同控制哲学
  • ADK Workflow Agents 和 compose.Workflow 不是一回事
所以从工程视角看,Agent 不只是“模型会说话”,
而是“模型、工具、状态和控制流”被组织成了一个可治理系统。
ReAct 是这个系统里单 Agent 的闭环,编排是多个 Agent 的协作方式。

Read more

.NET10之Web API Action参数来源自动推断

ASP.NET Core Web API 的 Action 参数来源自动推断(Binding Source Inference)是 [ApiController] 特性提供的核心便利机制,它能根据参数类型、名称、路由模板及依赖注入(DI)注册状态,自动决定参数从请求的哪个位置(路由、查询、Body、服务等)取值,大幅减少 [From*] 特性的手动标注。以下基于 ASP.NET Core 9/10 最新官方文档 深入解析,包含规则、问题解决、生产场景与完整可运行代码。 一、核心机制与默认推断规则(官方定义) 1. 启用条件 仅当控制器标注 [ApiController] 时,参数来源推断才自动生效。 2. 完整推断规则(

不用部署服务器,也能给前端 / 客户演示?内网穿透实战分享

不用部署服务器,也能给前端 / 客户演示?内网穿透实战分享

在日常开发中,经常会遇到一个很现实的问题:  功能已经在本地开发完成了,但前端同事、测试、客户都看不到效果。 很多人的第一反应是: 部署一套测试服务器。 但实际情况往往是 * 服务器没准备好 * 只是临时演示 * 改动频繁,反复部署很浪费时间 后来我发现,其实根本不需要部署服务器,用内网穿透就能很优雅地解决这个问题。 一、真实场景说明 场景 1:给前端联调接口 后端服务跑在本地: http://localhost:8080 问题是: * 前端在外地 * 无法访问本地接口 * 每次改接口都要重新部署 场景 2:给客户演示功能 * 新功能刚开发完 * 客户想先看看效果 * 但还没上线正式环境 这时候再去搞服务器,明显有点“杀鸡用牛刀”。 二、传统方案为什么不太合适? 对于“临时演示 / 联调”来说,都太重了。 三、解决方案:内网穿透 内网穿透的核心思路只有一句话: 把你本地的服务,

从被秒封到稳过Cloudflare!Canvas/WebGL/WebRTC多维度浏览器指纹隐身全实战

从被秒封到稳过Cloudflare!Canvas/WebGL/WebRTC多维度浏览器指纹隐身全实战

前阵子帮客户爬某跨境电商的商品数据,一开始信心满满:Puppeteer改了webdriver特征、UA池轮换、高匿代理池、行为模拟全拉满,结果30个节点一启动,访问首页直接被Cloudflare人机验证秒封,换IP、清Cookie全没用。 折腾了整整3天,抓包逆向了平台的反爬JS才发现,人家根本没看你那点基础伪装——直接拿Canvas、WebGL、WebRTC三个指纹做了关联校验,我30个节点的核心指纹完全一致,直接被标记成爬虫集群,封得明明白白。 后来我啃了几十篇反爬厂商的技术白皮书,踩穿了100+反爬平台的检测逻辑,终于摸出了一套多维度指纹隐身方案。现在这套方案跑了半年,稳过Cloudflare、Akamai、数美、顶象这些主流反爬,哪怕用同一台机器开100个实例,也不会被指纹关联识别。 今天把全流程掏出来,从原理、踩坑到代码实现,全是能直接落地的干货,网上90%的教程没讲透的核心细节,我全给你说明白。 一、先搞懂:为什么你的伪装永远被识破? 很多人对浏览器指纹的理解还停留在“改个UA、关了webdriver就完事”,但现在的反爬早就进入了多维度关联识别的时代。 1.

乡村政务办公系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

乡村政务办公系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】

摘要 随着乡村振兴战略的深入推进,乡村政务信息化建设成为提升基层治理能力的关键环节。传统的乡村政务管理方式存在效率低下、信息孤岛、数据共享困难等问题,亟需通过现代化信息技术手段进行优化升级。乡村政务办公系统信息管理系统的开发旨在实现政务信息的数字化、网络化和智能化管理,提高乡村政务工作的透明度和服务效率。该系统通过整合资源、优化流程,为乡村干部和村民提供便捷的政务办理和信息查询服务,推动乡村治理体系和治理能力现代化。关键词:乡村振兴、政务信息化、基层治理、数字化管理、服务效率。 本系统采用前后端分离架构,后端基于SpringBoot框架实现高效稳定的业务逻辑处理,前端使用Vue.js框架构建交互友好的用户界面,数据库采用MySQL存储和管理数据。系统功能涵盖用户管理、帮扶信息管理、新闻公告发布等模块,支持多角色权限控制,确保数据安全性。系统通过RESTful API实现前后端数据交互,并采用JWT进行身份认证,保障系统安全可靠。此外,系统还支持数据可视化展示,便于乡村政务数据的统计与分析。关键词:SpringBoot、Vue.js、MySQL、权限控制、数据可视化。 数据表设计