什么是 AgentScope Service(实现视角)
从实现上看,AgentScope Service 不是单一进程,而是一组边界清晰的组件:
它同时服务两类 workload:
- Managed Agents:控制面持有版本化 Snapshot,数据面按 Snapshot 构建
HarnessAgent并跑事件化 Turn; - BYO Agents:已有 AgentScope / LangChain / Claude 等运行时通过扩展、
instrument()或 Sidecar 接入,进入同一舰队与 Session 观测模型。
aistiod。
为什么需要这样一套平台
单看 agent loop,现在的框架已经足够写 Demo。难的是把「能跑」变成「能运维」:- 本机脚本 / CLI:状态在本地目录,适合个人,不适合多副本与审计。
- 业务服务内嵌 SDK:每个应用各自实现 SessionStore、HITL、租约、事件回放与权限,成本重复且标准不一。
- 低代码编排:把 Harness 工程细节外泄给业务配置者,平台难统一升级。
- 单一托管运行时:效果好,但跨框架舰队、客户 VPC Hands、以及团队协作状态往往另起炉灶。
- 治理问题收敛到控制面与数据面契约;
- 推理内核收敛到 AgentScope Harness;
- 工具执行边界收敛到 Environment(Hands)。
整体架构
平面职责
数据归属
各平面可共用同一个 PostgreSQL Server,但不共享表:
Dataplane 通过控制面内部 API 解析 Managed Session,并只使用返回的 Agent Snapshot 构建运行时。数据面副本可以水平扩展,但产品 Catalog 仍以控制面为准,避免双写和缓存漂移。本地 Catalog 回退看起来省事,长期往往制造「实例 A 已更新、实例 B 还在跑旧定义」的幽灵 bug。
一次 Turn 的完整路径
- 客户端向已有 Session 追加
user.message。 - Dataplane 获取 Turn Lease,并把 Session 标记为
running。 - 控制面解析已固定版本的 Agent Snapshot、Environment、Workspace、Memory 与 Vault。
SessionTurnRunner执行HarnessAgent.streamEvents。agent.message、agent.tool_use、span.model_request_*等权威事件写入 PostgreSQL;可选 Preview Delta 仅用于打字机效果,不落库。- Session 回到
idle、因 HITL / Tool Result 暂停,或以类型化错误终止。
Brain 与 Hands
self_hosted 适合私有网络:无需给 Brain 开入站到客户内网,由 Worker 主动出站拉取工具调用。协议语义是稳定的 tool_use / tool_result 事件闭环——Hands 换地方,Brain 的推理循环不必重写。
安全与合规团队因此可以分开审批三个问题:模型上下文可见范围、工具可达网络与文件系统、结果回传 Brain 的数据最小化策略。这比把「整个 Agent 容器」当成一个黑盒权限对象更容易落地。
核心能力(实现层)
UI 截图请见产品版文章;此处聚焦机制。
Dashboard:舰队与运行时观测
Dashboard 的数据主要来自控制面 Runtime Store 与数据面事件投影,而不是前端临时聚合:- Agent / Instance 健康与在线清单
- Session phase(如
active/idle/compressing/archived/terminated)与 Turn 时长 - Context pressure、Token delta、错误计数
- Team 成员状态、任务进度、生命周期事件
- Session:可恢复的对话线程;
phase描述线程运营态。 - Turn:一次用户请求到回复的执行单元;时长统计应落在 Turn,而不是把 Session 存活墙钟时间误当成「活跃耗时」。
Managed Agents:版本化定义 + 事件化 Session
产品资源模型大致如下:
几个关键设计选择:
-
Session 创建是静态绑定
创建时只记录资源关系,不跑 Agent;第一条user.message才启动 Turn。 -
Event-native
入站事件驱动工作,出站事件描述进度与结果。每个持久化事件有 Session 内单调递增序号,客户端可断点续传。 -
HITL 作为一等公民
Ask Policy 工具会暂停 Turn,发出确认请求;user.tool_confirmation继续或拒绝,同时保留完整历史。 -
权威事件 vs Preview
SSE 可推送event_start/event_delta获得即时体验,但最终以落库事件为准。UI 刷新、多端恢复、审计回放都依赖同一真相源。 -
版本 pin
Session 绑定 Agent 的具体版本 Snapshot,避免运行中途定义被热更新导致不可复现轨迹。需要升级时,显式创建新 Session 或走产品定义的升级路径。
HarnessAgent:上下文压缩、工具结果淘汰、状态恢复、Skills / 子任务等工程默认项,不必在产品层再造一套 agent loop。产品层补的是租户资源、ACL、事件契约、Turn Lease、HITL ticket、Environment 与 Worker 队列——这些才是「框架」上升为「平台」的成本所在。
Agent Teams:跨 Session 的协作状态机
Agent Teams 把多 Agent 协作做成控制面资源,而不是某个进程内存里的临时聊天:- Lead / Member 拓扑与动态成员(数量 / 白名单约束)
- 单播与广播消息
- 共享任务、Claim / Assign、Plan Approval
- 成员 Wakeup、优雅关闭、生命周期时限、故障恢复
- 消息与任务跨进程、跨 Session 保留
rt schema,避免与单 Session 的 dp 事件日志混淆——Session 负责一次对话轨迹,Team 负责跨成员协作的持久单元。
一个务实约束是:Teams 不假设所有成员同源。Lead 可以是 Managed Harness Agent,Member 可以是接入的 Coding Agent 或 LangChain 服务。控制面负责拓扑、任务与生命周期,成员侧只需满足协作与观测契约。异构组队比「先统一框架再谈协作」更贴近企业现状。
如何接入
AgentScope(原生)
Java 侧通过agentscope-extensions-aistio 接入。扩展负责把 Runtime 注册到控制面,上报 Session / Context / 健康信息,并承接运营命令。对已有 AgentScope 应用,这是侵入性最低、契约最完整的路径:与 Managed Agent 共用 Dashboard 与 Session 观测模型。
因为双方共享同一套 AgentScope 事件与状态语义,Level-1 / Context / 压缩等能力通常最先对齐。若你已经在用 HarnessAgent,接入的边际成本主要是依赖、注册配置与运行时标识,而不是重写业务 Prompt。
LangChain
Python SDK 提供aistio.instrument()。对 LangChain / LangGraph,适配器挂在 Callback / Checkpointer 等拦截点:
Claude SDK 与 Sidecar
Claude Agent SDK 同样走instrument(),通过装饰 SessionStore 等路径获得 Level-1 快照与压缩 / 终止能力。
对于 Claude Code、Qoder 等不便嵌入 SDK 的 Coding Agent,采用 Sidecar:
- 主容器继续跑原有 CLI / Agent;
- Sidecar 观察本地 Session 目录(如
~/.claude/)与运行状态; - 向控制面上报舰队与 Session 信息,并转发可支持的运营命令;
- 必要时把 Session 文件态同步到外部存储,以支持跨节点恢复。
本地启动与验收
- Managed Session:投递
user.message,从事件流恢复,刷新页面后序号续传正确; - HITL:触发 Ask Policy,确认后续跑,历史完整;
self_hosted:Worker poll / ack / heartbeat / 回传tool_result,Turn 正确恢复。
docs/guide/14-validation.md 与架构说明 docs/guide/02-architecture.md。
几个值得提前避开的实现误区
-
把 Preview SSE 当权威日志
打字机效果可以丢、可以重连重建;审计、复盘、计费应对齐落库事件序号。 -
让数据面本地缓存产品 Catalog 并在控制面不可达时静默回退
短期看起来高可用,长期会出现「跑了未知版本」的最坏故障。宁可失败可感知,也不要静默用旧定义。 -
把 Session phase 与 Turn 时长混用
active/idle描述线程态;耗时应落到 Turn。否则 Dashboard「谁最忙」会被长挂起会话误导。 -
在 BYO 适配器里发明平行指标
舰队 KPI 必须共用语义。新框架适配优先对齐契约,再谈特化字段。 -
把 Team 消息塞进某个成员的 Session 事件流冒充协作状态
Session 轨迹与 Team 状态机生命周期不同;混存会导致恢复、清理和权限边界全部出错。
Roadmap(工程视角)
-
适配器覆盖面
深化 LangChain、ADK、Claude、Qoder、OpenAI Agents 等 Level-1 / Level-2 / Context 能力对齐,减少框架特化字段,保证 Dashboard KPI 同义。 -
生产级多租户与治理
ACL、配额、审计、灰度发布、密钥轮换与更严格的 Environment 隔离策略;Vault / Memory 的生命周期与访问边界也会继续打磨。 -
Automation
Deployment / Cron / Webhook / Channel 从「能触发」演进到「可编排、可回放、可补偿」。自动 Turn 一旦失败,要有类型化错误、重试策略与人工接管入口。 -
事件驱动入口
GitHub / GitLab、钉钉、企微等:把外部事件稳定映射为 Session Turn 或 Team Task,并保留幂等与鉴权边界。外部系统重试是常态,平台侧必须防重复开工。 -
Teams 与恢复
动态成员、计划审批、成员失联恢复、跨 Session Restart,以及 Managed / BYO 混合组队的一致性。协作状态机比单 Session 更难,因为失败域跨多个 Runtime。
和「只嵌入 Harness」差在哪里
如果业务服务里直接嵌入HarnessAgent,你已经拥有不错的长任务与压缩能力。但一旦面对多租户、多副本、多团队,你还要补齐:
- 版本化 Agent 定义与 Session pin;
- append-only 事件与游标续传;
- Turn Lease 与 HITL ticket;
- Environment 切换与 Self-hosted Work Queue;
- 舰队注册、上下文压力、压缩 / 终止命令;
- Team 任务板与跨 Session 协作状态。
结语
AgentScope Service 的技术内核可以概括成三句话:- 控制面管期望与运行状态,数据面跑 Turn,Hands 决定工具落点;
- 持久化事件序列才是 Session 真相,进程内对象只是可丢弃的缓存;
- Managed 与 BYO 共用舰队契约,框架差异收敛在适配器,而不是散落在 Console。
agentscope-service/README_zh.md;产品能力与接入故事则可回到发布版文章。