【第2回】AIマルチエージェントの役割設計|Planner・Writer・Reviewerの役割を整理

スポンサーリンク
この記事は約36分で読めます。

AIマルチエージェント構成では、1つのAIにすべてを任せるのではなく、Planner・Writer・Reviewerのように役割を分けることで出力品質を安定させやすくなります。
Planner AIは記事設計、Writer AIは本文作成、Reviewer AIは品質確認を担当します。

第2回では、第1回の最小実装で見えた課題を踏まえ、各AIエージェントの役割と、実用化に向けた改善ポイントを整理して修正します。

第1回で作った最小構成を振り返る

第1回では、Windows 11、WSL Ubuntu、Ollama、Gemma 4を使い、ローカル環境で動くAIマルチエージェント記事作成システムの最小実装を作成しました。

構成は以下のような流れでした。

キーワード入力

Planner AI

Writer AI

Reviewer AI

Writer AIで修正

HTML保存

第1回で見えてきた課題

実際に複数回プログラムを実行すると、いくつかの課題が見えてきました。

主な課題は以下です。

・final_article.html が毎回上書きされる
・CSSが付く場合と付かない場合がある
・HTML出力形式が安定しない
・Writer → Reviewer → Writer の後に最終レビューがない
・「最新」と入力しても最新情報が反映されない

これらは、Gemma 4の影響ではなく、マルチエージェントの役割設計と処理フローが最小構成だったことが原因です。

特に重要なのは、次の2点です。

1. 各エージェントの役割がまだ曖昧な部分がある
2. 最終的な品質判定を通過した記事だけを保存する流れになっていない

そのため第2回では、まず Planner / Writer / Reviewer の役割を整理し、どのAIに何を任せるべきかを明確にします。

なぜAIを3つの役割に分けるのか

記事作成は、単に文章を書くだけの作業ではありません。

実際には、次のような複数の工程があります。

・検索意図を考える
・読者を決める
・記事構成を作る
・本文を書く
・誤字脱字を確認する
・表現を整える
・内容の過不足を確認する
・HTML形式を整える

これを1つのAIに一度で任せると、出力が不安定になりやすくなります。

たとえば、次のような問題が起きます。

・構成は良いが本文が弱い
・本文は良いが見出しが曖昧
・レビューはしているが修正が反映されていない
・HTML形式が毎回変わる
・CSSやMarkdownが混ざる

そこで、処理を3つの役割に分けます。

Planner AI:考える
Writer AI:書く
Reviewer AI:確認する

この分担によって、それぞれのAIが担当する作業が明確になります。

3つのAIエージェントの全体像

今回の基本構成は以下です。

キーワード

Planner AI:記事設計

Writer AI:本文作成

Reviewer AI:品質確認

Writer AI:修正

Reviewer AI:再確認

保存

第1回では、最後の「Reviewer AI:再確認」までは入れていませんでした。

しかし、品質を安定させるには、Writerが修正した後にもう一度Reviewerが確認する流れが必要です。

つまり、実用的には次のような構成が望ましい形です。

Writer AI
  ↓
Reviewer AI
  ├ OK → 保存
  └ 修正必要 → Writer AIへ戻す
                  ↓
                Reviewer AIが再確認

このように、Writer AIが作成した記事をReviewer AIが確認し、OKなら保存、修正が必要ならWriter AIへ戻す 流れにします。
Writer AIとReviewer AIをループさせることで、最終的にReviewer AIの確認を通過した記事を保存でき、出力品質を安定できるようになります。

Planner AIの役割

Planner AIは、記事作成の最初に動くエージェントです。

役割は、本文を書くことではありません。
記事を書く前に、何を書くべきかを設計することです。

Planner AIが担当すること

・キーワードの意図を整理する
・想定読者を決める
・記事の目的を決める
・SEOタイトル案を作る
・h2 / h3構成を作る
・Writerへの執筆方針を作る

たとえば、キーワードが以下だったとします。

ブロックチェーン

この場合、Planner AIは次のようなことを考えます。

想定読者:
ブロックチェーンに興味がある初心者

