Firebase Genkit

Firebase Genkit, üreme hazır yapay zeka destekli uygulamalar geliştirmenize, dağıtmanıza ve izlemenize yardımcı olan açık kaynaklı bir çerçevedir.

Genkit logosu

Genkit, güçlü AI özelliklerini bilinen kalıplar ve paradigmalarla uygulamalarınıza kolayca entegre etmenize yardımcı olmak için uygulama geliştiriciler için tasarlanmıştır. Firebase'in ardındaki ekip tarafından derlenmiştir. Böylece, dünya çapında milyonlarca geliştirici tarafından kullanılan araçlar oluşturma konusundaki deneyimimizden faydalanır.

Özel içerik oluşturan uygulamalar oluşturmak, anlamsal arama kullanmak, yapılandırılmamış girişleri işlemek, iş verilerinizle soruları yanıtlamak, kendiliğinden karar almak, araç çağrılarını düzenlemek ve çok daha fazlası için Genkit'i kullanın.

Genkit şu anda etkin geliştirme aşamasında Go desteğiyle JavaScript/TypeScript'te (Node.js) sunucu tarafı geliştirmeyi desteklemektedir.

Kod deposunun GitHub deposunda geliştirme sürecini takip edin veya kendi katkılarınızı yapın.

Temel özellikler

Genkit, prototip oluşturma sürecinizin başlangıcından üretimde izlemeye kadar yapay zeka geliştirme yolculuğunuzun her adımında size yardımcı olmak için yanınızdadır. Bu nedenle, konuşulacak çok şey var.

Başlamanıza yardımcı olmak için Genkit'in seveceğinizi düşündüğümüz 10 temel özelliğini burada bulabilirsiniz:

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

Genkit, kullanıma hazır popüler modellere erişmenizi sağlayan eklentiler ve herhangi bir model API'yi entegre etmeyi ve topluluk tarafından sağlanan modelleri kullanmayı kolaylaştıran esnek bir model soyutlama olanağı sunar. Yeni bir modeli 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 belirli bir şekilde yazılmış veriler oluşturun. Bu, yapılandırılmamış metinleri analiz etmenize, reklam öğesi içeriği oluşturmanıza, görevleri seçmenize ve sonuçları, yapılandırılmış tür için 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ışımlarını destekleyen içerik için yaygın bir biçim sağlar. Bu, yalnızca LLM'leri değil, üretken görevleri (ör. görüntü oluşturma) gerçekleştiren modeller için Genkit'i kullanabilmenizi sağlar.

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 araçlar sunun

Genkit, araçlar aracılığıyla LLM'lerle işlev çağrısı yapmayı kolaylaştırır. Araçlar, yapay zekanın veri getirmesini, kullanıcı arayüzünü görüntülemesini, bir veritabanına yazmasını veya kodlayabileceğiniz diğer işlemleri gerçekleştirmesini 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

Hızlı yanıt vermek, metin üzerinde ince ayar yapmaktan daha fazlasıdır. Kullandığınız model, sağladığınız parametreler ve istediğiniz biçim çıkışınızın kalitesini etkiler. Genkit, Dotprompt istemini dosya biçiminde sunar. İstem dosya biçimi sayesinde her şeyi daha kolay test ve düzen için tek bir dosyaya yerleştirebilirsiniz.

---
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çlarda çok fazla etkisi vardır. Bu nedenle, denemeler yapmak son derece önemlidir. Yerel Genkit Geliştirici Kullanıcı Arayüzü, modeller ve retriever'lar gibi temel AI bileşenleriyle etkileşim kurmanıza ve yazdığınız tüm özel kodlar dahil uçtan uca akışlarınızı manuel olarak test etmenize olanak tanır.

7. İzleri incele

Karmaşık ve çok adımlı iş akışlarında AI ile hata ayıklamak, rastgele olması ve gizli süreçler nedeniyle zor olabilir. Genkit, geliştirici kullanıcı arayüzünde her model çağrısı ve akışınızdaki adımlar için izleri incelemenize olanak tanıyan bir iz denetleyici sunar. Üretimdeki izleri görüntüleyebilir, hatta görüntüleri oluşturabilir.

8. Açık ve genişletilebilir

Yapay zeka ekosistemi, herhangi bir ekibin yetişemeyeceğinden daha hızlı büyüyor. Genkit, yeni modellerle, alıcılarla 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 herkes kendi Genkit eklentilerini AİOY'de yayınlayabilir.

İstediğiniz belirli bir entegrasyon için eklenti bulamıyor musunuz? Sorun değil. Genkit'in soyutlamaları esnektir ve bu özel Firestore retriever gibi çerçeveye entegre olan ö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 geliştirildi

Akışlarınızı, Express.js uygulaması sunabilen herhangi bir platforma kolayca dağıtın. Genkit, kurumsal düzeyde üretim izleme için OpenTelemetry ve özel meta verilerle tamamen donatılmıştır.

Ayrıca Google Cloud'un işlem paketine veri aktarmanıza ve Cloud Functions for Firebase, Firebase Authentication, App Check ve Firestore gibi Firebase hizmetleriyle entegrasyon yapmanıza yardımcı olan resmi Google Cloud ve Firebase eklentileri vardır.

Cloud Trace ekran görüntüsü

10. Yetkilendirme ve güvenlik işlemleri

Herkese açık bir uygulama derlerken 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ıya düzgün bir şekilde dahil edildiğinden 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önetmek için mekanizmalar sağlar.

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
Yerleştirme modelleri: Gecko metin yerleştirme
vertexai Üretken modeller: Gemini Pro, Gemini Pro Vision, Gemini 1.5 Flash, Gemini 1.5 Pro, Imagen2, Anthropic Claude 3
Yerleştirme modelleri: Gecko metin yerleştirme
Değerlendirme araçları: Vertex AI değerlendirmesi
ollama Üretken modeller: Gemma, Llama 3, Mistral ve diğerleri 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şlarken kılavuzunu okuyun.