ジェネラティブエージェンツの大嶋です。
運営している勉強会コミュニティStudyCoで「【LangChainゆる勉強会#12】LangGraphの最新ドキュメントを全体的にざっと読む」というイベントを開催しました。
アーカイブ動画はこちらです。
今回は「LangChain v0.3やその周辺のアップデートをチェック」というテーマで、LangChainの公式ドキュメントや公式ブログを参照しながら、LangChain v0.3やその周辺のアップデートをチェックしていきました。
- 公式ドキュメント: https://python.langchain.com/docs/versions/v0_3/
- 公式ブログ: https://blog.langchain.dev/announcing-langchain-v0-3/
LangChain v0.3での破壊的変更
公式ドキュメントに書かれている通りですが、LangChain v0.3での主な変更は、LangChainの内部でPydantic v1が使われていた箇所がPydantic v2に変更されたことです。
from langchain_core.pydantic_v1 import BaseModel
などとしていた箇所がある場合、from pydantic import BaseModel
のように変更することになります。
その他、Pydantic v1特有の機能を使っている場合は、Pydantic v2へのマイグレーションが必要です。
詳細は公式ドキュメントを参照してください。
LangChain v0.2の間のアップデート
LangChain v0.3がリリースされるタイミングでの変更は上記のPydanticの件が中心ですが、それ以外にもLangChain v0.2の間にはさまざまなアップデートが入っています。
v0.2の間の主要なアップデートについても、LangChain v0.3についての公式ドキュメントとブログで解説されています。
以下、いくつか抜粋して簡単に紹介していきます。
Tool関連のインターフェースの強化
Tool関連のインターフェースの強化として、以下のようなアップデートがありました。
llm.bind_tools
でツールを設定runnable.as_tool
でRunnableをツールに変換- ツールの引数がRunnableConfigに対応
- ツールの戻り値にartifactを追加可能
(Tool関連のアップデートは他にもいくつかあります)
詳細は以下のブログ記事にまとまっています。
init_chat_model
Chat modelの共有の初期化方法として、init_chat_modelという関数が追加されました。
たとえば以下のようにして、ChatOpenAIのインスタンスを得ることができます。
from langchain.chat_models import init_chat_model gpt_4o = init_chat_model("gpt-4o", model_provider="openai", temperature=0)
Rate limiter
モデルのレートリミットを設定するRate limiterが追加されました。
たとえば以下のようにして利用可能です。
from langchain_core.rate_limiters import InMemoryRateLimiter from langchain_openai import ChatOpenAI rate_limiter = InMemoryRateLimiter( requests_per_second=1, check_every_n_seconds=0.1, max_bucket_size=10, ) model = ChatOpenAI(model="gpt-4o-mini", rate_limiter=rate_limiter)
Message関連のユーティリティ
SystemMessage、HumanMessage、AIMessageなどのMessage関連のユーティリティとして、以下の3つが追加されました。
- trim_messages: messagesを、最大トークン数などでトリミング
- filter_messages: messagesから、HumanMessageだけといったフィルタリング
- merge_message_runs: messagesでHuman・Humanのように同じ種別が連続している場合に1つにマージ
たとえばAnthropicのClaudeはHumanMessageが連続しているとエラーとなりますが、そのようなケースでmerge_message_runsが役立つことになります。
カスタムイベントのサポート
adispatch_custom_eventを使用することで、astream_eventsやCallbackにカスタムイベントを追加できるようになりました。
レガシーChainの非推奨化
LCEL以前のレガシーChainがいくつか追加で非推奨になりました。
これはたまたま先日見つけたのですが... LLMChainのような以前からdeprecatedだったChainはv0.3で廃止予定だったのですが、v1.0での廃止に変更されているようです。
@deprecated( since="0.1.17", alternative="RunnableSequence, e.g., `prompt | llm`", removal="1.0", ) class LLMChain(Chain):
おわりに
以上、LangChain v0.3についてと、v0.2の間のアップデートを紹介しました。
とくにv0.2の間のアップデートは、地味に便利なものが多く、この機会に改めて確認できてよかったです。
LangChain / LangGraph、その他のテーマで引き続き勉強会を開催していきます。 もしも「こんな話が聞きたい」というテーマがあれば、ぜひお声がけください!