検索意図:
ブロックチェーンとは何か、どのように構成するのかを知りたい

記事目的:
ブロックチェーンの基本構造を理解する

構成方針:
Planner / Writer / Reviewer の3役に分けて説明する

Planner AIがしっかり設計すると、Writer AIは迷わず本文を書きやすくなります。

Planner AIのプロンプト例

第1回の最小実装では、Planner AIに次のような指示を出しました。

このプロンプトは、Planner AIに「記事本文を書かせる」のではなく、記事作成の設計図を作らることを指示していますが、Writer AIへの明確な指示はありません。

第2回は、第1回のプロンプトに、Writer AIへ指示することを追加します。

Planner AIの出力例

Planner AIの出力は、Writer AIが使いやすい形にしておくと便利です。

例:

想定読者:
ローカルLLMやAIエージェントを学び始めた初心者

検索意図:
AIマルチエージェントとは何か、どのように役割を分けるのかを知りたい

記事目的:
Planner / Writer / Reviewer の役割を理解し、簡単な記事作成システムに応用できるようにする

SEOタイトル案:
AIマルチエージェントの基本|Planner・Writer・Reviewerの役割を整理する

h2/h3構成:
h2:AIマルチエージェントとは
h2:Planner AIの役割
h2:Writer AIの役割
h2:Reviewer AIの役割
h2:3つのAIを連携させる流れ
h2:まとめ

このような出力をWriter AIに渡すことで、記事の方向性が安定します。

Writer AIの役割

Writer AIは、Planner AIが作った設計に沿って本文を書くエージェントです。

担当するのは、記事本文の作成と修正です。

Writer AIが担当すること

・SEOタイトルを整える
・メタディスクリプションを作る
・AI要約ブロックを作る
・h2 / h3に沿って本文を書く
・FAQを作る
・Reviewer AIの指摘に従って修正する

ここで重要なのは、Writer AIに自由に書かせすぎないことです。

Planner AIの設計をもとに、以下を守らせます。

・記事の目的から外れない
・見出し構成に沿って書く
・HTML形式を統一する
・過剰な断定表現を避ける
・CSSやMarkdownを混ぜない

Writer AIで起きやすい問題

第1回の実行結果では、Writer AIの出力に揺れが見られました。

たとえば、次のような違いです。

・CSS付きのHTMLが出る
・CSSなしのHTMLが出る
・Markdownのような記法が混ざる
・文章だけの出力になる
・HTML構造が不十分になる

これは、Writer AIへの出力ルールがまだ十分に固定されていなかったためです。

単に、

HTML形式で作成してください

と指示するだけでは、LLMは毎回少し違う形式で出力する可能性があります。

Writer AIの出力ルールを固定する

出力品質を安定させるには、Writer AIに具体的なHTMLルールを与えます。

たとえば、以下のようにします。

重要な出力ルール:
・HTML断片として出力する
・html、head、bodyタグは出力しない
・styleタグ、CSS、JavaScriptは出力しない
・Markdown記法は使わない
・見出しは h2 / h3 を使う
・本文は p タグを使う
・箇条書きは ul / li を使う
・表が必要な場合は table を使う

これにより、CSSあり・なしの揺れを減らせます。

今回は、記事本文として扱いやすくするため、CSSなしのHTML断片に統一する方針が分かりやすいです。

改善後のWriter AIプロンプト例

agents/writer.pysystem_prompt は、次のように改善できます。

このように明確なルールを入れることで、Writer AIの出力を安定させやすくなります。

Reviewer AIの役割

Reviewer AIは、Writer AIが作成した記事を確認するエージェントです。

役割は、単なる誤字脱字チェックではありません。

Reviewer AIが担当すること

・検索意図に合っているか確認する
・見出しと本文が一致しているか確認する
・誤字脱字を確認する
・過剰な断定表現を確認する
・AI要約ブロックが分かりやすいか確認する
・FAQが本文と矛盾していないか確認する
・HTML形式がルール通りか確認する

特に、第1回で見えた課題を踏まえると、Reviewer AIにはHTML形式のチェックも任せるべきです。

