Firebase Genkit

Genkit es un framework diseñado para ayudarte a compilar aplicaciones y funciones potenciadas por IA. Proporciona bibliotecas de código abierto para Node.js y Go, además de herramientas para desarrolladores para pruebas y depuración.

En esta documentación, se describe Genkit para Node.js. Si eres desarrollador de Go, consulta la documentación de Genkit Go.

Puedes implementar y ejecutar bibliotecas de Genkit en cualquier lugar donde se admita Node.js. Está diseñado para funcionar con cualquier API de modelo de IA generativa o base de datos vectorial. Si bien ofrecemos integraciones para Firebase y Google Cloud, puedes usar Genkit independientemente de cualquier servicio de Google.

Comenzar

Funciones clave

API unificada para la generación de IA Usa una API para generar o transmitir contenido de varios modelos de IA. Funciona con entradas y salidas multimodales, y parámetros de configuración de modelos personalizados.
Resultados estructurados Genera o transmite objetos estructurados (como JSON) con validación integrada. Simplifica la integración con tu app y convierte los datos no estructurados en un formato utilizable.
Llamada a herramientas Permite que los modelos de IA llamen a tus funciones y APIs como herramientas para completar tareas. El modelo decide cuándo y qué herramientas usar.
Chat Genkit ofrece una API específica para chat que facilita conversaciones de varios turnos con modelos de IA, que pueden ser persistentes y con estado.
Agentes Crea agentes inteligentes que usen herramientas (incluidos otros agentes) para ayudar a automatizar tareas y flujos de trabajo complejos.
Recuperación de datos Integra tus datos para mejorar la exactitud y relevancia de los resultados generados. Las APIs simples te ayudan a incorporar, indexar y recuperar información de varias fuentes.
Plantillas de instrucciones Crea instrucciones eficaces que incluyan plantillas de texto enriquecido, parámetros de configuración de modelos, compatibilidad multimodal y la integración de herramientas, todo en un archivo de instrucciones compacto y ejecutable.

Consulta las siguientes muestras de código para obtener una idea concreta de cómo usar estas funciones en el código:

Generación básica

import { genkit } from 'genkit';
import { googleAI, gemini15Flash } from '@genkit-ai/googleai';

const ai = genkit({
  plugins: [googleAI()],
  model: gemini15Flash,  // Set default model
});

// Simple generation
const { text } = await ai.generate('Why is AI awesome?');
console.log(text);

// Streamed generation 
const { stream } = await ai.generateStream('Tell me a story');
for await (const chunk of stream) {
  console.log(chunk.text);
}

Resultados estructurados

import { genkit, z } from 'genkit';
import { googleAI, gemini15Flash } from '@genkit-ai/googleai';

const ai = genkit({
  plugins: [googleAI()],
  model: gemini15Flash,
});

const { output } = await ai.generate({
  prompt: 'Create a brief profile for a character in a fantasy video game.',
  // Specify output structure using Zod schema
  output: {
    format: 'json',  
    schema: z.object({
      name: z.string(),
      role: z.enum(['knight', 'mage', 'archer']),
      backstory: z.string(),
    }),
  },
});

console.log(output);

Llamada a función

import { genkit, z } from 'genkit';
import { googleAI, gemini15Flash } from '@genkit-ai/googleai';

const ai = genkit({
  plugins: [googleAI()],
  model: gemini15Flash,
});

// Define tool to get current weather for a given location
const getWeather = ai.defineTool(
  {
    name: "getWeather",
    description: "Gets the current weather in a given location",
    inputSchema: z.object({ 
      location: z.string().describe('The location to get the current weather for')
    }),
    outputSchema: z.string(),
  },
  async (input) => {
    // Here, we would typically make an API call or database query. For this
    // example, we just return a fixed value.
    return `The current weather in ${input.location} is 63°F and sunny.`;
  }
);

const { text } = await ai.generate({
    tools: [getWeather], // Give the model a list of tools it can call
    prompt: 'What is the weather like in New York? ',
});

console.log(text);

Chat

import { genkit, z } from 'genkit';
import { googleAI, gemini15Flash } from '@genkit-ai/googleai';

const ai = genkit({
  plugins: [googleAI()],
  model: gemini15Flash,
});

const chat = ai.chat({ system: 'Talk like a pirate' });

let response = await chat.send('Hi, my name is Pavel');

response = await chat.send('What is my name?');
console.log(response.text);
// Ahoy there! Your name is Pavel, you scurvy dog

Agentes

import { genkit, z } from 'genkit';
import { googleAI, gemini15Flash } from '@genkit-ai/googleai';

const ai = genkit({
  plugins: [googleAI()],
  model: gemini15Flash,
});

// Define prompts that represent specialist agents
const reservationAgent = ai.definePrompt(
  {
    name: 'reservationAgent',
    description: 'Reservation Agent can help manage guest reservations',
    tools: [reservationTool, reservationCancelationTool, reservationListTool],

  },
  `{{role "system"}} Help guests make and manage reservations`
);

const menuInfoAgent = ...
const complaintAgent = ...

// Define a triage agent that routes to the proper specialist agent
const triageAgent = ai.definePrompt(
  {
    name: 'triageAgent',
    description: 'Triage Agent',
    tools: [reservationAgent, menuInfoAgent, complaintAgent],
  },
  `{{role "system"}} You are an AI customer service agent for Pavel's Cafe.
  Greet the user and ask them how you can help. If appropriate, transfer to an
  agent that can better handle the request. If you cannot help the customer with
  the available tools, politely explain so.`
);

// Create a chat to enable multi-turn agent interactions
const chat = ai.chat(triageAgent);

chat.send('I want a reservation at Pavel\'s Cafe for noon on Tuesday.' );

Recuperación de datos

import { genkit } from 'genkit';
import { googleAI, gemini15Flash, textEmbedding004 } from '@genkit-ai/googleai';
import { devLocalRetrieverRef } from '@genkit-ai/dev-local-vectorstore';

const ai = genkit({ 
  plugins: [
    googleAI()
    devLocalVectorstore([
      {
        indexName: 'BobFacts',
        embedder: textEmbedding004,
      },
    ]),
  ],
  model: gemini15Flash,
});

// Reference to a local vector database storing Genkit documentation
const retriever = devLocalRetrieverRef('BobFacts');

// Consistent API to retrieve most relevant documents based on semantic similarity to query
const docs = await ai.retrieve(
  retriever: retriever,
  query: 'How old is bob?',
);

const result = await ai.generate({
    prompt: `Use the provided context from the Genkit documentation to answer this query: ${query}`,
    docs // Pass retrieved documents to the model
});

Plantilla de instrucciones

---
model: vertexai/gemini-1.5-flash
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 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}}.

Herramientas de desarrollo

Genkit proporciona una interfaz de línea de comandos (CLI) y una IU para desarrolladores local para facilitar la compilación de aplicaciones de IA. Estas herramientas te ayudan a hacer lo siguiente:

  • Experimenta: Prueba y define mejor tus funciones, instrucciones y consultas de IA.
  • Depuración: Encuentra y soluciona problemas con seguimientos de ejecución detallados.
  • Evalúa: Evalúa los resultados generados en varios casos de prueba.

Conéctese con nosotros

  • Únete a la comunidad: Mantente al tanto de las novedades, haz preguntas y comparte tu trabajo en nuestro servidor de Discord.
  • Envía comentarios: Informa problemas o sugiere nuevas funciones con nuestro seguimiento de problemas de GitHub.

Próximos pasos

Obtén información para compilar tu primera aplicación de IA con Genkit en nuestra guía de Introducción.