# DOC 204：给 AI Agent 的 DeepSeek Harness 反代部署操作稿

更新：2026-09-25

请直接在我这台 Windows 电脑上完成下述部署，不要只给我安装建议。目标是在 DeepSeek Harness 中使用 WorkBuddy 和 Xiaomi MiMo Desktop 账号可用的模型。你负责检查环境、安装、配置、启动和验证；需要我登录账号时，打开相应页面并告诉我操作位置，等我完成后继续。

## 一、任务范围与目录

本次只安装这三个项目：

1. DeepSeek Harness：https://github.com/deepseek-ai/deepseek-harness
2. WorkBuddy 面板版反代：https://github.com/linguo2625469/workbuddy2api-panel
3. MiMo 桌面端反代：https://github.com/LanluZ/mimo-desktop-proxy

其他反代只供以后参考，本次不安装 CLI2API，也不安装 Docker。不要购买套餐或充值；先使用我自己的账号现有额度，遇到额度或账号资格问题就把该项留待我处理，继续完成其他能做的部分。

先检查现有环境并复用已安装的程序，不覆盖已有配置。如果没有合适目录，默认把 WorkBuddy 和 MiMo 相关程序放在 `%LOCALAPPDATA%\AI-Tools`，把为它们生成的启停脚本放在其下的 `scripts` 目录，把测试工作目录设为 `%USERPROFILE%\AI-Workspace`。DeepSeek Harness 的安装目录以官方安装程序实际选择的位置为准。以下命令中的目录变量必须替换为本机实际位置，不要照搬文稿作者电脑上的 D 盘路径。

检查 PowerShell、Git 和 Node.js。Node.js 使用 22 或更高版本，必须支持全局 WebSocket；已有更高版本就直接复用。缺失时从官方来源安装，再确认新进程能找到命令。优先使用 PowerShell 7，正确处理中文和带空格的路径。

检查 WorkBuddy 的 7863 端口和 MiMo 的 8800 端口及其进程完整命令行。MiMo 还要检查 9229 调试端口，启动脚本可能使用 9222。安装 Harness 后，以该版本应用显示的本地面板地址和进程信息为准，不要预设端口或直接结束进程。已有相同服务就核对路径、配置和健康状态后复用；被其他程序占用时先定位，不能按端口直接杀进程，也不能结束所有 node.exe。

只在本机回环地址监听。密钥和登录凭据存到本机对应配置中，不要把其内容打印到聊天、加入 Git 或打进交付压缩包。若 Clash 等代理干扰本地请求，把 localhost、127.0.0.1、::1 加到本地请求的绕过列表，保留已有设置。

## 二、安装 WorkBuddy 面板版反代

仓库：https://github.com/linguo2625469/workbuddy2api-panel
发布页：https://github.com/linguo2625469/workbuddy2api-panel/releases

使用这个带面板的项目，不要误装不带面板的原上游。先看发布页和对应版本的配置示例，优先下载与本机架构匹配的 Windows 发布包。本文核对的发布包为 v1.11.2 / Windows amd64：

https://github.com/linguo2625469/workbuddy2api-panel/releases/download/v1.11.2/wb2api-panel-v1.11.2-windows-amd64.zip

该 ZIP 的 SHA256：

af506d764d5327200d6aaa9e02cbd11e65e1204aae5d2a227226608af8151b63

这组文件名和校验值只对应 v1.11.2 的 amd64 包。若选用新版本或其他架构，记录实际版本并核对相应资源，不要套用旧校验值。缺少匹配的二进制时再按该版本 README 的源码构建步骤处理。

解压到独立目录。首次部署从 `config.example.json` 创建 `config.json`，保留示例的完整结构，仅修改所需字段；已有配置先备份再合并。设置：

```json
{
  "listen": "127.0.0.1:7863",
  "api_key": "在本机生成的随机网关密钥",
  "auth_dir": "./auths",
  "state_file": "./data/state.json",
  "prompt": { "mode": "passthrough", "file": "" },
  "schedule": {
    "checkin_enabled": false,
    "travel_enabled": false,
    "activity_enabled": false,
    "blackcat_enabled": false
  }
}
```

