得物以AgentScope Java管理多Agent计划执行
概述
得物团队正在建设基于 AgentScope Java 的企业级 MultiAgent 平台,为研发、数据分析和知识问答等场景提供统一的模型调用、工具接入、任务编排、流式输出与运行追踪能力;本文聚焦复杂任务的规划与拆解。针对纯 ReAct 循环中“后面才发现前置步骤不完整、过程隐藏在 Prompt 中无法事前审计、Token 消耗难预估、工具失败后缺少恢复路径”四个问题,平台把计划操作注册成工具(create_plan / activate_subtask / finish_subtask / finish_plan),由模型按任务动态创建和调整;每轮推理前按状态注入短提示 Hint(无计划时建议创建、已创建时提醒激活下一项、有进行中任务时提示可执行/完成/放弃、全部完成时提醒结束),Hint 为软约束不替模型决策,硬约束由框架保证(同一时刻只允许一个任务进行中、不能跳过未完成的前置任务);计划状态独立保存、每次变化立即序列化,重连后读取最后有效版本继续执行且恢复幂等(工具响应丢失可按任务标识查询而非盲目重试);通过 SSE 推送 CHAT / PROCESSING / ERROR 结构化事件,前端可展示“正在检索资料”“第 2/5 项已完成”等状态卡片。 为解决单 Agent 同时承担规划、查询、分析、写作时工具集膨胀、上下文变杂、权限边界模糊的问题,平台把职责拆开:主 Agent 负责理解目标、分解任务与汇总结果,子 Agent 负责某一类专业工作。子 Agent 用配置声明名称、职责、工具与模型(示例中 data_analyst 绑定 query_data、calculate_metric),平台启动时创建独立实例再包装成主 Agent 可调用的工具;子 Agent 拥有独立记忆、工具集与系统提示,只接收当前任务输入。调度上短任务同步等待、耗时任务异步查询,多个独立任务可并行,异步任务必须具备查询、取消、超时与回收能力。可观测方面主、子 Agent 的工具事件汇聚到同一条追踪链路,前端可见“哪个角色正在调用哪个工具”并能还原完整调用树;取消必须贯穿层级——父会话设置中断标志,子 Agent 在执行周期检查并协作式退出,流式连接关闭后后台任务进入可回收状态,不存在游离任务。 面向不同团队独立维护 Agent 服务的场景,平台按 A2A 三层实现跨服务协作:发现层由服务发布 Agent Card 声明能力、技能与通信方式,调用方通过标准地址获取;调用层用 JSON-RPC over HTTP/SSE,支持同步发送、流式发送、查询任务与取消任务;执行适配层把协议消息转换为统一会话入口,使 A2A 请求与用户请求共享 Plan、工具与推流能力。典型时序为:取对方 Agent Card 确认能力 → 向标准入口发首条消息、被调用方创建会话并返回 contextId → 后续请求携带该标识延续上下文,长任务通过流式接口逐步回传,执行期间可随时查询状态或取消。正文特别强调两条安全规则:contextId 必须与发起方身份绑定,否则任一调用方可凭标识读取他人会话;异步恢复时租户条件要重新注入数据访问层,而不是信任调用方传来的快照,两条规则前置到协议适配层以免业务 Agent 每处重写鉴权。 平台在 ORM 层强制注入租户条件,所有 SQL 执行前自动拼接租户标识,Agent 配置、对话记录、Plan 数据与向量索引均在租户维度严格隔离——正文强调这不是应用层权限判断而是 ORM 层强制过滤,从架构上消除租户间数据泄漏;Plan 数据的隔离粒度进一步细化到会话级别,计划存储以会话为目录物理隔离,不同会话的计划文件互不可见。认证侧实现两套路径:JWT 本地认证适合平台 Web 端直接使用,企业 SSO 单点登录对接企业现有身份体系、员工凭企业账号接入;另提供 API Key 拦截器作为第三种路径,专为服务间调用与企业内部系统集成设计,使把 Agent 能力嵌入 CRM、ERP、内部工单系统成为标准操作。 每次 Agent 执行平台建立追踪上下文,捕获完整调用层级:主 Agent 推理、工具调用(含 input/output/latency/tokens)、子 Agent 执行及其内部工具调用构成多层调用树,追踪数据包含每个节点的输入输出、执行延迟、Token 消耗与模型版本,用于生产环境性能瓶颈定位、异常行为溯源与 Token 成本分析。所有 Agent 响应通过 SSE 实时推流,执行监听器把每个事件转为结构化消息:PROCESSING 事件携带组件类型(ToolCall / SubAgentCall / Agent / Plan)与状态(EXECUTING / FINISHED),前端可渲染工具名称与执行状态、子 Agent 内部工具执行、“执行计划(2/5 已完成)”及子任务状态列表——正文指出开源框架通常只返回最终结果,本平台可让用户获知 Agent 每一步在做什么。异常保护设四道防线:工具级超时与退避重试、主 Agent ReAct 循环迭代上限、Plan 状态合法性约束(前序未完成时拒绝切换、同一时刻只允许一个子任务进行中,LLM 跳步推理会被框架层拒绝)、子 Agent 协作式中断传播。 平台认为 Agent 的知识获取并非只依赖 LLM 参数记忆,集成双检索引擎:向量数据库支持语义向量检索、适合开放式知识问答,全文检索引擎支持精确文本匹配、适合精确文档查找,两种检索可作为独立工具或组合工具注册给 Agent,由 LLM 按任务类型自主选择检索策略。工具生态侧,平台原生支持 MCP 客户端与服务端,通过 McpClient.builder().serverUrl(...) 构造客户端并以 toolkit.registerTool(new McpTool(mcpClient, toolName)) 注册,任意遵循 MCP 标准的工具服务无需定制开发即可直接接入平台 Agent。