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 또는 검색 도구와 함께 사용합니다.

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의 컨텍스트 캐싱에 관한 자세한 내용은 문서를 참고하세요.