Plugin Vertex AI menyediakan antarmuka ke beberapa layanan AI:
- Model AI generatif Google:
- Pembuatan teks untuk Gemini
- Pembuatan gambar Imagen2
- 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 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 Vertex AI Model Garden
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',
});
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 Vertex AI Genkit 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: