解决deepseek-v4-flash-0731版本在ccswitch无法显示max档位的问题

1. 问题

随着 deepseek-v4-flash-0731 版本发布,现在新版的的v4-flash支持low、high、max三档思考模式,但是在 CC Switch 的 DeepSeek-response 配置里,思考强度明明设成了 max,Codex 对话里却有两个怪现象:

DeepSeek 官方图标

  • 选择器只有”轻度 / 高”两档,找不到 max
  • 抓包一看,实际请求走的也是 high,根本没跑 max。

配置文件看起来又没问题(config.toml 里写的确实是 max),就是死活不生效。

2. 分析原因

问题不在 CC Switch,也不在模型目录,而是 Codex Desktop 自己的两层机制:

  1. 实际强度没走 max:Codex 每个对话(线程)有自己的思考强度设置,存在应用状态库里。这个线程级设置会覆盖 config.toml 里的默认值。当时线程被设成了 high,所以请求只按 high 发。
  2. 选择器看不到 max:Desktop 选择器显示的档位 = 模型支持的档位 ∩ 应用启用的档位。deepseek-v4-flash 支持 low / high / max,但应用启用档位列表默认是 low / medium / high / xhigh / ultra默认不含 max。一交集,就只剩 low / high,max 被藏起来了。

一句话:是 Desktop 的 UI 过滤把 max 挡住了,加上线程级设置覆盖了 config 默认值。

3. 如何解决

改三处,再重启一次:

  1. ~/.codex/config.toml[desktop] 段加一行,把 max 放回启用档位列表;
  2. 把同一行同步进 CC Switch 数据库里 DeepSeek-response 的配置模板,防止切换 provider 时被覆盖;
  3. 把当前对话在状态库里的 reasoning_efforthigh 改成 max

最后完全退出 Codex Desktop(Cmd+Q)再重新打开。重启后选择器就出现”最高”档,抓包确认请求体里 reasoning.effort = max,修复完成。

4. 解决细节提示词(AI 可直接执行)

把下面的内容整段交给一个能读写本地文件的 AI 执行即可。

任务

修复 Codex Desktop + CC Switch 使用 deepseek-v4-flash 时,对话选择器无法显示/使用 max 思考强度的问题。验收标准:重启后当前对话选择器能看到”最高(max)”档,且实际请求以 reasoning.effort = max 发出。

根因(已定位,按此修改即可)

  1. Desktop 选择器档位 = 模型 supported_reasoning_levels ∩ 应用设置 enabled-reasoning-efforts。该设置默认 ["low","medium","high","xhigh","ultra"],不含 max
  2. 该设置从 ~/.codex/config.toml[desktop] 段读取(不是 [features] 段)。
  3. 对话实际强度由 ~/.codex/state_5.sqlitethreads.reasoning_effort 决定,会覆盖 config.tomlmodel_reasoning_effort 默认值。

修改步骤

0. 备份(必做,出错可恢复)

1
2
3
4
5
TS=$(date +%Y%m%d_%H%M%S)
mkdir -p ~/.cc-switch/backups
cp ~/.codex/config.toml ~/.cc-switch/backups/config.toml.before-maxfix-$TS
cp ~/.cc-switch/cc-switch.db ~/.cc-switch/backups/cc-switch.db.before-maxfix-$TS
sqlite3 ~/.codex/state_5.sqlite ".backup '$HOME/.cc-switch/backups/state_5.sqlite.before-maxfix-$TS'"

1. 修改 ~/.codex/config.toml

[desktop] 段(即含 followUpQueueMode 的那段)追加一行,kebab 键必须加引号:

1
2
3
[desktop]
followUpQueueMode = "queue"
"enabled-reasoning-efforts" = ["low", "medium", "high", "xhigh", "max", "ultra"]

注意:放在 [desktop] 下,不要放 [features]

2. 修改 CC Switch 数据库(DeepSeek-response 模板)

目标:~/.cc-switch/cc-switch.dbproviders 表、app_type='codex' AND name='DeepSeek-response' 行的 settings_config JSON 里,$.config 这个字符串中的 [desktop] 段加上同一行。

务必用 Python 的 json 模块读写(JSON 字符串内引号需转义,用 shell 直接拼裸引号会写坏 JSON):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import sqlite3, json

db = sqlite3.connect('/Users/<用户名>/.cc-switch/cc-switch.db')
row = db.execute("SELECT settings_config FROM providers WHERE app_type='codex' AND name='DeepSeek-response'").fetchone()[0]
cfg = json.loads(row)
conf = cfg['config']
old = '[desktop]\nfollowUpQueueMode = "queue"'
new = old + '\n"enabled-reasoning-efforts" = ["low", "medium", "high", "xhigh", "max", "ultra"]'
assert old in conf
cfg['config'] = conf.replace(old, new, 1)
db.execute("UPDATE providers SET settings_config=? WHERE app_type='codex' AND name='DeepSeek-response'", (json.dumps(cfg, ensure_ascii=False),))
db.commit()
# 校验:必须输出 json_valid=1
print(db.execute("SELECT json_valid(settings_config) FROM providers WHERE app_type='codex' AND name='DeepSeek-response'").fetchone())

3. 修改当前线程的思考强度

先查线程 ID(正在对话的线程):

1
sqlite3 ~/.codex/state_5.sqlite "SELECT id, model, reasoning_effort FROM threads ORDER BY updated_at DESC LIMIT 10;"

然后把对应线程改为 max:

1
sqlite3 ~/.codex/state_5.sqlite "UPDATE threads SET reasoning_effort='max' WHERE id='<线程ID>';"

4. 重启应用

提示用户完全退出 Codex Desktop(Cmd+Q,不是关窗口,关窗口会最小化到托盘),再重新打开。

验证

重启并让用户发一句话后检查:

1
2
3
4
5
6
7
8
9
10
# 1) 线程状态
sqlite3 ~/.codex/state_5.sqlite "SELECT id, model, reasoning_effort FROM threads WHERE id='<线程ID>';"
# 期望 reasoning_effort = max

# 2) 实际请求体(Codex 自身 HTTP 客户端日志,等价于抓包)
sqlite3 ~/.codex/logs_2.sqlite "SELECT feedback_log_body FROM logs WHERE thread_id='<线程ID>' AND feedback_log_body LIKE '%POST to https://api.deepseek.com/responses%' ORDER BY ts DESC LIMIT 1;"
# 期望包含 "reasoning":{"effort":"max","summary":"detailed"}

# 3) 会话记录
# ~/.codex/sessions/<日期>/rollout-<线程ID>.jsonl 的 turn_context 应显示 effort:"max"

注意事项

  • 不要修改任何 API key、token、认证字段。
  • 修改 cc-switch.db 后必须确认 json_valid(settings_config) = 1
  • 修改前先备份,出错从备份恢复。
  • 不要擅自向用户线程发送测试消息来触发验证轮次,除非用户明确要求。