Q1. LangChain을 사용해 RAG 시스템을 구축할 때 어떤 주요 구성 요소들이 필요하고, 각각 어떤 역할을 하나요?
A1. 문서 로더로 데이터를 가져오고, 텍스트 분할기로 잘게 나눈다. 이를 벡터 저장소에 임베딩하여 저장한다. 검색기는 질문과 유사한 문서를 찾아주고, 체인은 찾은 문서와 질문을 LLM에 넘겨 답변을 생성한다
Q2. RAG 시스템의 성능을 평가하는 방법에는 어떤 것들이 있고, 독립 평가와 종단간 평가의 차이는 무엇인가요?
A2. 크게 독립 평가와 종단간 평가로 나뉜다. 독립 평가는 각 검색 및 생성 성능을 평가하여 문제점 파악에 좋다. 종단간 평가는 시스템 전체의 최종 답변 품질을 평가하며 사용자 경험 관점에서 유용하다.
Q3. RAG 시스템에서 'Agent'는 어떤 개념인지, 어떻게 구현할 수 있는지 구글 등에서 리서치하여 정리해보세요.
A3. Agent는 LLM이 웹 검색 도구나 계산기 도구 등을 활용해 다단계 추론을 할 수 있게 돕는다. LangChain에서는 LLM, Tools, AgentType을 정의하여 사용한다.
LangChain을 사용해 RAG 시스템을 구축할 때는 몇 가지 핵심 구성 요소들이 필요합니다. 각각의 구성 요소는 시스템 내에서 중요한 역할을 하며, 서로 유기적으로 연결되어 작동합니다.
첫 번째로 필요한 건 문서 로더(Document Loader)입니다. 이는 외부에서 정보를 가져오는 역할을 합니다. 예를 들어 PDF, 웹페이지, 텍스트 파일, 데이터베이스 등 다양한 소스에서 문서를 읽어들여 시스템이 활용할 수 있는 형태로 변환합니다.
다음은 텍스트 분할기(Text Splitter)입니다. 로딩된 문서가 너무 길면 검색 효율이 떨어지기 때문에, 문서를 일정 길이로 나누는 작업이 필요합니다. 이 과정을 통해 각 문서 조각이 임베딩과 검색에 적합한 형태가 됩니다.
그다음은 임베딩 모델(Embedding Model)입니다. 문서 조각이나 사용자 질문을 숫자 벡터로 변환하는 역할을 하며, 이를 통해 문서 간 의미적 유사도를 계산할 수 있게 됩니다. OpenAI, Cohere, Hugging Face 모델 등 다양한 임베딩 옵션을 사용할 수 있습니다.
변환된 벡터는 벡터 데이터베이스(Vector Store)에 저장됩니다. 이 데이터베이스는 나중에 사용자 질문이 들어왔을 때, 가장 관련 있는 문서들을 빠르게 검색하는 역할을 합니다. 대표적으로 FAISS, Pinecone, Weaviate 같은 솔루션이 많이 사용됩니다.
이제 검색된 문서 조각들을 바탕으로, 프롬프트 템플릿(Prompt Template)이 작동합니다. 사용자의 질문과 관련 문서를 조합해 생성 모델에 전달할 수 있는 입력 문장을 구성하는 단계입니다. 이 프롬프트가 얼마나 잘 구성되느냐에 따라 생성 결과의 품질이 달라질 수 있습니다.
마지막으로 LLM(Language Model), 즉 생성기 역할을 하는 모델이 사용자의 질문과 관련 문서를 기반으로 응답을 생성합니다. 이 과정을 Chain 또는 Agent 형태로 구성하여, 전체 RAG 파이프라인이 일관되게 작동하도록 만들 수 있습니다.
정리하면, LangChain을 활용한 RAG 시스템에서는 문서 로딩, 텍스트 분할, 임베딩, 벡터 저장소, 프롬프트 구성, LLM 응답 생성까지 일련의 흐름이 필요하고, 각각의 구성 요소가 자연스럽게 연결되어야 완성도 높은 응답을 생성할 수 있습니다.
RAG 시스템의 성능을 평가할 때는 검색(Retrieval)과 생성(Generation)이라는 두 가지 주요 단계에 대해 각각 또는 전체적으로 성능을 측정해야 합니다. 이때 평가 방식은 크게 독립 평가(모듈별 평가)와 종단간 평가(End-to-End 평가)로 나눌 수 있습니다.
먼저 독립 평가는 각 구성 요소의 성능을 분리해서 개별적으로 평가하는 방식입니다. 예를 들어 검색기의 성능은 주어진 질문에 대해 얼마나 관련 있는 문서를 찾아냈는지를 기준으로 평가하며, 대표적으로 Precision@k, Recall@k, MRR(Mean Reciprocal Rank) 같은 검색 기반 지표가 사용됩니다. 생성기 부분은 입력된 문서 기반으로 모델이 얼마나 자연스럽고 정확한 응답을 생성했는지, BLEU, ROUGE, METEOR, BERTScore 등의 자연어 생성 품질 지표로 측정할 수 있습니다.
반면 종단간 평가는 검색과 생성 과정을 통합해 전체 시스템이 사용자 질의에 대해 얼마나 잘 응답하는지를 측정하는 방식입니다. 여기서는 정답 일치율(Exact Match), 응답의 유용성, 사실성, 일관성 등을 평가하게 되며, 사람 평가(Human Evaluation)를 함께 병행하는 경우도 많습니다. 또한 최근에는 Faithfulness Score, Groundedness Score 같은 RAG 특화 평가 기준도 사용됩니다.
독립 평가는 시스템 내부의 병목이나 약점을 파악하는 데 유용하고, 종단간 평가는 사용자의 실제 경험에 더 가까운 평가 방식입니다. 두 방식은 서로 보완적이며, RAG 시스템을 고도화하기 위해서는 둘 다 적절히 활용하는 것이 중요합니다.
RAG 시스템에서 'Agent'는 단순히 질문에 대한 검색과 답변 생성만 수행하는 고정된 흐름이 아니라, 질문을 이해하고 상황에 따라 필요한 행동을 스스로 결정하며 여러 단계를 유연하게 수행할 수 있는 실행 주체입니다.
예를 들어, 일반적인 RAG 시스템은 사용자의 질문을 받으면 관련 문서를 검색하고, 그 내용을 바탕으로 답변을 생성하는 정해진 구조를 따릅니다. 하지만 어떤 질문은 단순하지 않고, 질문을 쪼개거나, 여러 정보를 종합하거나, 추가적인 판단이 필요한 경우가 많습니다. 이럴 때 Agent는 질문의 목적을 이해하고, 어떤 도구를 언제 사용해야 할지 스스로 판단하며, 검색 → 요약 → 비교 → 응답 생성 같은 복합적인 과정을 순차적으로 수행할 수 있습니다.
Agent는 일종의 '지능형 문제 해결자'라고 보면 됩니다. LLM을 기반으로 하고, 다양한 도구와 상호작용하면서 복잡한 태스크를 해결하는 구조죠.
Agent를 구현하려면 다음과 같은 요소가 필요합니다.
첫째, 언어 모델(LLM)이 핵심입니다. Agent는 LLM을 기반으로 사용자의 질문을 분석하고 다음 행동을 결정합니다.
둘째, Tool 또는 Function이 필요합니다. 예를 들어 검색기, 계산기, 데이터베이스 조회기, 요약기 같은 기능이 대표적입니다. Agent는 이 도구들을 상황에 따라 호출해서 결과를 얻고, 다시 다음 행동으로 이어갑니다.
셋째, 메모리(Memory) 기능이 있다면 더 유용합니다. 이전 질문이나 중간 결과를 기억하고 활용할 수 있어 더 자연스럽고 일관성 있는 작업이 가능해집니다.
LangChain 같은 프레임워크에서는 Agent를 구현하는 기능을 기본적으로 지원합니다. initialize_agent 함수로 LLM과 사용할 도구들을 등록하고, 어떤 스타일의 Agent를 사용할지 정의하면 됩니다. 예를 들어, 검색기와 요약기를 도구로 등록해 두면, Agent가 사용자의 질문에 따라 먼저 검색을 하고, 그 결과를 요약한 뒤 최종 응답을 만드는 식으로 자동으로 동작하게 만들 수 있습니다.
정리하면, RAG 시스템에서 Agent는 단순한 검색-생성 구조를 넘어서 질문을 해석하고, 적절한 전략을 스스로 선택하며, 필요한 작업을 단계적으로 수행할 수 있는 유연한 실행 엔진이라고 할 수 있습니다. Agent가 들어가면 RAG 시스템은 훨씬 더 복잡한 질의에도 유연하게 대응할 수 있습니다.