Плагин Firebase

Плагин Firebase обеспечивает несколько интеграций со службами Firebase:

  • Индексаторы и ретриверы с использованием векторного хранилища Cloud Firestore
  • Отслеживание хранилища с помощью Cloud Firestore
  • Развертывание потока с использованием облачных функций
  • Политики авторизации для пользователей аутентификации Firebase

Монтаж

npm i --save @genkit-ai/firebase

Конфигурация

Чтобы использовать этот плагин, укажите его при вызове configureGenkit() :

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

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

Плагин требует, чтобы вы указали идентификатор вашего проекта Firebase. Вы можете указать идентификатор проекта Firebase одним из следующих способов:

  • Установите projectId в объекте конфигурации firebase() .

  • Установите переменную среды GCLOUD_PROJECT . Если вы запускаете поток из среды Google Cloud (Cloud Functions, Cloud Run и т. д.), GCLOUD_PROJECT автоматически устанавливается идентификатор проекта среды.

    Если вы установите GCLOUD_PROJECT , вы можете опустить параметр конфигурации: firebase()

Чтобы предоставить учетные данные Firebase, вам также необходимо настроить учетные данные Google Cloud Application по умолчанию. Чтобы указать свои учетные данные:

  • Если вы запускаете поток из среды Google Cloud (Cloud Functions, Cloud Run и т. д.), это устанавливается автоматически.

  • Для других сред:

    1. Создайте учетные данные сервисной учетной записи для вашего проекта Firebase и загрузите файл ключей JSON. Вы можете сделать это на странице учетной записи службы консоли Firebase.
    2. Задайте для переменной среды GOOGLE_APPLICATION_CREDENTIALS путь к файлу JSON, содержащему ключ вашей учетной записи службы.

Применение

Этот плагин обеспечивает несколько интеграций со службами Firebase, которые вы можете использовать вместе или по отдельности.

Векторный магазин Cloud Firestore

Вы можете использовать Cloud Firestore в качестве векторного хранилища для индексации и поиска RAG.

Плагин firebase предоставляет удобную функцию для определения ретриверов 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)
});

Чтобы использовать его, передайте его функции retrieve() :

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

Для индексации используйте генератор внедрения вместе с 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 зависит от индексов, обеспечивающих быстрый и эффективный запрос к коллекциям. Предыдущий пример требует, чтобы поле embedding было проиндексировано для работы. Для этого вызовите функцию, и Firestore выдаст ошибку с командой создания индекса. Выполните эту команду, и ваш индекс будет готов к использованию.

См. страницу генерации с расширенным поиском для общего обсуждения индексаторов и ретриверов.

Хранилище трассировки Cloud Firestore

Вы можете использовать Cloud Firestore для хранения следов:

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

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

По умолчанию плагин хранит трассировки в коллекции genkit-traces в базе данных проекта по умолчанию. Чтобы изменить любую настройку:

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

При использовании хранилища трассировки на базе Firestore вам потребуется включить TTL для документов трассировки: https://firebase.google.com/docs/firestore/ttl

Облачные функции

Плагин предоставляет конструктор onFlow() , который создает поток, поддерживаемый функцией Cloud Functions for Firebase, запускаемой HTTPS. Эти функции соответствуют интерфейсу вызываемых функций Firebase, и для их вызова можно использовать клиентские SDK Cloud Functions .

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;
  }
);

Разверните свой поток с помощью Firebase CLI:

firebase deploy --only functions

Функция onFlow() имеет некоторые параметры, которых нет в defineFlow() :

  • httpsOptions : объект HttpsOptions используемый для настройки вашей облачной функции: js export const exampleFlow = onFlow( { name: "exampleFlow", httpsOptions: { cors: true, }, // ... }, async (prompt) => { // ... } );

  • enforceAppCheck : если true , отклонять запросы с отсутствующими или недействительными токенами проверки приложений .

  • consumeAppCheckToken : если true , сделать недействительным токен проверки приложения после его проверки.

    См. Защита от повтора .

Аутентификация Firebase

Этот плагин предоставляет вспомогательную функцию для создания политик авторизации вокруг 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) => {
    // ...
  }
);

Чтобы определить политику аутентификации, предоставьте firebaseAuth() функцию обратного вызова, которая принимает DecodedIdToken в качестве единственного параметра. В этой функции проверяется токен пользователя и выдается ошибка, если пользователь не соответствует ни одному из требуемых критериев.

См. Авторизацию и целостность для более подробного обсуждения этой темы.