검색

검색 (Retrieval)

대규모 언어 모델(LLM)은 강력하지만 두 가지 핵심 한계가 있습니다:

  • 유한한 컨텍스트: 전체 말뭉치를 한 번에 소화할 수 없습니다.
  • 정적 지식: 학습 데이터가 특정 시점에 고정되어 있습니다.

검색(Retrieval)은 쿼리 시점에 관련 외부 지식을 가져와 이러한 문제를 해결합니다. 이것이 **검색 증강 생성(RAG, Retrieval-Augmented Generation)**의 기초이며, 컨텍스트 특화 정보로 LLM의 답변을 향상시킵니다.

지식 베이스 구축

지식 베이스는 검색에 사용되는 문서 또는 구조화된 데이터의 저장소입니다.

커스텀 지식 베이스가 필요하다면 LangChain의 문서 로더와 벡터 스토어를 사용해 자신의 데이터로 구축할 수 있습니다.

이미 지식 베이스가 있다면(예: SQL 데이터베이스, 문서 데이터베이스, CRM, 내부 문서 시스템) 다시 구축할 **필요가 없습니다**. 다음과 같이 할 수 있습니다:
  • 에이전트의 도구로 연결해 Agentic RAG에서 사용.
  • 쿼리하고 검색된 콘텐츠를 LLM의 컨텍스트로 제공 (2-Step RAG).

자세한 내용은 검색 가능한 지식 베이스와 최소 RAG 워크플로를 구축하는 다음 튜토리얼을 참고하세요:

LangChain의 문서 로더, 임베딩, 벡터 스토어를 사용해 자신의 데이터로 검색 가능한 지식 베이스를 만드는 방법을 배워보세요. 이 튜토리얼에서는 PDF에 대한 검색 엔진을 구축하고, 쿼리와 관련된 구절을 검색할 수 있게 합니다. 또한 이 엔진 위에 최소 RAG 워크플로를 구현하여 외부 지식을 LLM 추론에 어떻게 통합할 수 있는지 확인합니다.

검색에서 RAG로

검색은 LLM이 런타임에 관련 컨텍스트에 접근할 수 있게 합니다. 그러나 대부분의 실제 애플리케이션은 한 단계 더 나아가 검색을 생성과 통합하여 근거 기반의 컨텍스트 인지형 답변을 만듭니다.

이것이 **검색 증강 생성(RAG)**의 핵심 아이디어입니다. 검색 파이프라인은 검색과 생성을 결합하는 더 넓은 시스템의 기반이 됩니다.

검색 파이프라인

전형적인 검색 워크플로는 다음과 같습니다:

flowchart TB
  subgraph ingest[" "]
    direction LR
    S(["Sources (Google Drive, Slack, Notion, etc.)"]) --> L[Document Loaders]
    L --> A([Documents])
  end
  A --> B[Split into chunks]
  B --> C[Turn into embeddings]
  C --> D[(Vector Store)]
  Q([User Query]) --> E[Query embedding]
  E --> D
  D --> F[Retriever]
  F --> G[LLM uses retrieved info]
  G --> H([Answer])

각 구성 요소는 모듈식이라 앱 로직을 다시 작성하지 않고도 로더, 스플리터, 임베딩, 벡터 스토어를 교체할 수 있습니다.

구성 요소

