Usar a Vertex AI para Pesquisa como um back-end de recuperação usando o mecanismo RAG da Vertex AI

Esta página apresenta a integração da Vertex AI Search com o mecanismo de RAG da Vertex AI.

A Vertex AI para Pesquisa oferece uma solução para recuperar e gerenciar dados nos seus aplicativos RAG da Vertex AI. Ao usar a Vertex AI para Pesquisa como seu back-end de recuperação, você pode melhorar a performance, a capacidade de escalonamento e a facilidade de integração.

  • Melhoria na performance e na capacidade de escalonamento: a Vertex AI Search foi projetada para processar grandes volumes de dados com latência excepcionalmente baixa. Isso significa tempos de resposta mais rápidos e melhor desempenho para seus aplicativos RAG, especialmente ao lidar com bases de conhecimento complexas ou extensas.

  • Gerenciamento de dados simplificado: importe dados de várias fontes, como sites, conjuntos de dados do BigQuery e buckets do Cloud Storage, que podem agilizar seu processo de ingestão de dados.

  • Integração perfeita: a Vertex AI oferece integração integrada com a Vertex AI para Pesquisa, que permite selecionar a Vertex AI para Pesquisa como o back-end do corpus do seu aplicativo RAG. Isso simplifica o processo de integração e ajuda a garantir a compatibilidade ideal entre os componentes.

  • Melhoria na qualidade da saída do LLM: ao usar os recursos de recuperação da Vertex AI para Pesquisa, você pode garantir que seu aplicativo de RAG recupere as informações mais relevantes do seu corpus, o que leva a saídas geradas pelo LLM mais precisas e informativas.

A Vertex AI Search reúne a recuperação profunda de informações, o processamento de linguagem natural e os recursos mais recentes no processamento de modelos de linguagem grandes (LLMs), que ajudam a entender a intenção do usuário e retornar os resultados mais relevantes para o usuário.

Com a Vertex AI para Pesquisa, é possível criar um aplicativo de pesquisa com a qualidade do Google usando dados que você controla.

Para configurar uma pesquisa da Vertex AI, faça o seguinte:

  1. Crie um repositório de dados de pesquisa.
  2. Crie um app de pesquisa.

Usar a Vertex AI para Pesquisa como um back-end de recuperação para o mecanismo RAG da Vertex AI

Depois de configurar a Vertex AI para Pesquisa, siga estas etapas para defini-la como o back-end de recuperação do aplicativo RAG.

Definir a Vertex AI para Pesquisa como o back-end de recuperação para criar um corpus de RAG

Estes exemplos de código mostram como configurar a Pesquisa da Vertex AI como o back-end de recuperação de um corpus RAG.

REST

Para usar a linha de comando para criar um corpus RAG, faça o seguinte:

  1. Criar um corpus RAG

    Substitua as seguintes variáveis usadas no exemplo de código:

    • PROJECT_ID: o ID do projeto Google Cloud .
    • LOCATION: a região para processar a solicitação.
    • DISPLAY_NAME: o nome de exibição do corpus de RAG que você quer criar.
    • ENGINE_NAME: o nome completo do recurso do mecanismo de pesquisa da Vertex AI ou do repositório de pesquisa da Vertex AI.
    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/ragCorpora" \
    -d '{
      "display_name" : "DISPLAY_NAME",
      "vertex_ai_search_config" : {
        "serving_config": "ENGINE_NAME/servingConfigs/default_search"
      }
    }'
    
  2. Monitorar o progresso

    Substitua as seguintes variáveis usadas no exemplo de código:

    • PROJECT_ID: o ID do projeto Google Cloud .
    • LOCATION: a região para processar a solicitação.
    • OPERATION_ID: o ID da operação de criação do corpus da RAG.
    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID"
    

Python

Antes de testar esse exemplo, siga as instruções de configuração para Python no Guia de início rápido da Vertex AI sobre como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Vertex AI para Python.

Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.


from vertexai.preview import rag
import vertexai

# TODO(developer): Update and un-comment below lines
# PROJECT_ID = "your-project-id"
# vertex_ai_search_engine_name = "projects/{PROJECT_ID}/locations/{LOCATION}/collections/default_collection/engines/{ENGINE_ID}"
# display_name = "test_corpus"
# description = "Corpus Description"

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

# Configure Search
vertex_ai_search_config = rag.VertexAiSearchConfig(
    serving_config=f"{vertex_ai_search_engine_name}/servingConfigs/default_search",
)

