콘텐츠 생성

Firebase Genkit는 LLM으로 콘텐츠를 생성할 수 있는 간편한 인터페이스를 제공합니다.

모델

Firebase Genkit의 모델은 다양한 Google 및 Google 이외 LLM에 액세스를 제공하는 라이브러리와 추상화입니다.

모델은 관측 가능성을 위해 완전히 계측되고 Genkit 개발자 UI에서 제공하는 통합 도구와 함께 제공됩니다. 모델 실행기를 사용하여 원하는 모델을 시도해 보세요.

Genkit에서 모델을 사용할 때는 먼저 작업할 모델을 구성해야 합니다. 모델 구성은 플러그인 시스템에서 수행합니다. 이 예시에서는 Gemini 모델을 제공하는 Vertex AI 플러그인을 구성합니다.

import { configureGenkit } from '@genkit-ai/core';
import { firebase } from '@genkit-ai/firebase';
import { vertexAI } from '@genkit-ai/vertexai';

configureGenkit({
  plugins: [vertexAI()],
});

플러그인에서 제공하는 모델을 사용하려면 이름으로 지칭하거나 (예: 'vertexai/gemini-1.5-flash') 또는 일부 플러그인은 다음과 같은 모델 참조 객체를 내보냅니다. 모델 기능 및 옵션에 대한 추가적인 유형 정보를 제공합니다.

import { gemini15Flash } from '@genkit-ai/vertexai';

지원되는 모델

Genkit는 플러그인 시스템을 통해 모델 지원을 제공합니다. 공식적으로 지원되는 플러그인은 다음과 같습니다.

플러그인 모델
Google 생성형 AI Gemini Pro, Gemini Pro Vision
Google Vertex AI Gemini Pro, Gemini Pro Vision, Gemini 1.5 Flash, Gemini 1.5 Pro, Imagen2
Ollama Gemma, Llama 2, Mistral 등 다양한 로컬 모델

설정 및 사용 정보는 각 플러그인의 문서를 참조하세요. 또한 커뮤니티에서 지원하는 다양한 모델을 npmjs.org에서 genkitx-로 시작하는 패키지 검색

콘텐츠 생성 방법

generate는 모델 작업을 위한 도우미 함수입니다.

모델을 호출하려면 다음을 수행하세요.

import { generate } from '@genkit-ai/ai';
import { gemini15Flash } from '@genkit-ai/vertexai';

(async () => {
  const llmResponse = await generate({
    model: gemini15Flash,
    prompt: 'Tell me a joke.',
  });

  console.log(await llmResponse.text());
})();

해당 모델의 다양한 모델 옵션을 전달할 수 있으며, 여기에는 커스텀 모델을 만들 수 있습니다

const response = await generate({
  model: gemini15Flash,
  prompt,
  config: {
    temperature: 1,
    stopSequences: ['abc'],
  },
});

모델이 멀티모달 입력을 지원하는 경우 이미지를 입력으로 전달할 수 있습니다.

const result = await generate({
  model: gemini15Flash,
  prompt: [
    { text: 'describe the following image:' },
    { media: { url: imageUrl, contentType: 'image/jpeg' } },
  ],
});

또는 로컬 파일에서:

const result = await generate({
  model: gemini15Flash,
  prompt: [
    { text: 'describe the following image:' },
    {
      data: {
        url: fs.readFileSync(__dirname + '/image.jpeg', {
          encoding: 'base64',
          flag: 'r',
        }),
        contentType: 'image/jpeg',
      },
    },
  ],
});

도구 및 함수 호출

Model는 도구 및 함수 호출도 지원합니다. 도구 지원은 살펴보겠습니다

const myTool = action(
  {
    name: 'myJoke',
    description: 'useful when you need a joke to tell.',
    inputSchema: z.object({ subject: z.string() }),
    outputSchema: z.string(),
  },
  async (input) => 'haha Just kidding no joke! got you'
);

const llmResponse = await generate({
  model: gemini15Flash,
  prompt: 'Tell me a joke.',
  tools: [myTool],
  config: {
    temperature: 0.5,
  },
});

그러면 사용자 프롬프트를 처리하기 위해 도구가 자동으로 호출됩니다.

도구 호출을 수동으로 제어하기 위해 returnToolRequests: true를 지정할 수 있습니다.

const llmResponse = await generate({
  model: gemini15Flash,
  prompt: 'Tell me a joke.',
  tools: [myTool],
  returnToolRequests: true,
  config: {
    temperature: 0.5,
  },
});

검색기 컨텍스트 추가

검색기의 문서를 generate에 직접 전달하여 근거 컨텍스트:

const docs = await companyPolicyRetriever({ query: question });

await generate({
  model: gemini15Flash,
  prompt: `Answer using the available context from company policy: ${question}`,
  context: docs,
});

프롬프트 콘텐츠에 문서 컨텍스트가 자동으로 추가됩니다. 확인할 수 있습니다

메시지 기록 기록

Genkit 모델은 모델로 전송된 메시지의 기록 및 응답을 유지 관리를 지원합니다. 이를 사용하여 챗봇과 같은 대화형 환경을 빌드할 수 있습니다.

모델 응답에서 메시지 기록을 생성하려면 toHistory()를 호출합니다. 메서드를 사용하여 축소하도록 요청합니다.

let response = await generate({
  model: gemini15Flash,
  prompt: "How do you say 'dog' in French?",
});
let history = response.toHistory();

이 기록을 직렬화하여 데이터베이스 또는 세션 스토리지에 유지할 수 있습니다. 그런 다음 향후 호출 시 메시지와 함께 기록을 generate()에 전달합니다.

response = await generate({
  model: gemini15Flash,
  prompt: 'How about in Spanish?',
  history,
});
history = response.toHistory();

사용 중인 모델이 system 역할을 지원하는 경우 초기 기록을 사용하여 시스템 메시지를 설정합니다.

let history: MessageData[] = [
  { role: 'system', content: [{ text: 'Talk like a pirate.' }] },
];
let response = await generate({
  model: gemini15Flash,
  prompt: "How do you say 'dog' in French?",
  history,
});
history = response.toHistory();

스트리밍 응답

Genkit는 generateStream() 메서드를 통해 모델 응답의 청크 ��할 스트리밍을 지원합니다.

// import { generateStream } from '@genkit-ai/ai';
const { response, stream } = await generateStream({
  model: gemini15Flash,
  prompt: 'Tell a long story about robots and ninjas.',
});

for await (const chunk of stream()) {
  console.log(chunk.text());
}

// you can also await the full response
console.log((await response()).text());