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
gexplicitement. L'instance*Genkitretournée pargenkit.Initest 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
.promptpour 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,FilesystemetSkillscouvrent les besoins transversaux courants et se composent les uns avec les autres viaai.WithUse. Consultez references/middleware.md. Quand vous écrivez du middleware personnalisé, allouez l'état par appel dans les fermetures capturées parNew, et protégez tout ce queWrapToolmute 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.