GitHub Repo
LangChain Core 1.7.6、ストリーミングのツール呼び出し累積を改善し、大きな引数の再解析を削減
LangChainは11月5日、Core 1.7.6をリリースしました。Runnableストリーミングでメッセージをマージする方法を変更し、大きなツール引数の繰り返し解析による遅延に対処します。メンテナーによる特定のテストでは所要時間が17.35秒から0.07秒に短縮しましたが、独自のメッセージ累積処理や一部のストリーミング経路は修正の対象外です。

LangChainは11月5日、langchain-core 1.7.6をリリースし、ストリーミング中のメッセージ累積に関するパフォーマンス修正を導入しました。モデルに長いファイル内容を生成させ、それをツール経由で書き込むエージェントでは、この変更により、出力の増加に伴ってフレームワーク側で増大しうる解析コストに対処できます。GitHubのリリースノートに修正が記載され、PyPIでもこのバージョンが公開されています。リリースノート、PyPIパッケージ
問題は、AIMessageChunkの加算時の動作にありました。チャンクをマージするたびに、それまでに受け取ったツール呼び出し引数を再解析していました。Runnableストリーミングで結果にチャンクを順次追加すると、増え続ける内容を何度も処理するため、大きなツール引数の累積コストが二次的に増加します。メンテナーは、91 KBの引数を20文字ずつのチャンクで処理するchain.stream()のテストで、所要時間が17.35秒から0.07秒に短縮したと報告しました。これは特定の再現ケースの結果であり、エージェントのタスク全体が同じ割合で高速化することを意味するものではありません。修正とテストの説明
新バージョンでは、先頭に連続するモデルメッセージのチャンクを一時的に保持し、全体の結果を読み取る際にまとめてマージすることで、再解析を減らします。対象には、ストリーミングのトレース、デフォルトの同期・非同期変換、RunnableLambdaの入力と出力の累積が含まれます。これにより、長いツール呼び出しの遅延を調べるエンジニアは、検証可能なフレームワーク側の要因を一つ得られます。ボトルネックが実際にメッセージの累積にある場合に限り、アップグレードで明確な改善が見込めます。実装範囲
デプロイ前に、実際に使っている経路を確認する必要があります。acc += chunkによる独自のメッセージ累積、辞書に含まれるネストしたメッセージ、astream_logなどの経路は、今回の修正では改善されていません。チームは既存の長い引数を使ったケースで、アップグレード前後のCPU時間と完了までの遅延を比較し、ツール引数とトレース結果に一貫性があることを確認できます。公式ドキュメントには複数のストリーミングモードが記載されていますが、すべてのモードが恩恵を受けるとは限りません。今後、ほかの累積処理にも同様の最適化が適用されるか注視する必要があります。既知の制限、ストリーミングのドキュメント