mcpField
D
developing-genkit-go

developing-genkit-go

github.com/firebase開発49149.5k 回インストール1 日前に更新
リポジトリ

developing-genkit-go について

Genkit Goを使った開発ガイドです。生成、構造化出力、ストリーミング、ツール呼び出し、プロンプト、フローを扱い、CLIやDeveloper UI、プロバイダー設定、実装パターンも説明します。

主な機能

  1. 01複数のモデルプロバイダーに共通のインターフェース
  2. 02テキスト、構造化データ、ストリーミング生成
  3. 03プロンプト、ツール、フローの定義
  4. 04リトライや承認向けミドルウェア
  5. 05CLIとDeveloper UIによるフローのテスト

活用シーン

  1. 01Goアプリで生成AI機能を構築
  2. 02構造化出力やストリーミング応答を実装
  3. 03モデル呼び出しにツールやミドルウェアを追加
  4. 04フローをテストしてHTTPで提供

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/firebase/agent-skills --skill developing-genkit-go

インストール後、Claude Code で/developing-genkit-goを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
middleware.md
getting-started.md
flows-and-http.md
prompts.md
generation.md
providers.md
tools.md

詳細

Genkit Go

Genkit Go は、モデルプロバイダー間で統一されたインターフェースを通じて、生成、構造化出力、ストリーミング、ツール呼び出し、プロンプト、フローを提供する Go 向け AI SDK です。

Hello World

package main

import (
	"context"
	"fmt"
	"log"
	"net/http"

	"github.com/genkit-ai/genkit/go/ai"
	"github.com/genkit-ai/genkit/go/genkit"
	"github.com/genkit-ai/genkit/go/plugins/googlegenai"
	"github.com/genkit-ai/genkit/go/plugins/server"
)

func main() {
	ctx := context.Background()
	g := genkit.Init(ctx, genkit.WithPlugins(&googlegenai.GoogleAI{}))

	genkit.DefineFlow(g, "jokeFlow", func(ctx context.Context, topic string) (string, error) {
		return genkit.GenerateText(ctx, g,
			ai.WithModelName("googleai/gemini-flash-latest"),
			ai.WithPrompt("Tell me a joke about %s", topic),
		)
	})

	mux := http.NewServeMux()
	for _, f := range genkit.ListFlows(g) {
		mux.HandleFunc("POST /"+f.Name(), genkit.Handler(f))
	}
	log.Fatal(server.Start(ctx, "127.0.0.1:8080", mux))
}

主な機能

必要な内容に応じて、適切なリファレンスを読み込んでください。

機能リファレンス読み込むタイミング
初期化references/getting-started.mdgenkit.Init、プラグイン、*Genkit インスタンスパターンの設定
生成references/generation.mdGenerate、GenerateText、GenerateData、ストリーミング、出力形式
プロンプトreferences/prompts.mdDefinePrompt、DefineDataPrompt、.prompt ファイル、スキーマ
ツールreferences/tools.mdDefineTool、ツール割り込み、RestartWith/RespondWith
ミドルウェアreferences/middleware.mdai.Middleware、ai.WithUse、Hooks(Generate/Model/Tool)、組み込み機能(Retry、Fallback、ToolApproval、Filesystem、Skills)
フローと HTTPreferences/flows-and-http.mdDefineFlow、DefineStreamingFlow、genkit.Handler、HTTP サービング
モデルプロバイダーreferences/providers.mdGoogle AI、Vertex AI、Anthropic、OpenAI 互換、Ollama の設定

Genkit CLI

インストールされているか確認します:genkit --version

インストール:

curl -sL cli.genkit.dev | bash

主なコマンド:

# Start app with Developer UI (tracing, flow testing) at http://localhost:4000
genkit start -- go run .
genkit start -o -- go run .   # also opens browser

# Run a flow directly from the CLI
genkit flow:run myFlow '{"data": "input"}'
genkit flow:run myFlow '{"data": "input"}' --stream   # with streaming
genkit flow:run myFlow '{"data": "input"}' --wait      # wait for completion

# Look up Genkit documentation
genkit docs:search "streaming" go
genkit docs:list go
genkit docs:read go/flows.md

CLI と Developer UI の詳細については、references/getting-started.md を参照してください。

主なガイダンス

  • g を明示的に渡してください。 genkit.Init が返す *Genkit インスタンスは中心的なレジストリです。グローバルに保存するのではなく、すべての Genkit 関数に渡してください。これは SDK 全体で使われる基本パターンです。
  • AI ロジックはフローでラップしてください。 フローを使うと、トレーシング、可観測性、genkit.Handler による HTTP デプロイ、Developer UI や CLI からのテストが可能になります。保持する価値のある生成呼び出しはすべて、フロー内に置いてください。
  • 出力型には jsonschema:"description=..." 構造体タグを使用してください。 モデルはこれらの説明を使って、各フィールドに何を含めるべきかを判断します。説明がない場合、構造化出力の品質は大幅に低下します。
  • 適切なツールの説明を書いてください。 モデルは説明文に基づいて、呼び出すツールを決定します。曖昧な説明では、ツール呼び出しが行われなかったり、誤ったツールが呼び出されたりします。
  • 複雑なプロンプトには .prompt ファイルを使用してください。 プロンプトの内容を Go コードから分離し、Handlebars テンプレートをサポートするため、再コンパイルせずに反復的に調整できます。単純な 1 行のケースには、コードで定義するプロンプトが適しています。
  • 独自に作成する前に、組み込みミドルウェアの利用を検討してください。 Retry、Fallback、ToolApproval、Filesystem、Skills は一般的な横断的ニーズに対応し、ai.WithUse を介して相互に組み合わせられます。references/middleware.md を参照してください。独自のミドルウェアを作成する場合は、New がキャプチャするクロージャー内で呼び出しごとの状態を割り当て、ツールは並行実行される可能性があるため、WrapTool が変更するものには保護を設けてください。
  • 最新のモデル ID を確認してください。 モデル名は頻繁に変更されます。ハードコードされた名前に頼らず、各プロバイダーのドキュメントで現在のモデル ID を確認してください。references/providers.md を参照してください。

コメント