ST-bridge:为酒馆插件提供本机持久 Agent 会话桥接

前言

在 SillyTavern 生态里,柏宝绘、玉子手机、数据库等插件往往需要把长上下文交给模型,并希望同一条聊天里状态能延续,而不是每轮都新开一个无历史的请求。常见做法是把 OpenAI 兼容 API 指到云端或本地转发服务,会话要么不落盘,要么与 DSH Desktop 里的 Agent 界面脱节,手工介入、查历史都不方便。

ST-bridge 是跑在 DSH Desktop 里的 Host 插件:在本机 http://127.0.0.1:43121/v1 提供 OpenAI 兼容入口,把每个酒馆的 chat_id 绑定到真实的 DSH Agent 会话。会话经 ctx.agents 创建,会出现在 DSH 界面,可打开、续聊、看历史。下文介绍它做什么、怎么装、插件侧怎么带 dsh_session 调用。

这是什么

ST-bridge(仓库 wuhehen176/ST-bridge)由社区维护者 wuhehen176 发布,在 SkillHub 目录中归类为「记忆」相关能力;简介为「DSH persistent Agent session bridge for Tavern plugins」。当前 package 版本为 0.9.2(MIT),要求 Node.js 22.19+ 与正常运行的 DSH Desktop。

它不是单纯转发模型 API 的代理,而是 DSH Host 插件:桥接只负责协议、会话生命周期与 HTTP 层;模型与账号仍走 DSH 已配置的通道。

核心功能

README 中归纳的职责如下,均可与仓库实现文件对应(如 lib/engine.js、lib/context.js、lib/server.js):

  1. dsh_session v1:支持固定组/动态组划分,以及 generate、sync_rules、reset 等动作。
  2. 隔离维度:按 client_id + chat_id + task_id 区分插件、聊天与子任务,各自绑定独立 DSH 会话。
  3. 上下文策略:首次请求送入完整上下文;之后只追加新增正文与本轮要求。
  4. 幂等与串行:用 request_id 避免网络重试重复追加;同一 chat_id 的生成请求串行执行。
  5. 分支重建:重写旧楼层、swipe、剧情回退时重建分支会话。
  6. 响应形态:等待 Agent 回合结束,仅把最终正文写入 choices[0].message.content;不解析、不包裹、不增加代码围栏,柏宝绘的 images/changes JSON 可原样返回。

默认材料保留策略与跨插件来源预览见仓库内 CONTEXT-ADAPTER.md;桥接仅处理显式配置的本机请求。

重要运行约束:更新插件代码后,须完全退出并重启 DSH Desktop(托盘退出,不是只关窗口)才能加载新版本;DSH Host 插件不会热替换已加载代码。vendor 与 node_modules 可能是两份独立副本,仅复制 vendor 或比对版本号不能证明进程已更新。仓库提供 deploy.mjs 做磁盘与运行指纹检查。

安装与启用

环境:DSH Desktop 已正常运行,Node.js 22.19+。安装方式以 README 为准,不要与 bundle 安装混用(两种方式同时做会在 cordis.patch.yml 里重复 st-bridge 行)。

本地链接安装(install.mjs)

在源码目录执行(路径按本机替换):

cd D:\AIGC\MOSS\ST-bridge
node install.mjs --cwd D:\AIGC\MOSS --port 43121

脚本会:在 <profile>/node_modules/ST-bridge 创建指向本目录的链接;备份并修改 <profile>/cordis.patch.yml 追加受管配置块;注册 Agent 预设 st-bridge(仅文本系统提示词,不加载 DSH 工具、技能、酒馆人格或运行时上下文)。

安装后必须完全退出 DSH Desktop 再启动,然后验证:

curl http://127.0.0.1:43121/health
curl http://127.0.0.1:43121/v1/models

预期模型列表中含 dsh-default:

{"object":"list","data":[{"id":"dsh-default","object":"model"}]}

卸载:

node install.mjs --uninstall

换机或指定 profile 时示例:

cd <本目录>
node install.mjs --cwd <目标工作区> --port 43121 --profile desktop

包/bundle 安装(二选一)

可将本包加入 profile 的 dsh.profile.bundles,或通过 dsh plugin --profile <name> add <本包> 安装;package.json 已声明 dsh.bundle.patch,会插入与 install.mjs 等价的 preset/plugin 行。若 profile 已把本包列为 dependency/bundle,install.mjs 会直接停止,避免重复插入。

更新与部署检查

