项目文件夹

文件
2026-07-13 13:00:08 +08:00

141 行
4.5 KiB
Markdown

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
# 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,各自独立显示结果 |
## 使用方式
### 默认模式
```bash
/goal 实现一个 CLI 计算器
```
当 agent 干到一半就说"干完了"时,系统会自动拦截:
```
[!] goal intercept: incomplete todos remain
(override with a second [goal:complete])
```
拦截后 agent 会看到具体的未完成项列表。如果确实干完了但忘更新 todo,第二次 `[goal:complete]` 会正常放行。
### Strict 模式
```bash
/goal --strict 实现支付流程
```
每次 `[goal:complete]` 都会被拦住,直到 todos 全部完成。todos 完成后还会触发一轮自检(编译、跑测试、需求验证),通过后才真正结束。
适合对可靠性要求高的场景,如:
- 生产环境代码修改
- 需要完整测试覆盖的任务
- 多步骤复杂流程
### 任务合约
复杂目标可以直接写成 Context / Request / Output format / Constraints /
Pause policy。Goal 模式会把这些段落当作执行边界:满足请求、输出格式、约束和必要验证后才结束;
除非下一步涉及不可逆或对外可见操作、范围变化,或必须由用户提供信息,否则继续采用合理默认值推进。
### 并行子任务
```bash
/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 事件(前端渲染卡片)
│ ├─ 创建嵌套 sinksubSinkFor
│ ├─ 启动 goroutine 运行 RunSubAgentWithSession
│ └─ 子任务工具调用自动嵌套显示
├─ WaitGroup 等待全部完成
└─ 聚合结果返回
```
## 相关代码
- `internal/control/controller.go` — Goal 状态机、advanceGoalAfterTurn
- `internal/control/input.go``/goal --strict` 命令解析
- `internal/agent/parallel_tasks.go` — 并行调度工具
- `internal/boot/boot.go` — 工具注册