Генкит Firebase

Firebase Genkit — это платформа с открытым исходным кодом , которая помогает создавать, развертывать и отслеживать готовые к использованию приложения на базе искусственного интеллекта .

Логотип Генкит

Genkit предназначен для разработчиков приложений , чтобы помочь вам легко интегрировать мощные возможности искусственного интеллекта в ваши приложения с помощью знакомых шаблонов и парадигм. Он создан той же командой, что и Firebase, с использованием нашего опыта создания инструментов, используемых миллионами разработчиков по всему миру.

Используйте Genkit для создания приложений, которые генерируют индивидуальный контент, используют семантический поиск, обрабатывают неструктурированные входные данные, отвечают на вопросы, используя ваши бизнес-данные, автономно принимают решения, организуют вызовы инструментов и многое другое!

Genkit в настоящее время поддерживает разработку на стороне сервера в JavaScript/TypeScript (Node.js), а поддержка Go находится в активной разработке.

Следите за его развитием или вносите свой вклад в его репозиторий GitHub .

Ключевая особенность

Genkit здесь, чтобы помочь вам на каждом этапе вашего пути разработки ИИ, от начала прототипирования до мониторинга в производстве, так что есть о чем поговорить.

Для начала вот 10 ключевых функций Genkit, которые, как мы думаем, вам понравятся:

1. Множество моделей, один интерфейс

Genkit предоставляет плагины, которые предоставляют доступ к популярным моделям из коробки, а также гибкую абстракцию модели, которая позволяет легко интегрировать любой API модели и использовать модели, поддерживаемые сообществом. Опробовать новую модель так же просто, как изменить один аргумент, но для каждой модели можно указать собственные конфигурации.

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. Структурированный вывод

Генерируйте строго типизированные данные с помощью Genkit, используя схему Zod. Это может помочь вам анализировать неструктурированный текст, генерировать творческий контент, выбирать задачи и отправлять результаты обратно в ваше приложение в виде структурированных типобезопасных объектов.

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. Мультимодальный, мультимедийный

Genkit предоставляет общий формат контента, который поддерживает сочетание текста, данных и произвольных носителей. Это позволяет использовать Genkit для моделей, выполняющих любые генеративные задачи (например, генерацию изображений), а не только 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. Дайте LLM инструменты

Genkit упрощает вызов функций с помощью LLM с помощью инструментов. Инструменты позволяют ИИ получать данные, отображать пользовательский интерфейс, записывать в базу данных или выполнять любые другие действия, которые вы можете запрограммировать.

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.

Оперативное проектирование — это больше, чем просто настройка текста. Модель, которую вы используете, параметры, которые вы предоставляете, и запрашиваемый формат — все это влияет на качество вашего вывода. Genkit предлагает Dotprompt — формат файлов подсказок, который позволяет поместить все это в один файл для упрощения тестирования и организации.

---
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. Запускайте потоки локально

Генеративный ИИ имеет массу вариаций результатов, поэтому экспериментировать очень важно. Локальный пользовательский интерфейс разработчика Genkit позволяет взаимодействовать с основными компонентами ИИ, такими как модели и средства извлечения, а также вручную тестировать сквозные потоки, включая весь написанный вами собственный код.

7. Осмотрите следы

Отладка сложных, многоэтапных рабочих процессов с помощью ИИ может оказаться сложной задачей из-за случайности и скрытых процессов. Genkit предоставляет инспектор трассировки в пользовательском интерфейсе разработчика, который позволяет проверять трассировки для каждого вызова модели и каждого шага вашего потока. Он может просматривать следы производства и даже рендерить изображения!

8. Открытый и расширяемый

Экосистема искусственного интеллекта растет быстрее, чем может поспеть какая-либо одна команда. Genkit имеет открытую модель плагинов, которая обеспечивает встроенную интеграцию с новыми моделями, ретриверами и многим другим. Хотя команда Genkit поддерживает небольшой набор официальных плагинов, любой может свободно публиковать свои собственные плагины Genkit в NPM.

Не можете найти плагин для конкретной интеграции, которая вам нужна? Без проблем. Абстракции Genkit являются гибкими и позволяют легко создавать собственные компоненты, которые интегрируются в инфраструктуру, например этот специальный ретривер 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. Создан для производства

Легко развертывайте свои потоки на любой платформе, которая может обслуживать приложение Express.js. Genkit полностью оснащен OpenTelemetry и пользовательскими метаданными для мониторинга производства корпоративного уровня.

Существуют также официальные плагины для Google Cloud и Firebase, которые помогают экспортировать данные в операционный пакет Google Cloud и интегрироваться с такими сервисами Firebase, как Cloud Functions for Firebase, Firebase Authentication, App Check и Firestore.

Скриншот Cloud Trace

10. Авторизация и обеспечение безопасности

При создании любого общедоступного приложения важно защитить данные, хранящиеся в вашей системе. Когда дело доходит до LLM, необходимо проявлять особую осмотрительность, чтобы гарантировать, что модель обращается только к тем данным, которые ей нужны, вызовы инструментов правильно привязаны к пользователю, вызывающему LLM, а поток вызывается только проверенными клиентскими приложениями.

Genkit предоставляет механизмы для управления политиками и контекстами авторизации.

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

Интеграции

Genkit обеспечивает интеграцию с моделями искусственного интеллекта, векторными базами данных, платформами телеметрии и многим другим через свою систему плагинов. Следующие плагины поддерживаются командой Genkit:

Официальные плагины
googleai Генеративные модели : Gemini Pro, Gemini 1.5 Pro, Gemini Pro Vision.
Встраивание моделей : встраивание текста Gecko
vertexai Генеративные модели : Gemini Pro, Gemini Pro Vision, Gemini 1.5 Flash, Gemini 1.5 Pro, Imagen2, Anthropic Claude 3.
Встраивание моделей : встраивание текста Gecko
Оценщики : оценка Vertex AI
ollama Генеративные модели : множество локальных моделей, включая Gemma, Llama 3, Mistral и другие.
chroma База данных векторов : ChromaDB.
pinecone База данных векторов : Сосновая шишка
google-cloud Инструменты мониторинга : Google Cloud Trace, Google Cloud Logging.
firebase Развертывание в облаке : облачные функции, аутентификация Firebase, проверка приложений.
База данных векторов : магазин векторов Cloud Firestore
langchain Используйте цепочки и утилиты LangChain в потоках Genkit.

Начать

Прочтите руководство по началу работы , чтобы узнать, как установить Genkit и запустить свой первый поток ИИ.