Reviewer AIに追加すべきチェック項目

第1回の最小実装では、Reviewer AIは内容のチェックが中心でした。

しかし、実行結果を見ると、出力形式の揺れも確認すべきです。

そのため、Reviewer AIには以下のチェックを追加します。

・styleタグが含まれていないか
・CSSが混ざっていないか
・JavaScriptが含まれていないか
・Markdown記法が混ざっていないか
・h2 / h3 / p / ul / li で整理されているか
・コードブロック記号 ``` が含まれていないか

これにより、Reviewer AIは「文章の中身」だけでなく、「記事データとして扱いやすいか」も確認できます。

改善後のReviewer AIプロンプト例

agents/reviewer.py では、確認項目を増やします。

Reviewer AIの最後に必ず、

または、

を出させることで、プログラム側で次の処理を判断しやすくなります。

WriterとReviewerはループさせるべきか

実用性を高めるなら、WriterとReviewerはループさせるべきです。

第1回の最小実装では、流れは以下でした。

Writer

Reviewer

Writer

保存

この場合、最後のWriter修正版をReviewerが確認していません。

つまり、保存される記事は、ReviewerがOKを出した記事とは限らないという問題があります。

そこで、次のような流れに改善します。

Writer

Reviewer
├ OK → 保存
└ 修正必要 → Writerへ戻す

Reviewer再確認
Writer AIが記事を作成し、Reviewer AIが品質確認を行い、OKなら保存、修正が必要ならWriter AIへ戻すレビュー改善ループの流れ図

このように、ReviewerがOKを出した記事だけを保存する方が、AI記事作成システムとして自然です。

ループ回数には上限をつける

ただし、WriterとReviewerを無制限にループさせるのは危険です。

Reviewer AIが毎回「修正必要」と判定すると、処理が終わらなくなる可能性があります。

そのため、最大回数を決めます。

最大レビュー回数:3回

のようにしておくと安全です。

流れは以下です。

1回目レビュー:修正必要

Writer修正

2回目レビュー:修正必要

Writer修正

3回目レビュー:OKなら保存

修正必要でも最大回数のため保存または停止

最初は、最大回数に達したら「最後の修正版を保存する」形でも十分です。

レビューOK判定の簡易実装

Reviewer AIの出力からOK判定を確認する関数を作れます。

これは簡易的な判定です。

将来的には、Reviewer AIの出力をJSON形式にして、

のようにすると、より安定して判定できます。

ただし、第2回の段階では、まず文字列判定でも十分です。

出力ファイル上書き防止

第1回では、出力ファイル名がfinal_article.htmlで固定でした。

そのため、プログラムを複数回実行すると、前回の記事が上書きされてしまいました。

これはエージェントの役割そのものではありませんが、マルチエージェントの出力を比較・改善するうえでは大きな問題です。

たとえば、次のような比較ができません。

・1回目の出力
・2回目の出力
・Reviewer修正後の出力
・プロンプト変更前後の出力

そこで、ファイル名に作成日時を入れることとしました。

これで、以下のようにファイルが残り、プログラムを複数回実行しても上書きされず、出力結果を比較できます。

final_article_20260428_153012.html
final_article_20260428_154530.html
final_article_20260428_160105.html

役割分担を整理した改善後の流れ

第2回時点で目指す流れは、以下です。

キーワード入力

Planner AI:記事設計

Writer AI:初稿作成

Reviewer AI:レビュー

OKなら保存

修正必要ならWriter AIへ戻す

Reviewer AIが再確認

日時付きファイル名で保存

これにより、最小実装よりも品質が安定しやすくなります。

改善後のmain.pyイメージ

第2回では、全体フローを以下のように整理できます。

このコードでは、Reviewer AIがOKを出すまで、最大3回までWriter AIに修正させます。

修正後のプログラム

第2回での主な変更点は以下の通りです。

・final_article.html 固定をやめ、日時付きファイル名で保存
・Writer AI ⇄ Reviewer AI のレビュー・修正ループを追加
・Reviewer AI が OK 判定したら保存
・最大レビュー回数を設定
・Writer AI のHTML出力ルールを固定
・Reviewer AI にHTML形式チェックを追加

ファイル構成

第1回からの変更はありません。

article-agent/
├ main.py
├ llm_client.py
├ agents/
│ ├ planner.py
│ ├ writer.py
│ └ reviewer.py
├ mcp_client.py
├ mcp_server.py
└ output/

第2回修正後のプログラム

以下が、第2回での修正後プログラム一式です。

llm_client.py

agents/planner.py

agents/writer.py

agents/reviewer.py

mcp_server.py

mcp_client.py

main.py

修正後のプログラムを実行する

WSL側で実行します。

キーワード入力待ちの状態になるので、作成する記事のキーワードを入力します。

Gemma 4ローカル・マルチエージェント記事作成システム
--------------------------------------------------
記事キーワードを入力してください:

キーワードを入力すると記事作成処理が始まり、以下の様に処理が進みます。
(キーワード:ブロックチェーン)の場合

記事の作成が完了すると、article-agent/output/フォルダに、HTML記事(final_article_年月日_時間.html)が保存されます。

今回の修正プログラムで、キーワードがブロックチェーンで作成された記事を以下に添付します。

ファイル形式:Shift_JIS

ファイル形式:UTF-8

「最新情報」が反映されない問題への対応

第1回の検証では、キーワードに「最新」を入れても、最新情報が十分に反映されないケースがありました。

これは、現在のシステムにWeb検索機能がないためです。

Gemma 4はローカルLLMとして動いています。
そのため、現時点の構成では、Webにアクセスして最新情報を取得しているわけではありません。

つまり、現在の構成は以下です。

ローカルLLMの内部知識だけで記事を書く

そのため、次のようなキーワードでは注意が必要です。

・最新AI
・AI 2026年
・最新トレンド
・新機能
・リリース情報

これらを正確に扱うには、将来的にResearcher AIとWeb検索MCPを追加する予定です。

ただし、それは第5回以降で扱う内容にします。

第2回では、まず Planner / Writer / Reviewer の役割を安定させること に集中して修正しました。

第2回での結論

今回の修正により、Writer AIとReviewer AIをループさせ、日時付きファイル名で記事を保存できるようになりました。

一方で、実行結果からは、Writer AIが途中で本文をプレースホルダー化してしまうケースや、CSSを出力しない指示にもかかわらずstyleタグやインラインCSSが残るケースが確認できました。

つまり、マルチエージェントをループさせるだけでは、品質が必ず安定するわけではありません。

次回は、Planner・Writer・Reviewerの各出力を途中保存し、どの段階で出力が崩れたのかを確認できるようにします。

今後のシリーズ構成

今回の検証結果を踏まえ、シリーズ構成は次のように整理できます。

第1回:Gemma 4・Ollama・WSLで最小実装

第2回:Planner / Writer / Reviewer の役割を整理する

第3回:AI記事作成の失敗原因を見つける|途中保存でマルチエージェントをデバッグする

第4回:MCP風ツールを正式なMCP構成へ近づける

第5回:Researcher AIとWeb検索MCPで最新情報に対応する

第6回:イベント駆動型マルチエージェントへ発展させる

まとめ:AIマルチエージェントは役割分担が重要

AIマルチエージェント構成では、単にAIを複数回呼び出すだけでは不十分です。

重要なのは、それぞれのAIに明確な役割を与えることです。

Planner AI:何を書くかを決める
Writer AI:設計に沿って書く
Reviewer AI:品質を確認する

さらに、実用性を高めるには、次の改善も必要です。

・WriterとReviewerをループさせる
・ReviewerがOKを出した記事を保存する
・HTML出力ルールを固定する
・保存ファイル名に日時を入れる

第1回では、Gemma 4を使ってAIマルチエージェント記事作成システムを最小構成で動かしました。

第2回では、その中核となる Planner / Writer / Reviewer の役割を整理しました。

第3回では、AI記事作成の失敗原因を見つけ、途中保存でマルチエージェントをデバッグします。