AI 数据通道:JSON·Markdown

元认知:Agent 编排的根本矛盾 #

在拆 AgentScope 之前,先讲清楚所有 Agent 编排框架都要面对的根本矛盾。

矛盾一:控制与涌现的张力 #

Agent 的核心是 LLM——一个概率模型,不是确定性程序。你给它工具和指令,它自己决定怎么用、什么时候用、用什么顺序。这就是涌现——行为不是你编排出来的,是模型自己”想”出来的。

但生产环境需要控制——可预测、可审计、可回滚、可中断。你不能让一个管理生产数据库的 agent “自由发挥”——它删了一张表,你说”这是涌现行为”?

所有编排框架都在解决同一个矛盾:给模型多大的自由度

1
2
3
4
完全控制 ←————————————————————————————→ 完全自由
LangGraph AgentScope 2.0
状态图、节点边、审批门 "不约束模型"
你画好路径,模型照着走 你给权限和沙箱,模型自己决定怎么走

LangGraph 选择左侧:你画好状态图,模型在图里走。每一步可预测,但每一步都需要你预定义。模型变强了,你的图就过时了——因为模型能走的路比你画的多。

AgentScope 2.0 选择右侧:不画图,给模型权限系统和沙箱,让它自己走。赌的是模型能力会越来越强,固化编排是多余的限制。

这不是对错问题,是赌注方向——你赌模型能力增长,还是赌模型能力停滞。

矛盾二:编排层与执行层的分离 #

早期 Agent 框架把编排和执行混在一起——agent loop 里直接调工具、直接操作文件系统。这在原型阶段没问题,但进入生产环境后会遇到三个问题:

  1. 安全——agent 有 bash 权限 = 有 root 权限,一条恶意消息可以删库
  2. 隔离——多个用户共用一个 agent,A 的操作不能影响 B
  3. 审计——agent 做了什么不可追溯,日志可被篡改

解决方案是编排层与执行层分离——编排层只做决策(调什么工具、传什么参数),执行层在沙箱里跑,两者通过协议通信。

1
2
3
4
5
编排层(Agent Loop)          ← 决策:调什么工具、传什么参数
↓ 协议
执行层(沙箱) ← 执行:bash/python/文件操作,隔离环境
↓ 回执
编排层 ← 观察:执行结果、权限检查

AgentScope 2.0 把这个分离做到了产品级——权限系统、沙箱、多租户是一等公民,不是后加的功能。

矛盾三:对话驱动 vs 事件驱动 #

Agent 的”手动挡”是对话驱动——你问它答。但生产环境的 agent 大部分时间不应等人来问,而应被事件触发:传感器数据异常、定时任务、webhook 回调。

1
2
对话驱动:人类 → agent → 执行 → 返回
事件驱动:事件源 → agent → 执行 → 回执 → 等待下一个事件

AgentScope 2.0 的事件系统是统一事件总线——前端、人机协同、工具调用、后台任务都走同一条事件流。这不是”加了个消息队列”,是把 agent 的所有 IO 统一到了一个抽象下。


搭积木:AgentScope 2.0 的架构实现 #

以上三个矛盾是地基。AgentScope 2.0 的每一个架构决策,都是在这些矛盾上选了一条路。拆开引擎盖,看的是原理如何变成代码

积木一:事件系统——统一事件总线 #

AgentScope 2.0 的第一个架构决策是统一事件总线。所有东西——前端 UI 更新、人机协同审批、工具调用请求、后台任务完成——都走同一条事件流。

1
2
3
4
5
6
7
async for evt in agent.reply_stream(UserMsg("Tony", "Hi, Friday!")):
match evt.type:
case EventType.REPLY_START: ...
case EventType.MODEL_CALL_START: ...
case EventType.TEXT_BLOCK_START: ...
case EventType.TEXT_BLOCK_DELTA: ...
case EventType.TEXT_BLOCK_END: ...

这不是”加了个 pub/sub”。这里的设计决策是:agent 的所有 IO 统一到一个抽象下

为什么这很重要?因为生产 agent 的 IO 来源是多源的——前端 WebSocket、webhook、cron 定时器、MCP 工具调用、人机协同审批。如果每个来源用自己的协议(前端用 WebSocket、工具用 JSON-RPC、审批用 HTTP),编排层要处理 N 种 IO 模式,复杂度爆炸。

