Genkit for Go の紹介: Go でスケーラブルな AI アプリを構築する

7月 17, 2024
Chris Gill Product Manager
Cameron Balahan Group Product Manager

Google I/O では、Node.js 向けの Firebase Genkit が発表されました。それに続き、Firebase チームと Go チームが協力して Genkit を Go コミュニティに導入します。オープンソース フレームワークである Genkit for Go を使うと、シンプルさ、スケーラビリティ、セキュリティで名高い Go 言語を使って、AI アプリケーションやクラウド サービスをネイティブに構築できます。

デベロッパーは、Go の利点であるパフォーマンスと同時実行性を Genkit のライブラリやツールと組み合わせることにより、両方のテクノロジーの可能性を最大限に活用する生成 AI アプリケーションを作成できます。潜在的なユースケースには次のようなものが挙げられます。

  • インテリジェント アシスタント: 複雑なリクエストを理解し、旅行の予約や旅程表の作成などのタスクを自律的に実行します。ユーザーの好みに合わせてあらゆるタスクをカスタマイズできます。

  • カスタマー サポート エージェント: 検索拡張生成(RAG)を使うことで、皆さんの会社のナレッジベースやポリシーに基づいて、すばやく正確に個人に合わせて応答します。

  • 強力なデータ変換ツール: 自然言語などの非構造化データを構造化フォーマット(SQL クエリ、テーブル)に変換し、詳細な分析を行って知見を得ます。

Genkit for Go は現在アルファ版で、実験や調査に最適です。ぜひ AI プロジェクトのプロトタイプを作成し、フィードバックをお寄せください。Go デベロッパーが本番環境に対応したスケーラブルな次世代の AI アプリケーションを構築できるように、皆さんの意見を Genkit for Go のロードマップに直接反映いたします。


AI による生成、検索、ワークフローに利用できる直感的なライブラリ

Genkit は、AI アプリケーションを構築するためのデベロッパー ファーストなフレームワークです。Go だけで書かれた Go ライブラリなので、Go 言語らしい記述法や表記規則が使われており、Go デベロッパーならすぐになじめる生産性の高いライブラリになっています。Genkit は、軽量で組み合わせ可能な抽象化された機能を提供し、洗練された AI ワークフローを簡単に開発できるようになっています。カスタマイズ性や制御性が犠牲になることはありません。

生成 AI アプリケーションを構築するときに Genkit を使うと、次のような点で生産性が向上します。

  • 統一された生成 API: 一貫性のある 1 つのインターフェースによって、さまざまなモデル(Gemini、Gemma、サードパーティ)からコンテンツを生成します。モデルを簡単に設定し、関数呼び出しや構造化出力などの強力な機能を活用できます。

  • ネイティブ ベクトル データベースのサポート: シンプルなインデックス作成および検索 API は、さまざまなベクトル データベース プロバイダで動作します。これを使って検索拡張生成(RAG)をアプリケーションに組み込み、AI モデルをコンテキストに対応させることができます。

  • AI ワークフローのための「フロー」: Genkit の「フロー」を使うと、複数のステップの AI ワークフローを整理できます。フローにはオブザーバビリティ機能が組み込まれているので、デバッグやモニタリングが可能です。また、Genkit ツールとも連携でき、最小限のボイラープレートで簡単に HTTP エンドポイントとしてデプロイできます。
