前几天 DeepSeek 官方 API 迎来了一波价格调整与并发限制,调用账单肉眼可见地上涨。作为一个重度依赖代码 Agent 的开发者,每天频繁让模型读代码、修 Bug,调用量动辄几百万 Token,全走官方云端 API 钱包实在吃不消。
最初是决定把家里的高配台式机利用起来,在本地部署开源模型,配合 FRP 内网穿透 将算力开放给 Mac 笔记本,打造一套"本地主力抗高频开销 + 云端高精度模型兜底"的 DeepSeek Harness (dsh) 混合算力工作台。
整个折腾过程从搭建穿透、本地 32B 模型推理卡顿、模型开口就甩代码 JSON,到 npm 包启动报错、环境变量被抢占与配置文件崩溃,踩坑不少。这里以第一人称完整记录整个实战流程。
先说结果:
- 本地启动大模型生成速度拉跨,多agent电脑吃不消,可能后续就用它来做本地知识库,用在开发还是得上矿卡
- deepseek harness 缓存命中率高达99%,一千八百万token就花了4.94元,对比使用codex,节省了百分之60-80%的rmb



对比于涨价后使用codex的消费


阶段一:用 FRP 搭建免 Token 费用的本地穿透算力
为了把局域网内的台式机 Ollama 算力无缝暴露给外出使用的笔记本,我采用云服务器配合 FRP 搭建反向代理通道。
1. 云服务器端配置(FRP Server)
在有一台公网 IP(例如 120.79.***.***)的轻量服务器上配置 frps.toml:
Ini, TOML
ini
bindPort = 7000
auth.token = "your_secure_frp_token"
启动 frps,并在服务器防火墙中放行 7000(FRP 通信)和 11434(Ollama 穿透端口)。
2. 本地主机配置(FRP Client)
在运行 Ollama 的本地主机上,首先让 Ollama 监听所有网卡请求,编辑 systemd 配置:
Bash
ini
# /etc/systemd/system/ollama.service
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_ORIGINS=*"
接着在本地主机配置 frpc.toml,将本地 11434 端口打通到云服务器上:
Ini, TOML
ini
serverAddr = "120.79.***.***"
serverPort = 7000
auth.token = "your_secure_frp_token"
[[proxies]]
name = "ollama-llm"
type = "tcp"
localIP = "127.0.0.1"
localPort = 11434
remotePort = 11434
启动客户端后,我就拥有了一个完全免费且不限 Token 的公网 OpenAI 兼容接口:[http://120.79](http://120.79).***.***:11434/v1。
阶段二:接入穿透模型后的两大"劝退"现场
接口打通后,我迫不及待地将穿透地址接进 Agent,但立刻遭遇了两个意料之外的阻碍:
1. 32B 大模型像树懒一样慢
我在本地拉取了 qwen2.5-coder:32b,本以为能实现精度与免费的兼得,结果模型吐字奇慢无比。
-
原因分析:大模型在纯 CPU 环境下的推理速度受制于内存带宽。32B 模型量化后体积接近 20GB,每生成 1 个 Token,CPU 就必须完整读取一遍这 20GB 内存,内存带宽直接成为瓶颈。
-
解决方案 :放弃 32B,换成纯 CPU 推理的甜点级模型
qwen2.5-coder:14b或7b。吞吐速度瞬间飙升至秒回级别,日常读代码、补全和写测试完全够用,但是多agent还是很吃力。
2. 问句"你好",模型直接甩出代码 JSON
在测试交互时输入简单的打招呼,模型直接输出了如下内容:
JSON
json
{"name": "write", "arguments": {"file_path": "greet.txt", "content": "你好! welcome to your assistant.", "justification": "This is a simple text file to greet the user with a friendly message."}}
- 原因分析 :这是代码类 Agent 模型的工具过度触发(Tool Over-triggering)现象。框架预先注入了文件读写与终端工具,代码专精模型动手欲极强,把日常问候误判为了开发任务,试图在工作区直接创建
greet.txt文件来完成回应。
阶段三:源码拉取受阻与快速启动方案
在明确使用官方的 deepseek-ai/deepseek-harness 仓库后,我尝试直接克隆源码:
Bash
bash
git clone https://github.com/deepseek-ai/deepseek-harness.git
终端在卡顿数分钟后直接抛出 RPC failed / Operation timed out 错误。
-
原因排查:该仓库包含近 30 万个历史提交与数据集对象,全量拉取在中途极易发生网络中断。
-
解决策略:放弃全量 Git 源码克隆,直接使用官方发布的预编译 npm 包启动:
Bash
bashnpx --registry=https://registry.npmmirror.com @deepseek-ai/dsh web
阶段四:Node 运行时报错排查
在通过 npx 启动时,终端抛出了模块语法缺失异常:
Plaintext
javascript
SyntaxError: The requested module 'node:zlib' does not provide an export named 'createZstdDecompress'
SyntaxError: The requested module 'node:module' does not provide an export named 'stripTypeScriptTypes'
-
原因排查 :我本地的 Node.js 版本是
v23.1.0,而dsh深度依赖了 Node.js 最新的原生 Zstd 压缩与原生 TypeScript 类型剥离特性,这些 API 在较新的 Node.js 版本中才正式支持。 -
解决步骤:
Bash
perl# 升级 Node.js 到最新版本 nvm install 23 --latest-npm nvm use 23 # 重新启动 WebUI npx --registry=https://registry.npmmirror.com @deepseek-ai/dsh web
升级后,浏览器成功拉起 Web 控制台:[http://127.0.0.1:3080](http://127.0.0.1:3080)。
阶段五:环境变量被抢占与多模型配置文件修复
在控制台跑起来后,为了实现"本地模型主力跑高频、商业模型跑复杂任务",我尝试把 DeepSeek 官方 API 和 MiniMax M3 一同接入,结果又遇到了两次配置异常:
-
官方 Key 始终显示为只读且不生效 :前面在配置本地穿透的 Ollama 时,不小心将
apiKeyEnv: DEEPSEEK_API_KEY绑定给了本地节点,导致启动时系统环境变量被本地节点抢先占用,官方节点读不到该变量。 -
手写自定义列表导致所有模型全消失 :为了强制注册模型,在配置文件里手写了
presets: [...]数组,触发了底层的 Schema 校验失败,程序静默放弃加载所有自定义模型,连原本正常的 Ollama 也一同消失了。
最终生效的多模型配置文件
点击控制台右上角的 【打开配置文件】 ,将内容替换为精简且严格遵循规范的标准配置:
YAML
yaml
ui-onboarding:
welcomeNoticeVersion: 2026-08-13.1
llm-pi-ai:
providers:
# 1. MiniMax 官方接口(长文本与高性价比备选)
minimax:
apiKeyEnv: MINIMAX_API_KEY
api: openai-completions
baseURL: https://api.minimax.chat/v1
models:
- id: MiniMax-M3
- id: MiniMax-Text-01
# 2. DeepSeek 官方接口(用于高难度复杂推理)
deepseek-official:
apiKeyEnv: DEEPSEEK_API_KEY
api: openai-completions
baseURL: https://api.deepseek.com
models:
- id: deepseek-chat
- id: deepseek-reasoner
# 3. 本地 FRP 内网穿透的 Ollama 节点(主力省钱引擎)
ollama:
apiKey: ollama
api: openai-completions
baseURL: http://120.79.***.***:11434/v1
models:
- id: qwen2.5-coder:7b
- id: qwen3.8:27b
# 设置默认优先启动本地省钱模型或 MiniMax
agent-default-model:
provider: ollama
model: qwen2.5-coder:7b
agent-presets:
default: standard
启动与日常使用方式
配置保存后,在 Mac 终端中把密钥导出来并启动:
Bash
ini
export MINIMAX_API_KEY="你的MiniMax密钥"
export DEEPSEEK_API_KEY="你的DeepSeek密钥"
npx --registry=https://registry.npmmirror.com @deepseek-ai/dsh web
启动之后打开网页,按 Cmd + Shift + R 强制刷新 清除浏览器本地缓存,点击左侧的 【+ 新建对话】 。