최근 Teddy님의 Langchain 특강에 참여하여 RAG(Retrieval-Augmented Generation) 시스템을 개선하고, 최근 주목받는 Agentic 시스템을 구축하는 다양한 기법들에 대해 깊이 있게 배울 수 있었습니다. 특강 시작에서 강조되었던 것처럼, LLM과 RAG 분야에는 새롭고 흥미로운(Fency) 기술들이 끊임없이 등장하지만, 가장 중요한 것은 실제 문제와 환경에 맞는 기술을 신중하게 선택하고 적용하는 것이라는 점이 인상 깊었습니다. 무조건 최신 기술을 따르기보다, 각 방법론의 장단점을 이해하고 상황에 맞게 활용하는 지혜가 필요합니다.

이번 글에서는 특강에서 다루었던 내용 중 RAG 시스템 개선 전략과 AI Agent 개념을 중심으로, 초안의 내용을 보강하고 좀 더 자세하게 정리하고자 합니다. 기본적인 Naive RAG에 대한 이해가 있다고 가정하고 글을 작성하였습니다.

RAG 시스템 성능 향상을 위한 전략들

Naive RAG 시스템은 많은 경우 준수한 성능을 보이지만, 복잡한 질문에 답하거나 대규모 문서를 다룰 때, 또는 Multi-hop 질문과 같이 여러 정보 조각을 종합해야 할 때 한계에 부딪힐 수 있습니다. 특강에서는 이러한 한계를 극복하고 RAG 시스템의 성능을 한 단계 끌어올리기 위한 다양한 전략들이 소개되었습니다.

1. Metadata의 적극적인 활용: 정보의 맥락을 더하다

단순히 문서 내용만 임베딩하는 것을 넘어, 문서가 가진 부가 정보인 Metadata를 활용하면 검색의 효율성과 정확성을 크게 높일 수 있습니다.

  • SelfQueryRetriever 활용: 문서의 작성 연도, 출처, 카테고리, 도메인 등의 Metadata를 필터링 조건으로 사용하여 검색 대상 문서의 범위를 효과적으로 좁힐 수 있습니다. 이는 관련 없는 정보 탐색에 드는 비용을 줄여 검색 속도를 높이고, 결과적으로 LLM이 더 관련성 높은 정보에 집중하여 정확한 답변을 생성하도록 돕습니다. 예를 들어, “2023년에 ‘기술 블로그’ 출처에서 ‘Langchain’ 도메인 관련 내용을 찾아줘”와 같이 구체적인 요구사항 처리가 가능해집니다.
  • 추상적인 질문 대응 (Summary Chunks & Shared IDs): 여러 Chunk에 걸쳐 설명되는 개념이나 주제에 대한 추상적인 질문(예: “Langchain의 핵심 기능은 무엇인가?”)에 답하기 위해, 관련된 Chunk들을 요약한 별도의 ‘Summary Chunk’를 생성할 수 있습니다. 이때 원본 Chunk들과 Summary Chunk 간의 관계를 Metadata(예: shared_ids 필드 활용)로 명시적으로 연결하여 관리하면, 요약 정보 검색 시 관련 원본 Chunk들을 함께 참조하여 답변의 깊이를 더할 수 있습니다.

2. 계층적 구조 (Hierarchical Structure) 설계: 정보의 숲과 나무를 함께 보다

질문이 단일 정보 조각이 아닌, 여러 문서나 정보 조각을 종합적으로 이해해야 답변할 수 있는 Multi-hop 문제일 경우, Naive RAG는 관련된 모든 정보를 효과적으로 찾아 종합하기 어렵습니다.

  • Summary Chunk 활용: 앞서 언급한 Metadata 활용 방식처럼, 관련된 여러 Chunk를 요약한 상위 레벨의 Summary Chunk를 먼저 검색하고, 필요에 따라 하위 레벨의 상세 Chunk로 드릴다운하는 계층적 구조가 효과적입니다. 이는 정보의 전체적인 맥락(숲)과 세부 내용(나무)을 함께 파악하는 데 도움을 줍니다.
  • RAPTOR (Recursive Abstractive Processing for Tree-Organized Retrieval): 관련성이 높은 Chunk들을 군집화 알고리즘을 통해 트리 구조로 묶어 처리하는 RAPTOR와 같은 연구도 있습니다. 문서 내용이 자주 변경되지 않는 환경(예: 법률 문서, 연구 논문 아카이브)에서는 Multi-hop 질문에 대한 정확도를 높이는 강력한 대안이 될 수 있습니다. 하지만, 새로운 문서가 추가될 때마다 군집화 및 트리 구조 재구축에 상당한 연산 비용이 발생하므로, 문서 업데이트 빈도가 높은 환경에서는 적용이 어려울 수 있다는 장단점을 고려해야 합니다.

3. 효과적인 Chunking 전략: 정보를 의미있게 나누다

