Firebase Genkit

Firebase Genkit, uygulamanızı veya oyununuzu geliştirmenize, dağıtmanıza, ve üremeye hazır yapay zeka destekli uygulamaları izleyin.

Genkit logosu

Genkit, uygulama geliştiriciler için özel olarak tasarlanmıştır. Böylece, uygulamanızı entegre aşina olduğunuz kalıplar ve paradigmalarla uygulamalarınıza güçlü AI özellikleri kazandırın. Firebase'in arkasındaki ekip tarafından geliştirilmiştir ve .

Özel içerik oluşturan, anlamsal aramayı kullanan, yapılandırılmamış girişleri yönetebilir, soruları iş verilerinizle cevaplayabilir, bağımsız olarak karar alabilir, araç çağrılarını düzenleyebilir ve çok daha fazlasını yapabilir!

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

Programın gelişimini takip edin veya GitHub deposu.

Temel özellikler

Genkit, yapay zekayı geliştirme yolculuğunuzun her adımında size yardımcı olmaya hazırdır. ve üretimde izlemeye kadar her şeyinizi ortaya koyuyor. konuşacak ç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 sunar. Ayrıca tüm model API'lerini entegre etmeyi kolaylaştıran esnek bir model soyutlaması topluluk tarafından sağlanan modelleri kullanın. Yeni bir model denemek tek bir bağımsız değişkeni değiştirmek kadar kolay olsa da 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 etmek, reklam içeriği oluşturmak, görevleri seçmek ve sonuçları yapılandırılmış, tür açısından güvenli nesneler olarak uygulamanıza geri gönderir.

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, resim ve video gibi içerikleri destekleyen içerikler için rastgele medya içerikleri. Bu özellik, herhangi bir performansa sahip modeller için Genkit'i kullanmanıza olanak tanır. üretken görev (ör. görsel oluşturma) olduğunu öğreneceğiz.

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 başka bir işlem var.

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, belirttiğiniz tüm parametreler ve istediğiniz biçim, reklam öğenizin kalitesini çıktı. Genkit, istediğiniz her şeyi koymanızı sağlayan bir istem dosyası biçimi olan Dotprompt'ı sunar. tek bir dosyada toplamanızı sağlar.

---
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ı çok farklı olduğundan denemeler yapmak son derece önemlidir. önemlidir. Yerel Genkit geliştirici kullanıcı arayüzü, temel yapay zeka ile etkileşime geçmenizi sağlar. daha da ayrıntılı testler yapabilir ve tümünü manuel olarak test edebilirsiniz. akışlar, akışlar ve akışlar.

7. İzleri incele

Yapay zeka ile karmaşık, çok adımlı iş akışlarında hata ayıklamak, riskleri ve gizli süreçleri ifade eder. Genkit, Search Console'da akışı sağlar. Üretimden izleri görüntüleyebilir, hatta görüntüleri bile oluşturabilir.

8. Aç ve genişletilebilir

Yapay zeka ekosistemi, herhangi bir ekibin ayak uydurabileceğinden daha hızlı büyüyor. Genkit yeni modellerle önceden oluşturulmuş entegrasyonlar sağlayan açık bir eklenti modeline sahiptir. için kullanılır. Küçük bir resmi kadrosu korurken: eklentisine sahip olan herkes kendi Genkit eklentilerini NPM'ye yayınlayabilir.

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

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ı sunabilecek herhangi bir platforma kolayca dağıtın. Genkit, aşağıdakiler için OpenTelememetri ve özel meta veri ile tam donanıma sahiptir: Kurumsal düzeyde üretim izleme.

Google Cloud ve Firebase için resmi eklentilerden de yararlanarak verileri Google Cloud'un işlem paketine aktarma ve Firebase ile entegre etme Firebase için Cloud Functions, Firebase Authentication, Uygulama Kontrolü gibi hizmetler ve ve Firestore.

Cloud Trace ekran görüntüsü

10. Yetkilendirme ve güvenlik işlemi

Herkese açık uygulama geliştirirken, verilerini korumak önemlidir. sisteminizde saklanır. LLM'ler söz konusu olduğunda, uzmanlığı sağlamak için modelin yalnızca olması gereken verilere eriştiğinden, araç çağrılarının düzgün şekilde LLM'yi çağıran kullanıcı kapsama alınır ve akış yalnızca doğrulanmış istemci uygulamalarıdır.

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; yapay zeka modelleri, vektör veritabanları ve telemetri ile entegrasyonlar sağlar platformlar ve daha fazlası için kullanabilirsiniz. Aşağıdaki eklentiler tarafından yönetilir:

Resmi eklentiler
googleai Üretken modeller: Gemini Pro, Gemini 1.5 Pro, Gemini Pro Vision
Model 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
Model yerleştirme: Gecko metni yerleştirme
Değerlendiriciler: 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 Bulut 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 öğrenmek için başlangıç kılavuzunu okuyun. ve ilk AI akışınızı çalıştırın.