corpus = rag.create_corpus(
    display_name=display_name,
    description=description,
    vertex_ai_search_config=vertex_ai_search_config,
)
print(corpus)
# Example response:
# RagCorpus(name='projects/1234567890/locations/us-central1/ragCorpora/1234567890',
# display_name='test_corpus', description='Corpus Description'.
# ...

Extrair contextos usando a API RAG

Após a criação do corpus de RAG, os contextos relevantes podem ser recuperados da Vertex AI Search pela API RetrieveContexts.

REST

Este exemplo de código demonstra como recuperar contextos usando REST.

Substitua as seguintes variáveis usadas no exemplo de código:

  • PROJECT_ID: o ID do projeto Google Cloud .
  • LOCATION: a região para processar a solicitação.
  • RAG_CORPUS_RESOURCE: o nome do recurso do corpus RAG.

    Formato: projects/{project}/locations/{location}/ragCorpora/{rag_corpus}.

  • TEXT: o texto da consulta para receber contextos relevantes.
curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION:retrieveContexts" \
  -d '{
    "vertex_rag_store": {
      "rag_resources": {
        "rag_corpus": "RAG_CORPUS_RESOURCE"
      }
    },
    "query": {
      "text": "TEXT"
    }
  }'

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
import vertexai

# TODO(developer): Update and un-comment below lines
# PROJECT_ID = "your-project-id"
# corpus_name = "projects/[PROJECT_ID]/locations/us-central1/ragCorpora/[rag_corpus_id]"

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

response = rag.retrieval_query(
    rag_resources=[
        rag.RagResource(
            rag_corpus=corpus_name,
            # Optional: supply IDs from `rag.list_files()`.
            # rag_file_ids=["rag-file-1", "rag-file-2", ...],
        )
    ],
    text="Hello World!",
    similarity_top_k=10,  # Optional
    vector_distance_threshold=0.5,  # Optional
    # vector_search_alpha=0.5, # Optional - Only supported for Weaviate
)
print(response)
# Example response:
# contexts {
#   contexts {
#     source_uri: "gs://your-bucket-name/file.txt"
#     text: "....
#   ....

Gerar conteúdo usando a API Gemini da Vertex AI

REST

Para gerar conteúdo usando modelos do Gemini, faça uma chamada para a API GenerateContent da Vertex AI. Ao especificar o RAG_CORPUS_RESOURCE na solicitação, ele recupera automaticamente dados da Vertex AI para Pesquisa.

Substitua as seguintes variáveis usadas no exemplo de código:

  • PROJECT_ID: o ID do projeto Google Cloud .
  • LOCATION: a região para processar a solicitação.
  • MODEL_ID: modelo LLM para geração de conteúdo. Por exemplo, gemini-1.5-flash-002.
  • GENERATION_METHOD: método LLM para geração de conteúdo. Exemplo: generateContent, streamGenerateContent.
  • INPUT_PROMPT: o texto enviado ao LLM para geração de conteúdo. Tente usar uma instrução relevante para os documentos na Pesquisa da Vertex AI.
  • RAG_CORPUS_RESOURCE: o nome do recurso do corpus RAG. Formato: projects/{project}/locations/{location}/ragCorpora/{rag_corpus}.
  • SIMILARITY_TOP_K: opcional. O número de principais contextos a serem recuperados.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATION_METHOD" \
    -d '{
      "contents": {
        "role": "user",
        "parts": {
          "text": "INPUT_PROMPT"
        }
      },
      "tools": {
        "retrieval": {
          "disable_attribution": false,
          "vertex_rag_store": {
            "rag_resources": {
                "rag_corpus": "RAG_CORPUS_RESOURCE"
              },
            "similarity_top_k": SIMILARITY_TOP_K
          }
        }
      }
    }'
    

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

# TODO(developer): Update and un-comment below lines
# PROJECT_ID = "your-project-id"
# corpus_name = "projects/{PROJECT_ID}/locations/us-central1/ragCorpora/{rag_corpus_id}"

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

rag_retrieval_tool = Tool.from_retrieval(
    retrieval=rag.Retrieval(
        source=rag.VertexRagStore(
            rag_resources=[
                rag.RagResource(
                    rag_corpus=corpus_name,
                    # Optional: 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
        ),
    )
)

rag_model = GenerativeModel(
    model_name="gemini-1.5-flash-001", tools=[rag_retrieval_tool]
)
response = rag_model.generate_content("Why is the sky blue?")
print(response.text)
# Example response:
#   The sky appears blue due to a phenomenon called Rayleigh scattering.
#   Sunlight, which contains all colors of the rainbow, is scattered
#   by the tiny particles in the Earth's atmosphere....
#   ...

A seguir