AI 모델로 콘텐츠 생성

생성형 AI의 중심에는 AI 모델이 있습니다. 현재 가장 눈에 띄는 두 가지는 생성 모델의 예로는 대규모 언어 모델 (LLM)과 이미지 살펴보겠습니다 이러한 모델은 프롬프트 (프롬프트)라고 하는 입력을 받습니다. 출력 텍스트로 생성되므로 이미지, 오디오 또는 동영상일 수도 있습니다.

이러한 모델의 출력 결과는 놀라울 수 있습니다. LLM은 텍스트를 생성해 인간이 쓰고 있을 수 있는 것처럼 보이게 할 수 있고 인코더-디코더 모델은 실제 사진이나 동영상에 매우 가까운 이미지를 사람이 만든 예술작품입니다.

또한 LLM은 단순한 텍스트 생성 이상의 작업을 수행할 수 있는 것으로 입증되었습니다.

  • 컴퓨터 프로그램 작성
  • 대규모 작업을 완료하는 데 필요한 하위 작업 계획
  • 정리되지 않은 데이터 정리
  • 텍스트 코퍼스에서 정보 데이터 이해 및 추출
  • 텍스트 설명에 따라 자동화된 활동 팔로우 및 수행 활동

다양한 제공업체의 모델을 사용할 수 있습니다. 각 모델마다 강점과 약점이 있으며 하나의 모델이 한 작업에서 탁월할 수 있습니다 다른 업체보다 실적이 떨어질 수 있습니다. 생성형 AI를 사용하는 앱은 종종 당면 작업에 따라 여러 다양한 모델을 사용하여 이점을 얻을 수 있습니다.

앱 개발자는 일반적으로 생성형 AI와 상호작용하지 않습니다. 직접 사용하는 것이 아니라 웹 API로 제공되는 서비스를 통해 모델을 빌드할 수 있어야 합니다 이러한 서비스는 종종 유사한 기능을 가지고 있지만 서로 다른 API를 통해 해결할 수 있습니다 여러 Google Cloud 서비스를 각 서비스의 독점 SDK를 사용해야 하며 서로 호환되지 않습니다 한 모델에서 이전 모델로 업그레이드하려는 경우 가장 강력한 기능이 있는 최신 앱이기 때문에 다시 시도합니다

Genkit는 단일 인터페이스를 제공하여 이 문제를 해결합니다. 잠재적인 모든 생성형 AI 모델 서비스에 액세스하는 것에 대한 세부정보를 이미 사용 가능한 여러 사전 빌드된 구현이 있습니다 AI 기반 빌드 첫 번째 생성형 AI 통화 절차를 간소화하는 생성형 AI 앱 여러 모델을 결합하거나 한 모델을 다른 모델로 교체하는 것도 또 다른 문제가 발생할 수 있습니다.

시작하기 전에

이 페이지의 코드 예시를 실행하려면 먼저 시작 가이드를 참조하세요. 모든 예시는 프로젝트에 종속 항목으로 Genkit를 설치했습니다.

Genkit에서 지원하는 모델

Genkit는 모든 생성형 AI를 사용할 수 있을 만큼 유연하도록 설계되었습니다. Vertex AI Feature Store에서 제공되는 핵심 라이브러리는 일반적인 작업을 위한 공통 인터페이스를 정의합니다. 모델 플러그인과 모델 플러그인으로 작업하기 위한 구현 세부정보를 지정할 수 있습니다

Genkit팀은 Vertex AI, Google 생성형 AI, Ollama:

이 외에도 여러 커뮤니티에서 지원하는 플러그인이 여러 개 있습니다. 인터페이스를 제공합니다.

genkit-model 태그가 지정된 패키지 검색 시 더 많은 정보를 확인할 수 있습니다. npmjs.org를 참조하세요.

모델 플러그인 로드 및 구성

Genkit를 사용하여 콘텐츠 생성을 시작하려면 먼저 모델 플러그인을 구성합니다 시작 가이드에 나와 있는 경우 이 작업은 이미 완료하셨습니다. 그 외의 경우에는 시작하기 안내 또는 개별 플러그인의 설명서를 참조하고 계속됩니다.

