ปลั๊กอิน Google Generative AI

ปลั๊กอิน Generative AI ของ Google มีอินเทอร์เฟซสำหรับโมเดล Gemini ของ Google ผ่าน 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,
});

Gemini Files API

คุณสามารถใช้ไฟล์ที่อัปโหลดไปยัง 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}}
  ]
});

โมเดลที่ปรับแต่ง

คุณสามารถใช้โมเดลที่ปรับแต่งอย่างละเอียดด้วย Google Gemini API ทำตามวิธีการจาก 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",
  }),
});

การแคชบริบท

ปลั๊กอิน Generative AI ของ Google รองรับการแคชบริบท ซึ่งช่วยให้โมเดลใช้เนื้อหาที่แคชไว้ก่อนหน้านี้ซ้ำเพื่อเพิ่มประสิทธิภาพและลดเวลาในการตอบสนองสำหรับงานที่ต้องทำซ้ำๆ ได้ ฟีเจอร์นี้มีประโยชน์อย่างยิ่งสำหรับขั้นตอนการสนทนาหรือสถานการณ์ที่โมเดลอ้างอิงข้อความจำนวนมากอย่างสอดคล้องกันในคำขอหลายรายการ

วิธีใช้การแคชบริบท

หากต้องการเปิดใช้การแคชบริบท โปรดตรวจสอบว่าโมเดลของคุณรองรับการแคช เช่น 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: ระบุ Time to Live (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 หากใช้รูปแบบที่ระบบไม่รองรับ ระบบจะแสดงข้อผิดพลาดที่ระบุว่าใช้การแคชไม่ได้

อ่านเพิ่มเติม

ดูข้อมูลเพิ่มเติมเกี่ยวกับการแคชบริบทใน AI ของ Google ในเอกสารประกอบ