LlamaIndex는 대규모 언어 모델(LLM) 애플리케이션을 구축하기 위한 오픈 소스 데이터 오케스트레이션 프레임워크입니다. LlamaIndex는 Python과 TypeScript로 제공되며, 검색 증강(RAG) 파이프라인을 통해 생성형 AI(gen AI) 사용 사례의 컨텍스트 증강 프로세스를 간소화하는 기능과 도구의 조합을 활용합니다.
LlamaIndex를 사용하면 데이터 통합 및 컨텍스트 보강을 통해 비공개 또는 사용자 지정 데이터를 선별하고 정리할 수 있습니다.
컨텍스트 증강은 데이터가 LLM 컨텍스트 창에 제공되는 경우로, 기본적으로 LLM을 비공개 또는 외부 데이터로 증강합니다.
널리 사용되는 오픈 소스 LLM은 대량의 공개 데이터에 대해 사전 학습되어 있습니다. 이러한 대규모 LLM은 많은 실제 문제를 해결하는 데 도움이 됩니다. 그러나 특정 사용 사례를 학습하는 데 상당한 시간과 리소스가 소요됩니다. 또한 모델의 내부 데이터는 사전 학습된 시간 동안에만 최신 상태로 유지됩니다. 모델에 따라 현재 이벤트에 대한 실시간 인식을 반영하기 위해 컨텍스트 증강이 필요합니다.
파운데이션 모델은 거의 모든 도메인이나 작업에 적용할 수 있는 유연하고 재사용 가능한 AI 모델이기 때문에 인기를 얻고 있습니다. IBM Granite 시리즈와 유사한 파운데이션 모델은 선별된 데이터를 기반으로 학습되지만, 모델이 대규모 데이터 세트에서 학습하든 사전 학습된 파운데이션 모델에서 학습하든, 도메인별 데이터의 외부 소스에 대해 학습해야 할 가능성이 높습니다. 이 프로세스는 LLM을 비공개 데이터에 연결하여 애플리케이션의 사용 사례 또는 전반적인 목표에 맞게 조정하는 시스템 프레임워크로 촉진됩니다. 애플리케이션 스택에서 LLM을 사용자 정의 데이터 소스에 쉽게 연결할 수 있는 부분은 LlamaIndex와 같은 데이터 프레임워크입니다.
데이터는 다양한 형식으로 여러 소스에서 제공됩니다. LLM이 사용할 데이터를 수집, 변환 및 구성하는 것은 데이터 프레임워크에 달려 있습니다. 데이터는 사일로화되어 있고 구조화되지 않은 경우가 많습니다. 데이터를 가져오고 구조화하려면 LlamaIndex와 같은 데이터 프레임워크가 일반적으로 수집 파이프라인이라고 하는 프로세스를 통해 데이터를 실행해야 합니다.
데이터가 수집되어 LLM이 사용할 수 있는 형식으로 변환되면 다음 단계는 인덱싱을 위해 정보를 데이터 구조로 변환하는 것입니다. 일반적인 절차는 비정형 데이터를 벡터 임베딩으로 변환하는 것입니다. 이 프로세스를 자연어 처리(NLP)에서는 '임베딩 생성'이라고 하지만 데이터 용어에서는 '인덱싱'이라고 합니다.1 인덱싱은 LLM이 벡터 인덱스를 통해 수집된 데이터를 쿼리하고 검색할 수 있도록 하기 때문에 필요합니다. 선택한 쿼리 전략에 따라 데이터를 인덱싱할 수 있습니다.
데이터 통합은 비공개 데이터를 LLM의 컨텍스트 창 또는 '지식 기반'에 통합하여 컨텍스트 증강을 용이하게 합니다. IBM의 Granite 3B 및 8B 모델의 컨텍스트 창 길이는 최근 128,000 토큰으로 확장되었습니다.2 컨텍스트 창이 클수록 모델이 작업 메모리에 더 많은 텍스트를 유지할 수 있으므로 확장된 대화 및 긴 코드베이스 전반에 걸쳐 주요 세부 정보를 추적하는 기능이 향상됩니다. 이 기능을 통해 LLM 챗봇은 단기적으로는 물론 보다 광범위한 컨텍스트에서 일관된 응답을 생성할 수 있습니다.
그러나 확장된 컨텍스트 창을 사용하더라도 미세 조정된 모델은 학습과 추론 모두에서 상당한 비용을 발생시킬 수 있습니다. 특정 데이터 또는 비공개 데이터로 모델을 미세 조정하려면 데이터 변환과 LLM 프롬프트를 위한 효율적인 데이터 검색 방법을 촉진하는 시스템이 필요합니다. RAG 방법론은 긴 컨텍스트 언어 모델링을 용이하게 하는 유망한 옵션으로 여겨집니다.3
RAG는 컨텍스트 증강을 위해 가장 잘 알려져 있고 사용되는 방법 중 하나입니다. RAG는 LLM이 전문 지식 기반을 활용하여 질문에 대한 보다 정확한 답변을 제공할 수 있는 능력을 향상할 수 있도록 합니다.4 일반적인 검색 증강 프로세스는 다음 세 단계로 수행됩니다.
LlamaIndex와 같은 데이터 프레임워크는 RAG 패턴의 모든 단계에 대해 포괄적인 API 호출을 제공하여 데이터 수집 및 검색 프로세스를 간소화합니다. 이 프로세스는 사용자가 데이터에 대해 질문할 수 있는 쿼리 엔진의 개념으로 구동됩니다. 외부 데이터를 쿼리하고 컨텍스트 지식을 LLM에 요청하면 도메인별 LLM 애플리케이션을 생성할 수 있습니다.
LlamaIndex는 RAG를 사용하여 LLM이 이미 액세스할 수 있는 데이터 풀에 외부 데이터를 추가하고 연결합니다. 쿼리 엔진, 챗봇 및 에이전트를 포함한 애플리케이션은 RAG 기술을 사용하여 작업을 완료합니다.5
LlamaIndex의 워크플로는 몇 가지 단계로 나눌 수 있습니다.
이 워크플로우의 목표는 LLM이 비공개 또는 도메인별 데이터를 수집, 구조화 및 액세스할 수 있도록 지원하는 것입니다. 더 관련성이 높은 데이터에 액세스할 수 있으면 LLM은 챗봇 구축이든 쿼리 엔진 구축이든 프롬프트에 더 정확하게 응답할 수 있습니다.
데이터 수집 또는 '로드'는 외부 데이터 소스를 LLM에 연결하기 위한 첫 번째 단계입니다. LlamaIndex는 애플리케이션이 사용할 데이터를 로드하는 데이터 수집을 말합니다. 대부분의 비공개 데이터 또는 사용자 지정 데이터는 애플리케이션 프로그래밍 인터페이스(API), PDF, 이미지, 구조적 쿼리 언어 데이터베이스(SQL) 등과 같은 형식으로 사일로화될 수 있습니다. LlamaIndex는 정형, 반정형, 비정형 데이터 세트를 포함해 160개 이상의 다양한 데이터 형식으로 로드할 수 있습니다.
데이터 '로더'라고도 하는 데이터 커넥터는 기본 소스에서 데이터를 가져오고 수집합니다. 수집된 데이터는 데이터와 메타데이터의 모음으로 변환됩니다. 이러한 컬렉션을 LlamaIndex에서는 '문서'라고 합니다. 데이터 커넥터, 즉 LlamaIndex의 '리더(reader)'는 다양한 데이터 형식을 수집하고 로드합니다. LlamaIndex는 각 디렉토리에 있는 모든 파일을 마크다운, PDF, 워드 문서, 파워포인트 프레젠테이션, 이미지, 오디오 파일, 동영상을 비롯한 문서로 변환하는 통합 리더를 제공합니다.6 기본 제공 기능에 포함되지 않은 다른 데이터 형식을 처리하려면 오픈 소스 데이터 로더 레지스트리인 LlamaHub를 통해 데이터 커넥터를 사용할 수 있습니다. 워크플로우의 이 단계에서는 지식 베이스를 구축하여 데이터에 대한 인덱스를 형성하여 LLM이 쿼리하고 사용할 수 있도록 합니다.
데이터가 수집되면 데이터 프레임워크는 데이터를 LLM에서 검색할 수 있는 구조로 변환하고 구성해야 합니다. 데이터 인덱스는 LLM이 사용할 수 있는 표현으로 데이터를 구조화합니다. LlamaIndex는 벡터 스토어 인덱스, 요약 인덱스 및 지식 그래프 인덱스를 비롯한 애플리케이션의 쿼리 전략을 보완하는 여러 가지 인덱스 유형을 제공합니다.
데이터가 로드되고 인덱싱되면 데이터를 저장할 수 있습니다. LlamaIndex는 아키텍처, 복잡성 및 비용이 다양한 많은 벡터 스토어를 지원합니다. 기본적으로 LlamaIndex는 인덱싱된 모든 데이터를 메모리에만 저장합니다.
벡터 스토어 인덱스는 자연어 쿼리를 처리하는 데 탁월하기 때문에 RAG 패턴을 따르는 LLM 애플리케이션에서 일반적으로 사용됩니다. 자연어 쿼리의 검색 정확도는 키워드 일치보다는 시맨틱 검색 또는 의미에 기반한 검색에 달려있습니다.7 시맨틱 검색은 입력 데이터를 벡터 임베딩으로 변환하여 활성화됩니다.벡터 임베딩은 LLM이 처리할 수 있는 데이터의 의미를 숫자로 표현한 것입니다. 벡터 임베딩 간의 수학적 관계를 통해 LLM은 쿼리 용어의 의미를 기반으로 데이터를 검색하여 보다 컨텍스트가 풍부한 응답을 얻을 수 있습니다.
`VectorStoreIndex`는 데이터 컬렉션 또는 `Document` 객체를 가져와서 소스 데이터 (`Document`)의 '청크'를 나타내는 데이터의 원자 단위인 `Node`로 분할합니다. 데이터 수집이 청크로 분할되면 각 데이터 청크의 벡터 임베딩이 생성됩니다. 통합 데이터는 이제 LLM이 쿼리를 실행할 수 있는 형식이 됩니다. 이러한 벡터 인덱스는 재인덱싱을 방지하기 위해 저장할 수 있습니다. 데이터를 저장하는 가장 간단한 방법은 디스크에 유지하는 것이지만, LlamaIndex는 여러 벡터 데이터베이스 및 임베딩 모델과 통합됩니다.8
임베딩 검색을 하려면 먼저 사용자 쿼리가 벡터 임베딩으로 변환됩니다. 다음으로, 수학적 프로세스를 사용하여 쿼리와의 의미론적 유사성을 기반으로 모든 임베딩의 순위를 매깁니다.
벡터 스토어 인덱스는 top-k 시맨틱 검색을 사용하여 가장 유사한 임베딩을 해당하는 텍스트 청크로 반환합니다. LlamaIndex는 효율적인 정보 검색을 위해 대규모 색인의 생성 및 관리를 용이하게 하도록 설계되었습니다.
워크플로의 마지막 단계는 LLM에 대한 프롬프트 호출을 처리하기 위한 쿼리 엔진을 구현하는 것입니다. 쿼리는 검색, 후처리, 응답 합성의 세 단계로 구성됩니다. 검색은 벡터 인덱스에서 가장 관련성이 높은 문서를 가져와 반환하는 경우입니다. 후처리는 검색된 임베딩 청크 또는 `Nodes`를 재순위 지정, 변환 또는 필터링을 통해 선택적으로 재조정하는 작업입니다. 응답 합성은 가장 관련성이 높은 데이터와 프롬프트를 결합하여 LLM으로 전송하여 응답을 반환하는 것입니다.
데이터 에이전트는 읽기 및 쓰기 기능을 포함하여 데이터에 대한 다양한 작업을 수행할 수 있는 LLM 기반 AI 에이전트입니다.10 LlamaIndex 데이터 에이전트는 다음을 수행할 수 있는 LLM 기반 지식 작업입니다.
AI 에이전트는 일련의 API 및 도구를 통해 외부 환경과 상호 작용할 수 있습니다. LlamaIndex는 OpenAI Function 에이전트(OpenAI Function API 위에 구축됨) 및 ReAct 에이전트를 지원합니다. 데이터 에이전트의 핵심 구성 요소는 '추론 루프' 또는 에이전트의 추론 패러다임과 도구 자체인 '도구 추상화'입니다.
도구 추상화는 에이전트가 도구에 액세스하고 사용하는 방법을 간략하게 설명합니다. LlamaIndex는 에이전트가 상호 작용할 수 있는 전체 API 사양을 나타내는 Python 클래스인 도구 및 ToolSpecs를 제공합니다. 기본 도구 추상화는 일련의 인수를 사용하고 모든 응답을 수집할 수 있는 일반 도구 아웃풋 컨테이너를 반환할 수 있는 일반 인터페이스를 정의합니다. LlamaIndex는 기존 데이터 쿼리 엔진을 래핑하는 도구 추상화와 도구 사양 클래스에서 사용할 수 있는 함수에 대한 추상화를 제공합니다.
도구 사양을 통해 사용자는 특정 작업을 처리하는 개별 도구가 아닌 전체 서비스를 정의할 수 있습니다. 예를 들어 Gmail 도구 사양을 사용하면 에이전트가 이메일을 읽고 초안을 작성할 수 있습니다.11 다음은 이를 대략적으로 정의하는 방법의 한 가지 예입니다.
class GmailToolSpec(BaseToolSpec):각 함수는 `FunctionTool` 추상화를 사용하여 도구로 변환됩니다.
LlamaIndex는 에이전트가 상호 작용할 수 있는 15+ 도구 사양으로 구성된 LlamaHub의 도구 저장소를 활용합니다. 이 목록은 다양한 작업을 수행할 수 있는 에이전트의 능력을 향상하고 강화하기 위한 서비스로 구성됩니다. 다음은 저장소에 포함된 몇 가지 사양 중 일부입니다.
LlamaIndex는 다음을 포함하여 기존 도구의 역량을 강화할 수 있는 유틸리티 도구를 제공합니다.
LlamaIndex는 지식 근로자 역할을 하는 LLM 기반 AI 에이전트의 사용을 포함하도록 기능을 확장했습니다. LlamaIndex AI 에이전트는 ReAct(추론 및 행동) 행동 패턴을 따릅니다. ReAct 에이전트는 응답을 반복적으로 개선하면서 에이전트가 계획하고 추론하도록 지시하는 추론 패러다임을 따릅니다. 이러한 AI 에이전트는 일련의 사고 자극의 한 형태로 해석될 수 있습니다. 에이전트는 도구를 사용하여 다른 LLM과 통합할 수 있습니다. 예를 들어, 데이터 커넥터 및 에이전트 도구의 LlamaHub 컬렉션이 있습니다.
LlamaIndex는 튜토리얼에 대한 링크와 함께 문서에서 몇 가지 사용 사례 예제를 제공합니다.13
watsonx 포트폴리오의 IBM 파운데이션 모델 라이브러리에 대해 자세히 알아보고 비즈니스를 위한 생성형 AI를 자신 있게 확장하세요.
업계 최고의 AI 전문성과 솔루션 포트폴리오를 보유한 IBM과 함께 AI를 비즈니스에 활용하세요.
AI 추가를 통해 중요한 워크플로와 운영을 혁신함으로써 경험, 실시간 의사 결정 및 비즈니스 가치를 극대화합니다.
1 Elena Lowery, “Use Watsonx.Ai with LlamaIndex to Build Rag Applications,” Use Watsonx.ai with LlamaIndex to build RAG applications, 2024년 5월 28일, https://community.ibm.com/community/user/watsonx/blogs/elena-lowery/2024/05/28/use-watsonxai-with-llamaindex-to-build-rag-applica.
2 Matt Stallone et al., “Scaling Granite Code Models to 128K Context,” arXiv.org, 2024년 7월 18일, https://arxiv.org/abs/2407.13739.
3 Matt Stallone et al., “Scaling Granite Code Models to 128K Context.”
4 Kim Martineau, “What Is Retrieval-Augmented Generation (Rag)?,” IBM Research, 2024년 5월 1일, https://research.ibm.com/blog/retrieval-augmented-generation-RAG.
5 “High-Level Concepts,” LlamaIndex, https://docs.llamaindex.ai/en/stable/getting_started/concepts/.
6 “Loading Data (Ingestion),” LlamaIndex, https://docs.llamaindex.ai/en/stable/understanding/loading/loading/.
7 Elena Lowery, “Use Watsonx.Ai with LlamaIndex to Build Rag Applications.”
8 Elena Lowery, “Use Watsonx.Ai with LlamaIndex to Build Rag Applications.”
9 “Query Engine,” LlamaIndex, https://docs.llamaindex.ai/en/latest/module_guides/deploying/query_engine/.
10 Jerry Liu, “Data Agents,” Medium, 2023년 7월 13일, https://medium.com/llamaindex-blog/data-agents-eed797d7972f.
11 “Google,” LlamaIndex, https://docs.llamaindex.ai/en/stable/api_reference/tools/google/.
12 “Using LLMs,” LlamaIndex, https://docs.llamaindex.ai/en/latest/module_guides/models/llms/.
13 “Use Cases,” LlamaIndex, https://docs.llamaindex.ai/en/latest/use_cases/.
14 “Question-Answering (RAG),” LlamaIndex, https://docs.llamaindex.ai/en/stable/use_cases/q_and_a/.
15 “Agents,” LlamaIndex, https://docs.llamaindex.ai/en/stable/use_cases/agents/.