Go で Genkit を使ってみる(アルファ版)

Go 用の Firebase Genkit ライブラリのプレビュー版が利用可能になりました。これは、 Go ライブラリは現在アルファ版です。API や機能の変更が 開発が進展します。推奨するのはプロトタイピングと あります

ライブラリやドキュメントで問題が見つかった場合は、ご報告ください。 GitHub リポジトリをご覧ください。

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

要件

  • Go 1.22 以降

  • Node.js 20 以降(Genkit CLI および UI の場合)

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

    macOS や Linux などの Unix 系のシステムに nvm をインストールするには、次のコマンドを実行します。 command:

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

    次に、nvm を使用して Node をインストールするため、新しいシェルを開き、次のコマンドを実行します。 command:

    nvm install 20
    

手順

  1. 次のコマンドを実行して Genkit CLI をインストールします。

    npm i -g genkit
    

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

  2. 新しいプロジェクト ディレクトリを作成します。

    mkdir genkit-intro && cd genkit-intro
    
  3. Genkit プロジェクトを初期化します。

    genkit init
    
    1. ランタイム環境として Go を選択します。

    2. モデルを選択します。

      Gemini(Google AI)

      最も簡単に始める方法は、Google AI Gemini API を使用することです。確認事項 です 利用可能な地域をご確認ください。

      アプリケーションの API キーを生成 Google AI Studio を使用する Gemini 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 プロジェクトを用意し、 次の環境変数を設定します。

      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 には単一のフローが含まれています。 menuSuggestionFlow: LLM に特定の商品の提案を求めるプロンプトを 特定のテーマのレストランになります。

    このファイルは、次のようになります(プラグインの構成手順)。 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 := m.Generate(ctx,
                ai.NewGenerateRequest(
                    &ai.GenerationCommonConfig{Temperature: 1},
                    ai.NewUserTextMessage(fmt.Sprintf(`Suggest an item for the menu of a %s themed restaurant`, input))),
                nil)
            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, err := resp.Text()
            if err != nil {
                return "", fmt.Errorf("menuSuggestionFlow: %v", err)
            }
            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)など

  4. Genkit の特徴とサンプル プロジェクトをローカルで実行して探索できるようになりました インストールします。Genkit デベロッパー UI をダウンロードして開始します。

    genkit start
    

    ようこそ
Genkit デベロッパー UI

    これで Genkit デベロッパー UI がマシンで実行されました。モデルを実行するとき 次のステップで、マシンがオーケストレーション タスクを実行します。 フローのステップを連携させるために必要な 操作です外部への呼び出し サービス(Gemini API など)は、引き続きライブ ストリーミングに対して 説明します。

    また、開発環境にいるため、Genkit はトレースと ローカル ファイルに保存されています。

  5. Genkit デベロッパー UI は、 genkit start コマンドを使用します。

    デベロッパー UI では、定義したフローや、作成したモデルを確認できます。 実行し、以前の実行のトレースを調べる。以下をお試しください 次の特長があります。

    • [Run] タブに、実行中のすべてのフローのリストが表示されます。 プラグインで構成されたモデルが含まれます。

      menuSuggestionFlow をクリックし、入力テキスト( 例: "cat")。問題がなければ、メニューが提供されます。 おすすめします。

    • [Inspect] タブに、フロー実行の履歴が表示されます。各 フローに渡されたパラメータとトレース フローが 自動的に最適化されます。