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.
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 и запустить свой первый поток ИИ.