Complemento de Firebase

El complemento de Firebase proporciona varias integraciones con los servicios de Firebase:

  • Indexadores y recuperados que usan el almacén de vectores de Cloud Firestore
  • Cómo hacer un seguimiento del almacenamiento con Cloud Firestore
  • Implementación de flujo con Cloud Functions
  • Políticas de autorización para usuarios de Firebase Authentication

Instalación

npm i --save @genkit-ai/firebase

Configuración

Para usar este complemento, especifícalo cuando llames a configureGenkit():

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

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

El complemento requiere que especifiques el ID del proyecto de Firebase. Puedes especificar el ID del proyecto de Firebase de cualquiera de las siguientes maneras:

  • Configura projectId en el objeto de configuración firebase().

  • Configura la variable de entorno GCLOUD_PROJECT. Si ejecutas tu flujo desde un entorno de Google Cloud (Cloud Functions, Cloud Run, etc.), GCLOUD_PROJECT se configura de forma automática en el ID del proyecto del entorno.

    Si configuras GCLOUD_PROJECT, puedes omitir el parámetro de configuración: firebase()

Para proporcionar credenciales de Firebase, también debes configurar las credenciales predeterminadas de la aplicación de Google Cloud. Para especificar tus credenciales, haz lo siguiente:

  • Si ejecutas tu flujo desde un entorno de Google Cloud (Cloud Functions, Cloud Run, etc.), esto se configura de forma automática.

  • Para otros entornos:

    1. Genera credenciales de cuenta de servicio para tu proyecto de Firebase y descarga el archivo de claves JSON. Puedes hacerlo en la página Cuenta de servicio de Firebase console.
    2. Configura la variable de entorno GOOGLE_APPLICATION_CREDENTIALS con la ruta de acceso al archivo JSON que contiene la clave de tu cuenta de servicio.

Uso

Este complemento proporciona varias integraciones con los servicios de Firebase, que puedes usar juntos o individualmente.

Almacén de vectores de Cloud Firestore

Puedes usar Cloud Firestore como almacén de vectores para la indexación y recuperación de los archivos RAV.

El complemento firebase proporciona una función conveniente para definir los recuperadores de 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)
});

Para usarlo, pásalo a la función retrieve():

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

Para la indexación, usa un generador de incorporaciones junto con el SDK de Admin:

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 depende de los índices para proporcionar consultas rápidas y eficientes en las colecciones. El ejemplo anterior requiere que el campo embedding esté indexado para funcionar. Para hacerlo, invoca la función; Firestore arrojará un error con un comando para crear un índice. Ejecuta ese comando y tu índice debería estar listo para usarse.

Consulta la página Generación de aumento de recuperación para ver un análisis general sobre los indexadores y los retrievers.

Almacenamiento de registros de Cloud Firestore

Puedes usar Cloud Firestore para almacenar seguimientos:

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

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

De forma predeterminada, el complemento almacena registros en una colección llamada genkit-traces en la base de datos predeterminada del proyecto. Para cambiar cualquiera de los parámetros de configuración, sigue estos pasos:

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

Cuando uses el almacenamiento de registros basado en Firestore, te recomendamos habilitar el TTL para los documentos de registro: https://firebase.google.com/docs/firestore/ttl

Cloud Functions

El complemento proporciona el constructor onFlow(), que crea un flujo respaldado por una función activada por HTTPS de Cloud Functions para Firebase. Estas funciones se ajustan a la interfaz de funciones que admiten llamadas de Firebase, y puedes usar los SDKs de cliente de Cloud Functions para llamarlas.

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

Implementa tu flujo con Firebase CLI:

firebase deploy --only functions

La función onFlow() tiene algunas opciones que no están presentes en defineFlow():

  • httpsOptions: Un objeto HttpsOptions que se usa para configurar la Cloud Function: js export const exampleFlow = onFlow( { name: "exampleFlow", httpsOptions: { cors: true, }, // ... }, async (prompt) => { // ... } );

  • enforceAppCheck: Cuando es true, rechaza las solicitudes con tokens de Verificación de aplicaciones faltantes o no válidos.

  • consumeAppCheckToken: Cuando es true, invalida el token de la Verificación de aplicaciones después de verificarlo.

    Consulta Protección contra la repetición.

Firebase Auth

Este complemento proporciona una función auxiliar para crear políticas de autorización en torno a 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) => {
    // ...
  }
);

Para definir una política de Auth, proporciona a firebaseAuth() una función de devolución de llamada que tome un DecodedIdToken como único parámetro. En esta función, examina el token de usuario y arroja un error si el usuario no cumple con alguno de los criterios que quieres solicitar.

Consulta Integridad y autorización para acceder a un análisis más detallado de este tema.