generate() 함수

생성형 AI와 상호작용하는 기본 인터페이스인 Genkit 모델은 generate() 함수입니다.

가장 간단한 generate() 호출은 사용하려는 모델과 텍스트를 지정합니다. 프롬프트:

import { generate } from '@genkit-ai/ai';
import { configureGenkit } from '@genkit-ai/core';
import { gemini15Flash } from '@genkit-ai/googleai';

configureGenkit(/* ... */);

(async () => {
  const llmResponse = await generate({
    model: gemini15Flash,
    prompt: 'Invent a menu item for a pirate themed restaurant.',
  });

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

이 간단한 예를 실행하면 디버깅 정보가 출력됩니다. 그 뒤에 generate() 호출의 출력이 나오며 일반적으로 마크다운입니다. 다음과 같습니다.

## The Blackheart's Bounty

**A hearty stew of slow-cooked beef, spiced with rum and molasses, served in a
hollowed-out cannonball with a side of crusty bread and a dollop of tangy
pineapple salsa.**

**Description:** This dish is a tribute to the hearty meals enjoyed by pirates
on the high seas. The beef is tender and flavorful, infused with the warm spices
of rum and molasses. The pineapple salsa adds a touch of sweetness and acidity,
balancing the richness of the stew. The cannonball serving vessel adds a fun and
thematic touch, making this dish a perfect choice for any pirate-themed
adventure.

스크립트를 다시 실행하면 다른 출력이 표시됩니다.

위의 코드 샘플은 내보낸 모델 참조를 사용하여 모델을 지정했습니다. 확인할 수 있습니다 문자열 식별자를 사용하여 모델을 지정할 수도 있습니다.

const llmResponse = await generate({
  model: 'googleai/gemini-1.5-flash-latest',
  prompt: 'Invent a menu item for a pirate themed restaurant.',
});

모델 문자열 식별자는 providerid/modelid와 같으며, 여기에서 제공업체 ID는 (여기서는 googleai)는 플러그인을 식별하며, 모델 ID는 모델의 특정 버전에 대한 플러그인별 문자열 식별자입니다.

Ollama 플러그인과 같은 일부 모델 플러그인은 잠재적으로 수십 개의 서로 다른 모델을 사용하므로 개별 모델을 참조 이러한 경우에는 다음을 사용하여 모델을 generate()로 지정할 수만 있습니다. 문자열 식별자:

const llmResponse = await generate({
  model: 'ollama/gemma2',
  prompt: 'Invent a menu item for a pirate themed restaurant.',
});

앞의 모든 예도 중요한 요점을 설명합니다. generate()하여 생성형 AI 모델을 호출하고 원하는 모델을 변경합니다. 모델 매개변수에 다른 값을 전달하기만 하면 됩니다. 기준 네이티브 모델 SDK 대신 generate()를 사용하는 경우 앱에서 여러 다양한 모델을 더 쉽게 사용하고 살펴보겠습니다

지금까지는 가장 간단한 generate() 호출의 예시만 살펴보았습니다. 하지만 generate()는 또한 다음과 같은 고급 상호작용을 위한 인터페이스를 제공합니다. 다음 섹션에서 살펴보겠습니다.

모델 매개변수

generate() 함수는 config 매개변수를 사용합니다. 이 매개변수를 통해 다음을 수행할 수 있습니다. 모델이 콘텐츠를 생성하는 방식을 제어하는 선택적 설정을 지정합니다.

const llmResponse = await generate({
  prompt: "Suggest an item for the menu of a pirate themed restaurant",
  model: gemini15Flash,
  config: {
    maxOutputTokens: 400,
    stopSequences: ["<end>", "<fin>"],
    temperature: 1.2,
    topP: 0.4,
    topK: 50,
  },
});

지원되는 정확한 매개변수는 개별 모델 및 모델에 따라 다릅니다. API에 액세스할 수 있습니다. 그러나 이전 예의 매개변수는 거의 모든 있습니다. 다음은 이러한 매개변수에 대한 설명입니다.

출력 길이를 제어하는 매개변수

maxOutputTokens

LLM은 토큰이라는 단위로 작동합니다. 토큰은 일반적으로 사용되지만 그렇지 않음 반드시 특정 문자 시퀀스에 매핑됩니다. 프롬프트에 첫 번째 단계 중 하나는 프롬프트 문자열을 토큰화하는 것입니다. 토큰의 시퀀스로 변환합니다. 그런 다음 LLM은 토큰화된 입력을 사용합니다. 마지막으로 토큰 시퀀스는 다시 텍스트로 변환됩니다. 출력됩니다.

최대 출력 토큰 매개변수는 생성할 수 있습니다. 모든 모델은 잠재적으로 다른 tokenizer를 사용하지만 경험법칙은 하나의 영어 단어를 2~4로 만든 것으로 간주하는 것입니다. 토큰입니다.

앞서 언급했듯이 일부 토큰은 문자 시퀀스에 매핑되지 않을 수 있습니다. 이러한 시퀀스의 끝을 나타내는 토큰이 있는 경우가 많습니다. LLM이 이 토큰을 생성하면 더 이상 생성되지 않습니다. 따라서 많은 경우 LLM이 최대 토큰보다 적은 수의 토큰을 생성하는 경우 그것은 "중지"를 생성했기 때문에 토큰입니다.

stopSequences

이 매개변수를 사용하여 LLM 출력의 끝을 나타냅니다. 여기에 사용할 올바른 값은 일반적으로 모델의 학습 방법에 따라 다르며 일반적으로 모델에 의해 설정됩니다. 사용할 수 있습니다. 그러나 모델에 다른 경유지를 생성하라는 메시지를 표시한 경우 여기에서 지정할 수 있습니다

토큰 자체가 아니라 문자 시퀀스를 지정합니다. 최대 이 경우 모델의 tokenizer가 매핑되는 문자 시퀀스를 지정합니다. 단일 토큰일 수 있습니다

'창의성'을 제어하는 매개변수

temperature, top-ptop-k 매개변수는 함께 '창의적' 지정할 수 있습니다 아래에는 네트워크 트래픽과 관련된 이 매개변수의 뜻이지만 더 중요한 점은 매개변수는 LLM 출력의 문자를 조정하는 데 사용됩니다. 최적의 광고주의 목표와 선호도에 따라 달라지며, 대부분의 경우 아이디어를 얻을 수 있습니다

temperature

LLM은 기본적으로 토큰 예측 머신입니다. 주어진 토큰 시퀀스에서 (프롬프트 등) LLM은 어휘의 각 토큰에 대해 토큰이 시퀀스에서 다음에 올 확률을 나타냅니다. 온도는 정규화되기 전에 예측을 나누는 배율입니다. 0과 1 사이의 확률입니다.

0.0과 1.0 사이의 낮은 온도 값은 토큰 간의 유사성으로 인해 모델 예측 확률은 생성할 가능성이 낮다는 것을 의미합니다. 이것은 종종 덜 창의적이라고 인식하게 됩니다 0.0은 기술적으로 많은 모델이 이를 모델이 동작해야 함을 나타내는 것으로 취급합니다. 가장 가능성이 높은 단일 토큰만 고려합니다.

1.0보다 큰 높은 온도 값은 토큰 간의 가능성 차이를 보이면 모델이 이전에 평가된 토큰을 생성할 가능성이 더 높음 가능성이 낮습니다 이러한 방식은 좀 더 창의적인 결과물로 인식되는 경우가 많습니다. 일부 모델 API는 최대 온도(보통 2.0)를 적용합니다.

최우수 사용자

Top-p는 가능한 개수를 제어하는 0.0~1.0 사이의 값입니다. 누적 확률을 지정하여 모델이 고려할 토큰 토큰입니다. 예를 들어 값이 1.0이면 각 토큰의 확률도 고려합니다. 값이 0.4는 확률이 가장 높은 토큰만 고려함을 의미하며, 이 토큰의 확률의 합은 0.4로 지정하고 나머지 토큰은 고려 대상에서 제외합니다.

topK

Top-k는 개발자가 생성할 수 있는 토큰의 수도 제어하는 정수 값입니다. 이번에는 모델이 고려할 최대 가중치를 생성할 수 있습니다 값을 1로 지정하면 모델이 결정하는 데 도움이 됩니다

모델 매개변수로 실험

이러한 매개변수가 생성된 출력에 미치는 영향을 실험할 수 있습니다. 프롬프트 조합을 사용하여 프롬프트를 설계할 수 있습니다. 먼저 개발자 UI를 위한 genkit start 명령어를 사용해야 하며, 프로젝트에 구성된 플러그인으로 정의된 모델의 모델을 정의합니다 신속하게 여러 가지 프롬프트와 구성 값을 사용해 볼 수 있습니다. 살펴보겠습니다

구조화된 출력

생성형 AI를 애플리케이션의 구성요소로 사용할 때 일반 텍스트가 아닌 형식으로 출력됩니다. 단순히 콘텐츠를 생성하고 있지만 사용자에게 표시할 수 있도록 하려면 단순한 구조적 출력의 이점을 보다 매력적으로 보여드리기 위함입니다. 하지만 고급 학습의 경우 모델 출력을 프로그래매틱 방식으로 사용하는 등 한 모델의 출력을 다른 모델에 피드하는 경우 구조화된 출력은 필수입니다.

Genkit에서는 스키마를 지정하여 모델에서 구조화된 출력을 요청할 수 있습니다. generate() 호출 시:

import { z } from "zod";
const MenuItemSchema = z.object({
  name: z.string(),
  description: z.string(),
  calories: z.number(),
  allergens: z.array(z.string()),
});

const llmResponse = await generate({
  prompt: "Suggest an item for the menu of a pirate themed restaurant",
  model: gemini15Flash,
  output: {
    schema: MenuItemSchema,
  },
});

모델 출력 스키마는 Zod를 사용하여 지정됩니다. 있습니다. Zod는 스키마 정의 언어 외에 런타임 환경도 제공합니다. 유형 확인을 통해 정적 TypeScript 유형과 생성형 AI 모델의 예측 불가능한 출력 Zod를 사용하면 코드를 작성하여 생성 호출이 항상 성공하는 경우 TypeScript 유형을 준수해야 합니다.

generate()에서 스키마를 지정하면 Genkit는 장면:

  • 원하는 출력 형식에 대한 추가 지침으로 프롬프트를 보완합니다. 이는 또한 어떤 콘텐츠를 생성할지 모델에 정확히 어떤 콘텐츠를 생성할 수 있습니다 (예: 메뉴 항목을 제안할 뿐 아니라 설명, 알레르기 유발 항원 목록 등 생성).
  • 모델 출력을 자바스크립트 객체로 파싱합니다.
  • 출력이 스키마를 준수하는지 확인합니다.

성공적인 생성 호출에서 구조화된 출력을 가져오려면 응답을 사용합니다. 객체의 output() 메서드에 대한 한도:

type MenuItem = z.infer<typeof MenuItemSchema>;

const output: MenuItem | null = llmResponse.output();

오류 처리

이전 예에서는 출력 메서드가 null를 반환할 수 있습니다. 이렇게 하면 모델이 스키마를 준수하는 출력을 생성하지 못할 때 발생합니다. 나 NoValidCandidatesError를 포착하여 이 상태를 감지할 수도 있습니다. 다음과 같은 예외가 발생합니다.

import { NoValidCandidatesError } from "@genkit-ai/ai";
try {
  llmResponse = await generate(/* ... */);
} catch (e) {
  if (e instanceof NoValidCandidatesError) {
    // Output doesn't conform to schema.
  }
}

이러한 오류를 처리하기 위한 최상의 전략은 일반적인 힌트를 드리겠습니다.

  • 다른 모델 사용해 보기 구조화된 출력이 성공하려면 모델이 다음과 같아야 합니다. JSON 형식으로 출력을 생성할 수 있습니다 Gemini와 같은 가장 강력한 LLM은 Claude는 다재다능한 기업입니다. 모델 학습에 사용할 수 있는 Ollama에서 사용할 지역 모델 중 일부를 추출하지 못할 수 있습니다 특정 작업을 수행하도록 특별히 학습된 경우를 제외하고 알 수 있습니다.

  • Zod의 강제 기능 활용: 스키마에서 Zod는 비준수 유형을 사용할 수 있습니다 스키마에 문자열 이외의 기본 유형이 포함된 경우 Zod를 사용하여 강제 코드를 사용하면 발생하는 generate() 실패 수를 줄일 수 있습니다. 이 다음 버전의 MenuItemSchema는 유형 변환을 사용하여 자동으로 모델이 칼로리 정보를 문자열로 생성하는 올바른 상황 숫자 대신

    const MenuItemSchema = z.object({
      name: z.string(),
      description: z.string(),
      calories: z.coerce.number(),
      allergens: z.array(z.string()),
    });
    
  • generate() 호출을 다시 시도합니다. 선택한 모델이 작업을 수행하는 데 준수 출력을 생성한 다음 오류를 처리해야 하는 것처럼 네트워크 오류가 발생하면 있습니다.

스트리밍

많은 양의 텍스트를 생성할 때 사이트의 사용자 환경을 개선할 수 있습니다. 생성된 출력을 스트리밍하여 사용자에게 표시합니다. 가 실제 스트리밍의 익숙한 예는 대부분의 LLM 채팅 앱에서 볼 수 있습니다. 사용자 메시지가 생성될 때 메시지에 대한 모델의 응답을 읽을 수 있습니다. 애플리케이션의 인지된 반응성을 개선하고 똑똑한 상대와 채팅하는 착각을 불러일으키는 것입니다.

Genkit에서는 generateStream() 함수를 사용하여 출력을 스트리밍할 수 있습니다. 자체 문법은 generate() 함수와 비슷합니다.

import { generateStream } from "@genkit-ai/ai";
import { GenerateResponseChunk } from "@genkit-ai/ai/lib/generate";
const llmResponseStream = await generateStream({
  prompt: 'Suggest a complete menu for a pirate themed restaurant',
  model: gemini15Flash,
});

그러나 이 함수는 응답 청크의 비동기식 반복 가능 항목을 반환합니다. 각 청크를 사용할 수 있게 되면 처리합니다.

for await (const responseChunkData of llmResponseStream.stream()) {
  const responseChunk = responseChunkData as GenerateResponseChunk;
  console.log(responseChunk.text());
}

전체 응답을 한 번에 받을 수도 있습니다.

const llmResponse = await llmResponseStream.response();

스트리밍은 구조화된 출력에서도 작동합니다.

const MenuSchema = z.object({
  starters: z.array(MenuItemSchema),
  mains: z.array(MenuItemSchema),
  desserts: z.array(MenuItemSchema),
});
type Menu = z.infer<typeof MenuSchema>;

const llmResponseStream = await generateStream({
  prompt: "Suggest a complete menu for a pirate themed restaurant",
  model: gemini15Flash,
  output: { schema: MenuSchema },
});

for await (const responseChunkData of llmResponseStream.stream()) {
  const responseChunk = responseChunkData as GenerateResponseChunk<Menu>;
  // output() returns an object representing the entire output so far
  const output: Menu | null = responseChunk.output();
  console.log(output);
}

구조화된 출력 스트리밍은 스트리밍 텍스트와 약간 다르게 작동합니다. 날짜 응답 청크의 output() 메서드를 호출하면 지금까지 생성된 청크의 누적을 기반으로 합니다. 단일 청크를 나타내는 객체가 될 수 있습니다. 있습니다. 어떤 의미에서 구조화된 출력의 모든 청크는 그보다 더 먼저 일어날 수 있습니다.

예를 들어 이전 예의 처음 5개 출력은 다음과 같습니다.

null
{ starters: [ {} ] }
{
  starters: [ { name: "Captain's Treasure Chest", description: 'A' } ]
}
{
  starters: [
    {
      name: "Captain's Treasure Chest",
      description: 'A mix of spiced nuts, olives, and marinated cheese served in a treasure chest.',
      calories: 350
    }
  ]
}
{
  starters: [
    {
      name: "Captain's Treasure Chest",
      description: 'A mix of spiced nuts, olives, and marinated cheese served in a treasure chest.',
      calories: 350,
      allergens: [Array]
    },
    { name: 'Shipwreck Salad', description: 'Fresh' }
  ]
}

멀티모달 입력

지금까지 살펴본 예에서는 텍스트 문자열을 모델 프롬프트로 사용했습니다. 동안 이는 생성형 AI 모델을 프롬프트하는 가장 일반적인 방법이지만, 많은 모델이 프롬프트로 다른 미디어도 허용합니다. 미디어 프롬프트는 특정 작업을 수행하도록 모델에 지시하는 텍스트 프롬프트와 결합 캡션 또는 오디오 녹음의 스크립트를 작성하는 등의 작업을 수행합니다.

미디어 입력을 허용하는 기능과 사용할 수 있는 미디어 유형은 다음과 같습니다. 모델과 API에 전적으로 의존할 수 있습니다. 예를 들어 Gemini 1.5는 일련의 모델은 이미지, 동영상, 오디오를 프롬프트로 허용할 수 있습니다.

미디어 프롬프트를 제공하는 대신 미디어 프롬프트를 지원하는 모델 미디어 파트와 미디어 파트로 구성된 배열을 전달하고 텍스트 부분:

const llmResponse = await generate({
  prompt: [
    { media: { url: 'https://example.com/photo.jpg' } },
    { text: 'Compose a poem about this image.' },
  ],
  model: gemini15Flash,
});

위의 예에서는 공개적으로 액세스 가능한 HTTPS를 사용하여 이미지를 지정했습니다. URL입니다. 미디어 데이터를 데이터 URL로 인코딩하여 직접 전달할 수도 있습니다. 예를 들면 다음과 같습니다.

import { readFile } from 'node:fs/promises';
const b64Data = await readFile('output.png', { encoding: 'base64url' });
const dataUrl = `data:image/png;base64,${b64Data}`;

const llmResponse = await generate({
  prompt: [
    { media: { url: dataUrl } },
    { text: 'Compose a poem about this image.' },
  ],
  model: gemini15Flash,
});

미디어 입력을 지원하는 모든 모델은 데이터 URL과 HTTPS URL을 모두 지원합니다. 다소 유용함 모델 플러그인은 다른 미디어 소스에 대한 지원을 추가합니다. 예를 들어 Vertex AI는 또한 Cloud Storage (gs://) URL을 사용할 수 있습니다.

미디어 생성 중

지금까지 이 페이지에 나와 있는 대부분의 예에서는 LLM 하지만 이미지 생성 모델과 함께 Genkit를 사용할 수도 있습니다. 사용 이미지 생성 모델을 사용하는 generate()는 LLM을 사용하는 것과 비슷합니다. 대상 Vertex AI를 통해 Imagen2 모델을 사용하여 이미지를 생성하는 방법은 다음과 같습니다.

  1. Genkit는 data: URL을 생성된 미디어의 표준 출력 형식으로 사용합니다. 이는 처리할 수 있는 라이브러리가 많은 표준 형식입니다. 이 이 예에서는 jsdomdata-urls 패키지를 사용합니다.

    npm i data-urls
    npm i --save-dev @types/data-urls
    
  2. 이미지를 생성하여 파일에 저장하려면 generate()를 호출하여 이미지 생성 모델 및 출력 형식의 미디어 유형:

    import { generate } from '@genkit-ai/ai';
    import { configureGenkit } from '@genkit-ai/core';
    import { vertexAI, imagen2 } from '@genkit-ai/vertexai';
    import parseDataURL from 'data-urls';
    
    import { writeFile } from 'node:fs/promises';
    
    configureGenkit({
      plugins: [vertexAI({ location: 'us-central1' })],
    });
    
    (async () => {
      const mediaResponse = await generate({
        model: imagen2,
        prompt: 'photo of a meal fit for a pirate',
        output: { format: 'media' },
      });
    
      const media = mediaResponse.media();
      if (media === null) throw new Error('No media generated.');
    
      const data = parseDataURL(media.url);
      if (data === null) throw new Error('Invalid ‘data:’ URL.');
    
      await writeFile(`output.${data.mimeType.subtype}`, data.body);
    })();
    

메시지 기록 기록

많은 사용자가 첫날부터 대규모 언어 모델과 상호작용했을 것입니다. 시간을 절약할 수 있었습니다. LLM은 단순히 모델을 시뮬레이션하는 것 이상의 기능을 여전히 친숙하고 유용한 상호작용 스타일입니다. 사용자가 이런 식으로 모델과 직접 상호작용하지 않을 것이며 프롬프트의 대화형 스타일은 출력에 영향을 줄 수 있는 AI 모델에 의해 생성됩니다

모델 응답에서 메시지 기록을 생성하려면 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 역할을 지원하는 경우 초기 기록을 사용하여 시스템 메시지를 설정합니다.

import { MessageData } from "@genkit-ai/ai/model";
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,
});

다음 단계

Genkit 자세히 알아보기

  • 앱 개발자가 생성형 AI의 결과물에 영향을 미치는 주된 방법 프롬프팅을 통해 이루어집니다 프롬프트 관리를 읽고 방법 알아보기 Genkit를 사용하면 효과적인 프롬프트를 개발하고 코드베이스에서 관리할 수 있습니다.
  • generate()이(가) 모든 생성형 AI의 핵심이지만 실생활의 애플리케이션에는 일반적으로 추가 작업이 필요하고 생성형 AI 모델을 호출한 후에 생성됩니다 이를 반영하기 위해 Genkit는 흐름의 개념. 함수처럼 정의되지만 배포 간소화 등의 기능을 지원합니다 자세한 내용은 워크플로 정의.

고급 LLM 사용

  • LLM의 기능을 향상하는 한 가지 방법은 추가 정보를 요청하거나 작업을 수행하도록 요청할 수 있는 방법 실행할 수 있습니다. 이를 도구 호출 또는 함수 호출이라고 합니다. 모델 프롬프트에 대답할 수 있는 AI 기반 모델은 이 특별한 형식의 응답으로, 이 함수는 호출 애플리케이션에 몇 가지 작업을 수행하고 결과를 확인할 수 있습니다 Genkit에는 프롬프트 생성 및 호출-응답 루프 요소 호출 있습니다. 자세한 내용은 도구 호출을 참고하세요.
  • 검색 증강 생성 (RAG, 검색 증강 생성)은 모델의 출력으로 변환합니다. 이 작업은 프롬프트에 관련 정보를 삽입하기 전에 있습니다. RAG를 완벽하게 구현하려면 텍스트 임베딩 생성 모델, 벡터 데이터베이스, 대규모 언어 모델입니다. 검색 증강 생성 (RAG)을 참조하여 다음을 수행합니다. Genkit가 이러한 다양한 툴을 조율하는 과정을 간소화해 요소

모델 출력 테스트

소프트웨어 엔지니어로서 여러분은 동일한 작업이 필요한 결정론적 시스템에 입력은 항상 동일한 출력을 생성합니다. 그러나 AI 모델이 출력은 입력의 미묘한 미묘한 차이에 따라 달라질 수 있습니다. 모델의 학습 데이터, 심지어 매개변수를 통해 의도적으로 도입된 무작위성까지도 알 수 있습니다.

Genkit의 평가자는 LLM의 품질을 평가하는 체계적인 방법입니다. 다양한 전략을 사용하여 대응합니다. 자세히 알아보기: 평가 페이지