はじめに

AIエージェントは強力ですが、本番環境で自動実行されるたびにトークンが消費され、コストが積み重なります。GitHubは先日、自社リポジトリでのAgentic Workflowsのトークン使用量を体系的に最適化し、その成果を公開しました。

開発者向けのAIエージェント(GitHub Copilot、Claude CLI等)を導入しているチームにとって、トークン効率化は今や無視できない課題です。本記事では、GitHubの実践例から学べる、AIネイティブエンジニアが即座に応用できる最適化戦略を解説します。


なぜトークン効率が重要なのか

自動実行による予測不可能なコスト

従来の開発ツールと異なり、AIエージェントベースのワークフロー(CI/CD統合、自動レビュー、コード生成等)は:

  • 毎回のプルリクエスト時に自動実行される
  • 複数のLLM呼び出しが連鎖する可能性
  • 開発者が意識しない背景でトークンが消費される

結果として、月間のAPI料金が予想外に膨らむことがあります。

効率化は「エコノミクス」だけじゃない

トークン削減のメリット:

メリット 説明
コスト削減 API呼び出し頻度が低下
レイテンシ改善 トークン処理時間が短縮
レート制限回避 同一時間内の呼び出し数減少
環境負荷低減 LLMの計算量削減

GitHubの実装戦略:3つのステップ

ステップ1: 計測フレームワークの構築

最適化の前提条件は可視化です。GitHubはAPIプロキシを活用し、異なるエージェントフレームワーク(Claude CLI、Copilot CLI)から統一フォーマットでトークン使用量を記録:

# 出力例: token-usage.jsonl
{
  "workflow": "auto-reviewer",
  "input_tokens": 2850,
  "output_tokens": 345,
  "cache_read_tokens": 1200,
  "cache_write_tokens": 450,
  "model": "claude-3-5-sonnet",
  "provider": "anthropic",
  "timestamp": "2026-05-14T10:00:00Z"
}

実装のポイント:

  • 各ワークフローのトークン使用量を日次集計
  • 異常値検知(通常4ターンで完了するワークフローが18ターンかかった、など)
  • メトリクスダッシュボード化

ステップ2: メタ最適化ワークフローの導入

GitHubは「最適化を最適化する」アプローチを採用:

Daily Token Usage Auditor
  ↓ (異常検知)
Daily Token Optimizer
  ↓ (提案作成)
GitHub Issue(改善案)
  ↓ (実装)
ワークフロー更新

Auditorが実施する分析:

  • 過去N日間のトークン消費トレンド
  • 最もコストが高いワークフローの特定
  • 異常なターン数の検出

Optimizerが提案する改善:

  • 使用されていないMCPツール削除
  • プロンプト圧縮
  • キャッシング戦略改善

ステップ3: 実装手段としてのエージェント活用

重要なポイント: 最適化プロセス自体がエージェントベース

これにより、継続的な改善が自動化され、手動介入を最小化できます。


実践的な最適化テクニック

テクニック1: 未使用ツール削除(最大効果)

GitHubの分析で最も効果的だった最適化です。

問題:

# MCPサーバーに40個のツール定義がある場合
mcp_tools:
  - github_api_*
  - jira_api_*
  - slack_api_*
  # ...39個以上

各LLM呼び出しに含まれるツール定義:10~15 KBのオーバーヘッド × 複数ターン = 大量なトークン消費

実装手順:

  1. ワークフロー実行ログを分析
    # 実際に呼び出されたツール名を抽出
    grep "tool_call" workflow-logs.json | \
      jq '.tool_name' | sort | uniq
    
  2. 使用ツールのみをフィルタリング

最適化前:

mcp_server: github
# すべてのツール自動登録

最適化後(例):

mcp_server:
  github:
    tools:
      - pull_requests.read
      - pull_requests.create
      - issues.add_comment
# 実際に使う3つだけに限定
  1. 効果測定
削減効果: 平均 40~60% のトークン削減

テクニック2: プロンプト圧縮と正規化

長いシステムプロンプトは、各LLM呼び出しで繰り返されるため大きなオーバーヘッドです。意味を損なわない範囲で圧縮することでトークンを削減できます。

実装例:

# 最適化前:冗長で説明的
system_prompt_before = """
You are a code reviewer. Your job is to review pull requests
and identify issues with code quality, security, performance,
and maintainability. You should provide specific, actionable
feedback. Consider the following areas:
1. Code Quality - Is the code clean and maintainable?
2. Security - Are there any security vulnerabilities?
3. Performance - Could the code be optimized?
4. Testing - Are there adequate tests?
"""

# 最適化後:圧縮(意味は同じ、トークン削減)
system_prompt_after = """Code reviewer. Check: quality, security, performance, testing.
Provide specific, actionable feedback."""

