Google 生成式 AI 外掛程式

Google 生成式 AI 外掛程式會透過 Gemini API 提供 Google Gemini 模型的介面。

安裝

npm i --save @genkit-ai/googleai

設定

如要使用這個外掛程式,請在初始化 Genkit 時指定它:

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

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

外掛程式需要 Gemini API 的 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 或 retrievers:

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

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

Gemini Files API

您可以使用透過 Genkit 上傳至 Gemini Files API 的檔案:

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}}
  ]
});

經過微調的模型

您可以使用模型,並透過 Google Gemini API 進行精修。請按照 Gemini API 的操作說明進行,或使用 AI Studio 微調模型。

調整程序會使用基礎模型 (例如 Gemini 1.5 Flash) 和您提供的示例,建立新的調整後模型。請記下您使用的基礎模型,並複製新模型的 ID。

在 Genkit 中呼叫經過調整的模型時,請使用基礎模型做為 model 參數,並將經過調整的模型 ID 傳遞為 config 區塊的一部分。舉例來說,如果您使用 Gemini 1.5 Flash 做為基礎模型,並取得模型 ID 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 生成式 AI 外掛程式支援內容快取功能,可讓模型重複使用先前快取的內容,藉此提升效能,並縮短重複性工作的延遲時間。這項功能特別適用於對話流程或模型在多個要求中一致參照大量文字的情況。

如何使用脈絡快取

如要啟用背景快取,請確認模型支援這項功能。舉例來說,gemini15Flashgemini15Pro 是支援快取情境的模型。

您可以在應用程式中定義快取機制,如下所示:

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,
});

支援的脈絡快取模型

只有特定模型 (例如 gemini15Flashgemini15Pro) 支援快取情境。如果使用不支援的模型,系統會擲回錯誤,指出無法套用快取。

延伸閱讀

如要進一步瞭解 Google AI 的內容快取功能,請參閱說明文件