Plugin Vertex AI menyediakan antarmuka ke beberapa layanan AI:
- Model AI generatif Google:
- Pembuatan teks untuk Gemini
- Pembuatan gambar Imagen2 dan Imagen3
- Pembuatan penyematan teks
- Subkumpulan metrik evaluasi melalui Rapid Evaluation API Vertex AI:
- Penelusuran Vektor
Penginstalan
npm i --save @genkit-ai/vertexai
Jika ingin menjalankan flow yang menggunakan plugin ini secara lokal, Anda juga perlu menginstal alat Google Cloud CLI.
Konfigurasi
Untuk menggunakan plugin ini, tentukan saat Anda menginisialisasi Genkit:
import { genkit } from 'genkit';
import { vertexAI } from '@genkit-ai/vertexai';
const ai = genkit({
plugins: [
vertexAI({ location: 'us-central1' }),
],
});
Plugin ini mengharuskan Anda menentukan project ID Google Cloud, region tempat Anda ingin membuat permintaan Vertex API, dan kredensial project Google Cloud Anda.
- Anda dapat menentukan project ID Google Cloud dengan menetapkan
projectId
dalam konfigurasivertexAI()
atau dengan menetapkan variabel lingkunganGCLOUD_PROJECT
. Jika Anda menjalankan flow dari lingkungan Google Cloud (Cloud Functions, Cloud Run, dan sebagainya),GCLOUD_PROJECT
akan otomatis ditetapkan ke project ID lingkungan. - Anda dapat menentukan lokasi API dengan menetapkan
location
dalam konfigurasivertexAI()
atau dengan menetapkan variabel lingkunganGCLOUD_LOCATION
. Untuk memberikan kredensial API, Anda perlu menyiapkan Kredensial Default Aplikasi Google Cloud.
Untuk menentukan kredensial Anda:
- Jika Anda menjalankan flow dari lingkungan Google Cloud (Cloud Functions, Cloud Run, dan sebagainya), kredensial tersebut ditetapkan secara otomatis.
Di lingkungan pengembangan lokal Anda, lakukan hal ini dengan menjalankan:
gcloud auth application-default login
Untuk lingkungan lainnya, lihat dokumen Kredensial Default Aplikasi.
Selain itu, pastikan akun diberi peran IAM Vertex AI User (
roles/aiplatform.user
). Lihat dokumen kontrol akses Vertex AI.
Penggunaan
Model AI Generatif
Plugin ini mengekspor referensi secara statis ke model AI generatif yang didukungnya:
import { gemini15Flash, gemini15Pro, imagen3 } from '@genkit-ai/vertexai';
Anda dapat menggunakan referensi ini untuk menentukan model yang digunakan 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?',
});
Plugin ini juga mendukung respons teks Gemini yang dihubungkan menggunakan Google Penelusuran atau data Anda sendiri.
Contoh:
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,
}
}
})
Plugin ini juga mengekspor referensi secara statis ke model penyematan teks Gecko:
import { textEmbedding004 } from '@genkit-ai/vertexai';
Anda dapat menggunakan referensi ini untuk menentukan penyempan yang digunakan pengindeksan atau pengambil. Misalnya, jika Anda menggunakan Chroma DB:
const ai = genkit({
plugins: [
chroma([
{
embedder: textEmbedding004,
collectionName: 'my-collection',
},
]),
],
});
Atau, Anda dapat membuat penyematan secara langsung:
const ai = genkit({
plugins: [vertexAI({ location: 'us-central1' })],
});
const embedding = await ai.embed({
embedder: textEmbedding004,
content: 'How many widgets do you have in stock?',
});
Model Imagen3 memungkinkan pembuatan gambar dari perintah pengguna:
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();
dan bahkan pengeditan lanjutan pada gambar yang ada:
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();
Lihat dokumentasi model Imagen untuk mengetahui opsi yang lebih mendetail.
Claude 3 dari Anthropic di Model Garden Vertex AI
Jika memiliki akses ke model Claude 3 (haiku, soneta, atau opus) di Vertex AI Model Garden, Anda dapat menggunakannya dengan Genkit.
Berikut adalah contoh konfigurasi untuk mengaktifkan model 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],
}),
],
});
Kemudian, gunakan sebagai model reguler:
const llmResponse = await ai.generate({
model: claude3Sonnet,
prompt: 'What should I do when I visit Melbourne?',
});
Llama 3.1 405b di Model Garden Vertex AI
Pertama, Anda harus mengaktifkan Layanan API Llama 3.1 di Vertex AI Model Garden.
Berikut adalah contoh konfigurasi untuk Llama 3.1 405b di plugin Vertex AI:
import { genkit } from 'genkit';
import { llama31, vertexAIModelGarden } from '@genkit-ai/vertexai/modelgarden';
const ai = genkit({
plugins: [
vertexAIModelGarden({
location: 'us-central1',
models: [llama31],
}),
],
});
Kemudian, gunakan sebagai model reguler:
const llmResponse = await ai.generate({
model: llama31,
prompt: 'Write a function that adds two numbers together',
});
Model Mistral di Model Garden Vertex AI
Jika memiliki akses ke model Mistral (Mistral Large, Mistral Nemo, atau Codestral) di Model Garden Vertex AI, Anda dapat menggunakannya dengan Genkit.
Berikut adalah contoh konfigurasi untuk mengaktifkan model 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],
}),
],
});
Kemudian, gunakan sebagai model reguler:
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
}
});
Model ini mendukung:
- mistralLarge
: Model besar Mistral terbaru dengan kemampuan panggilan fungsi
- mistralNemo
: Dioptimalkan untuk efisiensi dan kecepatan
- codestral
: Dikhususkan untuk tugas pembuatan kode
Setiap model mendukung respons streaming dan panggilan fungsi:
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);
}
Evaluator
Untuk menggunakan evaluator dari Vertex AI Rapid Evaluation, tambahkan blok evaluation
ke konfigurasi plugin vertexAI
Anda.
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',
},
},
],
}),
],
});
Konfigurasi di atas menambahkan evaluator untuk metrik Safety
dan ROUGE
. Contoh ini menunjukkan dua pendekatan- metrik Safety
menggunakan spesifikasi default, sedangkan metrik ROUGE
memberikan spesifikasi yang disesuaikan yang menetapkan jenis rouge ke rougeLsum
.
Kedua evaluator dapat dijalankan menggunakan perintah genkit eval:run
dengan set data yang kompatibel: yaitu, set data dengan kolom output
dan reference
. Evaluator Safety
juga dapat dijalankan menggunakan perintah genkit eval:flow -e vertexai/safety
karena hanya memerlukan output
.
Indexer dan retriever
Plugin Genkit Vertex AI menyertakan implementasi pengindeksan dan pengambilan yang didukung oleh layanan Vertex AI Vector Search.
(Lihat halaman Retrieval-augmented generation untuk mempelajari cara indexer dan retriever digunakan dalam implementasi RAG.)
Layanan Vertex AI Vector Search adalah indeks dokumen yang berfungsi bersama penyimpanan dokumen pilihan Anda: penyimpanan dokumen berisi konten dokumen, dan indeks Vertex AI Vector Search berisi, untuk setiap dokumen, penyematan vektornya dan referensi ke dokumen di penyimpanan dokumen. Setelah dokumen Anda diindeks oleh layanan Vertex AI Vector Search, layanan ini dapat merespons kueri penelusuran, yang menghasilkan daftar indeks ke dalam penyimpanan dokumen Anda.
Implementasi pengindeksan dan pengambilan yang disediakan oleh plugin Vertex AI menggunakan Cloud Firestore atau BigQuery sebagai penyimpanan dokumen. Plugin ini juga menyertakan antarmuka yang dapat Anda terapkan untuk mendukung penyimpanan dokumen lainnya.
Untuk menggunakan Vertex AI Vector Search:
- Pilih model penyematan. Model ini bertanggung jawab untuk membuat embedding vektor dari teks. Pengguna tingkat lanjut mungkin menggunakan model penyematan yang dioptimalkan untuk set data tertentu, tetapi bagi sebagian besar pengguna, model
text-embedding-004
Vertex AI adalah pilihan yang baik untuk teks bahasa Inggris dan modeltext-multilingual-embedding-002
cocok untuk teks multibahasa. Di bagian Vector Search di konsol Google Cloud, buat indeks baru. Setelan yang paling penting adalah:
- Dimensi: Tentukan dimensi vektor yang dihasilkan oleh model penyematan yang Anda pilih. Model
text-embedding-004
dantext-multilingual-embedding-002
menghasilkan vektor 768 dimensi. - Metode update: Pilih update streaming.
Setelah membuat indeks, deploy ke endpoint standar (publik).
- Dimensi: Tentukan dimensi vektor yang dihasilkan oleh model penyematan yang Anda pilih. Model
Dapatkan pengindeksan dan pengambil dokumen untuk penyimpanan dokumen yang ingin Anda gunakan:
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);
Lainnya
Untuk mendukung penyimpanan dokumen lain, Anda dapat menyediakan implementasi
DocumentRetriever
danDocumentIndexer
Anda sendiri:const myDocumentRetriever = async (neighbors) => { // Return the documents referenced by `neighbors`. // ... } const myDocumentIndexer = async (documents) => { // Add `documents` to storage. // ... }
Untuk contohnya, lihat Contoh Pengambil dan Pengindeksan Plugin Vertex AI dengan File Lokal.
Tambahkan blok
vectorSearchOptions
ke konfigurasi pluginvertexAI
Anda: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, }, ], }), ], });
Berikan penyempan yang Anda pilih di langkah pertama serta pengindeksan dan pengambil dokumen yang Anda buat di langkah sebelumnya.
Untuk mengonfigurasi plugin agar menggunakan indeks Penelusuran Vektor yang Anda buat sebelumnya, Anda perlu memberikan beberapa nilai, yang dapat Anda temukan di bagian Penelusuran Vektor di konsol Google Cloud:
indexId
: tercantum di tab IndeksindexEndpointId
: tercantum di tab Endpoint IndeksdeployedIndexId
danpublicDomainName
: tercantum di halaman "Info indeks yang di-deploy", yang dapat Anda buka dengan mengklik nama indeks yang di-deploy di salah satu tab yang disebutkan sebelumnya
Setelah semuanya dikonfigurasi, Anda dapat menggunakan pengindeksan dan pengambil di aplikasi 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, });
Lihat contoh kode untuk:
Penyimpanan Cache Konteks
Plugin Vertex AI Genkit mendukung Pemcachean Konteks, yang memungkinkan model menggunakan kembali konten yang di-cache sebelumnya untuk mengoptimalkan penggunaan token saat menangani konten dalam jumlah besar. Fitur ini sangat berguna untuk alur percakapan atau skenario saat model mereferensikan sebagian besar konten secara konsisten di beberapa permintaan.
Cara Menggunakan Cache Konteks
Untuk mengaktifkan cache konteks, pastikan model Anda mendukungnya. Misalnya, gemini15Flash
dan gemini15Pro
adalah model yang mendukung penyimpanan dalam cache konteks, dan Anda harus menentukan nomor versi 001
.
Anda dapat menentukan mekanisme penyimpanan dalam aplikasi seperti ini:
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.',
});
Dalam penyiapan ini:
- messages
: Memungkinkan Anda meneruskan histori percakapan.
- metadata.cache.ttlSeconds
: Menentukan time-to-live (TTL) untuk meng-cache respons tertentu.
Contoh: Memanfaatkan Teks Besar dengan Konteks
Untuk aplikasi yang mereferensikan dokumen panjang, seperti War and Peace atau Lord of the Rings, Anda dapat menyusun kueri untuk menggunakan kembali konteks yang di-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.',
});
Manfaat Cache Konteks
- Peningkatan Performa: Mengurangi kebutuhan untuk pemrosesan berulang input besar.
- Efisiensi Biaya: Mengurangi penggunaan API untuk data yang redundan, sehingga mengoptimalkan konsumsi token.
- Latensi yang Lebih Baik: Mempercepat waktu respons untuk kueri berulang atau terkait.
Model yang Didukung untuk Penyimpanan dalam Cache Konteks
Hanya model tertentu, seperti gemini15Flash
dan gemini15Pro
, yang mendukung penyimpanan dalam cache konteks, dan saat ini hanya pada nomor versi 001
. Jika model yang tidak didukung digunakan, error akan muncul, yang menunjukkan bahwa penyimpanan dalam cache tidak dapat diterapkan.
Bacaan Lebih Lanjut
Lihat informasi selengkapnya tentang penyimpanan dalam cache konteks di Vertex AI dalam dokumentasinya.