Go(알파)를 사용하여 Genkit 시작하기

이제 Go용 Firebase Genkit 라이브러리가 프리뷰로 제공됩니다. Go 라이브러리는 현재 알파 버전이므로 개발이 진행됨에 따라 API 및 기능이 변경될 수 있습니다. 따라서 프로토타입 제작 및 탐색에만 사용하는 것이 좋습니다.

라이브러리 또는 이 문서에서 문제를 발견하면 GitHub 저장소에 신고하세요.

Genkit를 시작하려면 Genkit CLI를 설치하고 Go 프로젝트에서 genkit init을 실행합니다. 이 페이지의 나머지 부분에서 방법을 확인하세요.

요구사항

  • Go 1.22 이상. 공식 Go 문서에서 다운로드 및 설치를 참조하세요.

  • Node.js 20 이상(Genkit CLI 및 UI용). 노드 설치에 대한 간단한 가이드는 다음 섹션을 참조하세요.

Genkit 설치

  1. 시스템에 아직 Node 20 이상이 설치되어 있지 않다면 지금 설치합니다.

    권장사항: nvmnvm-windows 도구는 시스템에 아직 설치되지 않은 경우 특정 버전의 Node.js를 설치할 수 있는 편리한 방법입니다. 이러한 도구는 사용자별로 노드를 설치하므로 시스템 전체를 변경할 필요가 없습니다.

    nvm을 설치하려면 다음 안내를 따르세요.

    Linux, macOS 등

    다음 명령어를 실행합니다.

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
    

    Windows

    nvm-windows 문서에 설명된 대로 설치 프로그램을 다운로드하고 실행합니다.

    그런 다음 노드 및 npm을 설치하려면 새 셸을 열고 다음 명령어를 실행합니다.

    nvm install 20
    
  2. 다음 명령어를 실행하여 Genkit CLI를 설치합니다.

    npm i -g genkit
    

    이 명령어는 Genkit CLI를 노드 설치 디렉터리에 설치하여 노드 프로젝트 외부에서 사용할 수 있습니다.

