Das Vertex AI-Plug-in bietet Schnittstellen zu mehreren KI-Diensten:
- Generative KI-Modelle von Google:
- Gemini-Textgenerierung
- Imagen2-Bildgenerierung
- Generierung von Texteinbettungen
- Einige Bewertungsmesswerte über die Rapid Evaluation API von Vertex AI:
- Vektorsuche
Installation
npm i --save @genkit-ai/vertexai
Wenn Sie Workflows, die dieses Plug-in verwenden, lokal ausführen möchten, muss außerdem das Google Cloud CLI-Tool installiert sein.
Konfiguration
Wenn Sie dieses Plug-in verwenden möchten, geben Sie es an, wenn Sie Genkit initialisieren:
import { genkit } from 'genkit';
import { vertexAI } from '@genkit-ai/vertexai';
const ai = genkit({
plugins: [
vertexAI({ location: 'us-central1' }),
],
});
Sie müssen die Google Cloud-Projekt-ID, die Region, an die Vertex API-Anfragen gesendet werden sollen, und die Anmeldedaten für Ihr Google Cloud-Projekt angeben.
- Sie können Ihre Google Cloud-Projekt-ID entweder durch Festlegen von
projectId
in dervertexAI()
-Konfiguration oder durch Festlegen der UmgebungsvariablenGCLOUD_PROJECT
angeben. Wenn Sie Ihren Ablauf in einer Google Cloud-Umgebung (z. B. Cloud Functions oder Cloud Run) ausführen, wirdGCLOUD_PROJECT
automatisch auf die Projekt-ID der Umgebung festgelegt. - Sie können den API-Speicherort entweder durch Festlegen von
location
in dervertexAI()
-Konfiguration oder durch Festlegen der UmgebungsvariablenGCLOUD_LOCATION
angeben. Wenn Sie API-Anmeldedaten angeben möchten, müssen Sie die Standardanmeldedaten für Google Cloud-Anwendungen einrichten.
So geben Sie Ihre Anmeldedaten an:
- Wenn Sie Ihren Ablauf in einer Google Cloud-Umgebung (z. B. Cloud Functions oder Cloud Run) ausführen, wird dies automatisch festgelegt.
Führen Sie dazu in Ihrer lokalen Entwicklungsumgebung Folgendes aus:
gcloud auth application-default login
Informationen zu anderen Umgebungen finden Sie in der Dokumentation zu Standardanmeldedaten für Anwendungen.
Außerdem muss dem Konto die IAM-Rolle „Vertex AI-Nutzer“ (
roles/aiplatform.user
) zugewiesen sein. Weitere Informationen finden Sie in der Dokumentation zur Zugriffssteuerung in Vertex AI.
Nutzung
Generative AI-Modelle
Dieses Plug-in exportiert statisch Verweise auf die unterstützten Modelle für die generative KI:
import { gemini15Flash, gemini15Pro, imagen3 } from '@genkit-ai/vertexai';
Mit diesen Referenzen können Sie angeben, welches Modell für ai.generate()
verwendet wird:
const ai = genkit({
plugins: [vertexAI({ location: 'us-central1' })],
});
const llmResponse = await ai.generate({
model: gemini15Flash,
prompt: 'What should I do when I visit Melbourne?',
});
Dieses Plug-in unterstützt auch die Fundierung von Gemini-Textantworten mithilfe der Google Suche oder Ihrer eigenen Daten.
Beispiel:
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,
}
}
})
Dieses Plug-in exportiert auch statisch einen Verweis auf das Gecko-Texteinbettungsmodell:
import { textEmbedding004 } from '@genkit-ai/vertexai';
Mit dieser Referenz kannst du angeben, welchen Embedder ein Indexierer oder Retriever verwendet. Wenn du beispielsweise Chroma DB verwendest:
const ai = genkit({
plugins: [
chroma([
{
embedder: textEmbedding004,
collectionName: 'my-collection',
},
]),
],
});
Du kannst auch direkt ein Embed generieren:
const ai = genkit({
plugins: [vertexAI({ location: 'us-central1' })],
});
const embedding = await ai.embed({
embedder: textEmbedding004,
content: 'How many widgets do you have in stock?',
});
Mit dem Imagen3-Modell können Bilder aus Nutzerprompts generiert werden:
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();
und sogar die erweiterte Bearbeitung vorhandener Bilder:
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();
Weitere Informationen finden Sie in der Dokumentation zum Bildmodell.
Anthropic Claude 3 in Vertex AI Model Garden
Wenn Sie im Vertex AI Model Garden Zugriff auf Claude 3-Modelle (Haiku, Sonett oder Opus) haben, können Sie sie mit Genkit verwenden.
Hier ist eine Beispielkonfiguration zum Aktivieren von Vertex AI Model Garden-Modellen:
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],
}),
],
});
Verwenden Sie sie dann wie normale Modelle:
const llmResponse = await ai.generate({
model: claude3Sonnet,
prompt: 'What should I do when I visit Melbourne?',
});
Llama 3.1 405b im Vertex AI Model Garden
Sie müssen zuerst den Llama 3.1 API-Dienst in Vertex AI Model Garden aktivieren.
Hier ist eine Beispielkonfiguration für Llama 3.1 405b im Vertex AI-Plug-in:
import { genkit } from 'genkit';
import { llama31, vertexAIModelGarden } from '@genkit-ai/vertexai/modelgarden';
const ai = genkit({
plugins: [
vertexAIModelGarden({
location: 'us-central1',
models: [llama31],
}),
],
});
Verwenden Sie sie dann wie normale Modelle:
const llmResponse = await ai.generate({
model: llama31,
prompt: 'Write a function that adds two numbers together',
});
Evaluators
Wenn Sie die Bewertungsmethoden von Vertex AI Rapid Evaluation verwenden möchten, fügen Sie Ihrer vertexAI
-Plug-in-Konfiguration einen evaluation
-Block hinzu.
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',
},
},
],
}),
],
});
In der obigen Konfiguration werden Evaluatoren für die Messwerte Safety
und ROUGE
hinzugefügt. Das Beispiel zeigt zwei Ansätze: Beim Messwert Safety
wird die Standardspezifikation verwendet, während der Messwert ROUGE
eine benutzerdefinierte Spezifikation enthält, die den Rogue-Typ auf rougeLsum
festlegt.
Beide Bewertungstools können mit dem Befehl genkit eval:run
und einem kompatiblen Dataset ausgeführt werden, also einem Dataset mit den Feldern output
und reference
. Der Safety
-Evaluator kann auch mit dem Befehl genkit eval:flow -e vertexai/safety
ausgeführt werden, da er nur eine output
benötigt.
Indexierungs- und Abrufprogramme
Das Genkit Vertex AI-Plug-in enthält Indexierungs- und Abrufimplementierungen, die vom Vertex AI Vector Search-Dienst unterstützt werden.
Auf der Seite Retrieval Augmented Generation erfahren Sie, wie Indexer und Retriever in einer RAG-Implementierung verwendet werden.
Der Vertex AI Vector Search-Dienst ist ein Dokumentindex, der mit dem Dokumentspeicher Ihrer Wahl zusammenarbeitet: Der Dokumentspeicher enthält den Inhalt der Dokumente und der Vertex AI Vector Search-Index enthält für jedes Dokument die Vektoreinbettung und einen Verweis auf das Dokument im Dokumentspeicher. Nachdem Ihre Dokumente vom Vertex AI Vector Search-Dienst indexiert wurden, kann er auf Suchanfragen antworten und Listen von Indexen in Ihrem Dokumentenspeicher erstellen.
Die vom Vertex AI-Plug-in bereitgestellten Indexierungs- und Abrufimplementierungen verwenden entweder Cloud Firestore oder BigQuery als Dokumentenspeicher. Das Plug-in enthält auch Schnittstellen, die Sie implementieren können, um andere Dokumentenspeicher zu unterstützen.
So verwenden Sie die Vertex AI-Vektorsuche:
- Wählen Sie ein Einbettungsmodell aus. Dieses Modell ist für die Erstellung von Vektoreinbettungen aus Text verantwortlich. Fortgeschrittene Nutzer können ein für ihre spezifischen Datensätze optimiertes Einbettungsmodell verwenden. Für die meisten Nutzer ist das
text-embedding-004
-Modell von Vertex AI jedoch eine gute Wahl für englischsprachigen Text und dastext-multilingual-embedding-002
-Modell für mehrsprachigen Text. Erstellen Sie in der Google Cloud Console im Bereich Vektorsuche einen neuen Index. Die wichtigsten Einstellungen sind:
- Dimensionen:Geben Sie die Dimension der Vektoren an, die vom ausgewählten Einbettungsmodell erstellt werden. Die Modelle
text-embedding-004
undtext-multilingual-embedding-002
generieren Vektoren mit 768 Dimensionen. - Aktualisierungsmethode:Wählen Sie „Streaming-Updates“ aus.
Nachdem Sie den Index erstellt haben, stellen Sie ihn auf einem Standard- (öffentlichen) Endpunkt bereit.
- Dimensionen:Geben Sie die Dimension der Vektoren an, die vom ausgewählten Einbettungsmodell erstellt werden. Die Modelle
Holen Sie sich einen Dokumentindexierer und -abrufer für den gewünschten Dokumentspeicher:
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);
Sonstiges
Wenn Sie andere Dokumentenspeicher unterstützen möchten, können Sie Ihre eigenen Implementierungen von
DocumentRetriever
undDocumentIndexer
bereitstellen:const myDocumentRetriever = async (neighbors) => { // Return the documents referenced by `neighbors`. // ... } const myDocumentIndexer = async (documents) => { // Add `documents` to storage. // ... }
Ein Beispiel finden Sie unter Beispiel für einen Vertex AI-Plug-in-Abruf- und Indexierungsmechanismus mit lokaler Datei.
Fügen Sie der
vertexAI
-Plug-in-Konfiguration einenvectorSearchOptions
-Block hinzu: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, }, ], }), ], });
Geben Sie den im ersten Schritt ausgewählten Embedder sowie den im vorherigen Schritt erstellten Dokumentindexierer und -abrufer an.
Wenn Sie das Plug-in so konfigurieren möchten, dass es den zuvor erstellten Vektorsuchindex verwendet, müssen Sie mehrere Werte angeben. Diese finden Sie in der Google Cloud Console im Bereich „Vektorsuche“:
indexId
: auf dem Tab Indexe aufgeführt sindindexEndpointId
: auf dem Tab Indexendpunkte aufgeführt sinddeployedIndexId
undpublicDomainName
: Auf der Seite „Bereitgestellte Indexinformationen“ aufgeführt. Sie können sie öffnen, indem Sie auf einem der oben genannten Tabs auf den Namen des bereitgestellten Index klicken.
Nachdem alles konfiguriert ist, können Sie den Indexer und Retriever in Ihrer Genkit-Anwendung verwenden:
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, });
Hier finden Sie Codebeispiele für:
- Vertex Vector Search + BigQuery
- Vertex Vector Search + Firestore
- Vertex-Vektorsuche und benutzerdefinierte Datenbank