RAG용 Vertex AI 기반 LlamaIndex 개요

LlamaIndex는 컨텍스트가 증강된 대규모 언어 모델(LLM) 애플리케이션을 개발하기 위한 데이터 프레임워크입니다. 컨텍스트 증강은 데이터에 LLM을 적용할 때 발생합니다. 이는 검색 증강 생성(RAG)을 구현합니다.

LLM의 일반적인 문제는 비공개 지식, 즉 조직의 데이터를 이해하지 못한다는 것입니다. RAG용 Vertex AI 기반 LlamaIndex를 사용하면 추가 개인 정보로 LLM 컨텍스트를 강화할 수 있습니다. 모델이 할루시네이션을 줄이고 질문에 더 정확하게 답변할 수 있기 때문입니다.

추가 지식 소스를 LLM이 보유한 기존 지식과 결합하여 더 나은 컨텍스트가 제공됩니다. 쿼리와 함께 개선된 컨텍스트는 LLM의 응답 품질을 향상시킵니다.

Vertex AI에서 LlamaIndex를 이해하는 데 중요한 개념은 다음과 같습니다. 이러한 개념은 검색 증강 생성(RAG) 프로세스 순서로 나열되어 있습니다.

  1. 데이터 수집: 다양한 데이터 소스에서 데이터를 수집합니다. 예를 들면 로컬 파일, Cloud Storage, Google Drive가 있습니다.

  2. 데이터 변환: 인덱싱을 준비하는 동안 데이터를 변환합니다. 예를 들어 데이터가 청크로 분할됩니다.

  3. 임베딩: 단어나 텍스트 조각을 숫자로 표현한 것입니다. 이 숫자는 텍스트의 의미론적 의미와 맥락을 캡처합니다. 유사하거나 관련된 단어 또는 텍스트는 임베딩이 비슷한 경향이 있습니다. 즉, 고차원 벡터 공간에서 더 가깝게 위치합니다.

  4. 데이터 색인 생성: RAG용 Vertex AI의 LlamaIndex는 코퍼스라는 색인을 만듭니다. 색인은 기술 자료를 구조화하므로 검색에 최적화되어 있습니다. 예를 들어, 색인은 방대한 참조 서적의 상세한 목차와 같습니다.

  5. 검색: 사용자가 질문하거나 프롬프트를 제공하면 RAG용 Vertex AI 기반 LlamaIndex에서 검색 구성요소는 기술 자료를 통해 쿼리와 관련된 정보를 찾습니다.

  6. 생성: 검색된 정보는 생성 AI 모델이 사실에 근거하고 관련성 있는 응답을 생성하기 위한 가이드로 원래 사용자 쿼리에 추가된 컨텍스트가 됩니다.

이 페이지에서는 RAG용 Vertex AI 기반 LlamaIndex 사용을 시작하고 RAG API 사용 방법을 보여주는 Python 샘플을 제공합니다.

파일 크기 제한에 대한 자세한 내용은 지원되는 문서 유형을 참조하세요. RAG용 Vertex AI 기반 LlamaIndex 관련 할당량에 대한 자세한 내용은 RAG 할당량을 위한 Vertex AI 기반 LlamaIndex를 참조하세요. 파라미터 맞춤설정에 대한 자세한 내용은 검색 파라미터를 참조하세요.

Vertex AI SDK를 사용하여 RAG용 Vertex AI 기반 LlamaIndex 실행

RAG용 Vertex AI 기반 LlamaIndex를 사용하려면 다음을 수행합니다.

  1. Vertex AI SDK for Python을 설치합니다.

  2. Google Cloud 콘솔에서 이 명령어를 실행하여 프로젝트를 설정합니다.

    gcloud config set {project}

  3. 이 명령어를 실행하여 로그인을 승인합니다.

    gcloud auth application-default login

  4. Vertex AI 기반 LlamaIndex를 실행하려면 이 샘플 코드를 Google Cloud 콘솔에 복사하여 붙여넣으세요.

Python

Vertex AI SDK for Python을 설치하거나 업데이트하는 방법은 Vertex AI SDK for Python 설치를 참조하세요. 자세한 내용은 Python API 참고 문서를 확인하세요.

from vertexai.preview import rag
from vertexai.preview.generative_models import GenerativeModel, Tool
import vertexai

# Create a RAG Corpus, Import Files, and Generate a response

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# display_name = "test_corpus"
# paths = ["https://drive.google.com/file/123", "gs://my_bucket/my_files_dir"]  # Supports Google Cloud Storage and Google Drive Links

# Initialize Vertex AI API once per session
vertexai.init(project=project_id, location="us-central1")

# Create RagCorpus
rag_corpus = rag.create_corpus(display_name=display_name)

# Import Files to the RagCorpus
response = rag.import_files(
    rag_corpus.name,
    paths,
    chunk_size=512,  # Optional
    chunk_overlap=100,  # Optional
)

# Direct context retrieval
response = rag.retrieval_query(
    rag_resources=[
        rag.RagResource(
            rag_corpus=rag_corpus.name,
            # Supply IDs from `rag.list_files()`.
            # rag_file_ids=["rag-file-1", "rag-file-2", ...],
        )
    ],
    text="What is RAG and why it is helpful?",
    similarity_top_k=10,  # Optional
    vector_distance_threshold=0.5,  # Optional
)
print(response)

# Enhance generation
# Create a RAG retrieval tool
rag_retrieval_tool = Tool.from_retrieval(
    retrieval=rag.Retrieval(
        source=rag.VertexRagStore(
            rag_resources=[
                rag.RagResource(
                    rag_corpus=rag_corpus.name,  # Currently only 1 corpus is allowed.
                    # Supply IDs from `rag.list_files()`.
                    # rag_file_ids=["rag-file-1", "rag-file-2", ...],
                )
            ],
            similarity_top_k=3,  # Optional
            vector_distance_threshold=0.5,  # Optional
        ),
    )
)
# Create a gemini-pro model instance
rag_model = GenerativeModel(
    model_name="gemini-1.0-pro-002", tools=[rag_retrieval_tool]
)

# Generate response
response = rag_model.generate_content("What is RAG and why it is helpful?")
print(response.text)

지원되는 생성 모델

Vertex AI 기반 LlamaIndex를 지원하는 다음 모델과 해당 버전은 다음과 같습니다.

모델 버전
Gemini 1.5 Flash gemini-1.5-flash-001
Gemini 1.5 Pro gemini-1.5-pro-001
Gemini 1.0 Pro gemini-1.0-pro-001
gemini-1.0-pro-002
Gemini 1.0 Pro Vision gemini-1.0-pro-vision-001
Gemini gemini-experimental

지원되는 임베딩 모델

지원되는 Google 모델 버전은 다음과 같습니다.

  • textembedding-gecko@003
  • textembedding-gecko-multilingual@001
  • text-embedding-004
  • text-multilingual-embedding-002

다음 모델 버전은 미세 조정된 Google 모델에서 지원됩니다.

  • textembedding-gecko@003
  • textembedding-gecko-multilingual@001
  • text-embedding-004
  • text-multilingual-embedding-002
  • textembedding-gecko@002
  • textembedding-gecko@001

구성이 지정되지 않은 경우 기본 동작은 RagCorpus의 임베딩 선택에 text-embedding-004를 사용하는 것입니다. 임베딩 모델 조정에 대한 자세한 내용은 텍스트 임베딩 조정을 참조하세요.

지원되는 문서 유형

파일 크기 한도가 있는 다음 파일 형식의 텍스트 전용 문서가 지원됩니다.

파일 형식 파일 크기 한도
Google Docs Google Workspace에서 내보내는 경우 10MB
Google Drawings Google Workspace에서 내보내는 경우 10MB
Google 슬라이드 Google Workspace에서 내보내는 경우 10MB
HTML 파일 10MB
JSON 파일 1MB
마크다운 파일 10MB
Microsoft PowerPoint 슬라이드(PPTX 파일) 10MB
Microsoft Word 문서(DOCX 파일) 10MB
PDF 파일 50MB
텍스트 파일 10MB

