一、什么是 Genkit?
Genkit 是 Google Firebase 团队开发的开源 AI 应用开发框架,支持 JavaScript、Go 和 Python 三种语言 。它让你用熟悉的编程语言,轻松构建生产级的 AI 应用,无需学习复杂的 AI 专用语言。
为什么选择 Genkit Go?
- ✅ 纯 Go 实现,符合 Go 语言习惯
- ✅ 统一接口对接 Gemini、OpenAI、Vertex AI 等主流模型
- ✅ 内置开发者工具,可视化调试 AI 流程
- ✅ 类型安全,用 Go struct 定义输入/输出结构
- ✅ 专为生产环境设计,Google 内部已在使用 [[21]]
二、快速开始(5 步搞定)
第 1 步:环境准备
确保已安装:
# Go 1.24 或更高版本
go version
💡 提示:Genkit 核心是纯 Go 实现,Node.js 仅用于开发者 UI 工具
第 2 步:创建项目
# 创建项目目录
mkdir my-ai-app && cd my-ai-app
# 初始化 Go 模块
go mod init example/my-ai-app
第 3 步:安装 Genkit
# 安装核心包
go get github.com/firebase/genkit/go
# 安装 Google AI 插件(支持 Gemini 模型)
go get github.com/firebase/genkit/go/plugins/googlegenai
第 4 步:配置 API Key
- 访问 Google AI Studio 免费获取 Gemini API Key
- 设置环境变量:
# Linux/macOS
export GEMINI_API_KEY=你的API密钥
# Windows (PowerShell)
$env:GEMINI_API_KEY="你的API密钥"
💡 Gemini 提供慷慨的免费额度,无需信用卡即可开始
第 5 步:编写第一个 AI 应用
创建 main.go 文件:
package main
import (
"context"
"encoding/json"
"fmt"
"log"
"net/http"
"github.com/firebase/genkit/go/ai"
"github.com/firebase/genkit/go/genkit"
"github.com/firebase/genkit/go/plugins/googlegenai"
"github.com/firebase/genkit/go/plugins/server"
)
// 定义输入结构(用 Go struct 描述)
type RecipeInput struct {
Ingredient string `json:"ingredient" jsonschema:"description=主要食材"`
DietaryRestrictions string `json:"dietaryRestrictions,omitempty" jsonschema:"description=饮食限制"`
}
// 定义输出结构(AI 会按此格式返回数据)
type Recipe struct {
Title string `json:"title"`
Description string `json:"description"`
Ingredients []string `json:"ingredients"`
Instructions []string `json:"instructions"`
}
func main() {
ctx := context.Background()
// 1. 初始化 Genkit + Google AI 插件
g := genkit.Init(ctx,
genkit.WithPlugins(&googlegenai.GoogleAI{
}),
genkit.WithDefaultModel("googleai/gemini-2.5-flash"), // 使用最新 Gemini 模型
)
// 2. 定义 AI 流程(Flow):输入食材 → 生成菜谱
recipeFlow := genkit.DefineFlow(g, "recipeGenerator", func(ctx context.Context, input *RecipeInput) (*Recipe, error) {
// 用自然语言描述需求
prompt := fmt.Sprintf(
"用 %s 制作一道 %s 菜肴,返回结构化菜谱",
input.Ingredient,
input.DietaryRestrictions,
)
// 调用 AI 生成结构化数据(自动按 Recipe 格式返回)
recipe, _, err := genkit.GenerateData[Recipe](ctx, g, ai.WithPrompt(prompt))
if err != nil {
return nil, fmt.Errorf("生成菜谱失败: %w", err)
}
return recipe, nil
})
// 3. 立即测试:生成牛油果素食菜谱
recipe, err := recipeFlow.Run(ctx, &RecipeInput{
Ingredient: "牛油果",
DietaryRestrictions: "素食",
})
if err != nil {
log.Fatal(err)
}
// 4. 打印结果(自动是结构化 JSON)
jsonData, _ := json.MarshalIndent(recipe, "", " ")
fmt.Println("✨ 生成的菜谱:")
fmt.Println(string(jsonData))
// 5. 启动 HTTP 服务(可选:供前端调用)
mux := http.NewServeMux()
mux.HandleFunc("POST /generate", genkit.Handler(recipeFlow))
log.Println("🚀 服务启动: http://localhost:3400/generate")
log.Fatal(server.Start(ctx, "127.0.0.1:3400", mux))
}
三、运行你的 AI 应用
方式 1:直接运行(快速测试)
go run .
输出示例:
✨ 生成的菜谱:
{
"title": "香煎牛油果配藜麦沙拉",
"description": "一道清爽健康的素食主菜",
"ingredients": [
"成熟牛油果 2个",
"藜麦 100g",
"樱桃番茄 10颗",
"柠檬汁 1汤匙"
],
"instructions": [
"藜麦煮熟放凉",
"牛油果切片轻煎",
"混合所有食材",
"淋上柠檬汁调味"
]
}
方式 2:通过 HTTP API 调用
保持应用运行,在新终端执行:
curl -X POST http://localhost:3400/generate \
-H "Content-Type: application/json" \
-d '{"data": {"ingredient": "番茄", "dietaryRestrictions": "纯素"}}'
四、核心概念速览
| 概念 | 说明 | 类比 |
|---|---|---|
| Flow | AI 工作流,封装输入→处理→输出的完整逻辑 | 类似 HTTP Handler |
| Plugin | 模型提供商插件(Google AI/OpenAI 等) | 类似数据库驱动 |
| GenerateData | 生成结构化数据(自动按 Go struct 格式返回) | 类似 JSON 解码 |
| Developer UI | 本地可视化调试工具 | 类似 Postman + Chrome DevTools |
五、常见问题
Q1: 需要付费吗?
Gemini API 有免费额度(每月数万 tokens),个人学习完全够用 [[1]]。生产环境按量计费,价格透明。
Q2: 只能用 Google 模型吗?
支持多提供商:
// Google AI
genkit.WithPlugins(&googlegenai.GoogleAI{
})
// OpenAI(需安装 openai 插件)
genkit.WithPlugins(&openai.OpenAI{
})
Q3: 如何处理错误?
Genkit 返回标准 Go error,可直接用 if err != nil 处理:
result, err := flow.Run(ctx, input)
if err != nil {
// 处理网络错误/模型错误/超时等
log.Printf("AI 调用失败: %v", err)
}