mcpField
C
cognitive-scaffolding

cognitive-scaffolding

github.com/itallstartedwithaideaエージェントワークフロー4479 回インストール28 週間前に更新
リポジトリ

cognitive-scaffolding について

cognitive-scaffolding は、初頭効果や新近性、チャンク化などの注意特性を用いてエージェントのコンテキストを構成する Agent Skills ガイドです。ルール、現在のタスク、参照資料を別々の領域に配置する方法を扱います。

主な機能

  1. 01注意特性に基づくコンテキスト領域の設定
  2. 02重要情報を冒頭と末尾に配置
  3. 03区切りによる情報のチャンク化
  4. 04重要度に応じた情報配置

活用シーン

  1. 01長いコンテキストで指示への注意を高める
  2. 02複数文書の推論資料を整理
  3. 03参照データの活用方法を調整

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/itallstartedwithaidea/agent-skills --skill cognitive-scaffolding

インストール後、Claude Code で/cognitive-scaffoldingを入力して読み込まれたか確認します。

詳細

Cognitive Scaffolding

googleadsagent.ai™ による Agent Skills™ の一部です。

説明

Cognitive Scaffolding は、認知科学の原則である初頭効果、親近性バイアス、チャンク化、注意の配分を用いて、エージェントのコンテキストウィンドウを構成します。人間のワーキングメモリと同様に、言語モデルは一様な処理装置ではありません。コンテキストの最初と最後に配置された情報は、相対的に強い注意を受けます(初頭効果と親近性効果)。一方、中央の内容は実質的に見過ごされることがあります。Cognitive Scaffolding はこうした特性を活用し、最も重要な情報にモデルが最大限の注意を向けるようにします。

このスキルは、googleadsagent.ai™ の Buddy™ エージェントを使った広範な実験を通じて開発されました。コンテキストウィンドウ内の情報の配置を組み替えるだけで、分析精度が測定可能なほど向上しました。プロンプト内の戦略的な位置にキャンペーンのパフォーマンスデータを配置すると、同じデータを任意の場所に置くよりも、推奨内容が大幅に改善しました。同じ原則は、コードのコンテキスト、ドキュメント、その他エージェントが推論する必要のあるあらゆる情報にも当てはまります。

認知足場のフレームワークでは、コンテキストを4つのゾーンに整理します。アンカーゾーン(コンテキストの最初の5% — 最も注意を受ける領域で、アイデンティティと変更不可のルールに使用)、フォアグラウンドゾーン(最後の20% — 注意を受けやすく、現在のタスクと直近のコンテキストに使用)、構造化された中間ゾーン(60% — 中程度の注意を受け、明確に区切られたチャンクに整理)、バックグラウンドゾーン(15% — 最も注意を受けにくく、参照資料や代替手段に使用)です。各ゾーンには、その場所に置かれた情報をモデルが最大限に活用できるようにする、固有のコンテンツ戦略があります。

使用する場面

  • 同じ情報を使っているにもかかわらず、エージェントの精度にばらつきがある場合
  • コンテキストウィンドウが長くなると、短いやり取りに比べてパフォーマンスが低下する場合
  • 重要な指示や制約がエージェントに無視されることがある場合
  • エージェントに負担をかけずに大量の参照データを提示する必要がある場合
  • 複数のドキュメントを使った推論で、特定のセクションに注意を向けさせる必要がある場合
  • 特定のモデルアーキテクチャに合わせてエージェントの動作を最適化する場合

仕組み

graph LR
    subgraph "Context Window"
        A[Anchor Zone<br/>5% - Highest Attention<br/>Identity, Rules] --> B[Structured Middle<br/>60% - Chunked Data<br/>Delimited Sections]
        B --> C[Background Zone<br/>15% - Reference<br/>Fallback Material]
        C --> D[Foreground Zone<br/>20% - Current Task<br/>Recent Messages]
    end
    
    E[Primacy Effect] -.-> A
    F[Chunking Theory] -.-> B
    G[Low Attention Region] -.-> C
    H[Recency Effect] -.-> D

この足場は、トランスフォーマーアーキテクチャにおいて十分に実証された注意パターンを活用します。アンカーゾーンでは初頭効果を活用します。モデルは最初のトークンに強く注意を向けるため、アイデンティティを示す文や譲れないルールを置くのに最適です。フォアグラウンドゾーンでは親近性効果を活用します。直近のトークンは強い注意を受けるため、現在のタスクや直近の会話を置くのに最適です。構造化された中間ゾーンでは、明示的な区切りとヘッダーを使って移動しやすいチャンクを作成し、「中間部で見失う」効果を補います。バックグラウンドゾーンには、モデルが参照できるものの、積極的に注意を向ける必要のない資料を保存します。

実装

認知ゾーンビルダー:

interface CognitiveZone {
  name: string;
  position: "anchor" | "middle" | "background" | "foreground";
  budgetPercent: number;
  content: string;
  delimiter: string;
}

class CognitiveScaffold {
  private totalBudget: number;
  private zones: Map<string, CognitiveZone> = new Map();

  constructor(totalTokenBudget: number) {
    this.totalBudget = totalTokenBudget;
  }

  setAnchor(content: string): void {
    this.zones.set("anchor", {
      name: "Identity & Rules",
      position: "anchor",
      budgetPercent: 5,
      content,
      delimiter: "",
    });
  }

  addMiddleChunk(name: string, content: string): void {
    const key = `middle_${this.zones.size}`;
    this.zones.set(key, {
      name,
      position: "middle",
      budgetPercent: 0,
      content,
      delimiter: `\n<section name="${name}">\n`,
    });
  }