统一事件总线的代价是:所有 IO 都要适配成事件。前端交互不是 HTTP 请求-响应,而是事件流。工具调用不是同步函数,是事件触发 + 事件回执。这增加了适配成本,但换来了编排层的简单——它只处理事件,不关心事件来源。

发散思考:这和 ZeroClaw 的 SOP 引擎是同一个思路——事件触发标准操作流程。不同的是,ZeroClaw 的 SOP 是预定义的流程图(事件 → 步骤 A → 步骤 B → 回执),AgentScope 的事件流是模型驱动的(事件 → 模型决策 → 工具调用 → 事件回执)。前者是确定性编排,后者是涌现性编排。两者适合不同场景——SOP 适合”每次都一样的流程”(巡检、备份),事件流适合”每次都不一样的决策”(分析异常数据、生成报告)。

积木二:权限系统——细粒度工具/资源控制 #

AgentScope 2.0 的第二个决策是权限系统作为一等公民

1
2
3
4
5
6
7
8
9
10
11
12
agent = Agent(
name="Friday",
model=DashScopeChatModel(model="qwen3.6-plus"),
toolkit=Toolkit(tools=[
Bash(), # ← 谁 能调?
Grep(),
Glob(),
Read(),
Write(),
Edit(),
]),
)

每个工具调用前,权限系统检查:当前用户有没有权限调这个工具?这个工具操作的资源在这个用户的权限范围内吗?

这不是”加个审批弹窗”。 审批弹窗是应用层防护——prompt injection 可以让模型自己点确认。权限系统是架构层防护——权限不通过,工具根本不会被执行,模型拿不到结果。

为什么权限系统对生产 agent 是刚需?因为生产环境的 agent 不是单用户的——多个租户、多个会话、多种角色。A 租户的 agent 不能读 B 租户的文件。普通用户的 agent 不能执行管理员才能做的操作。没有权限系统,你要在每个工具调用处手写 if-else 检查——这不可维护。

AgentScope 的权限粒度到工具 + 资源级别——不只是”能不能调 Write”,而是”能不能写这个特定文件“。这是最小权限原则在 agent 场景的精确映射。

结合实际验证:对比 LangGraph——LangGraph 没有内置权限系统。你要自己加。这意味着每个用 LangGraph 的团队都要重新实现一遍权限逻辑——重复劳动,且容易出错。AgentScope 把权限做成框架级,是一次性的投入,所有用户共享。

积木三:多租户与多会话——生产级隔离 #

第三个决策是多租户 + 多会话隔离

1
2
3
4
5
6
7
租户 A(公司甲)
├→ 会话 1(用户 A1 的 agent)
├→ 会话 2(用户 A2 的 agent)
└→ 会话 3(定时任务 agent)
租户 B(公司乙)
├→ 会话 1(用户 B1 的 agent)
└→ ...

每个会话是隔离的——独立的上下文、独立的记忆、独立的工具权限。租户之间的数据完全隔离——A 的 agent 看不到 B 的任何东西。

这不是”多用户支持”。多用户是 N 个用户共用一个 agent 实例。多租户是 N 个组织各自有独立的 agent 配置、独立的工具权限、独立的数据空间。区别是隔离级别——多用户隔离的是会话上下文,多租户隔离的是整个 agent 运行环境。

为什么这对 AgentScope 的定位很重要?因为 AgentScope 2.0 的 FastAPI agent service 是面向服务化部署的——不是一个库,是一个服务。一个服务实例要服务多个组织,没有多租户就只能一组织一实例,运维成本爆炸。

发散:OpenClaw 也有会话隔离——main 会话全权,非 main 自动沙箱。但 OpenClaw 的隔离是单用户的(你自己的 agent,不同会话不同权限)。AgentScope 的隔离是多组织的(不同公司共用一个服务实例,数据完全隔离)。两者面向不同场景——OpenClaw 是个人 agent,AgentScope 是企业 agent service。

积木四:沙箱——本地 / Docker / E2B #

第四个决策是沙箱作为执行层

1
2
3
4
5
6
# 工具在沙箱里执行,不在编排层的主进程里
toolkit = Toolkit(tools=[Bash(), Read(), Write(), Edit()])
# Bash() 的执行环境可以是:
# - 本地(开发时,不安全)
# - Docker(自托管,容器隔离)
# - E2B(云沙箱,完全隔离)

