コスト削減のためにAIエージェントの出力を短くすると逆にコストがかさむ事例をGitHubが公開、うまくコスト効率を向上するにはどうすればいいのか

AIコーディングエージェントを使用する場合に出力の品質と並んで重要視すべきなのは効率であり、作業を迅速かつ効率的に適切なコンテキストで完了することが効率の向上につながります。つまり、個々のインタラクションのトークン数を減らすことよりも、適切な量のコンテキストを活用してタスクを進めることを目標にすべきです。GitHubが、「ツールの呼び出しではなく結果に焦点を当てた最適化」に基づいてCopilot Copilotに施した改善点についてブログを公開しています。
How we make AI coding more cost efficient without sacrificing task quality - The GitHub Blog
https://github.blog/ai-and-ml/github-copilot/how-we-make-ai-coding-more-cost-efficient-without-sacrificing-task-quality/
AIコーディング効率を最大化するためにGitHub Copilot CLIに対して行われた変更点は以下の4つです。
・繰り返し出力を削減し有用なコンテキストを維持する
・タスクに価値を追加しない不要なフォーマットを削除し情報を保持する
・必要な挙動を変えずにプロンプトを圧縮する
・取得ターンの追加なしに完了したバックグラウンドワークの結果を提供する
検討された変更案はエージェント型コーディング用のベンチマークを用いてオフラインで評価された後、最も有望な変更案についてはリリース前に制御されたオンライン実験を通じて検証が行われました。以下の図はGitHub Copilot CLIで実施された4つのコスト最適化について、それぞれ独立したA/BテストでAIクレジット指標への影響を測定した結果です。「ビューツールの行番号などのプレフィックス削除」で3.1%、「出力の選択的な圧縮」で5.5%、「タスクツールのプロンプト圧縮」で2.9%、「通知時の余分な往復処理の削減」で2.3%のコスト削減が確認されています。

◆繰り返し出力を削減し有用なコンテキストを維持する
AIエージェントのコストを削減する方法として一般的に考えられるのが各ツール呼び出しからの出力を短縮するというものです。エージェントが読み取る前にシェル出力を短縮するユーティリティである RTK(Rust Token Killer)をGitHub Copilotに対して使用し、エージェントコーディングベンチマークで効果を評価したところ、ハーネスとベンチマークの構成ではRTKによって一部の応答が短縮されましたが、省略されたテキストが重要な場合にモデルが出力を再度開いたり、必要なものを回復するためにコマンドを再実行したりするケースが見られました。回復ステップが実行されると処理の段階が増え、より多くのコンテキストが引き継がれました。個々のツールの応答は短くなったもののより多くのトークンが消費され、所要時間も長くなったのです。結果的に要所要所ではトークンを節約できましたが、全体としてはより多くのトークンを消費することになりました。

この結果はツール呼び出しごとのトークンの目標が間違っていることを意味します。効率の評価はユーザーのリクエストから最終結果に至るまでのタスク全体にわたって実施する必要があります。さらにベンチマークの分析を進めていくと、インストール・ビルド・テスト・lintの出力には反復的なノイズが含まれることが多く、ソースコード類の出力や任意のコマンドの実行結果にはエージェントが必要とする情報が含まれる可能性が高いことがわかりました。試行錯誤を経て確立されたポリシーは以下の3つです。
・ソースコード類の出力や任意のコマンドの実行結果は保持する
・コンテンツを削除せずに検索結果を再編成する
・繰り返されるノイズは選択的に圧縮する

この「コンプレッサー」はエージェントが「保存されたオリジナルを開いたか」「コマンドを再実行したか」「探索を繰り返したか」「検索を絞り込んだか」「追加のターンを実行したか」を追跡し頻度を調査することにより有効性が検証されています。
◆タスクに価値を追加しない不要なフォーマットを削除し情報を保持する
従来はビューツールがモデルに内容を表示する前に各行の先頭に番号を付けていました。かつてのファイル編集ツールでは行番号を使って変更箇所を特定していましたが、現在のツールでは代わりに周囲のコードと照合するため行番号は使用されなくなりました。したがって通常のワークフローではもはや行番号が使用されなくなっていましたが、行番号は残ったままでした。行レベルでは行番号があることの影響は微細なものでしたが、ファイル内の全行で繰り返されることによりセッション中に未使用のフォーマットが蓄積されていたため、行番号は削除することになりました。

