Плагин Vertex AI предоставляет интерфейсы к нескольким службам AI:
- Генеративные модели искусственного интеллекта Google :
- Генерация текста Близнецов
- Генерация изображений Imagen2 и Imagen3
- Генерация встраивания текста
- Подмножество показателей оценки через API Vertex AI Rapid Evaluation API :
- Векторный поиск
Установка
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 по умолчанию.
Чтобы указать свои учетные данные:
- Если вы запускаете поток из среды Google Cloud (Cloud Functions, Cloud Run и т. д.), это устанавливается автоматически.
В вашей локальной среде разработки сделайте это, запустив:
gcloud auth application-default login
Информацию о других средах см. в документации по учетным данным приложения по умолчанию .
Кроме того, убедитесь, что учетной записи предоставлена роль 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:
- Выберите модель внедрения. Эта модель отвечает за создание векторных вложений из текста. Опытные пользователи могут использовать модель внедрения, оптимизированную для их конкретных наборов данных, но для большинства пользователей модель
text-embedding-004
от Vertex AI является хорошим выбором для английского текста, а модельtext-multilingual-embedding-002
хороша для многоязычного текста. В разделе «Векторный поиск» консоли Google Cloud создайте новый индекс. Наиболее важные настройки:
- Размеры: укажите размерность векторов, создаваемых выбранной вами моделью внедрения. Модели
text-embedding-004
иtext-multilingual-embedding-002
создают векторы размером 768 измерений. - Метод обновления: выберите потоковые обновления.
После создания индекса разверните его в стандартной (общедоступной) конечной точке.
- Размеры: укажите размерность векторов, создаваемых выбранной вами моделью внедрения. Модели
Получите индексатор и средство извлечения документов для хранилища документов, которое вы хотите использовать:
Облачный пожарный магазин
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 с локальным файлом» .
Добавьте блок
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
: перечислены на странице «Информация о развернутом индексе», которую можно открыть, щелкнув имя развернутого индекса на любой из вкладок, упомянутых ранее.
-
Теперь, когда все настроено, вы можете использовать индексатор и ретривер в своем приложении 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, });
См. примеры кода для:
- Вершинный векторный поиск + BigQuery
- Вершинный векторный поиск + Firestore
- Вершинный векторный поиск + собственная БД
Кэширование контекста
Плагин 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.',
});
Преимущества кэширования контекста
- Улучшенная производительность : уменьшает необходимость повторной обработки больших входных данных.
- Экономическая эффективность : уменьшает использование API для избыточных данных, оптимизируя потребление токенов.
- Улучшенная задержка : ускоряет время ответа на повторяющиеся или связанные запросы.
Поддерживаемые модели кэширования контекста
Только определенные модели, такие как gemini15Flash
и gemini15Pro
, поддерживают кэширование контекста, и в настоящее время только в версиях с номерами 001
. Если используется неподдерживаемая модель, возникнет ошибка, указывающая, что кэширование невозможно применить.
Дальнейшее чтение
Дополнительную информацию о кэшировании контекста на Vertex AI смотрите в их документации .