← 全部极客知识库

主流 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 会:

  1. 先看现有代码(cli.py、AGENTS.md、测试文件)
  2. 设计数据格式变更(要不要给 entry 加 amount 字段)
  3. 改代码、改测试
  4. 跑 pytest 确认不破现有测试
  5. 跑端到端验证

过程中你不需要每一步都参与,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 预算只是试运行上限,不是任务估价。先做一个小阶段,记录实际模型、输入规模、消耗和失败重试,再决定下一阶段预算。