dsh-go-workbench
Verifieddsh-go-workbench · v0.2.1 · MIT · Web UI
DSH 围棋工作台:对弈(提子/打劫/禁着点)、18 级~业余 9 段定级体系(RP/升降级/让子/档案落盘)、内置 AI 主动走子、大模型接入(复用 dsh 已有模型)、KataGo 远程引擎(本地一键启停/云端,失败自动回退)、形势分析与逐手落子理由(双面:host + client,零运行时依赖)
Install
dsh plugin add dsh-go-workbench Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Published to npm without a public repository. Inspect the package contents before installing.
Tags
Readme
dsh-go-workbench
DSH(DeepSeek Harness)的围棋工作台插件:侧边栏「围棋」入口打开一块 9/13/19 路棋盘, 支持人机对弈与双人对弈;内置 AI 会在轮到自己时主动落子(不需要你在界面上再点一次), 也可以把对手切换成你在 dsh 里已经配置好的大模型,或接上真正的神经网络棋力 (本地/云端 KataGo,见 docs/engine-remote.md);每一步棋都会写明 「为什么这么下」,并与同一时刻的形势判断(实地 / 外势 / 弱棋 / 关键战斗 / 胜率)一一对应。
快速开始
本包已发布到 npm:dsh-go-workbench(https://www.npmjs.com/package/dsh-go-workbench)。
非桌面 profile 直接按包名装:
dsh plugin --profile web add dsh-go-workbench # 或 [email protected] 钉版本
桌面应用用的 desktop profile 由 Electron 应用独占管理,所以 dsh plugin --profile desktop …
会被拒绝(error: profile "desktop" is managed exclusively by the Electron application)。
装进 desktop profile 请用下面任一方式:
方式一(推荐,走应用):在应用的插件管理界面里选择「从本地目录安装」,
目录选 packages/dsh-go-workbench,然后重启应用。
方式二(手工,等价于应用内部动作):
1) 把本目录复制到 %USERPROFILE%\.dsh\profiles\desktop\dsh-go-workbench
2) profile 的 package.json 里:
dependencies 增加 "dsh-go-workbench": "file:./dsh-go-workbench"
dsh.profile.bundles 增加 "dsh-go-workbench"
3) 在 profile 目录执行 pnpm install
4) 重启应用
非 desktop profile(例如自建的 web)可以直接用命令行:
dsh plugin --profile web add file:D:/Desktop/git/dsh-electron/packages/dsh-go-workbench
必须用 file: 而不是 link:(link 会让运行期相对导入按物理路径解析而失败)。
本包声明了 dsh.bundle.patch,宿主会自己应用插件行 patch,
不需要手工改 profile 的 cordis.patch.yml。细节见 docs/installation.md。
安装完成后有两个入口:
- 界面:侧边栏「围棋」→ 面板(棋盘 + 设置 + 形势判断 + 棋谱理由);
- 会话命令:
/go(/go help看全部子命令,例如/go new 19、/go move D4、/go ai model、/go analyze)。
装完就能用,不需要任何模型
插件本体 749 KB、零运行时依赖、不含任何模型。默认对手是内置引擎(纯 JS、离线), 装完直接下。想要更强的棋力有两条零下载的路,和一条要下载的路:
| 对手 | 要不要下载 | 怎么开 |
|---|---|---|
| 内置引擎(默认) | 不用 | 装完即用 |
| 大模型 | 不用 | 复用你在 DSH 里已配好的 provider/model:面板「对手」选「大模型」即可 |
| 远程引擎·本地 KataGo | 要:引擎 ~6 MB + 权重 93 MB 起(最小可用约 193 MB) | 见 docs/models.md:下哪个 zip、权重放哪、怎么配、怎么验证 |
| 远程引擎·云端 | 不用 | 填一个 KataGo 兼容服务的 URL(+ Token 环境变量) |
权重体积远超一个插件的合理范围,所以不会随插件一起装。两条获取路径:
- 让 DSH 自己装(最省事):面板「本地引擎」行缺配置时会出现**「复制安装指令」按钮,
点一下复制那段自包含的提示词(命令行等价物
/go engine prompt),整段粘给任意 DSH 会话—— 助手会看你的显卡选后端、从实测链接下载引擎与权重、放到会被自动探测的目录**(放对就不用改配置 也不用重启)、跑katago.exe version自检。它做不到的两件事(改配置后重启、绕过文件沙箱)写在提示词里; - 自己按文档来:docs/models.md 把「下哪个后端 / 哪个权重 / 放哪 / 怎么验证」 写成了可照抄的步骤(下载链接都实测过)。
能力
| 能力 | 说明 |
|---|---|
| 对弈规则 | 9/13/19 路;提子、自杀禁着、位置超级劫(可配简单劫)、弃一手、认输、终局数子(数目法/贴目) |
| 内置 AI | 离线启发式引擎,三档难度;主动走子时给出「提子 / 救棋 / 打吃 / 连接 / 切断 / 开局占角」等特征理由 |
| 大模型 AI | 复用 dsh 已配置的 provider/model(ctx.llm.listProviders/listModels),严格 JSON 走法契约;给出非法走法或调用失败时自动回退内置引擎并在界面说明原因 |
| 远程引擎 | 接 KataGo 兼容的 HTTP 接口:本地用 tools/katago-http.mjs 把本机 KataGo 包成服务(离线、¥0、CPU 可跑),或指向社区/自建云端;按顺序回退 本地 → 云端 → 内置引擎,失败后端指数退避冷却。详见 docs/engine-remote.md |
| 主动下发 | AI 轮到自己时由宿主进程定时器自动落子,落子后通过长轮询把新局面对推给界面(浏览器侧没有服务端推送通道,因此用长轮询) |
| 形势分析 | 实地(洪泛填充 + 封闭判定:只有真被围住的空区才算确定地)、外势(有界 BFS 影响力)、弱棋(气数 ≤ 3)、关键战斗(双方影响力交界 + 打吃加成)、估算子数与胜率(贴目按盘面定型程度折算,空盘不会显示「白领先 7.5 子」),并生成中文判断 |
| 落子理由 | 每一手记录 reason / tags / eval:AI 手来自引擎或模型的走子说明,用户手会与引擎推荐点对照给出「缓手 / 偏小 / 正着」等评价,并附上该手前后的胜率变化 |
| 棋谱 | 逐手列表 + 点击回放任意历史局面;导出 SGF;复制文本棋盘 |
| 命令 | /go 斜杠命令覆盖全部操作,便于在会话里直接下棋或询问局势 |
配置
插件行由宿主自动插入,默认不带 config,一个字不写也能用(所有键都有默认值,本地引擎会自动探测)。
要改就在 profile 的 cordis.patch.yml 里给这一行加 config:
- id: go-workbench
name: 'dsh-go-workbench'
config:
size: 19
komi: 7.5
localEngine:
katago: 'D:/Software/AI/KataGo/katago.exe'
model: 'D:/Software/AI/KataGo/models/kata1-b18c384nbt-s9996604416-d4316597426.bin.gz'
完整键表、取值范围、自动探测顺序、验证清单与常见错误见 docs/configuration.md。 一句话版本:
| 键 | 默认 | 说明 |
|---|---|---|
size / komi |
19 / 7.5 |
初始棋盘与贴目(size 必须是整数) |
aiMode / aiColor / level |
'engine' / 2 / 'normal' |
初始对手、AI 执子、内置引擎难度 |
autoPlay / delayMs |
true / 900 |
AI 是否自动行棋、思考延时 |
localEngine |
自动探测 | 本地 KataGo 一键启停(katago / model / humanModel / 线程与端口) |
ratingFile / rating |
~/.dsh/go-workbench-rating.json |
定级档案与定级参数 |
remoteVisits / remoteTimeoutMs / remoteBackends |
100 / 120000 |
远程引擎,详见 docs/engine-remote.md §4 |
配置只在插件加载时读一次(改完重启应用)。面板内的设置(对手、模型、执子、难度、延时、温度、 叠图开关、搜索量、超时)会在运行时写回宿主、立即生效,无需改配置或重启。
原理一句话
宿主半持有唯一真源(棋局 + AI 定时器 + 模型绑定),浏览器半只是一个渲染器:
它通过 /go-workbench 这个 RPC 通道读写状态;当 AI 主动落子使 rev 递增时,
挂起的 wait 长轮询立刻返回完整快照 —— 于是「AI 自己走了一步」对界面来说就是一次静默刷新。
文档
| 文档 | 内容 |
|---|---|
| docs/installation.md | 安装、升级、卸载,profile 清单与 patch 的关系 |
| docs/models.md | 模型与对手:四种对手各自要准备什么、KataGo 下哪个后端/权重(实测链接)、体积与内存、怎么验证 |
| docs/configuration.md | 配置参考:完整键表、取值范围、自动探测顺序、验证清单、常见错误 |
| docs/usage.md | 面板与 /go 命令的完整用法、形势判断与理由怎么读 |
| docs/engine-remote.md | 远程引擎(KataGo)接入:启动本地包装器、云端配置、胜率视角、回退链、实测性能与排错 |
| docs/architecture.md | 双面结构、RPC 端点表、长轮询与主动下发、分析与评估算法 |
| docs/development.md | 代码地图、测试怎么跑、如何调整引擎权重与提示词 |
| docs/troubleshooting.md | 找不到入口 / 连不上宿主 / 模型不按格式走子等常见问题 |
测试
cd packages/dsh-go-workbench
node test/run.mjs # 全部用例:规则、让子、定级、分析、引擎、会话、宿主接线、客户端渲染、形势判断、文档一致性
npm run check # 对全部源码做 node --check 语法校验
测试是零依赖的(自带 test/harness.mjs),不需要真实模型、不需要浏览器;
客户端渲染用例在能找到 React 时会用 react-dom/server 真渲染一遍棋盘与面板,找不到就跳过渲染类用例。
版本与兼容
- 版本 0.1.0(npm 首发)/ license MIT;版本号语义按仓库
docs/VERSIONING.md——0.x 阶段第 2 位只留给 破坏性变更与大功能上线,第 3 位为修复与小改,所以一轮修复整体承载在一个版本号里,本包首发前完成的 修复轮(见下)整体落在0.1.0,0.1.1及以后才对应"发布之后"的修复; - 目标运行时:DSH 桌面 profile(本插件按 0.2.0-rc.2 的服务面编写),Node ≥ 22;
- 客户端半依赖 shell 提供的 React 18(
peerDependencies),不额外打包 React; - 插件自身零运行时依赖(不引入任何第三方库),宿主半是 ESM,浏览器半是单文件 CJS 脚本;
- 近期修复摘要(均已包含在
0.1.0内,因此不另占补丁号):- 模型下拉为空:
listProviders/listModels/currentSelection都是异步接口,此前漏await, 每个 provider 都解析成 0 个模型、异常又被静默吞掉 → 补齐await并改为惰性获取模型服务,同时把 「没有任何 provider / 有 provider 但无模型 /ctx.llm不可用」三种原因显式回显到面板; dsh.client.inject与实际使用的服务对齐(ui-renderer→@deepseek-ai/dsh-client-ui-slots,面板用的是ctx.slots);- 模型请求体按内核契约改写:
system折叠进 user 文本、content用[{type:'text',text}](此前多传的system字段在内核里并不存在),流式响应按block-start/text-delta/block-end/usage/finish解析;
- 模型下拉为空:
- 已知边界(都在 docs/usage.md 里展开):
- 数子用「当前盘面 + 未判死子」的简式数目法,不提掉死子就算给对方实地;
- 默认位置超级劫;9/13/19 路;让子局在规则层已支持(
GoGame的handicap,见docs/rating.md§14), 但会话层与界面入口排在 S3/S4,当前尚未开放;不支持联网对局; - 大模型走法依赖模型遵守 JSON 契约,不遵守时会自动回退内置引擎(界面会提示原因);
- 远程引擎需要你自己先把对端跑起来(本地包装器或云端服务):插件不自带引擎、不下载权重、 也不代为启动进程。本地 CPU 推理适合复盘与形势分析,实时对弈建议用云端后端(见 docs/engine-remote.md §10 的实测数据)。