mcpField
I
iterative-retrieval

iterative-retrieval

github.com/xu-xiangエージェントワークフロー2.0k39 回インストール34 週間前に更新
リポジトリ

iterative-retrieval について

マルチエージェントのワークフロー向けに、コードベースのコンテキストを検索するパターンです。検索、関連性評価、クエリ改善を繰り返し、サブエージェントに必要なファイルを特定します。コンテキスト不足や過多への対処に使えます。

主な機能

  1. 01候補ファイルを広く検索
  2. 02タスクとの関連性を評価
  3. 03不足情報に基づき検索条件を改善
  4. 04最大3回の検索サイクル
  5. 05関連性の高いファイルを選別

活用シーン

  1. 01コード修正に必要な情報の検索
  2. 02機能実装に必要なパターンや用語の特定
  3. 03マルチエージェントでのコンテキスト負荷の軽減
  4. 04反復型コード検索フローの設計

インストール

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

$npx skills add https://github.com/xu-xiang/everything-claude-code-zh --skill iterative-retrieval

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

詳細

反復検索パターン

マルチエージェントワークフローにおける「コンテキストの問題」を解決します。サブエージェントは、作業を始める前に必要なコンテキストがわからないことがよくあります。

いつ有効にするか

  • 事前に完全には予測できないコードベースのコンテキストを必要とするサブエージェントを生成するとき
  • コンテキストの構築を段階的に改善する必要があるマルチエージェントワークフローを構築するとき
  • エージェントのタスクで「コンテキストが大きすぎる」または「コンテキストが不足している」ことによる失敗が発生したとき
  • コード探索のための RAG のような検索パイプラインを設計するとき
  • エージェントのオーケストレーションにおけるトークンの使用量を最適化するとき

問題

生成されたサブエージェントに与えられるコンテキストは、通常限られています。サブエージェントは、次のことを把握していません。

  • 関連するコードを含むファイル
  • コードベースに存在するパターン
  • プロジェクトで使われている用語

一般的な方法では、うまくいかないことがよくあります。

  • すべて送る:コンテキストの制限を超えます。
  • 何も送らない:エージェントに重要な情報が不足します。
  • 必要な情報を推測する:多くの場合、推測を誤ります。

解決策:反復検索

コンテキストを段階的に改善する、4 つのフェーズからなるループです。

┌─────────────────────────────────────────────┐
│                                             │
│   ┌──────────┐      ┌──────────┐            │
│   │   派发   │─────▶│   评估   │            │
│   │ DISPATCH │      │ EVALUATE │            │
│   └──────────┘      └──────────┘            │
│        ▲                  │                 │
│        │                  ▼                 │
│   ┌──────────┐      ┌──────────┐            │
│   │   循环   │◀─────│   优化   │            │
│   │   LOOP   │      │  REFINE  │            │
│   └──────────┘      └──────────┘            │
│                                             │
│        最多 3 个周期,然后继续              │
└─────────────────────────────────────────────┘
フェーズ 1:ディスパッチ

候補ファイルを集めるための、最初の幅広いクエリです。

// 从高层意图开始
const initialQuery = {
  patterns: ['src/**/*.ts', 'lib/**/*.ts'],
  keywords: ['authentication', 'user', 'session'],
  excludes: ['*.test.ts', '*.spec.ts']
};

// 派发给检索智能体
const candidates = await retrieveFiles(initialQuery);
フェーズ 2:評価

検索されたコンテンツの関連性を評価します。

function evaluateRelevance(files, task) {
  return files.map(file => ({
    path: file.path,
    relevance: scoreRelevance(file.content, task),
    reason: explainRelevance(file.content, task),
    missingContext: identifyGaps(file.content, task)
  }));
}

評価基準:

  • 高 (0.8-1.0):対象の機能を直接実装しています
  • 中 (0.5-0.7):関連するパターンや型が含まれています
  • 低 (0.2-0.4):間接的に関連しています
  • なし (0-0.2):関連性がないため、除外します
フェーズ 3:絞り込み

評価結果に基づいて検索条件を更新します。

