😗

Agent Design Pattern Catalogue: LLMエージェント構築の羅針盤

2024/12/15に公開

序文

お疲れ様です、波浪です。
いやー、近頃はFoundation Model(以下FM)をベースとしたエージェントが熱い! みんなAutoGPTとかBabyAGIとか名前くらいは聞いたことあるんじゃないでしょうか? GPTが流行って久しいけど、それを使って自律的なエージェントを組み立てる、まさに「ゴール指向型」のAIエージェント構築が世界中で加速しています。
でも、実際にエージェントを設計しようとすると「どこから手をつけりゃいいんだよ!?」って思う人も多いはず。僕も最初はそうでした。なにせ新しい概念やツールがわんさか出てくるし、FMそのものが超巨大なブラックボックス状態。そして「これ、本当に狙ったゴールにたどり着けるの?」みたいな懐疑的な気持ちも出てくるじゃないですか。

そんな悩める子羊たちは俺と一緒に論文(arXiv:2405.10467v3)でも読もうぜ! そして何かした気になろう!
その名も「Agent Design Pattern Catalogue: A Collection of Architectural Patterns for Foundation Model based Agents」。訳すと「エージェント設計パターンカタログ:基盤モデルベースエージェントのためのアーキテクチャパターン集」…長いわ!

論文で紹介されている18個のパターン。これを「エージェントってどうデザインすりゃいいんだ!?」と悩んだ時に、サクッと使えるガイドとして提示していけたらこれ幸いですね。
昔、CやJavaで大規模プロジェクト組んでた頃は、アーキテクチャパターンなんてGoF本を見ながら「ふむふむ」ってやって。。。やって。。。ごめん嘘こいたあんな本読んでないです、僕は結城浩先生のデザイソパターソ本擦り切れるまで読んでました。GoF本?英語とか読めるわけないじゃん
今はLLMを中心としたエージェント時代。パターンも大きく様変わりしています!

閑話休題
それじゃあ章立てていくぜーーー!!!!!

章立て

  1. はじめに:FMベースエージェント時代の幕開け
  2. エージェント設計が難しい理由
  3. パターンカタログの全体像
  4. ゴール生成系パターン
    4.1 パッシブゴールクリエイター(Passive Goal Creator)
    4.2 プロアクティブゴールクリエイター(Proactive Goal Creator)
  5. プロンプト・レスポンス最適化系パターン
    5.1 プロンプト/レスポンスオプティマイザー(Prompt/Response Optimiser)
    5.2 RAG:Retrieval Augmented Generation
  6. モデルクエリ戦略系パターン
    6.1 ワンショットモデルクエリ(One-Shot Model Querying)
    6.2 インクリメンタルモデルクエリ(Incremental Model Querying)
  7. プラン生成パターン
    7.1 シングルパスプランジェネレーター(Single-Path Plan Generator)
    7.2 マルチパスプランジェネレーター(Multi-Path Plan Generator)
  8. リフレクション(振り返り)パターン
    8.1 セルフリフレクション(Self-Reflection)
    8.2 クロスリフレクション(Cross-Reflection)
    8.3 ヒューマンリフレクション(Human Reflection)
  9. マルチエージェント協調パターン
    9.1 投票型協調(Voting-based Cooperation)
    9.2 ロールベース協調(Role-based Cooperation)
    9.3 ディベート型協調(Debate-based Cooperation)
  10. ガードレール・ツール接続パターン
    10.1 マルチモーダルガードレール(Multimodal Guardrails)
    10.2 ツール/エージェントレジストリ(Tool/Agent Registry)
    10.3 エージェントアダプタ(Agent Adapter)
  11. エージェント評価パターン
    11.1 エージェントエバリュエーター(Agent Evaluator)
  12. これらのパターンをどう活用するか?
  13. 規制対応や標準化とパターンの関連性
  14. 評価手法への展望
  15. まとめ

はじめに:FMベースエージェント時代の幕開け

昔、僕がドラクエ4でクリフトに殺意を覚えている頃、ここまでAIが人間らしく振る舞うなんて想像もしなかった! ファミコンやスーファミで遊んでた90年代、そしてガラケーでアプリ作ってた時代を経て、今やFM(Foundation Model)と呼ばれる巨大モデルがテキストからコード、画像、何でも理解・生成しちゃう時代です。
関係ないけどこのFMって用語、もう一般用語なの?こないだのre:invent でもAWSがふつーに使ってて一体どう言う概念なのかわかんなかったんだよね俺、まあいいけど。

