플로우로 AI 워크플로 정의

플로우로 AI 워크플로 정의

AI 워크플로는 단순한 모델 호출 이상의 것(컨텍스트 검색, 세션 관리, 출력 검증, 여러 모델 응답 결합)이 필요해요. Genkit의 플로우(flow) 는 AI 로직을 감싸는 특별한 함수로, 타입 안전한 입·출력, 스트리밍, 개발자 UI 통합, 쉬운 배포를 제공해요. 가볍고 최소한의 추상화로 일반 함수처럼 작성돼요.

출처: https://genkit.dev/docs/js/flows/

가장 단순한 형태의 플로우는 함수 하나를 감싸는 거예요. 다음 예제는 모델 생성 요청을 하는 함수를 감싸요.

import { googleAI } from '@genkit-ai/google-genai';
import { genkit, z } from 'genkit';

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

export const menuSuggestionFlow = ai.defineFlow(
  {
    name: 'menuSuggestionFlow',
    inputSchema: z.object({ theme: z.string() }),
    outputSchema: z.object({ menuItem: z.string() }),
  },
  async ({ theme }) => {
    const { text } = await ai.generate({
      model: googleAI.model('gemini-flash-latest'),
      prompt: `Invent a menu item for a ${theme} themed restaurant.`,
    });
    return { menuItem: text };
  },
);

플로우의 핵심 장점 중 하나는 입·출력의 타입 안전성이에요. generate()처럼 출력 스키마를 정의하되, 플로우는 입력 스키마도 지정할 수 있어요. z.object()로 스키마를 감싸는 게 권장되는데, 개발자 UI에서 라벨이 붙은 입력 필드를 제공하고 미래 확장에도 유리하기 때문이에요.

스트리밍 플로우는 streamSchema로 스트리밍 값 타입을 정해요. 두 번째 파라미터 sideChannelsendChunk 콜백으로 데이터가 준비될 때마다 출력 스트림에 보내요.

CLI로 플로우를 실행·테스트할 수도 있어요.

genkit flow:run menuSuggestionFlow '{"theme": "French"}' -- <command to start your app>

디버깅은 genkit start로 개발자 UI를 띄워 플로우를 실행하고 trace를 검사할 수 있어요. generate(), Chat.send(), embed(), index(), retrieve()는 플로우의 개별 스텝으로 trace에 표시되고, 그 외 코드는 run()으로 감싸 trace에 포함시킬 수 있어요.

배포는 defineFlow()startFlowServer()로 Express 서버를 띄우면 모든 플로우가 HTTP 엔드포인트가 돼요(기본 http://localhost:3400/menuSuggestionFlow). Cloud Functions for Firebase에서는 onCallGenkit을 써요.

더 알아보기