function refineQuery(evaluation, previousQuery) {
  return {
    // 添加在高度相关文件中发现的新模式
    patterns: [...previousQuery.patterns, ...extractPatterns(evaluation)],

    // 添加在代码库中发现的术语
    keywords: [...previousQuery.keywords, ...extractKeywords(evaluation)],

    // 排除已确认为不相关的路径
    excludes: [...previousQuery.excludes, ...evaluation
      .filter(e => e.relevance < 0.2)
      .map(e => e.path)
    ],

    // 针对特定的缺口
    focusAreas: evaluation
      .flatMap(e => e.missingContext)
      .filter(unique)
  };
}
フェーズ 4:反復

絞り込んだ条件を使って、最大 3 サイクルまで繰り返します。

async function iterativeRetrieve(task, maxCycles = 3) {
  let query = createInitialQuery(task);
  let bestContext = [];

  for (let cycle = 0; cycle < maxCycles; cycle++) {
    const candidates = await retrieveFiles(query);
    const evaluation = evaluateRelevance(candidates, task);

    // 检查是否已有足够的上下文
    const highRelevance = evaluation.filter(e => e.relevance >= 0.7);
    if (highRelevance.length >= 3 && !hasCriticalGaps(evaluation)) {
      return highRelevance;
    }

    // 优化并继续
    query = refineQuery(evaluation, query);
    bestContext = mergeContext(bestContext, highRelevance);
  }

  return bestContext;
}

実践例

例 1:バグ修正に必要なコンテキスト
任务:"修复身份验证令牌过期 bug"

周期 1:
  派发 (DISPATCH):在 src/** 中搜索 "token", "auth", "expiry"
  评估 (EVALUATE):发现 auth.ts (0.9), tokens.ts (0.8), user.ts (0.3)
  优化 (REFINE):添加 "refresh", "jwt" 关键词;排除 user.ts

周期 2:
  派发 (DISPATCH):搜索优化后的术语
  评估 (EVALUATE):发现 session-manager.ts (0.95), jwt-utils.ts (0.85)
  优化 (REFINE):上下文已足够(2 个高度相关文件)

结果:auth.ts, tokens.ts, session-manager.ts, jwt-utils.ts
例 2:機能の実装
任务:"为 API 端点添加速率限制 (rate limiting)"

周期 1:
  派发 (DISPATCH):在 routes/** 中搜索 "rate", "limit", "api"
  评估 (EVALUATE):无匹配项 —— 代码库使用的是 "throttle" 术语
  优化 (REFINE):添加 "throttle", "middleware" 关键词

周期 2:
  派发 (DISPATCH):搜索优化后的术语
  评估 (EVALUATE):发现 throttle.ts (0.9), middleware/index.ts (0.7)
  优化 (REFINE):需要路由器模式

周期 3:
  派发 (DISPATCH):搜索 "router", "express" 模式
  评估 (EVALUATE):发现 router-setup.ts (0.8)
  优化 (REFINE):上下文已足够

结果:throttle.ts, middleware/index.ts, router-setup.ts

エージェントとの統合

エージェントのプロンプトで使用します。

在为此任务检索上下文时:
1. 从广泛的关键词搜索开始
2. 评估每个文件的相关性(0-1 等级)
3. 识别仍然缺失的上下文
4. 优化搜索条件并重复执行(最多 3 个周期)
5. 返回相关性 >= 0.7 的文件

ベストプラクティス

  1. 広く始めて、段階的に絞り込む —— 最初のクエリを具体的にしすぎないでください。
  2. コードベースの用語を学ぶ —— 最初のサイクルで、通常は命名規則が明らかになります。
  3. 不足している内容を追跡する —— 明確に不足箇所を特定することが、改善を進める鍵です。
  4. 十分なところで止める —— 関連性の高いファイル 3 件のほうが、平凡なファイル 10 件より優れています。
  5. ためらわずに除外する —— 関連性の低いファイルが、突然関連性を持つようになることはほとんどありません。

関連リソース

  • 長編ガイド —— サブエージェントのオーケストレーションに関するセクション
  • continuous-learning スキル —— 時間とともに改善するパターンに使用します
  • ~/.claude/agents/ 内のエージェント定義

コメント