외부 소스(Google Drive, Slack, Notion 등)에서 데이터를 수집하고, 표준화된 [`Document`](https://reference.langchain.com/javascript/langchain-core/documents/Document) 객체를 반환합니다. 임베딩 모델은 텍스트를 숫자 벡터로 변환하여 비슷한 의미의 텍스트가 벡터 공간에서 가깝게 위치하도록 합니다. 임베딩을 저장하고 검색하기 위한 특화된 데이터베이스. 리트리버는 구조화되지 않은 쿼리에 대해 문서를 반환하는 인터페이스입니다.

RAG 아키텍처

RAG는 시스템의 요구에 따라 여러 방식으로 구현할 수 있습니다. 아래 섹션에서 각 유형을 설명합니다.

아키텍처 설명 제어 유연성 지연 시간 예시 사용 사례
2-Step RAG 생성 전에 항상 검색이 발생. 단순하고 예측 가능 ✅ 높음 ❌ 낮음 ⚡ 빠름 FAQ, 문서화 봇
Agentic RAG LLM 기반 에이전트가 추론 중 언제, 어떻게 검색할지 결정 ❌ 낮음 ✅ 높음 ⏳ 가변적 여러 도구에 접근하는 리서치 어시스턴트
하이브리드 검증 단계와 함께 두 접근 방식의 특성을 결합 ⚖️ 중간 ⚖️ 중간 ⏳ 가변적 품질 검증이 있는 도메인 특화 Q&A
**지연 시간**: 지연 시간은 일반적으로 **2-Step RAG**에서 더 **예측 가능**합니다. 최대 LLM 호출 횟수가 알려져 있고 상한이 있기 때문입니다. 이러한 예측 가능성은 LLM 추론 시간이 지배적 요소라고 가정합니다. 그러나 실제 지연 시간은 API 응답 시간, 네트워크 지연, 데이터베이스 쿼리 같은 검색 단계 성능의 영향을 받을 수 있으며, 이는 사용 중인 도구와 인프라에 따라 달라질 수 있습니다.

2-step RAG

2-Step RAG에서는 검색 단계가 항상 생성 단계 전에 실행됩니다. 이 아키텍처는 직관적이고 예측 가능하여, 관련 문서의 검색이 답변 생성의 명확한 전제 조건인 많은 애플리케이션에 적합합니다.

graph TB
    A[User Question] --> B["Retrieve Relevant Documents"]
    B --> C["Generate Answer"]
    C --> D[Return Answer to User]
문서 로더, 임베딩, 벡터 스토어로 검색 가능한 지식 베이스를 구축한 다음, 그 위에 검색 후 생성하는(retrieve-then-generate) RAG 워크플로를 실행하세요. 단순한 검색 후 생성(retrieve-then-generate) RAG 앱을 만들고 LangSmith로 답변 정확도, 관련성, 근거 기반성, 검색 품질을 측정하세요.

Agentic RAG

**Agentic RAG(에이전트 기반 검색 증강 생성)**는 검색 증강 생성의 강점을 에이전트 기반 추론과 결합합니다. 답하기 전에 문서를 검색하는 대신, (LLM이 지원하는) 에이전트가 단계별로 추론하며 상호작용 중 언제, 어떻게 정보를 검색할지 결정합니다.

에이전트가 RAG 동작을 활성화하기 위해 필요한 유일한 것은 외부 지식을 가져올 수 있는 **도구** 하나 이상에 접근하는 것입니다 (예: 문서 로더, 웹 API, 데이터베이스 쿼리).
graph TB
    A[User Input / Question] --> B["Agent (LLM)"]
    B --> C{Need external info?}
    C -- Yes --> D["Search using tool(s)"]
    D --> H{Enough to answer?}
    H -- No --> B
    H -- Yes --> I[Generate final answer]
    C -- No --> I
    I --> J[Return to user]
import { tool, createAgent } from "langchain";

const fetchUrl = tool(
    (url: string) => {
        return `Fetched content from ${url}`;
    },
    { name: "fetch_url", description: "Fetch text content from a URL" }
);

const agent = createAgent({
    model: "claude-sonnet-4-6",
    tools: [fetchUrl],
    systemPrompt,
});

하이브리드 RAG

하이브리드 RAG는 2-Step RAG와 Agentic RAG의 특성을 결합합니다. 쿼리 전처리, 검색 검증, 생성 후 검사 같은 중간 단계를 도입합니다. 이러한 시스템은 고정된 파이프라인보다 더 많은 유연성을 제공하면서도 실행에 대한 일부 제어를 유지합니다.

일반적인 구성 요소는 다음과 같습니다:

  • 쿼리 향상: 검색 품질을 높이기 위해 입력 질문을 수정합니다. 불명확한 쿼리 재작성, 여러 변형 생성, 추가 컨텍스트로 쿼리 확장이 포함될 수 있습니다.
  • 검색 검증: 검색된 문서가 관련성 있고 충분한지 평가합니다. 그렇지 않으면 시스템이 쿼리를 개선하고 다시 검색합니다.
  • 답변 검증: 생성된 답변의 정확성, 완전성, 소스 콘텐츠와의 정렬을 확인합니다. 필요하면 시스템이 답변을 다시 생성하거나 수정할 수 있습니다.

이 아키텍처는 종종 이러한 단계 사이의 여러 반복을 지원합니다:

graph TB
    A[User Question] --> B[Query Enhancement]
    B --> C[Retrieve Documents]
    C --> D{Sufficient Info?}
    D -- No --> E[Refine Query]
    E --> C
    D -- Yes --> F[Generate Answer]
    F --> G{Answer Quality OK?}
    G -- No --> H{Try Different Approach?}
    H -- Yes --> E
    H -- No --> I[Return Best Answer]
    G -- Yes --> I
    I --> J[Return to User]

이 아키텍처는 다음과 같은 경우에 적합합니다:

  • 모호하거나 불충분하게 지정된 쿼리가 있는 애플리케이션
  • 검증 또는 품질 관리 단계가 필요한 시스템
  • 여러 소스나 반복적 개선이 포함된 워크플로
에이전트 추론과 검색 및 자체 수정을 결합한 **하이브리드 RAG**의 예시.

더 알아보기

출처: 문서