帖子

  • codexvn

    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
    
    没辙了 定位不到原因
    
    ![图片](https://cdn3.ldstatic.com/optimized/4X/d/a/3/da36b6b3f64e322cd2819812b92218f9b0237b5e_2_690x399.png)
    
    ---
    
    环境是 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 块都没有**。
    
    ![图片](https://cdn3.ldstatic.com/optimized/4X/4/7/5/4759cd5ed29a944c4769dcd20dc4ecdccc1f6166_2_690x95.png)
    
    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有新的机制了?
    
    ![图片](https://cdn3.ldstatic.com/optimized/4X/d/8/7/d871fc938962d3dd023e1d05c44f00863a679682_2_690x264.png)
    主楼
  • yahann_shen

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

    #1
  • codexvn

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

    #2
  • codexvn

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

    这俩都是openai Response格式的

    #3

发表回复

登录后回复