编排层(agent loop)和执行层(工具调用)在物理上分离——编排层在主进程,执行层在沙箱。两者通过事件总线通信。

这是前面矛盾二的直接实现:编排层只决策,执行层在沙箱里跑。即使沙箱被攻破(prompt injection 让 agent 执行恶意代码),影响范围限于沙箱——主进程和宿主机不受影响。

结合实际验证:smolagents 也做了这个分离——LocalPythonExecutor 明确标注”不是安全边界”,必须用 E2B/Docker。但 smolagents 的沙箱是”执行 Python 代码”的沙箱,AgentScope 的沙箱是”执行工具调用”的沙箱——前者是代码执行隔离,后者是 agent 行为隔离。后者更全面——不只是代码执行,文件读写、进程管理、网络访问都在沙箱里。

积木五:中间件系统——可组合的推理-行动循环钩子 #

第五个决策是中间件系统

AgentScope 2.0 的 agent loop 不是写死的——中间件可以插入到推理-行动循环的任意点:

1
感知 → [中间件 A:日志] → [中间件 B:权限检查] → 模型推理 → [中间件 C:内容过滤] → 工具调用 → [中间件 D:审计] → 观察

每个中间件是一个可组合的钩子——你可以加日志、加权限、加内容过滤、加审计,不需要改 agent loop 本身的代码。

这和 Web 框架的中间件是同一个思路——Express/Koa 的中间件可以插入到请求-响应循环的任意点。区别是 Web 框架处理的是 HTTP 请求,AgentScope 的中间件处理的是模型推理和工具调用

为什么这很重要?因为生产 agent 需要的横切关注点(cross-cutting concerns)很多——日志、审计、权限、限流、内容过滤、成本控制。如果没有中间件系统,这些逻辑会被塞进 agent loop 的主代码,导致主代码越来越臃肿。中间件让它们可插拔、可组合、可复用。

发散:这是”开闭原则”在 agent 架构中的体现——对扩展开放(加中间件),对修改封闭(不改 agent loop)。LangGraph 的状态图也可以加节点实现类似功能,但加节点意味着改图结构——这是侵入式的。中间件是非侵入式的——agent loop 不知道中间件的存在。

积木六:Agent Team——Leader 调度 Workers #

2026 年 6 月新增。Leader agent 可以创建 worker agents,分配任务,收集结果。

1
2
3
4
Leader Agent(调度者)
├→ Worker 1(研究:搜索资料)
├→ Worker 2(分析:处理数据)
└→ Worker 3(写作:生成报告)

这不是”多 agent 对话”(AutoGen 风格——多个 agent 互相聊天)。这是层级式分工——leader 做决策和调度,workers 做执行。类似 CrewAI 的 Crews,但 AgentScope 的实现基于事件总线——worker 的创建、任务分配、结果回收都是事件。

为什么是层级式而非对话式?因为对话式多 agent 有一个根本问题:没有终止条件。两个 agent 互相聊天,什么时候停?层级式有明确的终止——leader 收到所有 worker 的结果后,自己做综合判断,然后结束。生产环境需要确定性,层级式比对话式更可控。


案例即原理:从核心讲场景 #

场景一:企业内部知识助手 #

一个公司要部署一个 agent——员工问它问题,它搜索内部文档,有权限的文档才返回答案。

1
2
3
4
5
6
7
8
员工 A 问:"Q3 销售数据怎么样?"

AgentScope Agent
↓ 权限系统检查:员工 A 有没有权限看销售数据?
├→ 有 → 工具调用:搜索内部文档(沙箱内执行)
│ ↓
│ 返回 Q3 销售报告摘要
└→ 没有 → 返回"你没有权限查看销售数据"

这里讲的不是”AgentScope 能做企业知识助手”——而是权限系统如何决定 agent 的行为边界。没有权限系统,agent 会返回所有文档——包括员工不该看到的。权限系统不是功能,是安全边界

LangGraph 要做同样的事,需要自己实现权限检查逻辑——在每个工具调用处加 if-else。AgentScope 的权限系统把这件事架构化了——权限规则和工具定义分离,改权限不需要改工具代码。

场景二:事件驱动的运维 agent #

一个运维团队要部署一个 agent——服务器 CPU 飙高时自动分析日志、判断原因、执行修复。

