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 konfigurasifirebase()
.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:
- Buat kredensial akun layanan untuk project Firebase Anda dan download file kunci JSON. Anda dapat melakukannya di halaman Service account di Firebase console.
- 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
: objekHttpsOptions
yang digunakan untuk mengonfigurasi Cloud Function Anda:js export const exampleFlow = onFlow( { name: "exampleFlow", httpsOptions: { cors: true, }, // ... }, async (prompt) => { // ... } );
enforceAppCheck
: saattrue
, menolak permintaan yang tidak memiliki token App Check yang tidak valid atau tidak ada.consumeAppCheckToken
: saattrue
, 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.