---
id: daily-developing-genkit-go
name: "developing-genkit-go"
url: https://skills.yangsir.net/skill/daily-developing-genkit-go
author: firebase
domain: ai-agent-core-development
tags: ["ai-engineering", "llm-integration", "go", "automation", "ai-agents"]
install_count: 44500
rating: 4.70 (4 reviews)
github: https://github.com/firebase/agent-skills
---

# developing-genkit-go

> Go语言AI SDK，提供统一的生成、结构化输出、流式传输、工具调用和流程编排接口

**Stats**: 44,500 installs · 4.7/5 (4 reviews)

## Before / After 对比

### AI集成开发效率

**Before**:

手动调用不同AI提供商的API，处理各种格式的响应和错误，适配流式传输和工具调用，开发周期长

**After**:

使用统一SDK接口，自动处理多模型兼容性，内置流式传输和工具调用支持，开发效率大幅提升

| Metric | Before | After | Change |
|---|---|---|---|
| 集成时间 | 5天 | 1天 | -80% |

## Readme

# developing-genkit-go

# Genkit Go

Genkit Go is an AI SDK for Go that provides generation, structured output, streaming, tool calling, prompts, and flows with a unified interface across model providers.

## 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))
}

```

## Core Features

Load the appropriate reference based on what you need:

Feature
Reference
When to load

Initialization
[references/getting-started.md](https://github.com/firebase/agent-skills/blob/HEAD/skills/developing-genkit-go/references/getting-started.md)
Setting up `genkit.Init`, plugins, the `*Genkit` instance pattern

Generation
[references/generation.md](https://github.com/firebase/agent-skills/blob/HEAD/skills/developing-genkit-go/references/generation.md)
`Generate`, `GenerateText`, `GenerateData`, streaming, output formats

Prompts
[references/prompts.md](https://github.com/firebase/agent-skills/blob/HEAD/skills/developing-genkit-go/references/prompts.md)
`DefinePrompt`, `DefineDataPrompt`, `.prompt` files, schemas

Tools
[references/tools.md](https://github.com/firebase/agent-skills/blob/HEAD/skills/developing-genkit-go/references/tools.md)
`DefineTool`, tool interrupts, `RestartWith`/`RespondWith`

Flows & HTTP
[references/flows-and-http.md](https://github.com/firebase/agent-skills/blob/HEAD/skills/developing-genkit-go/references/flows-and-http.md)
`DefineFlow`, `DefineStreamingFlow`, `genkit.Handler`, HTTP serving

Model Providers
[references/providers.md](https://github.com/firebase/agent-skills/blob/HEAD/skills/developing-genkit-go/references/providers.md)
Google AI, Vertex AI, Anthropic, OpenAI-compatible, Ollama setup

## Genkit CLI

Check if installed: `genkit --version`

**Installation:**

```
curl -sL cli.genkit.dev | bash

```

**Key commands:**

```
# 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

```

See [references/getting-started.md](https://github.com/firebase/agent-skills/blob/HEAD/skills/developing-genkit-go/references/getting-started.md) for full CLI and Developer UI details.

## Key Guidance

- **Pass `g` explicitly.** The `*Genkit` instance returned by `genkit.Init` is the central registry. Pass it to all Genkit functions rather than storing it as a global. This is a core pattern throughout the SDK.

- **Wrap AI logic in flows.** Flows give you tracing, observability, HTTP deployment via `genkit.Handler`, and the ability to test from the Developer UI and CLI. Any generation call worth keeping should live in a flow.

- **Use `jsonschema:"description=..."` struct tags on output types.** The model uses these descriptions to understand what each field should contain. Without them, structured output quality drops significantly.

- **Write good tool descriptions.** The model decides which tools to call based on their description string. Vague descriptions lead to missed or incorrect tool calls.

- **Use `.prompt` files for complex prompts.** They separate prompt content from Go code, support Handlebars templating, and can be iterated on without recompilation. Code-defined prompts are better for simple, single-line cases.

- **Look up the latest model IDs.** Model names change frequently. Check provider documentation for current model IDs rather than relying on hardcoded names. See [references/providers.md](https://github.com/firebase/agent-skills/blob/HEAD/skills/developing-genkit-go/references/providers.md).

Weekly Installs6.2KRepository[firebase/agent-skills](https://github.com/firebase/agent-skills)GitHub Stars218First Seen6 days agoSecurity Audits[Gen Agent Trust HubPass](/firebase/agent-skills/developing-genkit-go/security/agent-trust-hub)[SocketPass](/firebase/agent-skills/developing-genkit-go/security/socket)[SnykPass](/firebase/agent-skills/developing-genkit-go/security/snyk)Installed ongemini-cli6.2Kantigravity6.1Kcursor6.1Kopencode6.1Kcodex6.1Kgithub-copilot6.1K

---
*Source: https://skills.yangsir.net/skill/daily-developing-genkit-go*
*Markdown mirror: https://skills.yangsir.net/api/skill/daily-developing-genkit-go/markdown*