1
2
3
4
5
6
7
8
9
Prometheus 告警(CPU > 90%)
↓ webhook
AgentScope 事件总线
↓ 触发 agent
Agent 分析日志(沙箱内执行 grep/分析脚本)
↓ 权限系统检查:agent 有没有权限执行修复命令?
├→ 低风险(清理缓存)→ 自动执行 → 回执
├→ 中风险(重启服务)→ 人工审批 → 执行 → 回执
└→ 高风险(回滚数据库)→ 阻断 → 通知 oncall

这里讲的不是”AgentScope 能做运维 agent”——而是事件驱动如何替代对话驱动。运维 agent 不需要人问它——告警就是事件,事件触发 agent。权限系统决定 agent 能自动做什么、需要审批什么、必须阻断什么。

这里和 ZeroClaw 的 SOP 引擎做对比:ZeroClaw 的 SOP 是预定义流程(告警 → 步骤 1 → 步骤 2 → 回执),适合确定性运维。AgentScope 的事件驱动 + 模型决策适合非确定性运维——告警后需要分析日志判断原因,每次的原因不同,路径不同。SOP 是”照着流程走”,事件驱动是”自己判断怎么走”。

场景三:多租户 SaaS Agent 服务 #

一个 SaaS 平台要为多个企业客户提供 agent 服务——每个企业有自己的文档库、自己的权限体系、自己的 agent 配置。

1
2
3
4
5
6
7
8
9
SaaS 平台(一个 AgentScope 实例)
├→ 租户 A(公司甲)
│ ├→ 文档库 A(租户 A 私有)
│ ├→ 权限体系 A(甲的员工角色和权限)
│ └→ Agent 配置 A(甲的工具集和 prompt)
├→ 租户 B(公司乙)
│ ├→ 文档库 B(租户 B 私有,A 看不到)
│ └→ ...
└→ 平台管理员(运维)

这里讲的不是”AgentScope 支持多租户”——而是隔离级别决定了部署模式。没有多租户,一企业一实例,N 个企业 N 个实例——运维成本线性增长。有多租户,一个实例服务 N 个企业——运维成本趋近常数。

GBrain 也有类似的”联邦”概念——多人联邦、OAuth 分区、团队共享制度记忆。但 GBrain 的联邦是知识层的联邦(不同人看不同数据),AgentScope 的多租户是运行时的联邦(不同组织用不同 agent 配置、不同工具权限、不同沙箱)。前者是数据隔离,后者是执行隔离。


缺陷与批判:从原理角度说为什么不行 #

缺陷一:DashScope 绑定——中国本土的双刃剑 #

AgentScope 2.0 的 README 用 DashScopeChatModel(model="qwen3.6-plus") 作为默认示例。DashScope 是阿里云的模型服务,对应通义千问。

这不是中立的”支持多 provider”——默认集成暴露了生态倾向。AgentScope 是阿里/蚂蚁出品,DashScope 是阿里云的产品。两者绑定意味着:

  • 国内用户:无缝——DashScope 国内直连,无需代理,无需翻墙
  • 海外用户:门槛——要改 provider 配置,但文档和示例以 DashScope 为主

这不是技术缺陷,是商业定位的代价。AgentScope 选择了中国本土市场作为主要用户群——多租户、权限系统、企业级隔离这些特性,明显是面向中国企业的 to B 需求。代价是国际化时需要做更多 provider 适配和文档翻译。

缺陷二:不约束模型 = 不可预测 #

“为日益强大的 agentic LLM 设计,不约束模型”——这个哲学赌的是模型能力增长。但如果模型能力在某个阶段停滞了,不约束就变成了不控制。

LangGraph 的状态图是确定性护栏——即使模型变蠢了,它也只能在图里走,不会跑偏。AgentScope 没有这个护栏——模型自己决定调用什么工具、什么顺序。如果模型幻觉了,它可能调用不该调用的工具(虽然权限系统会阻断,但阻断后 agent 会卡住或重试,消耗 token)。

从原理角度说:涌现的控制成本是权限系统的复杂度。你要预先定义所有工具的权限规则——谁能调、在什么条件下调、操作哪些资源。权限规则越复杂,维护成本越高。LangGraph 的状态图把控制做进了编排——你画好路径,模型只能走。AgentScope 把控制做进了权限——模型自由走,但每一步都检查权限。前者是”前向控制”(事前规划路径),后者是”运行时控制”(实时检查权限)。运行时控制更灵活,但也更难预测——你不知道模型会走什么路径,只能确保每一步都在权限范围内。

