961 lines
22 KiB
Markdown
961 lines
22 KiB
Markdown
|
|
# Jarvis Agents 2.0 升级方案
|
|||
|
|
|
|||
|
|
日期:2026-04-03
|
|||
|
|
状态:草案
|
|||
|
|
范围:`backend/app/agents/*`、相关测试,以及后续运行时/UI 扩展
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. 文档目标
|
|||
|
|
|
|||
|
|
本文档用于明确 Jarvis Agents 2.0 的升级方向。方案基于以下三个 demo 项目的分析结果整理而成:
|
|||
|
|
|
|||
|
|
- `demo/swarm-ide-chore-specs-mvp`
|
|||
|
|
- `demo/claude-code-cli-master`
|
|||
|
|
- `demo/claw-code-main`
|
|||
|
|
|
|||
|
|
本方案的目标不是照搬任意一个项目,而是结合它们各自的优点,让 Jarvis 从当前的:
|
|||
|
|
|
|||
|
|
- 静态分层路由型 agent 系统
|
|||
|
|
|
|||
|
|
逐步升级为:
|
|||
|
|
|
|||
|
|
- 可控的动态协作型 agent 运行时
|
|||
|
|
|
|||
|
|
同时保留 Jarvis 现在已经具备的优势:
|
|||
|
|
|
|||
|
|
- 业务导向明确
|
|||
|
|
- 提醒 / 任务 / 搜索类连续性较强
|
|||
|
|
- 支持多 provider 和 fallback 策略
|
|||
|
|
- 运行边界清晰,容易测试和验证
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. 当前 Jarvis 的现状
|
|||
|
|
|
|||
|
|
当前核心代码主要集中在:
|
|||
|
|
|
|||
|
|
- `backend/app/agents/graph.py`
|
|||
|
|
- `backend/app/agents/state.py`
|
|||
|
|
- `backend/app/agents/prompts.py`
|
|||
|
|
- `backend/app/agents/registry/*`
|
|||
|
|
- `backend/app/agents/tools/*`
|
|||
|
|
- `backend/tests/backend/app/agents/test_graph.py`
|
|||
|
|
|
|||
|
|
### 2.1 当前优势
|
|||
|
|
|
|||
|
|
Jarvis 目前已经不是简单的“单 prompt + 工具调用”系统,而是一个结构化的业务 agent 运行时,主要优势包括:
|
|||
|
|
|
|||
|
|
1. **有主控层级**
|
|||
|
|
- 存在类似 `master` 的顶层入口
|
|||
|
|
- 已按业务领域拆分出不同 agent / sub-commander
|
|||
|
|
|
|||
|
|
2. **有明确的工具调用策略**
|
|||
|
|
- 支持 native tool calling
|
|||
|
|
- 也支持 JSON fallback
|
|||
|
|
|
|||
|
|
3. **有连续性和澄清机制**
|
|||
|
|
- 支持 clarification
|
|||
|
|
- 支持 pending action / continuity
|
|||
|
|
- 对 reminder / task 这类业务很重要
|
|||
|
|
|
|||
|
|
4. **状态模型较完整**
|
|||
|
|
- 不是纯临时 prompt 拼接
|
|||
|
|
- 已有显式 state 管理
|
|||
|
|
|
|||
|
|
5. **测试基础较好**
|
|||
|
|
- 当前 agent runtime 已有可观测试覆盖
|
|||
|
|
|
|||
|
|
### 2.2 当前短板
|
|||
|
|
|
|||
|
|
虽然 Jarvis 已经具备结构化 agent 系统的雏形,但依旧存在几个明显上限:
|
|||
|
|
|
|||
|
|
1. **本质上仍是静态路由系统**
|
|||
|
|
- 单轮请求通常只会选一条主路径执行
|
|||
|
|
- agent 关系是预先设计好的,不是运行时动态演化的
|
|||
|
|
|
|||
|
|
2. **没有真正的 agent-to-agent 通信原语**
|
|||
|
|
- 现在更多是系统内部调度
|
|||
|
|
- 不是 agent 之间显式发消息、协作、转交任务
|
|||
|
|
|
|||
|
|
3. **没有显式 task/team 运行时**
|
|||
|
|
- 缺少任务对象、所有权、依赖关系、完成状态
|
|||
|
|
|
|||
|
|
4. **缺少独立 verifier 角色**
|
|||
|
|
- 当前执行者通常也是完成判断者
|
|||
|
|
- 缺少“执行”和“验收”分离
|
|||
|
|
|
|||
|
|
5. **可观察性还不够强**
|
|||
|
|
- 系统内部做了很多判断,但外部很难完整看到 agent 协作过程
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. 三个 demo 项目的借鉴重点
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3.1 Swarm-IDE:最值得借鉴的协作形态
|
|||
|
|
|
|||
|
|
关键参考文件:
|
|||
|
|
|
|||
|
|
- `demo/swarm-ide-chore-specs-mvp/README.md`
|
|||
|
|
- `demo/swarm-ide-chore-specs-mvp/backend/src/runtime/agent-runtime.ts`
|
|||
|
|
- `demo/swarm-ide-chore-specs-mvp/backend/src/runtime/event-bus.ts`
|
|||
|
|
- `demo/swarm-ide-chore-specs-mvp/backend/src/runtime/skill-loader.ts`
|
|||
|
|
|
|||
|
|
### 值得借鉴的点
|
|||
|
|
|
|||
|
|
#### 1)协作原语非常简单,但表达力非常强
|
|||
|
|
Swarm 的核心原语很少,主要就是:
|
|||
|
|
|
|||
|
|
- 创建 agent
|
|||
|
|
- 发送消息
|
|||
|
|
- 建群 / 群聊
|
|||
|
|
- 列出 agent / 群组 / 消息
|
|||
|
|
|
|||
|
|
这种设计的好处是:
|
|||
|
|
|
|||
|
|
- 不需要先写死很多工作流
|
|||
|
|
- 复杂拓扑可以由运行时自然演化
|
|||
|
|
- agent 行为更像“协作中的人”,而不是固定流程节点
|
|||
|
|
|
|||
|
|
#### 2)agent 间通信是一等能力
|
|||
|
|
Swarm 不是让系统替 agent 决定所有事情,而是让 agent 自己拥有:
|
|||
|
|
|
|||
|
|
- 创建子 agent 的能力
|
|||
|
|
- 和任意 agent 通信的能力
|
|||
|
|
- 组群协作的能力
|
|||
|
|
|
|||
|
|
这比固定的 master -> domain 路由更灵活。
|
|||
|
|
|
|||
|
|
#### 3)人类可以直接介入任意子 agent
|
|||
|
|
这点很关键。多 agent 系统最怕黑箱。一旦用户只能看到最终结果,而看不到中间代理,就很难调试和控制。
|
|||
|
|
|
|||
|
|
#### 4)事件流和可观察性很强
|
|||
|
|
Swarm 有清晰的 runtime 事件模型,例如:
|
|||
|
|
|
|||
|
|
- `agent.wakeup`
|
|||
|
|
- `agent.unread`
|
|||
|
|
- `agent.stream`
|
|||
|
|
- `agent.done`
|
|||
|
|
- `agent.error`
|
|||
|
|
|
|||
|
|
这对后续做:
|
|||
|
|
|
|||
|
|
- 调试
|
|||
|
|
- 可视化
|
|||
|
|
- 事件回放
|
|||
|
|
- 协作审计
|
|||
|
|
|
|||
|
|
都非常有帮助。
|
|||
|
|
|
|||
|
|
### 不能直接照搬的点
|
|||
|
|
|
|||
|
|
Swarm 的自由度也意味着风险:
|
|||
|
|
|
|||
|
|
- agent 无限制增殖
|
|||
|
|
- 消息风暴
|
|||
|
|
- token 成本失控
|
|||
|
|
- 系统行为难收敛
|
|||
|
|
|
|||
|
|
所以 Jarvis 应该借鉴它的“机制”,而不是直接复制它的“无限自由”。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3.2 Claude Code CLI:最值得借鉴的平台级编排
|
|||
|
|
|
|||
|
|
关键参考文件:
|
|||
|
|
|
|||
|
|
- `demo/claude-code-cli-master/coordinator/coordinatorMode.ts`
|
|||
|
|
- `demo/claude-code-cli-master/bootstrap/state.ts`
|
|||
|
|
- `demo/claude-code-cli-master/skills/bundled/batch.ts`
|
|||
|
|
|
|||
|
|
### 值得借鉴的点
|
|||
|
|
|
|||
|
|
#### 1)coordinator-worker 分层非常清晰
|
|||
|
|
这个项目不是简单地把多个 agent 拼在一起,而是明确区分:
|
|||
|
|
|
|||
|
|
- 协调者 coordinator
|
|||
|
|
- 执行 worker
|
|||
|
|
- 任务生命周期
|
|||
|
|
- 结果汇总
|
|||
|
|
- 后续消息和回收
|
|||
|
|
|
|||
|
|
这正是 Jarvis 从“路由”升级到“编排”时最需要补的能力。
|
|||
|
|
|
|||
|
|
#### 2)有明确的 task / team 概念
|
|||
|
|
成熟的多 agent 系统不是只有“谁去做”,而是还需要:
|
|||
|
|
|
|||
|
|
- task id
|
|||
|
|
- owner
|
|||
|
|
- blocked / depends_on
|
|||
|
|
- 完成状态
|
|||
|
|
- worker 生命周期
|
|||
|
|
|
|||
|
|
#### 3)验证是独立通道
|
|||
|
|
真正成熟的系统会把:
|
|||
|
|
|
|||
|
|
- 计划
|
|||
|
|
- 执行
|
|||
|
|
- 验证
|
|||
|
|
|
|||
|
|
分开,而不是让执行者自己宣布“我完成了”。
|
|||
|
|
|
|||
|
|
#### 4)并行执行强调隔离
|
|||
|
|
对于复杂任务,这种平台会强调:
|
|||
|
|
|
|||
|
|
- 并行 worker
|
|||
|
|
- 各自隔离的工作空间
|
|||
|
|
- 输出清晰归属到某个 worker
|
|||
|
|
|
|||
|
|
这对未来 Jarvis 如果处理更复杂的编码或多步骤任务,价值很高。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3.3 Claw Code:最值得借鉴的 runtime 工程化能力
|
|||
|
|
|
|||
|
|
关键参考文件:
|
|||
|
|
|
|||
|
|
- `demo/claw-code-main/rust/crates/runtime/src/conversation.rs`
|
|||
|
|
- `demo/claw-code-main/rust/crates/tools/src/lib.rs`
|
|||
|
|
- `demo/claw-code-main/rust/crates/plugins/src/lib.rs`
|
|||
|
|
- `demo/claw-code-main/PARITY.md`
|
|||
|
|
|
|||
|
|
### 值得借鉴的点
|
|||
|
|
|
|||
|
|
#### 1)运行时分层清晰
|
|||
|
|
Claw 的优势不是协作花样最多,而是运行时拆分很自然:
|
|||
|
|
|
|||
|
|
- runtime loop
|
|||
|
|
- tools
|
|||
|
|
- commands
|
|||
|
|
- plugins
|
|||
|
|
- permission
|
|||
|
|
|
|||
|
|
Jarvis 后续也应该逐步减少 graph 与具体业务工具的强耦合。
|
|||
|
|
|
|||
|
|
#### 2)工具注册表可以更强
|
|||
|
|
Jarvis 现在已有 registry 方向,但还不够深入。Claw 的启发是:
|
|||
|
|
|
|||
|
|
每个工具不只是名字和描述,还应该有:
|
|||
|
|
|
|||
|
|
- 权限等级
|
|||
|
|
- 副作用范围
|
|||
|
|
- 是否幂等
|
|||
|
|
- 是否可重试
|
|||
|
|
- 是否适合并行
|
|||
|
|
- 是否需要确认
|
|||
|
|
|
|||
|
|
#### 3)权限模型显式化
|
|||
|
|
一旦系统支持动态协作,就不能默认所有 worker 都能做所有事。
|
|||
|
|
|
|||
|
|
#### 4)插件 / Hook 扩展点应该尽早预留
|
|||
|
|
即使暂时不做插件生态,也应该尽早定义扩展点,否则以后核心 runtime 会越来越难改。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. Jarvis 2.0 的总体目标架构
|
|||
|
|
|
|||
|
|
Jarvis 2.0 的目标不是做成“完全自由的蜂群系统”,而是做成:
|
|||
|
|
|
|||
|
|
- **受控的动态协作系统**
|
|||
|
|
|
|||
|
|
### 4.1 核心原则
|
|||
|
|
|
|||
|
|
1. 简单请求继续走当前稳定路径。
|
|||
|
|
2. 复杂请求才进入协作模式。
|
|||
|
|
3. agent 通信必须显式、可观察、可约束。
|
|||
|
|
4. 执行与验证必须分离。
|
|||
|
|
5. 所有危险能力都必须被预算和权限控制。
|
|||
|
|
|
|||
|
|
### 4.2 总体分层
|
|||
|
|
|
|||
|
|
#### 第一层:请求模式选择层
|
|||
|
|
每个请求先判定:
|
|||
|
|
|
|||
|
|
- **直接模式**:继续使用现有 `master -> domain -> sub-commander`
|
|||
|
|
- **协作模式**:进入 coordinator -> task -> delegate -> verify 流程
|
|||
|
|
|
|||
|
|
#### 第二层:协调层
|
|||
|
|
新增 coordinator,负责:
|
|||
|
|
|
|||
|
|
- 理解请求
|
|||
|
|
- 判断是否需要拆任务
|
|||
|
|
- 生成任务列表
|
|||
|
|
- 分配任务给不同角色
|
|||
|
|
- 回收结构化结果
|
|||
|
|
- 触发 verifier
|
|||
|
|
|
|||
|
|
#### 第三层:工作层
|
|||
|
|
worker agent 负责具体执行,例如:
|
|||
|
|
|
|||
|
|
- schedule 执行
|
|||
|
|
- task 执行
|
|||
|
|
- 检索 / 搜索
|
|||
|
|
- forum 操作
|
|||
|
|
- 分析 / 汇总
|
|||
|
|
- 验证 / 审核
|
|||
|
|
|
|||
|
|
#### 第四层:协作底座
|
|||
|
|
底座层应该提供:
|
|||
|
|
|
|||
|
|
- agent 注册
|
|||
|
|
- agent identity
|
|||
|
|
- task 对象
|
|||
|
|
- message channel
|
|||
|
|
- event stream
|
|||
|
|
- budget / interrupt / recovery
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. Jarvis 2.0 需要新增的核心概念
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5.1 一等的 agent 通信原语
|
|||
|
|
|
|||
|
|
建议在 Jarvis 内部先引入以下运行时能力:
|
|||
|
|
|
|||
|
|
- `create_agent(role, guidance, parent_id?)`
|
|||
|
|
- `send_agent_message(to_agent_id, content, task_id?)`
|
|||
|
|
- `list_agents()`
|
|||
|
|
- `list_agent_threads(agent_id?)`
|
|||
|
|
- `interrupt_agent(agent_id)`
|
|||
|
|
|
|||
|
|
### 作用
|
|||
|
|
|
|||
|
|
这一步完成后,Jarvis 就不再只是“从主图里选路径”,而是具备“让 agent 协作”的基础能力。
|
|||
|
|
|
|||
|
|
### 注意
|
|||
|
|
|
|||
|
|
这些能力可以先作为内部能力,不一定立刻暴露给最终用户。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5.2 结构化 task 运行时
|
|||
|
|
|
|||
|
|
建议引入任务对象,至少包含:
|
|||
|
|
|
|||
|
|
- `task_id`
|
|||
|
|
- `title`
|
|||
|
|
- `owner_agent_id`
|
|||
|
|
- `status`:`pending` / `in_progress` / `blocked` / `completed` / `failed`
|
|||
|
|
- `depends_on`
|
|||
|
|
- `evidence`
|
|||
|
|
- `result_summary`
|
|||
|
|
- `created_by`
|
|||
|
|
|
|||
|
|
### 作用
|
|||
|
|
|
|||
|
|
一旦 task 成为系统对象,Jarvis 才能真正实现:
|
|||
|
|
|
|||
|
|
- 并行
|
|||
|
|
- 重试
|
|||
|
|
- 显式完成判断
|
|||
|
|
- 进度展示
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5.3 事件总线 Event Bus
|
|||
|
|
|
|||
|
|
建议新增统一事件流,至少包含:
|
|||
|
|
|
|||
|
|
- `agent.created`
|
|||
|
|
- `agent.wakeup`
|
|||
|
|
- `agent.message.sent`
|
|||
|
|
- `agent.message.received`
|
|||
|
|
- `agent.tool.start`
|
|||
|
|
- `agent.tool.result`
|
|||
|
|
- `agent.task.assigned`
|
|||
|
|
- `agent.task.completed`
|
|||
|
|
- `agent.verify.started`
|
|||
|
|
- `agent.verify.completed`
|
|||
|
|
- `agent.error`
|
|||
|
|
|
|||
|
|
### 作用
|
|||
|
|
|
|||
|
|
后续可以用于:
|
|||
|
|
|
|||
|
|
- 调试
|
|||
|
|
- 日志回放
|
|||
|
|
- 可视化
|
|||
|
|
- agent 行为审计
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5.4 verifier 角色
|
|||
|
|
|
|||
|
|
建议新增独立 verifier / reviewer 角色。
|
|||
|
|
|
|||
|
|
### 职责
|
|||
|
|
|
|||
|
|
- 判断是否真的满足用户请求
|
|||
|
|
- 检查是否缺少工具证据
|
|||
|
|
- 识别不完整执行
|
|||
|
|
- 要求重新执行或补充
|
|||
|
|
|
|||
|
|
### 意义
|
|||
|
|
|
|||
|
|
这一步是 Jarvis 从“会调用工具的 assistant”升级为“可靠 agent 系统”的关键一步。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5.5 工具权限模型
|
|||
|
|
|
|||
|
|
每个工具建议新增如下元数据:
|
|||
|
|
|
|||
|
|
- `permission_class`:`read` / `write` / `external` / `dangerous`
|
|||
|
|
- `side_effect_scope`:`none` / `local_state` / `remote_state`
|
|||
|
|
- `safe_for_worker_roles`
|
|||
|
|
- `requires_confirmation`
|
|||
|
|
- `supports_retry`
|
|||
|
|
- `idempotent`
|
|||
|
|
|
|||
|
|
### 意义
|
|||
|
|
|
|||
|
|
动态协作系统必须比静态路由系统有更强的治理能力。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6. 按代码区域的演进建议
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6.1 `backend/app/agents/state.py`
|
|||
|
|
|
|||
|
|
### 目标
|
|||
|
|
在现有 state 基础上扩展协作信息,而不是推翻重来。
|
|||
|
|
|
|||
|
|
### 建议新增字段
|
|||
|
|
|
|||
|
|
- `agent_id`
|
|||
|
|
- `parent_agent_id`
|
|||
|
|
- `task_id`
|
|||
|
|
- `active_tasks`
|
|||
|
|
- `task_results`
|
|||
|
|
- `message_queue`
|
|||
|
|
- `event_log_refs`
|
|||
|
|
- `verification_status`
|
|||
|
|
- `execution_mode`:`direct` / `collaboration`
|
|||
|
|
- budget 字段:
|
|||
|
|
- `max_spawn_depth`
|
|||
|
|
- `max_child_agents`
|
|||
|
|
- `max_messages_per_turn`
|
|||
|
|
- `max_parallel_tasks`
|
|||
|
|
|
|||
|
|
### 重点
|
|||
|
|
|
|||
|
|
不要删除当前 continuity / clarification 相关状态,而是在它之上扩展。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6.2 `backend/app/agents/graph.py`
|
|||
|
|
|
|||
|
|
### 目标
|
|||
|
|
从“纯路由图”升级为“路由 + 编排混合图”。
|
|||
|
|
|
|||
|
|
### 建议新增节点
|
|||
|
|
|
|||
|
|
- `request_mode_selector`
|
|||
|
|
- `coordinator`
|
|||
|
|
- `task_decomposer`
|
|||
|
|
- `delegation_router`
|
|||
|
|
- `worker_runner`
|
|||
|
|
- `verifier`
|
|||
|
|
- `result_synthesizer`
|
|||
|
|
|
|||
|
|
### 推荐行为
|
|||
|
|
|
|||
|
|
#### 简单请求
|
|||
|
|
继续走当前路径,避免影响当前稳定业务。
|
|||
|
|
|
|||
|
|
#### 复杂请求
|
|||
|
|
走以下流程:
|
|||
|
|
|
|||
|
|
1. coordinator 理解请求
|
|||
|
|
2. task_decomposer 产出小任务列表
|
|||
|
|
3. delegation_router 为每个任务分配角色
|
|||
|
|
4. worker_runner 执行任务
|
|||
|
|
5. verifier 检查产出
|
|||
|
|
6. result_synthesizer 汇总最终结果
|
|||
|
|
|
|||
|
|
### 重点
|
|||
|
|
|
|||
|
|
不是替换当前 graph,而是在复杂请求上增加新的执行分支。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6.3 `backend/app/agents/prompts.py`
|
|||
|
|
|
|||
|
|
### 目标
|
|||
|
|
新增更明确的角色 prompt,减少职责混乱。
|
|||
|
|
|
|||
|
|
### 需要新增的角色 prompt
|
|||
|
|
|
|||
|
|
- coordinator
|
|||
|
|
- verifier
|
|||
|
|
- critic / reviewer(可后续再加)
|
|||
|
|
|
|||
|
|
### 协调者 prompt 应强调
|
|||
|
|
|
|||
|
|
- 只有复杂任务才拆分
|
|||
|
|
- 任务拆分要小而清晰
|
|||
|
|
- 不要过度创建 agent
|
|||
|
|
- 输出必须带证据
|
|||
|
|
|
|||
|
|
### verifier prompt 应强调
|
|||
|
|
|
|||
|
|
- 不接受模糊完成
|
|||
|
|
- 检查证据是否充分
|
|||
|
|
- 检查用户意图是否真正满足
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6.4 `backend/app/agents/registry/*`
|
|||
|
|
|
|||
|
|
### 目标
|
|||
|
|
让 registry 不只是描述性的,而是逐渐成为 runtime 驱动的一部分。
|
|||
|
|
|
|||
|
|
### 建议补充
|
|||
|
|
|
|||
|
|
- agent role metadata
|
|||
|
|
- role capability
|
|||
|
|
- role spawn permission
|
|||
|
|
- tool access policy
|
|||
|
|
- task suitability tags
|
|||
|
|
|
|||
|
|
### 建议角色分类
|
|||
|
|
|
|||
|
|
- coordinator
|
|||
|
|
- executor
|
|||
|
|
- scheduler
|
|||
|
|
- retriever
|
|||
|
|
- analyst
|
|||
|
|
- verifier
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6.5 `backend/app/agents/tools/*`
|
|||
|
|
|
|||
|
|
### 目标
|
|||
|
|
保留现有业务工具,但为它们补全运行时治理信息。
|
|||
|
|
|
|||
|
|
### 每个工具建议具备的元数据
|
|||
|
|
|
|||
|
|
- `name`
|
|||
|
|
- `description`
|
|||
|
|
- `permission_class`
|
|||
|
|
- `supports_retry`
|
|||
|
|
- `idempotent`
|
|||
|
|
- `safe_for_parallel_use`
|
|||
|
|
- `returns_structured_evidence`
|
|||
|
|
|
|||
|
|
### 建议新增模块
|
|||
|
|
|
|||
|
|
可以新增:
|
|||
|
|
|
|||
|
|
- `backend/app/agents/tools/collaboration.py`
|
|||
|
|
|
|||
|
|
用于承载协作原语,例如:
|
|||
|
|
|
|||
|
|
- 创建 agent
|
|||
|
|
- 发送内部消息
|
|||
|
|
- claim task
|
|||
|
|
- complete task
|
|||
|
|
- request verification
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 7. 升级阶段设计
|
|||
|
|
|
|||
|
|
下面按阶段详细说明,每个阶段都包含:
|
|||
|
|
|
|||
|
|
- 目标
|
|||
|
|
- 解决的问题
|
|||
|
|
- 范围
|
|||
|
|
- 核心改动
|
|||
|
|
- 风险
|
|||
|
|
- 验收标准
|
|||
|
|
- 推荐实施顺序
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 阶段一:基础设施加固阶段(Safe Foundation)
|
|||
|
|
|
|||
|
|
### 7.1.1 阶段目标
|
|||
|
|
|
|||
|
|
在不破坏当前稳定业务路径的前提下,为后续多 agent 协作打底。
|
|||
|
|
|
|||
|
|
### 7.1.2 这一阶段要解决的问题
|
|||
|
|
|
|||
|
|
当前 Jarvis 的主要问题不是“不会做业务”,而是:
|
|||
|
|
|
|||
|
|
- 缺 verifier
|
|||
|
|
- 缺 task 对象
|
|||
|
|
- 缺事件流
|
|||
|
|
- 缺工具权限元数据
|
|||
|
|
- graph 不区分直接模式和协作模式
|
|||
|
|
|
|||
|
|
所以第一阶段不是追求炫技,而是先把基础设施补齐。
|
|||
|
|
|
|||
|
|
### 7.1.3 范围
|
|||
|
|
|
|||
|
|
主要涉及:
|
|||
|
|
|
|||
|
|
- `backend/app/agents/state.py`
|
|||
|
|
- `backend/app/agents/graph.py`
|
|||
|
|
- `backend/app/agents/prompts.py`
|
|||
|
|
- `backend/app/agents/registry/models.py`
|
|||
|
|
- `backend/app/agents/registry/builtins.py`
|
|||
|
|
- `backend/app/agents/tools/__init__.py`
|
|||
|
|
- `backend/tests/backend/app/agents/*`
|
|||
|
|
|
|||
|
|
### 7.1.4 核心改动
|
|||
|
|
|
|||
|
|
#### 改动 1:新增 `execution_mode`
|
|||
|
|
让系统能区分:
|
|||
|
|
|
|||
|
|
- `direct`
|
|||
|
|
- `collaboration`
|
|||
|
|
|
|||
|
|
#### 改动 2:新增 verifier 角色
|
|||
|
|
在不改变主流程的基础上,先插入一个独立 verifier 角色。
|
|||
|
|
|
|||
|
|
#### 改动 3:新增事件总线抽象
|
|||
|
|
哪怕先不做 UI,也要先定义事件结构和写入方式。
|
|||
|
|
|
|||
|
|
#### 改动 4:补工具元数据
|
|||
|
|
给现有工具补权限、幂等、是否适合并行等信息。
|
|||
|
|
|
|||
|
|
#### 改动 5:引入 task 数据结构
|
|||
|
|
哪怕暂时只在内部使用,也要先把任务结构定义出来。
|
|||
|
|
|
|||
|
|
### 7.1.5 风险点
|
|||
|
|
|
|||
|
|
1. **改 state 容易影响现有测试**
|
|||
|
|
2. **verifier 插入点选错会影响现有行为**
|
|||
|
|
3. **事件系统如果写得太重,会影响性能和复杂度**
|
|||
|
|
4. **工具元数据定义过度,会让现有实现变复杂**
|
|||
|
|
|
|||
|
|
### 7.1.6 验收标准
|
|||
|
|
|
|||
|
|
满足以下条件才算第一阶段完成:
|
|||
|
|
|
|||
|
|
- 当前 reminder / task / search 主要流程测试仍通过
|
|||
|
|
- 系统可以独立运行 verifier 角色
|
|||
|
|
- 系统可以产生基本事件记录
|
|||
|
|
- 工具权限元数据已存在并有测试
|
|||
|
|
- 不引入动态 agent 创建能力
|
|||
|
|
|
|||
|
|
### 7.1.7 推荐实施顺序
|
|||
|
|
|
|||
|
|
1. 定义 task schema
|
|||
|
|
2. 定义 event schema
|
|||
|
|
3. 扩展 state
|
|||
|
|
4. 扩展 tool metadata
|
|||
|
|
5. 加 verifier prompt
|
|||
|
|
6. 在 graph 中插 verifier 分支
|
|||
|
|
7. 补测试
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 阶段二:受控协作阶段(Controlled Collaboration)
|
|||
|
|
|
|||
|
|
### 7.2.1 阶段目标
|
|||
|
|
|
|||
|
|
让 Jarvis 开始具备“拆任务、分配任务、回收结果”的能力,但仍然保持强约束。
|
|||
|
|
|
|||
|
|
### 7.2.2 这一阶段要解决的问题
|
|||
|
|
|
|||
|
|
当前系统的主要限制是:
|
|||
|
|
|
|||
|
|
- 复杂请求只能在一条路径里硬做
|
|||
|
|
- 没法显式表达子任务
|
|||
|
|
- 没法让不同角色协作完成复杂目标
|
|||
|
|
|
|||
|
|
第二阶段的重点,就是把“复杂请求”从“路由”升级为“编排”。
|
|||
|
|
|
|||
|
|
### 7.2.3 范围
|
|||
|
|
|
|||
|
|
主要涉及:
|
|||
|
|
|
|||
|
|
- `backend/app/agents/graph.py`
|
|||
|
|
- `backend/app/agents/prompts.py`
|
|||
|
|
- `backend/app/agents/state.py`
|
|||
|
|
- `backend/app/agents/registry/*`
|
|||
|
|
- 新增协作工具模块
|
|||
|
|
- 新增对应测试
|
|||
|
|
|
|||
|
|
### 7.2.4 核心改动
|
|||
|
|
|
|||
|
|
#### 改动 1:新增 coordinator 节点
|
|||
|
|
由 coordinator 判断是否需要拆分请求。
|
|||
|
|
|
|||
|
|
#### 改动 2:新增 task decomposition
|
|||
|
|
复杂请求要能拆出 2~4 个清晰的子任务。
|
|||
|
|
|
|||
|
|
#### 改动 3:新增 worker assignment
|
|||
|
|
不同子任务按角色分配给不同 worker 逻辑。
|
|||
|
|
|
|||
|
|
#### 改动 4:新增内部消息传递
|
|||
|
|
先做最小版本的 agent-to-agent 通信,不必一开始就做复杂群聊。
|
|||
|
|
|
|||
|
|
#### 改动 5:完成后必须走 verifier
|
|||
|
|
worker 的产出不直接作为最终结论,必须先过 verifier。
|
|||
|
|
|
|||
|
|
### 7.2.5 风险点
|
|||
|
|
|
|||
|
|
1. **任务拆得太细会增加系统复杂度**
|
|||
|
|
2. **任务拆得太粗又达不到协作收益**
|
|||
|
|
3. **内部通信如果没有预算,会引发回路**
|
|||
|
|
4. **worker 边界不清会导致职责重叠**
|
|||
|
|
|
|||
|
|
### 7.2.6 验收标准
|
|||
|
|
|
|||
|
|
- 复杂请求可以被拆成 2~4 个子任务
|
|||
|
|
- 每个子任务有明确 owner
|
|||
|
|
- worker 输出带结构化 evidence
|
|||
|
|
- verifier 可以拒绝不完整结果
|
|||
|
|
- final result 基于任务结果汇总,而不是某个单一 worker 的主观结论
|
|||
|
|
|
|||
|
|
### 7.2.7 推荐实施顺序
|
|||
|
|
|
|||
|
|
1. 增加 coordinator prompt
|
|||
|
|
2. 增加 task decomposition schema
|
|||
|
|
3. 增加 delegation router
|
|||
|
|
4. 增加最小通信原语
|
|||
|
|
5. 增加 verifier 回收
|
|||
|
|
6. 补整套协作测试
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 阶段三:动态协作阶段(Dynamic Collaboration)
|
|||
|
|
|
|||
|
|
### 7.3.1 阶段目标
|
|||
|
|
|
|||
|
|
在受控前提下,让 Jarvis 具备更接近 Swarm 的动态协作能力,但不是完全放飞。
|
|||
|
|
|
|||
|
|
### 7.3.2 这一阶段要解决的问题
|
|||
|
|
|
|||
|
|
第二阶段虽然已经能做任务拆分,但仍然偏“平台帮你分好工”。
|
|||
|
|
|
|||
|
|
第三阶段要解决的问题是:
|
|||
|
|
|
|||
|
|
- worker 能否在必要时请求新的协作
|
|||
|
|
- 是否支持 parent / child agent 关系
|
|||
|
|
- 是否支持更完整的消息通路
|
|||
|
|
- 是否支持更强的中间态可观察性
|
|||
|
|
|
|||
|
|
### 7.3.3 范围
|
|||
|
|
|
|||
|
|
主要涉及:
|
|||
|
|
|
|||
|
|
- `backend/app/agents/state.py`
|
|||
|
|
- `backend/app/agents/graph.py`
|
|||
|
|
- 新增 collaboration runtime 模块
|
|||
|
|
- 新增 message / thread / event 相关抽象
|
|||
|
|
- 未来可能涉及前端可视化接口
|
|||
|
|
|
|||
|
|
### 7.3.4 核心改动
|
|||
|
|
|
|||
|
|
#### 改动 1:支持 parent / child agent tracking
|
|||
|
|
让系统知道哪个 agent 是谁创建的。
|
|||
|
|
|
|||
|
|
#### 改动 2:支持有限动态创建 agent
|
|||
|
|
注意:必须有限制,不允许无限递归创建。
|
|||
|
|
|
|||
|
|
#### 改动 3:支持有限的 agent 消息线程
|
|||
|
|
先支持最小内部线程即可,不一定马上做群聊 UI。
|
|||
|
|
|
|||
|
|
#### 改动 4:增强事件流
|
|||
|
|
把协作链路完整记录下来。
|
|||
|
|
|
|||
|
|
#### 改动 5:支持 interrupt / recovery
|
|||
|
|
多 agent 系统没有中断与恢复,后面会很难维护。
|
|||
|
|
|
|||
|
|
### 7.3.5 风险点
|
|||
|
|
|
|||
|
|
1. **agent 增殖风险**
|
|||
|
|
2. **消息风暴风险**
|
|||
|
|
3. **token 成本和延迟上升**
|
|||
|
|
4. **调试复杂度上升**
|
|||
|
|
5. **过度动态化破坏当前稳定路径**
|
|||
|
|
|
|||
|
|
### 7.3.6 验收标准
|
|||
|
|
|
|||
|
|
- parent / child agent 关系可追踪
|
|||
|
|
- 系统支持受限动态创建 agent
|
|||
|
|
- agent 间通信链路可记录
|
|||
|
|
- 可中断运行中的协作
|
|||
|
|
- 所有动态协作都受预算限制
|
|||
|
|
|
|||
|
|
### 7.3.7 推荐实施顺序
|
|||
|
|
|
|||
|
|
1. 建 parent / child state
|
|||
|
|
2. 建 spawn budget / message budget
|
|||
|
|
3. 实现受限 `create_agent`
|
|||
|
|
4. 实现内部消息线程
|
|||
|
|
5. 实现 interrupt / recovery
|
|||
|
|
6. 加事件回放和调试日志
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 阶段四:可视化与隔离执行阶段(Visibility + Isolation)
|
|||
|
|
|
|||
|
|
### 7.4.1 阶段目标
|
|||
|
|
|
|||
|
|
把多 agent 系统从“后台能跑”升级为“可看、可控、可调试、可隔离”。
|
|||
|
|
|
|||
|
|
### 7.4.2 这一阶段要解决的问题
|
|||
|
|
|
|||
|
|
多 agent 系统发展到一定程度后,纯日志已经不够。你会需要:
|
|||
|
|
|
|||
|
|
- 谁创建了谁
|
|||
|
|
- 谁在做什么
|
|||
|
|
- 谁给谁发了什么
|
|||
|
|
- 哪个任务卡住了
|
|||
|
|
- 某个 agent 为啥没完成
|
|||
|
|
|
|||
|
|
### 7.4.3 范围
|
|||
|
|
|
|||
|
|
这个阶段可能跨:
|
|||
|
|
|
|||
|
|
- backend runtime
|
|||
|
|
- event stream API
|
|||
|
|
- frontend 调试面板 / graph 面板
|
|||
|
|
- 编码任务场景下的隔离执行策略
|
|||
|
|
|
|||
|
|
### 7.4.4 核心改动
|
|||
|
|
|
|||
|
|
#### 改动 1:协作链路可视化
|
|||
|
|
至少包括:
|
|||
|
|
|
|||
|
|
- 当前 agent 列表
|
|||
|
|
- parent / child 关系
|
|||
|
|
- task 状态
|
|||
|
|
- message 流向
|
|||
|
|
|
|||
|
|
#### 改动 2:agent 历史和工具证据可见
|
|||
|
|
支持查看某个 agent:
|
|||
|
|
|
|||
|
|
- 历史消息
|
|||
|
|
- 工具调用
|
|||
|
|
- 工具结果
|
|||
|
|
- verifier 结论
|
|||
|
|
|
|||
|
|
#### 改动 3:隔离执行能力
|
|||
|
|
如果以后 Jarvis 要处理更复杂的 coding 任务,可以考虑:
|
|||
|
|
|
|||
|
|
- worker 级隔离目录
|
|||
|
|
- worktree
|
|||
|
|
- 独立 session state
|
|||
|
|
|
|||
|
|
### 7.4.5 风险点
|
|||
|
|
|
|||
|
|
1. **UI 一旦做太早,会分散后端核心升级精力**
|
|||
|
|
2. **事件量上升后,展示层会有性能压力**
|
|||
|
|
3. **隔离执行会提升工程复杂度**
|
|||
|
|
|
|||
|
|
### 7.4.6 验收标准
|
|||
|
|
|
|||
|
|
- 可以看到基本 agent 拓扑
|
|||
|
|
- 可以看到任务流转和关键事件
|
|||
|
|
- 可以查看某个 agent 的执行证据
|
|||
|
|
- 隔离执行至少有设计方案,最好有最小实现
|
|||
|
|
|
|||
|
|
### 7.4.7 推荐实施顺序
|
|||
|
|
|
|||
|
|
1. 先把 event schema 固化
|
|||
|
|
2. 再做 event stream API
|
|||
|
|
3. 再做最小调试页面
|
|||
|
|
4. 最后做隔离执行策略
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 8. 必须长期坚持的治理规则
|
|||
|
|
|
|||
|
|
Jarvis 不应该变成“无限自由蜂群”,而应该是“带预算的动态协作系统”。
|
|||
|
|
|
|||
|
|
因此必须长期保留这些约束:
|
|||
|
|
|
|||
|
|
1. **spawn budget**:每次请求最多允许创建多少 agent
|
|||
|
|
2. **message budget**:每个任务 / 每轮最多允许多少消息
|
|||
|
|
3. **max depth**:代理树最大深度
|
|||
|
|
4. **verifier gate**:复杂任务必须经 verifier 才能宣布完成
|
|||
|
|
5. **tool permission policy**:不同角色拥有不同工具权限
|
|||
|
|
6. **interrupt / cancel 路径**:长任务必须可中断
|
|||
|
|
7. **structured evidence**:没有证据就不算完成
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 9. 推荐优先级
|
|||
|
|
|
|||
|
|
如果近期只能做少量升级,推荐优先级如下:
|
|||
|
|
|
|||
|
|
1. verifier 角色
|
|||
|
|
2. event bus / 可观察性
|
|||
|
|
3. 结构化 task runtime
|
|||
|
|
4. coordinator for complex requests
|
|||
|
|
5. 内部 agent 通信原语
|
|||
|
|
6. registry 元数据增强
|
|||
|
|
7. 隔离执行能力
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 10. 最现实的近期落地顺序
|
|||
|
|
|
|||
|
|
建议按下面顺序推进,而不是同时铺开:
|
|||
|
|
|
|||
|
|
### 第一步
|
|||
|
|
先做 verifier 的 state、prompt、graph 插入点设计。
|
|||
|
|
|
|||
|
|
### 第二步
|
|||
|
|
定义 task schema 和 event schema。
|
|||
|
|
|
|||
|
|
### 第三步
|
|||
|
|
给工具补元数据和权限标签。
|
|||
|
|
|
|||
|
|
### 第四步
|
|||
|
|
在 graph 中加入 coordinator 只处理复杂请求。
|
|||
|
|
|
|||
|
|
### 第五步
|
|||
|
|
引入最小可用的内部协作原语。
|
|||
|
|
|
|||
|
|
### 第六步
|
|||
|
|
补一轮完整测试,确保旧路径不坏、新路径可控。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 11. 最终建议
|
|||
|
|
|
|||
|
|
Jarvis 2.0 不应该单独模仿某一个 demo,而应该做这样的融合:
|
|||
|
|
|
|||
|
|
- 从 **Swarm-IDE** 学:动态通信原语、可观察性、协作拓扑
|
|||
|
|
- 从 **Claude Code CLI** 学:coordinator / task / verifier 的平台化编排
|
|||
|
|
- 从 **Claw Code** 学:runtime 分层、工具注册表、权限模型
|
|||
|
|
|
|||
|
|
一句话总结升级方向:
|
|||
|
|
|
|||
|
|
> 让 Jarvis 从“静态层级路由系统”升级为“受控的动态协作运行时”。
|
|||
|
|
|
|||
|
|
并且必须坚持一个原则:
|
|||
|
|
|
|||
|
|
> 简单请求保持当前稳定路径,复杂请求才启用协作编排能力。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 12. 建议后续继续拆分的文档
|
|||
|
|
|
|||
|
|
建议在这份总方案之后,再继续补这些中文文档:
|
|||
|
|
|
|||
|
|
1. `development-doc/jarvis-agents-phase-a-design.md`
|
|||
|
|
2. `development-doc/jarvis-agent-event-schema.md`
|
|||
|
|
3. `development-doc/jarvis-agent-task-schema.md`
|
|||
|
|
4. `development-doc/jarvis-agent-role-permissions.md`
|
|||
|
|
5. `development-doc/jarvis-verifier-integration-plan.md`
|
|||
|
|
|
|||
|
|
如果继续往下做,最建议先写的是:
|
|||
|
|
|
|||
|
|
- **Phase A 详细设计文档**
|
|||
|
|
|
|||
|
|
因为它最贴近当前代码,也最容易直接转成开发任务。
|