Plug-in da Vertex AI

O plug-in da Vertex AI fornece interfaces para vários serviços de IA:

Instalação

npm i --save @genkit-ai/vertexai

Se você quiser executar localmente fluxos que usam esse plug-in, também precisará do ferramenta CLI do Google Cloud instalada.

Configuração

Para usar esse plug-in, especifique-o ao chamar configureGenkit():

import { vertexAI } from '@genkit-ai/vertexai';

export default configureGenkit({
  plugins: [
    vertexAI({ projectId: 'your-cloud-project', location: 'us-central1' }),
  ],
  // ...
});

O plug-in exige que você especifique o ID do projeto do Google Cloud, a região para a qual você quer fazer solicitações da API Vertex, e as credenciais do seu projeto do Google Cloud.

  • É possível especificar o ID do projeto do Google Cloud definindo projectId na configuração vertexAI() ou definindo a variável de ambiente GCLOUD_PROJECT. Se você estiver executando seu fluxo em um ambiente do Google Cloud (Cloud Functions, Cloud Run e assim por diante), GCLOUD_PROJECT é definido automaticamente como ID do projeto do ambiente.

  • É possível especificar o local da API definindo location na configuração vertexAI() ou definindo a variável de ambiente GCLOUD_LOCATION.

  • Para fornecer credenciais de API, você precisa configurar o Application Default Credentials do Google Cloud.

    1. Para especificar suas credenciais:

      • Se você estiver executando seu fluxo em um ambiente do Google Cloud (Cloud Functions, Cloud Run e outros), isso é definido automaticamente.

      • No ambiente de desenvolvimento local, faça isso executando o seguinte:

      gcloud auth application-default login
    2. Além disso, confirme se a conta recebeu o papel do IAM de usuário da Vertex AI (roles/aiplatform.user). Consulte a documentação do controle de acesso da Vertex AI.

Uso

Modelos de IA generativa

Esse plug-in exporta estaticamente referências aos modelos de IA generativa compatíveis:

import { gemini15Flash, gemini15Pro, imagen2 } from '@genkit-ai/vertexai';

É possível usar essas referências para especificar qual modelo o generate() usa:

const llmResponse = await generate({
  model: gemini15Flash,
  prompt: 'What should I do when I visit Melbourne?',
});

Esse plug-in também oferece suporte a respostas de texto do Gemini usando a Pesquisa Google ou seus próprios dados.

Exemplo:

await generate({
  model: gemini15Flash,
  prompt: ...,
  config: {
    googleSearchRetrieval: {
      disableAttribution: true,
    }
    vertexRetrieval: {
      datastore: {
        projectId: 'your-cloud-project',
        location: 'us-central1',
        collection: 'your-collection',
      },
      disableAttribution: true,
    }
  }
})

Esse plug-in também exporta estaticamente uma referência para o modelo de embedding de texto do Gecko:

import { textEmbeddingGecko } from '@genkit-ai/vertexai';

Você pode usar esta referência para especificar qual incorporador é um indexador ou recuperador usa. Por exemplo, se você usar o Chroma DB:

configureGenkit({
  plugins: [
    chroma([
      {
        embedder: textEmbeddingGecko,
        collectionName: 'my-collection',
      },
    ]),
  ],
});

Ou você pode gerar uma incorporação diretamente:

// import { embed, EmbedderArgument } from '@genkit-ai/ai/embedder';
const embedding = await embed({
  embedder: textEmbeddingGecko,
  content: 'How many widgets do you have in stock?',
});

O modelo Imagen3 permite gerar imagens a partir de comandos do usuário:

import { imagen3 } from '@genkit-ai/vertexai';

const response = await generate({
  model: imagen3,
  output: { format: 'media' },
  prompt: 'a banana riding a bicycle',
});

return response.media();

Anthropic Claude 3 no Model Garden da Vertex AI

Se você tiver acesso aos modelos Claude 3 (haiku, sonnet ou opus) no Model Garden da Vertex AI, poderá usá-los com o Genkit.

Confira um exemplo de configuração para ativar modelos do Model Garden da Vertex AI:

import {
  vertexAI,
  claude3Haiku,
  claude3Sonnet,
  claude3Opus,
} from '@genkit-ai/vertexai';

