前言¶
DeepSeek Harness(DSH)支持通过插件扩展能力。在多模型协作的场景下,一个 DSH 会话里通常只运行一个模型,另一个 AI(例如在浏览器、脚本或自动化流程中)难以直接参与对话。dsh-ai-bridge 提供了一条本地 HTTP 通道,让外部 AI 能把提示词写入 DSH 会话,同时 DSH 的回复也同步到外部,实现双向对话。
它是什么¶
dsh-ai-bridge 是一个 DSH 插件,由 jhhjy 维护。它的核心作用是充当「接线板」:外部 AI 通过本机 HTTP 服务把提示词投进 DSH 会话,DSH 的回复则写入 outbox 供外部读取。所有操作都在本地完成,不对外暴露端口。
核心功能¶
- 入站队列:外部 AI 发送提示词,插件将其作为真正的用户消息投进会话(会唤醒 agent)。
- 出站队列:DSH 的每条回复自动写入 outbox,外部 AI 可按时间戳增量拉取。
- 标注与区分:外部输入会被标注为「【外部 AI 输入 · 来自 X】」,避免误判。
- 可配置目标会话:可选择跟随最近活跃会话,或钉死某一个。
- 状态与队列管理:在设置页查看入站队列(未投递/已投递/已处理)和出站列表。
- 主动发一条:支持从 DSH 侧主动写消息到 outbox。
- 令牌轮换:可随时更换令牌,提升安全性。
- 自检接口:提供
/diag接口检查目标会话、agent 方法与投递通道。
安装与启用¶
插件为纯 JS 的 Cordis bundle,无需构建。
- 拿到源码
git clone https://github.com/OWNER/dsh-ai-bridge.git "$env:USERPROFILE\.dsh\plugins\dsh-ai-bridge"
(也可直接解压 zip 到 %USERPROFILE%\.dsh\plugins\dsh-ai-bridge。)
- 挂进 profile
方式 A(推荐):在 DSH 里对 agent 说「把这个本地包装成插件」,它会用 plugin_manager 的 install_bundle 指向该目录,走 link 安装。
方式 B(手工两步):编辑 %USERPROFILE%\.dsh\profiles\<profile>\package.json
dependencies加一行"dsh-ai-bridge": "link:../../plugins/dsh-ai-bridge"dsh.profile.bundles加一行"dsh-ai-bridge"
然后重开 DSH。
- 启用
设置 → 接线板。首次打开会看到「接入说明」,点击「复制给另一个 AI」,把地址 + 令牌 + 示例复制到另一窗口,按说明操作即可。
典型用法¶
外部 AI 发送提示词(示例,PowerShell):
$json = '{"from":"Claude","text":"看一下这个报错"}'
$bytes = [System.Text.Encoding]::UTF8.GetBytes($json)
Invoke-RestMethod -Method Post -Uri "http://127.0.0.1:PORT/api/ai-bridge/post" `
-Headers @{"x-bridge-token"="<TOKEN>"} `
-ContentType "application/json; charset=utf-8" -Body $bytes
DSH 回复会自动写入 outbox,外部 AI 通过 /outbox?since=<ms> 按时间戳增量拉取。
HTTP API¶
基础地址:http://127.0.0.1:<DSH 端口>/api/ai-bridge。写操作需要 x-bridge-token(也支持 ?token=)。
| 方法 | 路径 | 作用 |
|---|---|---|
| GET | /state |
全量状态(开关、目标会话、队列、令牌、会话列表) |
| POST | /post |
外部 AI 发提示词 {from, text},按配置自动投递 |
| GET | /outbox?since=<ms> |
按时间戳增量拉取 DSH 的消息 |
| POST | /reply |
主动写一条给出站(模型工具 ai_bridge 也会调用) |
| POST | /deliver |
把某条入站消息立刻投递给模型 {id} |
| POST | /ack |
把入站消息标记为已处理 {ids: []} |
| POST | /config |
修改开关 / 目标会话 |
| POST | /rotate-token |
换令牌 |
| GET | /diag |
运行时自检(目标会话、agent 方法、投递通道) |
中文必须走 UTF-8。常见错误是发送端按 ANSI/GBK 编码,导致接收端显示 ???。
投递实现¶
优先使用官方入口 sessionController.prompt({ sessionId, mode:'queue', content:[{type:'text', text}] }),即真正的用户消息,会唤醒 agent;该服务不可用时退化为 agent.inject() + agent.followup()。
安全与数据¶
- 服务仅运行在 DSH 自己的 loopback HTTP 上,不额外开端口、不对外暴露。
- 写接口校验令牌,可随时轮换。
- 请求体上限 1 MB,单条文本上限 16k。
- 数据保存在
<DSH_HOME>/ai-bridge/:state.json、inbox.jsonl、outbox.jsonl(追加写、坏行跳过)。
兼容性¶
- 需要 DSH 提供
webServer(同源 HTTP)。 sessionController/agents/sessions为可选读取。- 浏览器半侧使用
settings.section槽位;宿主不提供该槽位的旧版本上页面不出现,但投递仍可用。
适用场景¶
适合需要在 DSH 会话中与外部 AI(浏览器窗口、脚本、自动化流程)进行双向对话的场景。安装前应检查源码与许可证。
卸载¶
从 profile 的 dsh.profile.bundles / dependencies 删掉对应行,删除 node_modules/dsh-ai-bridge,重启 DSH 即可。数据目录可保留。
License¶
MIT