LlamaIndex로 고급 검색 증강 생성(RAG) 앱 구축하기
소개
최근 Zilliz(샌프란시스코)가 주최한 Unstructured Data Meetup에서 LlamaIndex의 개발자 관계 VP인 Laurie Voss는 "Building Advanced RAG Apps with LlamaIndex"라는 주제로 발표를 진행했습니다. 그는 LlamaIndex를 사용해 Retrieval Augmented Generation (RAG) 프레임워크를 더 단순하고 프로덕션에 적합하게 만드는 방법에 대한 지식을 공유했습니다.
RAG의 개념을 살펴보고 LlamaIndex 🦙가 RAG 앱 개발을 어떻게 지원하는지 알아보겠습니다. LlamaIndex(이전 명칭 GPTIndex)에 대한 간단한 배경을 설명하자면, 초기 작업의 상당 부분은 OpenAI와 같은 강력한 비공개 소스 기술로 이루어졌습니다. 그러나 오픈 소스 모델들이 따라잡기 시작하면서, 이들은 오픈 소스 대안들과 통합하기 시작했습니다. LLM, embedding models, 또는 re-ranking 기술이든, 이제 사용자가 자신의 데이터를 활용해 RAG 애플리케이션을 구축할 수 있도록 다양한 옵션을 제공합니다.
Retrieval Augmented Generation (RAG)이란 무엇인가요?
체계적인 RAG 워크플로
RAG는 LLM에 검색 기능을 지원함으로써 LLM의 한계를 극복하도록 설계된 프레임워크입니다. LLM의 주요 단점은 컨텍스트 창이 제한되어 있으며, 조직 데이터의 일부만 동시에 처리할 수 있다는 점입니다(한 번에 백만 토큰을 넘지 않음). RAG는 가장 관련성 높은 텍스트/데이터만 선택적으로 검색하여 가장 정확한 응답을 제공함으로써 이 문제를 해결합니다.
RAG의 주요 이점:
정확성: 구현된 검색 방법으로 관련성 있고 간결한 데이터를 검색해 LLM에 전달하면 정확한 응답을 보장할 수 있습니다.
최신성: 일부 사람들은 왜 기업들이 자신들의 데이터를 사용해 LLM을 학습시키지 않는지 의문을 가질 수 있습니다. 파인튜닝의 어려움은 LLM을 어떤 환경에든 로드하는 것, 특히 고품질 LLM의 경우 이미 비용이 많이 든다는 점입니다. 반면, Retrieval-augmented Generation (RAG)은 실시간 데이터 업데이트를 쉽게 가능하게 합니다. 따라서 RAG는 대형 사설 로펌이나 산업 기업에서 볼 수 있는 동적 데이터 환경에 실용적인 솔루션이 됩니다.
출처 추적: RAG는 정보의 세부 출처를 추적할 수 있으며, 이는 검증 가능한 데이터가 필요한 애플리케이션에 매우 중요합니다.
쉽게 설명하자면, 어릴 때 풀었던 독해 시험을 기억하시나요? RAG는 그것과 매우 비슷합니다. 검색된 텍스트 조각들이 독해 지문 역할을 하며, 아이(LLM)는 이를 바탕으로 질문에 답해야 합니다. 그만큼 간단합니다 ;-)
고급 RAG 기법
정보 검색에는 두 가지 기법이 널리 사용됩니다.
키워드 검색: 전통적인 키워드 검색 방법은 특정 용어를 기반으로 데이터를 검색하는 데 여전히 효과적입니다.
Vector Search(가장 강력함), 벡터 유사도 검색이라고도 함: 벡터 검색은 단어를 벡터라고 불리는 숫자 목록으로 변환하는 것이라고 생각하면 됩니다. 이 벡터들은 각 단어 의미의 핵심을 포착합니다. 우리는 이러한 벡터를 수치적 근접성(주로 cosine similarity 또는 dot product로 측정)에 따라 비교하여 유사한 단어를 찾을 수 있습니다. 벡터 검색은 데이터를 훨씬 더 효과적이고 안정적으로 검색할 수 있도록 도와줍니다. 벡터 검색을 수행하면 LLM은 쿼리에 답하기 위해 가장 관련성 높은 텍스트에 접근할 수 있습니다.
검색 엔진은 RAG 시스템에서 다양한 소스로부터 문서를 검색하는 데 사용되며, 관련 정보 검색을 향상시키고 AI 도구의 전반적인 응답성을 개선합니다.
벡터 검색을 생각할 때는 Oxford Dictionary를 떠올려 보세요. 다만 단어를 의미별로 묶는 대신 글자 시퀀스별로 묶는 것입니다. vector embedding 모델도 차원상에서 같은 일을 합니다.
벡터 검색을 사용한 용어의 차원 및 Semantic 그룹화
또한 Milvus와 같은 오픈 소스 Vector Databases를 사용하면 Vector Stores를 무료로 설정할 수 있습니다! 여기에서 확인해 보세요.
LlamaIndex: RAG 구현 간소화
LlamaIndex는 데이터를 LLM에 연결하는 오픈 소스 프레임워크로, Python 및 TypeScript에서 사용할 수 있습니다. RAG 애플리케이션 생성을 단순화하여 개발자가 최소한의 코드로 기능적인 RAG 시스템을 구축할 수 있게 해줍니다. LlamaIndex 덕분에 기본 RAG 기능을 구현하는 데는 Python 코드 다섯 줄만 있으면 됩니다.
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader("data").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
LlamaIndex를 활용한 데이터 수집 및 쿼리용 고급 RAG 기능
LlamaIndex는 또한 RAG 애플리케이션을 위한 다양한 고급 데이터 수집 및 쿼리 기능을 제공합니다.
수집
데이터 커넥터: LlamaIndex의 LlamaHub는 Google Drive, Notion, Slack, 그리고 Postgres 및 MongoDB와 같은 데이터베이스를 포함한 다양한 데이터 소스용 커넥터를 제공합니다.
PDF 파싱: LlamaIndex는 고급 PDF 파싱 기능을 제공하여 복잡한 PDF를 Markdown으로 변환함으로써 LLM이 더 잘 이해할 수 있게 합니다. 이는 LLM이 대규모 Markdown 데이터로 학습되기 때문입니다.
임베딩 모델: LlamaIndex는 다양한 오픈 소스 및 클로즈드 소스 임베딩 모델을 지원하여 도메인에 따라 맞춤화할 수 있게 합니다.
Vector Stores: LlamaIndex는 효율적인 저장 및 검색을 위해 Milvus 및 Zilliz Cloud,를 포함한 여러 벡터 데이터베이스와 통합되며, 이 역시 오픈 소스와 클로즈드 소스를 모두 포함합니다.
쿼리
- 하위 질문 쿼리 엔진
여러 개의 단순한 쿼리가 필요한 복잡한 질문의 경우, 하위 질문 쿼리 엔진은 메인 쿼리를 더 작은 부분으로 나누고, 서로 다른 소스에서 답변을 검색한 뒤, 이를 하나의 응답으로 결합합니다.
더 나은 검색을 위한 쿼리 분해
더 나은 검색을 위한 쿼리 분해
개별 응답 수집
개별 응답 수집
최종 컴파일된 응답
최종 컴파일된 응답
여기에서 코드를 확인하세요.
- Small to Big Retrieval
이 방법론은 매우 작은 텍스트 조각(사용자 쿼리와 매우 관련성이 높고 관련될 가능성이 큰 문장)을 벡터로 임베딩하고, 해당 문장을 기준으로 위아래 양쪽의 벡터 윈도우를 검색하는 것을 포함합니다.
Small to Big Retrieval 방법론 시각화
Small to Big Retrieval 방법론 시각화
실제 구현
실제 구현
여기에서 코드를 확인하세요.
문서에 메타데이터(예: 연도, 사용자, 회사, 키워드)를 아래 예시처럼 미리 태그하면 더 정밀한 필터링과 검색이 가능해져 LLM 응답의 정확성이 향상됩니다. 이 기능은 키워드 검색에 도움이 될 수 있습니다. 메타데이터를 텍스트의 사용자 지정 속성처럼 생각해 보세요.
티셔츠 광고
티셔츠 광고
키워드 검색과 벡터 검색을 결합하여, 하이브리드 검색은 지정된 방법을 통해 쿼리를 실행합니다. 신뢰도 점수를 기반으로 결과를 병합하여 가장 관련성 높은 데이터가 검색되도록 합니다—자세한 예시는 여기의 코드에서 확인할 수 있습니다.
- 에이전트
LlamaIndex Agents는 목표를 달성하기 위해 다양한 도구를 사용하는 반자율적 소프트웨어 구성 요소입니다. 여러 검색 전략과 도구를 결합하여 복잡한 쿼리에 효과적으로 답할 수 있습니다.
이렇게 생각해 보세요: 도구는 사용자가 그 기능에 대한 설명을 설정할 수 있는 사전 정의된 사용자 함수이고, Agent는 이러한 도구를 가지고 작업하는 엔지니어입니다. 사용자가 두 개의 매우 큰 수를 곱하면 어떤 결과가 나오는지 LLM에 직접 프롬프트를 입력하면, 실제 정답에 가까운 답을 줄 가능성이 높지만 정확히 같지는 않을 것입니다. 하지만 설정된 설명을 기반으로 호출할 수 있는 곱셈 도구를 제공하면, 숫자의 크기와 상관없이 일관되게 정답을 도출할 수 있습니다.
간단한 에이전트형 워크플로
간단한 에이전트형 워크플로
마찬가지로, 사용자는 LLM에 도구와 그 설명을 제공하고 특정 RAG 쿼리에 어떤 것을 사용할지 결정하게 함으로써 Agentic RAG 워크플로를 구축할 수 있습니다.
고급 RAG 요약
Laurie의 발표는 LlamaIndex를 사용해 최소한의 코드 줄로 구축할 수 있는 RAG의 기본 및 고급 애플리케이션 프레임워크를 보여줍니다. LlamaIndex는 또한 LlamaParse를 제공하여, Milvus와 같은 선호하는 벡터 데이터베이스에 로컬 또는 클라우드에서 데이터를 인덱싱하는 데 도움을 줄 수 있습니다. 궁극적으로 자신의 사용 사례에 가장 적합한 것을 선택하는 것은 사용자에게 달려 있습니다. 이 발표에서는 검색과 생성을 최적화하기 위해 선택할 수 있는 다양한 RAG 전략도 소개했습니다.
인용
Liu, Jerry. “Llamahub.” Llamahub, 2023, https://cloud.llamaindex.ai/parse.
Liu, Jerry. “Starter Tutorial (OpenAI).” LlamaIndex, 2023, https://docs.llamaindex.ai/en/stable/getting_started/starter_example/.
“Llama Hub.” Llama Hub, 2023, https://llamahub.ai/.
LlamaIndex. “Hybrid Search.” LlamaIndex, 2023, https://docs.llamaindex.ai/en/stable/examples/vector_stores/MilvusHybridIndexDemo/.
LlamaIndex. “LLM based Agents.” LlamaIndex, 2023, https://docs.llamaindex.ai/en/stable/use_cases/agents/.
LlamaIndex. “Metadata Replacement + Node Sentence Window.” LlamaIndex, 2023, https://docs.llamaindex.ai/en/stable/examples/node_postprocessor/MetadataReplacementDemo/.
LlamaIndex. “Sub Question Query Engine.” LlamaIndex, 2023, https://docs.llamaindex.ai/en/stable/examples/query_engine/sub_question_query_engine/.
Milvus. “Milvus.” Milvus: Vector database, 2019, https://milvus.io/.
Milvus. “Milvus Vector Datbases.” Milvus: Vector database, 2023, https://milvus.io/.
Milvus. “Quickstart Milvus documentation.” Milvus, 2024년 5월 5일, https://milvus.io/docs/quickstart.md.
계속 읽기

Introducing Zilliz MCP Server: Natural Language Access to Your Vector Database
Developers can easily manage and query vector databases with natural language via Zilliz MCP Server in AI-native environments.

Cosmos World Foundation Model Platform for Physical AI
NVIDIA's Cosmos platform enables safe, digital twin training of GenAI models for physical applications, overcoming data scarcity and safety challenges.

Selecting the Right ETL Tools for Unstructured Data to Prepare for AI
Learn the right ETL tools for unstructured data to power AI. Explore key challenges, tool comparisons, and integrations with Milvus for vector search.


