Tool
Zustandslos, Anfrage-Antwort. Die Capability erhält eine Anfrage, erledigt etwas und gibt ein Ergebnis zurück. Die meisten Capabilities sind Tools, etwa API-Lookups, Berechnungen oder Datenumwandlungen.
Capabilities machen Selu-Agenten über reine Konversation hinaus nützlich. Eine Capability ist ein kleiner, eigenständiger Service, den ein Agent aufrufen kann, um mit der Außenwelt zu interagieren, etwa Wetterdaten abfragen, E-Mails versenden, Datenbanken befragen oder Smart-Home-Geräte steuern.
InvokeRequest an den Container der Capability.InvokeResponse zurück.Das alles passiert in Millisekunden. Für den Nutzer fühlt es sich wie ein nahtloses Gespräch an. Er muss nicht wissen, dass gerade ein Docker-Container in seinem Auftrag eine API aufgerufen hat.
Selu unterscheidet Capabilities anhand ihres Verhaltens in zwei Klassen:
Tool
Zustandslos, Anfrage-Antwort. Die Capability erhält eine Anfrage, erledigt etwas und gibt ein Ergebnis zurück. Die meisten Capabilities sind Tools, etwa API-Lookups, Berechnungen oder Datenumwandlungen.
Environment
Zustandsbehaftet, langlebig. Die Capability behält innerhalb einer Session Zustand zwischen mehreren Aufrufen. Beispiele sind eine Shell-Session, eine Browser-Instanz oder ein Datenbankverbindungspool. Environment-Capabilities bekommen zusätzlich zu invoke auch Lifecycle-Hooks wie start und stop.
Die Klasse wird in manifest.yaml festgelegt:
class: tool # or "environment"Jede Capability lebt in ihrem eigenen Verzeichnis und enthält:
| Datei | Erforderlich | Zweck |
|---|---|---|
manifest.yaml | Ja | Metadaten, Klasse, Parameter, Ressourcenlimits |
prompt.md | Nein | Anweisungen, die an den System Prompt des Agenten angehängt werden |
Dockerfile | Ja | Baut das Container-Image |
| Quellcode | Ja | Implementierung des gRPC-Servers in einer beliebigen Sprache |
Die gRPC-Schnittstelle ist in capability.proto definiert, mit einem zentralen Service und einer Invoke-RPC. Die vollständige Spezifikation findest du unter gRPC Interface.
Weil Capabilities über gRPC kommunizieren, kannst du sie in jeder Sprache mit gRPC-Unterstützung schreiben:
Selu ist egal, was im Container intern läuft. Wichtig ist nur, dass er auf Port 50051 das Interface aus capability.proto spricht.
capability.proto