行番号を削除することでモデル推論コストが約5%削減され、しかも成功率に影響はありませんでした。結果的に開発者は実際の作業に必要なコンテキストにより多くのウィンドウ空間を割り当てることができるようになりました。
◆必要な挙動を変えずにプロンプトを圧縮する
プロンプトはエージェントの動作を指示するものであり各ターンでモデルに送信されます。エージェントが開発者が依存する動作を維持する場合に限り、プロンプトを短縮しても効率が向上します。GitHub Copilot CLIのtaskツールは並列作業のための特殊なエージェントを起動しますが、エージェントのガイダンスがツールの説明・スキーマ・エージェント定義・システム命令・コンパニオンツールに蓄積されていました。
Copilotが自らのプロンプトを繰り返し作成・改善する「メタプロンプトループ」を用いてプロンプトを約半分に削減した結果、当初は並列実行のガイダンスが逐次実行ポリシーに書き換えられるというリグレッションが発生しましたが、最終的に「独立したエージェントは並行して実行できるので副作用を考慮してください」という簡潔な指示を行うことにより解決されました。結果的に1ターンあたり約1300トークン分のプロンプトを削減しており、1セッションあたりのプロンプト・トークン総数が約1.8%減少しアクティブ時間あたりの正規化コストが2.9%低下したことに相当します。なお、測定された評価では品質の低下は検出されませんでした。

◆取得ターンの追加なしに完了したバックグラウンドワークの結果を提供する
エージェントは、例えば長時間実行されるシェルコマンドのように、バックグラウンドで独立した作業を実行することがよくあります。以前は作業の完了通知に結果が含まれていなかったため、エージェントはCopilotが受信した通知の結果を取得するのにさらに1ターンを費やす必要がありました。つまり、完了したタスクには「結果を要求するため」と「結果を処理するため」の2つのモデル呼び出しが必要でした。
改良後のCopilotはハーネスが両方の完了をバッチ処理して結果を一緒に提供するため、1つのモデル呼び出しだけしか必要なくなりました。ハーネスが圧縮・要約・保留することなく完成した結果を直接配信することで、AIクレジットで測定されるトークン関連の平均使用量を約2.3%削減できるようになりました。

◆まとめ
重要なのはタスク全体を最適化することです。あるワークフローでトークンを節約する変更を行うと別のワークフローのコストが増加する可能性があります。コスト効率の変化を評価するには実際に走らせるワークフロー内で測定する必要があるということです。その上で、効率的なAIコーディングエージェントを構築するために心がけるべきは以下の5点とのことです。
・ツールの呼び出しではなくタスクを最適化する
・モデルの出力だけでなくオーケストレーションを最適化する
・出力が表すものに基づいた圧縮を行う
・プロンプトの書き換えは予期せぬ結果を招くことがある
・エビデンスはワークロードに固有のものである
・関連記事
AIに同じミスを繰り返させない「ハーネスエンジニアリング」とは? - GIGAZINE
AIエージェント時代のコーディングテクニック「コーディングルールをAGENTS.mdにまとめる」「品質が低下したらAGENTS.mdの読み直しを指示」 - GIGAZINE
AIの5大サボりパターンを自動的に解決し無理矢理限界突破させて働かせまくるAIエージェント向けプラグイン「pua」 - GIGAZINE
従量課金になったGitHub Copilotで「クレジット消費が激しすぎる」との声が相次ぐ - GIGAZINE
GitHub Copilotが「AIアシスタント」から「AI開発チーム」へ進化、専用アプリの全貌が明らかに - GIGAZINE
AIでプログラムを作るバイブコーディングやエージェントエンジニアリングの限界と活用方法とは? - GIGAZINE
AIコーディングアシスタントGitHub Copilotの開発者による書籍「LLMのプロンプトエンジニアリング」に登場するプロンプトエンジニアリングの図解がわかりやすい - GIGAZINE
・関連コンテンツ
in AI, Posted by log1c_sh
You can read the machine translated English article GitHub has published a case study showin….







