166 lines
5.5 KiB
YAML
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 |