func main() {
    ctx := context.Background()
 
    // Google AI プラグインを初期化する。
    if err := googleai.Init(ctx, nil); err != nil {
        log.Fatal(err)
    }
 
    // LLM にメニューを提案してもらうプロンプトを生成する簡単なフローを定義する。
    // フローは Genkit ツールとの連携機能で、
    // 複数ステップのワークフローを観察できるようにする。
    genkit.DefineFlow("menuSuggestionFlow", func(ctx context.Context, input string) (string, error) {
 
        // Google AI の gemini-1.5-flash モデルを初期化する。
        m := googleai.Model("gemini-1.5-flash")
        if m == nil {
            return "", errors.New("menuSuggestionFlow: failed to find 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
        }
 
        // モデル API からのレスポンスを処理する。
        text, err := resp.Text()
        if err != nil {
            return "", fmt.Errorf("menuSuggestionFlow: %v", err)
        }
        return text, nil
    })
 
    // Genkit フローサーバーを初期化する。
    if err := genkit.Init(ctx, nil); err != nil {
        log.Fatal(err)
    }
}

強力なプロンプト エンジニアリングと管理

最適な AI 生成結果を実現するには、モデル、設定、プロンプト、出力形態を慎重に検討する必要があります。Genkit は、シンプルなファイル形式である Dotprompt に対応しているので、エンジニアリング プロセスが効率的になります。

Dotprompt を使うと、高度なプロンプト テンプレート、入出力スキーマ、モデル選択、モデル設定オプションをすべて 1 つの .prompt ファイルで定義できます。あらゆるものをうまく整理できるので、プロンプトを Go コードと一緒にテスト、バージョン管理、デプロイしやすくなります。

---
model: vertexai/gemini-1.5-pro
config:
  temperature: 0.9
input:
  schema:
    location: string
    style?: string
    name?: string
  default:
    location: a restaurant
---
 
You are the world's most welcoming AI assistant and are currently working at {{location}}.
 
Greet a guest{{#if name}} named {{name}}{{/if}}{{#if style}} in the style of {{style}}{{/if}}.

Google やサードパーティの AI サービスとの連携

Genkit for Go の中核にあるのは、プロバイダに依存しない軽量フレームワークです。Google やサードパーティ プロバイダの特定のモデル、ベクトル データベース、クラウド サービスとシームレスに連携できるプラグインのコレクションは増加を続けています。

今回のリリースの Genkit for Go では、次のプラグインが提供されます。

  • Google Cloud Vertex AI プラグイン: Google Cloud の本番環境対応 AI プラットフォームである Vertex AI から、Gemini や組み込みモデルにアクセスします。Google の画像生成モデル、評価モデル、Model Garden のサードパーティ モデルも近日中にサポートされます。

  • Ollama プラグイン: Ollama を使って Gemma、Llama、Mistral などのオープンソース モデルにアクセスし、ローカルで実行します。

  • Pinecone プラグイン: Pinecone のベクトル データベースと連携して、効率的なインデックス作成や検索操作を行います。

Genkit のプラグイン システムは、オープンで拡張可能な設計なので、あらゆるモデル、ベクトル データベース、評価モデル、ツールなどを利用できます。コミュニティの皆さんは、ぜひ独自のプラグインを公開し、Genkit のエコシステムに貢献してください。

まもなく、ドキュメントに Genkit for Go プラグイン開発ガイドが追加されますので、お楽しみに!


デベロッパー ツールとの連携

AI アプリを構築しようとすると、効果的なプロンプトの作成、予測不可能な出力のデバッグ、検索プロセスの最適化など、他にはない課題に直面します。典型的な IDE ユーティリティにはない専用ツールを提供することで、このような複雑な問題に対処できるようにしたいと考えています。

Genkit の CLI と直感的なブラウザベースのデベロッパー UI には、強力なツールキットが含まれているため、生成 AI 開発の効率が上がります。

このツールを使うと、次のようなことができるようになります。

  • すばやく新規 Genkit プロジェクトを初期化する、または既存のプロジェクトに Genkit を組み込む。

  • Genkit コンポーネント用のプレイグラウンドで、AI ワークフロー、プロンプト、検索クエリなどをインタラクティブに実行して反復する

  • 実行するワークフローやコンポーネントの詳細なトレースやメタデータを表示することで、完全なオブザーバビリティ機能や効率的なデバッグ機能を提供する。

  • テストセットと比較して AI ワークフローを評価し、スコアによる指標や関連するトレースへのリンクを表示する。

VS Code や Project IDX で作業したい方は、IDE の内蔵ブラウザで Genkit デベロッパー UI を開くと、コードと並べて利用できます。


本番環境でのオブザーバビリティ機能

デプロイの準備が整ってからも、期待どおりのサービスを確実にユーザーに提供できるように、Genkit で本番環境の AI アプリケーションを監視できます。Genkit の Google Cloud テレメトリ プラグインを使うと、AI アプリから Google Cloud の運用スイートにログ、指標、トレースを簡単にエクスポートできます。

image1

Google Cloud との連携機能はすぐに利用できますが、Genkit のインストルメンテーションは広く使われている OpenTelemetry 標準による実装にしてあるため、多くの一般的なオブザーバビリティ プラットフォームと連携させることができます。


始める

Genkit for Go はアルファ版として利用できるので、さっそくこれを使って AI ワークフローをアプリケーションに組み込み、成長を続ける Go AI デベロッパーのコミュニティに参加しましょう。

はじめるには、Genkit for Go スタートガイドをご覧ください。

また、IDX の事前設定済みワークスペースで Genkit テンプレートを開くこともできます。

私たちは、ぜひとも皆さんと協力したいと思っています!

  • Genkit Discord サーバーにアクセスすると、Genkit チームに直接連絡したり、お知らせを確認したり、質問したり、エクスペリエンスについて話し合ったりできます。

  • ディスカッション フォーラムの Show and Tell セクションで、皆さんが Genkit を使って作ったものを共有してください。

力を合わせて Go の AI 開発エコシステムを繁栄させましょう。皆さんが Genkit で作ったものを見るのが待ちきれません!