九个月后:用 Go 和 Claude 构建高级星际争霸报告工具

HN Claude Code Adoption 2026-07-21T14:55:59.234446

九个月后:用 Go 和 Claude 构建高级星际争霸报告工具

故事的起点

15 岁那年,我在布宜诺斯艾利斯市中心的一场 LAN Party 上认识了最好的哥们,那时《星际争霸:母巢之战》刚火起来。我俩当场就迷上了这款游戏。

如今已是 2026 年,我们都有工作,住在世界两端,但几乎每个周末还会通过 Zoom 约战、瞎玩。这份持续几十年的热情,催生了一个想法。

周末通话里的点子

“要是我们能用自然语言直接问 AI 关于刚才那局游戏的问题,会怎样?”

比如:

最自然的实现方式是搭一个 MCP 服务器,但喂给它的数据从哪来?

母巢之战每局结束后会写一个录像文件(.rep),游戏客户端可以用它回放。但 MCP 读不了星际的录像文件。

于是我去找解析器,András Belicza 的 screp 是自然之选(它本身就用 Go 写的)。

就这样,screpdb 诞生了:

  1. screp 解析录像
  2. 结构化输出,存入关系数据库(SQLite)
  3. 前面挂一个 MCP 服务器

第一个提交落在 2025 年 9 月 30 日

从聊天机器人到报告工具

后来我们真的用它玩了几局,感觉不太对。对着聊天机器人打字问问题,总觉得别扭。

早期版本:Claude 通过 MCP 查询 screpdb 并自己绘制图表

第一个版本:Claude 通过 MCP 查询 screpdb 并自己绘制图表。功能很强大,但每次都要让聊天机器人重新构建视图,很快就腻了。

早期版本:Claude 通过 MCP 查询 screpdb 并自己绘制图表

我们真正想要的不是一个对话工具,而是一个报告工具

不过,这个开发工作量就大多了。在动手之前,我想先看看市面上已经有哪些现成的选择。

已有的工具

BWChart 是我们在 2003 年就开始使用的元老级工具。它的最后一个版本停在 2017 年,之后被 SCRChart 取代。关于它的完整历史,可以查看 Liquipedia 页面。

BWChart 1.04C,2003 年的经典之作,展示每名玩家的 APM 曲线和指令日志

BWChart 1.04C,2003 年的经典之作,展示每名玩家的 APM 曲线和指令日志

SCRChart 是 BWChart 在 2019 年的继承者,不过同年似乎就停止维护了。作为一款 Java 应用,它支持跨平台运行。

SCRChart 在一场人族 vs 虫族的对局中绘制 APM 和有效 APM 的曲线图

SCRChart 在一场人族 vs 虫族的对局中绘制 APM 和有效 APM 的曲线图

RepMastered 是 András Belicza 开发的优秀网页数据库和浏览器内分析工具,基于他自己的 screp 解析器(也就是整个项目的基石)。它收录了超过 1 亿个录像回放,功能非常完善:

RepMastered 的浏览器内游戏页面,包含动画地图视图

RepMastered 的浏览器内游戏页面,包含动画地图视图

vespene.gg 是最新(2026 年)也是最大胆的一个工具。据其作者 dethsc 在 TL.net 的介绍帖里回答我的提问时所说,它是对 SC:R 二进制文件的全新逆向工程。你上传一个录像,就能在浏览器里观看游戏回放,附带各种实时数据、AI 教练、录像数据库、锦标赛、Twitch 直播等丰富功能。

vespene.gg 在浏览器中播放《星际争霸:重制版》录像,带有实时建造顺序提示和 AI 教练

vespene.gg 在浏览器中播放《星际争霸:重制版》录像,带有实时建造顺序提示和 AI 教练

历时九个月:用 Go 和 Claude 打造星际争霸高级报告工具

这些工具都很棒,但并没有完全覆盖我们的需求。我们希望在游戏过程中看到更高层次的语义

不过,在动手构建报告工具之前,我首先得弄清楚:从 replay 文件中提取语义到底有多棘手。

为什么星际争霸 replay 文件(暗地里)异常难搞

星际争霸的 replay 并不会记录“发生了什么”,它只记录命令:每个玩家下达的指令流。

游戏引擎和 replay 的工程实现非常有趣,但这并非本文重点。如果你感兴趣,我通过 vibe-coding 方式做了一个教学站点,讲得更深入但依然通俗易懂:Inside Brood War

Inside Brood War,一个交互式解谜站点,展示 Brood War 引擎和 replay 的工作原理

Inside Brood War,一个交互式解谜站点,展示 Brood War 引擎和 replay 的工作原理

简而言之:要想知道游戏中究竟发生了什么,你需要把命令输入到游戏引擎中去执行。但截至星际争霸重制版(SC:Remastered),并没有一个无头 API(headless API)来做这件事(对于重制版之前的版本,有 BWAPI 和 OpenBW 可用,但各有取舍;dethsc 对重制版的反向工程代码是闭源的)。

这意味着,单凭 replay 文件,有些信息永远无法回答:

游戏内界面,高亮显示资源、人口和 APM 面板:“Replays 不记录这些!”

游戏内界面,高亮显示资源、人口和 APM 面板:“Replays 不记录这些!”

而且命令本身也很嘈杂(noisy):

查看原文