LangChain 1.3.0が5月12日にリリースされた。リリースノートを見たとき、正直「また細かいアップデートか」と思って流しかけた。でも今回は自分のコードに直接刺さる変更が入っていたので、ちゃんと読み直した。
今回の目玉は `stream_events` および `astream_events` で `version="v3"` をサポートしたこと。これ、langchain agentsに対して使えるようになったというのが大きい。自分はいま社内ツールでReActエージェントを動かしていて、ストリーミングのハンドリングまわりがずっと微妙な感じだったので気になった。
公式のevent streamingガイドを確認すると、v3ではエージェントのツール呼び出しや中間ステップのイベントがより細かく取れるようになっている。v2までは取りきれなかったイベントがあって、フロントに進捗を出そうとするとworkaroundが必要だった。それが素直に書けるようになる感じ。
自分のコードで言うと、今まで `astream_events` を使うとき `version="v2"` を指定していた。
ここを `version="v3"` に変えるだけで動くかどうか、まず確認する必要がある。breaking changeはないと読んでいるが、エージェントが発火するイベントの種類が増えるので、既存のif文でのイベント振り分けが想定外の動きをする可能性はある。
今回のアップデートで自分が気にするのは3つ。
APIコストとしてのトークン消費はstream_events自体には関係ない話だけど、エージェントのログを細かく取るようになると処理のオーバーヘッドが気になってくる。本番で動かしているものなので慎重に行きたい。
正直、LangChainはv0.x時代からAPIがよく変わる印象があって、ライブラリとして信用しきれていない部分があった。でも1.x系に入ってからは変更の粒度が落ち着いてきた気がする。今回も1.3.0という点リリースで、リリースノートのコミットIDは `21d77d6` 。変更量は決して多くなく、ピンポイントな機能追加という印象だ。
チームではpyprojectで `langchain>=1.2,<2.0` という範囲指定にしているので、今回のアップデートは自動で拾う形になる。ただv3のstream_eventsを使う場合は明示的にコードを書き換えないといけないので、意図せず動作が変わることはない。その点は安心している。
来週のスプリントで、まずローカルのブランチでv3に切り替えてエージェントを動かし、イベントの出力内容を確認するところから始めるつもりだ。フロントへのストリーミング表示がきれいになれば、UX的にも地味にうれしい変更になると思う。
version="v3"って何が変わったのか
今回の目玉は `stream_events` および `astream_events` で `version="v3"` をサポートしたこと。これ、langchain agentsに対して使えるようになったというのが大きい。自分はいま社内ツールでReActエージェントを動かしていて、ストリーミングのハンドリングまわりがずっと微妙な感じだったので気になった。
公式のevent streamingガイドを確認すると、v3ではエージェントのツール呼び出しや中間ステップのイベントがより細かく取れるようになっている。v2までは取りきれなかったイベントがあって、フロントに進捗を出そうとするとworkaroundが必要だった。それが素直に書けるようになる感じ。
自分のコードで言うと、今まで `astream_events` を使うとき `version="v2"` を指定していた。
async for event in agent.astream_events(inputs, version="v2"):
# イベントを処理
...ここを `version="v3"` に変えるだけで動くかどうか、まず確認する必要がある。breaking changeはないと読んでいるが、エージェントが発火するイベントの種類が増えるので、既存のif文でのイベント振り分けが想定外の動きをする可能性はある。
自分のコードで確認したいポイント
今回のアップデートで自分が気にするのは3つ。
- astream_eventsのversionを変えたときにon_tool_startやon_tool_endが正しく拾えているか
- エージェントの中間思考ステップのイベントが増えてトークン消費に影響しないか(LLM呼び出し自体は変わらないはずだが確認したい)
- 既存のevent filteringロジックが壊れていないか
APIコストとしてのトークン消費はstream_events自体には関係ない話だけど、エージェントのログを細かく取るようになると処理のオーバーヘッドが気になってくる。本番で動かしているものなので慎重に行きたい。
LangChain本体のバージョン管理の話
正直、LangChainはv0.x時代からAPIがよく変わる印象があって、ライブラリとして信用しきれていない部分があった。でも1.x系に入ってからは変更の粒度が落ち着いてきた気がする。今回も1.3.0という点リリースで、リリースノートのコミットIDは `21d77d6` 。変更量は決して多くなく、ピンポイントな機能追加という印象だ。
チームではpyprojectで `langchain>=1.2,<2.0` という範囲指定にしているので、今回のアップデートは自動で拾う形になる。ただv3のstream_eventsを使う場合は明示的にコードを書き換えないといけないので、意図せず動作が変わることはない。その点は安心している。
来週のスプリントで、まずローカルのブランチでv3に切り替えてエージェントを動かし、イベントの出力内容を確認するところから始めるつもりだ。フロントへのストリーミング表示がきれいになれば、UX的にも地味にうれしい変更になると思う。