AI/Llamaindex

LlamaIndex 완전 정복! 자주 쓰이는 함수와 예시 코드까지 한방에 정리

불타는고굼이 2025. 4. 9. 18:58
반응형

LlamaIndex 완전 정복! 자주 쓰이는 함수와 예시 코드까지 한방에 정리

요즘 LLM 애플리케이션을 개발하다 보면 RAG (Retrieval-Augmented Generation) 방식이 빠질 수 없죠. 그 중심에 있는 도구 중 하나가 바로 LlamaIndex입니다. 이 포스트에서는 LlamaIndex가 어떤 역할을 하는지부터, 자주 쓰이는 핵심 함수들과 그 사용법을 예제 코드와 함께 정리해봤어요. 


LlamaIndex란 무엇인가?

LlamaIndex는 구조화된 문서 데이터를 기반으로 LLM 기반 응답을 생성할 수 있도록 돕는 문서-기반 질의 응답 시스템입니다. 기존의 LangChain이 다양한 LLM 도구를 연결하는 파이프라인 중심이라면, LlamaIndex는 특히 문서 검색과 임베딩 처리, Chunk 기반 검색에 최적화돼 있어요.

  • Document Chunking: 문서를 작은 단위로 나누어 처리
  • Vector Embedding: 문서를 벡터로 변환
  • Retrieval: 관련 문서를 찾고
  • LLM 호출로 답변 생성

즉, LlamaIndex는 RAG 파이프라인의 핵심 구성요소라고 볼 수 있죠.


기본 구성 요소 살펴보기

1. 문서 나누기 - Document Chunking

from llama_index import SimpleDirectoryReader

documents = SimpleDirectoryReader("data").load_data()

로컬 폴더에 있는 텍스트 문서들을 로드해서 LlamaIndex가 사용할 수 있게 해주는 기본 함수입니다.

2. 문서 임베딩 처리

from llama_index.embeddings import HuggingFaceEmbedding

embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-small-en")

임베딩 모델을 HuggingFace에서 불러와서 사용할 수 있어요. 위 예시는 bge-small-en 모델을 사용한 경우입니다.

3. 인덱스 생성

from llama_index import VectorStoreIndex

index = VectorStoreIndex.from_documents(documents, embed_model=embed_model)

문서와 임베딩 모델을 이용해 벡터 인덱스를 만듭니다. 이 인덱스를 통해 검색이 가능해져요.

4. 질의 응답

query_engine = index.as_query_engine()
response = query_engine.query("2024년 한국 최저시급은 얼마야?")
print(response)

이제 사용자가 질문을 하면, 관련 문서를 찾아 답을 생성하는 단계입니다. 바로 이 부분이 RAG의 Retrieval + Generation에 해당돼요.


자주 쓰이는 파라미터 정리

  • chunk_size: 문서를 나눌 단위 크기 (예: 128)
  • embed_model: 사용할 임베딩 모델 지정
  • llm_model: 답변 생성을 위한 LLM 이름 (예: mistral)
  • prompt: 사용자 질문과 관련된 Prompt 설정
  • mode: 검색 최적화 모드 (예: compact)
  • top_k: 검색된 관련 문서 개수
query_engine = index.as_query_engine(
    similarity_top_k=10,
    streaming=True,
    mode="compact"
)

예시: 완성된 RAG 파이프라인 코드

from llama_index import (
    VectorStoreIndex, 
    SimpleDirectoryReader
)
from llama_index.embeddings import HuggingFaceEmbedding

# 문서 불러오기
documents = SimpleDirectoryReader("data").load_data()

# 임베딩 모델 설정
embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-small-en")

# 인덱스 생성
index = VectorStoreIndex.from_documents(documents, embed_model=embed_model)

# 질의 처리
query_engine = index.as_query_engine(similarity_top_k=5)
response = query_engine.query("한국의 2024년 최저시급은?")
print(response)

이처럼 단 몇 줄의 코드만으로도 사용자 맞춤형 질의응답 시스템을 만들 수 있는 게 LlamaIndex의 큰 장점입니다.

 

728x90
반응형