ホームへ戻る

GitHub Repo

Ollamaコミュニティがストリーム順序の修正を提案、テキストからツール呼び出しへの移行でResponsesクライアントが拒否する可能性

10月5日のコミュニティ報告によると、Ollamaはテキストを出力した後にツールを呼び出す際、出力インデックスを再利用し、メッセージ完了イベントを送信し損ねる可能性がある。修正案には回帰テストが含まれるが、まだマージされておらず、実際のモデル推論でも検証されていない。

Mattruffoni · CC BY-SA 4.0 · Image source
zh-Hant

OllamaのAPI互換レイヤーで、ローカルエージェントのワークフローを中断する可能性があるストリーミングの問題が報告された。10月5日に公開された報告によると、/v1/responsesで1回の応答中にアシスタントのテキストを生成し、その後に関数呼び出しを出力すると、イベントのインデックスと最終結果の順序が一致しないことがあり、プロトコルを厳密に検証するクライアントが応答を拒否する可能性がある。これは特定の出力パターンについてのコミュニティ報告であり、すべてのツール呼び出しに影響するとまでは言えない。問題の記録

報告では、問題の仕組みを3つに分けて説明している。テキストメッセージを作成した後にoutput_indexが進まないため、次の最初の関数呼び出しにもインデックス0が使われる。ツール呼び出しを送信した後、完了処理が先行するテキストメッセージの終了イベントを飛ばす。最後にresponse.outputを組み立てる際、関数呼び出しがテキストより前に置かれ、ストリームで宣言された順序と逆になる。インデックスに基づいて状態を管理するコンシューマーでは、単なる画面上の並び順の違いではなく、項目の重複や最終的な順序の不一致が生じる可能性がある。イベントシーケンスとコードパス

同日に提案された修正 #18804 では、関数呼び出しを送信する前に、開始済みのテキストメッセージを完了させて記録し、インデックスを進める。提案者によると、回帰テストでは、テキストの後に1つまたは2つのツール呼び出しを行うケース、ツール呼び出しのみのケース、インデックスの一意性、イベントと最終配列の識別子の一貫性をカバーしている。修正前はテキストからツール呼び出しへ移るケースでテストが失敗し、修正後はopenaiパッケージのテストに合格した。ただし、これらは提案者のローカル環境でのテスト結果であり、実際のモデル推論、リポジトリ全体のテスト、競合状態のテストは含まれていない。修正提案

Ollamaの公式ドキュメントには、Responsesエンドポイントがストリーミングと関数呼び出しをサポートすると記載されている。そのため、この報告は既存のエージェントクライアントをローカルモデルに接続するエンジニアにとって実務上の参考になる。エンドポイントとパラメーターが利用できても、複数形式の出力におけるイベントのライフサイクルは検証する必要がある。公式互換性ドキュメント

上記の仕組みから、統合テストには「説明文を出力してからツールを呼び出す」ケースを加え、各出力項目のインデックス、完了イベント、最終的な順序を確認するとよい。今後は上流でのレビュー、実際の推論での再現、修正を含むリリースを追う必要がある。確認時点では提案はまだオープンであり、正式リリースで修正済みとは見なせない。

出典

  1. Ollama issue #18762:重排工具結果造成呼叫錯配
  2. Ollama PR #18767:依呼叫 ID 配對完整工具結果群組
  3. Ollama 工具呼叫文件
  4. Ollama OpenAI 相容性文件
  5. Gemma4: JSON schema format is not enforced when think:true answers directly without reasoning
  6. server: apply structured outputs in a single pass on thinking models
  7. Structured Outputs
  8. Ollama issue #18798:Responses 串流文字與函式呼叫順序問題
  9. Ollama PR #18804:在串流工具呼叫前完成文字項目