Плагин Vertex AI предоставляет интерфейсы к нескольким службам AI:
- Генеративные модели искусственного интеллекта Google :
- Генерация текста Близнецов
- Генерация изображений Imagen2
- Генерация встраивания текста
- Подмножество показателей оценки через 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',
});
оценщики
Чтобы использовать оценщики из 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
- Вершинный векторный поиск + собственная БД