ホームへ戻る

GitHub Repo

Langflowコミュニティがプロンプトキャッシュの欠落を報告、秒単位のタイムスタンプが複数ターンの会話履歴の再利用を妨げる可能性

10月9日のLangflowコミュニティの報告によると、Agentのデフォルトプロンプトには実行のたびに秒単位のタイムスタンプが挿入され、後続ターンで会話履歴のプロンプトキャッシュがヒットしなくなる可能性がある。日付のみを使う案が示されたが、公開された性能測定や正式な修正の検証はまだない。

Peo · CC BY-SA 3.0 · Image source
zh-Hant

LangflowのGitHubコミュニティは10月9日、Agentのコストに直結する可能性がある問題を報告した。Agentのデフォルトのシステムプロンプトでは{current_date}を「今日の日付」としているが、実際には時・分・秒を含むUTCタイムスタンプが挿入されるという。報告者はLangflow 1.12.5とメインブランチのコミットを環境として挙げ、コード上の位置と確認方法も示した。現時点の根拠は主にコードの挙動分析であり、条件を統制したコストや遅延の比較は添えられていない。元の報告

問題はプロンプトの並び順にある。報告に示された実装では、ツール呼び出しを行うAgentは、システムプロンプト、会話履歴、ユーザーメッセージ、Agentの作業領域の順に組み立てる。次のターンで秒数が変わると、履歴より前にあるシステムプロンプトも変化する。そのため、履歴の内容がまったく同じでも、そのタイムスタンプを含む以前のキャッシュ済みプレフィックスをそのまま再利用できない。報告によると、同じAgent実行内の各ステップではプロンプトが共有されるため、問題となるのはターンをまたぐ会話であり、ツール呼び出しのたびに必ずキャッシュが無効になるわけではない。報告と再現手順

この仕組みはAnthropicの公式ドキュメントでも確認できる。Claudeのプロンプトキャッシュは、ツール、システムプロンプト、メッセージの順序に沿ってプレフィックスを構成し、キャッシュヒットには該当する内容の一致が必要となる。システム層の変更は、それ以降のメッセージのキャッシュを無効にする。ただし、変更箇所より前に独立して作成されたツールのキャッシュは保持される場合があるため、この報告を「すべての入力が必ず通常料金で課金される」と解釈することはできない。Claudeのプロンプトキャッシュに関するドキュメント

報告者は、{current_date}には年月日のみを出力させ、時刻は任意の別フィールドとして設ける案を提案した。設計上のトレードオフとして、日付だけにすれば同じ日のシステムプロンプトを安定させられる一方、正確な時刻が必要なタスクでは、引き続き最新の時刻情報を取得する必要がある。キャッシュのプレフィックスの仕組みに基づけば、変わりやすい情報を安定した内容の後ろに置く方法も検討できる。ただし、必要な順序をフレームワークとモデルAPIがサポートしているか確認が必要だ。

Langflowで長い会話を続けるAgentを構築しているチームは、まず連続するリクエスト間で実際のシステムプロンプトを比較し、キャッシュ読み取りトークンと遅延を観察するとよい。検証では、モデル、プロンプトの長さ、キャッシュの有効期間、ツール設定を統一し、タイムスタンプ以外の要因によるキャッシュ無効化と混同しないようにする必要がある。確認時点では、正式な修正が検証済みとの情報も、複数のプロバイダーをまたぐ測定結果もなく、実際にどれほどコストを削減できるかは未確認だ。

出典

  1. Agent current_date resolves to seconds precision, which breaks prompt-cache reuse for chat history
  2. Prompt caching