書評：「AIエージェント実践本」推しポイントと惜しポイント！

## はじめに
ありがたいことに「[LangChainとLangGraphによるRAG・AIエージェント実践入門](https://gihyo.jp/book/2024/978-4-297-14530-9)」（技術評論社）を献本いただいたので書評を書きます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/130262/c5c539aa-2ea4-4cae-bc03-3bcc13b8de2c.jpeg" width="30%">

書評に際しては、率直に書いて欲しいとの依頼があったので、推しポイントだけではなく、ここは惜しかった！という点（惜しポイント）も書くようにしました。

## 総括

総じていうと、LLMアプリ（特にRAGやAIエージェント）の開発に興味のある人にとっては、間違いなく読んだ方が良い本だと思います。

推しポイントと感じたのは以下の点です。
- 内容の網羅性が高い
- 理論と実践のバランスが良い
- 公式のサイトだけだと分かりづらい内容をうまくフォローしている

以降はそれぞれごとに少し掘り下げて書いていきます。

## ここが推しポイントだ！
やや見出しのテンションが高いですが、以降、淡々と書いていきます…

### 推しポイント１ ： 内容の網羅性が高い

目次については[こちら](https://generative-agents.co.jp/news/2024-10-22_2)を見ていただくとして、**LLMアプリの開発に興味がある人はまずこの本から始めれば十分**という網羅性になっています。


網羅性が高いため、頭から律儀に読もうとすると分量（500ページ弱！）に圧倒されてシンドイかもしれません。
そのような場合、**ハンズオン形式でまずはLangChainとLangGraphを体感する**という方法をおすすめします！（個人的意見です）

- 「第４章 LangChainの基礎」のハンズオンをじっくりやる
- 「第５章 LCEL徹底解説」のハンズオンをやりつつ、「COLUMN」を気軽に読む

開発したいものがRAGならば
- 「第６章 Advanced RAG」のハンズオンをじっくりやる
- 「第７章 LangSmithを使ったRAGアプリケーションの評価」のハンズオンをやりつつ、関連技法の調査をする

開発したいものがAIエージェントならば
- 「第８章 AIエージェントとは」をさっと読む
- 「第９章 LangGraphで作るAIエージェント実践入門」のハンズオンをじっくりやりソースもしっかり読む
- 「第１０章 要件定義書作成AIエージェントの開発」のハンズオンをやる
- 「第１１章・第１２章 エージェントデザインパターン」はその時点での理解度に応じてさっと読むか興味のあるトピックを重点的に読む

ハンズオンをやりつつ書籍の説明を読むとかなり理解度が上がります。

一通りハンズオンをやった後に、その他の章や「COLUMN」を読むと、さらに色々な発見があると思います。

### 推しポイント２ ： 理論と実践のバランスが良い

前提として、ここでいう理論というのは、機械学習や生成AIの理論そのものではなく、応用するうえでの理論という意味です。

**良書の特徴のひとつとして理論と実践のバランスが取れている**というのがあると思います。（特に技術書の場合）
本書はどちらかといえば実践よりですが、以下の章については、理論が簡潔かつ分かりやすくまとまっています。

- 「第1章 LLMアプリケーション開発の基礎」
- 「第3章 プロンプトエンジニアリング」
- 「第8章 AIエージェントとは」
- 「第11章 エージェントデザインパターン」

自分の読書スタイルとしては、こういう部分は、PCから離れて、じっくりと紙の書籍で読むのが好みです。

上記の章だけでなく、随所に散りばめられている「COLUMN」も、理解を深める上で非常に有効なアクセントになっていると感じました。

:::note info
一番お気に入りの「COLUMN」を紹介すると、第５章（P.106）に「**LCELはどのように実現されているのか**」というのがあります。

ここでは、LCELの「|」記法がどのように実現されているのかを解説してくれています。
LCELを使うだけであれば、知らなくてもよい情報かもしれませんが、これを知ることで、LCELに「親近感」を感じました！
:::


### 推しポイント３ ： 公式のサイトだけだと分かりづらい内容をうまくフォローしている

言ってしまえば、この本全体が、公式サイトをうまくフォローしていると言えるのですが、特に目から鱗という感じだった部分を紹介します。

#### 第５章 LCEL徹底解説の本文とCOLUMNのバランスやリズムが秀逸！

前述の点と少し重なりますが、
最低限使えるようになるためには本文の説明を読むだけで良いのですが、COLUMNが良いタイミングで差し込まれていて、「LCELはどのように実現されているのか」、「なぜLCELが提供されているのか」という頭に浮かんだ疑問が解消されていきます。
この点は、筆者と編集の方の力量と工夫がおおいにあったのではないかと想像しています！

#### 第９章 LangGraphで作る~ の 9.2節 主要コンポーネントでまずステートを説明している

私は最近LangGraphに入門して試行錯誤しています。LangGraphの説明は、Node、Edgeから始まるという例が多いように思うのですが、なかなかすっと入ってきませんでした。
この本ではまず**ステートの設計の重要性**を述べています。

ここはあえて９章のまとめを引用します。

> LangGraphの理解で最も難しい部分が、グラフ構造を基礎としたプログラミングスタイルにあると言われます。
> しかし本章のハンズオンのように、**まずプログラム内でどのようなステートが管理されるべきなのか、そのステートを更新するノードとしてどのようなものがあるのか**、順を追って考えていくことで、動くアプリケーションを作り上げることできます。

この説明は秀逸だと思います。特に私のようにオブジェクト指向言語で普段開発している人には、非常にしっくりくる考え方だと思いました。

また、この思想は、第１０章の見出しで述べられている「保守性の高い設計になることを目指してさまざまな工夫を取り入れています」という部分の土台になっているのだと思います。

この部分には、筆者が長年システム開発で得られた知見やアイデアがふんだんに盛り込まれていると感じました。

## ここが惜しポイント！

前項との落差がありますが、淡々と書いていきます！（わりと各論になってしまいました）

### RAGの説明に文書のChunkを取り入れて欲しかった

さすがにページ数の制約などもあったと思いますが、文書のChunkについては実践的なRAG構築では重要な要素だと思うので省略せずに盛り込んで欲しかったです。
日本企業の文書は長大な文書になりがちですし、日本語特有のトークンを多く使う面もあり、Chunkの概念や基本的なチューニングは重要だと思うからです。

### 付録 A.2 第１２章の各パターンの実装コードは省略しても良かったのでは？

ここはソースコードの完全版を掲載しています。昔の本ではよくあるスタイルですが、この本ではGitHubでソースコードがメンテナンスされているので、この部分は省略して「本の軽量化」に取り組んだ方が良かったのではないかと思います。

### どうすれば良いか？

多少の惜しポイントがあるとはいえ、コミュニティー（本の筆者が参加しているDiscordコミュティーがあります）などで質問すれば十分な情報が得られると思いますので、そういう場に参加することにより十分にカバーできると思います。
ぜひみんなでAIエージェントを盛り上げていきましょう！

## 最後に

この記事を最後までお読みいただきありがとうございました。

また、このような機会を与えてくださった筆者の方々、西見 公宏氏、吉田 真吾氏、大嶋 勇樹氏、技術評論社・編集ご担当に感謝いたします。