# AI対話RPGツクールMZ

**URL:** <https://guild.rpgmakerofficial.com/t/topic/2748>\
**Category:** プラグイン\
**Tags:** english, mz\
**Created:** [2026 年 8 月 30 日午後 7:41 UTC](https://guild.rpgmakerofficial.com/t/topic/2748 "2026-08-30T19:41:33Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![JustDeveloper](https://sea2.discourse-cdn.com/flex002/user_avatar/guild.rpgmakerofficial.com/justdeveloper/32/6224_2.png) [@JustDeveloper](https://guild.rpgmakerofficial.com/u/JustDeveloper)\
**Post date:** [2026 年 8 月 30 日午後 7:41 UTC](https://guild.rpgmakerofficial.com/t/topic/2748/1 "2026-08-30T19:41:33Z")

</div>

# RPG Maker MZ AIダイアログ

_私は普段どおりPythonでプログラミングをし、GROQのAPIを使用していました。そしてふと、「RPG Maker MZ向けに何か作ってみよう」と思いました。_

ちょうど[FOWミニマップ](https://r-px.itch.io/minimap-system-rpg-maker-mz)の開発を終えたところだったので、座って簡単なコードを書き上げました。

このプラグインは無料で公開しています。今後開発を続ける予定はありません。自由に持って行って、好きに使ってください。ライセンスはMITです。これは趣味で作ったもので、メンテナンスを続けるプラグインではありません。このバージョンで提供される機能は以下の通りです：\*\*

 ![1778795067760.png](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/2X/c/cfea0b834028ef6529834247920a39a3ab124e75.png "1778795067760.png")

 ![1778795090520.png](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/2X/d/d149a32101ef4fa257e772caf47ca3fd049c009d.png "1778795090520.png")

* * *

### 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）に接続し、4つの統合システムを提供します：

レイヤー - 機能 - 概要\*\*  
1 - AIダイアログ - メモリ付きストリーミング会話、10秒タイムアウト  
2 - クエストマシン - クエストを定義；すべてのNPCが状態を自動的に共有  
3 - NPCの知識 - NPCはクエスト状況、仲間、世界の状態を知る  
4 - 敵の行動 - AIが戦術を決定し、戦闘前にMZスイッチを設定

* * *

### クイックスタート – ドラゴン狩りの例​

#### 1. クエストを定義する（自動実行イベント内）​

コード：

```auto
Plugin Command: Define Quest
  Quest ID: dragon_hunt
  Title: The Dragon of Ashvale
  Objectives: Talk to Mark|Find the lair|Defeat the dragon
  NPC Members: Mark,Sera,Old Tom
  Quest Switch: 10
  Quest Variable: 11

```

#### ​

#### 2. マーク（クエスト発行者）を訓練する（彼のイベント内）​

コード：

```auto
Plugin Command: Train NPC Persona
  Name: Mark
  Personality: You are Mark, a grizzled dragon hunter. You lost your left eye to the Ashvale Dragon 20 years ago. You speak in a gruff, tired voice and constantly warn about danger.
  Role: questgiver
  Quest ID: dragon_hunt
  Guardrails: Never tell the player the dragon is easy to beat
  Fallback Message: I ain't lyin' to you about that beast.
Plugin Command: Start AI Dialogue.

```

#### 3. 仲間（セラのイベント）を訓練する​

コード：

```auto
Plugin Command: Train NPC Persona
  Name: Sera
  Personality: You are Sera, a young eager mage who wants to prove herself. You admire Mark but think he's too cautious. You speak quickly and enthusiastically.
  Role: companion
  Quest ID: dragon_hunt
  Max Tokens: 150

Plugin Command: Start AI Dialogue

```

#### 4. 敵の行動 – ドラゴン戦前​

コード：

```auto
Plugin Command: Evaluate Enemy Behavior
  Enemy Name: Ashvale Dragon
  Enemy Description: Ancient red dragon, wounded but enraged. Scales are cracked on the left side (Mark's old wound). Breathes fire every 3 turns.
  Quest ID: dragon_hunt
  Behavior Switch Base: 20
  Player HP % Variable: 1

```

その後、戦闘イベントでスイッチを確認します：

- **スイッチ 20 ON** → 攻撃的（全攻撃）
- **スイッチ 21 ON** → 防御的（ガード/バフ）
- **スイッチ 22 ON** → 逃走（脱出試行）
- **スイッチ 23 ON** → 援軍（味方を呼ぶ）
- **スイッチ 24 ON** → 激昂（暴走モード）

#### 5. 任意の場所でクエストを進行させる​

コード：

```auto
Plugin Command: Advance Quest Objective
  Quest ID: dragon_hunt

```

dragon\_huntにリンクされたすべてのNPCは、自動的に新しい目標を認識します。

* * *

### テキストフォーマット（AI → MZカラーコード）​

AIはキーワードをセマンティックタグで囲みます。プラグインはそれらをMZのカラーコードに変換します：

**タグ - 目的 - MZカラー**

コード：

```auto
[important]text[/important]

```

- 危険、警告、重要情報 - 赤 (2)

コード：

```auto
[highlight]text[/highlight]

```

- 名前、場所、アイテム、固有名詞 - 黄色 (14)

コード：

```auto
[secret]text[/secret]

```

- 秘密、稀な知識、機密情報 - 緑 (3)

コード：

```auto
[weak]text[/weak]

```

- 噂、不確実な情報、曖昧なヒント - 灰色 (8)

**AI応答の例：**

コード：

```auto
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?

```

**プレイヤーが見るもの：** 自動的に色付きテキスト（場所は黄色、警告は赤など）

* * *

### ![⚙️](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/2X/9/90fe3d29b8dba3d8477e3dfaab13af473cd7a6c4.png "Gear :gear:") プラグインパラメータ（プラグインマネージャーで設定）​

**パラメータ - デフォルト - 説明**

コード：

```auto
Groq API Key

```

- （空） - [console.groq .com/keys]から取得

コード：

```auto
AI Model

```

- llama-3.1-8b-instant - 詳細は [Supported Models - GroqDocs](http://console.groq.com/docs/models) を参照

コード：

```auto
Stream Timeout

```

- 10秒 - 強制終了。トリガーされた場合は部分的なテキストを表示

コード：

```auto
Chat Memory

```

- 4回のやり取り - 各NPCが記憶する往復メッセージの数

コード：

```auto
Default Input Prompt

```

- What do you say? - AIがプロンプトを生成しない場合のフォールバック

コード：

```auto
Max Player Input Length

```

- 100文字 - プレイヤーが入力できる文字数を制限

コード：

```auto
Global System Prompt Suffix

```

- （空） - すべてのNPCプロンプトに追加される。例： **「3文以内に抑えてください。キャラクターを崩さないでください。」**

コード：

```auto
Timeout Fallback Message

```

- Hmm… I need a moment to think - APIがタイムアウトした場合に表示

コード：

```auto
Debug Mode

```

- false - フルAPIペイロードを **F8コンソール** にログ出力

* * *

### 完全なプラグインコマンドリファレンス​

#### クエスト管理​

**コマンド - 引数 - 説明**

コード：

```auto
defineQuest

```

- _questId, title, description, objectives (パイプ区切り), npcMembers (カンマ区切り), questSwitch, questVariable - クエストの作成/更新_

コード：

```auto
advanceObjective

```

- questId - 現在の目標を完了としてマークし、次の目標へ移動

コード：

```auto
completeQuest

```

- questId - クエストを完全に完了としてマーク

コード：

```auto
failQuest

```

- questId - クエストを失敗としてマーク

#### NPCペルソナ​

**コマンド - 引数 - 説明**

コード：

```auto
trainPersona

```

- name, personality, role (none/questgiver/companion/merchant/informant), questId, guardrails, fallbackMessage, maxTokens - NPCの性格を定義。startDialogueの前に呼び出す

コード：

```auto
startDialogue

```

- （なし） - このNPCとのAI会話を開始

コード：

```auto
clearMemory

```

- （なし） - このNPCの会話履歴を消去

コード：

```auto
clearAllMemory

```

- （なし） - すべてのNPCの会話履歴を消去

#### 敵の行動​

**コマンド - 引数 - 説明**

コード：

```auto
evaluateEnemyBehavior

```

- enemyName, enemyDescription, questId, behaviorSwitchBase, playerHpPercent - AIが行動を決定し、MZスイッチを設定

#### ユーティリティ​

**コマンド - 引数 - 説明**

コード：

```auto
testApiKey

```

- （なし） - APIキーが機能することを確認。メッセージウィンドウに結果を表示

コード：

```auto
setContextVar

```

- label, variableIdまたはswitchId - ゲームの状態をすべてのAI呼び出しにグローバルに公開

* * *

### ️ ノートタグ（Train Personaの代替）​

これらを **イベントのノートフィールド** に配置します：

コード：

```auto
<AIPersona: You are a paranoid old hermit who hoards mushrooms and mistrusts strangers.>
<AIRole: informant>
<AIQuestID: dragon_hunt>
<AIGuardrails: Never talk about the royal family. Never reveal the dragon's location directly.>
<AIFallback: I... I cannot speak of such things... The walls have ears.>
<AIMaxTokens: 150>

```

**注意：** Train Personaプラグインコマンドはノートタグを上書きします。

* * *

### NPCのメモリと知識システム​

#### NPCが自動的に知る情報​

- **クエスト状況** – questIdを通じてリンクされたすべてのクエスト
- **現在の目標** – プレイヤーがどのステップにいるか
- **クエストメンバー** – 同じクエスト内のすべてのNPCの名前
- **世界の状態** – setContextVarを通じて公開された任意の変数/スイッチ
- **会話履歴** – 最後のN回のやり取り（設定可能）

#### 例：世界状態の公開​

コード：

```auto
Plugin Command: Set Context Variable
Label: Player defeated the dragon
Switch ID: 25

```

これで **すべてのNPC** がシステムプロンプトでこれを確認します：

コード：

```auto
[WORLD STATE]
Player defeated the dragon: true

```

彼らはそれに応じて反応します。商人ならこう言うかもしれません：_「ドラゴンを倒したって噂を聞いたぞ！この割引をくれ。」_

#### メモリ管理​

- メモリはセーブファイルに保存されます
- 各NPCは独立したメモリを持つ（マップID + イベントIDによる）
- Clear NPC Memoryを使用してNPCをリセット
- Clear All NPC Memoryを使用して全員をリセット

* * *

### 敵の行動の詳細​

#### 行動スイッチのマッピング​

Behavior Switch Base: 20を指定して evaluateEnemyBehavior を呼び出すと：  
**スイッチ - 行動 - AIがこれを判断する条件**

20 - **攻撃的** - プレイヤーのHPが低い、敵が有利、クエスト初期段階  
21 - **防御的** - 敵が負傷、何かを守っている、時間稼ぎ  
22 - **逃走** - 敵が劣勢、ミッション目標完了、HPが低い  
23 - **援軍** - 敵が単独でパーティーと対峙、クエストのクライマックス接近  
24 - **激昂** - クエスト固有のトリガー（例：ドラゴンが30% HP、仲間が死亡）

**一度にONになるのは1つのスイッチのみです。** 条件分岐で確認してください。

#### 敵の評価例​

AIは内部的に以下のシステムプロンプトを受け取ります：

コード：

```auto
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

```

行動を1つ選択：aggressive / defensive / flee / reinforce / enraged  
AIは1つの単語で応答し、プラグインが対応するスイッチを設定します。

* * *

### セーブファイルの互換性​

プラグインは以下のデータを自動的に保存します：

- \_npcMemory – 会話履歴
- \_trainedPersonas – 訓練されたすべてのNPCの性格
- \_quests – クエストの状態（ステータス、現在の目標）
- \_ctxVars – 公開されたコンテキスト変数

**特別な処理は不要です。** 通常どおり保存および読み込みを行います。

* * *

### ![⚠️](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/2X/7/7b871757e73c09c65e0f57e9e43cd35c9eabf688.png "Warning :warning:") 制限事項と警告​

**問題 - 詳細**  
**APIキーの可視性 - クライアントサイドの呼び出しのため、APIキーはプレイヤーのブラウザで可視化されます。難読化は可能ですが実装されていません。  
インターネット接続が必要 - AI機能についてはゲームはオフラインで動作しません。通常のMZゲームプレイには影響ありません。  
APIコスト - 使用量に応じて課金されます。Groqは非常に安価です（対話あたり約$0.0002） ~~ただし無料ではありません。~~ **  
\*\*Steamポリシー - ストアリストでAI生成コンテンツを宣言する必要があります。

継続的な開発なし - これは趣味で作りました。現状で動作します。バグ修正や機能追加は行いません。\*\*

* * *

### ​

### トラブルシューティング​

#### 「APIキーが空です」エラー​

- プラグインマネージャー → GroqNPC → Groq API Key を確認
- キーは gsk\_ で始まる必要があります
- 前後にスペースがないことを確認

#### タイムアウトエラー​

- Stream Timeoutパラメータを増やす（10〜15秒推奨）
- llama-3.1-8b-instantモデルに切り替える（高速）

#### 応答なしまたは変なフォーマット​

- デバッグモードを有効にし、F8コンソールを確認
- Groqアカウントにクレジットがあることを確認
- testApiKeyプラグインコマンドでテスト

#### NPCがクエストを記憶しない​

- クエストIDが完全に一致していることを確認（大文字小文字を区別）
- startDialogueの前にtrainPersonaを呼び出す
- クエストが定義されていることを確認（最初にdefineQuestを実行）

* * *

### ライセンスとクレジット​

**MITライセンス** – 事実上何をしてもらっても構いません。

- クレジットは必須ではありません（ただし感謝されます）
- 保証はありません
- サポートはありません

使用技術：

- [Groq API](https://console.groq.com/docs/api-reference#chat-create) – 高速LLM推論
- [Groq Models](https://console.groq.com/docs/models)
- RPG Maker MZプラグイン by Rpx (GDSchoolとのコラボレーション)

* * *

### 結びの言葉​

以上です。持って行って、壊して、直して、改善して、これを使ってゲームを売ってください。

何か面白いものを作ったら、見てみたいです。作らなくても、それで構いません。

# 無料です

**楽しんでください！  
↓フルコード ↓**  
[こちらから無料入手](https://github.com/Rp-ics/RPG-Maker-MZ---AI-Dialogue) _(気分が乗って時間があれば更新するかもしれません。)_

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/2X/b/bdaf6cac609fa35d26502adec7f98ec68665fca7.png) [@system](https://guild.rpgmakerofficial.com/u/system)\
**Post date:** [2026 年 8 月 31 日午後 12:32 UTC](https://guild.rpgmakerofficial.com/t/topic/2748/2 "2026-08-31T12:32:17Z")

</div>

非表示: 2026 年 8 月 31 日午後 12:32 UTC



---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex002/uploads/rpgmaker_community/original/2X/b/bdaf6cac609fa35d26502adec7f98ec68665fca7.png) [@system](https://guild.rpgmakerofficial.com/u/system)\
**Post date:** [2026 年 8 月 31 日午後 2:35 UTC](https://guild.rpgmakerofficial.com/t/topic/2748/3 "2026-08-31T14:35:56Z")

</div>

表示: 2026 年 8 月 31 日午後 2:35 UTC


