Plugin Firebase

Plugin Firebase menyediakan beberapa integrasi dengan layanan Firebase:

  • Pengindeks dan pengambil menggunakan penyimpanan vektor Cloud Firestore
  • Penyimpanan rekaman aktivitas menggunakan Cloud Firestore
  • Deployment alur menggunakan Cloud Functions
  • Kebijakan otorisasi untuk pengguna Firebase Authentication

Penginstalan

npm i --save @genkit-ai/firebase

Konfigurasi

Untuk menggunakan plugin ini, tentukan plugin ini saat Anda memanggil configureGenkit():

import {firebase} from "@genkit-ai/firebase";

configureGenkit({
  plugins: [firebase({projectId: "your-firebase-project"})],
});

Plugin ini mengharuskan Anda menentukan project ID Firebase. Anda dapat menentukan project ID Firebase dengan salah satu cara berikut:

  • Tetapkan projectId di objek konfigurasi firebase().

  • 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 tersebut.

    Jika menetapkan GCLOUD_PROJECT, Anda dapat menghilangkan parameter konfigurasi: firebase()

Untuk memberikan kredensial Firebase, Anda juga 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), flow ini akan diatur secara otomatis.

  • Untuk lingkungan lainnya:

    1. Buat kredensial akun layanan untuk project Firebase Anda dan download file kunci JSON. Anda dapat melakukannya di halaman Service account di Firebase console.
    2. Tetapkan variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS ke jalur file file JSON yang berisi kunci akun layanan Anda.

Penggunaan

Plugin ini menyediakan beberapa integrasi dengan layanan Firebase, yang dapat Anda gunakan secara bersamaan atau terpisah.

Penyimpanan vektor Cloud Firestore

Anda dapat menggunakan Cloud Firestore sebagai penyimpanan vektor untuk pengindeksan dan pengambilan RAG.

Plugin firebase menyediakan fungsi kemudahan untuk menentukan pengambil Firestore, defineFirestoreRetriever():

import {defineFirestoreRetriever} from "@genkit-ai/firebase";
import {initializeApp} from "firebase-admin/app";
import {getFirestore} from "firebase-admin/firestore";

const app = initializeApp();
const firestore = getFirestore(app);

const yourRetrieverRef = defineFirestoreRetriever({
  name: "yourRetriever",
  firestore: getFirestore(app),
  collection: "yourCollection",
  contentField: "yourDataChunks",
  vectorField: "embedding",
  embedder: textEmbeddingGecko,
  distanceMeasure: "COSINE", // "EUCLIDEAN", "DOT_PRODUCT", or "COSINE" (default)
});

Untuk menggunakannya, teruskan ke fungsi retrieve():

const docs = await retrieve({
  retriever: yourRetrieverRef,
  query: "look for something",
  options: {limit: 5},
});

Untuk pengindeksan, gunakan generator embedding bersama Admin SDK:

import {initializeApp} from "firebase-admin";
import {getFirestore, FieldValue} from "firebase-admin/firestore";
import {textEmbeddingGecko} from "@genkit-ai/vertexai";
import {embed} from "@genkit-ai/ai/embedder";

const app = initializeApp();
const firestore = getFirestore(app);

const indexConfig = {
  collection: "yourCollection",
  contentField: "yourDataChunks",
  vectorField: "embedding",
  embedder: textEmbeddingGecko,
};

async function indexToFirestore(content) {
  const embedding = await embed({
    embedder: indexConfig.embedder,
    content,
  });
  await firestore.collection(indexConfig.collection).add({
    [indexConfig.vectorField]: FieldValue.vector(embedding),
    [indexConfig.contentField]: content,
  });
}

Firestore bergantung pada indeks untuk menyediakan pembuatan kueri yang cepat dan efisien pada koleksi. Contoh sebelumnya mengharuskan kolom embedding diindeks agar berfungsi. Untuk melakukannya, panggil fungsi dan Firestore akan menampilkan error dengan perintah untuk membuat indeks. Jalankan perintah tersebut dan indeks Anda akan siap digunakan.

Lihat halaman Pembuatan yang diotomatiskan dengan pengambilan untuk diskusi umum tentang pengindeks dan pengambil.

Penyimpanan rekaman aktivitas Cloud Firestore

Anda dapat menggunakan Cloud Firestore untuk menyimpan rekaman aktivitas:

import {firebase} from "@genkit-ai/firebase";

configureGenkit({
  plugins: [firebase()],
  traceStore: "firebase",
  enableTracingAndMetrics: true,
});

Secara default, plugin menyimpan rekaman aktivitas dalam koleksi yang disebut genkit-traces di database default project. Untuk mengubah salah satu setelan:

firebase({
  traceStore: {
    collection: "your-collection";
    databaseId: "your-db";
  }
})

Saat menggunakan penyimpanan rekaman aktivitas berbasis Firestore, Anda perlu mengaktifkan TTL untuk dokumen pelacakan: https://firebase.google.com/docs/firestore/ttl

Cloud Functions

Plugin ini menyediakan konstruktor onFlow(), yang membuat alur yang didukung oleh fungsi yang dipicu HTTPS Cloud Functions for Firebase. Fungsi ini sesuai dengan antarmuka fungsi callable Firebase dan Anda dapat menggunakan SDK klien Cloud Functions untuk memanggilnya.

import {firebase} from "@genkit-ai/firebase";
import {onFlow, noAuth} from "@genkit-ai/firebase/functions";

configureGenkit({
  plugins: [firebase()],
});

export const exampleFlow = onFlow(
  {
    name: "exampleFlow",
    authPolicy: noAuth(), // WARNING: noAuth() creates an open endpoint!
  },
  async (prompt) => {
    // Flow logic goes here.

    return response;
  }
);

Deploy flow Anda menggunakan Firebase CLI:

firebase deploy --only functions

Fungsi onFlow() memiliki beberapa opsi yang tidak ada di defineFlow():

  • httpsOptions: objek HttpsOptions yang digunakan untuk mengonfigurasi Cloud Function Anda: js export const exampleFlow = onFlow( { name: "exampleFlow", httpsOptions: { cors: true, }, // ... }, async (prompt) => { // ... } );

  • enforceAppCheck: saat true, menolak permintaan yang tidak memiliki token App Check yang tidak valid atau tidak ada.

  • consumeAppCheckToken: saat true, membatalkan token App Check setelah memverifikasinya.

    Lihat Perlindungan replay.

Firebase Auth

Plugin ini menyediakan fungsi bantuan untuk membuat kebijakan otorisasi di seluruh Firebase Auth:

import {firebaseAuth} from "@genkit-ai/firebase/auth";

export const exampleFlow = onFlow(
  {
    name: "exampleFlow",
    authPolicy: firebaseAuth((user) => {
      if (!user.email_verified) throw new Error("Requires verification!");
    }),
  },
  async (prompt) => {
    // ...
  }
);

Untuk menentukan kebijakan autentikasi, berikan firebaseAuth() fungsi callback yang menggunakan DecodedIdToken sebagai satu-satunya parameter. Dalam fungsi ini, periksa token pengguna dan tampilkan error jika pengguna gagal memenuhi salah satu kriteria yang Anda inginkan.

Lihat Otorisasi dan integritas untuk mengetahui pembahasan topik ini yang lebih menyeluruh.