この章の答え
保持している履歴を、モデルが受け取れる形に整えて送る。
会話画面に見えているもの、内部に保持している履歴、次のモデル要求に含めるもの。この三つは必ずしも同じではありません。履歴の記録から Prompt の生成までを追って違いを確かめます。
01|図でつかむ
履歴はそのまま全部送るとは限らない。送信前に整合性や対応形式を調整する。
02|3つのポイントで理解する
1. まず何を記録するか
ContextManager の record_items 周辺から、メッセージやツール結果がどの単位で加わるかを見ます。表示用の文字列だけを保存している、と決めつけないことが出発点です。
2. for_prompt の前後を比べる
確認した実装では for_prompt が正規化を経て ResponseItem の列を返します。内部メタデータを保つ処理とモデルへ渡す内容を取り出す処理を区別します。
3. モデルの対応形式も条件になる
正規化には入力モダリティの情報が関わり、非対応の画像・音声などを調整する経路があります。記録されたものが送信されない場合、単なる履歴消失とは限りません。
03|ソースで確かめる
以下の検索は Codex リポジトリのルートで実行します。最初に対象 commit を記録し、検索結果から定義と呼び出し元を一つずつ開いてください。
git rev-parse --short HEAD
rg -n "for_prompt|normalize_history" codex-rs
読む入口: codex-rs/core/src/context_manager/history.rs 。リンク先は照合に使った固定 commit のファイルです。手元の版と異なる場合は、上の検索語から探し直します。
小さく試す
for_prompt と normalize_history を読み、入力と出力で変わり得る項目を一つ見つけます。
04|30秒で復習
- 表示・保持・送信は別の層。
- for_prompt で送信用の履歴を作る。
- モデルの対応形式も正規化に影響する。