문서를 어떻게 나누느냐(Chunking)는 검색될 정보의 단위와 직접적으로 연결되므로 RAG 성능에 큰 영향을 미칩니다. 고정된 크기나 규칙 기반 Chunking 외에 다음과 같은 전략들을 고려할 수 있습니다.

  • Semantic Chunking: 고정된 글자 수나 문장 개수가 아닌, 문맥적 의미의 유사성을 기준으로 문단을 나누어 Chunk를 구성합니다. 각 Chunk가 하나의 완결된 의미 단위를 가지므로 문맥 이해도를 높일 수 있습니다. 하지만, 의미 분석을 위한 추가적인 임베딩 모델 연산 등이 필요하여 Vector DB 구축 비용이 증가할 수 있으며, 문서 업데이트 시 재처리 비용도 고려해야 합니다.
  • Small-to-Big: 작은(Small) Chunk를 먼저 임베딩하여 검색 효율성을 높이고, 검색된 작은 Chunk와 관련된 더 큰(Big) 문맥 단위(예: 해당 Chunk가 포함된 전체 문단 또는 페이지)를 함께 LLM에 전달하여 답변 생성 시 충분한 컨텍스트를 제공하는 방식입니다. 검색 속도와 답변 품질 사이의 균형을 맞추는 실용적인 접근법입니다.
  • Sentence Window: Small-to-Big과 유사하게, 검색된 핵심 문장(Chunk)의 앞뒤 N개 문장(pre-Sentences, post-Sentences)을 함께 활용하여 지역적인 문맥(Local Context)을 보강하는 방식입니다. 구현이 비교적 간단하면서도 문맥 이해도를 효과적으로 높일 수 있습니다.

4. 검색 전후 처리 (Retrieval Pre/Post Processing): 질문과 결과를 다듬다

사용자의 질문 자체를 개선하거나, 검색된 결과의 품질을 높이는 후처리 과정을 통해 RAG 시스템의 최종 성능을 향상시킬 수 있습니다.

  • 질문 재정의 (Query Pre-processing): 사용자의 질문이 모호하거나 정보가 부족할 경우, LLM이 검색을 더 잘 수행할 수 있도록 질문을 변형합니다.
    • Query Rewrite: 질문의 핵심 의도는 유지하면서, LLM이 이해하기 쉽고 검색에 유리하도록 더 명확하고 상세한 형태로 재작성합니다. (예: “RAG 알려줘” -> “Retrieval-Augmented Generation (RAG)의 개념과 작동 방식에 대해 설명해줘”)
    • Query Expansion: 질문과 관련된 동의어, 유의어, 관련 키워드 등을 추가하여 검색 범위를 확장하고 관련 문서를 놓치지 않도록 합니다. (예: “Langchain Agent” -> “Langchain Agent OR Langchain Tool OR Langchain ReAct”)
    • Query Transformation: 질문을 특정 구조나 형식(예: 가상의 이상적인 답변 문서를 생성하고 이를 임베딩하여 검색하는 HyDE - Hypothetical Document Embeddings)으로 변형하여 임베딩 공간에서 관련 문서를 더 효과적으로 찾도록 돕습니다.
  • 검색 결과 후처리 (Retrieved Document Post-processing): 초기 검색(Retrieval) 단계에서 찾아낸 여러 Chunk들 중에서 최종 답변 생성에 사용할 최적의 Chunk를 선별하고 정제합니다. 초기 검색 결과에는 관련성이 낮거나 중복되는 정보가 포함될 수 있기 때문입니다.
    • Reranker: 검색된 상위 K개의 Chunk들을 별도의 경량 모델(주로 질문과 문서를 함께 입력받아 관련성을 정밀하게 평가하는 Cross-encoder 모델)을 사용하여 질문과의 실제 관련성을 다시 평가하고 순위를 재조정합니다. 이를 통해 가장 관련성 높은 Chunk를 LLM에 우선적으로 전달할 수 있습니다.
    • Compressor: 검색된 Chunk들 중에서 관련성이 낮거나 중복되는 내용을 필터링하거나, 중요한 정보만 남기고 요약하여 LLM에 전달할 컨텍스트의 양을 최적화합니다. 작은 LLM 모델을 활용하여 각 Chunk의 핵심 내용을 추출하거나 요약하는 방식도 가능합니다.

AI Agent: 도구를 사용하는 지능형 조력자

