Skip to content
MCP ThesaurusMCP Thesaurus

Iterative Retrieval

CommunityGood70/100Claim

MITupdated 2mo ago

์„œ๋ธŒ์—์ด์ „ํŠธ๊ฐ€ ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „๊นŒ์ง€ ํ•„์š”ํ•œ ์ปจํ…์ŠคํŠธ๋ฅผ ์•Œ ์ˆ˜ ์—†๋Š” ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ ์›Œํฌํ”Œ๋กœ์šฐ์˜ "์ปจํ…์ŠคํŠธ ๋ฌธ์ œ"๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

SourceWebsiteDocs

What can you do with Iterative Retrieval?


name: iterative-retrieval description: ์„œ๋ธŒ์—์ด์ „ํŠธ ์ปจํ…์ŠคํŠธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ ์ง„์  ์ปจํ…์ŠคํŠธ ๊ฒ€์ƒ‰ ๊ฐœ์„  ํŒจํ„ด origin: ECC

๋ฐ˜๋ณต์  ๊ฒ€์ƒ‰ ํŒจํ„ด

์„œ๋ธŒ์—์ด์ „ํŠธ๊ฐ€ ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „๊นŒ์ง€ ํ•„์š”ํ•œ ์ปจํ…์ŠคํŠธ๋ฅผ ์•Œ ์ˆ˜ ์—†๋Š” ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ ์›Œํฌํ”Œ๋กœ์šฐ์˜ "์ปจํ…์ŠคํŠธ ๋ฌธ์ œ"๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

ํ™œ์„ฑํ™” ์‹œ์ 

  • ์‚ฌ์ „์— ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค ์ปจํ…์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•œ ์„œ๋ธŒ์—์ด์ „ํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ
  • ์ปจํ…์ŠคํŠธ๊ฐ€ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ๋˜๋Š” ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ
  • ์—์ด์ „ํŠธ ์ž‘์—…์—์„œ "์ปจํ…์ŠคํŠธ ์ดˆ๊ณผ" ๋˜๋Š” "์ปจํ…์ŠคํŠธ ๋ˆ„๋ฝ" ์‹คํŒจ๋ฅผ ๊ฒช์„ ๋•Œ
  • ์ฝ”๋“œ ํƒ์ƒ‰์„ ์œ„ํ•œ RAG ์œ ์‚ฌ ๊ฒ€์ƒ‰ ํŒŒ์ดํ”„๋ผ์ธ์„ ์„ค๊ณ„ํ•  ๋•Œ
  • ์—์ด์ „ํŠธ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์—์„œ ํ† ํฐ ์‚ฌ์šฉ๋Ÿ‰์„ ์ตœ์ ํ™”ํ•  ๋•Œ

๋ฌธ์ œ

์„œ๋ธŒ์—์ด์ „ํŠธ๋Š” ์ œํ•œ๋œ ์ปจํ…์ŠคํŠธ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค:

  • ๊ด€๋ จ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ ํŒŒ์ผ
  • ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์กด์žฌํ•˜๋Š” ํŒจํ„ด
  • ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์šฉ์–ด

ํ‘œ์ค€ ์ ‘๊ทผ๋ฒ•์˜ ์‹คํŒจ:

  • ๋ชจ๋“  ๊ฒƒ์„ ์ „์†ก: ์ปจํ…์ŠคํŠธ ์ œํ•œ ์ดˆ๊ณผ
  • ์•„๋ฌด๊ฒƒ๋„ ์ „์†กํ•˜์ง€ ์•Š์Œ: ์—์ด์ „ํŠธ๊ฐ€ ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ๊ฐ–์ง€ ๋ชปํ•จ
  • ํ•„์š”ํ•œ ๊ฒƒ์„ ์ถ”์ธก: ์ข…์ข… ์ž˜๋ชป๋จ

ํ•ด๊ฒฐ์ฑ…: ๋ฐ˜๋ณต์  ๊ฒ€์ƒ‰

์ปจํ…์ŠคํŠธ๋ฅผ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•˜๋Š” 4๋‹จ๊ณ„ ๋ฃจํ”„:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                                             โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”            โ”‚
โ”‚   โ”‚ DISPATCH โ”‚โ”€โ”€โ”€โ”€โ”€โ”‚ EVALUATE โ”‚            โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜            โ”‚
โ”‚        โ–ฒ                  โ”‚                 โ”‚
โ”‚        โ”‚                  โ–ผ                 โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”            โ”‚
โ”‚   โ”‚   LOOP   โ”‚โ”€โ”€โ”€โ”€โ”€โ”‚  REFINE  โ”‚            โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜            โ”‚
โ”‚                                             โ”‚
โ”‚        Max 3 cycles, then proceed           โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

1๋‹จ๊ณ„: DISPATCH

ํ›„๋ณด ํŒŒ์ผ์„ ์ˆ˜์ง‘ํ•˜๊ธฐ ์œ„ํ•œ ์ดˆ๊ธฐ ๊ด‘๋ฒ”์œ„ ์ฟผ๋ฆฌ:

// Start with high-level intent
const initialQuery = {
  patterns: ['src/**/*.ts', 'lib/**/*.ts'],
  keywords: ['authentication', 'user', 'session'],
  excludes: ['*.test.ts', '*.spec.ts']
};

