dsh-go-game:在 DeepSeek Harness 里下圍棋

前言

在 DSH 里做智能体或本地工具链时,常见需求是「有一块可交互的面板」,而不是每次改逻辑都要单独起一个前端项目。若你希望在 Harness 宿主进程里完成规则计算、对手落子和可选的 LLM 复盘,同时保留 SGF 存档和独立页面入口,dsh-go-game 把圍棋(Go / weiqi)按插件方式接进 DSH:规则与 AI 在 host 侧运行,浏览器只提交意图并渲染返回状态。

这是什么

dsh-go-game 由 raymondkm2025 维护,在 SkillHub 目录 中归类为模型推理。它面向 DeepSeek Harness,提供完整圍棋规则引擎、三档内置 AI、形势判断(随机 playout 估死子)、可选的 Harness llm 覆盤、SGF 导入导出,以及可选的 KataGo GTP 桥接;界面以 DSH 面板(shell.overlay)和独立页 /dsh-go-game/ 两种形式暴露。

插件版本在 package.json 中为 1.0.0,许可证 MIT,要求 Node.js >= 20。

核心功能

规则引擎(host 侧纯 JS)

支持 19×19 / 13×13 / 9×9,中国数子法(子加围空),可配置贴目与让子;提子、禁自杀、简单劫(立即反提禁止)、Pass / 双方 Pass 终局、认输、无限悔棋;SGF 导入导出。终局时死子需显式处理:双方 Pass 后标记死子(手动或借助估子器),再数地。规则不在浏览器里实现——面板与独立页都只 POST 意图,由 host 返回状态后重绘。

三档内置 AI(练习对手)

三档均在 host 进程内运行,README 明确说明这是练习伙伴而非职业引擎:19×19 上即使 hard 也远低于业余人类;9×9 上可下出可辨认的对局。

档位 行为
easy 入門 随机合法着,避免填自己的眼
medium 中級 贪心战术:提子、救棋、叫吃、形状/线偏好
hard 進階 在 medium 候选上,用限时随机 playout 打分

形势判断与覆盤

形勢判斷:从当前局面做随机 playout(同样避免填眼),报告很少存活的子,并给出逐点 ownership 供棋盘半透明叠加显示;这是估计,不是裁决,错处可用 標記死子 修正。默认预算约 1500 ms、40 次 playout,在 host 上跑以免阻塞面板。

覆盤(可选):调用 Harness 的 llm 服务(插件内不存 API Key),返回简短粤语点评与建议着法,面板可一键落子。未配置模型时降级为本地计分摘要。

可选 KataGo(GTP)

需要更强对手时,lib/gtp.js 通过 GTP 驱动外部 KataGo,与内置 AI 并列:面板 引擎 选择器每局选其一;引擎缺失或异常会自动回退内置对手,原因会在面板显示。

相对 workspace(插件上一级)的目录布局:

katago/engine/katago.exe
katago/engine/default_gtp.cfg   # 可选
katago/weights/*.bin.gz

环境变量(节选):

变量 默认 含义
DSH_GO_GAME_KATAGO_ROOT <plugin>/../../katago 引擎与权重根目录
DSH_GO_GAME_KATAGO_THREADS 4 搜索线程
DSH_GO_GAME_KATAGO_VISITS 250 每步 visit 上限
DSH_GO_GAME_KATAGO_TIME 8 每步秒数(限制 CPU 延迟)
DSH_GO_GAME_KATAGO_TIMEOUT 90000 GTP 命令超时(ms)

GET /dsh-go-game/engine 报告可用性、网络列表与状态;POST /dsh-go-game/engine { "model": "<file>" } 切换网络并重启进程。

代码布局与测试

文件 作用
lib/engine.js 规则:棋盘、提子、劫、计分、SGF;无 DOM、无 DSH 依赖
lib/ai.js 启发式、playout 对手、死子估计
lib/gtp.js KataGo GTP 桥
lib/index.js 会话与 /dsh-go-game/* 路由、LLM 覆盤、SGF 文件
lib/client.js 注册在 shell.overlay 的 React 面板
lib/page.html, lib/page.js 独立页(同一路由的薄视图)

README 列出 98 个测试用例(engine / AI / host 路由 / GTP / engine fallback 等)。在仓库内可直接运行各测试文件,例如:

node test/engine.test.mjs
node test/ai.test.mjs
node test/host.test.mjs
node test/gtp.test.mjs
node test/engine-fallback.test.mjs
node test/katago-live.mjs --root=<katago dir>

说明:文档注明在本机用 node --test 可能因沙箱拒绝 piped 子进程而失败,故建议按文件单独执行。

安装与启用

官方 README 说明:因 agent 沙箱无法写入 workspace 外路径,profile 注册需在本机普通终端手动完成(三步)。以下命令与路径来自 README 原文(示例为 Windows 与 link: 本地路径,请按你的实际插件目录修改):

  1. 在激活 profile 的 package.json(%APPDATA%\dsh-desktop\harness\profiles\web)中:在 dependencies 增加 "dsh-go-game": "link:C:/AppDev/DSH_WORKSPACE/dsh-go-game",并在 dsh.profile.bundles 追加 "dsh-go-game"。

  2. 将 node_modules 指到源码目录(DSH 启动时不跑 pnpm install,链接缺失会静默失败):

mklink /J "%APPDATA%\dsh-desktop\harness\profiles\web\node_modules\dsh-go-game" "C:\AppDev\DSH_WORKSPACE\dsh-go-game"
  1. 重启 DSH。

任意阶段可用 check-plugin.cmd(或 check-plugin.ps1)只读检查 package → 注册 → node_modules → live route 四段链路。

存活验证:与其它本地插件一样,loopback 上路由无需鉴权;GET /dsh-go-game/status 返回 JSON 即可最快确认服务在线。

典型用法

  • 在 DSH Web profile 启用 bundle 后,通过 shell.overlay 打开圍棋面板,或浏览器访问 /dsh-go-game/ 独立页。
  • 对局会话在 host 内存中(12 小时空闲清理),由面板/页生成的 client id 区分;重启 DSH 会清空会话。SGF 持久化在 <workspace>/.dsh-go-game/games/。
  • 需要神经网络对手时:按上文布局放置 KataGo,在面板选 引擎,必要时用 POST /dsh-go-game/engine 切换权重文件。
  • 需要文字复盘时:在 Harness 中配置好 llm 服务后使用 覆盤;未配置则看到本地计分摘要。

适用场景与注意

适合:在 DSH 本地环境里练棋、试 SGF、演示 host 侧游戏规则与路由;在已配置 LLM 时做轻量覆盤;在 CPU 上可选接 KataGo 作更强对手(需自行准备引擎与权重)。

注意:

  • 插件以当前 DSH 进程权限运行,安装前请阅读 源码仓库 与 MIT 许可证,并核对 lib/index.js 等路由与文件访问行为。
  • README 尚未在 live GUI 上完全验证的部分包括:shell.overlay 内面板渲染、指针事件,以及对接真实 provider 的 LLM 覆盤路径;引擎、AI 与各路由已有离线测试覆盖。
  • SkillHub 为社区插件目录,与 DeepSeek / 幻方无官方从属关系;安装方式以 README 的手动 profile 步骤为准,勿假设存在统一的 dsh plugin add 一键命令。

结尾

dsh-go-game 把圍棋规则、练习用 AI、形势估计、可选 LLM 覆盤与 SGF 收进一个 DSH 插件,并可选桥接 KataGo。若要查看简介与分类,可打开 SkillHub 目录页;实现细节、环境变量与测试命令以 GitHub 仓库 README 为准。

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

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

小夜