4.1 KiB
OpenAI Responses API — prompt_cache_key Parameter
- Source: https://platform.openai.com/docs/api-reference/responses/create
- Retrieved: 2026-05-02
1. パラメータ名
prompt_cache_key — Responses API のリクエスト body に載せる任意の文字列キー。
プロンプトキャッシュのスコープを明示する。
2. 必須 / 任意
任意 (optional)。
公式 OpenAI Responses API では省略しても automatic prefix matching が
走るためキャッシュは効く。一方 ChatGPT backend (codex-oauth /
https://chatgpt.com/backend-api/codex/responses) では 明示キーが
無いと事実上ヒットしない(後述)。
3. ChatGPT backend (codex-oauth) でのキャッシュ挙動
実観測(019de419-... セッション、171 turn / 累計入力 22.2M token)で
cache_read_tokens が全 turn 0 だった。最新セッション (019de48f-...,
5 turn) でも 0。
原因:
- ChatGPT backend のプロンプトキャッシュは org / project 単位で ハッシュ衝突する設計
prompt_cache_keyを送らないと、複数 conversation のリクエストが 同じハッシュ空間に積み上がり、prefix が他 conversation で 上書きされてヒット率が落ちる- Codex CLI の実装はこれを認識しており、conversation_id を毎リクエスト 送って自分専用の名前空間にキャッシュさせている:
// codex-rs/core/src/client.rs:853
let prompt_cache_key = Some(self.client.state.conversation_id.to_string());
4. 公式 OpenAI API での挙動
公式エンドポイント (https://api.openai.com/v1/responses) では、
明示キーが無くても automatic prefix matching が走る。明示キーを
送ることで、複数 client / 複数 organization が同じ prefix を共有する
シナリオ(マルチテナント等)で意図しないヒット混線を避ける用途
で使う。少なくとも害は無いので両 backend で同じ値を送って良い。
5. yoi での運用
Request::cache_key: Option<String>を provider-agnostic な キャッシュヒントとして持つ。cache_anchor(Anthropic 用 prefix index) と並立する別概念。OpenAIResponsesScheme::build_requestでrequest.cache_key.clone()をprompt_cache_keyに投影。Noneのときは body にキー自体が載らない (#[serde(skip_serializing_if = "Option::is_none")])。- pod 側は LLM 呼び出し時に
SessionId.to_string()を渡す。 主 Run / compactor / extract / consolidate worker のすべてが 同じsession_idを使うので、pod 内の派生 worker が prefix を 共有しているところでヒットが期待できる。 - 他 scheme (
anthropic,gemini,openai_chat) はRequest::cache_keyを未参照のまま無視する。
6. Fork との関係
session-store::fork / fork_at はいずれも新 SessionId を発行する。
新 fork = 新 cache_key とする(素直に SessionId.to_string() を渡す)。
fork 直後の cache 明示ヒットは失われるが、OpenAI Responses は automatic prefix matching も走るため完全に冷えるわけではない。 fork 越しに親の cache_key を継承して明示ヒットも残す最適化は 別チケット扱い。
7. Compaction との関係
compaction は session_id を入れ替える (create_compacted_session)。
compact 直後に worker の cache_key も新 session_id で更新するため、
post-compact turn は extract / consolidate worker と同じ namespace で
動く。compact 自体は prefix を大幅に書き換えるので、明示キー継続の
有無に関わらずヒット率は元から低い。
8. ドキュメント URL
- 公式 API リファレンス: https://platform.openai.com/docs/api-reference/responses/create
- Codex CLI 実装 (conversation_id を prompt_cache_key に渡す): https://github.com/openai/codex/blob/main/codex-rs/core/src/client.rs
- ChatGPT backend のサポートパラメータ (LiteLLM issue): https://github.com/BerriAI/litellm/issues/21193