Google はこの度、Genkit Go 1.0 をリリースいたします。これは、Go エコシステム向けに Google が提供する、オープンソース AI 開発フレームワークの初の安定版かつプロダクション レディなリリースです。また、これに合わせ、AI を活用した開発ワークフローを大幅に強化する genkit init:ai-tools コマンドも新たにリリースいたします。
Genkit は、フルスタックの AI 搭載アプリケーションを構築するためのオープンソース フレームワークです。複数のモデル プロバイダに対応する統合インターフェースや、マルチモーダル コンテンツ、構造化出力、ツールの呼び出し、検索拡張生成(RAG)、エージェント ワークフロー向けの効率的な API を提供します。Genkit Go により、Go のスピードや安全性、信頼性を活かしながら、プロダクション レディな AI アプリケーションを構築、デプロイできるようになります。
Genkit Go が安定版となり、本番環境で利用可能になりました。
主な機能:
さあコーディングを始めましょう。スタートガイドをご覧ください。
Genkit Go 1.0 は、Go で AI 搭載アプリケーションを構築するための信頼性の高い安定した基盤を提供するという、Google の取り組みを体現するものです。本リリースにより、API が安定しており、十分にテスト済みであるという安心感を持って、Genkit を使い、本番環境に AI 搭載アプリケーションをデプロイできるようになります。
また、Go 自体と同様に、Genkit 1.* で作成されたプログラムは、今後 Genkit の「ポイント」リリース(Genkit 1.1、Genkit 1.2 など)が登場しても、変わることなく正常に、コンパイルおよび動作することが想定されています。
Genkit の最も強力な機能のひとつがフローです。これは AI ユースケース向けの関数で、オブザーバビリティや簡易なテスト、簡素化されたデプロイを実現します。以下は、構造化されたレシピを Go で生成するためのフローを定義する方法です。
package main
import (
"context"
"encoding/json"
"fmt"
"log"
"github.com/firebase/genkit/go/ai"
"github.com/firebase/genkit/go/genkit"
"github.com/firebase/genkit/go/plugins/googlegenai"
)
// Define your data structures
type RecipeInput struct {
Ingredient string `json:"ingredient" jsonschema:"description=Main ingredient or cuisine type"`
DietaryRestrictions string `json:"dietaryRestrictions,omitempty" jsonschema:"description=Any dietary restrictions"`
}
type Recipe struct {
Title string `json:"title"`
Description string `json:"description"`
PrepTime string `json:"prepTime"`
CookTime string `json:"cookTime"`
Servings int `json:"servings"`
Ingredients []string `json:"ingredients"`
Instructions []string `json:"instructions"`
Tips []string `json:"tips,omitempty"`
}
func main() {
ctx := context.Background()
// Initialize Genkit with plugins
g := genkit.Init(ctx,
genkit.WithPlugins(&googlegenai.GoogleAI{}),
genkit.WithDefaultModel("googleai/gemini-2.5-flash"),
)
// Define a type-safe flow
recipeFlow := genkit.DefineFlow(g, "recipeGeneratorFlow",
func(ctx context.Context, input *RecipeInput) (*Recipe, error) {
dietaryRestrictions := input.DietaryRestrictions
if dietaryRestrictions == "" {
dietaryRestrictions = "none"
}
prompt := fmt.Sprintf(`Create a recipe with the following requirements:
Main ingredient: %s
Dietary restrictions: %s`, input.Ingredient, dietaryRestrictions)
// Generate structured data with type safety
recipe, _, err := genkit.GenerateData[Recipe](ctx, g,
ai.WithPrompt(prompt),
)
if err != nil {
return nil, fmt.Errorf("failed to generate recipe: %w", err)
}
return recipe, nil
})
// Run the flow
recipe, err := recipeFlow.Run(ctx, &RecipeInput{
Ingredient: "avocado",
DietaryRestrictions: "vegetarian",
})
if err != nil {
log.Fatalf("could not generate recipe: %v", err)
}
// Print the structured recipe
recipeJSON, _ := json.MarshalIndent(recipe, "", " ")
fmt.Println("Sample recipe generated:")
fmt.Println(string(recipeJSON))
<-ctx.Done() // Used for local testing only
}
Genkit Go は、Google AI、Vertex AI、OpenAI、Anthropic、Ollama など、複数の AI モデル プロバイダを扱うための一貫性のある単一のインターフェースを提供します。詳しくは、AI モデルを使ったコンテンツの生成についてご覧ください。
// Use Google AI models
resp, err := genkit.Generate(ctx, g,
ai.WithModelName("googleai/gemini-2.5-flash"),
ai.WithPrompt("What is the weather like today?"),
)
// Use OpenAI models
resp, err := genkit.Generate(ctx, g,
ai.WithModelName("openai/gpt-4o"),
ai.WithPrompt("How are you today?"),
)
// Switch to Ollama for local models
resp, err := genkit.Generate(ctx, g,
ai.WithModelName("ollama/llama3"),
ai.WithPrompt("What is the meaning of life?"),
)
Genkit Go を使えば、外部の関数や API へのアクセスを AI モデルに簡単に付与できます。詳しくは、ツールの呼び出しに関する完全ガイドをご覧ください。
// Define a tool
type WeatherInput struct {
Location string `json:"location" jsonschema_description:"Location to get weather for"`
}
getWeatherTool := genkit.DefineTool(g, "getWeather",
"Gets the current weather in a given location",
func(ctx *ai.ToolContext, input WeatherInput) (string, error) {
// Your weather API logic here
return fmt.Sprintf("The current weather in %s is 72°F and sunny.", input.Location), nil
})
// Use the tool in generation
resp, err := genkit.Generate(ctx, g,
ai.WithPrompt("What's the weather in San Francisco?"),
ai.WithTools(getWeatherTool),
)
最小限の設定で、HTTP エンドポイントとしてフローをデプロイできます。その他のオプションについては、デプロイガイドをご覧ください。
// Create HTTP handlers for your flows
mux := http.NewServeMux()
mux.HandleFunc("POST /recipeGeneratorFlow", genkit.Handler(recipeFlow))
// Start the server
log.Fatal(server.Start(ctx, "127.0.0.1:3400", mux))
Genkit Go には、AI アプリケーションを迅速かつ直感的に構築することを可能にする、包括的な開発ツールのセットが搭載されています。Go の開発ワークフローとシームレスに連携する単一の CLI を通じて、このローカル ツールチェーン全体を利用できます。
スタンドアロン CLI バイナリで、すぐに利用を開始できます。他のランタイムのインストールは不要です。
MacOS および Linux の場合:
curl -sL cli.genkit.dev | bash
Windows の場合: cli.genkit.dev から直接ダウンロードします
この CLI は、JavaScript、Go、Python といったサポート対象の言語で作成された Genkit アプリケーションに対応しており、フローの実行や評価など、迅速なテストや反復処理を可能にする便利なコマンドを複数提供しています。
デベロッパー UI は、AI アプリケーションのテストやデバッグのためのビジュアル インターフェースを提供します。
CLI を通じて、Go アプリケーションと並行してデベロッパー UI を起動できます。
genkit start -- go run .
以下は、先ほどの recipeGenerator
フローを実行、確認した際の様子です。
Google では、この度、開発時における AI アシスタントとの連携方法に革新をもたらす、genkit init:ai-tools
コマンドもリリースいたしました。これは、主要な AI コーディング アシスタントを自動的に設定し、Genkit フレームワークやツールとシームレスに連携できるようにする機能で、JavaScript および Go デベロッパー向けに提供が開始されています。詳しくは、Genkit における AI を活用した開発をご覧ください。
このコマンドを使用するには、Genkit CLI をインストールし、以下を実行します。
genkit init:ai-tools
このコマンドを実行すると、以下が行われます。
このコマンドには、以下のサポートが組み込まれています。
その他のツールについては、「汎用」オプションを選択すると、手動で統合可能な GENKIT.md ファイルを取得できます。
AI アシスタントの統合により、次のことが可能になります。
1. 新しいプロジェクトを作成します。
mkdir my-genkit-app && cd my-genkit-app
go mod init example/my-genkit-app
2. Genkit と CLI をインストールします。
go get github.com/firebase/genkit/go
curl -sL cli.genkit.dev | bash
3. AI アシスタントの統合を設定します。
genkit init:ai-tools
4. 最初のフローを作成します(上記の例を使用)。
5. デベロッパー UI を開始します。
genkit start -- go run .
より詳細なチュートリアルについては、スタートガイドをご覧ください。
Genkit Go 1.0 は、Go が誇る高い性能と信頼性を、Genkit のプロダクション レディな AI フレームワークおよびツールと融合させたものです。Genkit Go 1.0 を利用して、皆様が開発されるアプリを楽しみにしております。
それでは、コーディングをお楽しみください。