エージェントに cat src/main.rs を実行させると、2,000行のファイルが丸ごと文脈に入ります。必要だったのが一つの関数だけだったとしても、残りの1,950行は最後まで居座り、以降のやり取りの余白を削り続けます。
文脈は有限の資源です。使い方の設計が、そのまま回答の精度と利用料金に出ます。
必要な部分だけ読む
コードを読む道具は、人が読むために作られてきました。cat、grep、sed。モデルに渡すのであれば、返ってくる形が違うほうが適しています。
hewは、関数や型を名前で指定すると、その部分だけを返します。行番号とファイルのサイズが付くので、続きが必要かどうかをモデル自身が判断できます。grep は同じ形の行をまとめ、一致した行がどの関数の中にあるかを添えます。
頼んでいない行を読ませない、という一点だけの道具ですが、長い作業ほど効き方が大きくなります。一度読んだものは消せないためです。
大きな出力は、外に置く
テストの出力、ビルドのログ、依存の一覧。一度きりしか使わない巨大な出力が、以後ずっと文脈を占有します。
ctxgateは、ツールの生の出力をローカルの保管庫へ入れ、モデルには要約と取り出し用のIDだけを見せます。中身が必要なときは、該当する断面だけを引き出します。
コマンドを二度走らせずに済むのも利点です。同じ出力をもう一度得るために再実行すると、その間に状態が変わっていることがあります。
余白を残すと、作業が崩れにくい
文脈が埋まったときに起きるのは、単に入らなくなることではありません。要約や切り詰めが挟まり、途中の決定が静かに落ちます。最初に決めた方針を忘れたまま作業が進む、という壊れ方をします。
先に削っておけば、この種の事故が減ります。
渡す情報を絞るという点では、権限と同じ
読ませる範囲を絞ることは、渡す情報を絞ることでもあります。ソースコードも、ログも、業務データも同じです。
WASIのcapabilityが「渡していない権限は行使できない」と定めるのと、文脈の設計は同じ形をしています。必要なものだけを渡す。渡したものは記録に残る。どちらも、任せる範囲を先に決めるという話になります。
費用が気になっている場合
エージェントの利用料が想定より高いときは、モデルを安いものに替える前に、何を読ませているかを確認する価値があります。ファイル全体を読ませていないか。一度しか使わない出力を抱えたまま会話を続けていないか。読ませる量が減ると、費用と精度の両方が同時に改善することがあります。