上面是需要合并的字段片段，不是用来覆盖整个文件的配置。`api_key` 用安全随机数生成，例如 32 字节的十六进制字符串；不要使用示例中的 `test_key`。`passthrough` 用来保留 Harness 的系统指令和工具描述。这次只部署模型网关，上面的定时活动保持关闭，其余字段沿用当前版本配置。

创建 `auths` 和 `data` 目录。以安装目录为工作目录启动：

```powershell
# $WorkBuddyDir 为前面确定的实际安装目录。
Set-Location -LiteralPath $WorkBuddyDir
& (Join-Path $WorkBuddyDir 'wb2api.exe') -config (Join-Path $WorkBuddyDir 'config.json')
```

正式后台启动时使用 `Start-Process -WindowStyle Hidden`，设置 `WorkingDirectory`，分别保存 stdout/stderr 并记录 PID，不要让前台命令一直占住你的执行工具。

打开 `http://127.0.0.1:7863/panel/`，用本机网关密钥进入，点击“添加账号”，选择我的账号所属的 CN 或国际版，让我在浏览器完成 OAuth 登录。此路线不要求安装 WorkBuddy 官方桌面客户端。账号添加成功后凭据会保存并热加载；该项目的首次登录流程还会执行一次签到和余额刷新。

验证：

- `GET http://127.0.0.1:7863/healthz`，核对服务是 `workbuddy2api`；没有可用账号时可能返回 503，先检查账号状态。
- 带 `Authorization: Bearer <本机网关密钥>` 请求 `GET http://127.0.0.1:7863/v1/models`。
- 记录实际返回的 `data[].id`，保留 `cn:` 或 `global:` 等前缀。挑选本账号有可用额度的模型，不能拿面板上的简称当 API 模型 ID。
- 向 `/v1/chat/completions` 发起一次短请求，确认得到真实模型回复，再检查一次流式响应。只列出模型不算验证成功。

Harness 要用 OpenAI Chat Completions 协议。这个 WorkBuddy 项目没有实现 `/v1/responses`，不要选择 OpenAI Responses。

## 三、安装 MiMo 桌面端反代

客户端：https://mimo-ai.xiaomimimo.com/desktop/
反代仓库：https://github.com/LanluZ/mimo-desktop-proxy

先检查 Xiaomi MiMo Desktop 是否已安装，让我用自己的账号登录并确认客户端能够正常对话。若账号尚不能使用客户端，把这一步记为待处理，继续配置 WorkBuddy 和 Harness。

将反代仓库克隆到独立目录，已有仓库则先检查分支、提交和未提交修改，不要直接覆盖。当前项目使用 Node 内置模块，无需额外执行 `npm install`；如果后续版本增加依赖，按实际 package.json 和 README 处理。

阅读当前版本的 `start-mimo-proxy.cmd`、`resolve-env.cmd`、`pull_cookies.mjs` 和 `proxy.mjs`。启动流程会让 MiMo Desktop 带 `--inspect=9229` 运行，从本人客户端的运行时 Session 获取凭据，保存为本机 `cookies.json`，再启动代理。

启动脚本可能重启 MiMo 客户端。如果客户端正在执行任务，先让我结束或保存，再执行。不要为了拿凭据关闭其他无关应用。找不到 Node 或客户端时，根据 `resolve-env.cmd` 设置实际的 `MIMO_NODE`、`MIMO_APP` 路径，不要猜安装位置。

在仓库目录运行 `start-mimo-proxy.cmd`。后台包装脚本用隐藏窗口和日志，并确认启动结果。检查代理监听 `127.0.0.1:8800`；需要时设置 `MIMO_PROXY_HOST=127.0.0.1`，不要将代理或客户端调试端口开放到局域网。

若上游脚本仍用 `start /min cmd /c` 启动 Node，它会另开最小化控制台，只在外层套隐藏窗口不够。保留客户端初始化和凭据提取逻辑，将最后启动代理的环节改成 PowerShell 隐藏启动，并保留日志、工作目录和退出状态检查。

验证：

- `GET http://127.0.0.1:8800/v1/models`，当前模型 ID 为 `mimo-pro` 和 `mimo-flash`。
- `GET http://127.0.0.1:8800/health`，检查 `ok` 和 `login.logged_in`。只摘取判断所需字段，不要回显整个登录信息。
- 向 `/v1/chat/completions` 发起短请求及流式请求，确认模型实际可用。`/v1/models` 是本地静态列表，不能据此判断已经登录成功。

