\n\n\n\n Mein Kopfschmerz im Zusammenhang mit der Erweiterung meines agentischen Systems: Eine eingehende Analyse - AgntUp \n

Mein Kopfschmerz im Zusammenhang mit der Erweiterung meines agentischen Systems: Eine eingehende Analyse

📖 11 min read2,093 wordsUpdated Mar 29, 2026

Hallo zusammen, Maya hier, zurück auf agntup.com! Heute möchte ich über etwas sprechen, das mich beschäftigt und wahrscheinlich auch viele von euch, besonders wenn ihr mit agentischen Systemen arbeitet: die mentale Überlastung beim Skalieren. Wir sind alle begeistert vom Potenzial der Agenten, aber wenn euer Proof of Concept anfängt zu laufen und eure Stakeholder mehr wollen, dann beginnt die eigentliche Herausforderung. Oder, je nach eurem Koffeinkonsum, die richtige Migräne.

Ich erinnere mich an eine Zeit vor etwa anderthalb Jahren, als wir diesen kleinen brillanten Agenten hatten, der an der internen Ticketweiterleitung arbeitete. Es war eine einfache Flask-Anwendung mit einigen LangChain-Komponenten, die fröhlich auf einer einzigen EC2-Instanz lief. Wir nannten ihn ‘Ticket Tamer.’ Er hat uns so viel Zeit gespart, dass jeder davon profitieren wollte. Plötzlich wollten sie nicht nur die internen IT-Tickets weiterleiten, sondern auch, dass er die E-Mails des Kundenservice vorselektiert, dann die Verkaufsleads analysiert und schließlich sogar erste Antworten für beide verfasst. Meine Chefin, Gott hab sie selig, kam mit diesem so vertrauten Blick in den Augen zu mir und sagte: „Maya, das ist unglaublich! Wie lange würde es dauern, um… nun ja, alles zu bewältigen?“

Mein Herz sank ein wenig. „Alles“ bedeutete eine Größenordnung mehr an gleichzeitigen Anfragen, verschiedene LLM-Modelle für unterschiedliche Aufgaben, variierende Latenzen und ein komplexes Zustandsmanagement, das unsere ursprüngliche Einzelinstanz-Installation einfach nicht bewältigen konnte. Wir fügten nicht einfach mehr Agenten hinzu; wir versuchten, unsere bestehende Agentenarchitektur unter Druck *atmen* zu lassen. Und das, meine Freunde, ist das Herzstück der Herausforderung beim Skalieren agentischer Systeme. Es geht nicht nur darum, mehr Server auf das Problem zu werfen; es geht darum, neu zu denken, wie eure Agenten interagieren, den Zustand verwalten und mit der inhärenten Unvorhersehbarkeit der LLM-Antworten umgehen.

Über „Just Add More VMs“ hinaus: Die Herausforderung des agentischen Skalierens

Wenn wir über das Skalieren traditioneller Mikrodienste sprechen, ist es oft ein relativ einfacher Prozess: Lastenausgleicher, Auto-Scaling-Gruppen, zustandslose Dienste. Bei Agenten ist das eine andere Geschichte. Warum?

  • Zustandsmanagement ist entscheidend (und problematisch): Agenten behalten oft einen Gesprächsverlauf, Nutzungsprotokolle von Tools oder komplexe interne Zustände. Deren Replikation oder Teilung zwischen Instanzen ist nicht trivial.
  • Variabilität der LLM: Die Latenz und der Tokenverbrauch sind nicht immer vorhersehbar. Ein einfacher Prompt kann in 500 ms zurückkommen, ein komplexer kann 5 Sekunden dauern. Das erschwert die Ressourcenplanung.
  • Toolaufrufe: Agenten interagieren mit externen APIs, Datenbanken und anderen Systemen. Diese Tools haben ihre eigenen Skalierungsgrenzen und potenzielle Engpässe.
  • Komplexität der Orchestrierung: Wenn ihr mehrere Agenten habt, die zusammenarbeiten, fügt das Verwalten ihrer Kommunikation, ihrer Übergaben und potenzieller Blockaden eine zusätzliche Komplexitätsebene hinzu.
  • Finanzielle Implikationen: API-Aufrufe von LLM sind nicht kostenlos. Skalierung bedeutet oft mehr API-Aufrufe, was zu höheren Ausgaben führt. Die Optimierung der Token-Nutzung wird entscheidend.

Also, was haben wir mit Ticket Tamer gemacht? Wir haben viele harte Lektionen gelernt. Hier sind einige Dinge, die ich bei der Planung der Skalierung eurer Agentenbereitstellungen als wirklich hilfreich empfunden habe.

