Firebase Genkit

Firebase Genkit es un framework de código abierto que te ayuda a compilar, implementar y supervisar aplicaciones potenciadas por IA listas para producción.

Logotipo de Genkit

Genkit está diseñado para desarrolladores de apps con el objetivo de ayudarte a integrar fácilmente funciones de IA potentes en tus apps con patrones y paradigmas conocidos. Lo compiló el mismo equipo detrás de Firebase y aprovecha nuestra experiencia en la compilación de herramientas que usan millones de desarrolladores en todo el mundo.

Usa Genkit para crear apps que generen contenido personalizado, usen la búsqueda semántica, manejen entradas no estructuradas, respondan preguntas con los datos de tu empresa, tomen decisiones de forma autónoma, organicen llamadas a herramientas y mucho más.

Actualmente, Genkit es compatible con el desarrollo del servidor en JavaScript/TypeScript (Node.js) y Go en el desarrollo activo.

Sigue su desarrollo o haz tus propias contribuciones en su repositorio de GitHub.

funciones clave

Genkit te ayudará en cada paso del proceso de desarrollo de la IA, desde el inicio del prototipado hasta la supervisión en la producción, por lo que hay mucho de qué hablar.

Para comenzar, aquí te presentamos 10 funciones clave de Genkit que creemos que te encantarán:

1. Muchos modelos, una interfaz

Genkit proporciona complementos que te brindan acceso a modelos populares listos para usar y una abstracción de modelo flexible que facilita la integración de cualquier API de modelo y el uso de modelos mantenidos por la comunidad. Probar un modelo nuevo es tan fácil como cambiar un solo argumento, pero cada modelo puede especificar configuraciones personalizadas.

import { geminiPro } from '@genkit-ai/vertexai';
import { ollama } from 'genkitx-ollama';
import { generate } from '@genkit-ai/ai';

function flipACoin(a, b) {
  return Math.random() > 0.5 ? a : b;
}

const result = await generate({
  model: flipACoin(geminiPro, 'ollama/gemma'),
  config: { temperature: 0.3, maxOutputTokens: 200 },
  prompt: 'What makes you the best LLM out there?',
});

console.log(result.text());

2. Resultados estructurados

Usa un esquema de Zod para generar datos de tipado fuerte con Genkit. Esto puede ayudarte a analizar texto no estructurado, generar contenido creativo, seleccionar tareas y enviar resultados de vuelta a tu app como objetos estructurados de tipo seguro.

import { generate } from "@genkit-ai/ai";
import { geminiPro } from "@genkit-ai/vertexai";
import { z } from "zod";

const CreatureSchema = z.object({
  name: z.string().describe('the name of the creature'),
  hitPoints: z.number().describe('hit points, between 5 and 100'),
  attacks: z.array(z.object({
    name: z.string(),
    damage: z.number().describe('amount of damage, between 2 and 25'),
  })).describe('3 attacks the creature can use')
});

const createCreature = defineFlow({
    name: "createCreature",
    inputSchema: z.string(),
    outputSchema: CreatureSchema,
  },
  (habitat) => {
    const result = await generate({
      model: geminiPro,
      prompt: `You are a brilliant RPG designer. Generate a creature that lives in ${habitat}.`,
      output: {schema: CreatureSchema}
    });
    // strongly typed and ready to go
    return result.output();
  }
)

console.log(await createCreature("a developer conference"));

3. Multimodal, multimedia

Genkit proporciona un formato común para el contenido que admite combinaciones de texto, datos y contenido multimedia arbitrario. Esto te permite usar Genkit para los modelos que realizan cualquier tarea generativa (como la generación de imágenes), no solo los LLM.

import { imagen2, geminiProVision } from '@genkit-ai/vertexai';
import { generate } from '@genkit-ai/ai';

const imageResult = await generate({
  model: imagen2,
  prompt: 'Generate an image of a very specific historical time and place.',
});
const generatedImage = imageResult.media();

const descriptionResult = await generate({
  model: geminiProVision,
  prompt: [
    {
      text: 'What is the historical time and place represented in this picture?',
    },
    { media: generatedImage },
  ],
});
console.log(descriptionResult.text());

