Плагин Google Generative AI

Плагин Google Generative AI предоставляет интерфейсы к моделям Google Gemini через Gemini API .

Установка

npm i --save @genkit-ai/googleai

Конфигурация

Чтобы использовать этот плагин, укажите его при инициализации Genkit:

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

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

Плагину требуется API-ключ для Gemini API, который вы можете получить в Google AI Studio .

Настройте плагин для использования вашего ключа API, выполнив одно из следующих действий:

  • Установите для переменной среды GOOGLE_GENAI_API_KEY свой ключ API.
  • Укажите ключ API при инициализации плагина:

    googleAI({ apiKey: yourKey });
    

    Однако не встраивайте ключ API непосредственно в код! Используйте эту функцию только в сочетании с такой службой, как Cloud Secret Manager или аналогичной.

Использование

Этот плагин статически экспортирует ссылки на поддерживаемые модели:

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

Вы можете использовать эти ссылки, чтобы указать, какую модель использует generate() :

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

const llmResponse = await ai.generate('Tell me a joke.');

или используйте средства внедрения (например, textEmbedding004 ) с embed или методами извлечения:

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

const embedding = await ai.embed({
  embedder: textEmbedding004,
  content: input,
});

API файлов Gemini

Вы можете использовать файлы, загруженные в Gemini Files API, с помощью Genkit:

import { GoogleAIFileManager } from '@google/generative-ai/server';
import { genkit } from 'genkit';
import { googleAI } from '@genkit-ai/googleai';

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

const fileManager = new GoogleAIFileManager(process.env.GOOGLE_GENAI_API_KEY);
const uploadResult = await fileManager.uploadFile(
  'path/to/file.jpg',
  {
    mimeType: 'image/jpeg',
    displayName: 'Your Image',
  }
);

const response = await ai.generate({
  model: gemini15Flash,
  prompt: [
    {text: 'Describe this image:'},
    {media: {contentType: uploadResult.file.mimeType, url: uploadResult.file.uri}}
  ]
});

Точные настройки моделей

Вы можете использовать модели, настроенные с помощью API Google Gemini. Следуйте инструкциям Gemini API или настройте модель с помощью AI Studio .

В процессе настройки используется базовая модель, например Gemini 1.5 Flash, и предоставленные вами примеры для создания новой настроенной модели. Запомните используемую базовую модель и скопируйте идентификатор новой модели.

При вызове настроенной модели в Genkit используйте базовую модель в качестве параметра model и передайте идентификатор настроенной модели как часть блока config . Например, если вы использовали Gemini 1.5 Flash в качестве базовой модели и получили идентификатор модели tunedModels/my-example-model-apbm8oqbvuv2 вы можете вызвать ее с помощью:

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

const llmResponse = await ai.generate({
  prompt: `Suggest an item for the menu of fish themed restruant`,
  model: gemini15Flash.withConfig({
    version: "tunedModels/my-example-model-apbm8oqbvuv2",
  }),
});

Кэширование контекста

Плагин Google Generative AI поддерживает кэширование контекста , что позволяет моделям повторно использовать ранее кэшированный контент для оптимизации производительности и уменьшения задержки при выполнении повторяющихся задач. Эта функция особенно полезна для диалоговых потоков или сценариев, в которых модель последовательно ссылается на большой объем текста в нескольких запросах.

Как использовать кэширование контекста

Чтобы включить кэширование контекста, убедитесь, что ваша модель его поддерживает. Например, gemini15Flash и gemini15Pro — модели, поддерживающие кэширование контекста.

Вы можете определить механизм кэширования в своем приложении следующим образом:

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

const llmResponse = await ai.generate({
  messages: [
    {
      role: 'user',
      content: [{ text: 'Here is the relevant text from War and Peace.' }],
    },
    {
      role: 'model',
      content: [
        {
          text: 'Based on War and Peace, here is some analysis of Pierre Bezukhov’s character.',
        },
      ],
      metadata: {
        cache: {
          ttlSeconds: 300, // Cache this message for 5 minutes
        },
      },
    },
  ],
  model: gemini15Flash,
  config: {
    version: 'gemini-1.5-flash-001', // Only 001 currently supports context caching
  },
  prompt: 'Describe Pierre’s transformation throughout the novel.',
});

В этой настройке: - messages : позволяет передавать историю разговоров. - metadata.cache.ttlSeconds : указывает время жизни (TTL) для кэширования определенного ответа.

Пример: использование больших текстов с контекстом

Для приложений, ссылающихся на длинные документы, таких как «Война и мир» или «Властелин колец» , вы можете структурировать свои запросы для повторного использования кэшированных контекстов:

const fs = require('fs/promises');

const textContent = await fs.readFile('path/to/war_and_peace.txt', 'utf-8');

const llmResponse = await ai.generate({
  messages: [
    {
      role: 'user',
      content: [{ text: textContent }], // Include the large text as context
    },
    {
      role: 'model',
      content: [
        {
          text: 'This analysis is based on the provided text from War and Peace.',
        },
      ],
      metadata: {
        cache: {
          ttlSeconds: 300, // Cache the response to avoid reloading the full text
        },
      },
    },
  ],
  model: gemini15Flash,
  config: {
    version: 'gemini-1.5-flash-001', // Only 001 currently supports context caching
  },
  prompt: 'Analyze the relationship between Pierre and Natasha.',
});

Кэширование других режимов контента

Модели Gemini являются мультимодальными, и другие режимы контента также могут кэшироваться.

Например, чтобы кэшировать длинный фрагмент видеоконтента, его необходимо сначала загрузить с помощью файлового менеджера из Google AI SDK:

import { GoogleAIFileManager } from '@google/generative-ai/server';

const fileManager = new GoogleAIFileManager(
  process.env.GOOGLE_GENAI_API_KEY
);

// Upload video to Google AI using the Gemini Files API
const uploadResult = await fileManager.uploadFile(videoFilePath, {
  mimeType: 'video/mp4', // Adjust according to the video format
  displayName: 'Uploaded Video for Analysis',
});

const fileUri = uploadResult.file.uri;

Теперь вы можете настроить кеш при вызове ai.generate :

const analyzeVideoResponse = await ai.generate({
  messages: [
    {
      role: 'user',
      content: [
        {
          media: {
            url: fileUri, // Use the uploaded file URL
            contentType: 'video/mp4',
          },
        },
      ],
    },
    {
      role: 'model',
      content: [
        {
          text: 'This video seems to contain several key moments. I will analyze it now and prepare to answer your questions.',
        },
      ],
      // Everything up to (including) this message will be cached.
      metadata: {
        cache: true,
      },
    },
  ],
  config: {
    version: 'gemini-1.5-flash-001', // Only 001 versions support context caches
  },
  model: gemini15Flash,
  prompt: query,
});

Поддерживаемые модели кэширования контекста

Только определенные модели, такие как gemini15Flash и gemini15Pro , поддерживают кэширование контекста. Если используется неподдерживаемая модель, возникнет ошибка, указывающая, что кэширование невозможно применить.

Дальнейшее чтение

Дополнительную информацию о кэшировании контекста в Google AI см. в их документации .