Firebase Genkit

Firebase Genkit, üremeye hazır yapay zeka destekli uygulamaları derlemenize, dağıtmanıza ve izlemenize yardımcı olan açık kaynak bir çerçevedir.

Genkit logosu

Genkit, bilinen kalıplar ve paradigmalarla güçlü AI özelliklerini uygulamalarınıza kolayca entegre etmenize yardımcı olmak amacıyla uygulama geliştiriciler için tasarlanmıştır. Firebase'in arkasındaki ekip tarafından geliştirilen bu çözüm, dünya çapında milyonlarca geliştirici tarafından kullanılan araçlar oluşturma konusundaki deneyimimizden yararlanmaktadır.

Özel içerik oluşturan, anlamsal arama kullanan, yapılandırılmamış girişleri işleyen, soruları iş verilerinizle cevaplayan, bağımsız bir şekilde karar veren, araç çağrılarını düzenleyen ve çok daha fazlasını yapan uygulamalar oluşturmak için Genkit'i kullanın.

Genkit şu anda JavaScript/TypeScript'te (Node.js) sunucu tarafı geliştirmeyi desteklemektedir. Ayrıca, etkin geliştirme aşamasındaki Go desteği de mevcuttur.

Bu aracın gelişimini takip edin veya GitHub deposunda kendiniz katkıda bulunun.

Temel özellikler

Genkit, prototipinizin başlangıcından üretimde izlemeye kadar yapay zeka geliştirme yolculuğunuzun her adımında size yardımcı olmaya hazırdır. Bu yüzden konuşulacak çok şey var.

Başlangıç olarak seveceğinizi düşündüğümüz 10 temel Genkit özelliğini aşağıda bulabilirsiniz:

1. Birçok model, tek bir arayüz

Genkit, popüler modellere hemen erişmenizi sağlayan eklentiler ve herhangi bir model API'sini entegre etmeyi ve topluluk tarafından yönetilen modelleri kullanmayı kolaylaştıran esnek bir model soyutlama aracı sunar. Yeni bir model denemek, tek bir bağımsız değişkeni değiştirmek kadar kolaydır. Ancak her model özel yapılandırmalar belirtebilir.

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. Yapılandırılmış çıkış

Zod şemasını kullanarak Genkit ile güçlü bir şekilde yazılmış veriler oluşturun. Bu, yapılandırılmamış metinleri analiz etmenize, reklam içeriği oluşturmanıza, görev seçmenize ve sonuçları, yapılandırılmış, tür açısından güvenli nesneler olarak uygulamanıza geri göndermenize yardımcı olabilir.

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. Çok modlu, multimedya

Genkit metin, veri ve rastgele medya karışımını destekleyen içerikler için ortak bir biçim sağlar. Bu sayede Genkit'i yalnızca LLM'ler değil, tüm üretken görevleri (ör. görüntü oluşturma) gerçekleştiren modeller için kullanabilirsiniz.

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. LLM'lere (büyük dil modeli) araçlar sağlayın

Genkit, araçlar aracılığıyla LLM'lerle işlev çağrısı yapmayı kolaylaştırır. Araçlar, yapay zekanın verileri getirmesini, kullanıcı arayüzünü göstermesini, veritabanına yazmasını veya kodlayabileceğiniz diğer işlemleri yapmasını mümkün kılar.

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. Dotprompt ile istem yönetimi

İstem mühendisliği, metinde ufak değişiklikler yapmaktan ibaret değildir. Kullandığınız model, sağladığınız parametreler ve istediğiniz biçim, çıkışınızın kalitesini etkiler. Genkit, test etmeyi ve düzenlemeyi kolaylaştırmak için her şeyi tek bir dosyaya yerleştirebileceğiniz bir istem dosya biçimi olan Dotprompt'ı sunar.

---
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. Akışları yerel olarak çalıştırma

Üretken yapay zekanın sonuçları birbirinden çok farklı olduğundan denemeler yapmak son derece önemlidir. Yerel Genkit Geliştirici Kullanıcı Arayüzü, modeller ve alıcılar gibi temel AI bileşenleriyle etkileşim kurmanıza ve yazdığınız tüm özel kod dahil olmak üzere uçtan uca akışlarınızı manuel olarak test etmenize olanak tanır.

