让 Claude Code + DeepSeek API 的 Auto Mode 安全分类请求不再超时的本地代理工具。
Claude Code 的 Auto Mode 在执行 Bash 命令前,会向 API 发送一个「安全分类请求」,由模型判断该命令是否安全。这个分类请求有大约 30 秒的内部超时。
DeepSeek V4 Pro 默认开启了「思考模式」(thinking),导致安全分类请求的响应时间达到 28~32 秒,非常接近超时阈值,经常触发超时而被 Claude Code 拒绝执行。
本代理运行在本地 127.0.0.1:8787,对请求进行分类拦截:
| 请求类型 | 处理方式 |
|---|---|
| 安全分类请求 | 注入 thinking: { type: "disabled" },关闭思考模式,响应降至 2~3 秒 |
| 普通对话/工具调用/流式请求 | 原样转发,保留思考能力 |
Claude Code
↓ http://127.0.0.1:8787
本地代理 ──→ 识别分类请求 → 注入 thinking: disabled
↓ https://api.deepseek.com/anthropic
DeepSeek API
- Node.js ≥ 18(Claude Code 的 npm 安装已要求 Node.js,通常无需额外安装)
- DeepSeek API Key
- Claude Code 已安装并配置
将 deepseek-auto-proxy.mjs 放到任意目录,例如:
git clone git@github.com:dashxio/deepseek-claude-proxy.git
# 或直接下载 deepseek-auto-proxy.mjs 到本地任意位置在 PowerShell 中运行:
node deepseek-auto-proxy.mjs输出:
DeepSeek Auto Mode proxy: http://127.0.0.1:8787
Upstream: https://api.deepseek.com/anthropic
保持此窗口运行,不要关闭。
可选检查:语法
node --check deepseek-auto-proxy.mjs(无输出即正确);健康Invoke-RestMethod http://127.0.0.1:8787/health(应返回ok True)。
只需将 ANTHROPIC_BASE_URL 从 DeepSeek 直连地址改为本地代理地址,其他配置保持不变。两种方式任选其一:
编辑 %USERPROFILE%\.claude\settings.json,将 env 下的 ANTHROPIC_BASE_URL 改为:
"ANTHROPIC_BASE_URL": "http://127.0.0.1:8787"在 PowerShell 中执行(关闭窗口后失效):
$env:ANTHROPIC_BASE_URL="http://127.0.0.1:8787"如需持久化,写入用户变量(关闭并重新打开 PowerShell 后生效):
[Environment]::SetEnvironmentVariable(
"ANTHROPIC_BASE_URL",
"http://127.0.0.1:8787",
"User"
)注意: 不要加
/anthropic后缀,代理会自动添加。
cd 你的项目目录
claude将 ANTHROPIC_BASE_URL 改回 https://api.deepseek.com/anthropic 即可(settings.json 或环境变量,取决于你之前的配置方式)。
注意: 使用代理期间,每次启动 Claude Code 前需先在另一个窗口启动代理。
代理窗口在请求经过时会打印日志:
# 普通请求 — 原样转发
POST /v1/messages [pass] -> 200
# 安全分类请求 — 已注入 thinking: disabled
POST /v1/messages [classifier patched] -> 200
看到 [classifier patched] 即表示代理已识别分类请求并关闭了思考模式。
默认端口为 8787,可通过环境变量修改:
$env:DS_PROXY_PORT=9999
node .\deepseek-auto-proxy.mjs当需要排查请求格式问题时,可以启用 dump 功能将请求/响应内容写入文件。
$env:DS_DUMP="true"
node .\deepseek-auto-proxy.mjs每个请求会生成一个 req-<时间戳>.json 文件到 ./dumps/ 目录,包含:
- 请求方法、URL、上游路径
- 请求头(
x-api-key/authorization已脱敏) - 请求体(客户端发来的原始内容,JSON 自动解析;被分类器 patch 时额外记录
patchedBody) - 是否被分类器 patch
$env:DS_DUMP="true"
$env:DS_DUMP_RESPONSE="true"
node .\deepseek-auto-proxy.mjs开启后,响应体会被捕获并写入同一 JSON 文件(文件名前缀变为 res-)。
$env:DS_DUMP_DIR="./my-dumps"长时间开启 dump 会积累大量文件,可用两个环境变量控制保留策略(默认最多保留 9 个文件,超出后自动删除最旧的):
# 最多保留 100 个文件,超出后自动删除最旧的(0 = 不限制)
$env:DS_DUMP_MAX_FILES="100"
# 只保留 24 小时内的文件,更早的自动删除(0 = 不限制)
$env:DS_DUMP_MAX_AGE_HOURS="24"清理在每次写入 dump 文件后自动执行,可组合使用(两个条件都满足时同时生效)。清理只针对代理生成的 req-* / res-* dump 文件,不会删除目录中的其他文件。
{
"timestamp": "2026-08-05T12:34:56.789Z",
"method": "POST",
"url": "/v1/messages",
"upstreamPath": "/anthropic/v1/messages",
"patched": true,
"request": {
"headers": {
"x-api-key": "***redacted***",
"content-type": "application/json"
},
"body": {
"model": "deepseek-v4-pro",
"system": [...],
"messages": [...]
},
"patchedBody": {
"model": "deepseek-v4-pro",
"thinking": { "type": "disabled" },
"system": [...],
"messages": [...]
}
},
"response": {
"status": 200,
"headers": { "content-type": "application/json" },
"body": { ... }
}
}说明:
request.body是客户端发来的原始请求体(patch 前);仅当patched为true时才会出现request.patchedBody(注入thinking: disabled后的实际转发内容)。
注意: dump 文件可能包含对话内容,请妥善保管,调试完毕后及时删除。
安全性: 请求/响应头中的
x-api-key/authorization以及正文中的sk-...令牌(疑似 API Key)都会被替换为***redacted***。
| 现象 | 原因 | 解决 |
|---|---|---|
| 代理窗口无任何请求日志 | Claude Code 未使用代理地址 | 检查 $env:ANTHROPIC_BASE_URL 是否为 http://127.0.0.1:8787 |
[classifier patched] -> 401 |
API Key 未传入 | 检查 $env:ANTHROPIC_AUTH_TOKEN 是否已设置 |
[classifier patched] -> 502 |
代理无法连接 DeepSeek | 检查网络连接,确认能访问 api.deepseek.com |
| 启动报端口占用 | 端口被其他程序使用 | 换一个端口:$env:DS_PROXY_PORT=9999 |
代理通过 system 消息内容识别安全分类请求(在代理脚本中的 isSecurityClassifier 函数中定义):
system数组中包含以x-anthropic-billing-header:开头的文本块system数组中包含以You are a security monitor开头的文本块
两个条件同时满足即判定为安全分类请求。
注意: 分类请求格式可能随 Claude Code 版本变化。已在 Claude Code 2.1.210 与 2.1.221 上验证签名一致。如果升级 Claude Code 后分类请求不再被识别,可能需要更新检测逻辑。
对识别到的分类请求,代理向请求体注入:
{
"thinking": {
"type": "disabled"
}
}同时删除旧版参数 reasoning_effort 和 output_config 以保证兼容性。
- 代理仅监听
127.0.0.1,局域网内其他机器无法连接 - 不打印请求正文和 API Key
- 仅修改安全分类请求,其他请求完整透传
如果不想使用代理,也可以:
- 使用 acceptEdits 模式:
claude --permission-mode acceptEdits,Bash 命令由用户手动确认,不依赖云端分类器 - 在分类请求中切换模型:修改代理脚本,将分类请求的 model 改为
deepseek-v4-flash[1m],进一步缩短响应时间
MIT