Files
2026-09-20 19:26:05 +02:00

166 lines
5.5 KiB
YAML

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