Embasamento com o Elasticsearch

Nesta página, explicamos como usar a instância do Elasticsearch para fundamentar seus dados.

Como usar o Gemini com o Elasticsearch

O esquema envolve o uso de conjuntos de dados públicos e particulares para fornecer contexto e fatos para fundamentar as respostas do modelo de linguagem grande (LLM). Ao usar o Elasticsearch, você pode aproveitar seus índices atuais para melhorar a qualidade e a confiabilidade da saída do Gemini, reduzindo as alucinações e garantindo que as respostas sejam relevantes para seus dados. Isso permite criar aplicativos RAG poderosos, como:

  • Resumos de pesquisa generativos
  • Chatbots de perguntas e respostas com dados corporativos
  • Agentes baseados nos seus dados

É possível fundamentar uma resposta em até 10 fontes de dados de uma só vez. É possível combinar o embasamento com o Elasticsearch e o Embasamento com a Pesquisa Google para conectar o modelo ao conhecimento mundial, a uma ampla variedade de tópicos possíveis ou a informações atualizadas na Internet.

Modelos compatíveis

Os seguintes modelos são compatíveis com o Elasticsearch com entrada de texto apenas:

Configurar um modelo de pesquisa no Elasticsearch

Esta seção explica como usar a instância do Elasticsearch para fundamentar os dados armazenados nela.

Práticas recomendadas

Para ter as melhores respostas, use estes princípios ao criar um modelo de pesquisa:

  • Inclua apenas dados relevantes e úteis. Por exemplo, em um catálogo de produtos, especificar um URL de imagem pode não ajudar o LLM a responder às solicitações sobre as propriedades do produto, a menos que a solicitação exija especificamente um URL. Da mesma forma, evite gerar vetores de embedding.

  • O embasamento remove os resultados do Elasticsearch com baixa relevância para seus comandos. Forneça um número maior de resultados do Elasticsearch para capturar todo o contexto relevante.

  • Os dados dos resultados podem estar em um campo ou espalhados por vários.

Modelos de amostra

Você pode usar seus modelos de pesquisa. No entanto, recomendamos que você use o modelo genérico de pesquisa kNN com o Elasticsearch. Para outros modelos de pesquisa, consulte o repositório do GitHub.

Essa pesquisa semântica com a Vertex AI é uma pesquisa kNN genérica.

    PUT _scripts/google-template-knn-multioutput
    {
      "script": {
        "lang": "mustache",
        "source": {
          "_source": {
            "excludes": [ "title_embedding", "description_embedding", "images"]
          },
            "size": "num_hits",
              "knn" : [
              {
                "field": "description_embedding",
                "k": 5,
                "num_candidates": 10,
                "query_vector_builder": {
                  "text_embedding": {
                    "model_id": "googlevertexai_embeddings_004",
                    "model_text": "query"
                  }
                },
                "boost": 0.4
              },
              {
                "field": "title_embedding",
                "k": 5,
                "num_candidates": 10,
                "query_vector_builder": {
                  "text_embedding": {
                    "model_id": "googlevertexai_embeddings_004",
                    "model_text": "query"
                }
              },
              "boost": 0.6
              }
              ]
        }
      }
    }

Gerar respostas com base no Elasticsearch

Console

Para usar o Elasticsearch no console do Google Cloud, faça o seguinte:

  1. Acesse o Vertex AI Studio e a página Criar comando.

    Acessar "Criar comando"

  2. No painel Settings, para aterrar seus dados, clique no botão Grounding: Your data.

  3. No painel Customize Grounding, selecione Elasticsearch.

  4. Insira o endpoint no campo Endpoint do Elasticsearch.

  5. Insira a chave de API no campo Chave de API do Elasticsearch.

  6. Insira o índice no campo Índice do Elasticsearch.

  7. Insira o modelo de pesquisa no campo Modelo de pesquisa do Elasticsearch.

  8. Ajuste o número de hits deslizando o controle deslizante Número de hits.

  9. Clique em Salvar.

  10. Insira seu comando.

  11. Clique em Enviar.

Entender a resposta

Se o comando do modelo embasar corretamente com os repositórios de dados do Elasticsearch usando o Vertex AI Studio ou a API, as respostas do modelo vão incluir metadados com citações e conteúdo de origem. Se a relevância da fonte for baixa ou as informações forem incompletas na resposta do modelo, os metadados podem não ser fornecidos, e a resposta do comando não será fundamentada.

REST

Esta seção explica como usar a API Vertex AI para embasar suas respostas de LLM.

Pré-requisitos

