关于 developing-genkit-go
面向 Go 开发者的 Genkit SDK 开发指南,涵盖生成、结构化输出、流式处理、工具调用、提示词和工作流。内容还介绍 CLI、Developer UI、提供方配置及常见开发模式。
主要功能
- 01统一接口调用多种模型提供方
- 02文本、结构化数据与流式生成
- 03定义提示词、工具和工作流
- 04使用中间件处理重试与审批
- 05通过 CLI 和 Developer UI 测试流程
适用场景
- 01在 Go 应用中构建生成式 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 模板,并可在无需重新编译的情况下迭代。对于简单的单行场景,使用代码定义的提示词更合适。 - 编写中间件前,先考虑使用内置中间件。
Retry、Fallback、ToolApproval、Filesystem和Skills涵盖了常见的横切需求,并可通过ai.WithUse相互组合。请参阅 references/middleware.md。编写自定义中间件时,应在New捕获的闭包中为每次调用分配状态,并保护WrapTool修改的所有内容,因为工具可能并发运行。 - 查询最新的模型 ID。 模型名称经常变化。请查阅提供商文档以获取当前模型 ID,不要依赖硬编码的名称。请参阅 references/providers.md。
评论
支持 Markdown