主流 Agent 入门教程 / MiniMax Code
9. 目标模式与长任务
原文备份 · 第 11 / 17 篇 · 查看极客时间原知识库 ↗
本篇目录 · 20 节
来源:MiniMax Code
这一章介绍 CLI 的 Goal 机制:怎么让 Agent 跨多个 Turn 持续推进同一个目标,怎么用 token 预算控制,怎么用
/compact压缩上下文。
学完这一章,你会习惯"长任务交给 Agent 持续推进"的姿势,而不是每条消息都从头讲。
9.1 这一章要达成什么
- 设定一个长目标("为 habitlog 加金额单位支持"),用
/goal创建 - 让 Agent 跨多轮推进,期间不打断
- 学会
/goal pause//goal resume//goal edit//goal clear - 学会
/goal budget=50K设 token 预算 - 学会
/compact压缩历史 - 结束时用 commit 收尾
这一章是"AI Agent 协作"的进阶动作。学完你会发现:很多原本需要自己盯着的多步重构,其实可以让 Agent 自己跑。
9.2 Goal 是什么
Goal(目标)是 CLI 提供的"持续推进一个目标"机制:
- 你设定一个目标("完成 X,并保证 Y 测试通过")
- Agent 在多个 Turn 里持续工作
- 每个 Turn 完成后,Agent 检查目标是否达标
- 没达标就继续推进,直到达标或遇到阻塞
- 你可以中途暂停 / 恢复 / 编辑 / 清除
适合什么场景:
- 多步骤重构("把金额显示统一为元,存储保持整数分,并保证现有测试通过")
- 数据迁移("把所有旧数据从 v1 格式迁到 v2 格式")
- 跨多文件的修改("为所有 CLI 命令加
--json输出选项")
不适合什么场景:
- 单一小改动(直接问 Agent 就行)
- 需要人持续判断的事情(Goal 会自动推进,不能像 steer 那样细颗粒度控制)
9.3 一个适合 Goal 的任务:金额单位统一
我们给 habitlog 加一个"金额"概念:每次打卡可以附带金额("读书花了 30 元买书"、"跑步花了 100 元买鞋"),输入和显示使用“元”,从第一版起存储为整数分 amount_cents,使用 Decimal 从输入字符串精确换算,最多两位小数;不在中途改变存储单位,并新增一个 total 子命令看某习惯累计花了多少。
这是个典型的"跨多文件、多步骤、需要保证现有测试不破"的场景,适合用 Goal。
9.4 进 TUI,设 Goal
mcode
先看一下当前没有 Goal:
/goal status
预期输出:"No active goal" 之类。
然后新建 Goal:
/goal 为 habitlog 增加金额支持:每个打卡可以附带金额,输入与显示为人民币元,存储统一为整数分 amount_cents;新增 total <habit> 子命令查某习惯累计金额;保证现有测试全部通过
回车。Agent 收到 Goal,会讲方案,可能问你:
- 现有数据要不要迁移?
- 输入金额时用"元"还是"分"?
- 浮点精度怎么处理?
按你的实际判断回答。完成后 Goal 进入"active"状态。
设置 token 预算(防止 Agent 跑飞):
/goal budget=50K
50K 表示 50,000 tokens(模型的文本计量单位,token 数越大代表文本越长、花费越高)。具体能跑多远取决于任务的复杂度。预算用尽 Agent 会暂停等你决策。
经验值:
50K 只是本次演示的预算上限,不表示足够完成某一类任务。先运行一个小阶段,记录实际用量和失败重试,再决定后续预算。
9.5 让 Goal 自动推进
让 Agent 开始干活:
请按 Goal 开始推进
Agent 会:
- 先看现有代码(
cli.py、AGENTS.md、测试文件) - 设计数据格式变更(要不要给 entry 加
amount字段) - 改代码、改测试
- 跑 pytest 确认不破现有测试
- 跑端到端验证
过程中你不需要每一步都参与,Agent 会自己决定下一步。
不打断的两种方式
观察,不动手:
- TUI 里盯着工具调用日志,看着 Agent 自己跑完每一轮
- 除非它问问题,否则不需要在输入框敲东西
用 /status 看状态:
- Goal 在跑的时候,状态栏会显示当前进度
想中途插话?
- 小调整:用
/steer,比如/steer 补充 0.10 元加 0.20 元等于 30 分的精度回归测试 - 大方向变更:用
/goal edit编辑目标本身 - 暂停一下:
/goal pause
9.6 中途查看进度
跑了一会儿后查看 Goal 状态:
/goal status
预期看到:
- 目标当前进展(已完成的子任务、待办任务)
- 已用 token / 总预算
- 上次活动时间
如果发现方向偏了,可以:
/goal edit
进入编辑器模式修改目标。修改后 Agent 会按新目标继续推进。
9.7 上下文长了:压缩
Agent 跑了几轮后,TUI 里的上下文会变长(每次工具调用结果、每次 Agent 回复都进上下文)。上下文过长会:
- 让单轮变慢
- 增加 token 消耗
- 可能让模型"分心",丢失早期的细节
压缩:
/compact
/compact 会让 Agent 把当前上下文"压缩"成一个摘要,丢一些细节但保留关键信息。压缩后再继续,Agent 会按摘要继续推进。
经验:
- 跑了几轮后,主动
/compact一次- 如果
/status显示上下文已经很长,主动压缩- 压缩会消耗一些 token,但比让上下文无限增长划算
9.8 收尾
Goal 完成(或你决定停)的时候,看一下最终状态:
/goal status
预期显示:
- Goal: 完成(或部分完成)
- 已用 token: XX K / 50 K
- 完成项 / 未完成项
退出 TUI 回到普通终端。验证 Goal 的成果:
python -m habitlog add 读书 --amount 30
python -m habitlog total 读书
python -m pytest -v
预期:
add可以带--amount参数total <habit>返回累计金额- 所有测试通过
提交
git status
git diff
git add habitlog/ tests/
git commit -m "feat: add amount tracking with per-habit total command"
如果 Goal 的实现里改了 AGENTS.md,单独一次 commit:
git add AGENTS.md
git commit -m "docs: record amount conventions in AGENTS.md"
9.9 清理 Goal
/goal clear
清除当前 Goal。如果以后还有类似任务,再 /goal 创建。
退出 TUI:
/exit
9.10 这一章做了什么、留下了什么
- 第一次用 Goal 跑了一个跨多轮的重构
- 学会了
/goal//goal status//goal edit//goal pause//goal budget=//goal resume//goal clear - 学会了
/compact压缩上下文 - 仓库多了金额相关代码和测试
仓库结构(增量):
habitlog/
├── habitlog/
│ ├── __init__.py
│ ├── cli.py
│ ├── mcp_client.py
│ └── amount.py # 新加:金额处理
└── tests/
├── ...
└── test_amount.py # 新加
9.11 Goal 的边界
不是所有任务都适合 Goal:
| 任务 | 适合 Goal 吗 | 替代方案 |
|---|---|---|
| 单一小修改 | ❌ | 直接问 Agent |
| 多文件、多步骤重构 | ✅ | — |
| 数据迁移 | ✅ | — |
| 涉及业务判断 | ❌ | 拆成多个小任务,逐个决策 |
| 需要持续人参与 | ❌ | 用 steer / queue 持续插话 |
| 跨 Session 的工作 | ✅ | Goal 可以跨 Session |
边界规则:
- Goal 不能替你做业务决策。如果任务里有"该用哪种方案"的开放决策,Goal 会问;如果该决策对业务有重大影响,你应该自己拍板
- Goal 会持续花 token。预算用尽就停
- Goal 的成功标准由你定义。Goal 完成 ≠ 业务成功,需要你自己跑测试 / 验收
9.12 这一章的常见问题
Goal 跑偏了
/goal edit改目标,让它回到正轨- 或者
/goal clear取消,自己手动拆任务
预算用尽了
/goal budget=100K追加预算- 或
/goal clear取消,剩余部分自己手动跑
Goal 完成后我没看到总体满意
- 跑
python -m pytest -v自己验证 - 看
git diff实际改了什么 - Goal 的"完成"是按它理解的目标完成的,可能和你心里想的不完全一致
上下文太长 / 单轮变慢
/compact- 长期跑的任务每 5-10 轮压缩一次
下一章讲 Session 管理:怎么暂停、恢复、分叉、回退,怎么导出对话留档。
金额契约与旧记录
Goal 开始前确认整个计划使用 amount_cents,不能把改单位当小改动。旧记录没有金额时保持不变;已有 amount 元字段时先在独立副本备份,以 Decimal(str(value)) * 100 验证恰为整数后迁移并写 schemaVersion=2,非法或精度不明的值拒绝迁移并报告行号。验证 0.10 元+0.20 元为 30 分、旧打卡记录仍可读、重复迁移不再乘 100;人工核对后才替换真实数据。
token 预算只是试运行上限,不是任务估价。先做一个小阶段,记录实际模型、输入规模、消耗和失败重试,再决定下一阶段预算。