缺陷三:事件系统的调试地狱 #

统一事件总线很优雅——所有 IO 都是事件。但调试时,事件链是不可预测的:

1
事件 A → 触发事件 B → 触发事件 C → 触发工具调用 → 事件 D → 触发事件 E ...

当 agent 行为异常时,你要追踪整条事件链——哪个事件的 payload 出错了?哪个中间件改变了事件?事件是异步的,时序不保证,日志要跨异步边界关联。

这是事件驱动架构的通病——不是 AgentScope 独有的。但 Agent 比传统事件驱动系统更难调试,因为模型推理本身是不确定的——同一个输入,模型可能走不同的事件路径。你不仅要追踪事件链,还要理解模型为什么选择了这条路径。

LangGraph 的状态图调试更简单——因为路径是预定义的,你知道模型在图的哪个节点,下一步去哪里。AgentScope 的事件流没有”节点”概念——事件是动态的,路径是涌现的。

缺陷四:Agent Team 的协调开销 #

Leader-Worker 模式看起来优雅——leader 分配任务,worker 执行,leader 综合。但实践中有一个问题:leader 的上下文窗口会被 worker 的结果撑爆

如果 3 个 worker 各返回 5000 token 的结果,leader 要读完 15000 token 再做综合。如果 worker 数量增加到 10 个,leader 的上下文就不够用了。

这不是 AgentScope 独有的——所有 leader-worker 架构都有这个问题。但 AgentScope 的事件驱动让这个问题更隐蔽——worker 的结果通过事件总线传给 leader,你以为是”轻量的消息传递”,实际是”大量 token 注入 leader 上下文”。

从原理角度说:多 agent 系统的瓶颈不是 agent 数量,而是 coordinator 的上下文窗口。CrewAI 的 Crews 通过”任务委派”避免这个问题——worker 的结果直接写入文件/数据库,leader 只读摘要。AgentScope 的 Agent Team 如果不做类似的结果压缩,leader 会成为瓶颈。

缺陷五:生态规模 #

AgentScope 是 2026 年 5 月才发布 2.0 的年轻框架。对比:

维度AgentScope 2.0LangGraph
发布时间2026.52024
社区规模刚起步成熟(Klarna/Replit/Elastic 在用)
文档完善度基础文档全面(含 LangSmith 调试)
第三方集成以阿里生态为主数百个集成
学术背书2 篇 arXiv 论文

这不是技术缺陷,是时间债务。AgentScope 的架构设计不输 LangGraph(甚至在多租户和权限系统上更强),但生态需要时间积累。


总结:AgentScope 2.0 是什么 #

AgentScope 2.0 不是”又一个 Python agent 框架”。

它是一种架构主张——认为 agent 编排不应该约束模型,而应该为模型提供安全的运行环境(权限、沙箱、多租户),让模型自己决定怎么走。

这个主张的底层判断是:模型能力会持续增长。今天需要状态图编排的流程,明天模型自己就能走通。固化的编排是技术债——你画的图越精细,模型变强后你欠的债越多。

AgentScope 的赌注是:把控制做进权限系统(运行时检查)而非编排引擎(事前规划),让模型自由走但每一步都在安全边界内。多租户和沙箱让这个赌注可以在企业环境兑现——不是实验室里的原型,是生产环境的服务。

它的缺陷也是这个赌注的代价——不约束意味着不可预测,事件驱动意味着调试困难,生态年轻意味着文档和社区需要时间。

AgentScope 2.0 是中国出品的、面向企业级生产部署的、不约束模型的 Agent 编排框架。它和 LangGraph 的竞争不是功能之争,是哲学之争——约束编排 vs 不约束模型。这个争论不会有终局,因为答案取决于模型能力的发展速度。模型变强越快,AgentScope 的赌注越正确;模型变强越慢,LangGraph 的护栏越必要。


信息来源声明 #

本文数据截至 2026 年 6 月,来自 AgentScope 2.0 官方 GitHub 仓库 README(github.com/agentscope-ai/agentscope)、官方文档(docs.agentscope.io)、两篇 arXiv 论文,以及与 LangGraph、ZeroClaw、CrewAI、smolagents、GBrain 等项目的对比分析。架构分析为基于 README 和文档的独立判断。