一个面向《杀戮尖塔》的中文 AI 顾问项目,基于 Communication Mod -> Python 后端 -> 本地 HTTP API -> Vue 页面 / 游戏内浮层 链路工作。
它不是自动打牌脚本,而是一个“局内决策助手”:把当前局面的关键信息整理成更适合玩家阅读的中文建议,帮助你在奖励、商店、地图、事件和战斗阶段更快做决定。
- 双端可用
- 网页端可看状态、聊天提问、一键分析、查看历史
- 游戏内浮层支持
F8打开、F9分析、Enter提问、Esc关闭
- 中文优先
- 自动建议、手动分析、聊天答复统一展示为
结论 / 原因 / 备选
- 自动建议、手动分析、聊天答复统一展示为
- 本地链路清晰
- 后端统一提供分析能力,网页端和游戏内浮层共用同一套 localhost API
- 环境隔离
.venv、.pip-cache、.npm-cache、.gradle都固定在项目目录内
- 兜底可用
- 即使没有配置外部模型,也会返回中文兜底结果,不会直接报 500
- 想把《杀戮尖塔》做成“可对话顾问”的玩家
- 已经在用
Communication Mod,想把状态接到本地网页或游戏内浮层的人 - 不想依赖 Claude Code,但希望继续使用 OpenAI 兼容接口的人
如果你只想先跑起来,按下面走即可。
powershell -ExecutionPolicy Bypass -File .\scripts\setup_python_env.ps1$env:npm_config_cache = "E:\sts_ai_assistant\.npm-cache"
npm.cmd --prefix frontend install- 编辑
config\app_config.local.json - 参考
config\app_config.example.json
- 把
communication_mod_command.txt里的整行command=复制到:%LOCALAPPDATA%\ModTheSpire\CommunicationMod\config.properties
powershell -ExecutionPolicy Bypass -File .\scripts\start_all_local.ps1- 从 Steam 启动《杀戮尖塔》
- 在 ModTheSpire 中启用
BaseMod和Communication Mod - 进入一局游戏
- 打开
http://127.0.0.1:5173
如果你是通过 Steam 创意工坊装 Mod,请直接配合阅读 STEAM_WORKSHOP_SETUP.md。
已经完成:
- Python 后端状态接收与本地 API
- 中文三段式顾问结果
- 网页端聊天、一键分析、历史展示
- 游戏内浮层 mod 骨架和热键交互
- 工作区内虚拟环境 / 缓存 / Gradle 目录隔离
当前限制:
- 游戏状态采集仍然依赖
Communication Mod - 游戏内浮层 mod 真正执行
build之前,仍需先补齐vendor\slay-the-spire中的依赖 jar
- Python 后端
- 接收
Communication Mod推送的游戏状态 - 暴露
http://127.0.0.1:8765本地 API - 负责自动建议、手动分析、聊天问答、会话记忆
- 接收
- Vue 网页端
- 展示当前局面、最近分析、聊天历史
- 支持“一键分析当前局面”和追问
mod/Java 子项目- 提供游戏内热键浮层
F8开关浮层F9请求分析Enter发送问题Esc关闭浮层
- 本地初始化脚本
scripts/setup_python_env.ps1scripts/setup_mod_env.ps1scripts/start_all_local.ps1
- 游戏状态采集仍然依赖
Communication Mod - 本项目不自己抓屏,不做 OCR
- 游戏内浮层 mod 已有可构建骨架,但真正执行
build之前,你需要先把游戏依赖 jar 复制到仓库里的vendor\slay-the-spire Communication Mod自己的配置文件仍然在%LOCALAPPDATA%\ModTheSpire\CommunicationMod\config.properties- 这是原 mod 的既有行为
- 不是本项目额外往 C 盘写的新缓存
本项目默认把项目自身的环境、缓存和构建产物放在 E:\sts_ai_assistant 内:
- Python 虚拟环境:
E:\sts_ai_assistant\.venv - pip 缓存:
E:\sts_ai_assistant\.pip-cache - npm 缓存:
E:\sts_ai_assistant\.npm-cache - Gradle 用户目录:
E:\sts_ai_assistant\.gradle - Java mod 构建目录:
E:\sts_ai_assistant\mod\build - 游戏开发依赖副本:
E:\sts_ai_assistant\vendor\slay-the-spire
下面这套流程,是现在这个仓库最短、最稳的启动路径。
执行:
powershell -ExecutionPolicy Bypass -File .\scripts\setup_python_env.ps1这个脚本会:
- 创建
E:\sts_ai_assistant\.venv - 创建
E:\sts_ai_assistant\.pip-cache - 在虚拟环境里安装
requirements.txt
执行:
$env:npm_config_cache = "E:\sts_ai_assistant\.npm-cache"
npm.cmd --prefix frontend install如果你只想验证前端能否构建,可以继续执行:
npm.cmd --prefix frontend run build默认配置文件是:
config\app_config.local.json
模板文件是:
config\app_config.example.json
最少需要确认 llm 段配置正确,例如:
{
"llm": {
"base_url": "https://openrouter.ai/api/v1",
"api_key": "your_api_key",
"model": "your_model_name",
"site_url": "http://127.0.0.1:5173",
"app_name": "STS AI Assistant"
}
}如果你暂时不填模型:
- 后端仍然能启动
- 页面仍然能显示状态
- 顾问会返回中文兜底结果
- 但建议内容只适合拿来验证链路,不适合认真打局
Communication Mod 会在游戏启动后读取自己的 config.properties,再通过其中的 command= 拉起本地后端。
配置文件通常在:
%LOCALAPPDATA%\ModTheSpire\CommunicationMod\config.properties
当前仓库已经给你准备好了对应命令,文件在:
communication_mod_command.txt
当前内容是:
command=C\:\\Windows\\System32\\cmd.exe /c E\:\\sts_ai_assistant\\start_backend.cmd直接把这一整行复制到 config.properties 的 command= 即可。
说明:
- 这不是普通 Windows 路径写法,而是 SpireConfig 的转义格式
- 如果你的项目目录不是
E:\sts_ai_assistant,这里要同步改掉 start_backend.cmd已经内置 UTF-8 环境变量,专门给Communication Mod调用
推荐方式:
powershell -ExecutionPolicy Bypass -File .\scripts\start_all_local.ps1这个脚本会:
- 设置
.pip-cache - 设置
.npm-cache - 设置
.gradle - 设置
PYTHONUTF8=1 - 设置
PYTHONIOENCODING=utf-8 - 启动 Python 后端
- 启动前端开发服务器
如果你只想单独启动前端,也可以执行:
start_frontend.cmd这时游戏启动后,Communication Mod 会根据 command= 自动拉起后端。
从 Steam 启动《杀戮尖塔》,在 ModTheSpire 中至少启用:
BaseModCommunication Mod
然后进入一局游戏。
优先看这三个入口:
- 前端页面:
http://127.0.0.1:5173 - 健康检查:
http://127.0.0.1:8765/api/health - 状态接口:
http://127.0.0.1:8765/api/state
正常情况下:
/api/health会返回{"status":"ok"}/api/state会开始出现latest_state- 网页端会显示当前局面、最近分析和聊天历史
网页端已经是完整助手面板,不再是调试页。
你可以在这里做四件事:
- 看当前状态概览
- 看最近一次分析
- 点击“
一键分析当前局面” - 在输入框里直接提问
推荐用法:
- 进入卡牌奖励、商店、地图、事件或战斗画面
- 打开网页端
- 点击“
一键分析当前局面” - 查看三段式结果
- 继续追问,例如:
- “这层商店先删打击还是留钱?”
- “现在这张牌值不值得拿?”
- “这场战斗更应该保血还是抢节奏?”
游戏内浮层由 mod/ 子项目提供,定位是“游戏里直接问助手”,不是自动执行器。
当前热键:
F8:打开 / 关闭浮层F9:分析当前局面Enter:发送输入框里的问题Esc:关闭浮层
浮层会显示:
- 连接状态
- 最近一次分析
- 最近聊天记录
- 输入框
注意:
- 它只调用本地 HTTP API
- 不采集状态
- 不自动出牌
- 不自动点击任何按钮
如果你只想先跑通网页端,这一步可以暂时跳过。
需要放进仓库里的文件有:
- 游戏本体
desktop-*.jar BaseMod.jarModTheSpire.jar
推荐直接运行:
powershell -ExecutionPolicy Bypass -File .\scripts\setup_mod_env.ps1 -GameDir "你的游戏目录" -BaseModJar "BaseMod.jar 路径" -ModTheSpireJar "ModTheSpire.jar 路径"这个脚本会:
- 把依赖复制到
vendor\slay-the-spire - 生成
mod\local.properties - 准备仓库内
.gradle
执行:
$env:GRADLE_USER_HOME = "E:\sts_ai_assistant\.gradle"
mod\gradlew.bat -p mod build如果报下面这类错误:
Missing local.properties entriesMissing dependency jars
那不是 Gradle Wrapper 坏了,而是说明你还没把 jar 准备好。
构建成功后,jar 会出现在:
mod\build\libs
把它复制到游戏的 mods 目录即可。
当前本地 API 包括:
GET /api/healthGET /api/statePOST /api/assistant/analyzePOST /api/assistant/chat
返回内容除了最新游戏状态,还会包含:
- 最新自动建议
- 当前顾问会话
- 最近分析
- 最近聊天历史
请求示例:
{
"source": "web",
"focus": "商店"
}请求示例:
{
"source": "web",
"message": "这层商店先删打击还是留钱?"
}依次检查:
http://127.0.0.1:8765/api/health能否打开.venv是否已创建- 前端依赖是否已安装
start_backend.cmd能否单独运行logs\sts_ai_assistant.log是否有报错
优先检查:
Communication Mod是否真的启用%LOCALAPPDATA%\ModTheSpire\CommunicationMod\config.properties里的command=是否正确communication_mod_command.txt和你实际填写的内容是否完全一致logs\current_state.json是否有刷新
通常是以下原因之一:
- 你还没配置模型接口
- 模型配置填错了
- 当前还没进入一局可分析的游戏状态
当前最常见原因就是:
vendor\slay-the-spire还是空的mod\local.properties还没生成
先运行 setup_mod_env.ps1,再重新构建。
当前后端入口已经强制设置:
PYTHONUTF8=1PYTHONIOENCODING=utf-8
如果你看到的是旧日志里的乱码,那不代表新链路仍然有问题。建议直接重启游戏和后端,再看最新推送的数据。
如果你是第一次接这个项目,建议按这个顺序来:
- 先跑通网页端
- 再确认
/api/state会随着游戏变化 - 最后再编译并接入游戏内浮层
这样排错最省时间,因为主链路一旦通了,后面的浮层只是 UI 增量,不会反过来影响状态采集。