Files
ycode/docs/GPT桥接context_management修复-2026-10-21.md
T

4.5 KiB
Raw Blame History

GPT 对话桥接兼容修复(2026-10-21)

问题与定位

用户当前运行的是安装版 C:\Users\Administrator\AppData\Local\Programs\YCode\YCode.exe。 模型 gpt-6.1-sol(GPT-6.1 Sol)配置为 openai-responses。 真实会话在北京时间 2026-10-21 19:21:59 记录 API Error: 400 Unsupported Messages field: context_management。 该错误来自 YCode 本地 model-bridge/protocol.ts,请求在转发远程服务之前被拒绝。

真实本地 Claude SDK/原生 CLI 请求复现:

  • 关闭思考时不附带该字段。
  • effort: high 时附带 context_management: { edits: [{ type: 'clear_thinking_20251015', keep: 'all' }] }。
  • SDK 还在消息数组尾部附带一条 role: system 的文本环境说明,旧转换器也会拒绝。

实现

  • 仅接受不修改历史的上下文配置:缺省、null、空配置、空 edits,以及保留全部思考的指令。桥接后的上游请求不携带该字段。
  • 仍拒绝真实清理、压缩、未知或非法配置,避免静默忽略会改变历史的操作。
  • 接受消息数组里的文本系统消息,保留顺序和角色;系统消息中的其他内容类型继续拒绝。
  • Responses 的加密推理历史重放保持原逻辑,并增加携带 keep-all 配置的重放回归。

验证与边界

  • npm run test:model-bridge:146 项协议检查、16 组离线宿主回归通过。
  • node scripts/ops.mjs build --json:PASS / BUILT,含类型检查;产物位于 out/,基于 194853a 加本地修改。最终日志 .git/ycode-ops/logs/1792582138654-3a0f3ac4-1914-49d8-919a-ad6ad8e551bf.log。
  • .tmp/context-management-probe.mjs:真实原生 SDK 在隔离临时目录请求本地服务,确认字段与系统消息的实际形态。
  • node .tmp/context-management-sdk-verification.mjs:真实 SDK 开启 high 思考,经真实桥接层分别连接本地 Responses / Chat Completions SSE 模拟服务,均收到 LOCAL_SDK_OK 并成功结束。共两次本地上游请求。
  • 上述验证没有调用用户远程模型服务,也没有修改用户模型配置或会话数据。
  • 修复尚未发布、安装或加载到用户当前安装版窗口;远程 GPT 服务端的完整对话/工具调用仍需在更新后验证。

安装后续报错:流式 metadata 中断(2026-10-21)

用户安装首轮修复包后,19:59 开始收到真实 GPT 思考与工具调用, 期间多次发生 Server error mid-response,20:00:27 最终报 400 Responses reasoning history is not available in this lease; start a new conversation。 该会话的桥接历史文件存在,但 entries 为 0;这是流被提前终止后的后续错误。

使用用户配置的远程 GPT 接口发送独立诊断提示和无外部动作的 diagnostic_echo 工具定义,确认上游在 response.completed 前发送 response.metadata。该事件只有 moderation 元数据,旧桥接器的默认分支拒绝了它, 因此没有读到完整终态并保存推理历史。

修复 stream.ts,将 response.metadata 视为无正文的元数据事件, 继续读取终态;不修改未知事件、真正断流、内容不一致等异常的处理。 协议回归中的所有 Responses 流均补入与实际上游一致的 metadata 形态, 包括推理历史持久化和重新获取桥接租约场景。

验证:

  • npm run test:model-bridge:148 项协议检查、16 组宿主回归通过。
  • .tmp/responses-live-events.sse:实际远程独立诊断流,确认 metadata 的顺序与内容;未发送用户会话。
  • .tmp/responses-sdk-tool-probe.mjs:真实原生 SDK + 本地模拟 Responses,经思考摘要、正文、Read 工具、工具结果、最终回复连续两轮成功;包含 metadata,验证加密推理重放。
  • .tmp/responses-live-bridge-probe.cjs:真实桥接器连接用户配置的 GPT 接口,独立诊断工具调用和后续回复两轮均返回干净 message_stop。仅模拟返回 OK,没有执行外部工具,也没有修改用户模型或会话。
  • 原会话已经保存的中断思考没有对应完整加密历史,不能从摘要重建;安装本轮修复后应新建会话。此次未删除或改写原会话。
  • node scripts/ops.mjs package --json:PASS / PACKAGED,包含类型检查、完整构建与 Windows x64 NSIS 打包。产物 release/YCode-0.0.12-Setup-x64.exe 已更新为本轮修复包,401801432 字节,SHA-256 cee3c43810e0fcb93af7f33351d14789b0ee28444bcea1520b991acdbfb12e97。日志 .git/ycode-ops/logs/1792584536233-a08ce860-240e-41de-99a0-255bcf26dfd4.log。本地未签名包,未发布或自动安装。