DeepSeek Harness 配置指南:API Key、Base URL 与模型
通过 headless 配置将 DeepSeek Harness 接入 BetterToken,设置 API Key、Base URL 与模型,选择协议并验证文本请求和文件读取。
在 headless 配置中添加自定义提供商,将 DeepSeek Harness(dsh)接入 BetterToken。macOS 测试中,@deepseek-ai/dsh@0.2.1-rc.2 在以下每种组合下均完成了 3 次文本请求和文件读取工具调用,全部通过:Chat Completions 搭配 GPT 模型、Responses 搭配 GPT 模型、Anthropic Messages 搭配 Claude 模型,以及 Anthropic Messages 搭配 GPT 模型。
重点信息
| 字段 | 值 |
|---|---|
| API Key | BetterToken API Key,从 apiKeyEnv 指定的环境变量读取 |
| Base URL | https://bettertoken.ai/v1 — Chat Completions / Responses |
| Base URL,Anthropic Messages | https://bettertoken.ai,不带 /v1 |
| Model | YOUR_MODEL_ID |
| 配置文件 | $DSH_HOME/profiles/headless/cordis.patch.yml(DSH_HOME 默认为 ~/.dsh) |
准备工作
- Node.js 24.9 或更高版本,见官方 rc.2 升级说明
- BetterToken API Key:注册并获取
- 从模型广场复制的 Model ID
安装
无需全局安装,直接运行本页测试的版本:
npx @deepseek-ai/dsh@0.2.1-rc.2 --help测试时,npm 的 latest 标签对应 0.2.1-rc.2,这是候选发布版本。未测试 next 等其他标签。
手动配置
将 API Key 导出为环境变量,替换 YOUR_API_KEY:
export BETTERTOKEN_API_KEY="YOUR_API_KEY"创建 ~/.dsh/profiles/headless/cordis.patch.yml。该文件是 Cordis 补丁列表。将两处 YOUR_MODEL_ID 替换为同一个完整、准确的 Model ID:
Chat Completions
- id: llm-pi-ai config: providers: bettertoken: api: openai-completions baseURL: https://bettertoken.ai/v1 apiKeyEnv: BETTERTOKEN_API_KEY retryPolicy: mode: normal maxRetries: 2 models: - id: YOUR_MODEL_ID- id: agent-default-model config: provider: bettertoken model: YOUR_MODEL_IDResponses
- id: llm-pi-ai config: providers: bettertoken: api: openai-responses baseURL: https://bettertoken.ai/v1 apiKeyEnv: BETTERTOKEN_API_KEY retryPolicy: mode: normal maxRetries: 2 models: - id: YOUR_MODEL_ID- id: agent-default-model config: provider: bettertoken model: YOUR_MODEL_IDAnthropic Messages
- id: llm-pi-ai config: providers: bettertoken: api: anthropic-messages baseURL: https://bettertoken.ai apiKeyEnv: BETTERTOKEN_API_KEY retryPolicy: mode: normal maxRetries: 2 models: - id: YOUR_MODEL_ID- id: agent-default-model config: provider: bettertoken model: YOUR_MODEL_IDapiKeyEnv 填写环境变量名,不是 API Key 本身,也不是 ${...} 表达式。自定义提供商必须包含 api、baseURL,以及 models 下至少一个模型条目;每个模型条目仅要求填写 id。如果已有 llm-pi-ai 配置,请将需要保留的提供商复制到同一个 config 中,因为新条目会替换已有条目。
自定义提供商的 api 字段仅接受 openai-completions、openai-responses 和 anthropic-messages。Anthropic Base URL 使用站点根地址,因为客户端会自行添加 /v1/messages。
运行 npx @deepseek-ai/dsh@0.2.1-rc.2 --profile headless --dump-config 可检查语法,不会向模型发送请求。
验证连接
在同一终端中运行:
npx @deepseek-ai/dsh@0.2.1-rc.2 --profile headless --json "Reply with only: OK"--json 每行输出一个 JSON 事件。确认退出码为 0、turn_end.reason 表示正常结束,且最后一个 final 事件的 text 等于 OK。失败时也可能输出空的 final 事件,不能只凭事件是否出现来判断成功。
验证文件访问时,在空目录中创建 sample.txt,然后在该目录运行同一命令,将提示词改为 Read sample.txt using a tool. Reply with only its exact contents.。确认输出包含 tool_call、带有文件文本的 tool_result,以及与文件内容一致的 final 文本。
切换模型
将两处 YOUR_MODEL_ID 改为另一个完整、准确的 Model ID。如果新模型需要不同协议,例如通过 Anthropic Messages 调用 Claude 模型,请同时修改 api 和 baseURL。查看网关返回的模型列表时,在 DeepSeek Harness 网页界面中为自定义提供商使用 Fetch available models。测试中,同一模型发现服务在三种协议下均返回了 BetterToken 模型列表。
常见错误
| 现象 | 检查方法 |
|---|---|
MISSING_CREDENTIAL、退出码为 1,且控制台没有请求记录 | 进程未读取到 apiKeyEnv 指定的变量。请在启动 dsh 的终端中导出该变量,并检查拼写。这项检查在本地完成。 |
headless 配置不使用网页界面中保存的 Key | headless 配置只按以下顺序读取凭据:启动环境、当前目录中的 .env、DSH_HOME 下的 .env。 |
返回 404,请求路径以 /v1/v1/messages 结尾 | Anthropic baseURL 末尾包含了 /v1。请使用 https://bettertoken.ai。 |
| 找不到模型 | 从模型广场重新复制 Model ID,并在两处使用相同值。 |
| 失败后多次重试 | 省略 retryPolicy 时,适配器默认重试 5 次。请像示例一样显式设置 maxRetries。 |
| Node.js 版本错误 | 使用 Node.js 24.9 或更高版本。 |
相关文档
技术说明
测试中,三个 api 值对应的实际请求路径分别为 /v1/chat/completions、/v1/responses 和 /v1/messages。dsh 还会通过已配置的提供商和模型自动请求生成会话标题,因此一个任务可能产生多个请求。默认输出上限由客户端添加,例如主请求为 32768 个令牌,配置中未设置这些上限。
模型条目中的 input 和 contextWindow 字段是向客户端声明的信息,不会查询或验证网关限制。未测试图片输入。测试仅覆盖 macOS。

