迭代检索模式¶
解决多 Agent 工作流中的“上下文问题”。子 Agent 在开始工作之前,不知道需要哪些上下文。
问题¶
子 Agent 以有限的上下文启动。它们不知道: - 哪些文件包含相关代码 - 代码库中存在哪些模式 - 项目使用哪些术语
标准做法会失败: - 发送所有内容:超出上下文限制 - 不发送任何内容:Agent 缺少重要信息 - 猜测所需内容:经常出错
解决方案:迭代检索¶
一个逐步精炼上下文的四阶段循环:
┌─────────────────────────────────────────────┐
│ │
│ ┌──────────┐ ┌──────────┐ │
│ │ DISPATCH │─────│ EVALUATE │ │
│ └──────────┘ └──────────┘ │
│ ▲ │ │
│ │ ▼ │
│ ┌──────────┐ ┌──────────┐ │
│ │ LOOP │─────│ REFINE │ │
│ └──────────┘ └──────────┘ │
│ │
│ 最大3サイクル、その後続行 │
└─────────────────────────────────────────────┘
阶段 1:DISPATCH¶
用于收集候选文件的初始广泛查询:
// 高レベルの意図から開始
const initialQuery = {
patterns: ['src/**/*.ts', 'lib/**/*.ts'],
keywords: ['authentication', 'user', 'session'],
excludes: ['*.test.ts', '*.spec.ts']
};
// 検索エージェントにディスパッチ
const candidates = await retrieveFiles(initialQuery);
阶段 2:EVALUATE¶
评估所获取内容的相关性:
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:REFINE¶
基于评估更新检索条件:
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:LOOP¶
使用精炼后的条件重复执行(最多 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エンドポイントにレート制限を追加"
サイクル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
与 Agent 集成¶
在 Agent Prompt 中使用:
このタスクのコンテキストを取得する際:
1. 広範なキーワード検索から開始
2. 各ファイルの関連性を評価(0-1スケール)
3. まだ不足しているコンテキストを特定
4. 検索基準を洗練して繰り返す(最大3サイクル)
5. 関連性が0.7以上のファイルを返す
最佳实践¶
- 从广泛开始,逐步缩小 - 初始查询不要过度指定
- 学习代码库术语 - 第一个周期通常会揭示命名规则
- 跟踪缺失内容 - 明确的缺口识别有助于精炼
- 在“足够好”时停止 - 3 个高相关文件优于 10 个无关紧要的文件
- 果断排除 - 低相关文件不会变得相关
相关项目¶
- 长篇指南 - 子 Agent 编排部分
continuous-learning技能 - 用于随时间改进的模式~/.claude/agents/中的 Agent 定义
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 ev/ECC