mcpField
D
developing-genkit-go

developing-genkit-go

github.com/firebase开发49149.5k 次安装1 天前更新
代码仓库

关于 developing-genkit-go

面向 Go 开发者的 Genkit SDK 开发指南,涵盖生成、结构化输出、流式处理、工具调用、提示词和工作流。内容还介绍 CLI、Developer UI、提供方配置及常见开发模式。

主要功能

  1. 01统一接口调用多种模型提供方
  2. 02文本、结构化数据与流式生成
  3. 03定义提示词、工具和工作流
  4. 04使用中间件处理重试与审批
  5. 05通过 CLI 和 Developer UI 测试流程

适用场景

  1. 01在 Go 应用中构建生成式 AI 功能
  2. 02实现结构化输出和流式响应
  3. 03为模型调用添加工具与中间件
  4. 04通过工作流测试和提供 HTTP 服务

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/firebase/agent-skills --skill developing-genkit-go

安装后在 Claude Code 中输入/developing-genkit-go确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
middleware.md
getting-started.md
flows-and-http.md
prompts.md
generation.md
providers.md
tools.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.mdGenerate、GenerateText、GenerateData、流式处理、输出格式
提示词references/prompts.mdDefinePrompt、DefineDataPrompt、.prompt 文件、架构
工具references/tools.mdDefineTool、工具中断、RestartWith/RespondWith
中间件references/middleware.mdai.Middleware、ai.WithUse、Hooks(Generate/Model/Tool)、内置中间件(Retry、Fallback、ToolApproval、Filesystem、Skills)
工作流和 HTTPreferences/flows-and-http.mdDefineFlow、DefineStreamingFlow、genkit.Handler、HTTP 服务
模型提供商references/providers.mdGoogle 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