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

59 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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`。本地未签名包,未发布或自动安装。