Плагин 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 embeddings = await ai.embed({
embedder: textEmbedding004,
content: 'How many widgets do you have in stock?',
});
Этот плагин также может обрабатывать мультимодальные встраивания:
import { multimodalEmbedding001, vertexAI } from '@genkit-ai/vertexai';
const ai = genkit({
plugins: [vertextAI({location: 'us-central1' })],
});
const embeddings = await ai.embed({
embedder: multimodalEmbedding001,
content: {
content: [{
"media": {
"url": "gs://cloud-samples-data/generative-ai/video/pixel8.mp4",
"contentType": "video/mp4"
}
}]
}
});
Модель 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
хороша для многоязычного текста, а модельmultimodalEmbedding001
хороша для смешанного текста, изображений и видео. В разделе «Векторный поиск» консоли Google Cloud создайте новый индекс. Наиболее важные настройки:
- Размеры: укажите размерность векторов, создаваемых выбранной вами моделью внедрения. Модели
text-embedding-004
иtext-multilingual-embedding-002
создают векторы размером 768 измерений. МодельmultimodalEmbedding001
может создавать векторы размером 128, 256, 512 или 1408 для текста и изображений, а также векторы размером 1408 для видео. - Метод обновления: выберите потоковые обновления.
После создания индекса разверните его в стандартной (общедоступной) конечной точке.
- Размеры: укажите размерность векторов, создаваемых выбранной вами моделью внедрения. Модели
Получите индексатор и средство извлечения документов для хранилища документов, которое вы хотите использовать:
Облачный пожарный магазин
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 смотрите в их документации .