7. İzleri incele

AI ile karmaşık, çok adımlı iş akışlarında hata ayıklamak, rastgele ve gizli süreçler nedeniyle zor olabilir. Genkit, geliştirici kullanıcı arayüzünde akışınızdaki her model çağrısı ve adımına ait izleri incelemenizi sağlayan bir iz denetleyicisi sağlar. Üretimden izleri görüntüleyebilir, hatta görüntüleri bile oluşturabilir.

8. Açık ve genişletilebilir

Yapay zeka ekosistemi, herhangi bir ekibin ayak uydurabileceğinden daha hızlı büyüyor. Genkit; yeni modeller, alıcılar ve daha fazlasıyla önceden oluşturulmuş entegrasyonlar sağlayan açık bir eklenti modeline sahiptir. Genkit ekibi küçük bir resmi eklenti setine sahip olsa da isteyen herkes kendi Genkit eklentilerini NPM'de yayınlayabilir.

İstediğiniz belirli bir entegrasyon için eklenti bulamıyor musunuz? Sorun değil. Genkit'in soyutlamaları esnektir ve çerçeveye entegre olan şu özel Firestore retriever gibi özel bileşenler oluşturmayı kolaylaştırır:

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. Üretim için tasarlandı

Akışlarınızı Express.js uygulaması sunabilen herhangi bir platforma kolayca dağıtın. Genkit, kurumsal düzeyde üretim izleme için OpenTemetri ve özel meta verilerle tam donanıma sahiptir.

Verileri Google Cloud'un işlem paketine aktarmanıza ve Cloud Functions for Firebase, Firebase Authentication, Uygulama Kontrolü ve Firestore gibi Firebase hizmetleriyle entegre etmenize yardımcı olan resmi Google Cloud ve Firebase eklentileri de mevcuttur.

Cloud Trace ekran görüntüsü

10. Yetkilendirme ve güvenlik işlemleri

Herkese açık bir uygulama oluştururken sisteminizde depolanan verileri korumak önemlidir. LLM'ler söz konusu olduğunda modelin yalnızca olması gereken verilere eriştiğinden, araç çağrılarının LLM'yi çağıran kullanıcı için doğru şekilde kapsama alındığından ve akışın yalnızca doğrulanmış istemci uygulamaları tarafından çağrıldığından emin olmak için ekstra özen gerekir.

Genkit, yetkilendirme politikalarını ve bağlamları yönetmeye yönelik mekanizmalar sunar.

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

Entegrasyonlar

Genkit, eklenti sistemi aracılığıyla yapay zeka modelleri, vektör veritabanları, telemetri platformları ve daha fazlasıyla entegrasyon sağlar. Aşağıdaki eklentiler Genkit ekibi tarafından yönetilir:

Resmi eklentiler
googleai Üretken modeller: Gemini Pro, Gemini 1.5 Pro, Gemini Pro Vision
Modelleri yerleştirme: Gecko metni yerleştirme
vertexai Üretken modeller: Gemini Pro, Gemini Pro Vision, Gemini 1.5 Flash, Gemini 1.5 Pro, Imagen2, Anthropic Claude 3
Modelleri yerleştirme: Gecko metni yerleştirme
Değerlendirmeciler: Vertex AI değerlendirmesi
ollama Üretken modeller: Gemma, Llama 3, Mistral gibi birçok yerel model
chroma Vektör veritabanı: ChromaDB
pinecone Vektör veritabanı: Pinecone
google-cloud İzleme araçları: Google Cloud Trace, Google Cloud Logging
firebase Cloud dağıtımı: Cloud Functions, Firebase Authentication, Uygulama Kontrolü
Vektör veritabanı: Cloud Firestore vektör deposu
langchain Genkit akışlarında LangChain zincirlerini ve yardımcı programlarını kullanma

Başlayın

Genkit'i nasıl yükleyeceğinizi ve ilk AI akışınızı nasıl çalıştıracağınızı öğrenmek için Başlangıç kılavuzunu okuyun.