Strategien zur Skalierung eurer Agenten

1. Entkoppeln und Spezialisieren eurer Agenten

Das war unser erster großer „Aha!“-Moment. Unser ursprünglicher Ticket Tamer war ein Monolith. Er kümmerte sich um das Parsen, die Klassifizierung, Datenbankabfragen und die Generierung von Antworten. Als wir anfingen, mehr Anwendungsfälle hinzuzufügen, wurde es ein unglaubliches Durcheinander. Die Lösung war, ihn in kleinere, spezialisierte Agenten zu zerlegen.

Anstatt eines massiven Agenten hatten wir:

  • Eingabeparser-Agent: Verantwortlich nur für das Erfassen von Rohdaten (E-Mail, Chat usw.), deren Bereinigung und das Extrahieren von Schlüsseldaten.
  • Router-Agent: Ein leichter Agent, der die analysierte Eingabe übernimmt und entscheidet, welcher spezialisierte „Arbeits“-Agent sich darum kümmern soll (z.B. IT-Support-Agent, Verkaufsleads-Agent, Kundenservice-Agent).
  • Arbeitsagenten: Das sind die spezialisierten Agenten, jeder optimiert für ein bestimmtes Gebiet, mit ihrem eigenen Set an Tools und potenziell unterschiedlichen LLM.
  • Ausgabe-Generator-Agent: Nimmt die Ausgabe des Arbeitsagenten und formatiert sie angemessen für den Endbenutzer oder das System.

Diese Architektur ermöglichte es uns, verschiedene Komponenten unabhängig zu skalieren. Wenn die Verkaufsleads zunahmen, konnten wir mehr Verkaufsleads-Agenten bereitstellen, ohne den IT-Support zu beeinträchtigen. Das erleichterte auch das Debuggen, da jeder Agent eine klare und einzigartige Verantwortung hatte.

2. Intelligentes Zustandsmanagement: Auslagern und Persistieren

Unser ursprünglicher Ticket Tamer behielt seinen gesamten Gesprächsverlauf im Speicher. Super für eine einzige Instanz, schrecklich für die Skalierung. Wenn ihr mehrere Instanzen habt, kann eine eingehende Anfrage jede von ihnen treffen, und wenn der Zustand nicht geteilt wird, wird euer Agent amnesisch.

Wir haben den gesamten Gesprächszustand und das interne Gedächtnis der Agenten in einen externen und persistenten Speicher verschoben. Redis war unsere Waffe der Wahl wegen seiner Geschwindigkeit und Fähigkeit, Schlüssel-Wert-Paare zu verwalten, perfekt für die Sitzungs-IDs, die mit den Gesprächsverläufen verbunden sind. Für das langfristige Gedächtnis oder komplexere strukturierte Daten haben wir eine PostgreSQL-Datenbank verwendet.

Hier ist ein vereinfachtes Beispiel, wie ihr den Gesprächsverlauf mit Redis verwalten könntet:


import redis
import json

class AgentStateManager:
 def __init__(self, host='localhost', port=6379, db=0):
 self.r = redis.Redis(host=host, port=port, db=db)

 def get_conversation_history(self, session_id: str):
 history_json = self.r.get(f"agent:session:{session_id}:history")
 if history_json:
 return json.loads(history_json)
 return []

 def add_message_to_history(self, session_id: str, role: str, content: str):
 history = self.get_conversation_history(session_id)
 history.append({"role": role, "content": content})
 self.r.set(f"agent:session:{session_id}:history", json.dumps(history))

 def clear_conversation_history(self, session_id: str):
 self.r.delete(f"agent:session:{session_id}:history")

# Beispiel für die Verwendung
manager = AgentStateManager()
session_id = "user_abc_123"

manager.add_message_to_history(session_id, "user", "Ich brauche Hilfe mit meinem Laptop.")
manager.add_message_to_history(session_id, "agent", "Was ist das Problem?")

history = manager.get_conversation_history(session_id)
print(history)

Dieses einfache Modell ermöglicht es jeder Instanz eures Agenten, das Gespräch genau dort fortzusetzen, wo es aufgehört hat, wodurch eure Agenten auf Anwendungsebene wirklich zustandslos werden, was für die horizontale Skalierung entscheidend ist.

3. Asynchrone Verarbeitung und Warteschlangen

Einige Aufgaben von Agenten sind intrinsisch langsam. Einen LLM aufzurufen, eine komplexe Datenbankabfrage durchzuführen oder eine externe API aufzurufen, kann Zeit in Anspruch nehmen. Wenn euer Agent diese Operationen synchron abwartet, blockiert das Ressourcen und limitiert den Durchsatz.

Wir haben Nachrichtenwarteschlangen (genauer gesagt, RabbitMQ) für Aufgaben eingeführt, die keine sofortige synchrone Antwort benötigten. Zum Beispiel musste der Ausgabe-Generator-Agent nicht sofort auf den Router-Agenten antworten. Der Router-Agent konnte einfach eine Nachricht in eine Warteschlange legen, und der Ausgabe-Generator-Agent konnte sie abrufen, wenn er bereit war. Das entkoppelte die Verarbeitung und ermöglichte ein größeres Parallelisieren.

Betrachten wir ein Szenario, in dem euer Agent eine lange E-Mail basierend auf einer komplexen Anfrage verfassen muss. Anstatt den Benutzer warten zu lassen, kann euer Hauptagent die Anfrage erkennen, die Schreibaufgabe in eine Warteschlange legen, und ein separater „Schreib“-Agent kann sie im Hintergrund übernehmen und bearbeiten. Sobald er fertig ist, kann er den Benutzer über einen anderen Kanal benachrichtigen oder einen Status in der Datenbank aktualisieren.

Das hilft auch bei den Wiederholungsmechanismen. Wenn ein LLM-Aufruf aufgrund eines vorübergehenden Fehlers fehlschlägt, kann die Aufgabe wieder in die Warteschlange gelegt und ohne Beeinträchtigung der Benutzererfahrung im Frontend erneut versucht werden.

4. Den Cache (intelligent) nutzen

LLM-Anfragen sind kostspielig und können langsam sein. Wenn Ihre Agenten häufig die gleichen oder sehr ähnliche Fragen stellen oder die gleichen Informationen aus Tools abrufen, ist der Cache Ihr Freund. Wir haben mehrere Cache-Schichten implementiert:

  • Cache für LLM-Antworten: Für häufige Anfragen oder vorhersehbare Ergebnisse kann das Caching von LLM-Antworten die Latenz und die API-Kosten erheblich reduzieren. Achten Sie auf Veralterung und Kontext – dies funktioniert am besten für wirklich statische Informationen oder solche, die sich langsam ändern.
  • Cache für Tool-Ergebnisse: Wenn Ihre Agenten häufig auf eine externe Wissensdatenbank oder API zugreifen, cachen Sie die Ergebnisse.
  • Cache für Embeddings: Die Generierung von Embeddings kann ebenfalls lange dauern und kostspielig sein. Cachen Sie die Embeddings für häufig verwendete Dokumente oder Anfragen.

Wir haben erneut Redis für ein einfaches Schlüssel-Wert-Caching von LLM-Antworten basierend auf gehashten Prompts verwendet. Für die Ausgaben von Tools haben wir oft eine dedizierte Cache-Schicht oder sogar einen lokalen In-Memory-Cache für Daten mit sehr kurzer Lebensdauer verwendet.

5. Beobachtbarkeit und Überwachung: Ihre Engpässe kennen

Sie können nicht optimieren, was Sie nicht messen können. Während wir Ticket Tamer weiterentwickelten, wurde das Verständnis der Leistung entscheidend. Wir haben alles instrumentiert:

  • LLM-Latenz: Wie lange dauert jeder LLM-Aufruf? Welche Modelle sind am langsamsten?
  • Token-Nutzung: Wie viele Eingabe-/Ausgabetoken pro Interaktion? Wo geben wir am meisten aus?
  • Ausführungszeit der Tools: Welche externen Tools bremsen uns?
  • Ausführung der Agentenschritte: Wie lange dauert jeder Schritt im Denkprozess eines Agenten?
  • Warteschlangen-Tiefen: Stauen sich unsere Warteschlangen?

Wir haben Prometheus für die Metrik-Sammlung und Grafana für die Dashboards verwendet. Ohne dies wären wir im Dunkeln gewesen und hätten geraten, wo die Probleme lagen. Zum Beispiel haben wir schnell erkannt, dass ein bestimmtes Datenbank-Suchtool erhebliche Engpässe verursachte, was uns dazu brachte, diese Anfrage zu optimieren und einen Cache speziell für dessen Ergebnisse hinzuzufügen.

6. Durchdachte Ressourcenallokation und Auto-Scaling

Sobald Sie entkoppelt, den Zustand verwaltet und Warteschlangen eingerichtet haben, können Sie beginnen, über intelligentes Auto-Scaling nachzudenken. Cloud-Anbieter erleichtern dies, aber für die Agenten müssen Sie mehr als nur die CPU- oder Speicherauslastung berücksichtigen.

  • Länge der Warteschlange: Wenn Ihre Nachrichtenwarteschlange für einen bestimmten Agententyp zu wachsen beginnt, ist das ein starkes Signal, mehr Instanzen dieses Agenten zu betreiben.
  • LLM-Anrufrate: Wenn Sie die Ratenlimits Ihres LLM-Anbieters erreichen, müssen Sie möglicherweise erweitern oder wahrscheinlicher Ihre Caching- und Prompt-Optimierungsstrategien überdenken.
  • Latenzziele: Überwachen Sie die End-to-End-Latenz. Wenn sie zu steigen beginnt, ist es Zeit, sich anzupassen.

Hier glänzen spezialisierte Agenten wirklich. Sie können unterschiedliche Auto-Scaling-Regeln für Ihren Router-Agenten (der schnell und reaktionsschnell sein muss) im Vergleich zu Ihrem Schreib-Agenten (der eine höhere Latenz tolerieren kann und möglicherweise nur während der Stoßzeiten von E-Mails angepasst werden muss) haben.

Wichtige Punkte für Ihre Agenten-Skalierungsreise

Agenten skalierbar zu machen, ist keine Allheilmittel-Lösung; es ist ein delikater Balanceakt zwischen Architektur, Infrastruktur und einem tiefen Verständnis des Verhaltens Ihres Agenten. Basierend auf meinen Erfahrungen mit Ticket Tamer und anderen Projekten sind hier meine wichtigsten Erkenntnisse:

  1. Beginnen Sie einfach, aber planen Sie die Komplexität: Entwerfen Sie Ihren anfänglichen Agenten mit Blick auf Skalierbarkeit, auch wenn Sie nicht alles am ersten Tag implementieren. Denken Sie darüber nach, wie Sie den Zustand von Anfang an extern verwalten werden.
  2. Entkoppeln, entkoppeln, entkoppeln: Teilen Sie Ihren monolithischen Agenten in kleinere, spezialisierte Agenten auf. Das könnte die wirkungsvollste Veränderung sein, die Sie für die Skalierbarkeit und Wartbarkeit vornehmen können.
  3. Alle Zustände extern speichern: Bewahren Sie den Verlauf von Gesprächen oder kritisches Gedächtnis des Agenten nicht im Prozess auf. Verwenden Sie Redis, eine Datenbank oder einen dedizierten Speicherdienst.
  4. Asynchronität mit Warteschlangen annehmen: Verwenden Sie Warteschlangen für nicht-echtzeitliche Aufgaben und um die Komponenten des Agenten zu entkoppeln. Das verbessert den Durchsatz und die Resilienz.
  5. Setzen Sie auf Cache (aber intelligent): Identifizieren Sie Gelegenheiten, um LLM-Antworten, Tool-Ergebnisse und Embeddings zu cachen, um Kosten und Latenz zu reduzieren.
  6. Instrumentieren Sie alles: Richten Sie eine solide Überwachung für die Nutzung von LLM, Latenz, Anzahl der Tokens und Warteschlangentiefen ein. Sie benötigen Daten, um fundierte Entscheidungen über das Scaling zu treffen.
  7. Denken Sie über CPU/Speicher für Auto-Scaling hinaus: Verwenden Sie Metriken wie die Länge der Warteschlange, die LLM-Anrufraten und die End-to-End-Latenz, um Ihre Scaling-Entscheidungen für die Agentensysteme zu steuern.

Die Welt der Agentensysteme entwickelt sich schnell, und unser Ansatz für deren Bereitstellung und Skalierung muss sich ebenfalls weiterentwickeln. Es ist ein schwieriger, aber unglaublich lohnender Bereich. Die Lektionen, die wir aus unseren Schwierigkeiten mit dem anfänglichen Erfolg von Ticket Tamer gezogen haben, sind grundlegend für unseren Ansatz bei jedem neuen Agenten-Deployment geworden. Also, legen Sie los, bauen Sie Ihre Agenten, und wenn sie unvermeidlich sehr beliebt werden, sind Sie bereit, sie zum Abheben zu bringen!

Bis zum nächsten Mal, viel Erfolg beim Entwickeln von Agenten!

🕒 Published:

✍️
Written by Jake Chen

AI technology writer and researcher.

Learn more →
Browse Topics: Best Practices | CI/CD | Cloud | Deployment | Migration
Scroll to Top