// Dispatch to retrieval agent
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 {
    // Add new patterns discovered in high-relevance files
    patterns: [...previousQuery.patterns, ...extractPatterns(evaluation)],

    // Add terminology found in codebase
    keywords: [...previousQuery.keywords, ...extractKeywords(evaluation)],

    // Exclude confirmed irrelevant paths
    excludes: [...previousQuery.excludes, ...evaluation
      .filter(e => e.relevance < 0.2)
      .map(e => e.path)
    ],

    // Target specific gaps
    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);

    // Check if we have sufficient context
    const highRelevance = evaluation.filter(e => e.relevance >= 0.7);
    if (highRelevance.length >= 3 && !hasCriticalGaps(evaluation)) {
      return highRelevance;
    }

    // Refine and continue
    query = refineQuery(evaluation, query);
    bestContext = mergeContext(bestContext, highRelevance);
  }

  return bestContext;
}

์‹ค์šฉ์ ์ธ ์˜ˆ์‹œ

์˜ˆ์‹œ 1: ๋ฒ„๊ทธ ์ˆ˜์ • ์ปจํ…์ŠคํŠธ

Task: "Fix the authentication token expiry bug"

Cycle 1:
  DISPATCH: Search for "token", "auth", "expiry" in src/**
  EVALUATE: Found auth.ts (0.9), tokens.ts (0.8), user.ts (0.3)
  REFINE: Add "refresh", "jwt" keywords; exclude user.ts

Cycle 2:
  DISPATCH: Search refined terms
  EVALUATE: Found session-manager.ts (0.95), jwt-utils.ts (0.85)
  REFINE: Sufficient context (2 high-relevance files)

Result: auth.ts, tokens.ts, session-manager.ts, jwt-utils.ts

์˜ˆ์‹œ 2: ๊ธฐ๋Šฅ ๊ตฌํ˜„

Task: "Add rate limiting to API endpoints"

Cycle 1:
  DISPATCH: Search "rate", "limit", "api" in routes/**
  EVALUATE: No matches - codebase uses "throttle" terminology
  REFINE: Add "throttle", "middleware" keywords

Cycle 2:
  DISPATCH: Search refined terms
  EVALUATE: Found throttle.ts (0.9), middleware/index.ts (0.7)
  REFINE: Need router patterns

Cycle 3:
  DISPATCH: Search "router", "express" patterns
  EVALUATE: Found router-setup.ts (0.8)
  REFINE: Sufficient context

Result: throttle.ts, middleware/index.ts, router-setup.ts

์—์ด์ „ํŠธ์™€์˜ ํ†ตํ•ฉ

์—์ด์ „ํŠธ ํ”„๋กฌํ”„ํŠธ์—์„œ ์‚ฌ์šฉ:

When retrieving context for this task:
1. Start with broad keyword search
2. Evaluate each file's relevance (0-1 scale)
3. Identify what context is still missing
4. Refine search criteria and repeat (max 3 cycles)
5. Return files with relevance >= 0.7

๋ชจ๋ฒ” ์‚ฌ๋ก€

  1. ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์‹œ์ž‘ํ•˜์—ฌ ์ ์ง„์ ์œผ๋กœ ์ขํžˆ๊ธฐ - ์ดˆ๊ธฐ ์ฟผ๋ฆฌ๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์ง€์ •ํ•˜์ง€ ์•Š๊ธฐ
  2. ์ฝ”๋“œ๋ฒ ์ด์Šค ์šฉ์–ด ํ•™์Šต - ์ฒซ ๋ฒˆ์งธ ์‚ฌ์ดํด์—์„œ ์ฃผ๋กœ ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜์ด ๋“œ๋Ÿฌ๋‚จ
  3. ๋ˆ„๋ฝ๋œ ๊ฒƒ ์ถ”์  - ๋ช…์‹œ์  ๊ฒฉ์ฐจ ์‹๋ณ„์ด ๊ฐœ์„ ์„ ์ฃผ๋„
  4. "์ถฉ๋ถ„ํžˆ ์ข‹์€" ์ˆ˜์ค€์—์„œ ์ค‘๋‹จ - ๊ด€๋ จ์„ฑ ๋†’์€ ํŒŒ์ผ 3๊ฐœ๊ฐ€ ๋ณดํ†ต ์ˆ˜์ค€์˜ ํŒŒ์ผ 10๊ฐœ๋ณด๋‹ค ๋‚˜์Œ
  5. ์ž์‹  ์žˆ๊ฒŒ ์ œ์™ธ - ๊ด€๋ จ์„ฑ ๋‚ฎ์€ ํŒŒ์ผ์€ ๊ด€๋ จ์„ฑ์ด ๋†’์•„์ง€์ง€ ์•Š์Œ

๊ด€๋ จ ํ•ญ๋ชฉ

  • The Longform Guide - ์„œ๋ธŒ์—์ด์ „ํŠธ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์„น์…˜
  • continuous-learning ์Šคํ‚ฌ - ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๊ฐœ์„ ๋˜๋Š” ํŒจํ„ด
  • ~/.claude/agents/์˜ ์—์ด์ „ํŠธ ์ •์˜