BigData

[인공지능 기술] RAG를 위한 라마인덱스의 정리 - llamaindex 의 특징

IT오이시이 2024. 5. 12. 20:45
728x90

[인공지능 기술] RAG를 위한 라마인덱스의 정리 - llamaindex 의 특징

 



라마인덱스(LlamaIndex)와 ChatGPT



라마인덱스(LlamaIndex)는 RAG(Retrieval Augmented Generation)을 구현할 때 유용한 프레임워크입니다.

ChatGPT는 방대한 학습된 데이터(LLM)를 이용하여  번역, 요약, 설명 등을 할 수 있는 기술이지만 최신의 정보나 특정 도메인의 지식을 설명하지 못하는 경우 RAG( Retrieval Augmented Generation) 방식으로 데이터의 증강이 필요합니다.

이 경우 라마인덱스를 이용하여  ChatGPT가 새로운 도메인의 데이터를 검색하고 응답할수 있도록 데이터를 벡터화 하는 임베딩의 과정을 거쳐 데이터를 활용 할 수 있습니다.

 

RAG(Retrieval Augmented Generation)의 활용


LLM 프롬프트를 통해 컨텍스트 정보를 추가함으로써 LLM 모델의 결과 품질을 높이는 것을 RAG(Retrieval Augmented Generation)이라고 합니다.

LLM을 이용할때  LLM 모델 자체가 학습한 데이터만으로는 부족한 경우 외부의 사용자 데이터를 LLM에 추가 입력하여 처리를 해야 합니다.

라마인덱스를 이용하면 다양한 데이터 소스를 쉽게 연결할수 있고, 대형 언어 모델(Large Language Models, LLMs)에 사용자 정의 데이터(Custom Data)를 LLM 프롬프트에 추가 컨텍스트(context)로 입력하여 LLM 모델 액세스의 결과 품질을 향상 할 수 있습니다.

라마인덱스는 RAG을 구현하는 데 필요한 다양한 데이터 (DataBase, pdf, image, text 등)를 임베딩하여  검색하는데 기존 검색 방식보다  정보를 효율적으로 찾을 수 있는 검색 기술을 제공합니다.



RAG (Retreval Augmented Generation) 단계


RAG은 다음과 같이 크게 2개의 단계로 나뉩니다.

1) 인덱싱 스테이지:
    지식베이스(Knowledge Base)를 준비하는 단계


     - 데이터 소스로부터 데이터를 추출하여 로드
     - 로드한 데이터를 문서(Documents)로 변환
     - 변환한 문서에 대한 색인(Index) 생성
     - 외부 저장소에 색인을 저장

2) 쿼리 스테이지:
    지식베이스로 부터 추출한 컨텍스트(Context)를 활용해 LLM에 질의하는 단계


     - 생성된 색인으로부터 질의에 맞는 컨텍스트 추출
     - 추출한 컨텍스트를 포함하여 LLM 쿼리
     - 쿼리 결과의 응답 처리







라마인덱스의 특징


1) 다차원 검색:
   라마인덱스는 다양한 차원에서의 검색을 지원하여, 사용자가 다양한 조건과 요구에 맞게 정보를 검색할 수 있습니다.
2) 유연한 쿼리 처리:
라마인덱스는 복잡한 쿼리도 정확하고 빠르게 처리하여 검색 결과를 얻을 수 있도록 도와줍니다.

 

라마인덱스의 주요 기능


1) 데이터 수집 (Data Ingestion):
   다양한 외부 데이터 소스에서 데이터를 쉽게 가져올수 는 인터페이스를 제공합니다.
    API, PDF 문서, SQL 데이터베이스 등이 포함될 수 있으며, 데이터는 구조화된 형태(예: 표), 비구조화된 형태(예: 텍스트 문서), 또는 프로그래밍을 통해 직접적으로 접근할 수 있는 형태일 수 있습니다.

2) 데이터 색인 (Data Indexing):
   수집된 데이터를 정리하고 색인을 생성하여 체계적인 데이터 저장과 데이터 검색 기능을 제공합니다.

3) 질의 인터페이스 (Query Interface):
  사용자 정의  데이터에 쿼리(검색) 인터페이스를 제공합니다. 사용자는 이 인터페이스를 통해 질문이나 명령을 입력하고, LlamaIndex는 메타데이터와 색인을 활용하여 관련 정보를 빠르게 찾아 응답할 수 있습니다.



 

LlamaIndex을 이용한 LLM의  RAG을 처리하는 과정

 



① 색인 생성: 로우 데이터를 입력받아 색인을 만들기 위해 LlamaIndex는 입력 데이터를 토큰 덩어리(chunk) 단위로 잘게 자른 다음 그 토큰 덩어리에 대한 임베딩(embedding) 벡터값을 구해 그 값을 벡터 저장소에 저장합니다

② 쿼리 분석: 벡터 저장소에 저장된 색인을 검색하려면 사용자가 입력한 쿼리 문장을 앞서와 마찬가지로 임베딩 값으로 변환해야 합니다

③ LLM 질의: 마지막으로 색인에서 추출한 컨텍스트를 사용자가 작성한 쿼리에 이어 붙여 LLM에 최종 질의 합니다.



 

 

LlamaIndex 사용예시


from llama_index import VectorStoreIndex, SimpleDirectoryReader
documents = SimpleDirectoryReader('data').load_data()
index = VectorStoreIndex.from_documents(documents)

query_engine = index.as_query_engine()
response = query_engine.query("Llama Index 대해 말해줘?")
print(response)












728x90
반응형