Firebase Genkit

Firebase Genkit to platforma open source, która ułatwia tworzenie, wdrażanie, i monitorować aplikacje oparte na AI gotowe do wykorzystania w środowisku produkcyjnym.

Logo Genkit

Usługa Genkit została opracowana z myślą o deweloperach aplikacji, co ułatwia integrację zaawansowanych możliwości AI w swoich aplikacjach według dobrze znanych wzorców i paradygmatów. Został opracowany przez ten sam zespół, który jest odpowiedzialny za Firebase, a nasze doświadczenie tworzenie narzędzi używanych przez miliony programistów na całym świecie.

Genkit pozwala tworzyć aplikacje, które generują niestandardowe treści, korzystają z wyszukiwania semantycznego obsługi nieuporządkowanych danych wejściowych, odpowiadania na pytania za pomocą firmowych baz danych samodzielnie podejmować decyzje, administrować wywołaniami narzędzi i nie tylko.

Genkit obecnie obsługuje programowanie po stronie serwera w języku JavaScript/TypeScript (Node.js) z obsługą języka Go w trakcie aktywnego programowania.

Śledź jej rozwój lub wnieś swój wkład Repozytorium GitHub.

Najważniejsze funkcje

Genkit pomoże Ci na każdym etapie rozwoju AI, od uruchomienia prototypu po monitorowanie w środowisku produkcyjnym. jest wiele tematów do rozmowy.

Oto 10 najważniejszych funkcji Genkit, które mogą Ci się spodobać:

1. Wiele modeli, jeden interfejs

Genkit udostępnia wtyczki, które od razu zapewniają dostęp do popularnych modeli i elastyczną abstrakcję modelu, która ułatwia integrację dowolnego interfejsu API modelu. i używają modeli służących przez społeczność. Wypróbowanie nowego modelu jest tak proste, jak zmiana jednego argumentu, ale każdy model mogą określać konfiguracje niestandardowe.

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. Uporządkowane dane wyjściowe

Generuj dane ściśle wpisywane w aplikacji Genkit przy użyciu schematu Zod. Może to ułatwić analizuj nieuporządkowany tekst, generuj treści, wybieraj zadania i wysyłaj są zwracane do aplikacji w formie obiektów bezpiecznych.

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. Multimodalne, multimedialne

Genkit zapewnia popularny format treści, które obsługują mieszanki tekstu, i dowolne multimedia. Dzięki temu możesz używać Genkit z modelami, które: do zadań generatywnych (takich jak generowanie obrazów), a nie tylko o 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. Udostępnienie narzędzi LLM

Genkit ułatwia wywoływanie funkcji za pomocą LLM za pomocą narzędzi. Narzędzia pozwalają AI pobierać dane, wyświetlać interfejs, zapisywać je w bazie danych wszystkie inne działania, które można zakodować.

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. Zarządzanie prośbami za pomocą Dotprompt

Inżynieria to nie tylko ulepszanie tekstu. używany model, parametrów i formatu, których żądasz, wpływają na jakość dane wyjściowe. Genkit oferuje Dotprompt – format pliku promptów, który pozwala umieścić w całości w jednym pliku, co ułatwia testowanie i porządkowanie.

---
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. Uruchamianie przepływów lokalnie

Wyniki wygenerowane przez generatywną AI są bardzo zróżnicowane, więc eksperymentowanie jest super są ważne. Lokalny interfejs programisty Genkit umożliwia interakcję z niezbędną AI takich jak modele i moduły do odzyskiwania, a także ręcznie przetestować kompleksowe z uwzględnieniem całego napisanego przez Ciebie kodu niestandardowego.

7. Sprawdź ślady

Debugowanie złożonych, wieloetapowych przepływów pracy za pomocą AI może być trudne ze względu na: losowość i ukryte procesy. Genkit udostępnia inspektor logów czasu dla programistów, który umożliwia sprawdzanie logów czasu każdego wywołania modelu i kroku przepływu danych. Może wyświetlać ślady po produkcji, a nawet renderować obrazy.

8. Otwórz & rozszerzalny

Ekosystem AI rozwija się szybciej, niż jest w stanie dotrzymać jakikolwiek zespół. Genkit ma otwarty model wtyczki, który udostępnia gotowe integracje z nowymi modelami, retrievery i nie tylko. Ekipa Genkit przygotowuje dla nich żadnych wtyczek, każdy może opublikować własne wtyczki Genkit w NPM.

Nie możesz znaleźć wtyczki do wybranej integracji? Nie ma problemu. Genkit abstrakcje są elastyczne i ułatwiają tworzenie niestandardowych komponentów, można zintegrować z platformą, tak jak w przypadku tego niestandardowego modułu do pobierania Firestore:

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. Stworzone z myślą o produkcji

Łatwo wdrażaj przepływy na dowolnej platformie, która może obsługiwać aplikację Express.js. Usługa Genkit jest w pełni wyposażona w rozwiązania OpenTelemetry i niestandardowe metadane monitorowania produkcji na poziomie korporacyjnym.

Dostępne są też oficjalne wtyczki do Google Cloud i Firebase, które ułatwiają eksportować dane do pakietu operacyjnego Google Cloud i integrować je z Firebase takich jak Cloud Functions dla Firebase, Uwierzytelnianie Firebase, Sprawdzanie aplikacji i Firestore.

Zrzut ekranu Cloud Trace

10. Autoryzacja obsługa zabezpieczeń

Podczas tworzenia aplikacji dostępnych publicznie należy chronić dane zapisanych w systemie. W przypadku LLM konieczna jest dodatkowa staranność, aby Upewnij się, że model uzyskuje tylko dostęp do danych, do których powinien, wywołania narzędzi działają prawidłowo jest ograniczony do użytkownika wywołującego LLM, a przepływ jest wywoływany tylko przez zweryfikowanych aplikacji klienckich.

Genkit udostępnia mechanizmy zarządzania zasadami i kontekstami autoryzacji.

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

Integracje

Genkit umożliwia integrację z modelami AI, wektorowymi bazami danych i danymi telemetrycznymi i nie tylko, dzięki systemowi wtyczek. Te wtyczki są Przygotowane przez zespół Genkit:

Oficjalne wtyczki
googleai Modele generatywne: Gemini Pro, Gemini 1.5 Pro, Gemini Pro Vision
Umieszczanie modeli: wstawianie tekstu geko
vertexai Modele generatywne: Gemini Pro, Gemini Pro Vision, Gemini 1.5 Flash, Gemini 1.5 Pro, Imagen2, Anthropic Claude 3
Umieszczanie modeli: wstawianie tekstu geko
Testerzy: ocena Vertex AI
ollama Modele generatywne: wiele modeli lokalnych, w tym Gemma, Llama 3 i Mistral
chroma Baza danych wektorowych: ChromaDB
pinecone Baza danych wektorowych: Pinecone
google-cloud Narzędzia do monitorowania: Google Cloud Trace, Google Cloud Logging
firebase Wdrożenie w chmurze: Cloud Functions, Uwierzytelnianie Firebase, Sprawdzanie aplikacji
Baza danych wektorowych: magazyn wektorów Cloud Firestore
langchain Używaj łańcuchów i narzędzi LangChain w procesach Genkit

Rozpocznij

Przeczytaj przewodnik Pierwsze kroki, aby dowiedzieć się, jak zainstalować Genkit. i uruchomienie pierwszego przepływu AI.