Le plug-in Vertex AI fournit des interfaces avec plusieurs services d'IA:
- Modèles d'IA générative de Google :
- Génération de texte Gemini
- Génération d'images avec Imagen2 et Imagen3
- Génération d'embeddings textuels
- Sous-ensemble de métriques d'évaluation via l'API Rapid Evaluation Vertex AI :
- Vector Search
Installation
npm i --save @genkit-ai/vertexai
Si vous souhaitez exécuter localement des flux qui utilisent ce plug-in, vous devez également installer l'outil Google Cloud CLI.
Configuration
Pour utiliser ce plug-in, spécifiez-le lorsque vous initialisez Genkit:
import { genkit } from 'genkit';
import { vertexAI } from '@genkit-ai/vertexai';
const ai = genkit({
plugins: [
vertexAI({ location: 'us-central1' }),
],
});
Le plug-in vous demande de spécifier l'ID de votre projet Google Cloud, la région à laquelle vous souhaitez envoyer des requêtes d'API Vertex et les identifiants de votre projet Google Cloud.
- Vous pouvez spécifier votre ID de projet Google Cloud en définissant
projectId
dans la configurationvertexAI()
ou en définissant la variable d'environnementGCLOUD_PROJECT
. Si vous exécutez votre flux à partir d'un environnement Google Cloud (Cloud Functions, Cloud Run, etc.),GCLOUD_PROJECT
est automatiquement défini sur l'ID de projet de l'environnement. - Vous pouvez spécifier l'emplacement de l'API en définissant
location
dans la configurationvertexAI()
ou en définissant la variable d'environnementGCLOUD_LOCATION
. Pour fournir des identifiants d'API, vous devez configurer les identifiants par défaut de l'application Google Cloud.
Pour spécifier vos identifiants:
- Si vous exécutez votre flux à partir d'un environnement Google Cloud (Cloud Functions, Cloud Run, etc.), cette valeur est définie automatiquement.
Dans votre environnement de développement local, exécutez la commande suivante:
gcloud auth application-default login
Pour les autres environnements, consultez la documentation sur les identifiants par défaut de l'application.
Assurez-vous également que le compte dispose du rôle IAM Utilisateur Vertex AI (
roles/aiplatform.user
). Consultez la documentation sur le contrôle des accès dans Vertex AI.
Utilisation
Modèles d'IA générative
Ce plug-in exporte de manière statique les références à ses modèles d'IA générative compatibles:
import { gemini15Flash, gemini15Pro, imagen3 } from '@genkit-ai/vertexai';
Vous pouvez utiliser ces références pour spécifier le modèle utilisé par 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?',
});
Ce plug-in permet également d'ancrer les réponses textuelles de Gemini à l'aide de la recherche Google ou de vos propres données.
Exemple :
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,
}
}
})
Ce plug-in exporte également de manière statique une référence au modèle d'embedding textuel Gecko:
import { textEmbedding004 } from '@genkit-ai/vertexai';
Vous pouvez utiliser cette référence pour spécifier l'outil d'intégration utilisé par un indexeur ou un récupérateur. Par exemple, si vous utilisez Chroma DB:
const ai = genkit({
plugins: [
chroma([
{
embedder: textEmbedding004,
collectionName: 'my-collection',
},
]),
],
});
Vous pouvez également générer une représentation vectorielle continue directement:
const ai = genkit({
plugins: [vertexAI({ location: 'us-central1' })],
});
const embedding = await ai.embed({
embedder: textEmbedding004,
content: 'How many widgets do you have in stock?',
});
Le modèle Imagen3 permet de générer des images à partir d'une requête utilisateur:
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();
et même de modifier des images existantes de manière avancée:
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();
Pour en savoir plus, consultez la documentation du modèle Imagen.
Anthropic Claude 3 sur Model Garden Vertex AI
Si vous avez accès aux modèles Claude 3 (haiku, sonnet ou opus) dans Model Garden Vertex AI, vous pouvez les utiliser avec Genkit.
Voici un exemple de configuration pour activer les modèles Model Garden de Vertex AI:
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],
}),
],
});
Utilisez-les ensuite comme des modèles standards:
const llmResponse = await ai.generate({
model: claude3Sonnet,
prompt: 'What should I do when I visit Melbourne?',
});
Llama 3.1 405b dans Vertex AI Model Garden
Vous devez d'abord activer le service d'API Llama 3.1 dans Vertex AI Model Garden.
Voici un exemple de configuration pour Llama 3.1 405b dans le plug-in Vertex AI:
import { genkit } from 'genkit';
import { llama31, vertexAIModelGarden } from '@genkit-ai/vertexai/modelgarden';
const ai = genkit({
plugins: [
vertexAIModelGarden({
location: 'us-central1',
models: [llama31],
}),
],
});
Utilisez-le ensuite comme des modèles standards:
const llmResponse = await ai.generate({
model: llama31,
prompt: 'Write a function that adds two numbers together',
});
Modèles Mistral dans Vertex AI Model Garden
Si vous avez accès aux modèles Mistral (Mistral Large, Mistral Nemo ou Codestral) dans Vertex AI Model Garden, vous pouvez les utiliser avec Genkit.
Voici un exemple de configuration pour activer les modèles Model Garden de Vertex AI:
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],
}),
],
});
Utilisez-les ensuite comme des modèles standards:
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
}
});
Les modèles sont compatibles avec les éléments suivants :
- mistralLarge
: dernier grand modèle Mistral avec des fonctionnalités d'appel de fonction
- mistralNemo
: optimisé pour l'efficacité et la rapidité
- codestral
: spécialisé pour les tâches de génération de code
Chaque modèle est compatible avec les réponses en streaming et les appels de fonction:
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);
}
Évaluateurs
Pour utiliser les évaluateurs de l'évaluation rapide Vertex AI, ajoutez un bloc evaluation
à la configuration de votre plug-in 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',
},
},
],
}),
],
});
La configuration ci-dessus ajoute des évaluateurs pour les métriques Safety
et ROUGE
. L'exemple présente deux approches : la métrique Safety
utilise la spécification par défaut, tandis que la métrique ROUGE
fournit une spécification personnalisée qui définit le type de rouge sur rougeLsum
.
Les deux évaluateurs peuvent être exécutés à l'aide de la commande genkit eval:run
avec un ensemble de données compatible, c'est-à-dire un ensemble de données avec des champs output
et reference
. L'évaluateur Safety
peut également être exécuté à l'aide de la commande genkit eval:flow -e vertexai/safety
, car il ne nécessite qu'un output
.
Indexeurs et récupérateurs
Le plug-in Vertex AI Genkit inclut des implémentations d'indexeur et de récupérateur compatibles avec le service Vertex AI Vector Search.
(Consultez la page Génération augmentée de récupération pour découvrir comment les indexeurs et les récupérateurs sont utilisés dans une implémentation de RAG.)
Le service Vertex AI Vector Search est un indice de documents qui fonctionne avec le data store de votre choix: le data store contient le contenu des documents, et l'indice Vertex AI Vector Search contient, pour chaque document, son empreinte vectorielle et une référence au document dans le data store. Une fois vos documents indexés par le service Vertex AI Vector Search, il peut répondre aux requêtes de recherche, en produisant des listes d'index dans votre document store.
Les implémentations de l'indexeur et du récupérateur fournies par le plug-in Vertex AI utilisent Cloud Firestore ou BigQuery comme entrepôt de documents. Le plug-in inclut également des interfaces que vous pouvez implémenter pour prendre en charge d'autres magasins de documents.
Pour utiliser Vertex AI Vector Search:
- Choisissez un modèle d'embedding. Ce modèle est chargé de créer des représentations vectorielles continues à partir de texte. Les utilisateurs expérimentés peuvent utiliser un modèle d'embedding optimisé pour leurs ensembles de données spécifiques, mais pour la plupart des utilisateurs, le modèle
text-embedding-004
de Vertex AI est un bon choix pour le texte en anglais et le modèletext-multilingual-embedding-002
pour le texte multilingue. Dans la section Vector Search (Recherche vectorielle) de la console Google Cloud, créez un indice. Les paramètres les plus importants sont les suivants:
- Dimensions:spécifiez la dimensionnalité des vecteurs produits par le modèle d'embedding que vous avez choisi. Les modèles
text-embedding-004
ettext-multilingual-embedding-002
produisent des vecteurs à 768 dimensions. - Méthode de mise à jour:sélectionnez les mises à jour en streaming.
Une fois l'index créé, déployez-le sur un point de terminaison standard (public).
- Dimensions:spécifiez la dimensionnalité des vecteurs produits par le modèle d'embedding que vous avez choisi. Les modèles
Obtenez un outil d'indexation et de récupération de documents pour le dépôt de documents que vous souhaitez utiliser:
Cloud Firestore
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);
BigQuery
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);
Other
Pour prendre en charge d'autres magasins de documents, vous pouvez fournir vos propres implémentations de
DocumentRetriever
etDocumentIndexer
:const myDocumentRetriever = async (neighbors) => { // Return the documents referenced by `neighbors`. // ... } const myDocumentIndexer = async (documents) => { // Add `documents` to storage. // ... }
Pour en savoir plus, consultez Exemple de récupérateur et d'indexeur de plug-in Vertex AI avec fichier local.
Ajoutez un bloc
vectorSearchOptions
à la configuration du plug-invertexAI
: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, }, ], }), ], });
Indiquez l'outil d'intégration que vous avez choisi à la première étape, ainsi que l'indexeur et le récupérateur de documents que vous avez créés à l'étape précédente.
Pour configurer le plug-in afin qu'il utilise l'index Vector Search que vous avez créé précédemment, vous devez fournir plusieurs valeurs, que vous trouverez dans la section "Vector Search" (Recherche vectorielle) de la console Google Cloud:
indexId
: indiqué dans l'onglet Indexes (Index)indexEndpointId
: indiqué dans l'onglet Points de terminaison d'indexdeployedIndexId
etpublicDomainName
: indiqués sur la page "Informations sur l'index déployé", que vous pouvez ouvrir en cliquant sur le nom de l'index déployé dans l'un des onglets mentionnés précédemment
Maintenant que tout est configuré, vous pouvez utiliser l'indexeur et le récupérateur dans votre application 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, });
Consultez les exemples de code pour:
- Vertex Vector Search + BigQuery
- Vertex Vector Search + Firestore
- Vertex Vector Search et une base de données personnalisée
Mise en cache du contexte
Le plug-in Vertex AI Genkit est compatible avec le mise en cache de contexte, qui permet aux modèles de réutiliser du contenu précédemment mis en cache pour optimiser l'utilisation des jetons lorsqu'ils traitent de grands éléments de contenu. Cette fonctionnalité est particulièrement utile pour les flux de conversation ou les scénarios où le modèle fait référence à un grand contenu de manière cohérente sur plusieurs requêtes.
Utiliser la mise en cache de contexte
Pour activer la mise en cache de contexte, assurez-vous que votre modèle est compatible avec cette fonctionnalité. Par exemple, gemini15Flash
et gemini15Pro
sont des modèles compatibles avec la mise en cache de contexte, et vous devrez spécifier le numéro de version 001
.
Vous pouvez définir un mécanisme de mise en cache dans votre application comme suit:
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.',
});
Dans cette configuration :
- messages
: vous permet de transmettre l'historique des conversations.
- metadata.cache.ttlSeconds
: spécifie la valeur TTL (Time To Live) pour la mise en cache d'une réponse spécifique.
Exemple: Exploiter de longs textes avec le contexte
Pour les applications qui font référence à des documents longs, tels que Guerre et Paix ou Le Seigneur des anneaux, vous pouvez structurer vos requêtes pour réutiliser les contextes mis en cache:
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.',
});
Avantages de la mise en cache de contexte
- Amélioration des performances: réduit le besoin de traiter de manière répétée de grandes entrées.
- Économies de coûts: réduit l'utilisation de l'API pour les données redondantes, ce qui optimise la consommation de jetons.
- Meilleure latence: accélère les temps de réponse pour les requêtes répétées ou associées.
Modèles compatibles avec la mise en cache de contexte
Seuls des modèles spécifiques, tels que gemini15Flash
et gemini15Pro
, sont compatibles avec la mise en cache de contexte, et actuellement uniquement avec les numéros de version 001
. Si un modèle non compatible est utilisé, une erreur s'affiche, indiquant que le cache ne peut pas être appliqué.
Documentation complémentaire
Pour en savoir plus sur le stockage en cache de contexte dans Vertex AI, consultez la documentation.