ホームへ戻る

GitHub Repo

LangChainコミュニティがストリーム解析の問題を報告、切り詰められた引数が有効なツール呼び出しと判定される可能性

10月17日のLangChainコミュニティの報告によると、ストリームが中断した後、不完全なツール引数が有効なJSONとして自動補完され、ツール実行フローに渡される可能性がある。別のコントリビューターも再現を報告したが、修正提案は貢献プロセスのチェックにより自動的にクローズされ、まだマージされていない。

Dirck van Baburen · Public domain · Image source
zh-Hant

LangChainコミュニティは10月17日、ツール呼び出しの解析に関する問題を報告した。モデルのストリームが引数の送信途中で終了しても、最終メッセージに有効に見える tool_calls が含まれ、invalid_tool_calls は空のままになることがあるという。報告された環境では langchain-core 1.6.12 が使われており、別のコントリビューターも再現したと述べている。この問題は、エージェントがツール入力の受信完了をどう判断するかに関わる。問題報告

最小再現例では、文書編集ツールを想定し、引数が文字列 hea の途中で切れる。ところが generate_from_stream で集約すると、この不完全な文字列を含む引数オブジェクトが生成される。報告者によると、実際のケースでは、文書編集内容の半分が完全な編集として適用されたことがあったという。ただし、これはコミュニティによる報告であり、影響範囲全体やメンテナーによる確認はまだ示されていない。再現コードと議論

問題の核心は、ストリームのプレビューと最終入力の検証で、同じ寛容な解析処理が使われていた点にある。公式ドキュメントによれば、parse_partial_json は閉じ括弧が欠けたJSONを処理できる。これは、生成中の引数をUIに段階的に表示するのに役立つ。報告の分析では、最終的な集約処理にもこの挙動が引き継がれるため、データ転送が終わると構文は補完されても、内容は不完全なままの場合があるという。公式パーサーのドキュメント

同日提出された修正案は、最終変換を行う message_chunk_to_message の段階で厳格に再解析するというものだ。解析に失敗した項目は、元の文字列とともに invalid_tool_calls に格納し、ストリーム中は寛容な解析を維持する。提案者は、切り詰められた引数、完全な引数、ストリーム中の挙動を対象とする回帰テストを追加したと述べている。しかし、提案は作者に問題が割り当てられていなかったため、ボットによってクローズされた。これは手続き上の結果であり、修正が受け入れられたことや、技術的な方針が否定されたことを意味しない。修正提案

エンジニアリングチームにとって、この事例はツール実行の境界に潜むリスクを示している。引数をオブジェクトに変換できても、モデルが操作の意図を最後まで生成したとは限らない。上記の仕組みから推測すると、文書変更など副作用を伴うツールでは、元の引数が完全かどうかと、業務上の条件を特に確認する必要がある。今後は、メンテナーが最終段階での再解析を採用するか、またどのストリーム入口を修正対象に含めるかが注目点となる。現時点で正式な修正を含むリリースは確認されていない。

出典

  1. LangChain issue #41285:截斷工具參數在串流結束後被寬鬆解析
  2. LangChain PR #41286:最終訊息重新嚴格解析工具參數
  3. LangChain 官方參考文件:parse_partial_json