Firebase Genkit

Firebase Genkit adalah framework open source yang membantu Anda membangun, men-deploy, dan memantau aplikasi yang didukung AI yang siap produksi.

Logo Genkit

Genkit dirancang untuk developer aplikasi, untuk membantu Anda mengintegrasikan kemampuan AI yang canggih ke dalam aplikasi Anda dengan mudah menggunakan pola dan paradigma yang sudah dikenal. Layanan ini dibangun oleh tim yang sama di belakang Firebase, dan memanfaatkan pengalaman kami dalam membangun alat yang digunakan oleh jutaan developer di seluruh dunia.

Gunakan Genkit untuk membuat aplikasi yang menghasilkan konten kustom, menggunakan penelusuran semantik, menangani input tidak terstruktur, menjawab pertanyaan terkait data bisnis, membuat keputusan secara mandiri, mengatur panggilan alat, dan banyak lagi.

Genkit saat ini mendukung pengembangan sisi server di JavaScript/TypeScript (Node.js) dengan dukungan Go dalam pengembangan aktif.

Ikuti perkembangannya atau berikan kontribusi Anda sendiri di repositori GitHub-nya.

Fitur utama

Genkit hadir untuk membantu Anda melalui setiap langkah perjalanan pengembangan AI, dari awal pembuatan prototipe hingga pemantauan dalam produksi—jadi ada banyak hal yang perlu dibahas.

Untuk membantu Anda memulai, berikut 10 fitur utama Genkit yang mungkin akan Anda sukai:

1. Banyak model, satu antarmuka

Genkit menyediakan plugin yang memberi Anda akses langsung ke model populer dan abstraksi model fleksibel yang memudahkan Anda mengintegrasikan API model dan menggunakan model yang dikelola komunitas. Mencoba model baru semudah mengubah satu argumen, tetapi setiap model dapat menentukan konfigurasi kustom.

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. {i>Output<i} terstruktur

Membuat data berjenis kuat dengan Genkit menggunakan skema Zod. Hal ini dapat membantu Anda menganalisis teks yang tidak terstruktur, menghasilkan konten kreatif, memilih tugas, dan mengirim kembali hasilnya ke aplikasi Anda sebagai objek yang aman untuk jenis terstruktur.

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 menyediakan format umum untuk konten yang mendukung campuran teks, data, dan media arbitrer. Hal ini memungkinkan Anda menggunakan Genkit untuk model yang melakukan tugas generatif apa pun (seperti pembuatan gambar), bukan hanya 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. Menyediakan alat LLM

Genkit memudahkan pemanggilan fungsi dengan LLM melalui alat. Alat memungkinkan AI mengambil data, menampilkan UI, menulis ke database, atau melakukan tindakan lain yang dapat Anda buat kodenya.

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. Pengelolaan prompt dengan Dotprompt

Prompt Engineering lebih dari sekadar menyesuaikan teks. Model yang Anda gunakan, parameter yang Anda berikan, dan format yang Anda minta semuanya memengaruhi kualitas output Anda. Genkit menawarkan Dotprompt, format file perintah yang memungkinkan Anda menempatkan semuanya ke dalam satu file untuk memudahkan pengujian dan pengaturan.

---
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. Menjalankan flow secara lokal

AI generatif memiliki banyak variasi hasilnya, jadi bereksperimenlah sangat penting. UI Developer Genkit lokal memungkinkan Anda berinteraksi dengan komponen AI penting seperti model dan retriever, serta menguji alur menyeluruh secara manual termasuk semua kode kustom yang Anda tulis.

7. Memeriksa rekaman aktivitas

Proses debug alur kerja multi-langkah yang kompleks dengan AI dapat menjadi tantangan karena keacakan dan proses tersembunyi. Genkit menyediakan pemeriksa rekaman aktivitas di UI developer yang memungkinkan Anda memeriksa rekaman aktivitas untuk setiap panggilan model dan langkah dalam alur. Platform ini dapat melihat rekaman aktivitas dari produksi dan bahkan merender gambar.

8. Terbuka & dapat diperluas

Ekosistem AI berkembang lebih cepat daripada yang dapat diikuti oleh satu tim. Genkit memiliki model plugin terbuka yang menyediakan integrasi bawaan dengan model baru, pengambil, dan lainnya. Meskipun tim Genkit mengelola sejumlah kecil plugin resmi, siapa pun dapat memublikasikan plugin Genkit mereka sendiri ke NPM.

Tidak dapat menemukan plugin untuk integrasi tertentu yang Anda inginkan? Tidak masalah. Abstraksi Genkit bersifat fleksibel dan memudahkan pembuatan komponen kustom yang terintegrasi ke dalam framework, seperti pengambilan Firestore kustom ini:

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. Dibuat untuk produksi

Deploy flow dengan mudah ke platform apa pun yang dapat menyalurkan aplikasi Express.js. Genkit sepenuhnya diinstrumentasikan dengan OpenTelemetry dan metadata kustom untuk pemantauan produksi tingkat perusahaan.

Terdapat juga plugin resmi untuk Google Cloud dan Firebase yang membantu Anda mengekspor data ke Google Cloud Operations Suite dan berintegrasi dengan layanan Firebase seperti Cloud Functions for Firebase, Firebase Authentication, App Check, dan Firestore.

Screenshot Cloud Trace

10. Penanganan otorisasi & keamanan

Saat mem-build aplikasi yang ditampilkan kepada publik, penting untuk melindungi data yang tersimpan di sistem Anda. Dalam hal LLM, ketekunan ekstra diperlukan untuk memastikan bahwa model hanya mengakses data yang seharusnya, panggilan alat sudah dicakup dengan tepat oleh pengguna yang memanggil LLM, dan alurnya dipanggil hanya oleh aplikasi klien terverifikasi.

Genkit menyediakan mekanisme untuk mengelola kebijakan dan konteks otorisasi.

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) => { ... });

Integrasi

Genkit menyediakan integrasi dengan model AI, database vektor, platform telemetri, dan lainnya melalui sistem pluginnya. Plugin berikut dikelola oleh tim Genkit:

Plugin resmi
googleai Model generatif: Gemini Pro, Gemini 1.5 Pro, Visi Gemini Pro
Model penyematan: Penyematan teks Gecko
vertexai Model generatif: Gemini Pro, Gemini Pro Vision, Gemini 1.5 Flash, Gemini 1.5 Pro, Imagen2, Claude 3
Embedding model: Penyematan teks Gecko
Evaluator: Evaluasi Vertex AI
ollama Model generatif: Banyak model lokal, termasuk Gemma, Llama 3, Mistral, dan lainnya
chroma Database vektor: ChromaDB
pinecone Database vektor: Pinus
google-cloud Alat pemantauan: Google Cloud Trace, Google Cloud Logging
firebase Deployment cloud: Cloud Functions, Firebase Authentication, App Check
Vector database: Penyimpanan vektor Cloud Firestore
langchain Menggunakan rantai dan utilitas LangChain dalam alur Genkit

Mulai

Baca panduan Memulai untuk mempelajari cara menginstal Genkit dan menjalankan alur AI pertama Anda.