4. Proporciona herramientas a los LLM

Genkit facilita la realización de llamadas a funciones con LLM a través de herramientas. Las herramientas permiten que la IA recupere datos, muestre la IU, escriba en una base de datos o realice cualquier otra acción que puedas programar.

import { generate, defineTool } from '@genkit-ai/ai';
import { geminiPro } from '@genkit-ai/vertexai';
import { z } from 'zod';

const createReminder = defineTool(
  {
    name: 'createReminder',
    description: 'Use this to create reminders for things in the future',
    inputSchema: z.object({
      time: z
        .string()
        .describe('ISO timestamp string, e.g. 2024-04-03T12:23:00Z'),
      reminder: z.string().describe('the content of the reminder'),
    }),
    outputSchema: z.number().describe('the ID of the created reminder'),
  },
  (reminder) => db.reminders.create(reminder)
);

const searchNotes = defineTool(
  {
    name: 'searchNotes',
    description: "Use this to search the user's notes for people or phrases",
    inputSchema: z.string().describe('the search query'),
    outputSchema: z.object({ notes: z.array(NoteSchema) }),
  },
  (query) => db.notes.search(query)
);

const result = await generate({
  model: geminiPro,
  tools: [createReminder, searchNotes],
  prompt: `
  You are a note-taking assistant. Using the tools available, try to answer the provided query.
  If you create a reminder, describe in text the reminder you created as a response.

  Query: I took a note about a meeting with Anna - can you set a reminder for the time?
  `,
});
console.log(result.text());

5. Administración de mensajes con Dotprompt

La ingeniería de instrucciones es más que solo ajustar el texto. El modelo que usas, los parámetros que proporcionas y el formato que solicitas afectan la calidad de tu resultado. Genkit ofrece Dotprompt, un formato de archivo de instrucciones que te permite colocar todo en un solo archivo para facilitar la prueba y la organización.

---
model: vertexai/gemini-1.0-pro
config:
  temperature: 0.9
input:
  schema:
    properties:
      location: {type: string}
      style: {type: string}
      name: {type: string}
    required: [location]
  default:
    location: a restaurant
---

You are the world's most welcoming AI assistant and are currently working at {{location}}.