当前版本没有校验本地 API Key。Harness 如允许留空就留空，若表单要求填写，用 `mimo-local` 这样的非敏感占位值；不要把 MiMo Cookie 填进 API Key。

如果出现登录过期或 401/403，让本人已登录的 MiMo 客户端带调试端口运行，执行项目的 `refresh-cookies.cmd`，再检查健康状态和真实请求。客户端关闭后不能假定自动刷新一定成功。

文稿作者本机对启动脚本和请求体大小做过修改，不能把这些本地修改当作上游功能。新电脑以克隆下来的代码为准；也不要假定仓库必定自带 `stop-mimo-proxy.cmd`，需要停止脚本时由你根据实际进程路径生成。

## 四、启动 DeepSeek Harness

官方项目：https://github.com/deepseek-ai/deepseek-harness
模型提供商说明：https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/user/guide/providers.md

官方 Windows x64 安装包：<https://download.deepseek.com/dsh-desk/bin/win-x64/deepseek-harness-0.1.7-rc.2-win-x64.exe>

先检查是否已安装 Harness，记录实际版本、安装位置、是否正在运行和本地面板入口。没有已安装实例时，下载并运行上述官方安装程序；文件名中的 `rc.2` 表示候选发布版，不要把它描述为稳定版。安装路径、权限请求和首次启动选项以安装程序实际显示内容为准，不能凭旧教程猜测可执行文件名、命令行参数或端口。

安装完成后，用官方安装包提供的正常入口启动 Harness，并从应用实际显示的本地面板进入。若面板没有自动打开，先检查该次安装或启动的官方提示与日志；不要从旧脚本或旧日志恢复 token URL，也不要把 token 贴到聊天。已有实例不要为了跟随此下载链接而擅自升级或覆盖。

需要停止时，使用官方安装包提供的退出方式。先确认窗口、进程路径或应用状态确实属于 Harness；端口被其他程序占用时应诊断冲突，不能按端口结束任意进程。

## 五、修改 Harness 模型列表，并把默认思考深度设为 Max

先检查已安装 Harness 的实际版本和模型设置界面。当前入口为“设置 → 模型 → 添加模型提供商 → 自定义模型 API”，优先通过这个入口保存配置。自定义提供商是 Harness 内置功能，不需要为本任务另装提供商插件。

添加下面两项；已有同用途配置则合并或修正，不要重复创建：

| 字段 | WorkBuddy | MiMo |
| --- | --- | --- |
| 提供商 ID | workbuddy | mimo |
| 显示名称 | WorkBuddy | MiMo |
| 协议 | OpenAI Chat Completions | OpenAI Chat Completions |
| 内部 api 值 | openai-completions | openai-completions |
| Base URL | http://127.0.0.1:7863/v1 | http://127.0.0.1:8800/v1 |
| API Key | 本机 WorkBuddy 网关的 api_key | 空值或 mimo-local |
| 模型 ID | /v1/models 返回的完整 ID | mimo-pro、mimo-flash |

Base URL 到 `/v1` 为止，不要追加 `/chat/completions`。获取模型列表后选择实际要用的模型，不要凭印象填超大上下文、输出上限或图片能力。模型列表和默认思考深度按下面的步骤修改。

如果不能操作界面，允许直接编辑本机配置，但先读取当前安装版本的说明和 schema，并备份现有文件。本文核对的 2026 年 9 月版本使用 `$DSH_HOME/profiles/web/cordis.patch.yml`，默认 DSH_HOME 为 `%USERPROFILE%\.dsh`；不要照旧教程新建一个当前版本不读取的 `settings.yaml`。

提供商位于 `id: llm-pi-ai` 条目的 `config.providers`。保持其他提供商和该条目的其他配置，合并同一个条目，不要追加重复 ID，也不要用只有两个提供商的片段替换整个现有配置。字段包括 `displayName`、`api`、`baseURL`、`apiKeyEnv`、`models`，模型数组里的 `id` 必须与接口返回一致。

界面添加的密钥由 Harness 凭据存储管理；直接配置时可让 `apiKeyEnv` 引用 `WORKBUDDY_PROXY_KEY` 和 `MIMO_PROXY_KEY`，在启动 Harness 的进程环境中从本机私有配置读取并设置。只在你自己的终端临时设置变量，不会改变一个已经运行的 Harness 进程；需要保存配置并有控制地重启。不要杜撰 `.credentials.yaml` 的格式。

