网页端 Network 接口深入分析:从 Response Payload 判定模型静默切换
对话到一半突然被换成 mini?本文深入拆解 ChatGPT 网页端的 `/backend-api/conversation` 接口,解读 Server-Sent Events(SSE)串流中 message、metadata、recipient 等核心字段,捕捉后台动态降级痕迹。
一、ChatGPT 网页端通信架构概览
在 ChatGPT 网页端(`chatgpt.com`),用户发送消息并非传统的单一“请求-等待-返回”模式,而是采用了基于 HTTP 的 Server-Sent Events(SSE,服务端推送事件流):
1. 发起端:浏览器向 `/backend-api/conversation` 发起 `POST` 请求,携带当前会话 ID、历史消息指针、用户输入及客户端权证。
2. 传输层:响应头为 `Content-Type: text/event-stream`,服务端以 `data: {...}` 的多块数据包持续推流,浏览器逐字渲染。
3. 元数据区:在输出的首个数据块和最终结束块中,后端会封装本次生成的全量元数据(包括指派的模型、Token 消耗、安全审查标记等)。
二、核心字段详解:在哪里抓取降级信号?
打开浏览器开发者工具(F12),切换至 Network,点开 `conversation` 请求并查看 EventStream 或 Response 标签,重点关注以下 4 个关键字段:
【步骤 1】`message.metadata.model_slug`
- 正常旗舰:`"model_slug": "gpt-4o"`
- 静默降级:`"model_slug": "gpt-4o-mini"`
- 判定规则:这是物理算力分配标识。只要此处不是 `gpt-4o`(或选中的目标模型),无论界面按钮显示为何,均已触发了降级。
【步骤 2】`message.metadata.default_model_slug`
- 该字段代表该会话创建时的预设模型。
- 若出现 `default_model_slug: "gpt-4o"` 而 `model_slug: "gpt-4o-mini"`,则明确证实了“会话在进行过程中被后台强制降级”。
【步骤 3】`message.recipient`
- 该字段表示模型是否调用了外部工具(Tools):
- `"all"`:常规模型直接回答。
- `"web.search"`:触发了联网搜索。如果本来是 4o 推理,但联网后回答变得粗糙,可观察联网模块返回的文本是否稀释了主干逻辑。
- `"dalle.text2im"`:触发生图。
【步骤 4】`finish_details.type`
- 位于数据流最后一个包:
- `"stop"`:模型正常思考结束。
- `"max_tokens"`:因达到单次响应长度上限被强行截断(常被误认为降智)。
- `"interrupted"`:因网络心跳超时或风控拦截被中断。
三、后台触发静默切换的三大典型场景
抓包日志分析显示,以下三种情况最容易在 Response 中看到模型被动切换:
1. 动态额度滚动耗尽:
- Plus 用户在 3 小时内发送高频请求。OpenAI 网关在判定次数超标后,不会弹出报错阻断对话,而是直接将接下来的消息由 `model_slug: gpt-4o-mini` 处理。
2. 多轮长文档并发超载:
- 当单个会话历史累计超过 3 万 Token 时,若当前服务器节点压力过大,调度器会将请求分流至低延迟的紧凑型推理集群。
3. 出口 IP 欺诈分突增:
- 浏览器在发送请求前的 `requirements` 验证中,若检测到 IP 出口突变或被拉入灰名单,会话授权级别会即时降权。