我们很高兴宣布推出 Genkit Go 1.0,这是 Google 面向 Go 生态系统开源 AI 开发框架提供的首个生产就绪型稳定版本。在发布此版本的同时,我们还将引入 genkit init:ai-tools 命令,为您的 AI 辅助开发工作流提供强大助力。
Genkit 是用于构建 AI 驱动的全栈应用的开源框架。它为多个模型提供程序提供统一的接口,并为多模态内容、结构化输出、工具调用、检索增强生成 (RAG) 和代理工作流提供了简化的 API。有了 Genkit Go,您现在能以 Go 的速度、安全性和可靠性构建和部署生产就绪型 AI 应用。
Genkit Go 现已推出稳定版并可用于生产环境!
关键功能:
准备好开始编码了吗?请查看我们的入门指南。
我们曾承诺为在 Go 中构建 AI 应用提供稳定、可靠的基础,而 Genkit Go 1.0 具象化了这一承诺。借助此版本,您可以放心使用 Genkit 将 AI 驱动的应用部署到生产环境中,因为您知道相关 API 足够稳定且经过良好测试。
我们预计使用 Genkit 1.* 编写的程序将像 Go 本身一样继续正确编译和运行,且不加改变,即使将来出现 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
}
若您与多个 AI 模型提供商(包括 Google AI、Vertex AI、OpenAI、Anthropic 和 Ollama)合作,Genkit Go 可提供一致的单一界面。了解有关使用 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 可以让您的 AI 模型轻松访问外部函数和 API。请参阅完整的工具调用指南:
// 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 应用,并为您提供几个便捷的命令来快速开展测试和迭代,例如运行和评估工作流。
此开发者界面是测试和调试 AI 应用的可视化界面:
通过 CLI 在 Go 应用旁边启动开发者界面:
genkit start -- go run .
以下是运行和检查上述 recipeGenerator
工作流时的体验:
我们还很高兴推出 genkit init:ai-tools
命令,该命令对于在开发过程中与 AI 助理合作的方式来说,是一项重大革新。此功能现在可供 JavaScript 和 Go 开发者使用,可自动配置热门 AI 编码助理,使其与 Genkit 框架和工具无缝配合。了解有关 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. 启动开发者界面:
genkit start -- go run .
如需查看更多详细演示,请参阅入门指南。
Genkit Go 1.0 将 Go 的高性能和可靠性与 Genkit 的生产就绪型 AI 框架和工具相结合。我们真想赶快看到您构建的成果!
乐享编码!🚀