如果代理报不支持 `developer` 角色或 `store` 字段，按当前 Harness schema 设置对应提供商的 `compat.supportsDeveloperRole: false`、`compat.supportsStore: false`。如果拒绝 `max_completion_tokens`，核对接口后再设 `compat.maxTokensField: max_tokens`。没有对应错误就不乱加兼容参数。

### 5.1 整理模型列表

进入“设置 → 模型”，分别点击 WorkBuddy、MiMo 右侧的“编辑”。在模型目录中获取可用模型，勾选需要的条目，添加后保存。WorkBuddy 使用接口实际返回的完整 ID；MiMo 保留 `mimo-pro` 和 `mimo-flash`，显示名称可设为 `Mimo-Pro`、`Mimo-Flash`。显示名称可以修改，模型 ID 和提供商 ID 不要随意改名。

清理本次添加的重复、拼错或验证失败的模型条目，保留用户原有的其他提供商。直接编辑配置时，修改 `config.providers.<提供商ID>.models` 数组；该数组会替换该提供商的模型目录，因此要保留仍需使用的完整列表。保存后回到输入框的模型菜单，逐项确认新列表已经出现。

### 5.2 设置 Max，并保存为新对话的默认值

目标是以后新建对话直接使用 Max。要同时处理以下三项：

1. **模型可选档位**：在 `llm-pi-ai` 对应模型的 `reasoningEfforts` 中声明 `max: max`，保留已验证的其他档位。自定义模型没有声明推理档位时，输入框可能根本不显示“推理等级”。先核对代理的实际参数支持，不要只改显示名称，也不要把 `max` 映射成 `high` 后声称已经设为最高档。
2. **提供商默认值**：在 WorkBuddy、MiMo 对应提供商下设置 `reasoning: max`。这个字段与 `models` 同级，是会话未指定档位时的默认值。让该提供商下保留的模型与默认档位相容；某个模型不支持时单独报告，不能悄悄降低全局默认值。
3. **新对话默认选择**：在输入框右下角打开模型菜单，选定默认模型，再进入“推理等级 → Max”。DSH 会把模型和档位一起保存为新对话的默认选择。优先沿用用户原本的可用默认模型；首次部署可用 `mimo / mimo-pro`，MiMo 尚不可用时选一个已验证的 WorkBuddy 模型。

如需直接改配置，新对话默认选择对应 `agent-default-model`，使用 `provider`、`model`、`reasoningEffort` 三个字段。例如默认选择 MiMo-Pro Max：

```yaml
- id: agent-default-model
  config:
    provider: mimo
    model: mimo-pro
    reasoningEffort: max
```

下面展示 MiMo 提供商里的相关字段。将它们合并到已有提供商配置，保留 Base URL、密钥引用、兼容设置和其他模型；不要用这个片段覆盖整个提供商：

```yaml
reasoning: max
models:
  - id: mimo-pro
    name: Mimo-Pro
    reasoningEfforts:
      max: max
  - id: mimo-flash
    name: Mimo-Flash
    reasoningEfforts:
      max: max
```

以上模型片段只展示 Max，已有可用档位要一并保留。WorkBuddy 同样按实际模型 ID 合并这些字段。若用户原有默认模型走的是内置 DeepSeek 提供商，则修改 `llm-deepseek` 的 `config.reasoningEffort: max`，并确认 `config.thinking: enabled`；如果仍是 `disabled`，推理菜单只会显示 Off。不要把 `llm-pi-ai` 的字段套过去。

保存后读取 `agent-default-model` 条目，核对三项默认值已经落盘。点击原本已经选中的 Max 不会再次保存；这种情况直接合并默认配置，或先切换到另一个支持的档位再选回 Max。如果当前对话显示 Max、新对话却不是，检查 `$DSH_HOME/cordis.patch.yml` 或启动参数 `--patch` 是否覆盖了 `profiles/web/cordis.patch.yml`，在实际生效的配置层修正。

