developing-genkit-go について
Genkit Goを使った開発ガイドです。生成、構造化出力、ストリーミング、ツール呼び出し、プロンプト、フローを扱い、CLIやDeveloper UI、プロバイダー設定、実装パターンも説明します。
主な機能
- 01複数のモデルプロバイダーに共通のインターフェース
- 02テキスト、構造化データ、ストリーミング生成
- 03プロンプト、ツール、フローの定義
- 04リトライや承認向けミドルウェア
- 05CLIとDeveloper UIによるフローのテスト
活用シーン
- 01Goアプリで生成AI機能を構築
- 02構造化出力やストリーミング応答を実装
- 03モデル呼び出しにツールやミドルウェアを追加
- 04フローをテストしてHTTPで提供
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ firebase/ agent-skills --skill developing-genkit-goインストール後、Claude Code で/developing-genkit-goを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/middleware.mdgetting-started.mdflows-and-http.mdprompts.mdgeneration.mdproviders.mdtools.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.md | genkit.Init、プラグイン、*Genkit インスタンスパターンの設定 |
| 生成 | references/generation.md | Generate、GenerateText、GenerateData、ストリーミング、出力形式 |
| プロンプト | references/prompts.md | DefinePrompt、DefineDataPrompt、.prompt ファイル、スキーマ |
| ツール | references/tools.md | DefineTool、ツール割り込み、RestartWith/RespondWith |
| ミドルウェア | references/middleware.md | ai.Middleware、ai.WithUse、Hooks(Generate/Model/Tool)、組み込み機能(Retry、Fallback、ToolApproval、Filesystem、Skills) |
| フローと HTTP | references/flows-and-http.md | DefineFlow、DefineStreamingFlow、genkit.Handler、HTTP サービング |
| モデルプロバイダー | references/providers.md | Google 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 を参照してください。
コメント
Markdown 対応