4.5 KiB
4.5 KiB
Goal 模式增强 — 强制执行与并行调度
Reasonix 的 Goal 模式(/goal)在 v1.9+ 中增加了来自 Oh-My-OpenAgent 的三个核心强制执行模式,让 AI agent 更可靠地完成复杂任务。
功能一览
| 功能 | 触发方式 | 效果 |
|---|---|---|
| Todo 拦截 | 默认 | agent 声称 [goal:complete] 但 todos 未完成时,第一次拦截提醒 |
| Override | 默认 | 第二次连续 [goal:complete] 覆盖拦截,正常完成 |
| Strict 模式 | /goal --strict ... |
持续拦截直到 todos 全部完成,不允许覆盖 |
| 质量自检 | --strict |
todos 全部完成后,提示 agent 做一轮自检(编译/测试/验证) |
| Idle 检测 | 默认 | 连续 2 轮无工具调用时,提醒 agent 推进或说明卡点 |
| 并行调度 | parallel_tasks 工具 |
并发派发多个子 agent,各自独立显示结果 |
使用方式
默认模式
/goal 实现一个 CLI 计算器
当 agent 干到一半就说"干完了"时,系统会自动拦截:
[!] goal intercept: incomplete todos remain
(override with a second [goal:complete])
拦截后 agent 会看到具体的未完成项列表。如果确实干完了但忘更新 todo,第二次 [goal:complete] 会正常放行。
Strict 模式
/goal --strict 实现支付流程
每次 [goal:complete] 都会被拦住,直到 todos 全部完成。todos 完成后还会触发一轮自检(编译、跑测试、需求验证),通过后才真正结束。
适合对可靠性要求高的场景,如:
- 生产环境代码修改
- 需要完整测试覆盖的任务
- 多步骤复杂流程
任务合约
复杂目标可以直接写成 Context / Request / Output format / Constraints / Pause policy。Goal 模式会把这些段落当作执行边界:满足请求、输出格式、约束和必要验证后才结束; 除非下一步涉及不可逆或对外可见操作、范围变化,或必须由用户提供信息,否则继续采用合理默认值推进。
并行子任务
/goal 研究 Go 的三个标准库并写示例
Agent 可以调用 parallel_tasks 工具同时派发多个独立子任务:
parallel_tasks(tasks=[
{prompt: "研究 encoding/json,写示例", description: "json research"},
{prompt: "研究 net/http,写示例", description: "http research"},
{prompt: "研究 sync,写示例", description: "sync research"},
])
每个子任务在独立 goroutine 中运行,工具调用会嵌套显示为独立卡片,结果聚合返回。
任务依赖
如果子任务之间有依赖关系,可以用 depends_on 指定:
parallel_tasks(tasks=[
{prompt: "写一个加法函数到 add.py", description: "add"},
{prompt: "写一个乘法函数到 mul.py", description: "mul"},
{prompt: "在 main.py 中调用 add 和 mul", description: "main", depends_on: [0, 1]},
])
独立任务(add、mul)先并发执行;main 等前两个完成后再启动。
Prometheus 规划面试
在写代码前,先让 AI 帮你理清需求:
/prometheus 重构用户认证模块,改成 JWT
Prometheus 会逐个问澄清问题:
1. 用户模块当前是 session 还是 token 认证?
2. 需要支持 refresh token 吗?
3. 现有用户表结构是什么样的?
回答完问题后,Prometheus 自动生成可执行的计划。然后你可以用 /plan-exec 来执行。
实现细节
证据审计门控
Agent.GoalReadinessFailure() 同时检查:
- Canonical todos(当前 todo 列表)
- Project checks(来自 AGENTS.md 的 verify 指令)
两者任一未通过就会阻止 [goal:complete]。
Todo 状态流
todo_write → agent 创建任务列表
complete_step → agent 标记某一步完成
advanceGoalAfterTurn → 检查 todos + project checks
├─ 有不完整项 → goalInterceptMsg + 继续循环
└─ 全部完成 → 正常结束(strict 模式先自检)
并行调度架构
parallel_tasks Execute()
├─ 对每个子任务:
│ ├─ 发射 ToolDispatch 事件(前端渲染卡片)
│ ├─ 创建嵌套 sink(subSinkFor)
│ ├─ 启动 goroutine 运行 RunSubAgentWithSession
│ └─ 子任务工具调用自动嵌套显示
├─ WaitGroup 等待全部完成
└─ 聚合结果返回
相关代码
internal/control/controller.go— Goal 状态机、advanceGoalAfterTurninternal/control/input.go—/goal --strict命令解析internal/agent/parallel_tasks.go— 并行调度工具internal/boot/boot.go— 工具注册