DeepSeek无处不在:把一颗廉价的云端大脑接进Claude Code和本地Agent技术栈

发布日期
2026年7月11日
作者
Jacob Lloyd —— 项目完成后,在 AI 协助下撰写
阅读时长
约 12 分钟阅读

简单来说: 一份教程,教你把DeepSeek——一个非常便宜的云端AI服务——接入你现有的AI工具,而不用为更贵的方案掏钱。文中展示了三套可以直接照抄的配置,其中一套还能把你的密钥安全地藏起来。你能用每条消息几分之一美分的价格,获得强大的AI能力。

DeepSeek现在在我家里撑起了三件不同的事:我agent技术栈的大脑、Claude Code CLI,以及回退阶梯上的云端那一级。接线的全部工作量,不过是一些JSON、几个环境变量,再加一个吃掉我一整晚的systemd转义bug。

tl;dr

  • 这是什么: 把DeepSeek的付费云端API,用作一套多agent家庭技术栈背后的大脑,同时也用作Claude Code CLI的替换后端——不是又一篇"自己用GPU跑起来"的教程。
  • 花费: 便宜档位下,每条消息几分之一美分。不需要订阅,只要一个API密钥。
  • 你需要: 一个DeepSeek API密钥,任何能说OpenAI风格chat completions的东西,如果想用Claude Code的小技巧,还需要systemd。
  • 最终得到: 三套可以直接照抄的配置、一份云端与本地的取舍清单,以及一个能让密钥不出现在pssystemctl show和日志里的密钥处理技巧。

最终成果

先讲讲整体样貌,再说怎么做。我跑着agent网关OpenClaw,聊天界面背后有八个具名agent,再加上这些agent为了真正干编码活儿而唤起的Claude Code CLI。这两者都由DeepSeek支撑。

方案作用成本
1. Agent大脑把DeepSeek登记为网关配置里的一个provider;任何agent都能把它选成主模型或回退模型$0.14–$0.87 / 百万token
2. Claude Code后端一个systemd drop-in把CLI重新指向DeepSeek的Anthropic兼容端点,不需要重装同样的按token计价
3. 回退阶梯一份判断清单,决定什么活儿交给DeepSeek、什么交给本地模型留在本地就是$0

让这一切成为可能的关键一句话是:DeepSeek在https://api.deepseek.com/anthropic提供了一个Anthropic兼容端点。任何原本为了跟Claude对话而搭建的东西——包括Claude Code CLI——只靠环境变量就能指向它,不需要包装脚本,也不需要fork。

方案一:把DeepSeek用作agent大脑

网关配置里加一个provider块就行。这是真实配置,密钥已打码:

"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
    }
  ]
}

之后每个agent只要挑一个主模型和一条回退链:

"model": {
  "primary": "deepseek/deepseek-v4-flash",
  "fallbacks": ["deepseek/deepseek-v4-pro", "vllm/google/gemma-4-31b"]
}

在这套路由下,一条消息进来后是这样流转的:

我实际的阵容如下。大多数agent以DeepSeek打头阵,回退到本地;Doxy则是故意反过来:

Agent主模型回退
Bits(主聊天)DeepSeek flashDeepSeek pro → 本地gemma-4-31b
BrainsDeepSeek pro本地gemma-4-31b
FlashDeepSeek flashDeepSeek pro → 本地
Hermes(部署agent)DeepSeek proDeepSeek flash → 本地
Alpha(家庭安全版)DeepSeek flashDeepSeek pro → 本地
Doxy(本地主力)本地120BDeepSeek flash (反过来——本地打头阵)
beta本地DeepSeek flash → DeepSeek pro
Charley(视觉)本地gemma-31bDeepSeek pro → DeepSeek flash

这里Charley值得一提:这些DeepSeek条目都是纯文本的("input": ["text"]),所以不管回退链怎么写,图像相关的活儿始终留在本地。别名(ds-flashds-brain)让我可以在对话中途直接切换模型,而不用去改配置。

有两项设置一旦漏掉,就一定会咬你一口:

  • 推理模型必须设"reasoning": true 推理模型会在给出正式答案之前先流式输出reasoning_content;这个开关关掉的话,网关听到的就是一片沉默,于是判定模型卡住了,大约在390秒时把这一轮直接杀掉。我是怎么知道的,就别问了。
  • timeoutSeconds调高。 默认的请求超时是120秒;稍微长一点的推理过程就会轻松超时,然后随机地"失败"。我这边调到450就解决了,而且provider设置是热重载的——不需要重启网关。

方案二:让Claude Code CLI跑在DeepSeek上

Claude Code CLI会从环境变量里读取ANTHROPIC_BASE_URLANTHROPIC_MODEL,以及ANTHROPIC_AUTH_TOKEN/ANTHROPIC_API_KEY,而DeepSeek的/anthropic端点说的正是Claude那一套线路格式。所以重新路由CLI,只需要改一下网关派发给每个Claude Code子进程的环境变量——CLI本身还是原封不动的标准安装。

