Il plug-in Vertex AI fornisce interfacce per diversi servizi di IA:
- Modelli di IA generativa di Google:
- Generazione di testo Gemini
- Generazione di immagini con Imagen2
- Generazione di incorporamenti di testo
- Un sottoinsieme di metriche di valutazione tramite l'API Rapid Evaluation di Vertex AI:
- Ricerca vettoriale
Installazione
npm i --save @genkit-ai/vertexai
Se vuoi eseguire localmente i flussi che utilizzano questo plug-in, devi installare anche lo strumento Google Cloud CLI.
Configurazione
Per utilizzare questo plug-in, specificalo quando avvii Genkit:
import { genkit } from 'genkit';
import { vertexAI } from '@genkit-ai/vertexai';
const ai = genkit({
plugins: [
vertexAI({ location: 'us-central1' }),
],
});
Il plug-in richiede di specificare l'ID progetto Google Cloud, la regione a cui vuoi inviare richieste all'API Vertex e le credenziali del progetto Google Cloud.
- Puoi specificare l'ID progetto Google Cloud impostando
projectId
nella configurazionevertexAI()
o impostando la variabile di ambienteGCLOUD_PROJECT
. Se esegui il flusso da un ambiente Google Cloud (Cloud Functions, Cloud Run e così via),GCLOUD_PROJECT
viene impostato automaticamente sull'ID progetto dell'ambiente. - Puoi specificare la posizione dell'API impostando
location
nella configurazionevertexAI()
o la variabile di ambienteGCLOUD_LOCATION
. Per fornire le credenziali API, devi configurare le credenziali predefinite dell'applicazione Google Cloud.
Per specificare le credenziali:
- Se esegui il flusso da un ambiente Google Cloud (Cloud Functions, Cloud Run e così via), questo valore viene impostato automaticamente.
Nel tuo ambiente di sviluppo locale, esegui:
gcloud auth application-default login
Per altri ambienti, consulta la documentazione relativa alle credenziali predefinite dell'applicazione.
Inoltre, assicurati che all'account sia stato concesso il ruolo IAM Vertex AI User (
roles/aiplatform.user
). Consulta la documentazione sul controllo dell'accesso di Vertex AI.
Utilizzo
Modelli di AI generativa
Questo plug-in esporta in modo statico i riferimenti ai modelli di AI generativa supportati:
import { gemini15Flash, gemini15Pro, imagen3 } from '@genkit-ai/vertexai';
Puoi utilizzare questi riferimenti per specificare il modello utilizzato da 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?',
});
Questo plug-in supporta anche la verifica delle risposte di Gemini utilizzando la Ricerca Google o i tuoi dati.
Esempio:
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,
}
}
})
Questo plug-in esporta anche in modo statico un riferimento al modello di embedding del testo di Gecko:
import { textEmbedding004 } from '@genkit-ai/vertexai';
Puoi utilizzare questo riferimento per specificare quale inserzionista utilizza un indicizzatore o un retriever. Ad esempio, se utilizzi Chroma DB:
const ai = genkit({
plugins: [
chroma([
{
embedder: textEmbedding004,
collectionName: 'my-collection',
},
]),
],
});
In alternativa, puoi generare direttamente un'incorporazione:
const ai = genkit({
plugins: [vertexAI({ location: 'us-central1' })],
});
const embedding = await ai.embed({
embedder: textEmbedding004,
content: 'How many widgets do you have in stock?',
});
Il modello Imagen3 consente di generare immagini dal prompt dell'utente:
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();
e persino la modifica avanzata delle immagini esistenti:
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();
Per opzioni più dettagliate, consulta la documentazione del modello Imagen.
Anthropic Claude 3 su Model Garden di Vertex AI
Se hai accesso ai modelli Claude 3 (haiku, sonnet o opus) in Vertex AI Model Garden, puoi utilizzarli con Genkit.
Ecco una configurazione di esempio per attivare i modelli di 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],
}),
],
});
Dopodiché utilizzali come modelli regolari:
const llmResponse = await ai.generate({
model: claude3Sonnet,
prompt: 'What should I do when I visit Melbourne?',
});
Llama 3.1 405b su Model Garden di Vertex AI
Innanzitutto, devi abilitare il servizio API Llama 3.1 in Model Garden di Vertex AI.
Ecco una configurazione di esempio per Llama 3.1 405b nel 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],
}),
],
});
Poi utilizzali come modelli regolari:
const llmResponse = await ai.generate({
model: llama31,
prompt: 'Write a function that adds two numbers together',
});
Valutatori
Per utilizzare gli valutatori di Vertex AI Rapid Evaluation, aggiungi un blocco evaluation
alla configurazione del 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 configurazione riportata sopra aggiunge valutatori per le metriche Safety
e ROUGE
. L'esempio mostra due approcci: la metrica Safety
utilizza la specifica predefinita, mentre la metrica ROUGE
fornisce una specifica personalizzata che imposta il tipo di errore su rougeLsum
.
Entrambi gli valutatori possono essere eseguiti utilizzando il comando genkit eval:run
con un set di dati compatibile, ovvero un set di dati con campi output
e reference
. Il valutatore Safety
può essere eseguito anche utilizzando il comando genkit eval:flow -e vertexai/safety
, poiché richiede solo un output
.
Indicizzatori e retriever
Il plug-in Genkit Vertex AI include implementazioni di indicizzatori e retriever supportate dal servizio Vertex AI Vector Search.
(Consulta la pagina Retrieval-Augmented Generation per scoprire come vengono utilizzati gli indicizzatori e i retriever in un'implementazione RAG).
Il servizio Vertex AI Vector Search è un indice di documenti che funziona insieme al tuo datastore preferito: il datastore contiene i contenuti dei documenti e l'indice Vertex AI Vector Search contiene, per ogni documento, il relativo embedding vettoriale e un riferimento al documento nel datastore. Dopo che i documenti sono stati indicizzati dal servizio Vertex AI Vector Search, possono rispondere alle query di ricerca, producendo elenchi di indici nel tuo repository di documenti.
Le implementazioni dell'indice e del recupero fornite dal plug-in Vertex AI utilizzano Cloud Firestore o BigQuery come repository di documenti. Il plug-in include anche interfacce che puoi implementare per supportare altri repository di documenti.
Per utilizzare Vertex AI Vector Search:
- Scegli un modello di incorporamento. Questo modello è responsabile della creazione di incorporamenti di vettori dal testo. Gli utenti avanzati potrebbero utilizzare un modello di embedding ottimizzato per i loro set di dati specifici, ma per la maggior parte degli utenti il modello
text-embedding-004
di Vertex AI è una buona scelta per il testo in inglese e il modellotext-multilingual-embedding-002
è adatto per il testo multilingue. Nella sezione Ricerca vettoriale della console Google Cloud, crea un nuovo indice. Le impostazioni più importanti sono:
- Dimensioni:specifica la dimensionalità dei vettori prodotti dal modello di embedding scelto. I modelli
text-embedding-004
etext-multilingual-embedding-002
producono vettori di 768 dimensioni. - Metodo di aggiornamento: seleziona Aggiornamenti in streaming.
Dopo aver creato l'indice, eseguine il deployment in un endpoint standard (pubblico).
- Dimensioni:specifica la dimensionalità dei vettori prodotti dal modello di embedding scelto. I modelli
Ottieni un indicizzatore e un retriever di documenti per l'archivio di documenti che vuoi utilizzare:
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);
Altro
Per supportare altri store di documenti, puoi fornire le tue implementazioni di
DocumentRetriever
eDocumentIndexer
:const myDocumentRetriever = async (neighbors) => { // Return the documents referenced by `neighbors`. // ... } const myDocumentIndexer = async (documents) => { // Add `documents` to storage. // ... }
Per un esempio, consulta Esempio di recupero e indicizzazione del plug-in Vertex AI con file locale.
Aggiungi un blocco
vectorSearchOptions
alla configurazione del 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, }, ], }), ], });
Fornisci l'evidenziatore scelto nel primo passaggio e l'indice e il recupero dei documenti che hai creato nel passaggio precedente.
Per configurare il plug-in in modo che utilizzi l'indice di ricerca vettoriale creato in precedenza, devi fornire diversi valori, che puoi trovare nella sezione Ricerca vettoriale della console Google Cloud:
indexId
: elencato nella scheda IndiciindexEndpointId
: elencato nella scheda Endpoint indicedeployedIndexId
epublicDomainName
: elencati nella pagina "Informazioni sull'indice di cui è stato eseguito il deployment", che puoi aprire facendo clic sul nome dell'indice di cui è stato eseguito il deployment in una delle schede sopra indicate
Ora che è tutto configurato, puoi utilizzare l'indice e il recupero nell'applicazione 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, });
Consulta gli esempi di codice per:
- Vertex Vector Search + BigQuery
- Vertex Vector Search + Firestore
- Vertex Vector Search + un DB personalizzato