# ===================================================================== # ESEMPIO A — Agent dichiarativo nativo (kagent esegue direttamente) # Caso d'uso: flow Langflow/Flowise semplice — un LLM + un paio di tool, # nessuna logica custom complessa. Tradotto 1:1 in prompt + tool MCP. # ===================================================================== apiVersion: kagent.dev/v1alpha2 kind: Agent metadata: name: k8s-troubleshooter namespace: team-alpha spec: description: Agente di troubleshooting Kubernetes type: Declarative declarative: modelConfig: gpt4o-config systemMessage: | Sei un agente di troubleshooting per Kubernetes... a2aConfig: skills: - id: diagnose-pod-issue name: Diagnose Pod Issue description: Investiga problemi su pod/servizi Kubernetes inputModes: ["text"] outputModes: ["text"] tags: ["kubernetes"] tools: - type: McpServer mcpServer: name: kagent-tool-server kind: RemoteMCPServer toolNames: - k8s_get_pods - k8s_describe_pod - k8s_get_logs --- apiVersion: kagent.dev/v1alpha1 kind: ModelConfig metadata: name: gpt4o-config namespace: team-alpha spec: provider: OpenAI model: gpt-4o apiKeySecretRef: name: llm-credentials key: openai-api-key # invocazione Le 4 modalità di invocazione 1. Dashboard kagent (per gli utenti umani, uso interattivo) bash kagent dashboard Apre una UI web dove cerchi k8s-troubleshooter nella lista e chatti direttamente — il modo più immediato per un developer che vuole testare l'agente senza altri strumenti. 2. CLI kagent (per script, pipeline, debug da terminale) bash kagent invoke --agent k8s-troubleshooter -n team-alpha \ --task "Il pod payment-service-7d9f in default sta crashando, investiga" 3. Chiamata diretta via A2A REST (per integrazione da altri sistemi/servizi) Ogni Agent espone un endpoint A2A standard, con un "agent card" che ne descrive le capability: bash kubectl port-forward -n kagent svc/kagent-service 8083:8083 # scopri le capability dell'agente curl localhost:8083/api/a2a/team-alpha/k8s-troubleshooter/.well-known/agent.json # invocalo curl -X POST localhost:8083/api/a2a/team-alpha/k8s-troubleshooter/ \ -H "Content-Type: application/json" \ -d '{"task": "Perché il pod payment-service sta in CrashLoopBackOff?"}' Questa è la via che useresti se, ad esempio, un tuo servizio interno (o un'automazione CI/CD) deve invocare l'agente programmaticamente. 4. Canali chat (Slack/Teams/Discord/Telegram) — via AgentHarness CRD Se vuoi che i developer interroghino l'agente direttamente da Slack invece che aprire la dashboard, kagent ha una CRD dedicata (AgentHarness) che fa da ponte: yaml apiVersion: kagent.dev/v1alpha2 kind: AgentHarness metadata: name: k8s-troubleshooter-slack namespace: kagent spec: backend: hermes modelConfigRef: default-model-config channels: - name: platform type: slack slack: botToken: valueFrom: {type: Secret, name: slack-tokens, key: bot-token} appToken: valueFrom: {type: Secret, name: slack-tokens, key: app-token} Poi in Slack: /mykagent perché il pod X sta crashando? — il bot inoltra la richiesta all'agente via A2A e posta la risposta nel canale. Interessante per un'IDP perché è il canale più naturale per i developer, senza dover imparare dashboard o CLI dedicate. # ===================================================================== # ESEMPIO B — Agent BYO (Bring Your Own), container esportato da # Langflow/Flowise dopo containerizzazione custom. # Caso d'uso: flow complesso con logica di stato/loop che il developer # ha personalizzato oltre quello che il builder low-code esporta, # quindi ha bisogno di pieno controllo del codice. # ===================================================================== apiVersion: kagent.dev/v1alpha1 kind: Agent metadata: name: currency-exchange-agent namespace: team-alpha spec: type: BYO byo: deployment: image: ghcr.io/team-alpha/langflow-currency-agent:latest workingDir: /app env: - name: GOOGLE_API_KEY valueFrom: secretKeyRef: name: llm-credentials key: gemini-api-key port: 8080 # porta su cui l'agente espone l'endpoint A2A # Nota: kagent invoca questo agente via protocollo A2A, trattandolo # come black box — nessuna decomposizione in prompt/tool separati, # perché la logica vive interamente dentro l'immagine. ## Esempio Agent di Orchestrazione apiVersion: kagent.dev/v1alpha2 kind: Agent metadata: name: incident-commander namespace: team-alpha spec: type: Declarative declarative: systemMessage: | Sei il coordinatore per la gestione incidenti. Quando ricevi una segnalazione, decidi quali specialisti coinvolgere: se riguarda pod/servizi K8s, delega al k8s-troubleshooter; se servono i log, delega al log-analyzer. Puoi chiamare entrambi in sequenza se il problema lo richiede. modelConfig: gpt4o-config tools: - type: McpServer mcpServer: name: kagent-tool-server toolNames: ["k8s_get_events"] # Sotto-agenti esposti come "tool" — la scelta di chiamarli # è dell'LLM di incident-commander, non di kagent - type: Agent agent: name: k8s-troubleshooter namespace: team-alpha - type: Agent agent: name: log-analyzer namespace: team-alpha