刷新页面，新建一个对话，确认右下角显示选定的模型和 `Max`，菜单中的“推理等级”也是 `Max`。再切换到另一个已配置模型，确认它也默认选 Max；切换模型会采用新模型自己的默认档位，因此不能只修改 `agent-default-model`。检查完成后，选回要交付的默认模型与 Max，再完成后面的短对话和工具测试。已有对话可能保留原来的模型与档位，要检查时单独切换；不能用旧对话判断新默认值有没有生效。配置默认值只保存一组模型与档位，后续手动选择其他模型或档位时也会更新它。

验收时分别记录界面的 Max、实际发给代理的推理参数，以及代理是否继续传给上游。WorkBuddy 会按模型能力表调整部分模型的档位；MiMo 的 Chat Completions 会透传该参数，上游是否采用要另行核对。参数不被支持时说明具体模型与错误，保留已经通过验证的部分。

## 六、验证到真正能干活

分别验证 WorkBuddy 和 MiMo；每个待交付模型都要记录实际结果，未测试的模型明确列为未测试。

1. 代理层：确认进程路径、监听地址、健康检查、实际模型 ID，以及短对话和流式响应。HTTP 200 或模型列表成功不能代替推理验证。
2. Harness 层：刷新页面并新建本地任务，确认默认模型与 Max 已保存；分别选择待验证模型，让它回复一个简短结果，确认实际调用了选定模型与档位。
3. 工具层：在测试目录中，让 Harness 创建一个原本不存在的小文件，内容为 `agent-check-ok`，再调用工具读回。WorkBuddy 和 MiMo 分别用不同文件名；已有同名文件时换一个名字。检查磁盘内容和任务中的工具调用记录，不能把模型口头说“已创建”当作成功。
4. 如对话成功但工具调用失败，保留日志并检查 `tools/tool_calls`、系统提示透传和模型能力，再修正配置复测。不要直接宣布部署全部完成。

只做必要的短测试，避免反复消耗账号额度。遇到失败按层定位：

- 连接拒绝：查进程退出码、日志、端口和本地代理绕过配置。
- WorkBuddy 网关 401：查网关密钥；上游登录失败则回面板检查账号。
- MiMo 上游 401/403：查客户端登录与 Cookie 刷新流程。
- 404：查 Base URL、API 协议和模型 ID，尤其是 WorkBuddy 模型前缀。
- 429 或额度不足：检查本人账号额度和模型可用性，不能靠不停重试解决。
- 413：检查当前代理版本的请求体限制，先用小任务验证，再按错误证据调整。

## 七、生成本机一键启停脚本并交付

在已确定的 scripts 目录中生成适用于本机实际路径的 `WorkBuddy Panel.ps1`、`WorkBuddy Stop.ps1`、`MiMo Proxy.ps1`、`MiMo Stop.ps1`、`Start All.ps1` 和 `Stop All.ps1`。Harness 使用官方安装包提供的启动与退出方式，不要新建、下载或调用旧教程中的 DeepSeek 脚本。

要求：

- Start All 先启动或复用 WorkBuddy、MiMo，等待各自可用并提示 Harness 应通过官方应用单独启动；失败项返回明确结果。账号登录未完成时报告待处理，不能假报成功。
- 启动服务使用隐藏窗口，保存日志和 PID；重复执行不会重复启动实例。
- Stop All 只停止本次部署对应的 WorkBuddy、MiMo 服务。逐项核对 PID、可执行文件及完整命令行，MiMo 必须匹配本安装目录的 `proxy.mjs`；不要仅凭 node.exe 名称或端口结束进程，也不要替代官方方式关闭 Harness。
- 停止代理不等于关闭我自己打开的 MiMo 客户端；不要为了停止反代强制结束客户端里的任务。
- 路径从脚本所在目录或本机配置解析，带空格也能运行。分别记录服务是否原本就在运行，启停验证不要中断无关服务。
- 如果某项因账号登录或资格尚未完成，把状态保存在本机部署说明中，让一键脚本明确跳过并提示，不要因这一项阻塞其他已可用服务。

最后给我一份简短交付记录：实际安装路径、版本或提交号、代理启停脚本位置、Harness 的官方启动与退出入口、面板入口、修改后的模型列表、默认模型与 Max 的保存结果、对话/流式/工具测试结果，以及仍需我处理的事项。注明每个服务当前是否运行；密钥只记录保存位置，不贴出值。留下可继续使用的已验证服务。
