OpenAI 使用 GPT-5.4
<a id="introduction"></a>
简介
GPT-5.4发布时面向API与Codex中的专业工作,覆盖复杂分析、生产软件和多步骤自动化。在该代家族中,gpt-5.4用于软件工程、推理、写作与工具之间切换的通用任务。本页的代际比较不表示当前所有模型中的排名。
<a id="whats-new"></a>
新能力
相对5.2,改进代码、文档、工具、指令、视觉、多模态、长任务、词元效率与多来源搜索,以及客服、分析、金融中的文档和表格工作。它把5.3-Codex的编程能力带到通用模型,支持项目惯例、多文件修改和前端实现;具体收益应按任务测量。
API新增能力
- tool_search:延后加载大型工具集合,只在需要时提供相关定义,降低前置Schema用量并改善选择。
- 约100万词元上下文:支持大型仓库、多文档与长智能体轨迹,费用与限额仍分长短上下文。
- 内置计算机操作:通过截图和动作协议完成软件操作与验证,宿主执行动作。
- 原生压缩:维持长流程的关键状态,减少上下文负担。
<a id="model-api-and-feature-updates"></a>
模型、API与功能
| 变体 | 用途 |
|---|---|
| gpt-5.4 | 通用专业工作、复杂推理、知识、代码与多步智能体 |
| gpt-5.4-pro | 更难问题,允许更长计算与等待 |
| gpt-5.4-mini | 高调用量编程、计算机操作及仍需较强推理的智能体 |
| gpt-5.4-nano | 速度与成本优先的高吞吐任务 |
低推理力度
none为5.4与5.2的最低和默认设置。需要更深推理时逐步增加并实验。none也需要清楚的计划、任务和工具要求,不能靠隐藏推理补足未说明合同。
GPT-5.4的none推理设置;保持各语言API字段
// GPT-5.4的none推理设置;保持各语言API字段
import OpenAI from "openai";
const openai = new OpenAI();
const response = await openai.responses.create({
model: "gpt-5.4",
input:
"Think carefully and outline your steps before answering. How much gold would it take to coat the Statue of Liberty in a 1mm layer?",
reasoning: {
effort: "none",
},
});
console.log(response);
GPT-5.4的none推理设置;保持各语言API字段
## GPT-5.4的none推理设置;保持各语言API字段
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5.4",
input="Think carefully and outline your steps before answering. How much gold would it take to coat the Statue of Liberty in a 1mm layer?",
reasoning={"effort": "none"},
)
print(response)
GPT-5.4的none推理设置;保持各语言API字段
// GPT-5.4的none推理设置;保持各语言API字段
package main
import (
"context"
"fmt"
"github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/responses"
"github.com/openai/openai-go/v3/shared"
)
func main() {
client := openai.NewClient()
response, err := client.Responses.New(context.Background(), responses.ResponseNewParams{
Model: "gpt-5.4",
Input: responses.ResponseNewParamsInputUnion{OfString: openai.String("Think carefully and outline your steps before answering. How much gold would it take to coat the Statue of Liberty in a 1mm layer?")},
Reasoning: shared.ReasoningParam{Effort: shared.ReasoningEffortNone},
})
if err != nil {
panic(err)
}
fmt.Println(response)
}
GPT-5.4的none推理设置;保持各语言API字段
// GPT-5.4的none推理设置;保持各语言API字段
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.Reasoning;
import com.openai.models.ReasoningEffort;
import com.openai.models.responses.ResponseCreateParams;
ResponseCreateParams params =
ResponseCreateParams.builder()
.model("gpt-5.4")
.input("Explain the bug and propose a fix.")
.reasoning(Reasoning.builder().effort(ReasoningEffort.NONE).build())
.build();
client.responses().create(params).output().stream()
.flatMap(item -> item.message().stream())
.flatMap(message -> message.content().stream())
.flatMap(content -> content.outputText().stream())
.forEach(text -> System.out.println(text.text()));
GPT-5.4的none推理设置;保持各语言API字段
// GPT-5.4的none推理设置;保持各语言API字段
using OpenAI.Responses;
#pragma warning disable OPENAI001
string key = Environment.GetEnvironmentVariable("OPENAI_API_KEY")!;
ResponsesClient client = new(key);
CreateResponseOptions options = new()
{
Model = "gpt-5.4",
ReasoningOptions = new ResponseReasoningOptions
{
ReasoningEffortLevel = ResponseReasoningEffortLevel.None,
},
};
options.InputItems.Add(
ResponseItem.CreateUserMessageItem(
"Think carefully and outline your steps before answering. How much gold would it take to coat the Statue of Liberty in a 1mm layer?"
)
);
ResponseResult response = await client.CreateResponseAsync(options);
Console.WriteLine(response.GetOutputText());
GPT-5.4的none推理设置;保持各语言API字段
## GPT-5.4的none推理设置;保持各语言API字段
require "openai"
client = OpenAI::Client.new
response = client.responses.create(
model: "gpt-5.4",
reasoning: { effort: :minimal },
input: "Explain the bug and propose a fix."
)
puts(response.output_text)
GPT-5.4的none推理设置;保持各语言API字段
## GPT-5.4的none推理设置;保持各语言API字段
curl --request POST \
--url https://api.openai.com/v1/responses \
--header "Authorization: Bearer $OPENAI_API_KEY" \
--header 'Content-type: application/json' \
--data '{
"model": "gpt-5.4",
"input": "Think carefully and outline your steps before answering. How much gold would it take to coat the Statue of Liberty in a 1mm layer?",
"reasoning": {
"effort": "none"
}
}'
输出详细程度
text.verbosity支持low、medium(默认)、high,与推理力度分开。high适合解释和重构,low适合简答或聚焦代码;中高档常产生更长结构与说明,low更紧凑。参数设置后仍可用提示规定特定输出,评测时同时看完整性与延迟。
控制GPT-5.4的输出详细程度
// 控制GPT-5.4的输出详细程度
import OpenAI from "openai";
const openai = new OpenAI();
const response = await openai.responses.create({
model: "gpt-5.4",
input:
"What is the answer to the ultimate question of life, the universe, and everything?",
text: {
verbosity: "low",
},
});
console.log(response);
控制GPT-5.4的输出详细程度
## 控制GPT-5.4的输出详细程度
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5.4",
input="What is the answer to the ultimate question of life, the universe, and everything?",
text={"verbosity": "low"},
)
print(response)
控制GPT-5.4的输出详细程度
// 控制GPT-5.4的输出详细程度
package main
import (
"context"
"fmt"
"github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/responses"
)
func main() {
client := openai.NewClient()
response, err := client.Responses.New(context.Background(), responses.ResponseNewParams{
Model: "gpt-5.4",
Input: responses.ResponseNewParamsInputUnion{OfString: openai.String("What is the answer to the ultimate question of life, the universe, and everything?")},
Text: responses.ResponseTextConfigParam{Verbosity: responses.ResponseTextConfigVerbosityLow},
})
if err != nil {
panic(err)
}
fmt.Println(response)
}
控制GPT-5.4的输出详细程度
// 控制GPT-5.4的输出详细程度
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.responses.ResponseCreateParams;
import com.openai.models.responses.ResponseTextConfig;
ResponseCreateParams params =
ResponseCreateParams.builder()
.model("gpt-5.4")
.input("Explain the bug and propose a fix.")
.text(ResponseTextConfig.builder().verbosity(ResponseTextConfig.Verbosity.LOW).build())
.build();
client.responses().create(params).output().stream()
.flatMap(item -> item.message().stream())
.flatMap(message -> message.content().stream())
.flatMap(content -> content.outputText().stream())
.forEach(text -> System.out.println(text.text()));
控制GPT-5.4的输出详细程度
## 控制GPT-5.4的输出详细程度
require "openai"
client = OpenAI::Client.new
response = client.responses.create(
model: "gpt-5.4",
text: { verbosity: :low },
input: "Explain the bug and propose a fix."
)
puts(response.output_text)
控制GPT-5.4的输出详细程度
## 控制GPT-5.4的输出详细程度
curl --request POST \
--url https://api.openai.com/v1/responses \
--header "Authorization: Bearer $OPENAI_API_KEY" \
--header 'Content-type: application/json' \
--data '{
"model": "gpt-5.4",
"input": "What is the answer to the ultimate question of life, the universe, and everything?",
"text": {
"verbosity": "low"
}
}'
约100万词元上下文
272K以下与以上输入有不同Standard价格与速率限制。原页指出Fast提示超过272K时自动按Standard处理。长上下文费用可叠加数据驻留、Batch等价格调整,应按定价和具体模型限额核算。
工具
计算机操作
模型查看截图并提出结构化动作,执行框架运行,适合网站导航、表单及验证修改。使用隔离浏览器或虚拟机,高影响动作保留人工控制。内置循环、自定义框架和代码执行方式见计算机操作。
工具搜索
工具很多、包含namespaces或MCP时可延后加载。候选工具请求时已知可用托管搜索;由应用动态决定加载时采用客户端执行搜索。工具Schema减少有助于上下文、缓存和延迟,具体见工具搜索。
自定义工具
type为custom可传代码、SQL、命令、配置或文字等自由输入,不局限JSON:
自由格式自定义工具的声明
{
"type": "custom",
"name": "code_exec",
"description": "Executes arbitrary python code"
}
可通过Lark等CFG限制语法或DSL,但符合语法不保证安全。description应简洁明确,服务端继续验证并控制执行。
允许工具子集
tools声明全集,tool_choice.allowed_tools限定本阶段可用子集;auto允许选择,required要求调用。这样可以保持工具定义稳定,并避免脆弱的固定调用顺序。
allowed_tools子集及选择模式
{
"tool_choice": {
"type": "allowed_tools",
"mode": "auto",
"tools": [
{ "type": "function", "name": "get_weather" },
{ "type": "function", "name": "search_docs" }
]
}
}
工具前说明
可要求简短说明调用意图;它是可见行动理由,不是原始隐藏思维。工具之间可能有多条assistant消息,需要按phase区分中间与完成状态。
<a id="migration-quickstart"></a>
快速迁移
从其他模型迁移
5.2到5.4先保留原实际力度与提示;o3可从medium开始再比较high;4.1/4o可先none保持速度;o4-mini/4.1-mini可评测5.4-mini,4.1-nano可评测5.4-nano。使用升级指南界定模型和提示词任务,不自行扩大到无关实现改造。
<a id="phase-parameter"></a>
phase
长时程、工具密集Responses建议使用assistant的phase,commentary表示中间更新,final_answer表示最终答案;不给user添加。previous_response_id通常简化状态保存,手动回放原样保留,避免开场说明被误判为任务完成。
手动回放assistant项时保留phase
// 手动回放assistant项时保留phase
import OpenAI from "openai";
const client = new OpenAI();
const response = await client.responses.create({
model: "gpt-5.4",
input: [
{
role: "assistant",
phase: "commentary",
content:
"I’ll inspect the logs and then summarize root cause and remediation.",
},
{
role: "assistant",
phase: "final_answer",
content: "Root cause: cache invalidation race.",
},
{
role: "user",
content: "Great—now give me a rollout-safe fix plan.",
},
],
});
console.log(response.output_text);
手动回放assistant项时保留phase
## 手动回放assistant项时保留phase
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5.4",
input=[
{
"role": "assistant",
"phase": "commentary",
"content": "I’ll inspect the logs and then summarize root cause and remediation.",
},
{
"role": "assistant",
"phase": "final_answer",
"content": "Root cause: cache invalidation race.",
},
{
"role": "user",
"content": "Great—now give me a rollout-safe fix plan.",
},
],
)
print(response.output_text)
手动回放assistant项时保留phase
// 手动回放assistant项时保留phase
package main
import (
"context"
"fmt"
"github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/responses"
)
func main() {
client := openai.NewClient()
commentary := responses.ResponseInputItemParamOfMessage(
"I’ll inspect the logs and then summarize root cause and remediation.",
responses.EasyInputMessageRoleAssistant,
)
commentary.OfMessage.Phase = responses.EasyInputMessagePhaseCommentary
finalAnswer := responses.ResponseInputItemParamOfMessage(
"Root cause: cache invalidation race.",
responses.EasyInputMessageRoleAssistant,
)
finalAnswer.OfMessage.Phase = responses.EasyInputMessagePhaseFinalAnswer
response, err := client.Responses.New(context.Background(), responses.ResponseNewParams{
Model: "gpt-5.4",
Input: responses.ResponseNewParamsInputUnion{OfInputItemList: responses.ResponseInputParam{
commentary,
finalAnswer,
responses.ResponseInputItemParamOfMessage("Great—now give me a rollout-safe fix plan.", responses.EasyInputMessageRoleUser),
}},
})
if err != nil {
panic(err)
}
fmt.Println(response.OutputText())
}
手动回放assistant项时保留phase
// 手动回放assistant项时保留phase
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.Reasoning;
import com.openai.models.ReasoningEffort;
import com.openai.models.responses.ResponseCreateParams;
ResponseCreateParams params =
ResponseCreateParams.builder()
.model("gpt-5.4")
.input("Explain the bug and propose a fix.")
.reasoning(Reasoning.builder().effort(ReasoningEffort.MEDIUM).build())
.build();
client.responses().create(params).output().stream()
.flatMap(item -> item.message().stream())
.flatMap(message -> message.content().stream())
.flatMap(content -> content.outputText().stream())
.forEach(text -> System.out.println(text.text()));
手动回放assistant项时保留phase
## 手动回放assistant项时保留phase
require "openai"
client = OpenAI::Client.new
response = client.responses.create(
model: "gpt-5.4",
reasoning: { effort: :medium },
input: "Explain the bug and propose a fix."
)
puts(response.output_text)
参数兼容
5.4的temperature、top_p与相应logprobs只在none支持;其他力度或更早5系列不兼容的组合会报错。推理控制用reasoning.effort,长度和详细程度分别用max_output_tokens与text.verbosity;不要用采样参数代替推理预算。
Chat Completions与Responses
Responses可续接相关推理项,减少重复推理;两个端点的字段形状不同。以下分别展示推理、详细度与自由工具:
两个端点中的none推理请求
## 两个端点中的none推理请求
curl --request POST \
--url https://api.openai.com/v1/responses \
--header "Authorization: Bearer $OPENAI_API_KEY" \
--header "Content-type: application/json" \
--data '{
"model": "gpt-5.4",
"input": "How much gold would it take to coat the Statue of Liberty in a 1mm layer?",
"reasoning": {
"effort": "none"
}
}'
两个端点中的none推理请求
## 两个端点中的none推理请求
curl --request POST \
--url https://api.openai.com/v1/chat/completions \
--header "Authorization: Bearer $OPENAI_API_KEY" \
--header "Content-type: application/json" \
--data '{
"model": "gpt-5.4",
"messages": [
{
"role": "user",
"content": "How much gold would it take to coat the Statue of Liberty in a 1mm layer?"
}
],
"reasoning_effort": "none"
}'
两个端点中的详细度设置
## 两个端点中的详细度设置
curl --request POST \
--url https://api.openai.com/v1/responses \
--header "Authorization: Bearer $OPENAI_API_KEY" \
--header "Content-type: application/json" \
--data '{
"model": "gpt-5.4",
"input": "What is the answer to the ultimate question of life, the universe, and everything?",
"text": {
"verbosity": "low"
}
}'
两个端点中的详细度设置
## 两个端点中的详细度设置
curl --request POST \
--url https://api.openai.com/v1/chat/completions \
--header "Authorization: Bearer $OPENAI_API_KEY" \
--header "Content-type: application/json" \
--data '{
"model": "gpt-5.4",
"messages": [
{
"role": "user",
"content": "What is the answer to the ultimate question of life, the universe, and everything?"
}
],
"verbosity": "low"
}'
两个端点中的自定义工具
## 两个端点中的自定义工具
curl --request POST \
--url https://api.openai.com/v1/responses \
--header "Authorization: Bearer $OPENAI_API_KEY" \
--header "Content-type: application/json" \
--data '{
"model": "gpt-5.4",
"input": "Use the code_exec tool to calculate the area of a circle with radius equal to the number of r letters in blueberry",
"tools": [
{
"type": "custom",
"name": "code_exec",
"description": "Executes arbitrary Python code"
}
]
}'
两个端点中的自定义工具
## 两个端点中的自定义工具
curl --request POST \
--url https://api.openai.com/v1/chat/completions \
--header "Authorization: Bearer $OPENAI_API_KEY" \
--header "Content-type: application/json" \
--data '{
"model": "gpt-5.4",
"messages": [
{
"role": "user",
"content": "Use the code_exec tool to calculate the area of a circle with radius equal to the number of r letters in blueberry"
}
],
"tools": [
{
"type": "custom",
"custom": {
"name": "code_exec",
"description": "Executes arbitrary Python code"
}
}
]
}'
<a id="prompting-best-practices"></a>
提示词最佳实践
理解模型行为
5.4在语气遵循、多步持续、丰富证据综合、模块化技能指令、复杂长文、独立并行工具和表格/财务流程中较强。仍应明确首轮低上下文工具路由、依赖顺序、推理档位、研究引用、高影响操作验证,以及终端与编辑边界。以能通过评测的最小提示开始,仅针对实测失败增加规则。
核心提示模式
紧凑输出与明确合同
按指定顺序返回必要小节,保持输出紧凑
<output_contract>
- 严格返回要求的小节,并按要求的顺序排列。
- 如果提示词规定了开场说明、分析块或工作小节,不要将其视为多余输出。
- 长度限制仅适用于它所针对的小节。
- 如果要求了某种格式(JSON、Markdown、SQL、XML),只输出该格式。
</output_contract>
<verbosity_controls>
- 优先采用简洁、信息密度高的文字。
- 避免重复用户的请求。
- 进度更新保持简短。
- 不要过度压缩答案,以至于遗漏必需的证据、推理或完成情况检查。
</verbosity_controls>
持续执行与指令更新
定义可继续的可逆工作,何时需要确认;用户新要求仅覆盖相关默认,系统与开发者更高优先级仍生效。
默认持续执行与审批边界
<default_follow_through_policy>
- 用户意图清楚,且下一步可逆、风险较低时,直接推进,无需询问。
- 仅在下一步符合以下情况时请求许可:
(a) 不可逆;
(b) 会产生外部副作用(例如发送、购买、删除或写入生产环境);或
(c) 需要尚未提供的敏感信息,或需要作出会实质改变结果的选择。
- 如果继续执行,简要说明已经做了什么,以及哪些仍为可选项。
</default_follow_through_policy>
默认样式与用户新要求的优先关系
<instruction_priority>
- 用户指令优先于默认的风格、语气、格式和主动程度偏好。
- 安全、诚实、隐私和许可约束不能让步。
- 较新的用户指令与较早指令冲突时,遵循较新的指令。
- 保留不冲突的较早指令。
</instruction_priority>
中途更新明确范围、覆盖项和继续保留的规则。任务本身改变也应直接说明,不能继续按过期目标执行。
只对下一回答生效或改变整个任务的更新示例
<task_update>
仅对下一次回复:
- 不要完成任务。
- 只给出计划。
- 限为 5 个要点。
此前所有指令仍然适用,除非与本次更新冲突。
</task_update>
只对下一回答生效或改变整个任务的更新示例
<task_update>
任务已经改变。
此前任务:完成工作流。
当前任务:仅审查工作流并识别风险。
本轮规则:
- 不要执行动作。
- 不要调用破坏性工具。
- 严格返回以下三项:
1. Main risks
2. Missing information
3. Recommended next step
</task_update>
工具持续性、依赖与并行
即使最终目标看似明确,也不能跳过必要查询或权限验证。独立检索可以并发;有前置条件、歧义或不可逆动作时,正确顺序优先。
正确性依赖工具时继续查证,不凭猜测结束
<tool_persistence_rules>
- 工具能实质提升正确性、完整性或依据充分程度时,使用工具。
- 如果再调用一次工具很可能实质提升正确性或完整性,不要提前停止。
- 持续调用工具,直到:
(1) 任务已经完成,且
(2) 验证通过(见 <verification_loop>)。
- 工具返回空结果或部分结果时,换一种策略重试。
</tool_persistence_rules>
执行前检查必要查询、前置条件和下游影响
<dependency_checks>
- 执行动作前,检查是否需要先进行发现、查找或记忆检索。
- 不要因为最终动作看起来很明显,就跳过前置步骤。
- 任务依赖上一步输出时,先解决该依赖。
</dependency_checks>
独立并行与有依赖顺序执行的规则
<parallel_tool_calling>
- 多个检索或查找步骤彼此独立时,优先并行调用工具,缩短实际耗时。
- 存在前置依赖,或某个结果会决定下一步动作时,不要并行执行。
- 并行检索后,先综合结果,再继续调用。
- 有选择地并行:并行收集独立证据,不并行执行推测性或重复的工具操作。
</parallel_tool_calling>
完整性与空结果恢复
明确列完全部请求项才算完成。批处理应逐项核对,不能把少量结果或空结果直接当作穷尽结论。
长任务与批处理的完成合同
<completeness_contract>
- 所有要求的事项都已覆盖或明确标为 [blocked] 前,都将任务视为未完成。
- 在内部维护必需交付物的检查表。
- 对于列表、批次或分页结果:
- 尽可能确定预期范围;
- 跟踪已处理的项目或页面;
- 结束前确认覆盖情况。
- 如果某项因数据缺失而受阻,标为 [blocked],并准确说明缺什么。
</completeness_contract>
空、部分或异常狭窄检索的恢复规则
<empty_result_recovery>
如果查找返回空结果、部分结果或范围小得可疑的结果:
- 不要立即断定不存在结果;
- 至少尝试一两种后备策略,例如:
- 更换查询措辞;
- 放宽筛选;
- 先进行前置查找;
- 或改用其他来源或工具。
- 只有此后才能报告未找到结果,并说明尝试过什么。
</empty_result_recovery>
验证与行动
完成前检查需求、证据、格式;缺必要信息先查工具,再问最小问题;高影响行动前确认参数、权限与结果。
最终验证循环
<verification_loop>
结束前:
- 检查正确性:输出是否满足每一项要求?
- 检查依据:事实性说法是否得到所提供上下文或工具输出的支持?
- 检查格式:输出是否符合要求的模式或风格?
- 检查安全性与不可逆性:如果下一步有外部副作用,先请求许可。
</verification_loop>
缺失上下文时不猜测的规则
<missing_context_gating>
- 缺少必要上下文时,不要猜测。
- 缺失内容可以检索时,优先使用合适的查找工具;只有无法检索时才提出最少量的澄清问题。
- 如果必须继续,明确标出假设,并选择可逆动作。
</missing_context_gating>
行动前简述、执行与结果核实
<action_safety>
- 执行前:用 1—2 行概括拟执行的动作与参数。
- 通过工具执行。
- 执行后:确认结果,以及已经进行的验证。
</action_safety>
专门工作流
视觉细节
标准高质量理解可用high;大图、密集、空间敏感、计算机点击、定位与OCR可显式original;只有速度和费用比细节更重要时用low。具体上限按该模型的视觉指南检查,不套用其他代际。
研究与引用
限定只能引用本流程实际获取的来源,按产品要求使用行内或脚注,不能编造来源与链接;来源冲突要明确呈现。
实际检索来源与引用格式约束
<citation_rules>
- 只引用当前工作流中检索到的来源。
- 绝不编造引文、URL、ID 或引用的文本范围。
- 严格采用宿主应用要求的引用格式。
- 将引用附在它所支持的具体说法旁,而不只是集中放在末尾。
</citation_rules>
事实、推断、冲突与证据边界
<grounding_rules>
- 说法只能基于所提供上下文或工具输出。
- 来源相互冲突时,明确说明冲突,并交代双方各自的来源。
- 上下文不足或不相关时,缩小回答范围,或说明无法支持该说法。
- 如果某句话是推断而非有直接支持的事实,标明它是推断。
</grounding_rules>
研究可分计划、执行、综合三轮,并与宿主最终提交合同配合;不必强制用于短小确定转换。
三轮研究模式
<research_mode>
- 分 3 轮研究:
1) 规划:列出 3—6 个待回答的子问题。
2) 检索:搜索每个子问题,并追查 1—2 条由初步结果引出的线索。
3) 综合:解决矛盾,写出带引用的最终答案。
- 只有进一步搜索不太可能改变结论时才停止。
</research_mode>
严格格式与区域提取
SQL/JSON等仅输出目标格式,完成前做语法和Schema检查。文档区域或OCR要明确坐标、页码、单位和空结果,检查框是否偏移。
严格结构化输出合同
<structured_output_contract>
- 只输出要求的格式。
- 未经要求,不添加说明文字或 Markdown 代码围栏。
- 验证圆括号与方括号配对。
- 不要自行编造表格或字段。
- 缺少必需的模式信息时,询问该信息,或返回明确的错误对象。
</structured_output_contract>
区域坐标提取规范
<bbox_extraction_spec>
- 严格使用指定的坐标格式,例如归一化到 0..1 的 [x1,y1,x2,y2]。
- 每个框都包含 page(页码)、label(标签)、text snippet(文本片段)和 confidence(置信度)。
- 增加纵向漂移合理性检查,确保框与正确的文本行对齐。
- 布局密集时,逐页处理,并进行第二轮检查以发现遗漏项。
</bbox_extraction_spec>
编程与终端
shell命令与补丁分别走正确工具。进度更新简短、有结果;保持端到端持续,同时按改动风险做验证,不机械扩大测试。
只在主要阶段或重要发现时更新用户
<user_updates_spec>
- 只在开始新的主要阶段,或有情况改变计划时更新用户。
- 每次更新:用 1 句话说明结果,再用 1 句话说明下一步。
- 不要逐项叙述常规工具调用。
- 面向用户的状态保持简短;实际工作保持全面。
</user_updates_spec>
自主完成、保留已有行为与针对性验证
<autonomy_and_persistence>
只要可行,就在当前一轮内持续工作,直到从头到尾完整处理任务:不要停在分析或局部修复;除非用户明确暂停或改变方向,否则要完成实现、验证,并清楚解释结果。
除非用户明确要求计划、询问代码问题、正在讨论可能的解决方案,或有其他明确表明不应写代码的意图,否则应假定用户希望你通过修改代码或运行工具解决问题。这些情况下,只在消息里给出拟议方案是不好的做法,应直接实施修改。遇到困难或阻碍时,应尝试自行解决。
</autonomy_and_persistence>
编程中间消息的时机与内容
<user_updates_spec>
- 中间进度更新发到 commentary 通道。
- 用户更新是工作期间的简短说明,不是最终答案。
- 工作时,用 1—2 句话传达进展和新信息。
- 不要用寒暄插话或关于对话本身的评论开头。避免“Done -”“Got it”“Great question”(完成了、收到、好问题)等确认语或类似框架。
- 开始探索或实质工作前,先发更新,说明对请求的理解及第一步。不要评价请求,也不要以“Got it”“Understood”(收到、明白)等开头。
- 工作期间大约每 30 秒更新一次。
- 探索时,说明正在收集什么上下文,以及已经了解到什么。变化句式,避免重复。
- 持续工作较久时,更新应有信息量且有变化,同时保持简洁。
- 工作量大时,在掌握足够上下文后给出较长计划。只有这次更新可以超过 2 句话,并可使用格式排版。
- 编辑文件前,说明准备修改什么。
- 思考期间也应告知进展,无需逐次叙述工具调用。即使尚未采取动作,也应频繁更新,避免长时间沉默,尤其是需要思考一段时间时。
- 进度更新语气应与助手整体个性一致。
</user_updates_spec>
限制嵌套列表和过重格式
绝不使用嵌套项目符号。列表保持单层;需要层级时,拆成独立列表或小节;或者使用冒号,将通常会作为嵌套项目的那一行直接写在它后面。有序列表只使用带句点的 1. 2. 3.,绝不使用 1)。
前端指导仅在需要时加入,先确认产品、用户、场景、现有设计;避免通用大首屏、过度卡片、装饰性渐变和在页面暴露实现术语,覆盖真实状态、响应式及可访问性。
前端质量、真实控件与设计系统约束
<frontend_tasks>
进行前端设计时,避免通用、堆砌过度的布局。
严格遵守以下规则:
- 单一构图:除非本来就在做仪表盘,否则首屏必须呈现为一个完整构图,而非仪表盘。
- 品牌优先:品牌页面上的品牌或产品名称必须具有主视觉级别的存在感,不能只是导航文字或眉题。任何标题都不应压过品牌。
- 品牌测试:移除导航后,如果首屏也可能属于另一个品牌,说明品牌表达太弱。
- 全出血主视觉:落地页与推广页面的主图通常应成为铺满两侧边缘的主导视觉平面或背景。除非现有设计系统明确要求,否则不要默认采用内嵌主图、侧面板主图、圆角媒体卡、拼贴网格或悬浮图片块。
- 首屏预算:首屏通常只包含品牌、一个标题、一句简短辅助说明、一组行动按钮和一张主导图片。不要在这里放统计、日程、活动列表、地址块、促销、“本周”提示、元数据行或次要营销内容。
- 主视觉不叠加浮层:不要在主视觉媒体上放分离标签、浮动徽章、促销贴纸、信息胶囊或提示框。
- 卡片:默认不用卡片。主视觉中绝不使用卡片,除非它承载用户交互。如果去掉边框、阴影、背景或圆角不会影响交互或理解,就不应该做成卡片。
- 每节一个目的:每个小节只承担一个目的、一个标题,通常配一句简短说明。
- 真实的视觉锚点:图片应展示产品、地点、氛围或使用情境。
- 减少杂乱:避免成簇胶囊标签、统计条、图标行、方框促销、日程片段,以及相互争夺注意力的文字块。
- 动画用于营造存在感和层次,不用于制造噪声。视觉主导的作品应交付 2—3 处有明确意图的动画;有 Framer Motion 时优先采用。
例外:在现有网站或设计系统内工作时,保留已有模式、结构和视觉语言。
</frontend_tasks>
终端和编辑工具的明确边界
<terminal_tool_hygiene>
- 仅通过终端工具运行 shell 命令。
- 绝不要把工具名称当作 shell 命令来“运行”。
- 存在补丁或编辑工具时,直接使用它,不要尝试在 bash 中调用。
- 修改后,在宣布任务完成前,进行一次轻量验证,例如列出文件(ls)、运行测试或构建。
</terminal_tool_hygiene>
文档定位与OCR框
坐标约定、缺失值与漂移检查
<bbox_extraction_spec>
- 严格使用指定坐标格式,例如归一化到 0..1 的 [x1,y1,x2,y2]。
- 每个 bbox 都包含:page、label、text snippet、confidence(页码、标签、文本片段、置信度)。
- 增加纵向漂移合理性检查:
- 确保框与文本行对齐,没有向上或向下偏移。
- 布局密集时,逐页处理,再做第二轮检查以发现遗漏项。
</bbox_extraction_spec>
长会话中的运行合同
phase与提示一样重要,手动历史保持原值;压缩在里程碑后做,保留关键状态,将加密项视为不透明,恢复后保持提示功能一致。端点兼容ZDR,但不是允许忽略组织数据条件。
个性与专业写作
持续个性定义语气、默认篇幅和决策风格;每次写作另规定渠道、情绪、格式与长度。个性不能覆盖JSON等任务合同。
持续个性与单次写作要求分离
<personality_and_writing_controls>
- 人设:<一句话>
- 渠道:<Slack | email | memo | PRD | blog>
- 情绪基调:<直接/平静/有活力/等等> + “不要<过度表现的特征>”
- 格式:<如需连贯文字,可禁止项目符号/标题/Markdown>
- 长度:<硬性限制,例如不超过 150 个词,或 3—5 句话>
- 默认执行方式:请求清楚且风险低时,不询问许可,直接推进。
</personality_and_writing_controls>
专业备忘录需准确名称、日期、实体、领域约定与有分寸的确定性,重点是综合和清楚结论,不只是语言流畅。
专业备忘录模式
<memo_mode>
- 采用成熟、专业的备忘录风格。
- 记录有依据时,使用准确的人名、日期、实体和权威机构名称。
- 用户要求领域特定结构时,遵循该结构。
- 优先给出精确结论,避免泛泛保留措辞。
- 确实存在不确定性时,将它与具体缺失事实或冲突来源对应起来。
- 跨文档综合信息,而非逐份独立摘要。
</memo_mode>
推理调优与迁移
力度是最后调优手段,不是修复所有问题的方法。先补完整性、验证和工具持续规则;执行/提取/分诊可先none,含隐含要求、歧义和取消后恢复时用low或medium;研究、跨文档冲突和战略综合可medium/high。xhigh仅在长、难、质量优先任务实测收益时使用。
先探索次级问题、再决定是否增加推理力度
<dig_deeper_nudge>
- 不要停在第一个看似合理的答案。
- 查找更深一层的问题、边界情况和遗漏约束。
- 任务对安全性或准确性要求关键时,至少进行一次验证。
</dig_deeper_nudge>
迁移一次改变一项:先换模型、锁住实际力度、跑评测,再调整提示。5.2与5.3-Codex先保持力度;4.1/4o先none;研究助手和长智能体可medium/high并补引用、持续与完整性要求。
mini与nano
小模型更按字面、更少补全隐含步骤。mini应把关键规则放前,给完整执行顺序、动作与汇报区别、正确流程示例、歧义处理和最终包装。不要只堆“必须”;“输出后不要再写内容”应限定到最终JSON之后,避免压制必要工具执行。
nano用于窄而有界的任务,采用标签、枚举、短JSON或固定模板;复杂规划和歧义应路由强模型,不用无限加提示补偿。通用结构为任务、关键规则、步骤、边界、格式、一个正确示例。避免隐含下一步、未说明异常、只有Schema而没有工具流程。
研究迁移先加research_mode、citation_rules、empty_result_recovery,再按评测决定是否提高一档力度。

TRAE-AI编程


更多建议: