Hinzufügen von Middleware

Auf der vorherigen Seite wurde gezeigt, wie fähigkeitenverwendbare Domänenkompetenzen – Anweisungen, Referenzmaterial und Skripts – in eigenständigen Einheiten verpackt werden, die jeder Agent bei Bedarf laden kann. Aber während Sie Agents in der Produktion bereitstellen, entsteht eine neue Kategorie von Problemen: Probleme, die sich unabhängig von der Funktionsweise des Agenten über alle Interaktionen erstrecken.

Sie müssen jede Anforderung und Antwort protokollieren. Sie benötigen Schutzvorrichtungen, die schädliche Inhalte blockieren, bevor das Modell darauf zugreift. Sie müssen Geschwindigkeitsbeschränkungen erzwingen, Ausnahmen ordnungsgemäß erfassen und Telemetrie einfügen , ohne die Kernlogik des Agents zu berühren. Das Kopieren dieser Bedenken in jeden Agenten (oder jedes Werkzeug oder jede Fähigkeit) skaliert nicht und schafft Wartungsalträume.

Middleware löst dies. Mit Middleware können Sie die Ausführungspipeline des Agents mit wiederverwendbaren Verhaltensweisen umschließen, die Anforderungen und Antworten an gut definierten Punkten abfangen, prüfen und ändern. Stellen Sie sich Middleware als eine Reihe konzentrischer Schichten um den Agent vor – jede Ebene erhält die Möglichkeit, auf die Eingabe zu reagieren, bevor sie den Agent erreicht, und auf der Ausgabe, bevor sie den Aufrufer erreicht.

Wann Sie dies verwenden sollten

Fügen Sie Ihrem Agent Middleware hinzu, wenn:

  • Sie benötigen Sicherungsmaßnahmen, um schädliche, thematisch unpassende oder richtlinienverletzende Inhalte vor oder nach der Verarbeitung durch das Modell zu blockieren.
  • Sie möchten die zentralisierte Protokollierung oder Telemetrie für alle Agentinteraktionen verwenden, ohne jeden Agent einzeln zu ändern.
  • Sie müssen Anforderungen oder Antworten ändern , um Eingabeaufforderungen zu erweitern, Ausgaben zu transformieren oder Ergebnisse vollständig zu ersetzen , ohne die Agentlogik zu ändern.
  • Sie möchten Richtlinien wie Ratelimiting, Inhaltsfilterung oder Authentifizierungsprüfungen erzwingen , die für jede Ausführung gelten.
  • Sie müssen Ausnahmen konsistent behandeln – Wiederholungsversuche bei vorübergehenden Fehlern, Zurückgeben von angemessenen Fallback-Antworten oder Fehler für Diagnosen protokollieren.
  • Sie möchten Zustand teilen über die gesamte Pipeline hinweg, z. B. das Nachverfolgen des Anforderungszeitpunkts oder das Sammeln und Aufzeichnen von Metriken, die mehrere Middleware-Komponenten benötigen.

Tipp

Agent Framework enthält integrierte Instrumentierung für Ablaufverfolgung und Metriken. Details finden Sie unter Observability .

Funktionsweise der Middleware-Pipeline

Wenn Sie die Ausführungsmethode Ihres Agents aufrufen, wechselt die Anforderung nicht direkt zum Modell. Stattdessen fließt die Anforderung durch eine Pipeline von Middleware-Ebenen, von denen jede die Anforderung prüfen oder ändern, an die nächste Ebene delegieren und dann die Antwort auf dem Weg zurück überprüfen oder ändern kann.

┌─────────────────────────────────────────────────────────┐
│  Caller: agent.run("What's the weather?")               │
└──────────────┬──────────────────────────────────────────┘
               ▼
┌─────────────────────────────────────────────────────────┐
│  Middleware 1 (Logging)                                  │
│  • Logs the incoming request                            │
│  • Calls next middleware                                │
│  • Logs the outgoing response                           │
└──────────────┬──────────────────────────────────────────┘
               ▼
┌─────────────────────────────────────────────────────────┐
│  Middleware 2 (Guardrails)                               │
│  • Checks input against content policy                  │
│  • If blocked → returns early with rejection message    │
│  • If allowed → calls next middleware                   │
│  • Checks output against content policy                 │
└──────────────┬──────────────────────────────────────────┘
               ▼
┌─────────────────────────────────────────────────────────┐
│  Agent core (model invocation, tool calls, etc.)        │
└─────────────────────────────────────────────────────────┘

Wichtige Punkte:

  1. Jede Middleware entscheidet, ob der Vorgang fortgesetzt werden soll. Die Middleware kann die nächste Ebene in der Kette aufrufen, um normal fortzufahren, oder sie kann die Pipeline durch direktes Zurückgeben einer Antwort kurzschließen, z. B. wenn eine Schutzvorrichtung eine Anforderung blockiert.
  2. Middleware sieht beide Richtungen. Eine Middleware führt Code vor dem Delegieren (zum Überprüfen oder Ändern der Eingabe) und nach dem Zurückkommen der Antwort (zum Überprüfen oder Ändern der Ausgabe) aus. Dies ist das klassische "Onion"-Muster.
  3. Mehrere Middleware-Ketten verketten sich. Wenn Sie mehrere Middleware-Komponenten registrieren, werden sie geschachtelt: Die erste registrierte Middleware ist die äußerste Ebene, und die letzte registrierte Ebene ist die innerste Ebene, die dem Agent am nächsten kommt.

Tipp

Eine detaillierte Ansicht, wie Middleware in die vollständige Agent-Ausführungspipeline passt – einschließlich Kontextanbietern und Chatclientebenen – finden Sie in der Agentpipelinearchitektur.

Was Middleware tun kann

Agent Framework unterstützt Middleware auf drei Ebenen der Pipeline – Agentausführung, Funktionsaufrufe und Chatclient – und bietet Ihnen eine differenzierte Kontrolle darüber, wo Sie die Ausführung abfangen. Zu den gängigen Mustern gehören:

Schema Beispiel Referenz
Leitplanken & Abschaltung Blockieren schädlicher Inhalte, Beschränken der Unterhaltungslänge Beendigung & Leitplanken
Ausnahmenbehandlung Erneutes Versuchen bei vorübergehenden Fehlern, Zurückgeben von Fallback-Antworten Ausnahmebehandlung
Ergebnisüberschreibungen Vertrauliche Daten redigieren, Agentenausgabe anreichern oder ersetzen Ergebnisüberschreibungen
Freigegebener Zustand Übergeben von Anforderungs-IDs oder Zeitangaben zwischen Middleware Gemeinsamer Zustand
Laufzeitkontext Verhalten je nach Sitzung, Benutzer oder Konfiguration pro Ausführung variieren Laufzeitkontext
Bereichsdefinition Middleware auf alle Ausführungen anwenden oder nur auf eine einzelne Ausführung Agent vs Run Scope

Eine vollständige exemplarische Vorgehensweise zum Definieren und Registrieren von Middleware finden Sie unter Definieren von Middleware. Die vollständige Architekturübersicht finden Sie in der Middleware-Übersicht.

Überlegungen

Überlegung Einzelheiten
Trennung von Bedenken Middleware sorgt dafür, dass querschnittliche Logik aus Ihrem Agenten-Code, Ihren Tools und Ihren Systemfähigkeiten herausgehalten wird. Jede Middleware-Komponente hat eine einzige Verantwortung – Protokollierung, Schutzläufe, Fehlerbehandlung – die Sie unabhängig hinzufügen, entfernen oder neu anordnen können.
Reihenfolgenabhängigkeit Middleware bildet eine Kette. Die Reihenfolge, in der Middleware registriert wird, ist wichtig: Eine Protokollierungs-Middleware, die zuerst ausgeführt wird, sieht die rohe Eingabe, während bei der letzten Ausführung die Eingabe bereits von früherer Middleware geändert wird. Planen Sie die Reihenfolge Ihrer Pipeline bewusst.
Debuggingkomplexität Wenn Middleware Eingaben oder Ausgaben ändert, muss das Debuggen die vollständige Pipeline verstehen. Eine Antwort könnte möglicherweise nicht wegen des Agents falsch aussehen, sondern weil eine Middleware sie transformiert hat. Eine gute Protokollierungs-Middleware (frühzeitig in der Kette platziert) hilft bei der Diagnose dieser Fälle.
Leistungsaufwand Jede Middleware-Ebene fügt jeder Anforderung Verarbeitungszeit hinzu. Bei leichten Vorgängen wie der Protokollierung ist dies vernachlässigbar. Bei teuren Vorgängen wie dem Aufrufen einer externen Inhaltsmoderations-API addiert sich die Latenz – insbesondere, wenn mehrere solche Middleware verkettet werden.

Nächste Schritte

Da Ihr Agent nun Über Tools, Fähigkeiten und Middleware verfügt, ist der nächste Schritt Kontextanbieter – Komponenten, die Arbeitsspeicher, Benutzerprofile und dynamische Kenntnisse in das Kontextfenster des Agents vor jeder Ausführung einfügen.

Gehen Sie tiefer: