『LangChainとLangGraphによるRAG・AIエージェント［実践］入門』は、LangChain/LangGraphを日本語で学習したい人にとって必携の一冊 part2

<img src="https://raw.githubusercontent.com/GenerativeAgents/agent-book/refs/heads/main/assets/cover.jpg" width="400">

- [Amazon](https://www.amazon.co.jp/dp/4297145308/)
- [技術評論社](https://gihyo.jp/book/2024/978-4-297-14530-9)

タイトル: LangChainとLangGraphによるRAG・AIエージェント［実践］入門

以降、「本書」と呼称します。

書評は、二部構成です。第一部へのリンクは下記を参照して下さい。

- [第一部の書評](https://qiita.com/arrowKato/items/9794afd5c0890606fcea) OpenAIのチャットAPIとLangChainの基礎からRAGまで
- [第二部の書評](https://qiita.com/arrowKato/items/af3d1cb5e0121db88f1e) AgenticなAIシステム と LangGraph


# 書籍の目次
496ページの立派な鈍器ですので、二部構成で書評を書いていきます。
注：以下の第一部、第二部という区分けは書評の都合上で行ったものであり、書籍自体に存在するわけではありません。

## 第一部: OpenAIのChat チャットAPIとLangChain自体の利用方法
- 第1章　LLMアプリケーション開発の基礎
- 第2章　OpenAIのチャットAPIの基礎
- 第3章　プロンプトエンジニアリング
- 第4章　LangChainの基礎
- 第5章　LangChain Expression Language（LCEL）徹底解説
- 第6章　Advanced RAG
- 第7章　LangSmithを使ったRAGアプリケーションの評価

[第一部の書評](https://qiita.com/arrowKato/items/9794afd5c0890606fcea)

## 第二部: AgenticなAIシステム と LangGraph
- 第8章　AIエージェントとは
- 第9章　LangGraphで作るAIエージェント実践入門
- 第10章　要件定義書生成AIエージェントの開発
- 第11章　エージェントデザインパターン
- 第12章　LangChain/LangGraphで実装するエージェントデザインパターン

[第二部の書評](https://qiita.com/arrowKato/items/af3d1cb5e0121db88f1e) ここ


実は、189~496ページが第二部なので、AI AgentとLangGraphの解説のほうが長いです(62%)。付録はAgentデザインパターンの実装コードなので、後半のテーマに含めます。

# 第8章　AIエージェントとは
- 8.1　AIエージェントのためのLLM活用の期待
- 8.2　AIエージェントの起源とLLMを使ったAIエージェントの変遷
- 8.3　汎用LLMエージェントのフレームワーク
- 8.4　マルチエージェント・アプローチ
- 8.5　AIエージェントが安全に普及するために
- 8.6　まとめ

論文で言うところの Introduction にかかれているような話です。AIエージェントについての歴史のお話から、LLMが出たことで大幅に実用に近づいたことなどです。
8.3と8.4では、もう少し実用的に軸を移して、汎用フレームワーク、Text-to-SQLの手法、ソフトウェア開発でのエージェントの活用について書かれています。
8.5は責任あるAI(Responsible AI)に付いての話なので、本番リリースの前には一度は目を通しておくべき内容です。

## マルチエージェントとエージェンティックなAIシステム

> **マルチエージェントの定義**
> - マルチステップなマルチエージェント:一連の処理の中で、複数のシステムプロンプトを使って、役割やステップごとに別々の AI エージェントで処理を行う、ワークフローの最適化を目的とした処理形態
> - マルチロールなマルチエージェント:異なるペルソナや役割を持たせた複数のエージェントを、 目的に向かって協調動作させる形態

P.208より引用

> **エージェンティックな AI システムの性質**
> エージェンティックな AI システムの性質は、次の4つが挙げられています。この4つの度合いが 大きければ大きいほど、エージェントらしい(Agentic)と見なせる、とされています
> - 目標の複雑さ:どれだけ困難な目標を達成できるか? どれだけ幅広い目標を達成できるか?
> - 環境の複雑さ:目標を達成するための環境はどれだけ複雑か?
> - 適応性:新しい状況や予期せぬ状況にどれだけうまく対応できるか?
> - 独立した実行:どれだけ少ない人間の介入や監督で、信頼性を持って目標を達成できるか?

P.233より引用


とありますし、Andrew先生[^1]の記事にも下記のような記述があり、「AIエージェント」というよりも「エージェンティックなAIシステム」と表現するほうが黎明期からの研究者から指摘される可能性が低そうです。

![it_is_agentic](https://dl-staging-website.ghost.io/content/images/size/w1000/2024/06/unnamed--63-.jpg)

> Rather than arguing over which work to include or exclude as being a true agent, we can acknowledge that there are different degrees to which systems can be agentic.
> どの作業を真のエージェントとして含めるか除外するかを議論するのではなく、システムがエージェンティック(agentic)になる度合いはさまざまであることを認めることができます。

https://www.deeplearning.ai/the-batch/issue-253/ より引用


# 第9章　LangGraphで作るAIエージェント実践入門
- 9.1　LangGraphの概要
- 9.2　LangGraphの主要コンポーネント
- 9.3　ハンズオン：Q&Aアプリケーション
- 9.4　チェックポイント機能：ステートの永続化と再開

LangGraphの解説です。日本語で読める喜びを噛みしめる瞬間part2です。
LangChainの知識がないとわからない部分があるので、5章までと7章(のLangSmithの箇所)で基礎を固めたうえでこの章を読むと良いと思います。

[9章のコード](https://github.com/GenerativeAgents/agent-book/blob/main/chapter09/notebook.ipynb)は公開されていますが、GitHub上のコードはコメントというか説明はほとんど入っていないので、9章の説明をみながらコードを追って下さい。

Columnにある、グラフ構造をビジュアライズして表示することについては、下記のようにmermaid記法から画像を表示させることもできます。自分の書いたグラフ構造を視覚的把握することでデバッグにもなるので、Jupyterをつかっているなら毎回表示することをおすすめします。
```python
from IPython.display import Image, display

# ちなみに mermaidでの描画も可能です。
display(Image(compiled.get_graph().draw_mermaid_png()))
```

描画例は、[こちら](https://github.com/arrowkato/agent-book/blob/main/chapter09/notebook.ipynb)参照です。

# 第10章　要件定義書生成AIエージェントの開発
- 10.1　要件定義書生成AIエージェントの概要
- 10.2　環境設定
- 10.3　データ構造の定義
- 10.4　主要コンポーネントの実装
- 10.5　ワークフロー構築
- 10.6　エージェントの実行と結果の確認
- 10.7　全体のソースコード
- 10.8　まとめ

9章を踏まえて、実践的で複雑な処理が必要な例として、要件定義書生成AIエージェントの開発を行っています。
Jupyter Notebookから[documentation_agent](https://github.com/GenerativeAgents/agent-book/tree/main/chapter10/documentation_agent)フォルダー配下のpythonのコードを呼び出しているので、LangSmithがあったほうが処理を追跡しやすいです。

# 第11章　エージェントデザインパターン
- 11.1　エージェントデザインパターンの概要
- 11.2　18のエージェントデザインパターン
- 11.3　まとめ

[Agent Design Pattern Catalogue: A Collection of Architectural Patterns for Foundation Model based Agents](https://arxiv.org/abs/2405.10467)の解説です。日本語で読める喜びを噛みしめる瞬間part3です。

上記の論文では18個のパターンが紹介されています。この本での解説の付加価値としては、それを4つに大別しているところと思います。みんな大好きな[GoFのデザインパターン](https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3_(%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2)) でも全部で23パターンあり、生成に関するパターン、構造に関するパターン、振る舞いに関するパターン の3つの大分類もあり、それに倣ったのかはわからないですが、それに当たるものを追加したうえで、各パターンを解説しています。表11.1をご参照下さい。

この分野自体がまだまだ発展しているので、向こう3年くらいでパターンの追加、統合が起こる可能性もあると思いますが、考え方というか実装のヒントとしては十分に使えると思います。

# 第12章　LangChain/LangGraphで実装するエージェントデザインパターン
- 12.1　本章で扱うエージェントデザインパターン
- 12.2　環境設定
- 12.3　パッシブゴールクリエイター（Passive Goal Creator）
- 12.4　プロンプト／レスポンス最適化（Prompt/Response Optimizer）
- 12.5　シングルパスプランジェネレーター（Single-Path Plan Generator）
- 12.6　マルチパスプランジェネレーター（Multi-Path Plan Generator）
- 12.7　セルフリフレクション（Self-Reflection）
- 12.8　クロスリフレクション（Cross-Reflection）
- 12.9　役割ベースの協調（Role-Based Cooperation）
- 12.10　まとめ

11章のデザインパターンの実装例です。代表的なパターンを7つ実装してます。(RAGは6章実装済みなので、本書での実装例は8つ)
公開されている実装は、[こちら](https://github.com/GenerativeAgents/agent-book/tree/main/chapter12)です。9章と同じく解説は本書を参照しながらコードを追って下さい。

「カレーライスの作り方」で各パターンを動かしています。
あくまで私が手元で試したところですが、「カレーライス 簡単」などを検索した結果、みなさんがよく知っている〇〇padや〇〇シルでの定番というかよく閲覧されているであろうレシピばかりだったのでどのパターンも最終結果にあまり違いがなかったです。
もう少し難しいというか個性や特色が出るようなテーマを与えてみた方がいいのかもしれません。


# 感想

生成AIは凄まじいスピードで発展しており、LangChain/LangGraphも例に漏れません。
OpenAIの o1-preview, o1-mini の話が入っているので、最新情報からの遅れはほとんど無い[^2]と言っていいと思います。
また、基礎からきっちり書かれている日本語の技術書は、大抵訳書ばかりで、原著は2年前に発行だったみたいなことが多いなか、日本語で基礎から実用的なトピックまでを網羅しているのは大きな特長と思います。

この2つの条件を兼ね備えた貴重な本なので、現時点(2024/11/03)で一番オススメできるLangChain/LangGraphの解説書です。

と、偉そうに感想を書きましたが、11,12章の理解がまだ浅いので、もう一度読み返してみようと思います。

# 脚注
[^1]: https://www.andrewng.org/ [DeepLearning.AI](https://www.deeplearning.ai)はAndrew先生が運営しているサイトです。ドメイン名からして強い。

[^2]: https://openai.com/index/introducing-openai-o1-preview/ 2024/09/12 のニュース