샘플 프로젝트 만들기 및 살펴보기

  1. 새 프로젝트 디렉터리를 만듭니다.

    mkdir genkit-intro && cd genkit-intro
    
  2. Genkit 프로젝트를 초기화합니다.

    genkit init
    
    1. Go를 런타임 환경으로 선택합니다.

    2. 모델을 선택합니다.

      Gemini(Google AI)

      시작하는 가장 쉬운 방법은 Google AI Gemini API를 사용하는 것입니다. 해당 리전에서 사용할 수 있는지 확인합니다.

      Google AI Studio를 사용하는 Gemini API의 API 키를 생성합니다. 그런 다음 GOOGLE_GENAI_API_KEY 환경 변수를 키에 설정합니다.

      export GOOGLE_GENAI_API_KEY=<your API key>
      

      Gemini(Vertex AI)

      해당 리전에서 Google AI Gemini API를 사용할 수 없는 경우 Gemini 및 기타 모델도 제공하는 Vertex AI API를 사용하는 것을 고려해 보세요. 결제가 사용 설정된 Google Cloud 프로젝트가 있어야 하며, AI Platform API를 사용 설정하고 몇 가지 추가 환경 변수를 설정합니다.

      gcloud services enable aiplatform.googleapis.com
      export GCLOUD_PROJECT=<your project ID>
      export GCLOUD_LOCATION=us-central1
      

      Vertex AI 가격 책정을 참조하세요.

    3. 모듈 이름으로 무엇이든 지정합니다. 예: example/genkit-intro

    4. 나머지 질문에 대한 기본 답변을 선택하면 샘플 코드로 프로젝트 폴더가 초기화됩니다.

    genkit init 명령어는 샘플 Go 모듈을 만들고 필수 종속 항목을 설치합니다. main.go 파일에는 LLM이 특정 테마의 식당을 위한 항목을 제안하도록 요청하는 단일 흐름 menuSuggestionFlow가 포함되어 있습니다.

    이 파일은 다음과 같이 표시됩니다(플러그인 구성 단계가 Vertex AI를 선택한 경우 다르게 표시될 수 있음).

    package main
    
    import (
    	"context"
    	"errors"
    	"fmt"
    	"log"
    
    	// Import Genkit and the Google AI plugin
    	"github.com/firebase/genkit/go/ai"
    	"github.com/firebase/genkit/go/genkit"
    	"github.com/firebase/genkit/go/plugins/googleai"
    )
    
    func main() {
    	ctx := context.Background()
    
    	// Initialize the Google AI plugin. When you pass nil for the
    	// Config parameter, the Google AI plugin will get the API key from the
    	// GOOGLE_GENAI_API_KEY environment variable, which is the recommended
    	// practice.
    	if err := googleai.Init(ctx, nil); err != nil {
    		log.Fatal(err)
    	}
    
    	// Define a simple flow that prompts an LLM to generate menu suggestions.
    	genkit.DefineFlow("menuSuggestionFlow", func(ctx context.Context, input string) (string, error) {
    		// The Google AI API provides access to several generative models. Here,
    		// we specify gemini-1.5-flash.
    		m := googleai.Model("gemini-1.5-flash")
    		if m == nil {
    			return "", errors.New("menuSuggestionFlow: failed to find model")
    		}
    
    		// Construct a request and send it to the model API (Google AI).
    		resp, err := ai.Generate(ctx, m,
    			ai.WithConfig(&ai.GenerationCommonConfig{Temperature: 1}),
    			ai.WithTextPrompt(fmt.Sprintf(`Suggest an item for the menu of a %s themed restaurant`, input)))
    		if err != nil {
    			return "", err
    		}
    
    		// Handle the response from the model API. In this sample, we just
    		// convert it to a string. but more complicated flows might coerce the
    		// response into structured output or chain the response into another
    		// LLM call.
    		text := resp.Text()
    		return text, nil
    	})
    
    	// Initialize Genkit and start a flow server. This call must come last,
    	// after all of your plug-in configuration and flow definitions. When you
    	// pass a nil configuration to Init, Genkit starts a local flow server,
    	// which you can interact with using the developer UI.
    	if err := genkit.Init(ctx, nil); err != nil {
    		log.Fatal(err)
    	}
    }
    
    

    Genkit를 사용해 앱의 AI 기능을 빌드하면서 입력 사전 처리, 보다 정교한 프롬프트 구성, 검색 증강 생성(RAG)을 위한 외부 정보 소스 통합 등의 여러 단계로 흐름을 만들 가능성이 높습니다.

  3. 이제 머신에서 로컬로 Genkit 기능과 샘플 프로젝트를 실행하고 살펴볼 수 있습니다. Genkit 개발자 UI를 다운로드하고 시작합니다.

    genkit start
    

    Genkit 개발자 UI에 오신 것을 환영합니다.

    이제 Genkit 개발자 UI가 머신에서 실행됩니다. 다음 단계에서 모델 또는 흐름을 실행할 때 머신은 흐름의 단계가 함께 작동하도록 하는 데 필요한 조정 작업을 수행합니다. Gemini API와 같은 외부 서비스 호출은 계속해서 라이브 서버에 대해 수행됩니다.

    또한 개발 환경에 있으므로 Genkit는 trace 및 흐름 상태를 로컬 파일에 저장합니다.

  4. genkit start 명령어를 실행하면 Genkit 개발자 UI가 자동으로 다운로드되고 열립니다.

    개발자 UI를 사용하면 정의한 흐름과 구성한 모델을 보고 이를 실행하며, 이전 실행의 trace를 검사할 수 있습니다. 다음과 같은 기능을 사용해 보세요.

    • 실행 탭에 있는 정의한 모든 흐름 목록과 플러그인에서 구성한 모든 모델이 표시됩니다.

      menuSuggestionFlow를 클릭하고 입력 텍스트(예: "cat")로 실행해 보세요. 의도대로 작동되면 고양이 테마 식당의 메뉴 제안이 표시됩니다.

    • 검사 탭에 흐름 실행 기록이 표시됩니다. 각 흐름에서 흐름에 전달된 파라미터와 실행된 각 단계의 trace가 표시됩니다.