export default configureGenkit({
  plugins: [
    vertexAI({
      location: 'us-central1',
      modelGarden: {
        models: [claude3Haiku, claude3Sonnet, claude3Opus],
      },
    }),
  ],
});

Em seguida, use-os como modelos normais:

const llmResponse = await generate({
  model: claude3Sonnet,
  prompt: 'What should I do when I visit Melbourne?',
});

Llama 3.1 405b no Model Garden da Vertex AI

Primeiro, ative o serviço da API Llama 3.1 no Modelo Garden da Vertex AI.

Confira um exemplo de configuração para o Llama 3.1 405b no plug-in da Vertex AI:

import { vertexAI, llama31 } from '@genkit-ai/vertexai';

export default configureGenkit({
  plugins: [
    vertexAI({
      location: 'us-central1',
      modelGarden: {
        models: [llama31],
      },
    }),
  ],
});

Em seguida, use-o como modelo normal:

const llmResponse = await generate({
  model: llama31,
  prompt: 'Write a function that adds two numbers together',
});

Avaliadores

Para usar os avaliadores da Avaliação rápida da Vertex AI, adicione um bloco evaluation à configuração do plug-in vertexAI.

import { vertexAI, VertexAIEvaluationMetricType } from '@genkit-ai/vertexai';

export default configureGenkit({
  plugins: [
    vertexAI({
      projectId: 'your-cloud-project',
      location: 'us-central1',
      evaluation: {
        metrics: [
          VertexAIEvaluationMetricType.SAFETY,
          {
            type: VertexAIEvaluationMetricType.ROUGE,
            metricSpec: {
              rougeType: 'rougeLsum',
            },
          },
        ],
      },
    }),
  ],
  // ...
});

A configuração acima adiciona avaliadores para as métricas Safety e ROUGE. O exemplo mostra duas abordagens: a métrica Safety usa a especificação padrão, enquanto a métrica ROUGE fornece uma especificação personalizada que define o tipo de indicador como rougeLsum.

Os dois avaliadores podem ser executados usando o comando genkit eval:run com um conjunto de dados compatível, ou seja, um conjunto com os campos output e reference. O avaliador Safety também pode ser executado usando o comando genkit eval:flow -e vertexai/safety, já que ele só exige um output.

Indexadores e recuperadores

O plug-in da Vertex AI do Genkit inclui implementações de indexador e retriever com suporte do serviço de pesquisa de vetor da Vertex AI.

Consulte a página Geração aumentada de recuperação para saber como os indexadores e retrievers são usados em uma implementação de RAG.)

O serviço de pesquisa de vetores da Vertex AI é um índice de documentos que funciona junto com armazenamento de documentos de sua escolha: o armazenamento de documentos contém o conteúdo de documentos, e o índice de Pesquisa vetorial da Vertex AI contém, para cada documento, a incorporação de vetor e uma referência ao documento no armazenamento de documentos. Depois que seus documentos forem indexados pelo serviço de pesquisa de vetor da Vertex AI, ele poderá responder a consultas de pesquisa, produzindo listas de índices na sua loja de documentos.

As implementações do indexador e do recuperador fornecidas pelo plug-in da Vertex AI usam o Cloud Firestore ou o BigQuery como armazenamento de documentos. O plug-in também inclui interfaces que podem ser implementadas para oferecer suporte a outros armazenamentos de documentos.

