1. 为什么你的 GPT-5 用起来“笨笨的”
先说结论:GPT-5 在公开测评里分数高,和你本地跑出来效果差,这两件事并不矛盾。测评用的是官方调好的参数、干净的上下文、明确的工具定义;而你多半是在一个混着历史对话、互相打架的 system prompt、默认reasoning_effort的环境里调用它。模型没变,是配置骨架没搭对。
我见过太多人把 GPT-5 当“更聪明的 GPT-4”用:一段几百字的 system prompt 里既要求“快速回答”又要求“深度思考”,既说“不要问直接做”又说“改动前必须确认”,然后抱怨它输出又慢又飘。OpenAI 官方的 GPT-5 Prompt 手册其实把话说得很直白——GPT-5 是一个需要精确指令的执行引擎,不是一个靠感觉聊天的机器人。它吃的是结构化的上下文、明确的积极性档位、以及正确的 API 形态。
这篇不聊玄学,只交付能直接复制的东西:一份settings.json/config.toml骨架、一套通过统一 Key 接入的示例、以及逐项验证动作。你照着改完,至少能定位到“测评强、自己用却笨”的那几个配置差异点。适合正在用 Responses API 或搭 Agent 工作流、但觉得 GPT-5 没发挥出来的开发者。
2. 接入前置:用统一 Key 打通 Responses API 与 Agent
在讲配置骨架之前,得先把“怎么调”这件事理顺。GPT-5 的很多能力(尤其是跨轮次的推理链路保留)依赖 Responses API,而 Agent 场景又要求你能在多个模型、多个工具之间切换。如果每个模型都单独配一套 Key 和 base_url,配置会迅速失控。
我的做法是用一个统一入口来管 Key 和路由,把模型名、base_url、鉴权都收敛到一处。这样settings.json里只关心“用哪个模型、什么参数”,不关心“Key 从哪来”。TaoToken 就是干这个的:一个 Key 覆盖对话、编码、Agent 调用,base_url 统一指向https://taotoken.net/api,省掉在多个平台之间来回切配置的麻烦。
具体操作路径很直接:先去控制台建 Key,再按文档把 base_url 和模型名填进你的客户端。下面给的是骨架,你替换成自己的 Key 即可。
注意:base_url 用
https://taotoken.net/api,不要带多余路径后缀,否则部分 SDK 会拼接出 404。
拿 Key 和查接入方式走这两个入口:
- 控制台建 Key:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite
- API Keys 管理:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite
- 接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite
如果你只是想先验证模型行为,不写代码,可以直接在模型对话页面试提示词结构:
- 模型对话:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=chat&utm_campaign=rewrite
3. 可复制配置:settings.json 与 config.toml 骨架
这一节是全文的核心。GPT-5 表现不佳,八成问题出在配置层:API 形态选错、reasoning_effort没调、积极性档位缺失、指令互相矛盾。下面这份骨架把这些都显式写出来,你按需改值。
3.1 settings.json:Responses API 调用骨架
{ "provider": { "base_url": "https://taotoken.net/api", "api_key": "sk-your-taotoken-key", "api_style": "responses" }, "model": { "name": "gpt-5", "reasoning_effort": "medium", "verbosity": "low" }, "agent": { "eagerness": "low", "max_tool_calls": 3, "tool_preambles": true, "persist_until_solved": false }, "context": { "previous_response_id": null, "keep_reasoning_chain": true } }几个关键字段解释一下。api_style设成responses是硬要求,用 Chat Completions 形态会丢掉跨工具调用的推理链路,官方数据里这一项就差出几个百分点。reasoning_effort从minimal到high,简单任务用low就够,复杂重构再上high,别一上来就拉满,延迟会很难看。eagerness控制“代理积极性”,low表示快速执行、尽早停止,high表示自主推进、不轻易交还。
3.2 config.toml:Agent 工作流骨架
[provider] base_url = "https://taotoken.net/api" api_key = "sk-your-taotoken-key" api_style = "responses" [model] name = "gpt-5" reasoning_effort = "medium" verbosity = "low" [agent.context_gathering] search_depth = "medium" max_tool_calls = 3 early_stop = true [agent.persistence] enabled = false terminate_only_when_solved = true [agent.tool_preambles] enabled = true rephrase_goal = true outline_plan = true narrate_steps = truecontext_gathering和persistence是官方手册里反复强调的两块。前者决定它搜多少上下文就动手,后者决定它遇到不确定时是停下问你还是自己扛。很多人把这两个都设成“最大”,结果简单任务被它做成登月工程,这就是“笨”的来源之一。
3.3 提示词结构骨架:把矛盾指令拆开
配置之外,system prompt 的结构同样致命。下面这个骨架把“快速模式”和“自主模式”分开,避免互相打架:
<context_gathering> Goal: Get enough context fast. Stop as soon as you can act. Method: Start broad, then fan out to focused subqueries. Early stop: You can name exact content to change. Max tool calls: 3 </context_gathering> <tool_preambles> Always rephrase the user's goal first. Then outline a structured plan. Narrate each step succinctly. </tool_preambles> <code_editing_rules> Clarity and reuse: every component modular. Consistency: adhere to existing design system. Simplicity: favor small, focused components. </code_editing_rules>注意这里没有出现“必须确认后再执行”和“自动执行不要问”同时存在的情况。矛盾指令会让 GPT-5 在推理阶段反复权衡,表现出来就是又慢又犹豫。你要么在persistence里明确“读操作直接做、写操作先确认”,要么干脆只保留一种模式。
4. 验证请求:逐项确认配置生效
配完不算完,得逐项验证。下面给一段最小可跑的 Python 示例,用 Responses API 形态发一次请求,并打印关键返回字段。
import os from openai import OpenAI client = OpenAI( base_url="https://taotoken.net/api", api_key=os.environ["TAOTOKEN_API_KEY"], ) resp = client.responses.create( model="gpt-5", reasoning={"effort": "medium"}, text={"verbosity": "low"}, input=[ {"role": "system", "content": "You are a precise coding agent."}, {"role": "user", "content": "列出当前目录下所有 .py 文件,只输出文件名。"}, ], ) print("response_id:", resp.id) print("output:", resp.output_text)跑通后,重点看三件事。第一,resp.id有没有返回,这是你下一轮传previous_response_id的依据,保留推理链路靠它。第二,输出长度是否符合verbosity=low的预期,如果还是很长,检查是不是 system prompt 里又写了“详细解释”。第三,延迟是否在可接受范围,reasoning_effort=medium下简单任务通常几秒内返回,如果超过十几秒,多半是effort设高了或者上下文塞太多。
再验证 Agent 的积极性档位。把同一个任务分别用eagerness=low和high跑一遍,观察工具调用次数。low应该在 2 到 3 次内收敛并给出答案,high会继续探索、可能调用更多工具。如果你设了low但它还在疯狂调工具,说明context_gathering的early_stop没生效,回去检查配置有没有被覆盖。
5. 本篇常见错排查
5.1 报错 404 或 base_url 拼接异常
最常见的是 base_url 写成了https://taotoken.net/api/v1或带了多余斜杠。SDK 内部会自己拼/responses,你多写一层就 404。统一用https://taotoken.net/api,别加后缀。
5.2 输出又长又啰嗦,verbosity 像没生效
先确认你用的是 Responses API 形态,Chat Completions 形态下verbosity参数可能被忽略。其次检查 system prompt,如果里面写了“请详细说明”“逐步解释”,它会覆盖verbosity=low。参数和提示词冲突时,模型倾向于听提示词。
5.3 Agent 反复问确认,不肯自己推进
这是persistence没开或者被矛盾指令抵消了。如果你希望它自主完成,把persist_until_solved设为true,同时删掉 system prompt 里“每次改动前必须询问”这类句子。两者只能留一个。
5.4 跨轮次推理丢失,每轮都像重新开始
检查有没有传previous_response_id。Responses API 的优势就是保留推理链路,你不传这个 ID,等于每轮都从零推理,性能自然掉回 Chat Completions 的水平。把上一轮的resp.id存下来,下一轮带上。
5.5 简单任务被做成大工程
reasoning_effort和eagerness都设太高了。简单查询用minimal或low,eagerness用low,并给max_tool_calls设个上限。官方手册里明确建议给工具调用设预算,不然它会一直搜。
6. 把配置固定下来,长期跑 Agent 工作流
排查完上面这些,你会发现 GPT-5 的“笨”基本都能归到配置层:API 形态、推理档位、积极性、指令一致性。把这四样固定成模板,每次新项目直接复制,比每次凭感觉调 prompt 靠谱得多。
如果你要长期跑编码或 Agent 任务,建议把配置沉淀成一份可版本管理的文件,配合 Coding Plan 做统一额度管理,避免多项目多 Key 混乱:
- Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite
Claude Code 这类 Anthropic 形态的客户端接入方式,文档里有单独说明:
- ClaudeCodeAnthropic 接入:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=claudecode&utm_campaign=rewrite
最后留一个我自己的习惯:每次调完配置,先用一个固定的小任务(比如“列出目录下 .py 文件”)跑一遍,对比输出长度、工具调用次数、延迟三个指标。这三个数稳定了,再上真实任务。配置骨架对了,GPT-5 才从“测评里的强者”变成你手里真正能干活的那个。