这个文件是一个systemd用户级drop-in。我这边是由一个我自己写的小GTK应用生成的,它能在四种模式(本地LM Studio / DeepSeek / Anthropic云端 / 关闭)之间切换,不过它本身短到完全可以手写:

# ~/.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'

密钥本身只存在于一个地方:该服务的EnvironmentFile(~/.openclaw/gateway.systemd.env,权限设为chmod 600),里面只有一行DEEPSEEK_API_KEY=CHANGE_ME

$$ 这个坑(这篇文章存在的全部理由)

我第一次是用单个$写的,结果很惨。在unit文件里,$VAR会在进程启动时被systemd自己展开,这就把密钥直接烤进了命令行——在ps里、在/proc/<pid>/cmdline里、在systemctl show里全都能看见。这可不是你想让密钥待着的地方。

$$VAR是systemd里用来表示字面意义上的$VAR的转义写法:systemd原样把这个字符串传下去,由bash在运行时展开,展开时引用的是EnvironmentFile早就填好的那个环境。最终效果是:密钥只存在于一个chmod 600的文件里,别的地方都不会出现——不会出现在unit文件里,不会出现在systemctl show里,也不会出现在任何argv里。一个靠systemd和bash拼凑出来的穷人版密钥管理器,但它确实管用。

实际跑起来之后,还踩到的坑:

  • 两个认证变量都要设。 不同版本的CLI,有的读ANTHROPIC_AUTH_TOKEN,有的读ANTHROPIC_API_KEY,只设一个基本是硬币赌运气。
  • ANTHROPIC_MODEL钉死,不然CLI惯用的sonnet/opus别名会被原样发到DeepSeek的端点,然后404。
  • 这个drop-in会遮住任何真正的Anthropic密钥。 一个环境变量掌控着整个CLI——我是在它悄悄弄坏了我"连回真Claude"的别名之后才发现的。
  • 先写空的ExecStart=——覆盖行前面那一行空的ExecStart=——否则systemd会把你的命令追加上去,而不是替换掉原来的。
  • 软件包更新可能会让这个包装失效。 它把启动命令写死了,所以一旦更新改动了真正的ExecStart,就得重新生成这个drop-in。我的生成器会从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兼容路径真的通了。

方案三:到底什么时候该用DeepSeek,什么时候用本地

两者都有,并不代表所有活儿都该扔给云端。按每百万token计价,顺带列出Claude的官方定价作参照(Opus $5/$25,Sonnet $3/$15,Haiku $1/$5):

选项输入输出备注
DeepSeek flash$0.14$0.28缓存读取$0.0028——聊天agent那点用量,一天也就几分钱
DeepSeek pro$0.435$0.87"思考"档位,依然比Sonnet便宜7到17倍
本地(同一台机器)$0$0只算电费

更让我意外的其实是速度。本地的百B级模型逼得我把单轮超时提高到20到30分钟,而两个agent共用同一台GPU机器时还会互相拖后腿。DeepSeek通常几秒钟就答完;那450秒的上限,只有在最坏情况的推理任务里才真派上用场。另一个差距是上下文——DeepSeek有100万token的窗口,本地模型大概只有12.8万——所以长agent会话和大代码库的编码任务默认都走DeepSeek。图像识别则正好相反:我这边的DeepSeek条目都是纯文本的,所以"看看这张图"这类活儿仍然留在本地视觉模型上。

关于隐私,我实际遵循的经验法则很简单:不会写进邮件里的东西,也不发给云端。

回退链是双向都起作用的,这是我最喜欢的地方。云端优先的agent在网络或API挂掉时会降到本地模型;本地优先的主力在本地服务器忙碌或宕掉时会回退到DeepSeek flash。没有谁会完全失联。

容易踩的坑,精简版

reasoning: true这个开关、120秒的超时、$$转义,以及drop-in遮住你真实Anthropic密钥这几件事,方案一和方案二里都已经讲过了。再补两条:

  • 非空的插件allowlist是严格生效的。 在OpenClaw里,一个已启用但不在plugins.allow里的provider条目,永远不会被加载。没有报错,没有警告,就是安静地不加载。
  • 这里的DeepSeek是纯文本的。 在把视觉相关的任务路由过去之前,先检查一下模型条目里的"input"

想要完全走本地路线——不要API密钥,也不要云端账单?这个我也写过:DeepSeek:本地运行——4步指南,用OllamaDockerOpen WebUI,在自己的GPU上跑DeepSeek的蒸馏模型。那一篇是新手路线;这一篇则是给那些活儿难到GPU扛不住、但私密内容还是得留在家里的场景准备的。


← 更多AI 与本地 LLM