RPG Maker MZ AI 对话系统
我像往常一样用 Python 编程,并使用 GROQ 的 API,心想:为什么不也为 RPG Maker MZ 做点什么呢?
既然我刚完成了 FOW 小地图 的开发,我便坐下来写了一些快速代码。
我在这里免费赠送它,不再进行后续开发。拿去随意使用——MIT 许可证。这是我作为业余项目制作的,不是一个我会长期维护的插件。这个版本提供以下功能:**
GroqNPC.js – RPG Maker MZ 的 AI 驱动动态 NPC 引擎
版本: 2.2.0
许可证: MIT – 随意使用
要求: RPG Maker MZ,Groq API 密钥(提供免费层级)
包含内容
此插件将你的 RPG Maker MZ 游戏连接到 Groq 的快速 LLM API(Llama 3.1),提供四个集成系统:
层级 - 功能 - 作用**
1 - AI 对话 - 带记忆的流式对话,10 秒超时
2 - 任务系统 - 定义任务;所有 NPC 自动共享状态
3 - NPC 知识库 - NPC 知道任务状态、队友、世界状态
4 - 敌人行为 - AI 决定战术,在战斗前设置 MZ 开关
快速入门 – 屠龙示例
1. 定义任务(在自动运行事件中)
代码:
插件命令: Define Quest
任务 ID: dragon_hunt
标题: 阿什维尔之龙
目标: 与马克交谈|找到巢穴|击败巨龙
NPC 成员: Mark,Sera,Old Tom
任务开关: 10
任务变量: 11
2. 训练马克 – 任务发布者(在他的事件中)
代码:
插件命令: Train NPC Persona
名称: Mark
性格: 你是马克,一个老练的屠龙猎人。20 年前你的左眼被阿什维尔巨龙夺走。你说话声音粗哑疲惫,不断警告危险。
角色: questgiver
任务 ID: dragon_hunt
护栏: 永远不要告诉玩家巨龙很容易击败
回退消息: 我可不是在骗你关于那头野兽的事。
插件命令: Start AI Dialogue.
3. 训练队友(Sera 的事件)
代码:
插件命令: Train NPC Persona
名称: Sera
性格: 你是 Sera,一个渴望证明自己的年轻法师。你钦佩马克,但认为他过于谨慎。你说话语速快且充满热情。
角色: companion
任务 ID: dragon_hunt
最大 Token 数: 150
插件命令: Start AI Dialogue
4. 敌人行为 – 巨龙战斗前
代码:
插件命令: Evaluate Enemy Behavior
敌人名称: Ashvale Dragon
敌人描述: 古老的红龙,受伤但狂怒。左侧鳞片破裂(马克留下的旧伤)。每 3 回合喷火。
任务 ID: dragon_hunt
行为开关基数: 20
玩家 HP % 变量: 1
然后在你的战斗事件中检查开关:
- 开关 20 开启 → 激进(全力攻击)
- 开关 21 开启 → 防御(护盾/增益)
- 开关 22 开启 → 逃跑(尝试逃脱)
- 开关 23 开启 → 增援(呼叫盟友)
- 开关 24 开启 → 狂怒(狂暴模式)
5. 在任何地方推进任务
代码:
插件命令: Advance Quest Objective
任务 ID: dragon_hunt
所有链接到 dragon_hunt 的 NPC 将自动知道新目标。
文本格式化(AI → MZ 颜色代码)
AI 使用语义标签包裹关键词。插件将其转换为 MZ 颜色:
标签 - 用途 - MZ 颜色
代码:
[important]text[/important]
- 危险、警告、关键信息 - 红色 (2)
代码:
[highlight]text[/highlight]
- 名称、地点、物品、专有名词 - 黄色 (14)
代码:
[secret]text[/secret]
- 秘密、稀有知识、机密 - 绿色 (3)
代码:
[weak]text[/weak]
- 传闻、不确定信息、模糊提示 - 灰色 (8)
AI 响应示例:
代码:
DIALOGUE: The [highlight]Dragon of Ashvale[/highlight] sleeps near the
[highlight]eastern caves[/highlight]. It is [important]extremely dangerous[/important]
– its fire can melt steel in seconds.
PROMPT: Ask about the weak spot?
玩家看到的内容: 自动着色文本(地点为黄色,警告为红色等)
插件参数(在插件管理器中配置)
参数 - 默认值 - 描述
代码:
Groq API Key
- (空) - 从 [console.groq .com/keys] 获取
代码:
AI Model
- llama-3.1-8b-instant - 访问 → console .groq.com/docs/models 查看更多
代码:
Stream Timeout
- 10 秒 - 硬性截止。如果触发则显示部分文本
代码:
Chat Memory
- 4 次交换 - 每个 NPC 要记住的来回消息数量
代码:
Default Input Prompt
- 你想说什么? - 当 AI 未生成提示时的回退
代码:
Max Player Input Length
- 100 字符 - 限制玩家可输入的字符数
代码:
Global System Prompt Suffix
- (空) - 附加到所有 NPC 提示。例如:“保持回复在 3 句话以内。永远不要出戏。”
代码:
Timeout Fallback Message
- 嗯……我需要一点时间思考 - 当 API 超时时显示
代码:
Debug Mode
- false - 将完整的 API 负载记录到 F8 控制台
完整的插件命令参考
任务管理
命令 - 参数 - 描述
代码:
defineQuest
- questId, title, description, objectives (管道分隔), npcMembers (逗号分隔), questSwitch, questVariable - 创建/更新任务
代码:
advanceObjective
- questId - 标记当前目标完成,进入下一个
代码:
completeQuest
- questId - 标记任务完全完成
代码:
failQuest
- questId - 标记任务失败
NPC 人格
命令 - 参数 - 描述
代码:
trainPersona
- name, personality, role (none/questgiver/companion/merchant/informant), questId, guardrails, fallbackMessage, maxTokens - 定义 NPC 人格。在 startDialogue 之前调用
代码:
startDialogue
- (无) - 开始与该 NPC 的 AI 对话
代码:
clearMemory
- (无) - 清除该 NPC 的对话历史
代码:
clearAllMemory
- (无) - 清除所有 NPC 的对话历史
敌人行为
命令 - 参数 - 描述
代码:
evaluateEnemyBehavior
- enemyName, enemyDescription, questId, behaviorSwitchBase, playerHpPercent - AI 决定行为,设置 MZ 开关
工具
命令 - 参数 - 描述
代码:
testApiKey
- (无) - 验证 API 密钥是否有效。在消息窗口中显示结果
代码:
setContextVar
- label, variableId 或 switchId - 将游戏状态全局暴露给所有 AI 调用
️ 备注标签(替代 Train Persona)
将这些放在 事件的备注字段 中:
代码:
<AIPersona: 你是一个偏执的老隐士,囤积蘑菇且不信任陌生人。>
<AIRole: informant>
<AIQuestID: dragon_hunt>
<AIGuardrails: 永远不要谈论皇室。永远不要直接透露巨龙的位置。>
<AIFallback: 我……我不能谈论这种事……墙壁有耳。>
<AIMaxTokens: 150>
注意: Train Persona 插件命令会覆盖备注标签。
NPC 记忆与知识系统
NPC 自动知道的内容
- 任务状态 – 通过 questId 链接的所有任务
- 当前目标 – 玩家处于哪一步
- 任务成员 – 同一任务中所有 NPC 的名称
- 世界状态 – 通过 setContextVar 暴露的任何变量/开关
- 对话历史 – 最近 N 次交换(可配置)
示例:暴露世界状态
代码:
插件命令: Set Context Variable
标签: 玩家击败了巨龙
开关 ID: 25
现在 每个 NPC 都在其系统提示中看到:
代码:
[WORLD STATE]
Player defeated the dragon: true
他们会相应地做出反应。商人可能会说:“我听说你杀死了巨龙!给你这个折扣。”
记忆管理
- 记忆保存在存档文件中
- 每个 NPC 拥有独立的记忆(按地图 ID + 事件 ID)
- 使用清除 NPC 记忆来重置某个 NPC
- 使用清除所有 NPC 记忆来重置所有人
敌人行为深入解析
行为开关映射
当你调用 evaluateEnemyBehavior 并设置行为开关基数为 20 时:
开关 - 行为 - AI 在此时决定
20 - 激进 - 玩家 HP 低,敌人占优势,任务刚开始
21 - 防御 - 敌人受伤,保护某物,争取时间
22 - 逃跑 - 敌人处于劣势,任务目标已完成,HP 低
23 - 增援 - 敌人独自面对队伍,任务高潮临近
24 - 狂怒 - 任务特定触发器(例如,巨龙 HP 30%,队友死亡)
同一时间只有一个开关开启。 使用条件分支检查它们。
敌人评估示例
AI 在内部收到以下系统提示:
代码:
You are an AI Game Master deciding enemy combat behavior.
Enemy: Ashvale Dragon
Description: Ancient red dragon, wounded but enraged.
[QUEST: The Dragon of Ashvale]
Status: ACTIVE
Objectives:
DONE: Talk to Mark
CURRENT: Find the lair
PENDING: Defeat the dragon
Player current HP: 45%
[WORLD STATE]
Player has the Dragon Slayer sword: true
选择一个行为:aggressive / defensive / flee / reinforce / enraged
AI 响应一个单词,插件设置相应的开关。
存档文件兼容性
插件自动保存以下数据:
- _npcMemory – 对话历史
- _trainedPersonas – 所有训练过的 NPC 人格
- _quests – 任务状态(状态、当前目标)
- _ctxVars – 暴露的上下文变量
无需特殊处理。 正常保存和加载。
限制与警告
问题 - 详情
API 密钥可见性 - 客户端调用意味着 API 密钥在玩家浏览器中可见。可以进行混淆,但未实现。
需要互联网 - AI 功能无法离线运行。常规 MZ 游戏不受影响。
API 费用 - 你需为使用量付费。Groq 非常便宜(每次对话约 $0.0002) 但不是免费的。
**Steam 政策 - 必须在商店列表中声明 AI 生成内容。
无持续开发 - 我做这个是为了好玩。它按原样工作。我不会修复错误或添加功能。**
故障排除
“API 密钥为空” 错误
- 检查插件管理器 → GroqNPC → Groq API Key
- 密钥应以 gsk_ 开头
- 前后不要有空格
超时错误
- 增加流超时参数(建议 10-15 秒)
- 切换到 llama-3.1-8b-instant 模型(更快)
无响应或格式奇怪
- 启用调试模式并检查 F8 控制台
- 验证你的 Groq 账户有余额
- 使用 testApiKey 插件命令测试
NPC 不记得任务
- 确保任务 ID 完全匹配(区分大小写)
- 在 startDialogue 之前调用 trainPersona
- 检查任务是否已定义(先运行 defineQuest)
许可证与致谢
MIT 许可证 – 随意做任何你想做的事。
- 不要求署名(但很感激)
- 无担保
- 无支持
基于以下内容构建:
最后的话
就是这样。拿去,弄坏它,修复它,改进它,用它制作游戏出售。
如果你做出了很酷的东西,我很想看看。如果没有,那也没关系。
它是免费的
享受吧!
↓完整代码 ↓
免费获取 (也许如果我心情好且有时间,我会更新它。)

