developing-genkit-go

Développez des applications propulsées par l'IA avec Genkit en Go. À utiliser lorsque l'utilisateur souhaite créer des fonctionnalités IA, des agents, des flows ou des tools en Go avec Genkit, ou lorsqu'il travaille sur du code Genkit Go impliquant de la génération, des prompts, du streaming, du tool calling ou des fournisseurs de modèles.

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

Genkit Go

Genkit Go est un SDK IA pour Go qui fournit la génération, la sortie structurée, le streaming, l'appel d'outils, les prompts et les flows avec une interface unifiée entre les fournisseurs de modèles.

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

Fonctionnalités principales

Chargez la référence appropriée selon vos besoins :

Fonctionnalité Référence Quand charger
Initialisation references/getting-started.md Configuration de genkit.Init, plugins, le pattern *Genkit
Génération references/generation.md Generate, GenerateText, GenerateData, streaming, formats de sortie
Prompts references/prompts.md DefinePrompt, DefineDataPrompt, fichiers .prompt, schémas
Outils references/tools.md DefineTool, interruptions d'outils, RestartWith/RespondWith
Middleware references/middleware.md ai.Middleware, ai.WithUse, Hooks (Generate/Model/Tool), intégrés (Retry, Fallback, ToolApproval, Filesystem, Skills)
Flows & HTTP references/flows-and-http.md DefineFlow, DefineStreamingFlow, genkit.Handler, serveur HTTP
Fournisseurs de modèles references/providers.md Configuration Google AI, Vertex AI, Anthropic, compatible OpenAI, Ollama

CLI Genkit

Vérifier l'installation : genkit --version

Installation :

curl -sL cli.genkit.dev | bash

Commandes principales :

# Démarrer l'application avec Developer UI (tracing, test de flows) sur http://localhost:4000
genkit start -- go run .
genkit start -o -- go run .   # ouvre aussi le navigateur

# Exécuter un flow directement depuis la CLI
genkit flow:run myFlow '{"data": "input"}'
genkit flow:run myFlow '{"data": "input"}' --stream   # avec streaming
genkit flow:run myFlow '{"data": "input"}' --wait      # attendre l'achèvement

# Rechercher dans la documentation Genkit
genkit docs:search "streaming" go
genkit docs:list go
genkit docs:read go/flows.md

Consultez references/getting-started.md pour les détails complets de la CLI et de Developer UI.

Recommandations clés

  • Passez g explicitement. L'instance *Genkit retournée par genkit.Init est le registre central. Passez-la à toutes les fonctions Genkit plutôt que de la stocker en global. C'est un pattern fondamental dans le SDK.
  • Enveloppez la logique IA dans des flows. Les flows vous donnent le tracing, l'observabilité, le déploiement HTTP via genkit.Handler, et la capacité de tester depuis Developer UI et la CLI. Tout appel de génération méritant d'être conservé doit vivre dans un flow.
  • Utilisez les struct tags jsonschema:"description=..." sur les types de sortie. Le modèle utilise ces descriptions pour comprendre ce que chaque champ doit contenir. Sans elles, la qualité de la sortie structurée chute significativement.
  • Écrivez de bonnes descriptions d'outils. Le modèle décide quels outils appeler en fonction de leur chaîne de description. Des descriptions vagues mènent à des appels d'outils manqués ou incorrects.
  • Utilisez les fichiers .prompt pour les prompts complexes. Ils séparent le contenu du prompt du code Go, supportent le templating Handlebars, et peuvent être itérés sans recompilation. Les prompts définis dans le code sont mieux pour les cas simples à une ligne.
  • Privilégiez le middleware intégré avant d'en écrire un. Retry, Fallback, ToolApproval, Filesystem et Skills couvrent les besoins transversaux courants et se composent les uns avec les autres via ai.WithUse. Consultez references/middleware.md. Quand vous écrivez du middleware personnalisé, allouez l'état par appel dans les fermetures capturées par New, et protégez tout ce que WrapTool mute car les outils peuvent s'exécuter concurremment.
  • Consultez les derniers IDs de modèles. Les noms de modèles changent fréquemment. Consultez la documentation du fournisseur pour les IDs de modèles actuels plutôt que de vous fier à des noms codés en dur. Consultez references/providers.md.

Skills similaires