首先 /goal 真的很好用, 下班之前设置一个 goal 之后就和朋友们出去 happy,第二天早上起来验收成果,爽YY。
问题描述 
但是随着使用 goal 这个功能,我发了一个小坑:如果先让 codex 做某件事, 比如我们的操作序列是:
- 告诉 codex "先下载所有的金融数据到临时目录下,再开始实现这个 spec plan”
- 然后再设置 goal: “/goal 实现 spec plan new-feature-plan.md 中的所有子任务”
那么坑就来了:在经过 context compaction 之后 codex 有可能会再次去执行 “下载所有的金融数据到临时目录下”!
并且因为 goal 一般会执行很长时间,中间必定会经过很多次的 context compaction,所以这个下载操作会执行很多次
。
这是因为 codex 的 context compaction 之后一定会把最后一个 user message 保留下来。所以经过 context compaction 之后,gpt 会傻傻地继续执行 last user message 中的意图,殊不知道 goal 已经驱动整个任务往前了一大截,last user message 中的意图早就完成了。
解决方法 
在 codex 本身有更好的办法解决这个问题之前 ,我的做法是:
原来的操作序列是:
- 告诉 codex "先下载所有的金融数据到临时目录下,再开始实现这个 spec plan”
- 然后再设置goal “/goal 实现 spec plan new-feature-plan.md 中的所有子任务”
修正之后的操作序列:
- 告诉 codex "先下载所有的金融数据到临时目录下,再开始实现这个 spec plan”
- 告诉 codex “实现 spec plan new-feature-plan.md 中的所有子任务”。也就是把 goal 中的提示词不带 “/goal”,直接发给 codex。 这是解决这个坑的关键步骤,目的是覆盖 last user message。
- 然后再设置 goal “/goal 实现 spec plan new-feature-plan.md 中的所有子任务”
这样经过 context compaction 之后,codex 看到的 last user message 和 goal 是一致的,就能解决这个问题。
1 个帖子 - 1 位参与者