Firebase Genkit

Genkit — это платформа, призванная помочь вам создавать приложения и функции на базе искусственного интеллекта. Он предоставляет библиотеки с открытым исходным кодом для Node.js и Go, а также инструменты разработчика для тестирования и отладки.

В этой документации рассматривается Genkit для Node.js. Если вы Go-разработчик, см. документацию Genkit Go .

Вы можете развертывать и запускать библиотеки Genkit везде, где поддерживается Node.js. Он предназначен для работы с любым API-интерфейсом генеративной модели искусственного интеллекта или векторной базой данных. Хотя мы предлагаем интеграцию с Firebase и Google Cloud, вы можете использовать Genkit независимо от каких-либо сервисов Google.

Начать

Ключевые возможности

Единый API для генерации ИИ Используйте один API для создания или потоковой передачи контента из различных моделей искусственного интеллекта. Работает с мультимодальным вводом/выводом и пользовательскими настройками модели.
Структурированный вывод Создавайте или передавайте структурированные объекты (например, JSON) со встроенной проверкой. Упростите интеграцию с вашим приложением и преобразуйте неструктурированные данные в удобный формат.
Вызов инструмента Позвольте моделям ИИ вызывать ваши функции и API как инструменты для выполнения задач. Модель решает, когда и какие инструменты использовать.
Чат Genkit предлагает специальный API для чата, который облегчает многоэтапный диалог с моделями ИИ, которые могут сохранять состояние и сохраняться.
Агенты Создавайте интеллектуальных агентов, которые используют инструменты (в том числе другие агенты) для автоматизации сложных задач и рабочих процессов.
Получение данных Повысьте точность и актуальность получаемых результатов за счет интеграции ваших данных. Простые API помогут вам встраивать, индексировать и извлекать информацию из различных источников.
Быстрое создание шаблонов Создавайте эффективные подсказки, включающие в себя форматированные текстовые шаблоны, настройки модели, мультимодальную поддержку и интеграцию инструментов — и все это в компактном, работоспособном файле подсказок .

См. следующие примеры кода, чтобы получить конкретное представление о том, как использовать эти возможности в коде:

Базовое поколение

import { genkit } from 'genkit';
import { googleAI, gemini15Flash } from '@genkit-ai/googleai';

const ai = genkit({
  plugins: [googleAI()],
  model: gemini15Flash,  // Set default model
});

// Simple generation
const { text } = await ai.generate('Why is AI awesome?');
console.log(text);

// Streamed generation 
const { stream } = await ai.generateStream('Tell me a story');
for await (const chunk of stream) {
  console.log(chunk.text);
}

Структурированный вывод

import { genkit, z } from 'genkit';
import { googleAI, gemini15Flash } from '@genkit-ai/googleai';

const ai = genkit({
  plugins: [googleAI()],
  model: gemini15Flash,
});

const { output } = await ai.generate({
  prompt: 'Create a brief profile for a character in a fantasy video game.',
  // Specify output structure using Zod schema
  output: {
    format: 'json',  
    schema: z.object({
      name: z.string(),
      role: z.enum(['knight', 'mage', 'archer']),
      backstory: z.string(),
    }),
  },
});

console.log(output);

Вызов функции

import { genkit, z } from 'genkit';
import { googleAI, gemini15Flash } from '@genkit-ai/googleai';

const ai = genkit({
  plugins: [googleAI()],
  model: gemini15Flash,
});

// Define tool to get current weather for a given location
const getWeather = ai.defineTool(
  {
    name: "getWeather",
    description: "Gets the current weather in a given location",
    inputSchema: z.object({ 
      location: z.string().describe('The location to get the current weather for')
    }),
    outputSchema: z.string(),
  },
  async (input) => {
    // Here, we would typically make an API call or database query. For this
    // example, we just return a fixed value.
    return `The current weather in ${input.location} is 63°F and sunny.`;
  }
);

const { text } = await ai.generate({
    tools: [getWeather], // Give the model a list of tools it can call
    prompt: 'What is the weather like in New York? ',
});

console.log(text);

Чат

import { genkit, z } from 'genkit';
import { googleAI, gemini15Flash } from '@genkit-ai/googleai';

const ai = genkit({
  plugins: [googleAI()],
  model: gemini15Flash,
});

const chat = ai.chat({ system: 'Talk like a pirate' });

let response = await chat.send('Hi, my name is Pavel');

response = await chat.send('What is my name?');
console.log(response.text);
// Ahoy there! Your name is Pavel, you scurvy dog

Агенты

import { genkit, z } from 'genkit';
import { googleAI, gemini15Flash } from '@genkit-ai/googleai';

const ai = genkit({
  plugins: [googleAI()],
  model: gemini15Flash,
});

// Define prompts that represent specialist agents
const reservationAgent = ai.definePrompt(
  {
    name: 'reservationAgent',
    description: 'Reservation Agent can help manage guest reservations',
    tools: [reservationTool, reservationCancelationTool, reservationListTool],

  },
  `{{role "system"}} Help guests make and manage reservations`
);

const menuInfoAgent = ...
const complaintAgent = ...

// Define a triage agent that routes to the proper specialist agent
const triageAgent = ai.definePrompt(
  {
    name: 'triageAgent',
    description: 'Triage Agent',
    tools: [reservationAgent, menuInfoAgent, complaintAgent],
  },
  `{{role "system"}} You are an AI customer service agent for Pavel's Cafe.
  Greet the user and ask them how you can help. If appropriate, transfer to an
  agent that can better handle the request. If you cannot help the customer with
  the available tools, politely explain so.`
);

// Create a chat to enable multi-turn agent interactions
const chat = ai.chat(triageAgent);

chat.send('I want a reservation at Pavel\'s Cafe for noon on Tuesday.' );

Получение данных

import { genkit } from 'genkit';
import { googleAI, gemini15Flash, textEmbedding004 } from '@genkit-ai/googleai';
import { devLocalRetrieverRef } from '@genkit-ai/dev-local-vectorstore';

const ai = genkit({ 
  plugins: [
    googleAI()
    devLocalVectorstore([
      {
        indexName: 'BobFacts',
        embedder: textEmbedding004,
      },
    ]),
  ],
  model: gemini15Flash,
});

// Reference to a local vector database storing Genkit documentation
const retriever = devLocalRetrieverRef('BobFacts');

// Consistent API to retrieve most relevant documents based on semantic similarity to query
const docs = await ai.retrieve(
  retriever: retriever,
  query: 'How old is bob?',
);

const result = await ai.generate({
    prompt: `Use the provided context from the Genkit documentation to answer this query: ${query}`,
    docs // Pass retrieved documents to the model
});

Шаблон запроса

---
model: vertexai/gemini-1.5-flash
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 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}}.

Инструменты разработки

Genkit предоставляет интерфейс командной строки (CLI) и локальный пользовательский интерфейс разработчика, упрощающий создание приложений искусственного интеллекта. Эти инструменты помогут вам:

  • Экспериментируйте: тестируйте и совершенствуйте функции, подсказки и запросы ИИ.
  • Отладка: находите и устраняйте проблемы с помощью подробных трассировок выполнения.
  • Оценка: оцените результаты, полученные в нескольких тестовых случаях.

Свяжитесь с нами

  • Присоединяйтесь к сообществу: будьте в курсе, задавайте вопросы и делитесь своей работой на нашем сервере Discord .
  • Оставляйте отзывы: сообщайте о проблемах или предлагайте новые функции с помощью нашего трекера проблем GitHub.

Следующие шаги

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