Plugin Vertex AI

Plugin Vertex AI menyediakan antarmuka ke beberapa layanan AI:

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 konfigurasi vertexAI() atau dengan menetapkan variabel lingkungan GCLOUD_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 konfigurasi vertexAI() atau dengan menetapkan variabel lingkungan GCLOUD_LOCATION.
  • Untuk memberikan kredensial API, Anda perlu menyiapkan Kredensial Default Aplikasi Google Cloud.

    1. 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.

    2. 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:

  1. 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 model text-multilingual-embedding-002 cocok untuk teks multibahasa.
  2. 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 dan text-multilingual-embedding-002 menghasilkan vektor 768 dimensi.
    • Metode update: Pilih update streaming.

    Setelah membuat indeks, deploy ke endpoint standar (publik).

  3. 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 dan DocumentIndexer 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.

  4. Tambahkan blok vectorSearchOptions ke konfigurasi plugin vertexAI 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 Indeks
    • indexEndpointId: tercantum di tab Endpoint Indeks
    • deployedIndexId dan publicDomainName: 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
  5. 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: