Visão geral do LlamaIndex na Vertex AI para RAG

O LlamaIndex é um framework de dados para desenvolver aplicativos de modelo de linguagem grande (LLM, na sigla em inglês) aumentados por contexto. A ampliação de contexto ocorre quando você aplica um LLM aos seus dados. Isso implementa a geração de recuperação aumentada (RAG, na sigla em inglês).

Um problema comum com os LLMs é que eles não entendem o conhecimento particular, ou seja, os dados da sua organização. Com o LlamaIndex na Vertex AI para RAG, é possível enriquecer o contexto do LLM com mais informações particulares, porque o modelo pode reduzir a alucinação artificial e responder a perguntas com mais precisão.

Ao combinar outras fontes de conhecimento com o conhecimento atual que os LLMs têm, um contexto melhor é fornecido. O contexto aprimorado com a consulta melhora a qualidade da resposta do LLM.

Os conceitos a seguir são fundamentais para entender o LlamaIndex na Vertex AI. Esses conceitos são listados na ordem do processo de geração aumentada por recuperação (RAG, na sigla em inglês).

  1. Ingestão de dados: receba dados de diferentes fontes. Por exemplo, arquivos locais, Cloud Storage e Google Drive.

  2. Transformação de dados: conversão dos dados na preparação para indexação. Por exemplo, os dados são divididos em partes.

  3. Embedding: representações numéricas de palavras ou partes de texto. Esses números captam o significado semântico e o contexto do texto. Palavras ou textos semelhantes ou relacionados costumam ter embeddings semelhantes, o que significa que estão mais próximos no espaço vetorial de alta dimensão.

  4. Indexação de dados: o LlamaIndex na Vertex AI para RAG cria um índice chamado corpus. O índice estrutura a base de conhecimento para que seja otimizado para pesquisa. Por exemplo, o índice é como um índice detalhado de um grande livro de referência.

  5. Recuperação: quando um usuário faz uma pergunta ou fornece uma solicitação, o componente de recuperação no LlamaIndex na Vertex AI para RAG pesquisa na base de conhecimento para encontrar informações relevantes para a consulta. ,

  6. Geração: as informações recuperadas se tornam o contexto adicionado à consulta do usuário original como um guia para que o modelo de IA generativa gere respostas factuais baseadas e relevantes.

Nesta página, mostramos como usar o LlamaIndex na Vertex AI para RAG e fornecemos exemplos em Python para demonstrar como usar a API RAG.

Para informações sobre os limites de tamanho de arquivo, consulte Tipos de documentos compatíveis. Para informações sobre cotas relacionadas ao LlamaIndex na Vertex AI para RAG, consulte LlamaIndex na Vertex AI para cotas RAG. Para informações sobre a personalização de parâmetros, consulte Parâmetros de recuperação.

Executar o LlamaIndex na Vertex AI para RAG usando o SDK da Vertex AI

Para usar LlamaIndex na Vertex AI para RAG, faça o seguinte:

  1. Instalar o SDK da Vertex AI para Python.

  2. Execute este comando no console do Google Cloud para configurar seu projeto.

    gcloud config set {project}

  3. Execute este comando para autorizar o login.

    gcloud auth application-default login

  4. Copie e cole este exemplo de código no console do Google Cloud para executar o LlamaIndex na Vertex AI.

Python

