Firebase Genkit

Genkit est un framework conçu pour vous aider à créer des applications et des fonctionnalités optimisées par l'IA. Il fournit des bibliothèques Open Source pour Node.js et Go, ainsi que des outils de développement pour le test et le débogage.

Cette documentation concerne Genkit pour Node.js. Si vous êtes un développeur Go, consultez la documentation Genkit Go.

Vous pouvez déployer et exécuter des bibliothèques Genkit partout où Node.js est pris en charge. Il est conçu pour fonctionner avec n'importe quelle API de modèle d'IA générative ou base de données vectorielle. Bien que nous proposions des intégrations pour Firebase et Google Cloud, vous pouvez utiliser Genkit indépendamment de tout service Google.

Commencer

Capacités clés

API unifiée pour la génération d'IA Utilisez une seule API pour générer ou diffuser du contenu à partir de différents modèles d'IA. Fonctionne avec les entrées/sorties multimodales et les paramètres de modèle personnalisés.
Sortie structurée Générez ou diffusez des objets structurés (comme JSON) avec une validation intégrée. Simplifiez l'intégration à votre application et convertissez les données non structurées dans un format utilisable.
Appel d'outil Autorisez les modèles d'IA à appeler vos fonctions et API comme outils pour effectuer des tâches. Le modèle décide quand et quels outils utiliser.
Chat Genkit propose une API spécifique au chat qui facilite les conversations multitours avec des modèles d'IA, qui peuvent être avec état et persistants.
Agents Créez des agents intelligents qui utilisent des outils (y compris d'autres agents) pour automatiser des tâches et des workflows complexes.
Récupération de données Améliorez la précision et la pertinence des résultats générés en intégrant vos données. Des API simples vous aident à intégrer, indexer et récupérer des informations à partir de diverses sources.
Modèles de requêtes Créez des requêtes efficaces qui incluent la création de modèles de texte enrichi, les paramètres du modèle, la prise en charge multimodale et l'intégration d'outils, le tout dans un fichier de requête compact et exécutable.

Consultez les exemples de code suivants pour découvrir comment utiliser ces fonctionnalités dans le code:

Génération de base

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

Sortie structurée

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

Appel de fonction

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

Agents

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.' );

Récupération des données

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

Modèle d'invite

---
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}}.

Outils de développement

Genkit fournit une interface de ligne de commande (CLI) et une UI de développeur locale pour faciliter la création d'applications d'IA. Ces outils vous aident à:

  • Testez vos fonctions, requêtes et invites d'IA, et affinez-les.
  • Débogage:identifiez et corrigez les problèmes à l'aide de traces d'exécution détaillées.
  • Évaluer:évaluez les résultats générés dans plusieurs scénarios de test.

Nous contacter

  • Rejoignez la communauté:restez informé, posez des questions et partagez votre travail sur notre serveur Discord.
  • Envoyez vos commentaires:signalez des problèmes ou suggérez de nouvelles fonctionnalités à l'aide de notre outil de suivi des problèmes GitHub.

Étapes suivantes

Découvrez comment créer votre première application d'IA avec Genkit dans notre guide de démarrage.