『RAG・AIエージェント[実践]入門』を読んだ。ひとまず細かいところは流しながらの一周目という位置付け。
まとめると、アプリケーションレイヤーから操作利用する LLM について書かれているので、LLM アプリケーションの実装イメージがイマイチ浮かばないという人にオススメできると思う。なので、Vibe Coding とか生成 AI を使ったコーディングとかではなく、構築対象のアプリケーションへの LLM の組み込みがテーマ。
レビュアーには、セコンさんこと舘野さんが関わっていたのがびっくりしたポイント。セコンさんが関わっているなら信頼が上がる形で読んでいた。また、この業界の入門タイトルの書籍なのに、ちゃんと入門書になっている点もポイントだった。
ざっと Slack に流していたものをベースに感想を書き残しておく。
2章では、そもそも API の話ということで、はじめに課金に関わるトークンの算出について示しているのが良い。さらに toktoken で算出できるシンプルなサンプルコードで示されているのが、具体的なトークンを見れるようになっている点としても良い。トークンそのものの中身については『LLM自作入門』に詳しいので、この書籍で扱うものではなく出過ぎてない感じでもあった。Chat Completions API の Function calling 機能を分かりやすく説明してあった。さらに 2024 年後半の情報が付加価値になっている書籍なので、賞味的にもはやめに読んでキャッチアップしておくと良さそう。
3章。プロンプトエンジニアリングの基礎書籍を先に読んでおいたので、それがコードに基づいて説明されている形と読めて理解が捗った。OpenAI 公式のクックブックからの引用となる、Few-shot プロンプティングで例示を会話履歴とさせないための、name
の example_user
と example_assistant
にする手法は良い付加情報だった。このあたりまた読み返しておきたい。
4章。RAGの実装についてどのようにコンポーネントを構成すれば良いのか考え方を得られた。基本は PromptTemplate (入力) → LLM / Chat model (処理) → Output parser (出力) といういわゆるいつもの処理の流れ。LangChain という名前にもあるこのチェーンという流れを表現するのに LCEL を使うのがいまどきということで、それはそうなるかという表現だった。とりわけ RAG において、ドキュメントをベクトル化して保存したベクトルデータベース (e.g., Chroma) を使って入力を絞り込むのは、LLM に対するトークン数の絞り込みを事前に行ってからという話でそれはそうとなった。きちんと1章のトークンはコスト (お金) という話から繋がっている。コスト試算できるの重要。コラムにあった4次元以上のベクトルの距離について、マンハッタン距離、ユークリッド距離、コサイン類似度は、知識が薄いとそれぞれの違いがどう出ていくかイメージが難しい部分もあるものの、『数式なしでわかるAIの仕組み』や『LLM 自作入門』を先に読んでいるとイメージは付くものだった。LangChain 全体像としてのコンポーネントと、RAG に関するコンポーネントの俯瞰した理解と、それぞれの関連について知れたので基礎として完璧な章だった。
5章。LangChain Expression Language (LCEL) は、Rails において ActiveRecord::Relation
を返す scope や where 的なものとして捉えられた。RunnableLambda
といった簡易構文的なものから RunnableParallel
といったワークフローの並列化といったものまで用意されていて、なかなか興味深いものだった。ワークフローということで、読んだ後に Workflow Patterns のサイトを思い出した。このサイトも息が長い。
6章は出だしから良かった。最初に示されている RAG From Scratch のリンク先記事 は Fine-turning と RAG の対比として良い記事 (この記事で RAG の A を Assisted としているのは、Argumented の typo なのかな) 。RAGを使ったLLMアプリケーションの具体的なデザインの考え方を知ることができた。特にベクトルデータベースと LLM を連携させるプロンプトの工夫なんかは参考になる。概念レベルで4章の応用編という感じ。この章では特に HyDE (hypothetical DocumentEmbeddings) の考え方は参考になった。ベクトルデータベースから LLM 問い合わせという流れしか考えていなかったけれど、LLM に仮説の回答を立てさせてベクトルデータベースを調べるのなるほどと思った。あとインデクシングについては、全文検索エンジンでも必要な考慮に通じそうだし、キャッシング周りの機構について気になっていたところ GPTCache の存在に触れていた点はかゆいところに手が届く感じだった。おすすめ論文2本は知っておいて良さそう。
7章の RAG アプリケーションの評価は、正直あまり現段階では関心が薄いけれど、仕事だと必要になる知識だと思うため、ざっと LangSmith を使った場合はどういったものかを知るのに読んだ。これまでと少し毛並みが異なるトピックが章として入っているのは流石だったものの、カンファレンスで集中力が切れている状態で読んでいる状態に近い形になった。ひとまず LangSmith と Ragas が RAG 評価に使えるものということはわかったものの、書かれている詳細を掴めていないので改めて腰を据えて読むことにする。この章はとりわけ API 課金が発生することを度々書かれていて、LLM アプリケーションを学ぶ書籍はこういった点に注意が払われているようだ (それはそう) 。また、この章は特に手を動かさないと覚えが悪そうな点は、2巡目読む時に気をつけておこうと思う。
8章の前半は『AIとコミュニケーションする技術』やそれに近い書籍の知識を先に付けてでおくと、アドバンスド的により深い話として理解できると思う。ここまで記されてきた RAG の知識をもとに、AI エージェントをどのように構成するかの知見を得られるのと、特に近年 (2022, 2023) の論文から語られているのが根拠がしっかりしている感じで面白い。ふつうに読み物としても何度でも読めそう。2022年ごろからの論文が多く参照されていた。
2023年の論文。
コマンドプロンプトの定石である「ステップバイステップで考えて」とプロンプトに付与する手法は、Zero-shot Chain-of-Thought プロンプティングという名前がついている。Few-shot CoT と Zero-shot CoT の対比はなるほどなあ。2022年論文。
MRKL System の論文。これも2022年で熱量が高い時代という感じがする。
たしかに、CoT で LLM での複雑なゴールをタスク化するエージェントの土台が示されているというのは、なるほどなあ。
Reasoning and Actions (ReAct) こそ、RAG の動きの原型ではという感想。論文はこれまた2022年。
Plan-and-Solve プロンプティングは、Zero-shot による中間推論ステップによる推論誤りへのカウンターというのは分かるけれど、いい感じにできない作業者への、計画を依頼側で立てての詳細な指示感あった。論文は2023年。
また、8.4で紹介されているマルチエージェントフレームワークのひとつである、MetaGPTのStandardized Operating Procedures (SOP) の手順と工程間の中間成果物は、ウォーターフォール感あった印象で、このあたりはまた後で読もうと思う。8章の最後はいわゆるAIと社会の話だった。運用でどのようなことを考慮するべきか端的にまとまっていた。
9章のLangGraphはワークフローということは分かり、10章は9章の具体例ということで、雰囲気のみで流し読みとしていた。
11章と12章はエージェントデザインパターン。Agent Design Pattern Catalogue は 2024 年の論文。個人的には、世代的に18のエージェントデザインパターン熱い。
12章でいくつかのパターンの具体例になるけれど、紙面の都合もあるだろうし全パターンがあるわけではない。結城先生がエージェントデザインパターン本を書いてくれると理解が捗る気がする。11章は論文と照らし合わせてもおもしろそう。セルフリフレクションとKPTが通じるというの面白かったりした。後半は斜め読み気味だけれど、ひとまず知識としての初期インデックスは張れたと思う。
エージェントデザインパターンは、日本語でもとっくに注目されているところでは注目されており、LLM アプリケーションへの知識の遅れを改めて実感したので、隙間時間で見ていくつもり。また 12 章ではコードが snipet になっていたりもするので、付録を見るか公式の GitHub リポジトリでコードを見た方が理解が進むと思う。
感想まとめ。
- 理解補助のための図が結構入っているのは読みやすさに繋がっていそう。
- さっと読んでいく形だと、5章後半あたりから徐々に難しくなっていっている。
- 読めば読むだけ、LLM アプリケーション設計への視界が拓けていっているのが実感できて良い。
- 読んでいて、Web+DB アプリケーション開発は依然として続いていくのでそれはそれとして、今後に向けて LLM アプリケーション開発の能力はきちんと磨いておいた方が良さそうと改めて思った。
- Python の知識が少ないくても雰囲気で読めるにしても、どこかで身につけておいた方が良い。
オススメの星5つとしか良いようがない書籍だった。