在准备发布的源码目录:

node deploy.mjs --check

确认无进行中的生成任务后,从托盘完全退出 DSH Desktop,再:

node deploy.mjs --apply

手动启动 DSH 后:

node deploy.mjs --verify-running

只有磁盘副本一致,且 /health 报告的加载指纹与入口与本次源码及所选 profile 一致时才通过。默认 profile 为 ~/.dsh/profiles/desktop,桥接端口与令牌默认从 ~/.dsh/st-bridge/settings.json 读取。

重启后,DSH「设置」中会出现 ST-bridge 页:服务启停、host/port、Bearer token、CORS、模型与 Agent 预设、按客户端绑定管理、诊断与危险操作等;设置保存到 ~/.dsh/st-bridge/settings.json(权限 0600)。

典型用法:柏宝绘 dsh_session v1

推荐在普通 OpenAI 非流式 JSON 请求顶层携带 dsh_session。DSH 用 fixed_message_count / fixed_message_types 把 messages 切成「固定组」(规则,可 sync_rules 更新)与「动态组」(每轮上下文)。

示例结构(字段含义见 README 表格):

{
  "model": "dsh-default",
  "stream": false,
  "temperature": 0.6,
  "max_tokens": 8192,
  "messages": [
    {"role":"system","content":"固定前缀"},
    {"role":"system","content":"生图提示词规范及版式清单"},
    {"role":"system","content":"宿主输出协议"},
    {"role":"system","content":"输出前检查指导"},
    {"role":"user","content":"本次角色库、上下文、目标正文与任务"}
  ],
  "dsh_session": {
    "protocol_version": 1,
    "client_id": "baibai-image",
    "chat_id": "opaque-plugin-chat-identity",
    "task_id": "default",
    "request_id": "9d55d2dfce15d5210fd95890c973c039",
    "action": "generate",
    "fixed_message_count": 4,
    "fixed_message_types": ["prefix","spec","contract","check"],
    "target": {"floor":12,"swipe_id":0,"revision":"opaque-target-revision"}
  }
}

要点:

  • chat_id 须为插件生成的不透明标识,不能只用角色显示名。
  • request_id 在网络重试时必须复用;若客户端无法生成,可省略,桥接会用 body 哈希生成 auto-...,相同 body 仍幂等。
  • 同一 chat_id 后续可不传 session_id,会复用绑定;固定组变化或旧会话 410 时才重建。
  • client_id 示例:baibai-image、yuzi-phone、shujuku;不同 (client_id, chat_id, task_id) 对应不同 DSH 会话。

静态 YAML 预设(如数据库插件)可写死 chat_id,但所有调用会共用一个持久会话;需要按酒馆聊天隔离时,客户端必须把 chat_id 换成动态值。

从 baobaohui-bridge 升级

旧名 baobaohui-bridge 已改为 ST-bridge:profile 依赖改为 ST-bridge,状态目录改为 ~/.dsh/st-bridge(旧目录保留备份);旧 session-bbh-* 仍可通过本地绑定恢复,新会话使用 session-st-* 前缀;API 地址与 client_id / chat_id / task_id 协议不变。

适用场景与注意

适合谁:已在用 DSH Desktop,且酒馆侧插件(或自写客户端)能向本机 OpenAI 兼容端点 POST,并愿意用 dsh_session 管理持久 Agent 与规则档位。

不适合当作什么:脱离 DSH 的独立 HTTP 服务;换电脑需整目录复制,目标机须有兼容 DSH Desktop/Host、Node 22.19+ 与模型账号。state.json 存本机 chat_id -> session_id 映射,不建议跨机直接复用(新机器首次可能 410 后重新初始化)。默认只监听 127.0.0.1;远程调用须在面板开启 allowRemote、配置 token 与防火墙。实现按 DSH 0.2.1-rc.2 的 service/slot API;DSH 大版本变更后可能需要适配。

安全与信任:插件以当前 DSH 进程权限运行,会在本机开端口并创建 Agent 会话。安装前请阅读源码与 MIT 许可证,自行确认 token、CORS 与 allowLegacyPlain 等设置是否符合本机暴露面。

结尾

ST-bridge 把酒馆插件的长上下文调用接到 DSH 里可持久、可人工介入的 Agent 会话上,并用 dsh_session v1 统一规则组、幂等与分支重建。目录页:SkillHub ST-bridge;源码与完整字段说明:GitHub wuhehen176/ST-bridge。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye