「LangChainとLangGraphによるRAG・AIエージェント［実践］入門」でつまずいたことメモ:11章

# はじめに

[「LangChainとLangGraphによるRAG・AIエージェント［実践］入門」](https://gihyo.jp/book/2024/978-4-297-14530-9)の第11章で私がつまずいたことのメモです。

（このメモのほかの章へ：[1章](https://qiita.com/segavvy/items/b31efa98a2d4c20e9ec8) / [2章](https://qiita.com/segavvy/items/2801a079c686c906e582) / [3章](https://qiita.com/segavvy/items/97ab2c1958b894124d44) / [4章](https://qiita.com/segavvy/items/41225198677cf4f498b5) / [5章](https://qiita.com/segavvy/items/7751b41db1e9c672b6f1) / [6章](https://qiita.com/segavvy/items/3185ca18afe28c96e6bd) / [7章](https://qiita.com/segavvy/items/ac0ce03f9b3cd83ee5ed) / [8章](https://qiita.com/segavvy/items/8109b3a1ed3a4efe1140) / [9章](https://qiita.com/segavvy/items/a4f9d80fe6a3f541d4b5) / [10章](https://qiita.com/segavvy/items/0cbd272e280cfaf6ee28) / 11章 / [12章](https://qiita.com/segavvy/items/3833525ebace5ff24a4e) / [まとめ](https://qiita.com/segavvy/items/265b101a6ebb82284e4b)）

:::note info
この記事は個人で作成したものであり、内容や意見は所属企業・部門見解を代表するものではありません。
:::

# 第11章 エージェントデザインパターン

前章に続き西見さんが担当された章です。

## 11.1 エージェントデザインパターンの概要

すでに18個もパターン化されていることに驚きです。[2025年はAIエージェント元年](https://www.google.com/search?q=2025%E5%B9%B4%E3%81%AFAI%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E5%85%83%E5%B9%B4)などと騒がれていますが、現場はかなり先行しています。

なお、本の注1で紹介されている論文ですが、履歴を見てみると2024年5月のv1では16パターンだったのが6月6日のv2で17パターンになり、6月24日のv3で今の18パターンになって、11月のv4ではパターンの選択方法などが追加されていました。かなりの頻度で更新されている論文です。

https://arxiv.org/abs/2405.10467

## 11.2 18のエージェントパターン

ここからは18個のエージェントパターンの説明になりますが、一気に読んだら私の頭ではパンクしてしまったので、前述の論文で2024年11月に追加されたデザインパターンの選択方法[^decisionmodel]に沿って再整理してみます。

### ①利用者のコンテキストを調査・収集できるか？

いきなりですが「コンテキスト」という言葉が日本語だとピンとくる表現がなくて、とっつきにくいかも知れません。

脱線しますが、社内で人間中心設計の勉強会をやった時もコンテキストという言葉がでてきて、慣れるまでに少し時間がかかりました。当時の勉強会の教材[^hcd]曰く、コンテキストとは「その人が置かれている状況や背景、文化的・社会的・能力的・経済的・時間的・物理環境的な制約、過去の経験など」というような意味で、本人が自覚していない要素も含みます。たとえば「何か飲みたい！」と言われた時に、その人がビールを飲みたいのか、コーヒーを飲みたいのか、冷たい水を飲みたいのか、また、仮にそれがコーヒーだとした時も、缶コーヒーでいいのか、落ち着いた喫茶店がいいのか、自分で豆を挽いて自宅でのんびりコーヒーを飲みたいのかは、状況や背景がわからないとさっぱりわかりません。その時に知りたいのが「コンテキスト」です。

コンテキストをはっきりさせないとゴールが設定できません。それをはっきりさせるための作業が、本の注5にもあるように「コンテキストエンジニアリング」のようですね。

コンテキストをはっきりさせるに当たり、コンテキストの調査・収集ができない場合は「1.パッシブゴールクリエイター」を、できる場合は「2.プロアクティブゴールクリエイター」を使います。

### ②プロンプトを最適化するか？

事前に用意したプロンプトのテンプレートを用いてプロンプトを最適化するような場合は「3.プロンプト／レスポンス最適化」を使います。ただし、最適化するためにはオーバーヘッドが生じますし、最適化できない内容もあるでしょう。最適化するかどうかは要件次第です。

### ③外部データを利用するか？

外部データを利用する場合は「4.検索拡張生成」を使います。第4章から第6章に出てきたRAGですね。

### ④LLMを何回も呼べるか？

コストや速度の要件で1回しか呼べない場合は「10.ワンショットモデルクエリ」を、そうでなければ「11.インクリメンタルモデルクエリ」で情報を拡張します。

### ⑤目標に向けたプランのステップは途中で分岐するか？

分岐しない場合は「5.シングルパスプランジェネレーター」を、分岐する場合は「6.マルチパスプランジェネレーター」を使って目標に向けたプランを生成します。

### ⑥そのプランを見直すか？

見直す場合は「7.セルフリフレクション」、「8.クロスリフレクション」、「9.ヒューマンリフレクション」を使います。また、「8.クロスリフレクション」で複数のAIエージェントに判断させる場合は、そのAIエージェント間の協調のさせ方によって「12.投票ベースの協調」、「13.役割ベースの協調」、「14.議論ベースの協調」を使います。そういえば5章で楽観的な意見と悲観的な意見を生成させて融合させましたが、これは「13.役割ベースの協調」と言えるのかも知れません。

### ⑦LLMの入出力のチェックが必要か？

チェックが必要な場合に使うのが「15.マルチモーダルガードレール」です。

### ⑧外部のツールやエージェントも利用するか？

利用する場合は「16.ルール／エージェントレジストリ」と「17.エージェントアダプター」を使います。

### ⑨リリース前にエージェントを評価するか？

評価する場合は「18.エージェント評価器」ですね。

デザインパターンを選択する観点でざっくりまとめ直してみましたが、あまり自信がないので、誤りがありましたらご指摘ください:sweat_smile:


## 11.3 まとめ

本にもありますが、ちょっと概念的な内容なので正直ピンときていない部分もあります。次回の最終章で実装しながら理解を深めましょう。

（このメモのほかの章へ：[1章](https://qiita.com/segavvy/items/b31efa98a2d4c20e9ec8) / [2章](https://qiita.com/segavvy/items/2801a079c686c906e582) / [3章](https://qiita.com/segavvy/items/97ab2c1958b894124d44) / [4章](https://qiita.com/segavvy/items/41225198677cf4f498b5) / [5章](https://qiita.com/segavvy/items/7751b41db1e9c672b6f1) / [6章](https://qiita.com/segavvy/items/3185ca18afe28c96e6bd) / [7章](https://qiita.com/segavvy/items/ac0ce03f9b3cd83ee5ed) / [8章](https://qiita.com/segavvy/items/8109b3a1ed3a4efe1140) / [9章](https://qiita.com/segavvy/items/a4f9d80fe6a3f541d4b5) / [10章](https://qiita.com/segavvy/items/0cbd272e280cfaf6ee28) / 11章 / [12章](https://qiita.com/segavvy/items/3833525ebace5ff24a4e) / [まとめ](https://qiita.com/segavvy/items/265b101a6ebb82284e4b)）

[^hcd]: その時は、[Uʼeyes Designさんが公開されている「『知っておきたい！ユーザー視点の製品・サービス開発』人間中心設計基礎講座」](https://www.ueyesdesign.co.jp/seminar/hcd.html)を教材にしました。わかりやすくてオススメです。ちなみにこの教材では「コンテキスト」ではなく「コンテクスト」と表現されていました。コンテクストの解説は[人間中心設計基礎講座「ユーザーを理解する 1 」（P_2_1）](https://youtu.be/I_6VuX1upNg?feature=shared&t=202)です。
[^decisionmodel]: ここで見ているのはv4の「5.1 Decision Model」の項です。私は英語が苦手なので[HTML版](https://arxiv.org/html/2405.10467v4#S5)をGoogle翻訳して読んでいます。