최근 AI 분야의 가장 뜨거운 화두 중 하나인 Agent는 LLM이 단순히 주어진 정보에 기반하여 텍스트를 생성하는 것을 넘어, 주어진 목표를 달성하기 위해 스스로 추론하고, 계획을 세우며, 필요한 도구(Tool, API, Function)를 자율적으로 사용하고, 그 실행 결과를 바탕으로 다음 행동을 결정하는 보다 능동적인 시스템을 의미합니다. 마치 지능을 가진 조력자처럼 복잡한 작업을 수행할 수 있습니다.

  • 기본 Agent 시스템 (Single Agent): LLM에게 특정 기능을 수행할 수 있는 Tool(예: 웹 검색 API, 계산기 함수, 데이터베이스 조회 기능) 목록을 제공하고, 사용자의 요청을 분석하여 어떤 Tool을 어떤 입력값으로 호출해야 할지 스스로 판단하고 실행하여 결과를 얻는 방식입니다. Langchain의 ReAct (Reasoning + Acting) 프레임워크가 대표적입니다.
  • Multi-Agent 시스템: 여러 명의 전문가가 협력하여 복잡한 문제를 해결하듯, 각기 다른 역할(Persona), 전문성, 목표를 가진 여러 Agent들이 정해진 규칙(Rule)에 따라 상호작용하며 공동의 목표를 달성하는 시스템입니다. Agent 간의 상호작용 방식에 따라 다양하게 구현될 수 있습니다.
    • 협업 기반 (Collaborative): 주어진 문제를 해결하기 위해 각자의 전문성을 가진 Agent들이 서로 정보를 교환하고 협력하여 최적의 솔루션을 도출합니다. 예를 들어, 사용자 요청 분석 Agent, 정보 검색 Agent, 코드 생성 Agent, 최종 보고서 작성 Agent 등이 순차적 또는 병렬적으로 협업하는 구조입니다. 가장 일반적인 Multi-Agent 시스템 형태입니다.
    • 적대적 기반 (Adversarial): 특정 Agent가 생성한 결과물(예: 코드, 글쓰기 초안)의 품질을 높이기 위해, 다른 Agent(Critique Agent)가 미리 정의된 기준(예: 코드 스타일 가이드, 논리적 오류 검사)에 따라 비판하고 피드백을 제공하는 방식입니다. 또는, 특정 주제에 대해 서로 다른 입장이나 관점을 가진 Agent들이 토론(Debate)을 벌이며 다양한 측면을 탐색하고 균형 잡힌 결론을 도출하도록 유도할 수도 있습니다. 이를 통해 결과물의 완성도를 높이거나, 특정 시나리오에 대한 심층적인 시뮬레이션이 가능해집니다.

Agent vs Workflow: 자율성과 안정성 사이의 균형점

Agent 시스템은 놀라운 자율성과 문제 해결 능력을 보여주지만, LLM의 확률적인 특성상 때로는 예측 불가능한 행동을 하거나 잘못된 Tool 사용, 환각(Hallucination) 등의 문제를 일으킬 수 있습니다. 특히 복잡한 Multi-Agent 시스템은 디버깅과 제어가 어려울 수 있습니다.

반면, 명확하게 정의된 단계와 규칙에 따라 작업을 처리하는 Workflow (또는 Chain) 방식은 Agent보다는 유연성이 떨어질 수 있지만, 작동 방식을 예측하고 제어하기 용이하며, 일관되고 안정적인 결과를 얻을 수 있다는 장점이 있습니다.

현재 많은 실제 서비스에서는 안정성과 예측 가능성이 중요한 경우가 많아, 잘 정의된 Workflow 기반의 접근 방식이 더 선호될 수 있습니다. 하지만 특정 작업의 유연성과 자율성이 중요하다면 Agent를 도입하거나, 안정성이 중요한 부분은 Workflow로 구성하고 특정 단계에서만 Agent를 활용하는 하이브리드 방식을 통해 두 접근법의 장점을 모두 취하는 것도 현명한 전략이 될 수 있습니다. 특강에서는 Agent에 대한 높은 관심 속에서도, 안정적이고 효율적인 시스템 구축을 위해 Workflow의 중요성을 간과해서는 안 된다는 점을 강조했습니다.

🐝 추가 꿀팁: 안전한 서비스 구축을 위한 노력

특강에서 공유된 유용한 정보 중 하나로, 사용자 개인 정보와 같은 민감 데이터를 처리해야 하는 경우, 정부나 공공기관에서 무료로 제공하는 데이터 비식별화 API 등을 활용하는 것을 적극 고려해볼 수 있습니다. 이를 통해 개인정보보호 규정을 준수하면서도 안전하게 데이터를 활용하고 서비스를 구축하는 데 큰 도움이 될 것입니다.


이번 러너톤 Langchain 특강은 RAG 시스템의 성능을 극한으로 끌어올리는 다양한 최신 기법들과 미래 AI 시스템의 핵심 동력이 될 Agent 개념 및 구현 방식에 대해 깊이 있게 이해하고 고민해볼 수 있는 매우 유익한 시간이었습니다. 단순히 여러 기술을 나열하는 것을 넘어, 각 기술의 핵심 원리, 장단점, 그리고 어떤 상황에서 어떤 기술을 선택해야 하는지에 대한 실용적인 가이드라인을 얻을 수 있었습니다.