DeepSeek无处不在:Claude Code与本地代理堆栈
- 发布日期
- 2026年7月11日
- 更新日期
- 2026年9月16日
- 作者
- Jacob Lloyd —— 项目完成后,在 AI 协助下撰写
- 阅读时长
- 约 13 分钟阅读
简单来说: 本指南旨在指导您如何将 DeepSeek——这一极为廉价的云端AI服务——整合到现有的AI工具中,从而省去使用价格高昂的替代服务的费用。文中提供了三种可直接套用的配置方案,其中一种是能安全隐藏您的私密访问密钥的配置方式。如此一来,您便能以每条消息仅需几分之一美分的成本获得高效的AI辅助服务。
DeepSeek 在2026年7月时在我的家中承担了三项任务:充当整个智能体系统的核心大脑、作为 Claude Code 命令行工具的底层服务,还担当系统故障时的备用方案。整个配置过程仅需设置一些JSON参数与环境变量;唯一的小麻烦是一个 systemd 相关的转义错误,害我耗费了一整晚才解决。
更新于2026年9月16日:如今我的智能体系统已精简为六个智能体;自2026年8月下旬起,主智能体开始运行在 MiniMax M3 上,而 DeepSeek则作为备用方案。下文所列的八个智能体配置正是撰写本文时的实际设置情况。相关配置并未更改,目前依然如此使用DeepSeek。
简而言之:
- 这是什么: DeepSeek提供的付费云API服务,既可作为家庭多智能体系统的核心大脑,又能无缝对接 Claude Code 命令行工具——这可不是那种“自行在本地GPU上运行模型”的教程哦。
- 费用如何: 在低价套餐下,每条消息的处理成本仅为几分之一美分而已。无需订阅,只需获取一个API密钥即可。
- 所需条件: 一个DeepSeek API密钥;任何支持 OpenAI风格聊天补全功能的工具;若想实现 Claude Code 的相关功能,还需安装 systemd。
- 最终收获: 三个可直接复制使用的配置文件、一份关于云端与本地方案选择的对照表,以及一个能确保API密钥不会泄露到
ps、systemctl show命令输出及日志中的安全处理技巧。
最终实现的效果
在介绍具体操作步骤之前,先看看我在七月份搭建好的系统结构。我运行了 OpenClaw,一个代理网关,该网关通过聊天界面管理着八个不同的代理;这些代理又会调用 Claude Code CLI 来执行实际的编码任务。整个系统则由 DeepSeek 提供支持。
| 模式 | 功能说明 | 成本 |
|---|---|---|
| 1. 代理核心 | 在网关配置中将 DeepSeek 设为服务提供方;任意代理均可将其选作主服务或备用服务 | 每百万令牌 0.14–0.87 美元 |
| 2. Claude Code 后端 | 通过 systemd 配置即可让 CLI 指向 DeepSeek 提供的与 Anthropic 兼容的端点,无需重新安装任何软件 | 费用标准与上述相同 |
| 3. 备用服务机制 | 决定某项任务应由 DeepSeek 处理还是由本地模型处理的一套规则 | 若任务由本地模型处理则无需付费 |
让这一切成为可能的关键一点是:DeepSeek 提供了 与 Anthropic 兼容的端点,地址为 https://api.deepseek.com/anthropic。任何原本用于与 Claude 通信的程序——包括 Claude Code CLI——只需通过设置环境变量即可指向该端点,无需编写任何包装脚本或进行代码修改。
模式1:将DeepSeek用作代理的“大脑”
网关配置中仅有一个提供商模块。这是实际配置示例,密钥已做脱敏处理:
"deepseek": {
"baseUrl": "https://api.deepseek.com/v1",
"api": "openai-completions",
"apiKey": "CHANGE_ME",
"timeoutSeconds": 450,
"models": [
{
"id": "deepseek-v4-pro",
"name": "deepseek-v4-pro",
"reasoning": true,
"input": ["text"],
"cost": { "input": 0.435, "output": 0.87,
"cacheRead": 0.003625, "cacheWrite": 0.435 },
"contextWindow": 1000000,
"maxTokens": 384000
},
{
"id": "deepseek-v4-flash",
"name": "deepseek-v4-flash",
"reasoning": true,
"input": ["text"],
"cost": { "input": 0.14, "output": 0.28,
"cacheRead": 0.0028, "cacheWrite": 0.14 },
"contextWindow": 1000000,
"maxTokens": 384000
}
]
}
每个代理都会选定一个主用模型以及备用模型链:
"model": {
"primary": "deepseek/deepseek-v4-flash",
"fallbacks": ["deepseek/deepseek-v4-pro", "vllm/google/gemma-4-31b"]
}
当消息通过该路由传入时,具体流程如下:
这是截至2026年8月,按功能划分的各代理配置情况。大多数代理均以DeepSeek作为主用模型,仅在出现问题时才切换至本地模型;唯独那个本地模型为主的代理采用了相反策略:
| 代理名称 | 主用模型 | 备用模型链 |
|---|---|---|
| 主要聊天代理 | DeepSeek flash | DeepSeek pro → 本地版gemma-4-31b |
| 推理专用代理 | DeepSeek pro | 本地版gemma-4-31b |
| 快速处理型代理 | DeepSeek flash | DeepSeek pro → 本地模型 |
| 部署管理代理 | DeepSeek pro | DeepSeek flash → 本地模型 |
| 内容安全型代理 | DeepSeek flash | DeepSeek pro → 本地模型 |
| 本地主力代理 | 本地版120B模型 | DeepSeek flash (特殊设置:以本地模型为优先) |
| 另一内容安全型代理 | 本地模型 | DeepSeek flash → DeepSeek pro |
| 视觉处理代理 | 本地版gemma-31b模型 | DeepSeek pro → DeepSeek flash |
这里需要特别提到视觉处理代理:由于那些DeepSeek模型仅支持文本输入("input": ["text"]),因此无论备用模型链如何设置,所有图像相关任务始终由本地模型来处理。另外,通过别名设置(ds-flash、ds-brain),我可以在对话过程中随时切换模型,而无需修改配置。
有两个设置若未正确配置,很容易引发问题:
"reasoning": true对推理类模型而言是必选项。这类模型会先输出reasoning_content内容,随后才给出最终答案;若未开启该选项,网关便会误以为模型处于停滞状态,进而在约390秒后强制终止本次对话。具体原因就不多说了吧。- 务必调高
timeoutSeconds的值。默认的请求超时时间为120秒;对于需要长时间推理的任务来说显然不够用,常会导致随机“失败”现象。在我这里将值设为450后问题才得以解决。幸运的是提供商设置支持热更新,无需重启网关即可生效。
模式二:在 DeepSeek 上使用 Claude Code CLI
Claude Code CLI 会从环境变量中读取 ANTHROPIC_BASE_URL、ANTHROPIC_MODEL 以及 ANTHROPIC_AUTH_TOKEN/ANTHROPIC_API_KEY。而 DeepSeek 提供的 /anthropic 端点所使用的通信格式也与 Claude 完全相同。因此,只需修改网关传递给各个 Claude Code 子进程的环境变量即可实现路由重定向——CLI 本身仍保持原始安装状态。
该配置文件属于 systemd 的用户级“覆盖配置”。今年七月,我是通过自己编写的一个 小型 GTK 应用来生成该文件的;该应用可在四种模式间切换(本地 LM Studio、DeepSeek、Anthropic Cloud 以及关闭模式)。不过这个配置文件其实很短,完全可以手动编写:
# ~/.config/systemd/user/openclaw-gateway.service.d/60-subagent-routing.conf
[Service]
# Routes Claude Code CLI sub-processes to DeepSeek's Anthropic-compatible
# endpoint. The key is NOT copied here: $$DEEPSEEK_API_KEY is systemd's escape
# for a literal $DEEPSEEK_API_KEY, which bash expands at runtime from the
# gateway EnvironmentFile -- the secret never enters the unit or the argv.
Environment="ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic"
Environment="ANTHROPIC_MODEL=deepseek-v4-pro"
ExecStart=
ExecStart=/usr/bin/bash -c 'export ANTHROPIC_AUTH_TOKEN="$$DEEPSEEK_API_KEY"; export ANTHROPIC_API_KEY="$$DEEPSEEK_API_KEY"; exec node /path/to/openclaw/dist/index.js gateway --port 18789'
关键的 API 密钥仅存储在一个地方:即该服务对应的 EnvironmentFile 文件中(这是一个由网关管理的环境变量文件,权限设为 chmod 600),该文件内容仅为 DEEPSEEK_API_KEY=CHANGE_ME。
关于 $$ 符号的注意事项(本文存在的根本原因)
我最初的尝试仅使用了单个 $ 符号。结果并不理想。在 unit 文件中,$VAR 会在进程启动时由 systemd 自行展开,这会导致密钥直接嵌入到命令行中——于是该密钥便出现在 ps 输出、/proc/<pid>/cmdline 以及 systemctl show 的结果里。这显然绝非存放机密信息的好方式。
$$VAR 则是 systemd 提供的转义机制:它能确保 $VAR 以原样形式传递至 bash,随后由 bash 根据 EnvironmentFile 中设定的环境变量来展开该值。最终效果就是:密钥仅存在于那个权限为 chmod 600 的文件中,不会出现在 unit 文件、systemctl show 输出或任何命令行参数里。这其实就是一种借助 systemd 与 bash 实现的简易版机密信息管理机制,且确实有效。
实际配置过程中还遇到以下注意事项:
- 两个认证变量均需设置。 不同版本的 CLI 分别读取
ANTHROPIC_AUTH_TOKEN或ANTHROPIC_API_KEY;只设置其中一个具有随机性,结果难以预料。 - 务必指定
ANTHROPIC_MODEL,否则 CLI 所使用的默认模型别名(如 sonnet/opus)会被发送至 DeepSeek 端点,从而导致 404 错误。 - 该覆盖配置会覆盖任何真实的 Anthropic 密钥。 整个 CLI 环境均由此配置文件控制——我正是因此发现原本用于“路由至真实 Claude”的别名设置悄然失效了。
- 务必在配置中先写入空行作为
ExecStart=,否则 systemd 会在原有命令后追加新指令而非替换它。 - 软件包更新可能导致该覆盖配置失效。 因配置文件里硬编码了启动命令,若后续更新改变了原版
ExecStart的值,则需重新生成该配置。我的生成工具会先读取 unit 文件中FragmentPath指定的原始命令,并拒绝为那些已包含$$DEEPSEEK_API_KEY的配置再次进行封装。 - 最后需重新加载配置:
systemctl --user daemon-reload && systemctl --user restart <service>。
为验证整个流程确实可行,可跳过 CLI 直接通过 curl 发送请求:
curl https://api.deepseek.com/anthropic/v1/messages \
-H "x-api-key: $DEEPSEEK_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"deepseek-v4-pro","max_tokens":16,"messages":[{"role":"user","content":"ping"}]}'
若返回的响应中包含 "type":"message",即表明整个与 Anthropic 兼容的流程均已正常运作。
模式3:何时该使用 DeepSeek,何时该用本地模型?
即便同时拥有云端与本地资源,也并非所有任务都要交给云端处理。以每百万个 Token 的计算成本为例,以下是 Claude 的官方定价(按规模计费):Opus 为 $5/$25,Sonnet 为 $3/$15,Haiku 为 $1/$5。
| 选项 | 输入费用 | 输出费用 | 备注 |
|---|---|---|---|
| DeepSeek flash | $0.14 | $0.28 | 缓存读取费用为 $0.0028;聊天类任务每天的成本仅需几分钱而已 |
| DeepSeek pro | $0.435 | $0.87 | 具备“深度思考”能力,成本仍比 Sonnet 低 7–17 倍 |
| 本地模型(同一台设备) | $0 | $0 | 仅需支付电费即可 |
最令人惊喜的是响应速度。使用本地的百亿参数级模型时,我不得不将响应超时时间设为 20–30 分钟;而且当两个智能体共享同一块 GPU 时还会互相干扰。而 DeepSeek 能在几秒内给出答案;450秒的响应上限也仅在极端复杂的推理场景下才会被触及。另一个差异在于上下文长度:DeepSeek 支持高达100万 Token的上下文窗口,而本地模型仅能处理约12.8万 Token。因此,对于需要长时间交互或涉及大型代码库的编程任务,自然应选用 DeepSeek。至于视觉功能方面则相反:我的 DeepSeek 版本仅支持文本处理,因此“请看看这张图片”这类需求仍需依靠本地的视觉模型来处理。
我实际采用的隐私保护原则很简单:切勿将任何不适合通过邮件发送的内容上传到云端。
这种双重后备机制正是我最欣赏的设计:以云端为主的智能体在网络或 API 中断时会自动切换至本地模型;而以本地模型为主的工作系统则在本地服务器繁忙或故障时会转而调用 DeepSeek flash。如此一来,整个系统始终能保持运转,不会出现完全瘫痪的情况。
需要注意的要点,简要列表
reasoning: true 标志、120秒的超时设置、$$ 转义符,以及用于替换真实 Anthropic API 密钥的替代密钥——这些内容都在模式1和模式2中有详细说明。还有两点需要留意:
- 插件白名单不能为空。在 OpenClaw 中,如果某个已启用的提供商未在
plugins.allow中列出,那么该提供商就永远不会被加载。不会出现任何错误提示或警告信息,只是毫无反应而已。 - 此处的 DeepSeek 仅支持文本处理。在将视觉相关任务分配给 DeepSeek 之前,请先确认模型配置中的
"input"设置。
希望完全在本地运行、无需 API 密钥且不产生云服务费用?我也写了相关教程:DeepSeek:在本地运行的四步指南。借助 Ollama、Docker 以及 Open WebUI,您便能在自己的 GPU 上运行 DeepSeek。这是适合初学者的方案;而当复杂任务超出 GPU 处理能力时,这个方案也能确保数据始终留在本地。
相关链接:此配置所依托的本地 AI 代理堆栈、用于生成 Claude Code 替代密钥的 OpenClaw 模型管理器、在本地运行 DeepSeek 的方法,以及如何设置 LLM 助手。