Go を使用した Genkit のスタートガイド(アルファ版)

Go 用 Firebase Genkit ライブラリのプレビュー版がリリースされました。この Go ライブラリは現在アルファ版であるため、開発が進むにつれて API や機能が変更される可能性があります。プロトタイピングと探索でのみ使用することをおすすめします。

このライブラリやドキュメントに関する問題を発見した場合は、GitHub リポジトリで報告してください。

Genkit の使用を開始するには、Genkit CLI をインストールし、Go プロジェクトで genkit init を実行します。このページの残りの部分では、その方法について説明します。

要件

  • Go 1.22 以降。Go の公式ドキュメントのダウンロードとインストールをご覧ください。

  • Node.js 20 以降(Genkit CLI と UI 用)。Node のインストールに関する簡単なガイドについては、次のセクションをご覧ください。

Genkit をインストールする

  1. システムに Node 20 以降がインストールされていない場合は、今すぐインストールしてください。

    推奨: nvm ツールと nvm-windows ツールは、まだシステムにインストールされていない場合に、Node の特定のバージョンをインストールする便利な方法です。これらのツールはユーザーごとに Node をインストールするため、システム全体に変更を加える必要はありません。

    nvm をインストールするには:

    Linux、macOS など

    次のコマンドを実行します。

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

    Windows

    nvm-windows ドキュメントに記載されている手順に沿って、インストーラをダウンロードして実行します。

    Node と npm をインストールするには、新しいシェルを開いて次のコマンドを実行します。

    nvm install 20
  2. 次のコマンドを実行して、Genkit CLI をインストールします。

    npm i -g genkit

    このコマンドは、Genkit CLI を Node インストール ディレクトリにインストールし、Node プロジェクトの外部で使用できるようにします。

サンプル プロジェクトを作成して確認する

  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 が利用できない場合は、Vertex AI API の使用を検討してください。Vertex AI API では、Gemini 以外のモデルも提供されています。課金が有効になっている 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 はトレースやフロー状態をローカル ファイルに保存します。

  4. Genkit デベロッパー UI は、genkit start コマンドを実行すると自動的にダウンロードされ、開かれます。

    デベロッパー UI を使用すると、定義したフローや構成したモデルを確認したり、実行したり、以前の実行のトレースを調べたりできます。一部の機能を試してみましょう。

    • [実行] タブには、定義したすべてのフローと、プラグインによって構成されたモデルのリストが表示されます。

      menuSuggestionFlow をクリックし、入力テキスト(例: "cat")を与えて実行してみてください。正常に動作すれば、猫をテーマにしたレストランのメニュー候補が表示されます。

    • [検査] タブに、フローの実行履歴が表示されます。フローごとに、フローに渡されたパラメータと、実行時の各ステップのトレースを確認できます。