你是不是在给上一代模型写指令?
"每次都要读这份文档"、"始终测试"、"开始前先确认"。很多人可能都加过这些指令,防止 Codex 出错。
因为它没读文档就改了东西,所以你写了要先读文档。因为它没经允许就继续了,所以你写了要先确认再动手。
这些句子在当时或许有道理,但当模型换了之后,可能就没那么有用了。
那些为了辅助上一代模型而定的流程,对 GPT-6 Astra 来说可能过于详细了。反过来,因为你没说明预期的范围,它可能又会不必要地停下来请求确认。
需要重新审视的不仅仅是指令的数量。关键在于减少重复性任务,并明确必要的场景和完成条件。
负责 OpenAI 的 Codex 开发者体验的 Eric Provencher,在一篇题为"为 GPT-6 Astra 重新思考技能和提示"的文章中谈到了这个问题。
这不仅涵盖了你在聊天中写的请求,也包括了在仓库中传达项目文件工作规则的"AGENTS.md"。
"技能"是用于特定任务的一系列流程和知识。保存在这里的指令也会影响 Codex 的执行方式。
在这篇文章中,我们将基于 Eric 的解释和参考图片,来看看哪些该减少、哪些该保留、以及如何重写。为读者创建的示例会标记为"应用示例",以区别于原文示例。
这并不是要把 Astra 的所有失误都归咎于旧指令。这是一篇用于审计你积累下来的规则,看看哪些已经不再适应当前工作的文章。
1. 为什么需要为 Astra 审查指令
Eric 的出发点是,那些用来"照看"模型的指令,其必要性正在比以前降低。
以前,有些任务如果不按顺序指定每一步,就不会进行。为了弥补这种模糊性,我们堆积了大量的详细流程和备注。
然而,原文指出,模型在处理含义的细微差别和模糊性方面正变得更好。它指出,曾经有帮助的详细规范现在可能会阻碍结果。
我们在这里不应误解的是,这并非关于"因为模型更聪明了,所以停止解释"的讨论。
Eric 也建议保留对必要材料的指导。原文仍然要求对安全推进的范围以及完成所需的工作进行说明。
即使是同一条指令,根据该句子要传达的意图,你审查的方式也会改变。
例如,你需要区分传达项目特定情况的解释和那些为了让上一代模型遵循流程而写的解释。
"设计约束写在这份文档里"是寻找信息的线索。另一方面,"每次编辑都要从头到尾读完整份文档"则统一固定了阅读时机。
告知模型一份文档的存在,与让它每次都读所有内容,不是一回事。
此外,"禁止访问生产环境"和"即使在本地运行测试之前也要确认"阻止的是不同的行为。
仅仅因为你想要坚持前者,并不意味着后者总是必要的。然而,如果不清楚某些操作是否真的停留在本地,你也不应该直接跳过那个确认。
原文中提到的技能、AGENTS.md 以及日常请求,都与这些判断有关。即使你在聊天中修改了一个句子,但如果同样的限制仍然存在于其他地方,审计就没有完成。
例如,如果你在请求中写了"完成它直到能工作",但应用的流程仍然写着"始终在第一次实现后停下来请求审查"呢?
这是一个解释冲突指令的例子。至少,在不整理清楚用户想要哪一个之前,请求的终点是不一致的。
在审查时,不要根据"它太长了,所以删掉"来判断。要看那个句子是传达了必要的知识、确定了工作范围,还是仅仅让模型重复之前的流程。
即使文本很短,如果"确认所有内容"的目标很模糊,那也不一定是个好指令。有时,即使稍微长一点,通过阐明阅读条件或停止点来传达意图会更好。
2. 需要减少的指令:重复加载和过于详细的步骤
首先要审计的是那些无论工作内容如何都会触发的加载规则。
Eric 解释说,让模型为了修正一个简单的拼写错误而阅读海量文档或整个仓库指南,是过度的。
阅读文档会将那些内容放入模型的工作信息中。原文指出了加载不相关的解释会消耗可用上下文并减慢工作速度的问题。
这里的上下文指的是模型为该任务所引用的信息包。如果它不断增加,就会接近必须压缩对话和工作历史记录的点。
因此,与其只是减少引用次数,不如区分当前请求需要阅读什么。
示例 A:参考图片的日文翻译
修改前
在每次编辑前,始终完整阅读 architecture.md、database.md 和 deployment.md。
修改后
在处理服务间边界时参考 architecture.md,在更改数据库结构时参考 database.md,在准备部署时参考 deployment.md。
保留的是对这三份文档的指引。改变的是打开它们的条件。
在这个例子中,architecture.md 是关于服务之间的角色和连接。database.md 是关于数据库的结构。deployment.md 是关于将制作好的内容反映到执行环境中。
在"修改前"版本中,即使是修正一个拼写错误的请求,也适用"阅读所有"的规则。在"修改后"版本中,如果任务是更改数据库结构,它就会去参考相应的 database.md。
这并不意味着禁止阅读其他文档。如果一个任务跨越多个领域,那么必要的文档就不限于一个。
从这个例子中再创建一个像"只选一个文档"这样的统一规则,就偏离了原意。
我们没有删除必要的文档或精简内容。我们重写了那个要求即使是小改动也要检查所有文档的条件,使其与工作内容相匹配。
Eric 还提到了保持文档更新。即使你整理了参考条件,也需要单独检查以确保目标文档中没有残留旧的解释。
示例 B:基于原文的应用示例
接下来是一个应用于 Codex 负责文章、视频或社交媒体帖子场景的示例。这不是 Eric 本人发布的生产流程。
修改前
对于内容创作,阅读所有关于文章、视频和社交媒体帖子的流程。
修改后
撰写文章时参考 writing.md,制作视频时参考 video.md,创建社交媒体帖子时参考 social.md。对于多格式请求,请参考相关流程。
同样,关于文章、视频和社交媒体的具体流程被保留了下来。改变的是让模型在"内容创作"这个大伞下阅读所有流程的部分。
如果你只要求一篇文章,它就去执行文章指令。如果你同时要求一篇文章和它的发布公告,它就去执行文章和社交媒体的流程。
如果没有视频请求,它就不再需要在通用入口点加载整个视频制作流程。
原文将这种逐步提供必要解释的方法称为"渐进式披露"。这是一种在入口点放置判断去向的指引,同时将详细知识和流程分离到后续文档中的方法。
例如,如果你在入口点排满了文章、视频和社交媒体的完整流程,那么每个请求都会导致阅读大量的解释。
相反,将入口点的作用限制为指导:"如果是文章,去这个文档;如果是视频,去那个文档。"你保留了详细的解释而不丢弃它们,允许在需要时被读取。
Eric 解释说,对于包含多个工作流程的技能,初始文档应该是一个最小化的指南。它应该提供足够的信息,以便进入执行任务的相关文档或脚本。
创建一个只看入口点就能知道要去哪个文档的状态。仅仅把长的解释总结成短的,并不能完成这种引用关系的整理。
如果在总结中丢掉了必要的注意事项,那就变成了另一个问题。上面应用示例中保留的是每种格式特有的流程。
测试是否也被设置为"无论如何,始终执行"?
原文指出,上一代模型需要被提示才能测试和确认工作。另一方面,Astra 会自己完成这些,所以相同的指令可能导致不必要的重复测试。
不要误解为"Astra 不需要测试"。问题不在于停止检查,而在于指令是否导致了重复检查。
如果将其应用到你自己的设置中,看看你为哪个更改请求了哪种检查。必要检查的内容和每次做某事时统一重复的条件,是可以分开审计的。
由于本文不比较测试次数或处理时间,所以不会展示像"重写将节省 X 分钟"这样的效果。审计的目标是看你能否区分必要的检查和重复的冗余。
3. 缩小指令范围:这个技能应该在什么时候使用?
添加更多技能并不一定让它们更容易选择。Eric 提醒人们注意那种下载和添加大量技能的做法。
根据原文,每个技能的名称和描述都会被加载到上下文中,供模型判断何时使用它们。
这里要区分加载名称/描述和加载技能主体。这并不是说模型从一开始就会读取每个技能的主体。
模型首先使用名称和描述作为线索来判断这次该用哪一个。如果这些描述太长,或者技能太多,原文指出 Codex 会缩短描述以适应。
结果,模型可能只看到每个技能描述的一部分,使得选择更加困难。即使保存了必要的流程,入口点的解释也可能无法完全传达。
此外,Eric 还提到了描述之间的矛盾,或者那些试图让自己被用于所有事情的描述。这些可能导致加载对任务没有帮助的指令。
所以,问题不在于用技术术语塞满描述,让覆盖范围看起来很广。要让描述能让模型知道它是否应该为当前的工作被调用。
参考图片的日文翻译
修改前
创建并验证 PostgreSQL 模式迁移。用于涉及数据库、查询、模型和持久化的工作。
修改后
创建并验证 PostgreSQL 模式迁移。用于添加/更改迁移或审查应用程序流程。
PostgreSQL 是一种数据库类型。"模式迁移"指的是更改作为数据容器的表和项目的结构并应用这些更改的任务。
例如,这是一个为了增加要保存的项目而更改数据库结构的场景。这里,它被引用为解释术语含义的例子。
另一方面,"修改前"描述中的"查询"是检索或操作数据的请求。"持久化"指的是保存数据以便以后使用。
这些是与数据库相关的术语,但并非所有涉及数据库的工作都构成更改结构的迁移任务。
"修改前"版本的第一句展示了一个专门的任务:"创建并验证迁移"。然而,第二句在用法条件中包含了与数据库相关的广泛工作。
这种范围上的不一致正是参考图片中要修正的。该技能的专业领域和调用条件不匹配。
修改后,"创建并验证 PostgreSQL 模式迁移"的角色保持不变。在此基础上,它被缩小到添加迁移、更改迁移或审查应用程序流程的情况。
例如,如果你只是想检查一个检索现有数据的查询,你不一定需要仅仅因为"与数据库相关"就调用这个迁移技能。
反过来,如果是对如何应用结构更改的审查,它在"修改后"的描述中仍然是目标。缩小范围并没有丢失专业工作。
修正描述时的确认点不仅仅是"这个技能擅长什么?"而是能否读懂"它将用于哪个请求,并且不会扩展到哪些请求?"
如果你只是写"数据库技能"来让它更短,调用条件就消失了。原文要求的是在保持使用场景清晰的同时,尽可能让描述简短。
你可以使用上面的"修改前/后"来检查请求的工作和应用条件是否匹配,而不是依赖于名称的强度或描述的长度。
4. 明确指令:推进到什么程度以及什么算完成
从这里开始,我们讨论添加必要的解释。仅仅减少加载和流程并不能处理中途停止的问题。
Eric 指出,虽然 Astra 工作勤奋,但有时它对于推进到什么程度会过于谨慎。如何传达你希望它继续的范围,也是原文提到的审查目标之一。
特别是,如果你因为上一代模型未经允许就移动而强烈地写了"始终先确认",那么就要审计那个边界。
原文指出的是,为了严格遵守边界,它可能会在一个实际上可以继续的地方停下来。这不是告诉它忽略确认指令,而是重写你正在允许的事情。
A:明确批准范围
原文有一个使用一次性测试数据且不访问生产环境的本地测试示例。这是一个允许在你自己的工作环境中执行该特定任务的示例。
下面的"修改前"是一个为了对比而创建的应用示例。"修改后"包含了来自原文的本地测试指令的日文翻译。
修改前:用于对比的应用示例
在运行测试和修复失败之前,每次都请求批准。
修改后:原文示例翻译
本地测试使用一次性测试数据,不访问生产环境。请直接进行,无需在运行测试、修复由请求更改引起的失败以及重新运行受影响的测试等每个阶段都寻求批准。
保留的是目标环境和工作范围。改变的是在该范围内每次都寻求批准的条件。
"一次性测试数据"和"不访问生产环境"不是装饰性的前言。它们是判断这条指令是否可用的前提。
如果实际上是一个连接到生产环境的测试,写"不访问生产环境"并不会改变环境。有时它被称为"本地",但不确定是否满足这些条件。不要留下无法确认的条件。
此外,允许的修复是针对"由请求更改引起的失败"。它没有被扩展为允许修复测试中发现的所有问题的指令。
重新执行的目标也被写为"受影响的测试"。这与统一指定每次都重复所有测试不同。
这个句子指定了可以继续执行的操作,但它并没有消除对其他任务的批准。它展示了在已确认为安全的情况下,可以委托多少任务。
你不需要走到"因为每次都停下来很麻烦,所以允许一切"的地步。如果你将不希望它停止的任务与仍然希望它返回判断的任务分开,请求的含义就会改变。
B:明确完成条件
Eric 解释说,如果你习惯了会长时间工作的 GPT-5.6 Sol,Astra 的停止方式可能会让你觉得谨慎。
在初始实现完成阶段,即使还有工作要做,它也可能返回请求审查。因此,他建议在开始之前决定完成条件。
需要的是仅仅是实现,还是包括运行它以进行确认?此外,是否包括修复在确认过程中发现的错误?
发出请求的人首先整理这些差异。一个仅仅用"完成它"很难传达的终点线,被写成了一个任务。
以下是一个应用示例,其中原始解释被替换为创建查询表单。它不是 Eric 的实际请求文本,也不是实际行为验证的结果。
修改前
制作一个查询表单。实现后让我检查一下。
修改后
制作一个查询表单。这次,请在本地确认它能检测到空的必填字段和无效的电子邮件地址,并且在测试提交后会出现完成画面。修复由此更改引起的任何错误,并将它们与确认结果一起报告。不要发布到生产环境或发送真实邮件。
保留的是制作查询表单和向人类报告结果的目的。改变的是在报告之前要验证多少内容。
在"修改前"版本中,请求是"实现后让我检查一下"。即使它在初始实现阶段就停下来,也没有偏离指令。
如果你想中途看到设计,那种停止方式是有意义的。如果是为了确认你尚未决定的部分而停止,那是一条有理由保留的指令。
另一方面,如果你这次想要的是一个已经完成操作检查的表单,那么将这些检查包含在请求中。示例列出了空字段、无效电子邮件以及测试提交后的显示。
与仅仅"检查它是否正常工作"相比,要尝试的状态是具体的。如果在确认过程中发现了由此更改引起的错误,目标被设定为修复后报告。
同时,发布到生产环境和发送真实邮件被排除在外。这是为了避免将验证屏幕测试提交与向真实目的地发送邮件混淆。
这个请求并不将实际的电子邮件发送功能视为已验证。让它报告在本地确认了多少内容作为结果。
根据原文,如果你想超越第一次实现,就要传达要调查什么以及在哪里停止。
与其仅仅用"不要中途停止"来加强,不如列出必要的确认和不继续进行的操作。这样,你甚至可以审查它返回给人类的地方。
5. 审计你自己的设置
在原文的结尾,Eric 建议让 Astra 根据这篇文章进行审计。审计意味着阅读现有指令,检查重叠、差异以及可以审查的领域。
你也可以打开你自己的 AGENTS.md 或技能,看看你好奇的句子。然而,如果你想整理你在哪里写了什么指令,你可以在做出更改之前将其交给审计。
只先执行审计而不更改文件的方法,是本文的一个提议。它不是 Eric 指定的强制流程。
在这种情况下,不要一开始就要求"删除所有不必要的指令"。你首先需要的是能让你将原始指令与如何更改的提案进行比较的材料。
原文中还有一个注意事项:放置在仓库中的技能和指令可能会被其他工作人员的 AI 使用。
那些 AI 可能不使用相同的 Astra。Eric 指出,对 Sol 或 Luna 有帮助的解释,可能会给 Astra 增加太多限制。
即使对你这个使用 Astra 的人来说看起来过于详细,但对其他模型来说可能是必要的。如果你正在更改共享规则,谁使用哪个模型也是判断的一个因素。
如果使用情况不明,不要假设"只使用 Astra"就删除。在保留不清楚的点的同时,确认修正候选就足够了。
以下审计提示是根据本文为读者创建的。它不是 Eric 在原文中发布的提示。
在目标项目中使用它,并分享文章文本和你想审计的请求文本。如果可读范围有限,则接受该范围内的检查结果。
请根据 Eric Provencher 文章中的共享评论,对当前指令进行审计。本次仅执行审计;不要创建、编辑或删除文件,也不要更改设置。
审计目标包括:应用于此项目的 AGENTS.md、可用技能的名称和描述以及审计所需的正文内容,以及我共享的每日请求文本。请列出你能够读取到的目标。
检查以下问题: ・多个位置存在重复指令 ・无法同时执行或存在冲突目标的指令 ・无论工作内容如何,每次都需要加载或确认的过度统一规则 ・应用条件比技能实际角色更宽泛的情况 ・指令中未明确执行进度或完成标准的情况
对于发现的问题位置,将其归类为“删除”、“缩短”、“更改应用条件”或“保留”候选,并提供理由。不要将减少字符数作为目标本身;同时列出需要保留的指令。
对于每个候选,请提供以下内容: 1. 文件名/位置或共享请求文本中的相关部分 2. 当前指令 3. 假设的问题及判断依据 4. 建议的修订方案。如果选择保留,请说明理由 5. 需要保留的内容和需要更改的内容 6. 更改前应由人工检查的条件
不要批量删除项目特定的约束、专业知识、必要的测试或必要的审批。仅建议在能够确认目标数据和无生产环境访问权限等环境条件的范围内,允许继续进行本地测试或修复。
检查其他模型(如 Sol 或 Luna)是否也使用相同的指令。如果未知,请写明“未知”,不要假设这是 Astra 独有的规则。
明确说明无法读取的文件、无法确认的环境条件以及缺乏判断依据的信息。区分材料中解释的问题、设置中实际发现的问题以及未经验证的改进候选;不要将改进效果描述为已经测量过的结果。
最后,总结需要优先考虑的修正候选及其理由。在我确认目标和内容后,将另行请求执行更改。
你在此请求中收到的不是修订后的设置,而是一份当前指令与建议修订方案对应的列表。即使某条被标记为“删除候选”,这本身并不代表它被最终确定为不必要。
候选的分类是为了避免将更改读取条件的建议笼统地归为“删除”。以本文中的文档引用示例为例,文档仍然保留,因此重点是更改应用条件。
对于技能描述,其专业角色仍然保留,但调用范围被缩小。在这种情况下,如果返回的建议是删除专业知识本身,你可以检查修订前后保留的内容是否有所不同。
“缩短”候选用于评估是否可以用更短的句子传达相同的条件和约束。“保留”候选则要求说明保留它们的必要性。
结合审计范围查看结果。无论是仅能读取技能名称和描述,还是能够读取实际流程,都是判断结果的重要依据。
描述是否过于宽泛可以通过前者来检查,但流程中是否存在重复或必要的知识是否被删减,则无法在不读取正文的情况下确认。
如果你没有共享每日请求文本,那么其中与停止条件的差异也无法确认。仅读取部分设置并不构成对整个工作环境的完整审计。
需要关注的顺序是:原始指令、将其列为候选的理由、剩余的约束条件以及未确认的条件。例如,如果生产环境访问权限未知,那么跳过审批的建议前提就不成立。
你还可以检查必要的专业知识是否被删减,或者是否未考虑对其他模型的影响。在推进过程中,需将审计中发现的疑点与“可以更改”的判断区分开来。
重新阅读你为适应当前工作而不断添加的指令。第一步不是批量删除设置,而是这种不改变任何内容的审计。





