改进用于 OpenAI Codex 模型的 Cursor Agent
Cursor 集成了所有最新的用于编程的前沿 AI 模型。
每个模型都需要针对我们的 Agent 框架进行特定的指令设置和微调,以提升输出质量、防止模型偷懒、高效调用工具等。
我们一直与 OpenAI 合作,通过 Cursor 的 Agent 将他们的模型提供给开发者。本文将介绍我们如何更新 Agent 框架,以支持他们最新的前沿代码模型 GPT-5.1-Codex-Max。
构建健壮的 Agent Harness
在 Cursor 的 agent harness 中,每个模型都有专门设计的指令和可用工具,用于在 Cursor 环境中对该模型进行优化。
AI 实验室会基于各种不同的指令和工具训练新模型。在像编码这样的特定领域中,模型可能会偏好更接近它们在训练中见过的模式。将新模型接入 Cursor 时,我们的任务是在集成这些它们熟悉的指令和工具的同时,引入 Cursor 特有的部分,并基于 Cursor Bench(我们内部的一套评测基准)对它们进行调优。
我们会根据模型的成功率、调用工具的能力,以及在用户中的整体使用情况,来衡量模型的质量和鲁棒性。下面是我们在为 Codex 更新 agent harness 时所做的一些改动。
更新到最新的 Codex 模型
OpenAI 的 Codex 系列模型基于其最新的前沿大模型,专门针对代理式编码进行了训练。
OpenAI 团队与我们紧密合作,使工具和提示词与 Codex CLI 运行框架保持一致。以下是我们做出的一些更改:
更偏向 Shell 的方法
OpenAI 的 Codex CLI 专注于以 Shell 为中心的工作流。因此,Codex 模型在训练时只接触到一小部分工具,转而学习使用 Shell 来搜索、读取文件以及进行编辑。
如果模型在处理较复杂的编辑任务时遇到困难,有时会退而采用内联 Python 脚本来写文件。这些脚本功能强大,但在 Cursor 中进行编辑时,使用工具调用既更安全,也能提供更好的用户体验。
为了鼓励进行工具调用,我们让 Cursor 中工具的名称和定义更加接近它们在 Shell 中的对应工具,比如 rg(ripgrep)。我们在测试框架中的所有模型上都进行了这一调整。同时,我们还添加了类似以下的指令:
如果某个操作有对应的工具,优先使用该工具
而不是 shell 命令(例如使用 read_file 而不是 `cat`)。
Cursor 中的 沙盒隔离 机制可以防止未经授权的文件访问和网络活动,而无需用户手动审批每一条命令,如果模型最终仍选择运行 shell 命令,这一机制也有助于提升在这种情况下的安全性。
前置说明
与主线的 GPT-5 系列模型不同,Codex 模型家族目前使用推理摘要在运行过程中向用户传达更新。这些摘要可以是一行标题,也可以是一整条消息。
针对这些推理摘要,我们希望在“让用户能跟上 Agent 的进度并及早识别不良轨迹”和“又不至于频繁打扰到让他们直接忽略”之间取得平衡。我们为模型提供了准则,将推理摘要限制在 1 到 2 句话内,在发现新信息或启动新策略时进行标注,并避免对自身沟通行为进行评论(例如 “I’m explaining to the user…”)。
由于 Codex 模型在一个 Agent 回合结束前无法以常规方式“对话”,我们删除了提示词中所有与在回合中途与用户沟通相关的语言。我们发现,这样做提升了模型最终代码输出的质量。
读取 lints
Cursor 在我们所有模型的测试环境中都提供了用于读取 linter 错误(例如 ESLint、Biome)的工具,并允许 Agent 自动修复这些错误。
我们发现,仅向 Codex 提供工具定义还不足以让它主动调用我们的 read_lints 工具。相反,如果为它提供清晰、字面且具体的调用时机说明,Codex 的效果会显著提升:
在进行实质性编辑后,使用 read_lints 工具检查
最近编辑的文件中的 linter 错误。如果你引入了
任何错误,并且能够轻松找到解决方法,请修复它们。
保留推理轨迹
OpenAI 的推理模型会在工具调用之间输出内部推理轨迹,本质上是一条解释模型为何选择每一步动作的“思维链(chain of thought)”。Responses API 专门用于捕获并传递这些推理条目(或在敏感场景中传递加密的推理条目),从而让模型可以在多轮交互中保持连续性,而不必每次都从零开始重建计划。
Codex 尤其依赖这种连续性。当推理轨迹被丢弃时,模型必须自己去推断此前的思考过程,这往往会导致子目标丢失、规划能力下降、工具调用顺序错误,或者反复重新推导之前的步骤。在我们的 Cursor Bench 实验中,从 GPT-5-Codex 中移除推理轨迹会导致性能下降 30%。作为对比,OpenAI 在 SWE-bench 上观测到,当省略推理轨迹时,GPT-5 的性能仅下降 3%。
鉴于这种影响的规模,我们增加了告警机制,确保推理轨迹始终被正确保留和转发。这样可以保持 Agent 的内部计划完整,避免在模型被迫在工具调用之间“自己脑补”时出现的性能退化。
让模型更倾向于主动采取行动
在 Cursor 的默认 Agent 模式下,你通常希望 Agent 能根据用户请求自主阅读和编辑文件。如果你切到其他标签页,回来才发现 Agent 一直在等待你的许可才能继续执行,这会让人感到很沮丧。
我们一直在尝试使用更具体的指令来更好地引导 Codex:
除非用户明确要求提供计划或其他明确表示不应编写代码的意图,否则应假定用户希望你进行代码更改或运行工具来解决用户的问题。在这些情况下,在消息中输出你提议的解决方案是不好的,你应该直接实施更改。如果遇到挑战或障碍,你应该尝试自行解决。
在我们的异步远程工作流 Cloud Agents 中,我们进一步强化了这些表述。
消息顺序
OpenAI 模型经过训练,会遵守并优先考虑消息的先后顺序。例如,system prompt 总是优先于用户消息和工具调用结果。
这虽然有帮助,但也意味着我们需要细调调用框架,确保 Cursor 提供的 prompt 不会包含可能无意间与用户消息相冲突的指令。否则,Codex 可能会进入一种状态,不再愿意响应用户请求。
例如,有一段时间我们告诉 Codex 要注意节省 tokens,不要浪费。但我们发现,这条消息影响了模型执行更有野心的任务或进行大规模探索的意愿。有时它会停下来,固执地说:我不应该浪费 tokens,而且我认为没有必要继续做这个任务!
展望未来
模型迭代和发布的速度正在加快。我们的目标是让每一个前沿模型在 Cursor agent 框架中发挥最大效能。还有很多工作要做,我们也会持续分享我们对 Cursor 的改进。