勉強会「【LangChainゆる勉強会#13】LangChain v0.3やその周辺のアップデートをチェック」を開催しました #StudyCo

ジェネラティブエージェンツの大嶋です。

運営している勉強会コミュニティStudyCoで「【LangChainゆる勉強会#12】LangGraphの最新ドキュメントを全体的にざっと読む」というイベントを開催しました。

studyco.connpass.com

アーカイブ動画はこちらです。

youtube.com

今回は「LangChain v0.3やその周辺のアップデートをチェック」というテーマで、LangChainの公式ドキュメントや公式ブログを参照しながら、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へのマイグレーションが必要です。

詳細は公式ドキュメントを参照してください。

python.langchain.com

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関連のアップデートは他にもいくつかあります)

詳細は以下のブログ記事にまとまっています。

blog.langchain.dev

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)

python.langchain.com

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)

python.langchain.com

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が役立つことになります。

python.langchain.com

python.langchain.com

python.langchain.com

カスタムイベントのサポート

adispatch_custom_eventを使用することで、astream_eventsやCallbackにカスタムイベントを追加できるようになりました。

python.langchain.com

レガシー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):

引用元:https://github.com/langchain-ai/langchain/blob/9404e7af9d8768a7e884dae3e9fafb712eaf4e99/libs/langchain/langchain/chains/llm.py#L41

おわりに

以上、LangChain v0.3についてと、v0.2の間のアップデートを紹介しました。

とくにv0.2の間のアップデートは、地味に便利なものが多く、この機会に改めて確認できてよかったです。

LangChain / LangGraph、その他のテーマで引き続き勉強会を開催していきます。 もしも「こんな話が聞きたい」というテーマがあれば、ぜひお声がけください!