[已定位到问题,附解决方案] Claude Code 用CPA接responses api时,下一轮请求不带上一轮的 thinking,疑似变笨,BUG?

codexvn 2026-07-20 00:11 1



202607202100

问题定位到了,不是bug,是claude code本身的逻辑,修复后的效果如下

这是claude code 发给cpa的



这是cpa转回responses api的


这次问题的整体链路是


【第 N 轮 · 请求】
Claude Code
客户端 model:claude-fable-5(或 fable)

CC Switch(请求映射)
claude-fable-5 → grok-4.5

CPA

上游(grok-4.5 / Responses API)

【第 N 轮 · 响应】
上游
返回 reasoning / encrypted_content …

CPA(协议转换)
将 Responses 的 encrypted_content 等写入 Anthropic thinking.signature
组装:thinking + signature(如 vnj4o7S3…)
message.model = grok-4.5-build-free(上游真实名)

CC Switch(透传)

Claude Code
写入内存 / jsonl ✅ 此时jsonl中有 thinking、有 signature,但是model name是grok-4.5-build-free,不是claude-fable-5

【第 N+1 轮 · 组请求】
Claude Code 内部检查(wad)
本轮请求 model = claude-fable-5
历史 message.model = grok-4.5-build-free
历史 thinking.signature 非空
判定:当前 model ≠ 历史 message.model
→ 静默删除历史 thinking ❌
→ 出站 /v1/messages 不再携带思考过程

修复的办法就是通过代理将Responses中的model覆写掉,我是改了ccswitch的代码,直接通过路由模式将Respons中的model name覆写成claude code原本请求的模型名称


【第 N 轮 · 响应 · 修复后】
上游 / CPA
· message.model = grok-4.5-build-free
· thinking + signature

CC Switch(响应 model 覆写)
· message.model → claude-fable-5
· thinking / signature 原样

Claude Code jsonl
· message.model = claude-fable-5 ✅

【第 N+1 轮】
· 请求 model = claude-fable-5
· 历史 message.model = claude-fable-5
· 一致 → 保留历史 thinking ✅



202607200100

没辙了 定位不到原因




环境是 Claude Code Cli/Desktop → CPA → 实际的模型,比如gpt sol或者 gork


现象


响应里明明带 thinking 和 signature:


{
"type": "thinking",
"thinking": "The user is asking me to tell a joke...",
"signature": "tACLpqn//lNsjZ30P4OYWdnvHf1ovMrenSQ/k3uB/..."
}

但是下一轮 /v1/messages 的请求体里,messages 数组里一个 thinking 块都没有



CPA 请求/响应协议互转


CC 说的是 Anthropic /v1/messages 那套,后端 grok 说的是另一套(Codex/Responses 风格),CPA 负责两头翻译:


后端 grok 响应:  reasoning.encrypted_content
↓ CPA 响应翻译
CC 收到: thinking.signature ✅ 有(transcript 86 个全在)
↓ CC 存进会话
CC 内存: thinking + signature ✅ 有
↓ CC 组装下一轮请求 ← ❌ 这里没了
CC 发出的请求: messages[] 里 0 个 thinking ❌ 签名跟着一起没发
↓ CPA 请求翻译
CPA 收到: 没有 thinking 块可翻译 (appendReasoningContent 根本没被调用)

后端 grok: 收不到任何 reasoning 状态

glm5.2没有加密的think,所以正常,手上也没有现成的Claude Api可以测试,来问问有是新bug还是我配的不对?

难道是claude code有新的机制了?


最新回复 (3)
  • yahann shen 07-22 16:31
    1

    求大佬怎么处理这个问题,有点看不懂,在ccs里面设置么,要改源码?,还是说改一改就好了

  • codexvn 楼主 07-22 16:54
    2

    ccs要改源码 我有个pr 你可以去ccswitch的pr区搜一下 然后让grok帮你直接基于pr编译一个

  • codexvn 楼主 07-22 16:55
    3

    最简单的办法是用codex+本地压缩


    这俩都是openai Response格式的

* 帖子来源Linux.do
返回