さてその中で、FMベースのエージェントは一種の「自律的でゴール指向なAI」。ユーザーが「これやっといて!」と言えば、目標を分解し、計画し、実行してしまう。けど、問題は山積み。最終ゴールへのプロセスがブラックボックスだったり、曖昧なタスクで混乱したり、責任の所在が不明瞭になったり……。

そこで、我々にはアーキテクチャパターンが必要になるんだ! Patterns of patterns! 昔GoFパターンでオブジェクト指向設計が楽になったように、FMエージェント設計もパターンでスッキリ整理できます。

エージェント設計が難しい理由

「単にLLM(大規模言語モデル)使えばエージェントになるんじゃね?」と思った人、甘い!
実際にはこんな課題があるんです。

  • ゴール特定が難しい:ユーザーの要求がふんわりしてて、本当にやりたいことが曖昧。
  • 推論の不確実性:計画を立てても、その途中でモデルが妄想(ハルシネーション)することも!
  • 説明可能性不足:中で何が起きてるかブラックボックスで不安が拭えない。
  • アカウンタビリティ(責任)が複雑:誰が責任持つ?エージェント?ユーザー?開発者?外部ツール?
  • データとプライバシー問題:FMモデルを再学習するコストやプライバシー保護も面倒。

こういった苦しさを解決するために、設計パターンが提案されているわけです!

パターンカタログの全体像

紹介するパターンは全部で18種類。

  • ユーザーのゴールを処理するための「ゴール生成系」
  • プロンプトやレスポンスを最適化する「プロンプト・レスポンス系」
  • モデル問い合わせ(クエリ)の仕方を決める戦略的パターン
  • プラン生成をどうするかの指針
  • 計画を振り返る「リフレクション」
  • マルチエージェント間協調(投票、ロール分担、ディベート)
  • ガードレールで安全性を担保したり、外部ツール接続を整理したり
  • 最後にエージェント自体を評価する仕組みも用意。

このカタログがあれば、「今自分が抱えてるエージェント設計の悩み」に対して、どのパターンが助けになるか見えてきます。

ゴール生成系パターン

ぶっちゃけこれがいちばん大事、計画性のない仕事は全てꘐ(読み仮名:ファー 意味:リビア語、意味は死とかゴミとかそんな意味)です

パッシブゴールクリエイター(Passive Goal Creator)

ユーザーが入力したプロンプトから、エージェントが受動的にゴールを特定するパターン。「とりあえずユーザーが言ったことを元に、ゴールを固める」。
簡単だが、ユーザー任せなんで、曖昧な要求がくると推論が不安定になることも。

プロアクティブゴールクリエイター(Proactive Goal Creator)

ユーザーの文脈だけじゃなく、周辺環境や他のツール情報を拾ってエージェントが積極的にゴールを推測する。
たとえばカメラ映像やスクショなどからユーザーの環境を理解し、ゴールを確定。「お、手話してる?この指示はこういうゴールだな!」みたいな感じ。
ただし実装は複雑でコスト高め。

プロンプト・レスポンス最適化系パターン

プロンプト/レスポンスオプティマイザ(Prompt/Response Optimiser)

「ユーザーの入力が雑すぎて困る!」というとき、このパターンでプロンプトやレスポンスを標準化。
テンプレートを使って整形し、フォーマットを揃える。
だが、すべてを網羅できるわけではなくメンテコストもかかる。

RAG(Retrieval Augmented Generation)

ローカルデータや特定の知識ベースから情報を引っ張ってきてFMに食わせる手法。
大規模モデルを再学習することなく、外部データを都度参照。
プライバシー確保しつつコスト削減も狙える。ただしデータ管理が大変。

モデルクエリ戦略系パターン

ワンショットモデルクエリ(One-Shot Model Querying)

一発でFMに問い合わせて、全部の計画をまとめて引き出す。
効率的でコストも低いが、複雑なタスクには向かない。説明可能性も低い。

インクリメンタルモデルクエリ(Incremental Model Querying)

ステップごとにFMに問い合わせながら計画を立てる。
ユーザーが途中でフィードバックを入れることも可能で、説明性・精度を高められるが、コストは上昇。

プラン生成パターン

シングルパスプランジェネレーター(Single-Path Plan Generator)

一つの道筋でステップを並べるCoT(Chain-of-Thought)的な手法。
明快だが柔軟性は欠ける。