Para saber como instalar o SDK da Vertex AI para Python, consulte Instalar o SDK da Vertex AI para Python. Para mais informações, consulte a documentação de referência da API Python.

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 = ["http://drive.go888ogle.com.fqhub.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)

Modelos compatíveis

Os modelos a seguir e as respectivas versões compatíveis com LlamaIndex na Vertex AI incluem:

Modelo Versão
Gemini Flash1.5 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

Tipos de documentos aceitos

Documentos somente de texto são compatíveis, incluindo os seguintes tipos de arquivo com os limites de tamanho:

Tipo de arquivo Limite de tamanho do arquivo
Arquivos do Documentos Google: 10 MB quando exportados do Google Workspace
Desenhos do Google 10 MB quando exportados do Google Workspace
Apresentações Google 10 MB quando exportados do Google Workspace
Arquivo HTML 10 MB
Arquivo JSON 1 MB
Arquivo Markdown 10 MB
Slides do Microsoft PowerPoint (arquivo PPTX) 10 MB
Documentos do Microsoft Word (arquivo DOCX) 10 MB
Arquivo PDF 50 MB
Arquivo de texto 10 MB

Usar o LlamaIndex na Vertex AI para RAG com outros tipos de documentos é possível, mas pode gerar respostas de qualidade inferior.

Fontes de dados compatíveis

Há três fontes de dados compatíveis:

  • Um upload de arquivo único usando upload_file (até 25 MB), que é uma chamada síncrona.

  • Importe arquivos do Cloud Storage.

  • Importe um diretório do Google Drive.

    A conta de serviço precisa receber as permissões corretas para importar arquivos. Caso contrário, nenhum arquivo será importado e nenhuma mensagem de erro será exibida. Para mais informações sobre os limites de tamanho de arquivo, consulte Tipos de documentos compatíveis.

    Para autenticar e conceder permissões, faça o seguinte:

    1. Acesse a página do IAM do projeto do Google Cloud.
    2. Selecione Incluir concessão de papel fornecida pelo Google.
    3. Pesquise a conta de serviço do Agente de serviço de dados do RAG da Vertex AI.
    4. Clique em Compartilhar na pasta do drive e compartilhe com a conta de serviço.
    5. Conceda a permissão Viewer à conta de serviço na sua pasta ou arquivo do Google Drive. O ID do recurso do Google Drive pode ser encontrado no URL da Web.

Para mais informações, consulte a referência da API RAG.

Transformações de dados com suporte

Depois que um documento é ingerido, o LlamaIndex na Vertex AI para RAG executa um conjunto de transformações para a melhor qualidade. Há parâmetros que os desenvolvedores podem controlar para os casos de uso deles.

Esses parâmetros incluem o seguinte:

Parâmetro Descrição
chunk_size Quando os documentos são ingeridos em um índice, eles são divididos em partes. O parâmetro chunk_size (em tokens) especifica o tamanho do bloco. O tamanho do bloco padrão é de 1.024 tokens.
chunk_overlap Por padrão, os documentos são divididos em blocos com uma certa quantidade de sobreposição para melhorar a relevância e a qualidade de recuperação. A sobreposição de blocos padrão é de 200 tokens.

Um tamanho de bloco menor significa que os embeddings são mais precisos. Um tamanho de bloco maior significa que os embeddings podem ser mais gerais, mas podem perder detalhes específicos.

Por exemplo, se você converter 200 palavras em vez de 1.000 palavras em uma matriz de incorporação da mesma dimensão, você poderá perder detalhes. Esse também é um bom exemplo de quando você considera o limite de tamanho do contexto do modelo. Um bloco grande pode não caber em um modelo de janela pequena.

Parâmetros de recuperação

A tabela a seguir inclui os parâmetros de recuperação:

Parâmetro Descrição
similarity_top_k Controla o número máximo de contextos recuperados.
vector_distance_threshold Somente contextos com uma distância menor que o limite são considerados.

Gerenciamento de índice

Um corpus é uma coleção de documentos ou fonte de informações. Esse conjunto também é chamado de índice. O índice pode ser consultado para recuperar contextos relevantes para a geração do LLM. Ao criar um índice pela primeira vez, o processo pode levar um minuto a mais. Para mais criações de índices no mesmo projeto do Google Cloud, o processo leva menos tempo.

As operações de índice a seguir são compatíveis:

Não há suporte para operações simultâneas em corpora. Para mais informações, consulte a referência da API RAG.

Gerenciamento de arquivos

As seguintes operações de arquivo são compatíveis:

Para mais informações, consulte a referência da API RAG.

A seguir