Antes de fundamentar as respostas do LLM com o Elasticsearch, você precisa fazer o seguinte:

  1. Ative a API Vertex AI: verifique se as duas APIs Vertex AI estão ativadas para o projeto Google Cloud .

  2. Instalar e fazer login na Google Cloud CLI: instale e inicialize a ferramenta de linha de comando da CLI gcloud.

  3. Configuração do Elasticsearch: use um cluster e um índice do Elasticsearch que você quer usar para o embasamento. Obtenha as seguintes informações da sua configuração do Elasticsearch:

    • Endpoint: o URL do cluster do Elasticsearch.
    • Nome do índice: o nome do índice que você quer pesquisar, como my-data-index.
    • Chave de API: uma chave de API que permite o acesso ao cluster do Elasticsearch. A chave de API precisa começar com o prefixo ApiKey.
  4. Criar um modelo de pesquisa do Elasticsearch: use uma origem de dados do Elasticsearch que use um modelo de referência que retorna dados de resultados para fundamentação.

Acesso à API

Use as instruções a seguir para conectar o Gemini à sua fonte de dados do Elasticsearch usando a API Vertex AI.

Preparar uma solicitação de geração com base

Para enviar um comando de texto e aplicá-lo ao Elasticsearch, envie uma solicitação POST para a API Vertex AI. No mínimo, você precisa fornecer o corpo da solicitação. Faça as seguintes substituições:

  • QUERY: o comando de texto para aterrar.
  • ELASTIC_SEARCH_ENDPOINT: o caminho de endpoint absoluto para o recurso do Elasticsearch a ser usado.
  • ELASTIC_SEARCH_API_KEY: a chave de API para o endpoint de dados do Elasticsearch.
  • INDEX_NAME: o nome do índice do Elasticsearch usado para aterramento.
  • SEARCH_TEMPLATE_NAME: o modelo de pesquisa do Elasticsearch usado para aterramento.
  • NUM_HITS: o número de resultados retornados da origem de dados do Elasticsearch e usados para embasamento.

Solicitar corpo JSON:

    {
      "contents": [
        {
          "role": "user",
          "parts": [
            {
              "text": "QUERY"
            }
          ]
        }
      ],
      "tools": [{
        "retrieval": {
          "externalApi": {
            "api_spec": "ELASTIC_SEARCH",
            "endpoint": "ELASTIC_SEARCH_ENDPOINT",
            "apiAuth": {
              "apiKeyConfig": {
                "apiKeyString": "ApiKey ELASTIC_SEARCH_API_KEY"
              }
            },
            "elasticSearchParams": {
              "index": "INDEX_NAME",
              "searchTemplate": "SEARCH_TEMPLATE_NAME",
              "numHits": "NUM_HITS",
            }
          }
        }
      }]
    }

Para mais informações sobre outros campos da API, como instruções do sistema e conversas com várias mensagens, consulte o guia para iniciantes da IA generativa.

Enviar a solicitação da API

Você pode salvar o corpo da solicitação em um arquivo chamado request.json. Em seguida, execute a solicitação POST da API e faça as seguintes substituições:

  curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json; charset=utf-8" \
      -d @request.json \
  "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:generateContent"

Você receberá uma resposta JSON semelhante a esta:

  {
    "candidates": [
      {
        "content": {
          "role": "model",
          "parts": [
            {
              "text": "Based on the information ..."
            }
          ]
        },
        "finishReason": "STOP",
        "safetyRatings": [ "..." ],
        "groundingMetadata": {
          "groundingChunks": [
            {
              "retrievedContext": {
                "text": "ipsum lorem ..."
              }
            },
            {...},
            {...},
          ],
          "groundingSupports": [
            {
              "segment": {
                "startIndex": 25,
                "endIndex": 147,
                "text": "ipsum lorem ..."
              },
              "groundingChunkIndices": [1,2],
              "confidenceScores": [0.6626542, 0.82018316],
            },
          ],
        },
      }
    ],
  }

Entender a resposta

A resposta das duas APIs inclui o texto gerado pelo LLM, que é chamado de candidato. Se o comando do modelo for atribuído à sua fonte de dados do Elasticsearch, as respostas vão incluir metadados de fundamentação, que identificam as partes da resposta que foram derivadas dos seus dados do Elasticsearch. No entanto, há vários motivos para esses metadados não serem fornecidos, e a resposta ao comando não será embasada. Esses motivos incluem baixa relevância de fonte ou informações incompletas na resposta do modelo.

Confira a seguir um detalhamento dos dados de saída:

  • Função: indica o remetente da resposta fundamentada. Como a resposta sempre contém texto com embasamento, o papel é sempre model.
  • Texto: a resposta com base gerada pelo LLM.
  • Metadados de aterramento: informações sobre a fonte de aterramento, que contém os seguintes elementos:
    • Chunks de fundamentação: uma lista de resultados do seu índice do Elasticsearch que oferece suporte à resposta.
    • Suportes de fundamentação: informações sobre uma afirmação específica na resposta que podem ser usadas para mostrar citações:
    • Segmento: a parte da resposta do modelo que é justificada por um fragmento de base.
    • Índice do bloco de aterramento: o índice dos blocos de aterramento na lista de blocos de aterramento que corresponde a essa declaração.
    • Pontuações de confiança: um número de 0 a 1 que indica o nível de embasamento da afirmação no conjunto fornecido de trechos de embasamento.

A seguir