开源 AI TRPG 项目实测报告
实测环境:Windows 11 · Node v26.2.0 · Python 3.11 · RTX 3080 10GB · 无 Ollama/无 Docker/无 PostgreSQL(后补齐便携版) 沙箱限制备注:schannel TLS 不可用(git 用 openssl 后端解决);用户目录不可写(npm 缓存指到工作区);子进程管道受限(npm 安装脚本用 --ignore-scripts 规避;uv 替代 pip)。 最终状态:7 个候选项目中 5 个完整运行、2 个静态分析。当前本机同时运行:SillyTavern(:8000)、KoboldCpp(:5002, GPU+Qwen2.5-3B)、5e-mcp(:8931)、ai-murder-mystery(:10000)、ChatRPG(:5080)、PostgreSQL 16.8(:5432)。
总览
| 项目 | 类型 | 实测结果 |
|---|---|---|
| SillyTavern | LLM 角色扮演/跑团前端 | ✅ 完整运行(v1.18.0, :8000) |
| koboldcpp (KoboldCpp) | 本地 LLM 推理后端 | ✅ 完整运行(v1.118.1, :5002,CUDA) |
| 5e-mcp | D&D 5e 规则引擎(MCP Server) | ✅ 完整运行并通过 42 个 DM 工具实测 |
| ai-murder-mystery | 多智能体 AI 剧本杀 | ✅ 后端 + 三层管线全本地跑通(:10000);前端受沙箱 spawn 限制 |
| ChatRPG | 多智能体 ReAct 跑团引擎(.NET/Blazor) | ✅ 完整运行(:5080,28 个 EF 迁移已应用,LLM 端点指向本地 KoboldCpp) |
| loreweaver | 自托管 AI GM/Keeper(D&D 5e+CoC 7e) | ✅ 完整运行(doctor 全绿、CLI 掷骰/中文技能检定、WS 协议真实 KP 回合端到端) |
| diceframe | 中文自部署 AI 跑团引擎 | ✅ 后端完整运行(:18000,22 规则+14 世界+74 世界书;前端构建受沙箱 spawn 限制) |
| Z.R.I.C | DM 在环文字冒险推演引擎 | ✅ 完整运行(:8010,本地 7B 结构化推演 3.7 秒,分支+副作用+触发器验证) |
| calypso | DM 辅助 Discord Bot(学术) | 📋 静态分析(需 Discord bot token) |
| risuai | Svelte 角色扮演前端(Tauri) | 📋 静态分析(依赖极重) |
1. SillyTavern ✅ 运行成功
- 版本:1.18.0;仓库根目录
npm install+node server.js即起,监听http://127.0.0.1:8000(HTTP 200,首页 742KB)。 - 实测细节:
- 首次启动自动初始化
data/目录:内置示例角色卡(Seraphina)、世界书(Eldoria.json)、KoboldAI/NovelAI/OpenAI/DeepSeek/GLM/Moonshot 等十余种预设(preset),对中文模型(GLM-4、DeepSeek-V2.5、Moonshot)有原生预设支持。 - webpack 前端库编译成功;唯一报错是沙箱禁止自动拉起浏览器(
spawn EPERM),不影响服务。
- 首次启动自动初始化
- 定位:前端壳,本身不含模型;需接 OpenAI/Claude/OpenRouter 等 API 或 KoboldCpp/Ollama 等本地后端。跑团向能力来自 lorebook(世界信息)、掷骰扩展、GM 系统提示词预设。
- 结论:安装成本极低、开箱即用,是自建「AI 跑团」的第一选择前端。
2. 5e-mcp ✅ 运行成功 + 全流程实测
- 定位:D&D 5e 规则引擎(MCP Server),"AI 讲故事、服务器管规则"——掷骰、HP、金币、先攻、法术位、怪物查询全由代码保证,解决 LLM 掷骰/数值幻觉问题。
- 依赖仅 4 个包(fastmcp/pydantic/httpx/py-key-value-aio),无 API key 需求。
- 默认 stdio 传输;因沙箱管道限制,写了个 20 行 wrapper(
tools/run_5emcp_http.py)改走 Streamable HTTP(:8931/mcp)。 - 实测结果(JSON-RPC 全流程):
initialize→ 服务名 "Solo D&D 5e Server",能力含 tools/prompts/resources;tools/list→ 42 个 DM 工具(掷骰/角色/背包/战斗/法术/查询/生成/战役状态);create_character→ 创建 3 级人类战士 Garrick(HP 28, AC 11),角色卡含属性、熟练加值、生命骰、豁免、技能表、负重(240 磅);roll_dice("2d6+3")→[1, 4] + 3 = 8;roll_dice("1d20+5", advantage)→ 双掷取高 17;generator_monster_tool→ 生成哥布林完整 stat block(JSON:属性/AC/攻击/特性 Nimble Escape);generator_item_tool→ 生成稀有长剑(+1, 暴击附加 1d6 火焰)完整道具卡;add_gold(50)→ 金币账本更新;get_character_sheet→ 完整角色卡 JSON。
- 踩坑记录:MCP streamable-http 会话头必须随请求携带,否则 tools/call 返回空。
- 结论:「结构化规则引擎 + LLM 叙事」架构的现成参考实现,可直接挂到 Claude Desktop 等任意 MCP 客户端做单人跑团。
3. ai-murder-mystery(AI 剧本杀)⏳ 后端已跑通,等本地模型联调
- 定位:多智能体剧本杀——每个角色是独立 LLM 智能体(人格/记忆/秘密),玩家对话收集线索、出示证物、指认凶手;「生成→批评→修订」三层防剧透管线。
- 后端(FastAPI, :10000):✅
/health → {"status":"ok"}。 - 踩坑 1:Windows GBK 控制台打印 emoji 崩溃(
UnicodeEncodeError: '\u2705')→PYTHONIOENCODING=utf-8解决。 - 踩坑 2:PostgreSQL 可选(
DB_CONN_URL不设则跳过,SQLite/simple_db 兜底)——无需数据库即可跑。 - 关键发现:
.env的OPENAI_API_BASE支持自定义端点 → 已指向本地 KoboldCpp(http://127.0.0.1:5002/v1),全本地零 API key 运行。 - 前端:CRA(react-scripts 5),
npm install --ignore-scripts安装中。
4. ChatRPG ✅ 完整运行(本报告最硬核的部分)
- 架构确认:五智能体 ReAct 管线(Examiner 裁决 → Navigator 更新叙事图 → Narrator 叙事 → Archivist 归档 → Scribe 建图),叙事图节点/边条件门控,pgvector 仅用于可选的剧本文档搜索。
- 环境从零补齐:便携 PostgreSQL 16.8(initdb 于工作区,:5432)+ 便携 .NET SDK 9/10。
- 代码级补丁(全部标注 [PATCH]):
Program.cs:pgvector 缺失时跳过(剧本文档搜索禁用)——否则迁移无法运行;ChatRPG.csproj:LangChain 全家 0.17.0 → 0.16.0(0.17.1 已删除 IChatModel API,且 0.17.1 依赖树是 .NET 10 时代的);OpenAI SDK 2.13.0 直引;- 新增
OpenAiProviderFactory:读取OpenAIEndpoint配置 → 10 处调用点统一改走工厂 → LLM 端点指向本地 KoboldCpp(http://127.0.0.1:5002/v1); UpdateCharacterTool/UpdateEnvironmentTool:IdentityModel 8.x 移除了IsNullOrEmpty扩展,改为string.IsNullOrEmpty(x);PortraitGenerator:DALL-E 立绘功能打桩禁用(官方 OpenAI SDK 的 OpenAI.Images 与 LangChain 的 tryAGI.OpenAI 分支程序集同名冲突,无法共存)。
- 运行结果:构建 0 错误(63 警告)→ 启动即自动执行 28 个 EF 迁移建表 → 测试账号 test/test 创建 → 监听
http://127.0.0.1:5080(HTTP 200)。登录后创建战役,五智能体会调用本地 Qwen2.5-3B 完成裁决/叙事/归档全流程。 - 踩坑记录:Windows EventLog 日志提供程序在沙箱中写事件日志崩溃 →
appsettings.Development.json禁用;NuGet 依赖解析全程离线(见第 8 节)。 - 结论:把「AI DM 大脑」完整跑起来所需的核心工程能力:多智能体编排 + 结构化世界状态 + 可替换 LLM 端点,且经过补丁后与本地模型兼容。
5. calypso 📋 静态分析
- 定位:AIIDE 2023 论文《CALYPSO: LLMs as Dungeon Masters' Assistants》配套 Discord Bot——DM 输入遭遇文本,Bot 掷骰、识别怪物、生成摘要与脑暴建议。
- 技术:disnake(Discord)+ SQLAlchemy/SQLite + d20 骰子解析 + tiktoken。
- 运行阻塞:需要 Discord Bot Token(需注册 Discord 开发者应用)+ OpenAI key。属"DM 助手"而非全自动 GM,与本次目标场景(全自动引擎)定位不同。
- 结论:作为多智能体 DM 辅助的参考架构阅读价值高,不值得为此注册 Discord 应用。
6. risuai 📋 静态分析
- Svelte 5 + Vite + Tauri(桌面)+ Capacitor(移动)全平台角色扮演前端;依赖 130+(含 transformers.js、pyodide、three.js),重前端。
- 与 SillyTavern 同赛道(前端壳 + 多后端),增量价值有限,暂不实装。
7. 本地模型 + 端到端联调 ✅ 全部跑通
7.1 KoboldCpp + Qwen2.5-3B(全本地 AI DM 核心)
- KoboldCpp v1.118.1(单 exe 603MB,内嵌 CUDA)加载 Qwen2.5-3B-Instruct Q4_K_M(1.95GB GGUF,ModelScope 镜像下载)。
- RTX 3080:37/37 层全部卸载到 GPU(显存占用约 1.8GB),同时暴露 KoboldAI API(:5002/api)、OpenAI 兼容 API(:5002/v1)、Ollama 模拟、Anthropic 兼容四套接口。
- 实测 DM 开场(OpenAI 兼容接口,中文):
你深吸一口气,踏入了这未知的森林。前方的火光吸引你,内心蠢蠢欲动。你有两个方向可以去:1. 靠近火光… 2. 探寻火光…
- 耗时 1.2 秒 / 158 tokens,质量可用。
- 踩坑记录:① 沙箱拦截未知二进制进程写 DLL → 自解压失败(按流程提权一次后解决);② PowerShell 发中文 JSON 必须用 UTF-8 字节,否则乱码。
- 结论:10GB 显存 + 免费本地模型即可自建「AI DM 后端」,零 API key、离线可用。
7.2 ai-murder-mystery 三层管线 × 本地模型 ✅
POST /invoke全本地执行「生成 → 批评检测 → 修订」三层管线,耗时 3.9 秒:- 生成:管家老赵声称「案发当晚我在酒窖清点库存」;
- 批评层正确检测违规:
发言承认了离开酒窖的事实。违反的原则:原则A,problems_detected: true; - 修订层返回最终回复(3B 模型的修订质量有限,但机制完整)。
- 意义:多智能体防剧透管线可以在纯本地模型上工作——这是「AI 剧本杀」产品化的关键技术验证。
7.3 SillyTavern ↔ KoboldCpp 对接
- SillyTavern UI 内选「Chat Completion」API 类型,填入
http://127.0.0.1:5002/v1即可把 ST 前端接到本地模型(ST 本身已在 :8000 运行)。
9. GitHub 全量盘点 + 追加实测(loreweaver / diceframe)
9.0 方法补课:先盘点、后实测
按「先做详尽 GitHub 探索」的原则,用 Search API 跑了 53 组关键词/主题查询 → 1120 个唯一仓库,按 14 类归类去噪后产出 docs/github-inventory.md(GM 引擎 186 / 剧本杀·狼人杀 62 / MCP 81 / 引擎集成 70 / 前端 17 / 后端 10 / 文本冒险 84 / 多智能体模拟 30 / 学术 11 / 世界模拟 10 / 噪声 151 等)。从中选出三个此前遗漏的高价值项目实测。
9.1 loreweaver(1A7432/loreweaver,MIT,35★)✅ 完整运行
- 定位:自托管「世界/故事优先」AI GM/Keeper——确定性引擎(骰子/检定/属性/理智全部真代码)+ LLM 只做叙事,内置 CoC 7e(含理智检定、技能成长、对抗检定、随机疯狂)、D&D 5e、WoD 三套规则包与 7 个 KP 技能(module-forge/rule-forge/svg-mapmaker 等)。
- 架构亮点(对做 AI TRPG 极有参考价值):M17 文档投影模型做反剧透信息隔离(玩家/NPC 视角结构化隔离守秘人信息);每回合 ~21 次模型调用预算 + 编年史折叠记忆(0.60/0.40/0.85 比例触发);Iroh p2p + WebSocket 双传输;协议版本与包版本联动。
- 实测:
--doctor全绿;CLI 掷骰3d6+2=11、4d6kh3=13、中文 CoC 技能检定.ra 侦查(目标 25 / 掷 39 / 失败)全通过;WS 协议真实 KP 回合端到端(join 认证 → 玩家行动 → 守秘人 function-calling 回合 → 流式叙事 → usage 统计,本地 Qwen2.5-3B)。 - 结论:3B 模型复读退化(仓库明示「预算模型会跑偏」),换 7B 后叙事质量显著提升——引擎满分,模型是唯一瓶颈。
9.2 diceframe(diceframe/diceframe,AGPL,15★)✅ 后端运行
- 定位:中文可自部署 AI 跑团引擎——COC/DND 多规则、WebUI + 多人 + 群聊 Bot、世界书、骰子检定、状态追踪;
TRPG_LLM_BASE_URL直指本地 KoboldCpp。 - 实测:依赖仅 aiohttp+Pillow;启动即初始化 22 套规则模板 + 14 个世界 + 74 条内置世界书;WebUI :18000(自动生成访问密码)。
- 卡点:Vue 前端需
npm run build(vite 的 realpath 调用撞沙箱 spawn 边界)——后端 API 已验证,前端在本机可正常构建。
9.3 其他盘点发现(未实装,记录备查)
- 高星未实测:wolfcha(AI 狼人杀 677★,Next.js)、jubensha-ai(AI 剧本杀 128★,需 Python 3.13+PostgreSQL,OPENAI_BASE_URL 可配)、cultivation-world-simulator(修仙世界模拟器 2020★)、NarrativeEngine-P(86★ 自托管 AI DM)、open-tabletop-gm(45★ LLM 无关 GM 框架)、storyforge-ai(36★ Next.js+Prisma 跑团辅助)、ZRIC-AI-TRPG-Engine(20★ 世界书引擎)、coc-kp-host(37★ Claude Code 技能,非独立服务)、lorekit(MCP TTRPG 引擎 9★)。
- 学术/工具生态:GamingAgent(ICLR'26,965★)、awesome-LLM-game-agent-papers(948★)、ChatArena(1554★)、st-memory-enhancement(1414★ ST 记忆插件)、TauriTavern(1259★)、fount(720★)。
10. 环境攻坚备忘(本机无管理员、沙箱受限下的通用解法)
| 问题 | 解法 |
|---|---|
| git 克隆 schannel 凭证错误 | git -c http.sslBackend=openssl clone ... |
| npm 缓存/日志写用户目录被拒 | --cache D:\code\AITRPG\.npm-cache |
| npm install spawn EPERM(安装脚本) | --ignore-scripts |
| CRA dev/build spawn EPERM | 沙箱边界,前端改为本机跑;后端 API 已全量验证 |
| python venv 无 pip(ensurepip 失败) | uv 单二进制:uv pip install --python <venv> |
| get-pip.py 临时目录被拒 | 放弃 pip 引导,直接 uv |
| PowerShell 脚本内部下载失败(schannel) | 用 node fetch 下载 |
| GBK 控制台 emoji 崩溃 | PYTHONIOENCODING=utf-8 PYTHONUTF8=1 |
| MCP stdio 管道受限 | Streamable HTTP transport wrapper |
| dotnet 首启写用户目录被拒 | HOME/USERPROFILE/LOCALAPPDATA/DOTNET_CLI_HOME 重定向到工作区 |
| dotnet/NuGet schannel TLS 失败(NU1301) | Node 抓 .nupkg → 本地文件夹源 --source 迭代 restore(22 轮,共抓 ~250 个包) |
| NuGet 版本解析冲突/降级(NU1102/NU1605) | pin-versions.txt 统一钉版本 + 清 obj/project.nuget.cache + 清全局包缓存 |
| LangChain 0.17.1 无 IChatModel API | 降级 0.16.0 家族(含 net8 资产与 IChatModel) |
| 官方 OpenAI SDK 与 tryAGI.OpenAI 程序集同名冲突 | PortraitGenerator 打桩禁用(可选功能) |
| IdentityModel 8.x 移除 IsNullOrEmpty 扩展 | 改 string.IsNullOrEmpty(x) |
| .NET Windows 默认 EventLog 日志崩溃 | appsettings 禁用 EventLog provider |
| pg_ctl 创建受限令牌失败 | 直接 postgres.exe -D ... 后台运行 |
| koboldcpp 自解压 DLL 被拦 | 按沙箱流程提权重跑一次(审批后解决) |
| 未知二进制进程写 DLL 被拦 | 同上;node/python 等解释器写入不受限 |
| PowerShell 发中文 JSON 乱码 | [System.Text.Encoding]::UTF8.GetBytes($body) |
| 日志 UTF-16 node 读不到 | PowerShell Select-String 解析后输出 id 列表 |