前言¶
DeepSeek Harness(DSH)在聊天和「模型」设置里已经接好了各提供方的凭据与路由,但 Harness 本身并不对外提供入站 HTTP API。若你想用 openai SDK、LangChain、Cline、shell 脚本或另一台 Harness 实例去调用「此刻 profile 正在用的那个模型」,常见做法是再配一套网关或重复维护密钥。下面介绍的 dsh-model-endpoint 由社区维护者 Xxsttb 发布,分类为模型推理;它在本机(或你指定的绑定地址)单独起一个监听器,把当前 profile 的模型暴露成 OpenAI 兼容端点,客户端通常只需改 base_url。
这是什么¶
dsh-model-endpoint 是 DSH 插件(npm 包名 dsh-model-endpoint,当前版本 1.0.0,MIT 许可证)。它把 DeepSeek Harness profile 当前正在使用的模型发布成一个 OpenAI 兼容的 HTTP 端点;监听器由插件自行创建,不占用 Harness 的 Web 服务器。任意 OpenAI 兼容客户端指向插件打印出的 base URL 即可作答,一般不需要第二份模型凭据——客户端侧除 base URL 外无额外配置(若你启用了 API key,则需 Bearer 鉴权)。
- 目录页:SkillHub — dsh-model-endpoint
- 源码:GitHub — Xxsttb/dsh-model-endpoint
- 引擎要求(package.json):
dsh>=0.2.0-rc.2;README 说明文档针对 Harness 0.2.0-rc.2 编写,后续版本需自行验证。
核心功能¶
HTTP 端点(独立监听器)¶
默认示例端口为 8787(可在设置中修改)。主要路由如下:
| 方法 / 路径 | 作用 |
|---|---|
GET /v1/models |
列出本 profile 可路由的模型(含 provider/model 与裸 id) |
GET /v1/models/<id> |
单个模型对象,否则 404 model_not_found |
POST /v1/chat/completions |
对话补全,支持流式(SSE)与非流式 |
GET /health、GET / |
绑定状态、可达性、鉴权模式、当前模型 |
绑定地址由你决定:127.0.0.1 仅本机,0.0.0.0 面向局域网;同一端口经路由器或 NAT 转发后可从公网访问,请求路径与上述三种拓扑无关。
模型解析顺序¶
端点按优先级选择实际服务的模型:
- 请求体里的
model(须可路由;接受provider/model或裸 id) - profile 当前选择(与聊天选择器、「模型」设置页一致;在聊天里换模型,端点跟着换)
- 插件设置页上的备用提供方与模型
- 无论
followSelection是否关闭,仍作为最后手段使用,避免无模型可路由时直接 503
若仍无法解析,返回 503 model_unavailable,报文会列出各失败候选及原因。客户端可用 model: "auto"、"default" 或省略该字段,表示使用 profile 当前选中项。
流式、推理强度与工具¶
- 流式:
"stream": true时以 SSE 返回;文本在delta.content,推理在delta.reasoning_content;工具调用为带索引的delta.tool_calls;思考期间有保活注释;用量在最后一个 chunk 与finish_reason一并给出。 - 推理强度:仅当被服务模型声明了
reasoning_effort时才生效,否则用模型默认;设置页为省略该字段的请求提供默认值。 - 调用方自带工具:请求中的
tools会转发给模型,端点不执行这些工具,结果以finish_reason: "tool_calls"交还调用方。 - 借出的工具(默认关闭):可把本 Harness 已注册且你在设置里逐个打开的工具借给模型,由端点经 Harness 工具运行时执行并回填,单请求内完成往返,上限为 Max tool rounds(默认 8),超限返回
409 tool_round_limit。
另有几条路由挂在 Harness Web 服务器上(非独立监听器),供设置页读取状态、模型目录、推理强度与工具开关,例如 GET /plugins/model-endpoint 等。
设置页与安全¶
安装后在 设置 → Model endpoint 配置。字段包括:是否运行端点、绑定地址、端口、API key、是否跟随当前模型、备用模型、推理强度、额外 system prompt、默认 max_tokens、请求超时、CORS 允许的浏览器来源、是否借出工具及逐工具开关等。修改后监听器会重新绑定;状态块显示实际绑定端口与本机可达地址。
安全要点(README 原文):仅绑定 127.0.0.1 时可不填 API key;绑定到本机以外且无密钥时,任何能连到该端口的人都可能消耗本 profile 的模型额度。端点本身无 TLS,公网暴露应在反向代理处终结 TLS或走隧道。
安装与启用¶
README 要求用 dsh plugin add 安装,不要手工改 profile 清单;也不要先 link: 再换 tarball(Windows 上可能清空链接指向的源码目录)。
从检出目录或打包 tarball 安装:
dsh plugin --profile desktop add /absolute/path/to/dsh-model-endpoint
# 或者
pnpm pack --pack-destination dist
dsh plugin --profile desktop add /absolute/path/to/dist/dsh-model-endpoint-1.0.0.tgz
插件会自行挂载、启动监听器,并在「设置」下添加 Model endpoint 页面。
验证:
curl http://127.0.0.1:8787/health
curl http://127.0.0.1:8787/v1/models
卸载:
dsh plugin --profile desktop remove dsh-model-endpoint
典型用法¶
OpenAI Python SDK¶
鉴权关闭时,api_key 可为任意非空字符串(例如 "unused"):
from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:8787/v1", api_key="unused")
client.chat.completions.create(
model="auto",
messages=[{"role": "user", "content": "hello"}],
)
curl(含流式)¶
curl http://127.0.0.1:8787/v1/chat/completions \
-H 'content-type: application/json' \
-d '{"model":"auto","messages":[{"role":"user","content":"hello"}],"stream":true}'
局域网或公网¶
- 将 Bind address 设为
0.0.0.0,并设置 API key。 - 从设置页状态块读取 Local network URL。
- 公网访问时在路由器上转发该端口到本机,客户端使用公网地址即可;端点无需感知转发。
适用场景与注意¶
适合谁:已在 DSH 里配好模型路由,希望用现有 OpenAI 生态工具或远程机器调用同一 profile 的模型;需要 SSE 流式、可选 Bearer 鉴权与 CORS 的本地或 LAN 网关场景。
运行权限:插件与当前 DSH 进程同权;若开启「借出的工具」,模型可能触发本机已注册工具(含读写文件、执行代码、访问网络等),请只打开你愿意替潜在未鉴权调用方执行的开关,并在非本机绑定时务必使用 API key。
安装前:社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系;安装前应自行审阅 GitHub 仓库 源码与 MIT 许可证。README 含免责声明:功能经作者对运行中 profile 与测试台验证,但不保证与后续 Harness 版本兼容。
错误响应遵循 OpenAI 信封格式;常见状态码包括 401 invalid_api_key、404 model_not_found、409 tool_round_limit、503 model_unavailable 等,上游失败会保留 Harness 侧分类(如限流、额度、上下文超长)。
结尾¶
经过上面的步骤,你可以把 DSH 里已选中的模型变成标准 OpenAI 兼容 HTTP 服务,而无需为每个客户端重复配置提供方密钥。更多细节见仓库中文 README;插件条目见 SkillHub 目录页,源码见 GitHub — Xxsttb/dsh-model-endpoint。