--- id: [[P-Reinforce|P-Reinforce]]-AUTO-ADR-001 category: AI_and_ML confidence_score: 1.00 tags: [auto-reinforced, adaptive-rag, rag, query-routing, search-optimization] last_reinforced: 2026-05-04 --- # [[Adaptive RAG|Adaptive RAG]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > "질문의 λ¬΄κ²Œμ— λ”°λ₯Έ λ§žμΆ€ν˜• 검색: λ‹¨μˆœν•œ μ§ˆλ¬Έμ€ LLM의 μ§€μ‹μœΌλ‘œ μ²˜λ¦¬ν•˜κ³ , λ³΅μž‘ν•œ μ§ˆλ¬Έμ€ μ •λ°€ν•œ 검색 νŒŒμ΄ν”„λΌμΈμ„ κ°€λ™ν•˜μ—¬ λ¦¬μ†ŒμŠ€ λ‚­λΉ„λ₯Ό 쀄이고 응닡 ν’ˆμ§ˆμ„ μ΅œμ ν™”ν•˜λŠ” 동적 검색 μ•„ν‚€ν…μ²˜." ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) μ μ‘ν˜• RAG(Adaptive RAG)λŠ” μ‚¬μš©μžμ˜ 쿼리 λ³΅μž‘λ„λ₯Ό 사전에 λΆ„μ„ν•˜μ—¬ κ°€μž₯ μ ν•©ν•œ 검색 μ „λž΅μ„ λ™μ μœΌλ‘œ μ„ νƒν•˜λŠ” κ³ λ„ν™”λœ RAG ν”„λ ˆμž„μ›Œν¬μž…λ‹ˆλ‹€. 1. **동적 쿼리 λΌμš°νŒ… (Dynamic Query Routing)**: * **Level 1 (λ‹¨μˆœ)**: LLM이 이미 ν•™μŠ΅ν•œ μ§€μ‹μœΌλ‘œ μΆ©λΆ„νžˆ λ‹΅λ³€ κ°€λŠ₯ν•œ 질문. 검색 없이 μ¦‰μ‹œ μ‘λ‹΅ν•˜μ—¬ μ§€μ—° μ‹œκ°„κ³Ό λΉ„μš©μ„ μ΅œμ†Œν™”ν•©λ‹ˆλ‹€. * **Level 2 (쀑간)**: 단일 λ¬Έμ„œλ‚˜ μ œν•œλœ 좜처 확인이 ν•„μš”ν•œ 질문. ν‘œμ€€ [[Retrieval-Augmented Generation (RAG)|RAG]] ν”„λ‘œμ„ΈμŠ€λ₯Ό κ°€λ™ν•©λ‹ˆλ‹€. * **Level 3 (볡작)**: μ—¬λŸ¬ λ¬Έμ„œ κ°„μ˜ ꡐ차 κ²€μ¦μ΄λ‚˜ 좔둠이 ν•„μš”ν•œ 닀쀑 홉([[Multi-hop Reasoning|Multi-hop]]) 질문. [[Agentic RAG|Agentic RAG]]λ‚˜ [[GraphRAG|GraphRAG]]λ₯Ό κ°€λ™ν•˜μ—¬ 심측 λ¦¬μ„œμΉ˜λ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€. 2. **핡심 λ©”μ»€λ‹ˆμ¦˜**: * **쿼리 λΆ„λ₯˜κΈ° (Query Classifier)**: 질문의 μ˜λ„, ꡬ체성, μ΅œμ‹ μ„± ν•„μš” μ—¬λΆ€ 등을 νŒλ‹¨ν•©λ‹ˆλ‹€. * **검색 μ „λž΅ μ΅œμ ν™”**: 맀번 같은 λ°©μ‹μœΌλ‘œ κ²€μƒ‰ν•˜λŠ” 것이 μ•„λ‹ˆλΌ, ν•„μš”μ— 따라 ν‚€μ›Œλ“œ, 벑터, λ˜λŠ” μ›Ή 검색을 μ‘°ν•©ν•©λ‹ˆλ‹€. ## βš–οΈ Trade-offs & Caveats * **λΆ„λ₯˜ 였λ₯˜μ˜ 리슀크**: 쿼리 λΆ„λ₯˜κΈ°κ°€ 질문의 λ³΅μž‘λ„λ₯Ό κ³Όμ†Œν‰κ°€ν•˜λ©΄ 검색 없이 잘λͺ»λœ λ‹΅λ³€(ν™˜κ°)을 내놓을 수 있고, κ³ΌλŒ€ν‰κ°€ν•˜λ©΄ λΆˆν•„μš”ν•œ 검색 λΉ„μš©κ³Ό μ‹œκ°„μ΄ λ°œμƒν•©λ‹ˆλ‹€. * **μ‹œμŠ€ν…œ λ³΅μž‘μ„±**: μ—¬λŸ¬ 갈래의 검색 νŒŒμ΄ν”„λΌμΈμ„ μœ μ§€ 관리해야 ν•˜λ―€λ‘œ 전체 μ•„ν‚€ν…μ²˜μ˜ λ³΅μž‘λ„κ°€ μ¦κ°€ν•©λ‹ˆλ‹€. ## πŸ’» μ‹€μ „ κ΅¬ν˜„ μ½”λ“œ (Boilerplate) 쿼리 λ³΅μž‘λ„μ— 따라 검색 μ—¬λΆ€λ₯Ό κ²°μ •ν•˜λŠ” λΌμš°ν„°μ˜ κ°œλ…μ  μ˜ˆμ‹œμž…λ‹ˆλ‹€. ```python def adaptive_rag_router(query): # 1. 쿼리 λ³΅μž‘λ„ 뢄석 (κ°„λ‹¨ν•œ μ˜ˆμ‹œ: 길이 및 νŠΉμ • ν‚€μ›Œλ“œ 기반) complexity_score = analyze_complexity(query) if complexity_score < 0.3: # LLM 직접 응닡 return llm.generate(f"지식 기반 λ‹΅λ³€: {query}") elif complexity_score < 0.7: # ν‘œμ€€ RAG 가동 context = vector_db.search(query) return llm.generate_with_context(query, context) else: # 에이전틱 λ¦¬μ„œμΉ˜ λͺ¨λ“œ 가동 return agent_engine.run_mission(query) def analyze_complexity(query): # μ‹€μ œλ‘œλŠ” μ†Œν˜• λͺ¨λΈμ΄λ‚˜ ν”„λ‘¬ν”„νŠΈλ₯Ό 톡해 νŒλ‹¨ if "λΉ„κ΅ν•΄μ€˜" in query or "λΆ„μ„ν•΄μ€˜" in query: return 0.9 return 0.2 ``` ## πŸ”— 지식 μ—°κ²° (Graph) * **기반 기술**: [[Retrieval-Augmented Generation (RAG)|RAG]], [[Semantic Search|Semantic Search]] * **고도화 λͺ¨λΈ**: [[Agentic RAG|Agentic RAG]], [[GraphRAG|GraphRAG]] * **평가 μ§€ν‘œ**: [[Cost per Query|쿼리당 λΉ„μš©]], [[Latency|μ§€μ—° μ‹œκ°„]] --- *Last updated: 2026-05-04*