さらに進んだ最適化:

セッション内で固定情報はプロンプトキャッシングで再利用:

# Claude API + prompt caching
response = client.messages.create(
    model="claude-3-5-sonnet-20241022",
    max_tokens=1024,
    system=[
        {
            "type": "text",
            "text": "You are a code reviewer...",
            "cache_control": {"type": "ephemeral"}
        }
    ],
    messages=[{"role": "user", "content": pr_content}]
)

削減効果: キャッシュヒット時に90%のトークン削減


テクニック3: マルチステップワークフローの最適化

問題: 単一エージェントですべてのチェックを実施

Input → Single Agent (40 tokens overhead) 
  → LLM call 1 (2000 tokens) 
  → LLM call 2 (1800 tokens)
  → LLM call 3 (1500 tokens)

最適化: タスク分割とエージェント選択

Input
  ↓
Task 1: Code Style (SLM: Gemma 7B, 400 tokens)
  ↓
Task 2: Security (LLM: Claude, 1200 tokens)
  ↓
Task 3: Integration (LLM: Claude, 800 tokens)

利点:

  • 小さなモデル(SLM)で済むタスクは分離
  • 複雑な分析にだけ高性能LLMを使用
  • 総トークン消費: 50~70%削減

監視メトリクスの定義

効果的な最適化のため、以下のメトリクスを追跡:

1. トークン効率スコア

Efficiency Score = 完了タスク数 / 総トークン消費

2. ターンあたりのトークン消費

Tokens per Turn = 総入出力トークン / ターン数

3. キャッシュヒット率

Cache Hit Rate = キャッシュ読み込みトークン / 全トークン

実装例(Python)

import json
from collections import defaultdict

def analyze_token_usage(logs_file):
    metrics = defaultdict(dict)
    
    with open(logs_file) as f:
        for line in f:
            data = json.loads(line)
            workflow = data['workflow']
            
            # 効率スコア計算
            total_tokens = data['input_tokens'] + data['output_tokens']
            tasks_completed = data.get('tasks_completed', 1)
            efficiency = tasks_completed / total_tokens
            
            metrics[workflow]['efficiency'] = efficiency
            metrics[workflow]['cache_hit_rate'] = (
                data.get('cache_read_tokens', 0) / total_tokens
            )
    
    return metrics

部門別の最適化チェックリスト

✅ エージェント設計チーム

  • MCPツール定義を月1回監査
  • 未使用ツールを自動削除するスクリプト導入
  • ツール呼び出しログの集計化
  • エージェント間通信時のトークンオーバーヘッド測定

✅ インフラ・DevOps チーム

  • API呼び出しの中央集計システム構築
  • トークン使用量アラート設定(月予算の80%等)
  • ワークフロー実行ログの長期保管
  • キャッシング層(Redis等)の導入検討

✅ セキュリティチーム

  • プロンプト内の機密情報スキャン
  • ツール定義から不要な権限削除
  • キャッシュに保存される情報の分類

よくある落とし穴

❌ トークン削減だけを追求

危険: 精度や安全性を損なう過度な圧縮

# 悪い例
system_prompt = "Review code. Check issues."  # 短いが曖昧

# 良い例
system_prompt = """Review code for quality, security, performance.
Provide specific, actionable feedback with file/line references."""

❌ 静的な最適化のみ

改善案: 実行時のコンテキストに応じて動的調整

# 動的ツール選択の例
if task_type == "security_audit":
    tools = ["security_scanner", "dependency_checker"]
elif task_type == "style_check":
    tools = ["linter", "formatter"]

❌ 監視なしの本番デプロイ

教訓: 必ずパイロット環境でトークン削減効果を検証


まとめと次のステップ

AIエージェントのトークン効率化は、単なるコスト削減ではなく、スケーラブルなAI Native エンジニアリングの基礎です。

実装優先度

  1. 高優先度(今週中)
    • ワークフロー内のツール定義を棚卸し
    • 未使用ツール削除
    • トークン使用量の計測開始
  2. 中優先度(今月中)
    • プロンプト圧縮・標準化
    • キャッシング戦略導入
    • メトリクスダッシュボード構築
  3. 低優先度(来月以降)
    • SLM活用による階層化
    • 自動最適化ワークフロー構築
    • マルチプロバイダーの最適化

AIエージェント技術は急速に進化していますが、効率的な運用なしに本番導入は困難です。GitHubの事例から学び、自社環境に適用することで、持続可能なAI Native 開発体制を構築しましょう。


参考リソース


最後に: トークン効率化は技術的な最適化だけでなく、チーム文化としても重要です。
エージェント実行ログを可視化し、効率改善を組織的に追跡することで、
AIネイティブな開発文化が根付きます。