Firebase Genkit

Firebase Genkit adalah framework open source yang membantu Anda membangun, men-deploy, dan memantau aplikasi yang didukung teknologi AI 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. Produk ini dibuat oleh tim yang sama di belakang Firebase, yang 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 dengan data bisnis, membuat keputusan secara mandiri, mengorkestrasi panggilan alat, dan banyak lagi.

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

Ikuti pengembangannya atau beri kontribusi Anda sendiri di repositori GitHub.

Fitur utama

Genkit siap membantu Anda melalui setiap langkah perjalanan pengembangan AI, mulai dari awal pembuatan prototipe hingga pemantauan dalam produksi. Jadi, ada banyak hal yang dapat dibahas.

Untuk memulai, berikut 10 fitur Genkit utama 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 integrasi 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. Output terstruktur

Menghasilkan data bertipe kuat dengan Genkit menggunakan skema Zod. Hal ini dapat membantu Anda menganalisis teks tidak terstruktur, membuat konten kreatif, memilih tugas, dan mengirim hasil kembali ke aplikasi Anda sebagai objek terstruktur dengan keamanan jenis.

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. Dengan demikian, Anda dapat 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 Anda melakukan panggilan fungsi dengan LLM melalui alat. Dengan alat, AI dapat mengambil data, menampilkan UI, menulis ke database, atau melakukan tindakan lain yang dapat Anda kodekan.

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 perintah 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 menyimpan 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 alur secara lokal

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

7. Memeriksa rekaman aktivitas

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

8. Terbuka & dapat diperluas

Ekosistem AI berkembang lebih cepat daripada yang dapat ditandingi oleh satu tim. Genkit memiliki model plugin terbuka yang menyediakan integrasi bawaan dengan model dan pengambil baru, serta lainnya. Meskipun tim Genkit mengelola sejumlah kecil plugin resmi, siapa pun dapat dengan bebas 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 untuk mem-build komponen kustom yang terintegrasi ke dalam framework, seperti pengambil 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 alur Anda 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.

Ada juga plugin resmi untuk Google Cloud dan Firebase yang dapat 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 membangun aplikasi yang ditampilkan ke publik, penting untuk melindungi data yang tersimpan di sistem Anda. Sehubungan dengan LLM, ketekunan ekstra diperlukan untuk memastikan bahwa model hanya mengakses data yang seharusnya, panggilan alat tercakup dengan benar ke pengguna yang memanggil LLM, dan flow hanya dipanggil 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 plugin-nya. Plugin berikut dikelola oleh tim Genkit:

Plugin resmi
googleai Model generatif: Gemini Pro, Gemini 1.5 Pro, Gemini Pro Vision
Model penyematan: Penyematan teks Gecko
vertexai Model generatif: Gemini Pro, Gemini Pro Vision, Gemini 1.5 Flash, Gemini 1.5 Pro, Imagen2, Anthropic Claude 3
Model penyematan: Penyematan teks tokek
Evaluator: Evaluasi Vertex AI
ollama Model generatif: Banyak model lokal, termasuk Gemma, Llama 3, Mistral, dan banyak lagi
chroma Database vektor: ChromaDB
pinecone Database vektor: Pinecone
google-cloud Alat pemantauan: Google Cloud Trace, Google Cloud Logging
firebase Deployment cloud: Cloud Functions, Firebase Authentication, App Check
Database vektor: 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.