🦜

「LangChainとLangGraphによるRAG・AIエージェント[実践]入門」は少しかじった人にも面白い

2024/11/15に公開

はじめに

先日 「LangChainとLangGraphによるRAG・AIエージェント[実践]入門」 という本が発売されました。

https://gihyo.jp/book/2024/978-4-297-14530-9

私はLangchainもLangGraphも基本的な部分は知っていて簡単なコードなら自分で書けますが、知らないところをたくさん補ってくれる学びの多い本でした。

今回はLangchainやLangGraphを少しかじったことがある人目線で、この本の良かった部分を紹介したいと思います

参考までに少しかじったレベル(=私のスキル)は以下のような感じです

  • prompt,llm,parser,retriever,LCELなどLangchainの基礎的部分を理解している
  • langsmithのトレース機能を普段使っている
  • state,node,edgeなどLangGraphの基礎的部分を理解している
  • Langchain,LangGraphに関してチュートリアル+αくらいのコードなら自分でかける
  • プライベートで少し触る程度で、エンプラ向けの本格的なLLMアプリはつくったことがない

このような人の目線で、よかった章とその簡単な感想を書きます。

第1章 LLMアプリケーション開発の基礎

AIエージェントの定義を自分なりにしなおせる章でした。

私は日頃AIエージェントとは?と聞かれると、「ただテキストを生成するだけではなく、自分で適切なアクションを考え、実行までできるAI」と答えていました。この章ではAIエージェントの定義の部分から解説されており、私の定義よりもう少し広範なものとして定義されていました。

とくにエージェントをCopilotと比較する形で整理されていたのが面白かったです。

第2章 OpenAIのチャットAPIの基礎

OpenAIのAPIはリクエストもレスポンスの構造もずいぶん詳しいつもりでしたが、まだ知らない箇所があるという発見がありました。

たとえば、日本語と英語のトークン数の関係です。これはchatGPT登場後、初期の頃から言われていたことで日本語よりも英語の方がコスト節約できるという話です。

ただ、最近は日本語のトークナイザーも進化し、昔ほど英語と日本語でトークン差がなくなったという話になり、しだいに注目もしなくなっていました。

そんな中「結局今のトークン差ってこれくらいなのかー」と久しぶりに知ることができました。

また、structured_outputについても新しい発見がありました。

指定したjsonスキーマでレスポンスを返すこの機能ですが、裏側ではfunction_callingが使われているとのことです。詳細なつくりは書籍を見ていただければと思いますが、このあたりも普段意識しない部分なので初知りでした。

第5章 Langchain Expression Language (LCEL)徹底解説

Runnableシリーズに関して理解を深めることができました。

RunnableはLCELを構成するとても重要な要素ですが、チュートリアルを見ながらLCELを実装するだけであれば、理解しなくても動作させることができます。そのせいで理解が甘かった部分が補完されました。

  • Runnable
  • RunnableLambda
  • RunnableParallel
  • RunnablePassthrough

私はLCELでRAGを書いていますが、「ああ、この部分の書き方ってRunnableParrallelを使ってたんだ」など、今まで書いていたコードをより深く理解することができました。

また、RunnablePassThrough assignを使って出力に値を追加するなど、今までだと「チュートリアルのこの部分、こう変えたいだけど」と思いながらもやり方がわからなかった部分の書き方もわかるようになりました。

奥が深いRunnableを知ることができる章です。

また、独自の関数をchain.stremから呼び出せるようにする方法もあり、勉強になりました。

第7章 Langsmithを使ったRAGアプリケーションの評価

ここはシンプルに初知りの内容が多かったです。

langsmithは普段トレースで利用していますが、評価に関しては、正直業務でRAGやる人以外はそれほどやってる人いないのかなと思います。

そんな中、Ragasによる合成データの作成からLangSmith上でのオフライン評価、フィードバックなどを実際の画面とともに解説してあるため、私でもかなり具体的なイメージを持つことができました。

第9章 LangGraphで作るAIエージェント実践入門

checkpointerのデータ構造に関する解説があるのが良かったです。

現状だと公式で提供されているcheckpointerははPostgreSQLやSQLiteなど一部のデータベースにしか対応していません。

それ以外のデータベースでやるときは以下のようにカスタマイズしてつくることをアナウンスされています。以下はRedisでやるときです。

https://langchain-ai.github.io/langgraph/how-tos/persistence_redis/

私はCosmosDB for No SQLで実装したかったのですが、少しハードルが高くストップしていました。

checkpointerは初見だと内容をprintするのもテクニックが必要そうで困っていたので、checkpointerに関してわかりやすく説明されているのはとても助かりました。

第12章 Langchain/Langgraphで実装するエージェントデザインパターン

マルチエージェントのサンプルコードがモリモリで宝の山でした。

直前の第11章でエージェントのデザインパターンが解説されているのですが、その中の代表的なものについてサンプルコードで実装しています。

たとえば、プロンプト最適化だったり、セルフリフレクションだったり、AIエージェントとしてよく聞くものでもそれらを1つ1つ自分で書いていくのは大変です。真似して取り入れたい!とハードルがだいぶ下がりました。

また、コードをクラス化して書いているなど実際にアプリに組み込むことも想定したコードになっています。

「LangGraphのコードを実際のアプリに組み込むときにはこうなるんだ」と、そういう観点でも勉強になります。

おわりに

いかがでしたでしょうか?

買ったときの第一印象は「分厚い」で読み切れるか心配でしたが、読みだすと面白くて最後まですぐに読んでしまいました。

「基礎的なもう知ってるから、飛ばし飛ばしかなー」とか思っていた時代もありましたが、細かい発見が多くきちんと最後まで読むことになりました。

「網羅性が売り」 というのは著者の方がXで発言していましたが、初学者にも少しかじっている人にもよい本だと思いました。

ちなみに私が予約した時には紙の書籍しかありませんでしたが、今では電子版も購入できるようになっているので、そちらを購入してもいいかもしれません。

https://amzn.asia/d/gBwg4aB

以上、ありがとうございました!

Discussion