使用claude code的代理功能后,无法显示模型的思考过程 cc-switch
Quick fix
可先切回 Anthropic 协议恢复思考显示;若用 openai_chat,需修改 streaming.rs 的块转换,避免 Qwen 交替 reasoning/content 把 Claude Code 回复拆成多个片段。
Symptom
Section titled “Symptom”我使用cc-Switch的代理功能,让claudecode使用openai协议的api来调用模型,但是在使用中无法显示模型的思考过程,使用anthropic协议却可以正常显示两个 issue 共同指向 `src-tauri/src/proxy/providers/streaming.rs` 的 `create_anthropic_sse_stream`。OpenAI 兼容厂商(如 Qwen)可能把 `reasoning_content` 和 `content` 交替发送,而 Anthropic SSE 的 content block 是顺序的;当前实现只跟踪 `current_non_tool_block_type`,每次 `reasoning` 与 `content` 切换就发送 `content_block_stop` 和新的 `content_block_start`。
由此产生两个变体:#2009 是 Qwen 等模型的思考内容没有被映射成可显示的 `thinking` block,用户看不到思考过程;#5692 是交替流被转成 24 个 `thinking` block、23 个 `text` block,Claude Code 把每个 `text` block 渲染成独立 bullet,出现碎片化回复。需要明确:#5692 提议在文本开始后忽略迟到的 `reasoning`,其本地 normalizer 验证显示 displayed thinking blocks 为 `0`,这与 #2009 希望正常显示思考过程的期望并不一致;两个 issue 均未关闭,暂无已合并修复。
临时验证:如果供应商同时提供 Anthropic 协议,先切回 Anthropic 协议,确认思考过程正常显示(#2009 已报告该协议正常)。
如必须使用 `openai_chat`,打开 `src-tauri/src/proxy/providers/streaming.rs`,定位 `create_anthropic_sse_stream` 中 `reasoning` 转 `thinking`、`content` 转 `text` 的块切换逻辑。
按 #5692 的 proposed fix 增加“可见文本已开始”的状态标记:首个文本 delta 到达前,`reasoning` 可进入 `thinking` block;文本开始后收到迟到的 `reasoning`/`reasoning_content` 不再关闭当前文本块,也不发送新的 `content_block_start`。
添加回归测试,构造 `reasoning_content` 与 `content` 交替的流,断言只有 1 个 `thinking` block、1 个 `text` block,文本 delta 拼接不丢失,文本开始后的 reasoning 不再输出。
重启 cc-switch 后运行 `claude -p --verbose --output-format stream-json --include-partial-messages “What model are you?”`,确认 Claude Code 不再显示多个碎片 bullet。
Affected Versions
Section titled “Affected Versions”Source Issues
Section titled “Source Issues”本页汇总自 2 个真实 issue
- 为什么有些模型(km2.5、gpt120b)能显示思考过程,千问等模型不显示?
- 不同厂商的 API 并不完全一致,思考流编排方式不同;cc-switch 对 `reasoning`/`reason_context` 或 `reasoning_content` 的识别和转换与 Qwen 的输出方式不匹配时,就会看不到思考过程。
- 不显示思考过程时,模型是不是没有开启思考/`high`?
- 根据 #2009 的评论,即使界面不显示,回复结果仍可能来自开启了 `high` 思考的模型;因此看不到不一定是模型没有思考。
- 按 #5692 的 proposed fix 处理之后,思考过程还会显示吗?
- 不会。#5692 的本地验证显示 displayed thinking blocks 为 `0`,说明文本开始后迟到的 `reasoning` 会被忽略;如果目标是显示全部思考过程,这个方向还不能直接解决 #2009。
- 这样改会影响工具调用、并行读取、多轮或子代理吗?
- #5692 用本地 normalizer 验证 sequential tools、parallel reads、multi-turn resume 和 subagent 仍继续工作,但该验证未合并到 cc-switch,合入前需自行回归。
这是一个非官方社区 wiki,与 cc-switch 作者及项目本身无隶属关系。内容整理自项目公开的 GitHub issues。本站不分发任何软件。