Trình bổ trợ AI tạo sinh của Google

Trình bổ trợ AI tạo sinh của Google cung cấp giao diện cho các mô hình Gemini của Google thông qua Gemini API.

Lắp đặt

npm i --save @genkit-ai/googleai

Cấu hình

Để sử dụng trình bổ trợ này, hãy chỉ định trình bổ trợ đó khi bạn khởi chạy Genkit:

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

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

Trình bổ trợ này yêu cầu một khoá API cho Gemini API. Bạn có thể lấy khoá này từ Google AI Studio.

Định cấu hình trình bổ trợ để sử dụng khoá API bằng cách làm theo một trong những cách sau:

  • Đặt biến môi trường GOOGLE_GENAI_API_KEY thành khoá API của bạn.
  • Chỉ định khoá API khi bạn khởi chạy trình bổ trợ:

    googleAI({ apiKey: yourKey });
    

    Tuy nhiên, đừng nhúng khoá API trực tiếp vào mã! Chỉ sử dụng tính năng này cùng với một dịch vụ như Trình quản lý khoá bí mật trên đám mây hoặc dịch vụ tương tự.

Cách sử dụng

Trình bổ trợ này xuất tham chiếu tĩnh đến các mô hình được hỗ trợ:

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

Bạn có thể sử dụng các tệp tham chiếu này để chỉ định mô hình mà generate() sử dụng:

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

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

hoặc sử dụng trình nhúng (ví dụ: textEmbedding004) với embed hoặc trình truy xuất:

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

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

Gemini Files API

Bạn có thể sử dụng các tệp được tải lên Gemini Files API bằng 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}}
  ]
});

Mô hình được tinh chỉnh

Bạn có thể sử dụng các mô hình được tinh chỉnh bằng API Google Gemini. Làm theo hướng dẫn của Gemini API hoặc tinh chỉnh mô hình bằng AI Studio.

Quá trình điều chỉnh sử dụng một mô hình cơ sở (ví dụ: Gemini 1.5 Flash) và các ví dụ mà bạn cung cấp để tạo một mô hình điều chỉnh mới. Hãy nhớ mô hình cơ sở mà bạn đã sử dụng và sao chép mã nhận dạng của mô hình mới.

Khi gọi mô hình đã điều chỉnh trong Genkit, hãy sử dụng mô hình cơ sở làm tham số model và truyền mã nhận dạng của mô hình đã điều chỉnh dưới dạng một phần của khối config. Ví dụ: nếu đã sử dụng Gemini 1.5 Flash làm mô hình cơ sở và có mã mô hình tunedModels/my-example-model-apbm8oqbvuv2, bạn có thể gọi mô hình đó bằng:

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

Lưu ngữ cảnh vào bộ nhớ đệm

Trình bổ trợ AI tạo sinh của Google hỗ trợ tính năng lưu ngữ cảnh vào bộ nhớ đệm, cho phép các mô hình sử dụng lại nội dung đã lưu vào bộ nhớ đệm trước đó để tối ưu hoá hiệu suất và giảm độ trễ cho các tác vụ lặp lại. Tính năng này đặc biệt hữu ích cho các luồng trò chuyện hoặc trường hợp mà mô hình tham chiếu một lượng lớn văn bản một cách nhất quán trên nhiều yêu cầu.

Cách sử dụng tính năng Lưu vào bộ nhớ đệm theo ngữ cảnh

Để bật tính năng lưu ngữ cảnh vào bộ nhớ đệm, hãy đảm bảo mô hình của bạn hỗ trợ tính năng này. Ví dụ: gemini15Flashgemini15Pro là các mô hình hỗ trợ lưu ngữ cảnh vào bộ nhớ đệm.

Bạn có thể xác định cơ chế lưu vào bộ nhớ đệm trong ứng dụng như sau:

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

Trong chế độ thiết lập này: - messages: Cho phép bạn truyền nhật ký trò chuyện. – metadata.cache.ttlSeconds: Chỉ định thời gian tồn tại (TTL) để lưu một phản hồi cụ thể vào bộ nhớ đệm.

Ví dụ: Tận dụng văn bản lớn bằng ngữ cảnh

Đối với các ứng dụng tham chiếu đến tài liệu dài, chẳng hạn như War and Peace (Chiến tranh và hòa bình) hoặc Lord of the Rings (Chúa tể những chiếc nhẫn), bạn có thể định cấu trúc truy vấn để sử dụng lại ngữ cảnh đã lưu vào bộ nhớ đệm:

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

Lưu các chế độ nội dung khác vào bộ nhớ đệm

Mô hình Gemini có nhiều chế độ và cũng cho phép lưu các chế độ nội dung khác vào bộ nhớ đệm.

Ví dụ: để lưu một đoạn nội dung video dài vào bộ nhớ đệm, trước tiên, bạn phải tải đoạn nội dung đó lên bằng trình quản lý tệp trong SDK AI của Google:

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;

Giờ đây, bạn có thể định cấu hình bộ nhớ đệm trong các lệnh gọi thành 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,
});

Các mô hình được hỗ trợ để lưu ngữ cảnh vào bộ nhớ đệm

Chỉ một số mô hình cụ thể, chẳng hạn như gemini15Flashgemini15Pro, mới hỗ trợ lưu ngữ cảnh vào bộ nhớ đệm. Nếu bạn sử dụng một mô hình không được hỗ trợ, hệ thống sẽ báo lỗi cho biết không thể lưu vào bộ nhớ đệm.

Tài liệu đọc thêm

Xem thêm thông tin về việc lưu ngữ cảnh vào bộ nhớ đệm trên AI của Google trong tài liệu của họ.