1️⃣Introduction

LlamaIndex는 LLM 애플리케이션이 비공개 또는 도메인별 데이터를 삽입, 구조화 및 액세스하기 위한 데이터 프레임워크입니다.

LlamaIndex는 CEO를 맡고 있는 Jerry Liu(@jerryjliu0 )가 공동 설립했습니다.

LlamaIndex의 용도는 무엇인가요?

기본적으로 LLM (예: GPT )은 사람과 추론된 데이터 간에 자연어 기반의 대화형 인터페이스를 제공합니다. 널리 사용되는 대규모 모델은 대개 Wikipedia, 메일링 리스트, 책, 소스 코드 등 공개적으로 사용 가능한 대량의 데이터에 대해 사전 학습된 경우가 많습니다.

LLM 모델을 기반으로 구축된 애플리케이션은 해당 모델을 보강하기 위해 개인 또는 도메인별 데이터를 사용해야 하는 경우가 많습니다. 안타깝게도 이러한 데이터는 여러 애플리케이션과 데이터 저장소에 분산되어 있을 수 있습니다. 이러한 데이터는 API, SQL 데이터베이스 또는 PDF 파일과 슬라이드에 존재할 수 있습니다.

lamaIndex는 어떻게 틀을 깰 수 있을까요?

LlamaIndex는 5가지 핵심 도구를 제공합니다:

  • Data connectors

  • Data indexes

  • Engines

  • Data agents

  • Application integrations

RAG(Retrieval Augmented Generation)

RAG는 개인 또는 비공개 도메인 데이터로 LLM 증강하하여 참조 지식을 활용하여 생성하는 패러다임입니다. 일반적으로 두 단계로 구성됩니다:

  1. Indexing: 지식 창고 구축하기

  2. Query: 지식 창고에서 관련 문맥 정보를 검색하여 LLM이 질문에 답변하는 데 도움을 줍니다.

LlamaIndex는 개발자가 두 단계를 매우 쉽게 수행할 수 있도록 도와주는 툴킷을 제공합니다.

Indexing 단계

LlamaIndex는 Data ConnectorIndexes를 제공하여 개발자가 지식창고를 구축할 수 있도록 도와줍니다.

이 단계에서는 다음 도구 또는 구성 요소가 사용됩니다:

  • Data connectors

    데이터 커넥터. 여러 데이터 소스에서 다양한 형식의 데이터를 주입하고 텍스트와 메타데이터를 포함하는 LlamaIndex에서 지원하는 문서 표현으로 변환하는 역할을 담당합니다.

  • Documents / Nodes

    Documents는 PDF 문서, API 응답 또는 데이터베이스의 데이터 등 모든 데이터 소스를 포함할 수 있는 LlamaIndex의 컨테이너 개념입니다.

    Nodes는 LlamaIndex에서 가장 작은 데이터 단위로, 문서의 한 덩어리를 나타냅니다. 또한 메타데이터와 다른 노드와의 관계에 대한 정보를 포함합니다. 이를 통해 보다 정밀한 검색 작업이 가능합니다.

  • Data Indexes

    LlamaIndex눈 개발자가 삽입된 데이터를 색인화할 수 있는 편리한 도구를 제공하여 향후 검색을 간단하고 효율적으로 할 수 있도록 도와줍니다.

    가장 일반적으로 사용되는 인덱스는 VectorStoreIndex 입니다`.

Query 단계

쿼리 단계에서 RAG 파이프라인은 사용자 쿼리를 기반으로 가장 관련성이 높은 컨텍스트를 검색하고 이를 쿼리와 함께 LLM에 전달하여 응답을 합성합니다. 이를 통해 LLM은 원래 학습 데이터에 없는 최신 지식을 얻을 수 있고 가상의 콘텐츠도 줄일 수 있습니다. 이 단계의 핵심 과제는 검색, 오케스트레이션 및 지식 기반 추론입니다.

LlamaIndex는 개발자가 Q&A, Chatbot 또는 Agents의 일부로 RAG 파이프라인을 구축 및 통합할 수 있도록 구성 가능한 빌딩 블록을 제공합니다. 이러한 빌딩 블록은 순위 기본 설정에 따라 사용자 지정할 수 있으며 여러 지식 기반을 기반으로 구조화된 방식으로 추론하도록 결합할 수 있습니다.

이 단계의 구성 요소는 다음과 같습니다:

  • Retrivers: 쿼리를 기반으로 지식창고에서 관련 문맥 정보를 효율적으로 검색하는 방법을 정의합니다.

  • Node Postprocessors: 문서 노드(노드) 집합의 변환, 필터링 또는 순위를 매기는 작업을 수행합니다.

  • Response Synthesizers: LLM을 사용하여 사용자의 쿼리와 검색된 텍스트 블록 집합(컨텍스트를 형성하기 위해)을 기반으로 응답을 생성합니다.

RAG 파이프라인이 포함되어 있습니다:

  • Query Engines 사용자가 자연어로 질문하고 관련 컨텍스트와 함께 지식창고를 기반으로 답변을 얻을 수 있는 엔드투엔드 파이프라인입니다.

  • Chat Engines 사용자가 지식창고를 기반으로 대화(여러 상호작용, 세션 기록)에 참여할 수 있도록 하는 엔드투엔드 파이프라인입니다.

  • Agents LLM에 의해 구동되는 자동화된 의사 결정자입니다. 에이전트는 쿼리 엔진이나 채팅 엔진처럼 사용할 수 있습니다. 가장 큰 차이점은 에이전트가 미리 정해진 로직을 따르는 대신 최상의 작업 순서를 동적으로 결정한다는 것입니다. 따라서 더 복잡한 작업을 처리할 수 있는 추가적인 유연성을 제공합니다.

LlamaIndex Basic

  1. Load Dataset(Knowledge)

  2. Indexing VectorStore

  3. Query Engine

Setup Environmental

#%pip install llama-index
#%pip install python-dotenv
import os
from dotenv import load_dotenv  

!echo "OPENAI_API_KEY=<Your OpenAI Key>" >> .env # OpenAI Key 입력
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")

Text Dataset Load

Paul Graham 에세이

!mkdir data
!wget https://raw.githubusercontent.com/jerryjliu/llama_index/main/examples/paul_graham_essay/data/paul_graham_essay.txt -O data/paul_graham_essay.txt

Indexing to VectorStore

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, ServiceContext

documents = SimpleDirectoryReader('data').load_data()
index = VectorStoreIndex.from_documents(documents)

Query Engine

query_engine = index.as_query_engine()
response = query_engine.query("누가 작가인지 알려줄래")
print(response)
파울 그레이엄이 작가입니다.
response = query_engine.query("폴 그레이엄에 대해 알려줄래")
print(response)
폴 그레이엄은 파울 그레이엄(Paul Graham)으로 알려진 인물로, 기술 기업가이자 작가이다. 
그는 Y Combinator의 공동 창업자이며, 컴퓨터 프로그래밍, 창업 및 기술에 대한 에세이로 유명하다.

Last updated