Плагин Vertex AI

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

Установка

npm i --save @genkit-ai/vertexai

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

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

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

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

const ai = genkit({
  plugins: [
    vertexAI({ 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, imagen3 } from '@genkit-ai/vertexai';

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

const ai = genkit({
  plugins: [vertexAI({ location: 'us-central1' })],
});

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

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

Пример:

const ai = genkit({
  plugins: [vertexAI({ location: 'us-central1' })],
});

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

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

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

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

const ai = genkit({
  plugins: [
    chroma([
      {
        embedder: textEmbedding004,
        collectionName: 'my-collection',
      },
    ]),
  ],
});

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

const ai = genkit({
  plugins: [vertexAI({ location: 'us-central1' })],
});

const embedding = await ai.embed({
  embedder: textEmbedding004,
  content: 'How many widgets do you have in stock?',
});

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

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

const ai = genkit({
  plugins: [vertexAI({ location: 'us-central1' })],
});

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

return response.media();

и даже расширенное редактирование существующих изображений:

const ai = genkit({
  plugins: [vertexAI({ location: 'us-central1' })],
});

const baseImg = fs.readFileSync('base.png', { encoding: 'base64' });
const maskImg = fs.readFileSync('mask.png', { encoding: 'base64' });

const response = await ai.generate({
  model: imagen3,
  output: { format: 'media' },
  prompt: [
    { media: { url: `data:image/png;base64,${baseImg}` }},
    {
      media: { url: `data:image/png;base64,${maskImg}` },
      metadata: { type: 'mask' },
    },
    { text: 'replace the background with foo bar baz' },
  ],
  config: {
    editConfig: {
      editMode: 'outpainting',
    },
  },
});

return response.media();

Более подробную информацию о параметрах см. в документации модели Imagen .

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

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

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

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

const ai = genkit({
  plugins: [
    vertexAIModelGarden({
      location: 'us-central1',
      models: [claude3Haiku, claude3Sonnet, claude3Opus],
    }),
  ],
});

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

const llmResponse = await ai.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 { genkit } from 'genkit';
import { llama31, vertexAIModelGarden } from '@genkit-ai/vertexai/modelgarden';

const ai = genkit({
  plugins: [
    vertexAIModelGarden({
      location: 'us-central1',
      models: [llama31],
    }),
  ],
});

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

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

Модели Mistral в саду моделей Vertex AI

Если у вас есть доступ к моделям Mistral ( Mistral Large , Mistral Nemo или Codestral ) в Vertex AI Model Garden, вы можете использовать их с Genkit.

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

import { genkit } from 'genkit';
import {
  mistralLarge,
  mistralNemo,
  codestral,
  vertexAIModelGarden,
} from '@genkit-ai/vertexai/modelgarden';

const ai = genkit({
  plugins: [
    vertexAIModelGarden({
      location: 'us-central1',
      models: [mistralLarge, mistralNemo, codestral],
    }),
  ],
});

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

const llmResponse = await ai.generate({
  model: mistralLarge,
  prompt: 'Write a function that adds two numbers together',
  config: {
    version: 'mistral-large-2411', // Optional: specify model version
    temperature: 0.7,              // Optional: control randomness (0-1)
    maxOutputTokens: 1024,         // Optional: limit response length
    topP: 0.9,                     // Optional: nucleus sampling parameter
    stopSequences: ['###'],        // Optional: stop generation at sequences
  }
});

Модели поддерживают: - mistralLarge : новейшую большую модель Mistral с возможностью вызова функций - mistralNemo : оптимизирован для эффективности и скорости - codestral : специализирован для задач генерации кода

Каждая модель поддерживает потоковую передачу ответов и вызов функций:

const response = await ai.generateStream({
  model: mistralLarge,
  prompt: 'What should I cook tonight?',
  tools: ['recipe-finder'],
  config: {
    version: 'mistral-large-2411',
    temperature: 1,
  },
});

for await (const chunk of response.stream) {
  console.log(chunk.text);
}

оценщики

Чтобы использовать оценщики из Vertex AI Rapid Evaluation, добавьте evaluation блок в конфигурацию плагина vertexAI .

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

const ai = genkit({
  plugins: [
    vertexAIEvaluation({
      location: 'us-central1',
      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/vectorsearch';
    
    import { initializeApp } from 'firebase-admin/app';
    import { getFirestore } from 'firebase-admin/firestore';
    
    initializeApp({ projectId: PROJECT_ID });
    const db = getFirestore();
    
    const firestoreDocumentRetriever = getFirestoreDocumentRetriever(db, FIRESTORE_COLLECTION);
    const firestoreDocumentIndexer = getFirestoreDocumentIndexer(db, FIRESTORE_COLLECTION);
    

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

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

    Другой

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

    const myDocumentRetriever = async (neighbors) => {
      // Return the documents referenced by `neighbors`.
      // ...
    }
    const myDocumentIndexer = async (documents) => {
      // Add `documents` to storage.
      // ...
    }
    

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

  4. Добавьте блок vectorSearchOptions в конфигурацию плагина vertexAI :

    import { genkit } from 'genkit';
    import { textEmbedding004 } from '@genkit-ai/vertexai';
    import { vertexAIVectorSearch } from '@genkit-ai/vertexai/vectorsearch';
    
    const ai = genkit({
      plugins: [
        vertexAIVectorSearch({
          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. Теперь, когда все настроено, вы можете использовать индексатор и ретривер в своем приложении Genkit:

    import {
      vertexAiIndexerRef,
      vertexAiRetrieverRef,
    } from '@genkit-ai/vertexai/vectorsearch';
    
    // ... inside your flow function:
    
    await ai.index({
      indexer: vertexAiIndexerRef({
        indexId: VECTOR_SEARCH_INDEX_ID,
      }),
      documents,
    });
    
    const res = await ai.retrieve({
      retriever: vertexAiRetrieverRef({
        indexId: VECTOR_SEARCH_INDEX_ID,
      }),
      query: queryDocument,
    });
    

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

Кэширование контекста

Плагин Vertex AI Genkit поддерживает кэширование контекста , которое позволяет моделям повторно использовать ранее кэшированный контент для оптимизации использования токенов при работе с большими фрагментами контента. Эта функция особенно полезна для диалоговых потоков или сценариев, в которых модель последовательно ссылается на большой фрагмент контента в нескольких запросах.

Как использовать кэширование контекста

Чтобы включить кэширование контекста, убедитесь, что ваша модель его поддерживает. Например, gemini15Flash и gemini15Pro — модели, поддерживающие кэширование контекста, и вам нужно будет указать номер версии 001 .

Вы можете определить механизм кэширования в своем приложении следующим образом:

const ai = genkit({
  plugins: [googleAI()],
});

const llmResponse = await ai.generate({
  messages: [
    {
      role: 'user',
      content: [{ text: 'Here is the relevant text from War and Peace.' }],
    },
    {
      role: 'model',
      content: [
        {
          text: 'Based on War and Peace, here is some analysis of Pierre Bezukhov’s character.',
        },
      ],
      metadata: {
        cache: {
          ttlSeconds: 300, // Cache this message for 5 minutes
        },
      },
    },
  ],
  model: gemini15Flash,
  prompt: 'Describe Pierre’s transformation throughout the novel.',
});

В этой настройке: - messages : позволяет передавать историю разговоров. - metadata.cache.ttlSeconds : указывает время жизни (TTL) для кэширования определенного ответа.

Пример: использование больших текстов с контекстом

Для приложений, ссылающихся на длинные документы, таких как «Война и мир» или «Властелин колец» , вы можете структурировать свои запросы для повторного использования кэшированных контекстов:


const textContent = await fs.readFile('path/to/war_and_peace.txt', 'utf-8');

const llmResponse = await ai.generate({
  messages: [
    {
      role: 'user',
      content: [{ text: textContent }], // Include the large text as context
    },
    {
      role: 'model',
      content: [
        {
          text: 'This analysis is based on the provided text from War and Peace.',
        },
      ],
      metadata: {
        cache: {
          ttlSeconds: 300, // Cache the response to avoid reloading the full text
        },
      },
    },
  ],
  model: gemini15Flash,
  prompt: 'Analyze the relationship between Pierre and Natasha.',
});

Преимущества кэширования контекста

  1. Улучшенная производительность : уменьшает необходимость повторной обработки больших входных данных.
  2. Экономическая эффективность : уменьшает использование API для избыточных данных, оптимизируя потребление токенов.
  3. Улучшенная задержка : ускоряет время ответа на повторяющиеся или связанные запросы.

Поддерживаемые модели кэширования контекста

Только определенные модели, такие как gemini15Flash и gemini15Pro , поддерживают кэширование контекста, и в настоящее время только в версиях с номерами 001 . Если используется неподдерживаемая модель, возникнет ошибка, указывающая, что кэширование невозможно применить.

Дальнейшее чтение

Дополнительную информацию о кэшировании контекста на Vertex AI смотрите в их документации .