LangChain 검색·검증
LangChain 검색·검증 (Retrieval)
LLM은 강력하지만 두 가지 한계가 있어요. 유한한 컨텍스트(전체 말뭉치를 한 번에 넣을 수 없음)와 고정된 지식(학습 데이터가 특정 시점에 멈춰 있음)이 바로 그것이에요. 검색(Retrieval)은 질의 시점에 관련된 외부 지식을 가져와서 이 문제를 해결해 줘요. 이것이 바로 **RAG(Retrieval-Augmented Generation)**의 기초예요.
검색 파이프라인은 컴포넌트가 모듈식이라, 로더(loader)나 스플리터, 임베딩, 벡터 스토어를 앱 로직을 다시 쓰지 않고도 교체할 수 있어요.
지식 베이스 구축하기
**지식 베이스(knowledge base)**는 검색 중에 사용되는 문서나 구조화 데이터의 저장소예요. 커스텀 지식 베이스가 필요하다면 LangChain의 문서 로더(document loaders)와 벡터 스토어(vector stores)로 직접 만들 수 있어요.
이미 SQL 데이터베이스, 문서 DB, CRM 같은 지식 베이스가 있다면 재구축할 필요는 없어요. Agentic RAG에서는 그걸 에이전트의 **도구(tool)**로 연결하거나, 검색 결과를 LLM 컨텍스트로 공급하는 방식(2-Step RAG)을 쓰면 돼요.
RAG 아키텍처
RAG는 시스템 요구사항에 따라 여러 방식으로 구현할 수 있어요.
| 아키텍처 | 설명 | 제어 | 유연성 | 지연 | 예시 |
|---|---|---|---|---|---|
| 2-Step RAG | 생성 전에 항상 검색. 단순하고 예측 가능 | 높음 | 낮음 | 빠름 | FAQ, 문서 봇 |
| Agentic RAG | LLM 에이전트가 추론 중 '언제·어떻게' 검색할지 결정 | 낮음 | 높음 | 변동 | 여러 도구를 쓰는 연구 어시스턴트 |
| Hybrid | 두 방식의 특징을 검증 단계와 결합 | 중간 | 중간 | 변동 | 품질 검증이 필요한 도메인 Q&A |
2-Step RAG
검색 단계가 항상 생성 단계보다 먼저 실행되는 구조예요. 단순하고 예측 가능해서, 관련 문서 검색이 답 생성의 명확한 전제 조건인 애플리케이션에 적합해요.
Agentic RAG
RAG와 에이전트 기반 추론을 결합한 방식이에요. 문서를 미리 검색하는 대신, LLM로 구동되는 에이전트가 단계별로 추론하면서 상호작용 중 '언제', '어떻게' 검색할지를 스스로 정해요. 에이전트가 RAG 동작을 하게 하려면 외부 지식을 가져올 수 있는 도구(문서 로더, 웹 API, DB 쿼리 등)가 하나 이상 있으면 충분해요.
import requests
from langchain.tools import tool
from langchain.chat_models import init_chat_model
from langchain.agents import create_agent
@tool
def fetch_url(url: str) -> str:
"""Fetch text content from a URL"""
response = requests.get(url, timeout=10.0)
response.raise_for_status()
return response.text
agent = create_agent(
model="claude-sonnet-4-6",
tools=[fetch_url], # 검색용 도구
system_prompt="Use fetch_url when you need to fetch information from a web-page; quote relevant snippets.",
)
Hybrid RAG
2-Step과 Agentic RAG의 특징을 합치고, 쿼리 전처리, 검색 검증, 생성 후 검사 같은 중간 단계를 추가한 방식이에요. 쿼리 향상(질의 재작성·변형·확장), 검색 검증(관련 문서가 충분한지 평가 후 필요시 재검색), 답변 검증(정확성·완전성 확인 후 재생성) 같은 컴포넌트를 포함해요.
검색 파이프라인 빌딩 블록
- 문서 로더 (Document loaders): Google Drive, Slack, Notion 등 외부 소스에서 데이터를 가져와 표준화된
Document객체로 반환 - 텍스트 스플리터 (Text splitters): 큰 문서를 개별 검색 가능한 작은 청크로 분할
- 임베딩 모델 (Embedding models): 텍스트를 숫자 벡터로 변환해 유사한 의미끼리 가까이 위치
- 벡터 스토어 (Vector stores): 임베딩 저장·검색 전용 데이터베이스
- 리트리버 (Retrievers): 구조화되지 않은 쿼리에 대해 문서를 반환하는 인터페이스
더 알아보기
- LangChain RAG 튜토리얼: 문서 로더·임베딩·벡터 스토어로 검색 가능한 지식 베이스 구축
- LangChain Tools 문서: Agentic RAG의 검색 도구 정의
- Deep Agents RAG: 쿼리 시점 청크 검색·파일시스템·서브에이전트 위임