Плагин Vertex AI

Плагин Vertex AI предоставляет интерфейсы к нескольким службам AI:

Установка

npm i --save @genkit-ai/vertexai

Если вы хотите локально запускать потоки, использующие этот плагин, вам также необходимо установить инструмент Google Cloud CLI .

Конфигурация

Чтобы использовать этот плагин, укажите его при вызове configureGenkit() :

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

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

Плагин требует от вас указать идентификатор вашего проекта Google Cloud, регион , к которому вы хотите отправлять запросы Vertex API, и учетные данные вашего проекта Google Cloud.

  • Вы можете указать идентификатор своего проекта Google Cloud, задав projectId в конфигурации vertexAI() или установив переменную среды GCLOUD_PROJECT . Если вы запускаете поток из среды Google Cloud (Cloud Functions, Cloud Run и т. д.), для GCLOUD_PROJECT автоматически устанавливается идентификатор проекта среды.

  • Вы можете указать местоположение API, задав location в конфигурации vertexAI() или установив переменную среды GCLOUD_LOCATION .

  • Чтобы предоставить учетные данные API, вам необходимо настроить учетные данные Google Cloud Application по умолчанию.

    1. Чтобы указать свои учетные данные:

      • Если вы запускаете поток из среды Google Cloud (Cloud Functions, Cloud Run и т. д.), это устанавливается автоматически.

      • В вашей локальной среде разработки сделайте это, запустив:

      gcloud auth application-default login
      
    2. Кроме того, убедитесь, что учетной записи предоставлена ​​роль IAM пользователя Vertex AI ( roles/aiplatform.user ). См. документацию по контролю доступа Vertex AI.

Использование

Генеративные модели искусственного интеллекта

Этот плагин статически экспортирует ссылки на поддерживаемые генеративные модели искусственного интеллекта:

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

Вы можете использовать эти ссылки, чтобы указать, какую модель использует generate() :

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

Этот плагин также поддерживает обоснование текстовых ответов Gemini с помощью поиска Google или ваших собственных данных .

Пример:

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

Этот плагин также статически экспортирует ссылку на модель встраивания текста Gecko:

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

Эту ссылку можно использовать, чтобы указать, какое средство внедрения использует индексатор или средство извлечения. Например, если вы используете Chroma DB:

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

Или вы можете создать встраивание напрямую:

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

Модель Imagen3 позволяет генерировать изображения из командной строки пользователя:

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

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

return response.media();

Антропный Клод 3 в саду моделей Vertex AI

Если у вас есть доступ к моделям Claude 3 ( haiku , sonnet или opus ) в Vertex AI Model Garden, вы можете использовать их с Genkit.

Вот пример конфигурации для включения моделей Vertex AI Model Garden:

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

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

Затем используйте их как обычные модели:

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

Лама 3.1 405b в саду моделей Vertex AI

Сначала вам нужно включить службу API Llama 3.1 в Vertex AI Model Garden.

Вот пример конфигурации для Llama 3.1 405b в плагине Vertex AI:

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

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

Затем используйте его как обычные модели:

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

оценщики

Чтобы использовать оценщики из Vertex AI Rapid Evaluation, добавьте блок evaluation в конфигурацию плагина 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',
            },
          },
        ],
      },
    }),
  ],
  // ...
});

В приведенной выше конфигурации добавляются оценщики для метрик Safety и ROUGE . В примере показаны два подхода: метрика Safety использует спецификацию по умолчанию, тогда как метрика ROUGE предоставляет настраиваемую спецификацию, которая устанавливает тип румян на rougeLsum .

Оба оценщика можно запустить с помощью команды genkit eval:run с совместимым набором данных: то есть набором данных с полями output и reference . Оценщик Safety также можно запустить с помощью команды genkit eval:flow -e vertexai/safety поскольку для этого требуется только output .

Индексаторы и ретриверы

Плагин Genkit Vertex AI включает реализации индексатора и ретривера, поддерживаемые службой векторного поиска Vertex AI.

(См. страницу генерации с расширенным поиском, чтобы узнать, как индексаторы и ретриверы используются в реализации RAG.)

Служба векторного поиска Vertex AI — это индекс документов, который работает вместе с выбранным вами хранилищем документов: хранилище документов содержит содержимое документов, а индекс векторного поиска Vertex AI содержит для каждого документа его векторное встраивание и ссылку на документ в хранилище документов. После того как ваши документы проиндексированы службой Vertex AI Vector Search, она может отвечать на поисковые запросы, создавая списки индексов в вашем хранилище документов.

Реализации индексатора и ретривера, предоставляемые плагином Vertex AI, используют Cloud Firestore или BigQuery в качестве хранилища документов. Плагин также включает в себя интерфейсы, которые вы можете реализовать для поддержки других хранилищ документов.

Чтобы использовать векторный поиск Vertex AI:

  1. Выберите модель внедрения. Эта модель отвечает за создание векторных вложений из текста. Опытные пользователи могут использовать модель внедрения, оптимизированную для их конкретных наборов данных, но для большинства пользователей модель text-embedding-004 от Vertex AI является хорошим выбором для английского текста, а модель text-multilingual-embedding-002 хороша для многоязычного текста.

  2. В разделе «Векторный поиск» консоли Google Cloud создайте новый индекс. Наиболее важные настройки:

    • Размеры: укажите размерность векторов, создаваемых выбранной вами моделью внедрения. Модели text-embedding-004 и text-multilingual-embedding-002 создают векторы размером 768 измерений.

    • Метод обновления: выберите потоковые обновления.

    После создания индекса разверните его в стандартной (общедоступной) конечной точке.

  3. Получите индексатор и средство извлечения документов для хранилища документов, которое вы хотите использовать:

    Облачный пожарный магазин

    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);
    

    Большой запрос

    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);
    

    Другой

    Для поддержки других хранилищ документов вы можете предоставить свои собственные реализации DocumentRetriever и DocumentIndexer :

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

    Пример см. в разделе «Пример извлечения и индексатора плагинов Vertex AI с локальным файлом» .

  4. Добавьте блок vectorSearchOptions в конфигурацию плагина 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,
            },
          ],
        }),
      ],
    });
    

    Укажите средство внедрения, которое вы выбрали на первом шаге, а также индексатор и средство извлечения документов, созданное на предыдущем шаге.

    Чтобы настроить плагин для использования индекса векторного поиска, созданного вами ранее, вам необходимо указать несколько значений, которые вы можете найти в разделе «Векторный поиск» консоли Google Cloud:

    • indexId : указан на вкладке Индексы .
    • indexEndpointId : указан на вкладке «Конечные точки индекса» .
    • deployedIndexId и publicDomainName : перечислены на странице «Информация о развернутом индексе», которую можно открыть, щелкнув имя развернутого индекса на любой из вкладок, упомянутых ранее.
  5. Теперь, когда все настроено, импортируйте ссылки на ретривер и индексатор из плагина:

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

    Передайте ссылки на index() и retrieve() :

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

См. примеры кода для: