前言¶
在 DeepSeek Harness(DSH)里,模型与凭证通常通过桌面端的 provider 适配层统一管理。若要把同一套配置接到 Cursor、OpenAI Python SDK、或任意只认 POST /v1/chat/completions 的工具,常见做法是再起一层网关或重复填密钥。下面介绍的 dsh-endpoint 是运行在 DSH 宿主进程内的 Cordis 插件:它不单独存凭证、也不直连厂商 API,请求一律经 ctx.llm.stream() 转发,由 DSH 现有的适配器处理协议差异、重试、图片与 token 统计。
这是什么¶
dsh-endpoint(npm 包名 dsh-endpoint,当前版本 1.1.0,MIT 许可证)由 wangzhongyang 维护,归类为模型推理相关插件。一句话定位:在 DSH 已启动的前提下,把已在 Harness 中配置好的 provider 与模型,以 OpenAI 兼容 HTTP 端点 的形式对外提供;端点只做映射与转发,真实请求仍走 DSH 的 LLM 插件链(如 dsh-llm-pi-ai、dsh-llm-deepseek-* 等)。
社区目录页:skillhub.cn/plugins/wangzhongyang/dsh-endpoint。源码与说明:github.com/wangzhongyang/dsh-endpoint。DSH 生态强调「一切皆插件」;该目录为独立社区站点,与 DeepSeek / 幻方无官方从属关系。
架构与核心行为¶
请求路径可概括为:
OpenAI 兼容客户端 → POST /v1/chat/completions
→ dsh-endpoint(HTTP 监听 → OpenAI 映射 → SessionMirror → ctx.llm)
→ DSH provider 适配器 → 厂商 API
要点如下:
- 仅插件、无第二进程:不另起凭证存储;谁装插件、DSH 以何种权限运行,端点就继承同样环境。
- 会话可镜像:可选将每次 API 对话写入 DSH 侧边栏可见的 session;镜像为只读,GUI 不会从镜像 session 恢复(
already owned by an active write handle)。 - 安全默认:README 明确 无鉴权、无限流;能访问端点的人会消耗你在 DSH 里配置的模型配额。除非置于自控代理之后,否则应监听
127.0.0.1;不需要时关闭插件即可停用。
HTTP API 与请求能力¶
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /healthz |
存活检查与已注册 provider |
| GET | /v1/models |
provider/model 及别名 |
| GET | /v1/models/{id} |
单个模型 |
| POST | /v1/chat/completions |
流式与非流式 |
模型 id 形如 opencode-go/deepseek-v4.1-flash(provider/model)。
支持:messages(system/user/assistant/tool)、tools 与 tool_calls 透传、temperature、max_tokens / max_completion_tokens、stream、stream_options.include_usage、stop(部分 adapter 不支持时会在端点侧截断处理)。
显式拒绝:n > 1、非 "auto" 的 tool_choice、远程 http(s) 媒体 URL、file_id、PDF/DOCX 等二进制文档。
附件仅接受 inline base64:图片 data:image/{png,jpeg,webp,gif};base64,… 经 ctx.attachments.saveImages 入库;文本类 file(text/*、JSON、YAML 等)内联为 text block(单文件 512 KiB 上限,文件名保留)。远程图片 URL 与 Files API 未实现,返回 400。
未建模的字段(如 top_p、seed 等)会被记录并丢弃,避免误伤常见客户端。
安装与启用¶
依赖 DeepSeek Harness Desktop(web profile)0.2.1-rc.x;package.json 要求 Node >=22.19.0、DSH >=0.2.1-rc.2。
从 npm 安装:
dsh plugin --profile web add dsh-endpoint
开发中也可从本地路径安装(README 示例,需绝对路径):
dsh plugin --profile web add /absolute/path/to/dsh-endpoint
桌面端亦可在 Settings → Plugins 从市场安装(包上架后)。宿主插件为 ESM 模块,安装或重装后需重启应用,否则运行中进程不会加载新模块。
安装前建议自行查看 GitHub 源码与 MIT 许可证;插件与 DSH 同进程,权限与网络暴露面与宿主一致。
设置页¶
路径:Settings → Model Endpoint(与插件页同级)。
| 字段 | 含义 |
|---|---|
| Listen address | 127.0.0.1(仅本机)或 0.0.0.0(所有网卡) |
| Port | 默认 43130(GUI 占用 43129) |
| Default model | 请求未带 model 时使用 |
| Model aliases | JSON 映射,如 {"gpt-4o": "opencode-go/deepseek-v4.1-flash"} |
| Session mirror | 是否将 API 对话写入 DSH session |
| Mapping retention | 外部 conversation id 末次使用后保留映射的天数 |
| Workspace directory | 镜像 session 所属 workspace |
保存后立即生效:改监听地址或端口会 原地 rebind(失败则回滚);切换 mirror 或 workspace 目录需 重载插件(启动时构建)。监听变更时,进行中的流式响应会被丢弃。
用户层配置写入 $DSH_HOME/dsh-endpoint/config.json,启动时与插件默认配置合并。设置页通过仅 loopback 的路由读写:GET /dsh-endpoint/state、GET|PUT /dsh-endpoint/config。
典型用法¶
任意可指定 OpenAI 兼容 base_url 的客户端均可指向本端点。README 示例:
export OPENAI_BASE_URL=http://127.0.0.1:43130/v1
export OPENAI_API_KEY=anything
无真实鉴权,OPENAI_API_KEY 可为任意占位符。文档中 curl、OpenAI Python SDK 等配置方式见仓库 README(含截断前的客户端表格)。
会话 id 解析顺序(先命中先用):x-dsh-session-id → 常见 agent 头(如 x-session-id、x-conversation-id 等)→ body 内 session_id / metadata.* / user → 无用户消息时按 sha256(model + 首条 user message) 稳定生成 → 完全没有 user 消息时新建 id。响应会回显 x-dsh-session-id,客户端可带回以固定同一会话。
适用场景与注意¶
适合:已在 DSH 配好 provider,希望用 OpenAI 协议客户端(IDE 插件、脚本、Agent 框架)统一走 Harness 的凭证与适配层;需要可选地把外部对话镜像到 DSH 侧边栏便于排查。
务必注意:
- 默认无认证与限流,监听
0.0.0.0等于把配额暴露给局域网或更广范围。 - 请求体等限制见 README(如默认
maxBodyBytes20 MiB、单 inline 文本文件 8 MiB 等);超限或不支持的能力会 400 或截断并告知模型。 - 仅转发,不替代 DSH 自身的 GUI 会话编辑;镜像 session 为只读。
结尾¶
dsh-endpoint 把「DSH 里已经配好的模型」变成本地(或你显式放开的)OpenAI 兼容端点,避免重复维护密钥与 adapter 逻辑。进一步了解安装细节、客户端矩阵与限制表,请以仓库 README 为准。