マルチパスプランジェネレーター(Multi-Path Plan Generator)

複数の道筋(選択肢)を用意してユーザーが選べるようにするTree-of-Thoughts的な手法。
複雑な問題でユーザ好みに合わせられるが、オーバーヘッド増。

リフレクション(振り返り)パターン

セルフリフレクション(Self-Reflection)

エージェント自身が生成した計画を自分で振り返り、改善する。
効率的だけど、エージェント自身が弱いと大した改善にならない。

クロスリフレクション(Cross-Reflection)

別のエージェントにフィードバックを求める。
多様な視点で精度UP。ただしエージェント間の公平性や責任が複雑に。

ヒューマンリフレクション(Human Reflection)

ユーザーや人間の専門家がフィードバックを与え、最終的に人間の意図・好みを最大限反映。
ただし人間側が曖昧だと意味なし。

マルチエージェント協調パターン

投票型協調(Voting-based Cooperation)

複数エージェントが意見を出して多数決する。
公平性や集合知を狙うが、通信オーバーヘッドは増える。

ロールベース協調(Role-based Cooperation)

エージェントに役割を割り振り、階層的に責務分担。
スケーラブルで責任範囲も明確になる。

ディベート型協調(Debate-based Cooperation)

エージェント同士が議論(ディベート)しあって合意を探る。
批判的思考や適応性向上が狙えるが、複雑性も上がる。

ガードレール・ツール接続パターン

マルチモーダルガードレール(Multimodal Guardrails)

入力・出力を検閲、ルール化して有害な情報流出や倫理的問題を防ぐ。
安全性確保だが、実装コスト増。

ツール/エージェントレジストリ(Tool/Agent Registry)

利用可能なツールやエージェントをリスト化するカタログ的存在。
「どのツール使えばいいか?」を素早く判断できる。

エージェントアダプタ(Agent Adapter)

外部ツールのインターフェースをエージェントが理解しやすい形式に変換。
面倒な接続調整を自動化するイメージ。

エージェント評価パターン

エージェントエバリュエーター(Agent Evaluator)

設計時や運用時にエージェントの性能をチェックする仕組み。
独自メトリクスでの品質評価や改善の指針に。

これらのパターンをどう使う?

パターンは「これを使え!」と決まっているわけではありません。
自分のエージェントがどんな用途なのか、ユーザーはどんなインタラクションを期待しているのか、何を優先するのか(安全性?拡張性?効率性?)によって選択が変わってきます。

  • 対話形式でユーザーをサポートするなら、「パッシブ目標クリエーター + RAG + 人間反省」でシンプルかつ適応度UP。
  • 複雑なタスク自動化なら、「プロアクティブ目標クリエーター + マルチパスプランジェネレーター + クロス反省 + 役割ベース協力」で高度な柔軟性と信頼性を。
  • 安全性重視なら、「マルチモーダルガードレール + 自己反省」を前面に出して問題発言防止。

実際は動かしてみては修正、さらに試しては改善のループ。
「正解は一つではない」というのが、この領域の面白いところです。

規制対応や標準化とパターンの関連性

EUのAI法やNISTのガイドライン、ISO規格など、AI関連のルール整備が進んでいます。
これらに対応するためにはMultimodal Guardrailsで出力をフィルタしたり、Role-based Cooperationで責任を明確にするなど、パターンが役立つ可能性大。
「パターン+規制対応」でエージェントを社会的に受け入れやすくする、これも今後の大きなテーマです!

評価手法への展望

エージェントをテストする「Agent Evaluator」はまだまだ成熟途上。
どういうメトリクスで評価する? 説明可能性や責任追跡を数値化するには?
この辺り、これからの研究課題ですが、少なくともパターンがあれば評価ポイントを明確にしやすい。

まとめ

FMベースのエージェントは可能性無限大だけど、設計となると一筋縄じゃいかない。
でも、こうしたアーキテクチャパターンを知っていれば、どの段階で何が必要か、どう改善できるか、手掛かりが見えてくるはずです。
僕が初めてドラクエ4を手にした日から四半世紀以上、え?四半世紀も経ってるの?... たってるな...
まあ、ええ!四半世紀たって!ついにまともなクリフトが作れるエージェント設計時代が来た!
とにかく、試して壊して学び続ける、それがLLMエージェント開発の醍醐味!
我が人生にいっぺんの悔いなし!!!!!!!!!

以上、良いエージェント開発ライフを!!!

Discussion