다른 문서 유형과 함께 RAG용 Vertex AI 기반 LlamaIndex를 사용할 수 있지만 응답 품질이 더 낮을 수 있습니다.

지원되는 데이터 소스

지원되는 세 가지 데이터 소스는 다음과 같습니다.

  • 동기 호출인 upload_file(최대 25MB)을 사용한 단일 파일 업로드입니다.

  • Cloud Storage에서 파일을 가져옵니다.

  • Google Drive에서 디렉터리를 가져옵니다.

    서비스 계정에 파일을 가져올 수 있는 올바른 권한을 부여해야 합니다. 그렇지 않으면 파일을 가져오지 않고 오류 메시지가 표시되지 않습니다. 파일 크기 제한에 대한 자세한 내용은 지원되는 문서 유형을 참조하세요.

    인증하고 권한을 부여하려면 다음을 수행합니다.

    1. Google Cloud 프로젝트의 IAM 페이지로 이동합니다.
    2. Google 제공 역할 부여 포함을 선택합니다.
    3. Vertex AI RAG 데이터 서비스 에이전트 서비스 계정을 검색합니다.
    4. 드라이브 폴더에서 공유를 클릭하고 서비스 계정과 공유합니다.
    5. Google Drive 폴더 또는 파일의 서비스 계정에 Viewer 권한을 부여합니다. Google Drive 리소스 ID는 웹 URL에서 확인할 수 있습니다.

자세한 내용은 RAG API 참조를 확인하세요.

지원되는 데이터 변환

문서가 수집된 후 RAG용 Vertex AI 기반 LlamaIndex는 최상의 품질을 위해 일련의 변환을 실행하며 개발자가 사용 사례에 맞게 제어할 수 있는 파라미터가 있습니다.

이러한 파라미터에는 다음이 포함됩니다.

파라미터 설명
chunk_size 문서가 색인에 수집되면 청크로 분할됩니다. 토큰의 chunk_size 파라미터는 청크의 크기를 지정합니다. 기본 청크 크기는 토큰 1,024개입니다.
chunk_overlap 기본적으로, 문서는 관련성과 검색 품질을 개선하기 위해 일정한 수준의 중복이 있는 청크로 분할됩니다. 기본 청크 중복은 토큰 200개입니다.

청크 크기가 작을수록 임베딩이 더 정확하다는 의미입니다. 청크 크기가 클수록 임베딩이 더 일반적이지만 특정 세부정보가 놓칠 수 있습니다.

예를 들어 1,000단어가 아닌 200단어를 동일한 차원의 임베딩 배열로 변환하면 세부정보가 손실될 수 있습니다. 또한 모델 컨텍스트 길이 제한을 고려할 때의 좋은 예시입니다. 큰 청크는 작은 창 모델에 적합하지 않습니다.

검색 파라미터

다음 표에는 검색 파라미터가 포함되어 있습니다.

파라미터 설명
similarity_top_k 검색되는 최대 컨텍스트 수를 제어합니다.
vector_distance_threshold 거리가 기준점보다 작은 컨텍스트만 고려됩니다.

색인 관리

코퍼스는 문서 컬렉션 또는 정보 소스입니다. 이 컬렉션을 색인이라고도 합니다. 그런 다음 색인을 쿼리하여 LLM 생성을 위한 관련 컨텍스트를 검색할 수 있습니다. 색인을 처음 만들 때는 프로세스에 추가 시간이 1분 정도 걸릴 수 있습니다. 동일한 Google Cloud 프로젝트 내에서 색인을 더 많이 만들려면 프로세스 시간이 단축됩니다.

지원되는 색인 작업은 다음과 같습니다.

코퍼스에 대한 동시 작업은 지원되지 않습니다. 자세한 내용은 RAG API 참조를 확인하세요.

파일 관리

지원되는 파일 작업은 다음과 같습니다.

자세한 내용은 RAG API 참조를 확인하세요.

다음 단계