Greet a guest{{#if name}} named {{name}}{{/if}}{{#if style}} in the style of {{style}}{{/if}}.

6. Ejecuta flujos de manera local

La IA generativa tiene mucha variación en los resultados, por lo que experimentar es muy importante. La IU local de Genkit Developer te permite interactuar con componentes de IA esenciales, como modelos y retrievers, además de probar de forma manual tus flujos de extremo a extremo, incluido todo el código personalizado que escribiste.

7. Cómo inspeccionar seguimientos

La depuración de flujos de trabajo complejos y de varios pasos con IA puede ser un desafío debido a la aleatoriedad y los procesos ocultos. Genkit proporciona un inspector de seguimiento en la IU para desarrolladores que te permite inspeccionar seguimientos de cada llamada al modelo y cada paso en tu flujo. Puede ver seguimientos de producción y hasta renderizar imágenes.

8. Abierto y extensible

El ecosistema de IA está creciendo más rápido de lo que cualquier equipo puede seguirle el ritmo. Genkit tiene un modelo de complementos abierto que proporciona integraciones precompiladas con modelos nuevos, recuperadores y mucho más. Si bien el equipo de Genkit mantiene un pequeño conjunto de complementos oficiales, cualquiera puede publicar sus propios complementos en NPM.

¿No encuentras el complemento que buscas para una integración específica? No hay problema. Las abstracciones de Genkit son flexibles y facilitan la compilación de componentes personalizados que se integran en el framework, como este recuperador de Firestore personalizado:

import { embed } from '@genkit-ai/ai/embedder';
import { Document, defineRetriever } from '@genkit-ai/ai/retriever';
import { textEmbeddingGecko } from '@genkit-ai/vertexai';
import {
  FieldValue,
  VectorQuery,
  VectorQuerySnapshot,
} from '@google-cloud/firestore';
import { Firestore } from 'firebase-admin/firestore';
import * as z from 'zod';
import { augmentedPrompt } from './prompt';

const QueryOptions = z.object({
  k: z.number().optional(),
});

const firestoreArtifactsRetriever = defineRetriever(
  {
    name: 'firestore/artifacts',
    configSchema: QueryOptions,
  },
  async (input, options) => {
    const embedding = await embed({
      embedder: textEmbeddingGecko,
      content: input,
    });

    const db = new Firestore();
    const coll = db.collection('vectors' /* your collection name */);

    const vectorQuery: VectorQuery = coll.findNearest(
      'embedding' /* the name of the field that contains the vector */,
      FieldValue.vector(embedding),
      {
        limit: options.k ?? 3,
        distanceMeasure: 'COSINE',
      }
    );

    const vectorQuerySnapshot: VectorQuerySnapshot = await vectorQuery.get();
    return {
      documents: vectorQuerySnapshot.docs.map((doc) =>
        // doc.data() represents the Firestore document. You may process
        // it as needed to generate a Genkit document object, depending on your
        // storage format.
        Document.fromText(doc.data().content.text)
      ),
    };
  }
);

9. Creada para la producción

Implementa fácilmente tus flujos en cualquier plataforma que pueda entregar una app de Express.js. Genkit está completamente instrumentado con OpenTelemetry y metadatos personalizados para la supervisión de producción de nivel empresarial.

También existen complementos oficiales para Google Cloud y Firebase que te permiten exportar datos a Google Cloud's operations suite y también integrarlos en servicios de Firebase, como Cloud Functions para Firebase, Firebase Authentication, Verificación de aplicaciones y Firestore.

Captura de pantalla de Cloud Trace

10. Gestión de autorización y seguridad

Cuando compilas una aplicación pública, es importante proteger los datos almacenados en tu sistema. Cuando se trata de los LLM, se necesita una diligencia adicional para garantizar que el modelo solo acceda a los datos que debería, que las llamadas a herramientas tengan un alcance adecuado para el usuario que invoca el LLM y que solo las aplicaciones cliente verificadas invoquen el flujo.

Genkit proporciona mecanismos para administrar políticas de autorización y contextos.

import { defineFlow, runFlow } from '@genkit-ai/flow';

export const selfSummaryFlow = defineFlow(
  {
    name: 'selfSummaryFlow',
    inputSchema: z.object({uid: z.string()}),
    outputSchema: z.string(),
    authPolicy: (auth, input) => {
      if (!auth) {
        throw new Error('Authorization required.');
      }
      if (input.uid !== auth.uid) {
        throw new Error('You may only summarize your own profile data.');
      }
    }
  },
  async (input) => { ... });

Integraciones

Genkit proporciona integraciones con modelos de IA, bases de datos de vectores, plataformas de telemetría y mucho más a través de su sistema de complementos. El equipo de Genkit mantiene los siguientes complementos:

Complementos oficiales
googleai Modelos generativos: Gemini Pro, Gemini 1.5 Pro y Gemini Pro Vision
Modelos de incorporación: Incorporación de texto de Gecko
vertexai Modelos generativos: Gemini Pro, Gemini Pro Vision, Gemini 1.5 Flash, Gemini 1.5 Pro, Imagen2 y Anthropic Claude 3
Modelos de incorporación: Incorporación de texto de Gecko
Evaluadores: Evaluación de Vertex AI
ollama Modelos generativos: muchos modelos locales, incluidos Gemma, Llama 3, Mistral y muchos más
chroma Base de datos de vectores: ChromaDB
pinecone Base de datos de vectores: piña
google-cloud Herramientas de supervisión: Google Cloud Trace y Google Cloud Logging
firebase Implementación de Cloud: Cloud Functions, Firebase Authentication, Verificación de aplicaciones
Base de datos de vectores: almacén de vectores de Cloud Firestore
langchain Cómo usar cadenas y utilidades de LangChain en flujos de Genkit

Comenzar

Lee la guía de introducción para saber cómo instalar Genkit y ejecutar tu primer flujo de IA.