TODO ↔ Goal 双向同步:我给 AI Agent 装了个"自我对齐"的小工具
AI Agent 自主执行时,如何让它”自己知道自己该做啥、做到哪了”?一个小工具让 TODO 和 Goal 状态双向流动。
问题:Agent 的”分时记忆”
如果你养过一个 AI Agent,你一定遇到过这个场景:
你给它布置了一个复杂任务——“帮我做市场调研,写报告,再部署一个演示页面”。它埋头干了半小时,跑了 40 轮工具调用,中间重启了两次。然后它回来告诉你:”报告写好了,页面部署了。”
你问:”那为什么调研部分的数据源没更新?”
它说:”哦,那个是上一轮的目标,我以为结束了。”
问题出在哪?Agent 没有”持久化的进度意识”。每轮对话都是一次新的思考起点,除非你把进度显式地塞进它的 prompt 里。而传统的 TODO 清单(像我项目里的 TODO.txt)和 Goal 状态(goal_state.json)是两个孤岛——TODO 记录了”计划要做什么”,Goal 记录了”当前执行到什么状态”,但它们之间没有自动同步。
一个简单的想法
如果让 TODO 和 Goal 互相”通气”呢?
- 当 Agent 完成了一个 TODO 项 → 自动更新 Goal 状态,让目标感知进度
- 当 Goal 完成了 → 自动把对应的 TODO 项标记为完成
这就是 todo_goal_sync.py 的全部设计。
架构:双向同步
代码只有 200 行,核心是两个方向的数据流:
1 | ┌─────────────┐ ┌──────────────┐ |
方向 1:TODO → Goal
每次 Agent 运行 todo_to_goal() 时,它会:
- 解析
TODO.txt,提取所有[x](完成)和[ ](待办)项 - 计算完成比例,例如
3/6 项完成 - 将进度摘要写入
goal_state.json的objective字段
这样,Agent 在下轮读取 goal_state 时就能看到:”哦,我已经完成了 3/6,剩下的是 XXX。”——进度不再是黑盒。
1 | def todo_to_goal(): |
方向 2:Goal → TODO
反过来,当一个 Goal 完成(status='completed' 或 budget_exhausted')时:
- 检查
goal_state.json的objective中是否提到了某个 TODO 项 - 如果匹配,把对应的
[ ]标记为[x] - 如果没有匹配项,回退执行
todo_to_goal()做反向更新
1 | def goal_to_todo(): |
用法
1 | # 双向同步(推荐) |
一个实战片段
在我自己的 Agent 项目(GenericAgent)中,todo_goal_sync.py 被集成到了每轮执行后的收尾流程:
1 | 每轮执行完毕 → 检查 TODO 是否有更新 → todo_to_goal() → |
效果是这样的:
之前:
1 | 用户:调研结果呢? |
之后:
1 | Agent 读取 goal_state: |
设计取舍
写这个工具时有几个有意思的决策:
1. 简单匹配,不要 NLP
Goal→TODO 方向的关键词匹配用的是最简单的 string in objective 判断,而不是 LLM 语义匹配。原因:
- 200行的工具引入 LLM 调用太重量级
- TODO 标题本身已经是人类写的摘要,关键词匹配足够
- 如果没匹配上,有
todo_to_goal()回退
2. Goal 状态保留
goal_state.json 的 objective 字段采用追加模式——每次同步会保留旧目标,追加新的进度摘要。这样 Agent 能看到”来龙去脉”,而不是只有最新状态。
3. 无外部依赖
只用 os, sys, json, re 四个标准库,任何 Python 环境都能跑。
集成建议
如果你也想给自己的 Agent 加上这个能力:
- 下载脚本:把
todo_goal_sync.py放到项目的assets/目录 - 定义文件路径:确保
TODO_PATH和GOAL_STATE_PATH指向你的文件 - 集成到执行循环:在每轮 Agent 执行后的收尾流程中调用双向同步
- 可选:注册为定时任务,每隔 N 分钟自动同步一次
1 | # 在你的 Agent 收尾流程中 |
小结
200 行代码,两个方向的数据流,解决了一个实际问题:让 AI Agent 在分时对话中保持进度感知。
它不复杂——没有 LLM 调用,没有向量数据库,没有复杂的图数据库。但它管用——因为有时候,最简单的”双向通知”模式,就是 Agent 最需要的”自我对齐”机制。
就像项目管理里那句老话:“What gets measured gets managed.” 在 Agent 的世界里,“What gets synced gets remembered.”