Плагин 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 см. в их документации .