  setForeground(content: string): void {
    this.zones.set("foreground", {
      name: "Current Task",
      position: "foreground",
      budgetPercent: 20,
      content,
      delimiter: "\n<current_task>\n",
    });
  }

  assemble(): string {
    const sections: string[] = [];
    const anchor = this.zones.get("anchor");
    if (anchor) sections.push(anchor.content);

    const middle = [...this.zones.entries()]
      .filter(([_, z]) => z.position === "middle")
      .map(([_, z]) => `${z.delimiter}${z.content}\n</section>`);
    sections.push(...middle);

    const bg = [...this.zones.entries()]
      .filter(([_, z]) => z.position === "background");
    for (const [_, zone] of bg) {
      sections.push(`<reference name="${zone.name}">\n${zone.content}\n</reference>`);
    }

    const fg = this.zones.get("foreground");
    if (fg) sections.push(`${fg.delimiter}${fg.content}\n</current_task>`);

    return sections.join("\n\n");
  }
}

注意を考慮したコンテンツの配置:

class AttentionOptimizer:
    """Place content based on importance and model attention patterns."""

    ATTENTION_CURVE = {
        "anchor": 0.95,
        "early_middle": 0.60,
        "deep_middle": 0.40,
        "late_middle": 0.55,
        "foreground": 0.90,
    }

    def optimize_placement(self, items: list[dict]) -> list[dict]:
        """Sort items into optimal positions based on importance score."""
        sorted_items = sorted(items, key=lambda x: x["importance"], reverse=True)
        zones = {zone: [] for zone in self.ATTENTION_CURVE}
        zone_order = sorted(self.ATTENTION_CURVE.keys(), key=lambda z: self.ATTENTION_CURVE[z], reverse=True)

        for item in sorted_items:
            best_zone = min(zone_order, key=lambda z: abs(self.ATTENTION_CURVE[z] - item["importance"]))
            zones[best_zone].append(item)

        placement = []
        for zone in ["anchor", "early_middle", "deep_middle", "late_middle", "foreground"]:
            for item in zones[zone]:
                placement.append({**item, "zone": zone, "expected_attention": self.ATTENTION_CURVE[zone]})
        return placement

構造化データのチャンク化戦略:

def chunk_for_middle_zone(data: list[dict], chunk_size: int = 5) -> list[str]:
    """Break data into cognitively manageable chunks with clear boundaries."""
    chunks = []
    for i in range(0, len(data), chunk_size):
        batch = data[i:i + chunk_size]
        header = f"--- Chunk {i // chunk_size + 1} of {(len(data) + chunk_size - 1) // chunk_size} ---"
        body = "\n".join(format_item(item) for item in batch)
        summary = f"Summary: {len(batch)} items, key values: {extract_key_values(batch)}"
        chunks.append(f"{header}\n{body}\n{summary}")
    return chunks


def build_scaffolded_prompt(task, data, rules):
    scaffold = CognitiveScaffold(total_token_budget=150000)

    scaffold.set_anchor(f"""You are Buddy™, a Google Ads analysis agent.
RULES (always enforced):
{chr(10).join(f'- {r}' for r in rules)}""")

    for i, chunk in enumerate(chunk_for_middle_zone(data)):
        scaffold.add_middle_chunk(f"data_chunk_{i}", chunk)

    scaffold.set_foreground(f"""CURRENT TASK:
{task}

Analyze the data in the sections above and provide your recommendation.""")

    return scaffold.assemble()

ベストプラクティス

  1. 譲れないルールはアンカーゾーンに配置します — システムのアイデンティティ、安全性の制約、出力形式のルールは、初頭効果が最も強く働くコンテキストの最初の5%に配置します。
  2. 現在のタスクを前面に保ちます — ユーザーの実際の依頼と直近のメッセージが、モデルが生成を始める直前に読む最後の内容になるようにします。
  3. 明示的な区切りで中間の内容をチャンク化します — XML タグ、Markdown の見出し、セクションの境界を使い、「中間での見失い」が起きるゾーンに移動しやすい構造を作ります。
  4. チャンクごとに要約を追加します — 各中間チャンクの最後に1行の要約を置くことで、チャンク全体を読み直す必要なく、モデルに検索の手がかりを与えます。
  5. 注意力を実測します — 同じ質問をデータの配置を変えて試し、使用するモデル固有の注意力の傾向を定量化します。
  6. 重要な情報を中間だけに配置しないようにします — タスクに不可欠な情報は、アンカーまたは前面に配置し、中間ゾーンだけに置かないようにします。
  7. コンテンツの種類に合わせてチャンク化します — コードファイルは関数やクラスごとに、データテーブルは行のグループごとに、文書はセクションごとにチャンク化します。すべてに同じ方法を適用するのは最適ではありません。
  8. 指示を繰り返して強化します — 非常に長いコンテキストでは、重要な指示をアンカーと前面の両方に繰り返します。

プラットフォームの互換性

機能Claude CodeCursorCodexGemini CLI
コンテキストの構造化✅ 完全対応✅ 完全対応✅ 完全対応✅ 完全対応
XML 区切り✅ 推奨✅ 対応✅ 対応✅ 対応
トークン予算の制御✅ 完全対応✅ 完全対応✅ 完全対応✅ 完全対応
注意力の最適化✅ Claude 向けに調整✅ モデルに依存✅ モデルに依存✅ Gemini 向けに調整
ゾーンベースの組み立て✅ 完全対応✅ 完全対応✅ 完全対応✅ 完全対応

関連スキル

キーワード

認知スキャフォールディング、初頭効果、親近性バイアス、チャンク化、注意力の配分、ワーキングメモリ、コンテキスト構造、中間での見失い、情報の配置、エージェントスキル


© 2026 googleadsagent.ai™ | Agent Skills™ | MIT License

コメント