Zum Inhalt springen

Was sind Capabilities?

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.

  1. Das LLM entscheidet, dass es ein Tool verwenden muss, basierend auf System Prompt und Gespräch.
  2. Der Orchestrator empfängt den Tool-Call und sucht die passende Capability.
  3. Der Orchestrator sendet eine gRPC-InvokeRequest an den Container der Capability.
  4. Die Capability führt die Aktion aus und gibt eine InvokeResponse zurück.
  5. Der Orchestrator reicht das Ergebnis an das LLM zurück, damit das Gespräch weitergeführt werden kann.

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:

DateiErforderlichZweck
manifest.yamlJaMetadaten, Klasse, Parameter, Ressourcenlimits
prompt.mdNeinAnweisungen, die an den System Prompt des Agenten angehängt werden
DockerfileJaBaut das Container-Image
QuellcodeJaImplementierung 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:

  • Python: Sehr gut für ML, Datenverarbeitung und API-Integrationen
  • Go: Schneller Start, geringer Speicherbedarf
  • Rust: Maximale Performance bei kleinem Container-Footprint
  • TypeScript/Node: Vertraut für Webentwickler

Selu ist egal, was im Container intern läuft. Wichtig ist nur, dass er auf Port 50051 das Interface aus capability.proto spricht.