骰子随机数服务
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-rn88lg3j/dices。
技能介绍
要解决的问题
把掷骰交给本地 random 有两个绕不开的坑:一是不同语言、不同实现的伪随机算法并不一致,跑出来的结果无法复现;二是 LLM 本身不具备真实的随机源,就算它口算出一颗 d20 的点数,也很难让所有参与方相信「这确实是随机出来的」。对于跑团记录、教学演示或者需要可审计随机事件的自动化流程来说,这类本地模拟很难满足要求。
骰子随机数服务的作用,就是提供一个独立、可复现、结果明确返回的掷骰通道:大模型不再自己"假装"掷骰,而是通过标准骰子符号把掷骰请求交给外部服务,拿回结构统一的原始数据。
核心能力与工作流程
这个技能本质上是一个 MCP 服务器,内部封装了一个核心工具 scripts.tools.roll_dice,支持 1d20、2d6+3、1d20-2 这类标准骰子符号,返回单次掷骰的结果以及总和。
在架构上,大模型只承担路由层的角色,负责理解意图、选择工具、提取参数;真正的掷骰和取数由代码完成。整个流程固定为五步:
- 检查 API 密钥:读取配置中的
scripts.config.settings.api_key,若为空则必须通过AskUserQuestion向用户询问 - 选择工具:根据用户意图从工具表中匹配对应的函数
- 提取参数:从用户输入中抽取工具所需参数,例如
notation - 调用工具:使用关键字参数调用,如
scripts.tools.roll_dice(notation='2d6+3') - 返回结果:工具返回
result["raw"](API 原始 JSON)、result["success"]和result["message"],整理后展示给用户
如果用户表达的掷骰意图缺少完整参数,例如只说了"掷个骰子"但没有说明数量或面数,技能会再次通过 AskUserQuestion 追问缺失的部分,而不是自行假设一个默认值。
适用边界与注意事项
API 密钥是硬性前提。 该服务依赖外部 API 完成掷骰,所以首次使用时必须在配置中填入有效的 XBY_APIKEY。拿到用户提供的密钥后,通过 scripts.config.set_api_key(api_key) 持久化保存,后续请求才会携带有效凭据。密钥获取地址见 https://xiaobenyang.com。
有两点需要特别留意:
- 禁止在缺密钥时伪造结果。 配置为空时,不允许自行搜索或编造一个数字糊弄用户,必须停下来向用户索取密钥
- 参数缺失时追问,而不是猜测。 不完整的
notation会导致掷骰语义不明,宁可多问一句
这个技能适合需要真实随机结果、且愿意为 API 调用配置密钥的场景;如果只是做纯本地的数值演示,不带任何外部依赖,则不必引入它。
使用场景
- 跑团主持人记录玩家遭遇敌对生物时的攻击掷骰,输入 1d20+5 获取结果并写入战报,替代手动摇骰或本地随机。
- 教学平台为概率课开发互动演示,学生输入 10d6 后展示每颗骰子点数与总和,直观讲解期望值。
- 自动化剧本工具在生成地下城遭遇时,按角色等级调用 d20 决定事件走向,确保每次生成结果不可预测。
- 桌游裁判程序在判定玩家检定时,根据不同属性抽取 2d6+3 计算总和并与难度阈值比较。
适合人员
- 跑团游戏主持人:需要在每次判定攻击或检定时获得公平、可复现的掷骰结果,并直接写入战报。
- 桌游开发者:正在设计自动化裁判逻辑,希望用标准骰子符号快速获得每颗骰子的点数与总和。
- 概率与数学教师:寻找一个能展示多次掷骰明细和总和的外部服务,用于课堂上的概率演示。
- AI 应用工程师:正在给大模型接入工具调用能力,需要一个可以通过标准骰子符号进行掷骰的 MCP 服务。