D&D Agent:基于 DeepSeek 的 D&D 5E 智能助手
跑团的时候最怕什么?不是骰出大失败,而是 DM 突然问"你这法术什么效果来着",然后所有人开始疯狂翻书。
作为一个既爱跑团又爱写代码的人,我决定做一个能随时回答 D&D 规则问题的 AI 助手。于是就有了这个项目——基于 DeepSeek 的 D&D 5E 智能代理。
它是什么
简单说,这是一个可以对话的 D&D 知识库。你跟它说"火球术多少伤害",它直接告诉你 8d6 火焰伤害、150 尺射程、20 尺半径范围——附带敏捷豁免减半的提醒。你问"成年红龙挑战等级多少",它秒回 CR 17,顺便告诉你它的喷吐武器是 18d6 火焰伤害。
但它不止是查资料。它还能帮你掷骰子、构建角色,甚至根据你的描述推荐合适的法术和职业 Build。
为什么选 DeepSeek
最初考虑过直接用 OpenAI 的 API,但 DeepSeek 有几个打动我的点:一是中文理解能力明显更好,D&D 规则书的中文翻译有很多约定俗成的术语,DeepSeek 处理起来更自然;二是 Function Calling 的响应速度和稳定性都不错,多轮对话中反复调用工具函数也不会跑偏;三是性价比——跑团一晚上可能要问几十上百个问题,成本控制很重要。
核心机制是让 DeepSeek 充当"大脑",SQLite 的 FTS5 全文索引充当"记忆"。用户问一个问题,AI 判断意图后调用对应的函数去数据库里搜——法术表、怪物图鉴、规则条目——然后把结果组织成自然的回答返回。
数据从哪来
这是整个项目最耗时的部分。D&D 5E 的规则资料分散在玩家手册、怪物图鉴和各种扩展书中,中文版通常是 CHM 格式。我的处理流程是:先把 CHM 反编译成 HTML,然后用 BeautifulSoup 解析每个页面,提取出结构化的法术数据(名称、环位、学派、施法时间、射程、成分、持续时间、描述)、怪物数据(名称、类型、CR、AC、HP、速度、属性、特性、动作)和规则条目。
中间踩了不少坑——CHM 导出的 HTML 编码有 GBK 也有 UTF-8,得逐个判断;法术描述里混杂着表格和列表,解析逻辑要写得很细致;有些扩展书的数据格式和核心书还不一样。最终从几千个 HTML 文件中提取出了一千多条法术和数百个怪物,导入 SQLite 后用 FTS5 建了全文索引,查询速度毫秒级。
聊聊安全设计
因为是面向公网的服务,安全方面下了不少功夫。API 层面有三层防护:IP 级别的速率限制(用 slowapi 实现,不同端点有不同的限速策略)、Token 认证(会话令牌绑定 IP,防止令牌泄露后被冒用)、以及输入校验(防止注入和恶意 payload)。最外层还有一个渐进封禁机制——某个 IP 频繁触发安全规则的话,封禁时间会指数级递增。
一些细节
骰子模块支持完整的 D&D 骰子表达式:d20、4d6k3(4d6 取最高的 3 个,经典的车卡掷法)、2d20+5(带调整值)、甚至支持优势/劣势的 adv 和 dis 标记。
角色构建是我最喜欢的功能。你说一句"车一个 5 级邪术师",它会自动列出推荐的法术选择、魔能祈唤、属性分配和装备建议。这背后是从扩展书中提取的职业进程表,配合一些启发式的推荐逻辑。
前端故意没用任何框架——就三个文件,纯原生 JS + CSS。暗黑奇幻主题主要是为了氛围感,跑团嘛,界面也得有点地下城的味道。
项目结构一览
dnd-agent/
├── backend/ # FastAPI 后端(agent、db、dice、security)
├── data_pipeline/ # CHM → HTML → JSON → SQLite 完整数据管线
├── frontend/ # 单页 Web 前端(原生 JS,无框架)
└── .env # DeepSeek API Key 配置
跑起来
环境只需要 Python 3.10+ 和一个 DeepSeek API Key:
pip install fastapi uvicorn slowapi openai python-dotenv beautifulsoup4 lxml
# 构建数据库
python data_pipeline/extractor.py && python data_pipeline/to_sqlite.py
# 启动
uvicorn backend.main:app --host 0.0.0.0 --port 8765
打开浏览器访问 localhost:8765,一个会说中文的 D&D 法师就上线了。
后续想法
目前数据覆盖了核心规则书和部分扩展,后面打算加入更多的扩展内容(范·里希腾的怪物指南、塔莎的万象坩埚等)。还想加一个"遭遇构建器"——根据队伍等级和人数,自动推荐合适的怪物组合。以及多人模式下的实时共享骰子结果,这个需要 WebSocket。
如果有同好对 D&D + AI 这个方向感兴趣,欢迎交流。代码是开源的,供学习参考,D&D 内容版权归威世智所有。