Para usar a Vertex AI Vector Search:

  1. Escolha um modelo de embedding. Esse modelo é responsável por criar e embeddings do texto. Os usuários avançados podem usar um modelo de incorporação otimizado para os conjuntos de dados específicos, mas, para a maioria dos usuários, o modelo text-embedding-004 da Vertex AI é uma boa escolha para textos em inglês, e o text-multilingual-embedding-002 é bom para textos multilíngues.

  2. Na Pesquisa Vetorial do console do Google Cloud, crie um índice. As configurações mais importantes são:

    • Dimensões: especifique a dimensionalidade dos vetores produzidos pelo modelo de embedding escolhido. Os modelos text-embedding-004 e text-multilingual-embedding-002 produzem vetores de 768 dimensões.

    • Método de atualização:selecione as atualizações de streaming.

    Depois de criar o índice, implante-o em um endpoint padrão (público).

  3. Receba um indexador e um extrator de documentos para o repositório de documentos que você quer usar:

    Cloud Firestore

    import {
      getFirestoreDocumentIndexer,
      getFirestoreDocumentRetriever
    } from '@genkit-ai/vertexai';
    
    import { initializeApp } from 'firebase-admin/app';
    import { getFirestore } from 'firebase-admin/firestore';
    
    initializeApp({ projectId: PROJECT_ID });
    const db = getFirestore();
    
    const firestoreDocumentRetriever: DocumentRetriever =
      getFirestoreDocumentRetriever(db, FIRESTORE_COLLECTION);
    const firestoreDocumentIndexer: DocumentIndexer =
      getFirestoreDocumentIndexer(db, FIRESTORE_COLLECTION);
    

    BigQuery

    import {
      getBigQueryDocumentIndexer,
      getBigQueryDocumentRetriever,
    } from '@genkit-ai/vertexai';
    import { BigQuery } from '@google-cloud/bigquery';
    
    const bq = new BigQuery({ projectId: PROJECT_ID });
    
    const bigQueryDocumentRetriever: DocumentRetriever =
      getBigQueryDocumentRetriever(bq, BIGQUERY_TABLE, BIGQUERY_DATASET);
    const bigQueryDocumentIndexer: DocumentIndexer =
      getBigQueryDocumentIndexer(bq, BIGQUERY_TABLE, BIGQUERY_DATASET);
    

    Outro

    Para oferecer suporte a outras lojas de documentos, você pode fornecer suas próprias implementações de DocumentRetriever e DocumentIndexer:

    const myDocumentRetriever: DocumentRetriever = async (neighbors: Neighbor[]) => {
      // Return the documents referenced by `neighbors`.
      // ...
    }
    const myDocumentIndexer: DocumentIndexer = async (documents: Document[]) => {
      // Add `documents` to storage.
      // ...
    }
    

    Para conferir um exemplo, consulte Sample AI Plugin Retriever e Indexer com arquivo local.

  4. Adicione um bloco vectorSearchOptions à configuração do plug-in vertexAI:

    import { configureGenkit } from '@genkit-ai/core';
    import { vertexAI, textEmbedding004 } from '@genkit-ai/vertexai';
    
    configureGenkit({
      plugins: [
        vertexAI({
          projectId: PROJECT_ID,
          location: LOCATION,
          vectorSearchOptions: [
            {
              indexId: VECTOR_SEARCH_INDEX_ID,
              indexEndpointId: VECTOR_SEARCH_INDEX_ENDPOINT_ID,
              deployedIndexId: VECTOR_SEARCH_DEPLOYED_INDEX_ID,
              publicDomainName: VECTOR_SEARCH_PUBLIC_DOMAIN_NAME,
              documentRetriever: firestoreDocumentRetriever,
              documentIndexer: firestoreDocumentIndexer,
              embedder: textEmbedding004,
            },
          ],
        }),
      ],
    });
    

    Informe o incorporador escolhido na primeira etapa e o indexador e o extrator de documentos criados na etapa anterior.

    Para configurar o plug-in para usar o índice de pesquisa vetorial criado anteriormente, é necessário fornecer vários valores, que podem ser encontrados na seção "Pesquisa vetorial" do console do Google Cloud:

    • indexId: listado na guia Índices
    • indexEndpointId: listado na guia Endpoints do índice
    • deployedIndexId e publicDomainName: listados no "Índice implantado" informações" que pode ser aberta clicando no nome do índice implantado em qualquer uma das guias mencionadas anteriormente
  5. Agora que tudo está configurado, importe as referências do retriever e do indexador do plug-in:

    import {
      vertexAiIndexerRef,
      vertexAiRetrieverRef,
    } from '@genkit-ai/vertexai';
    

    Transmita as referências a index() e retrieve():

    await index({
      indexer: vertexAiIndexerRef({
        indexId: VECTOR_SEARCH_INDEX_ID,
      }),
      documents,
    });
    
    const res = await retrieve({
      retriever: vertexAiRetrieverRef({
        indexId: VECTOR_SEARCH_INDEX_ID,
      }),
      query: queryDocument,
    });
    

Confira os exemplos de código para: