\n\n\n\n Ich habe die Kaltstarts ohne Server für die Leistung der Agenten optimiert. - AgntMax \n

Ich habe die Kaltstarts ohne Server für die Leistung der Agenten optimiert.

📖 12 min read2,338 wordsUpdated Mar 29, 2026

Okay, Freunde, Jules Martin hier, zurück auf agntmax.com. Und lassen Sie mich Ihnen sagen, dass ich heute etwas Besonderes für Sie habe. Wir sprechen nicht nur darüber, die Dinge besser zu machen; wir sprechen darüber, sie schneller zu machen, ohne ein Vermögen auszugeben. Genauer gesagt, werden wir uns kopfüber in die glorreiche, oft frustrierende, aber letztendlich lohnende Welt der Optimierung der Kaltstartzeiten von serverlosen Funktionen für die Leistung von Agenten stürzen.

Sie wissen, wie das läuft. Sie bauen einen neuen, schicken Agenten, vollständig serverlos, ereignisgesteuert, bereit, die Fragen der Kunden zu beantworten oder Daten wie ein Champion zu verarbeiten. Es ist elegant, es ist effizient, und es sollte super reaktionsschnell sein. Dann, bam. Die erste Anfrage kommt nach einer Inaktivitätsphase, und Ihr Agent bleibt einfach… da. Für das, was wie eine Ewigkeit erscheint. Das ist, meine Freunde, der berüchtigte Kaltstart. Und für einen Agenten, der schnell sein muss, ist das ein Performance-Killer und ein Zerstörer der Kundenerfahrung.

Ich habe das erlebt, mir die Haare gerauft. Erst letzten Monat haben wir einen neuen KI-gestützten Support-Agenten für einen Kunden gestartet. Die Idee war einfach: häufige Fragen abfangen, sofortige Antworten liefern, bei Bedarf eskalieren. Auf dem Papier großartig. In der Praxis? Die ersten Interaktionen waren chaotisch. Die Kunden tippten, drückten die Eingabetaste und warteten dann 3 bis 5 Sekunden, bis der Agent überhaupt ihre Nachricht erkannte. Das mag nicht viel erscheinen, aber in einem Echtzeitgespräch ist das eine Ewigkeit. Es schien, als würde der Agent noch seinen Kaffee zubereiten, bevor er zur Arbeit kommt. Wir haben schnell erkannt, dass wir ein Kaltstartproblem hatten, und das beeinflusste direkt die Wahrnehmung der Intelligenz und Nützlichkeit des Agenten.

Heute werden wir über echte und greifbare Strategien sprechen, um gegen diese Kaltstarts vorzugehen. Wir werden dafür sorgen, dass unsere serverlosen Agenten reagieren, als hätten sie bereits ihren Espresso getrunken. Das ist nicht theoretisch; das ist das, was wir getan haben, um den Agenten unseres Kunden zu verbessern, und das können Sie auch tun.

Die harte Realität: Warum serverlose Funktionen „kalt“ werden

Zunächst eine kurze Erinnerung. Warum treten Kaltstarts überhaupt auf? Wenn Sie eine serverlose Funktion bereitstellen (denken Sie an AWS Lambda, Azure Functions, Google Cloud Functions), betreiben Sie keinen dedizierten Server 24/7. Stattdessen stellt Ihr Cloud-Anbieter Ressourcen für Ihre Funktion nur bereit, wenn sie aufgerufen wird. Wenn Ihre Funktion eine Zeit lang nicht aufgerufen wurde, kann der Container oder die zugrunde liegende Ausführungsumgebung „gestoppt“ oder recycelt werden, um Ressourcen zu sparen. Wenn die nächste Anfrage eintrifft, muss der Cloud-Anbieter einige Dinge tun:

  • Den Code Ihrer Funktion herunterladen.
  • Die Ausführungsumgebung starten (z. B. eine JVM für Java, ein Node.js-Runtime).
  • Ihre Funktion initialisieren, einschließlich aller globalen Variablen oder Abhängigkeiten.

All diese Schritte kosten Zeit, und diese Zeit stellt Ihre Kaltstartlatenz dar. Für einen Agenten, insbesondere einen, der direkt mit einem Menschen interagiert, hat diese Latenz direkte Auswirkungen auf seine Leistung und Nützlichkeit.

Kaltstarts angreifen: Praktische Strategien, die wirklich funktionieren

Als wir das Problem des Support-Agenten unseres Kunden angegangen sind, haben wir dieses Problem systematisch angepackt. Es gibt keine magische Lösung, aber eine Kombination von Techniken kann diese frustrierenden Verzögerungen drastisch reduzieren.

1. Bleiben Sie leicht: Minimieren Sie die Größe Ihres Bereitstellungspakets

Das ist wahrscheinlich der einfachste, aber oft übersehene Rat. Erinnern Sie sich an diesen ersten Schritt bei einem Kaltstart? Den Code Ihrer Funktion herunterladen. Je größer Ihr Codepaket ist, desto länger dauert es, es herunterzuladen und zu initialisieren.

Ich habe Funktionen mit Gigabytes an unnötigen Abhängigkeiten gesehen, weil die Entwickler einfach `npm install` oder `pip install` ausgeführt und alles komprimiert haben. Jedes zusätzliche Byte erhöht diese Kaltstartzeit. Für unseren Agenten hatten wir ursprünglich einen Haufen ungenutzter Bibliotheken, die von einem größeren Framework gezogen wurden. Also haben wir aufgeräumt.

So geht’s:

  • Verwenden Sie die Packungsfunktionen von serverlosen Frameworks: Tools wie das Serverless Framework oder AWS SAM können Ihnen helfen, Abhängigkeiten zu verwalten und unnötige Dateien auszuschließen.
  • Abhängigkeiten ausdünnen: Für Node.js verwenden Sie `npm prune –production`, bevor Sie komprimieren. Für Python stellen Sie sicher, dass Sie nur die Pakete einbeziehen, die explizit von Ihrer Funktion benötigt werden. Tools wie `pipreqs` können helfen, ein minimales `requirements.txt` zu generieren.
  • Setzen Sie diese gemeinsamen Abhängigkeiten in eine Schicht: Wenn Sie mehrere Funktionen haben, die dieselben großen Bibliotheken verwenden (wie eine gemeinsame NLP-Bibliothek für Ihren Agenten), legen Sie sie in eine Lambda-Schicht (AWS) oder eine ähnliche Struktur. Das bedeutet, dass die Schicht einmal heruntergeladen und geteilt wird, anstatt in jedes einzelne Funktionspaket aufgenommen zu werden.

Für unseren Agenten haben wir festgestellt, dass wir die gesamte `transformers`-Bibliothek einbezogen haben, obwohl wir nur einen kleinen Teil ihrer Funktionen benötigten. Wir haben umgestaltet, um eine spezifischere Bibliothek oder ein vortrainiertes Modell von einem externen Endpunkt zu verwenden, was unser Bereitstellungspaket erheblich reduzierte.

2. Speicherzuweisung: Mehr RAM, schnellere Starts (in der Regel)

Das klingt ein bisschen nach einer Abkürzung, aber es ist effektiv. Cloud-Anbieter weisen oft die CPU-Leistung proportional zum Speicher zu, den Sie Ihrer Funktion zuweisen. Das bedeutet, dass mehr RAM für Ihre Funktion oft mehr CPU bedeutet, was ihr hilft, schneller zu starten und ihre anfängliche Logik schneller auszuführen.

Als wir unseren Agenten zuerst bereitgestellt haben, haben wir mit der niedrigstmöglichen Speichereinstellung begonnen, um Kosten zu sparen. Großer Fehler. Der Agent war langsam. Wir haben den Speicher schrittweise erhöht, und jede Erhöhung reduzierte die Kaltstartzeit.

So geht’s:

  • Experimentieren: Es gibt einen Punkt des Gleichgewichts. Maximieren Sie ihn nicht. Beginnen Sie mit einer Basis und erhöhen Sie den Speicher schrittweise (z. B. 128 MB, 256 MB, 512 MB, 1024 MB) und messen Sie die Kaltstartzeit.
  • Überwachen: Behalten Sie die Speichernutzung Ihrer Funktion während der Ausführung im Auge. Sie möchten nicht für Speicher bezahlen, den Sie nicht nutzen, aber Sie möchten Ihrer Funktion auch keine Ressourcen entziehen.

Für unseren Agenten hat der Wechsel von 128 MB auf 512 MB die Kaltstarts um fast 1,5 Sekunden reduziert. Die Kostensteigerung war im Vergleich zum Leistungsgewinn und zur Verbesserung der Kundenerfahrung minimal.

3. Sprachauswahl: Einige Sprachen starten kälter als andere

Das ist ein bisschen umstritten, und manchmal haben Sie keine Wahl, aber es ist eine Realität. Einige Runtimes haben intrinsisch längere Kaltstartzeiten als andere. Java und C# haben oft längere Kaltstartzeiten aufgrund der Startkosten der JVM/CLR. Python und Node.js sind tendenziell schneller. Go und Rust sind oft die schnellsten.

Unser Agent wurde in Python entwickelt, was im Allgemeinen gut für Kaltstarts ist. Wenn Sie jedoch einen neuen Agenten von Grund auf neu erstellen und minimale Latenz entscheidend ist, könnte es interessant sein, eine Sprache wie Go in Betracht zu ziehen. Das könnte eine größere Überarbeitung erfordern als nur das Anpassen von Einstellungen, aber es ist eine grundlegende Optimierung.

4. Initialisierung außerhalb des Handlers: Vorheizen Ihrer Logik

Das ist ein entscheidender Punkt. Jeder Code außerhalb Ihrer Haupt-Handler-Funktion (der Funktion, die bei der Invocation aufgerufen wird) wird während der Initialisierungsphase eines Kaltstarts ausgeführt. Hier sollten Sie kostspielige Operationen platzieren, die nur einmal pro Lebensdauer des Containers ausgeführt werden müssen.

Denken Sie an Datenbankverbindungen, das Laden großer Modelle oder die Konfiguration von SDKs. Wenn Sie dies innerhalb Ihres Handlers tun, wird es bei jeder Invocation ausgeführt, selbst bei den heißen. Verschieben Sie es nach außen, und es wird nur bei einem Kaltstart ausgeführt.

Beispiel (Python):

Schlecht (Initialisierung innerhalb des Handlers):


import boto3
import json

def lambda_handler(event, context):
 # Dieser S3-Client wird bei JEDER Invocation initialisiert
 s3_client = boto3.client('s3') 
 bucket_name = 'my-agent-data'
 object_key = 'config.json'

 response = s3_client.get_object(Bucket=bucket_name, Key=object_key)
 config_data = json.loads(response['Body'].read().decode('utf-8'))

 # ... Logik des Agents, die config_data verwendet ...
 return {
 'statusCode': 200,
 'body': json.dumps('Hallo von Ihrem Agenten!')
 }

Gut (Initialisierung außerhalb des Handlers):


import boto3
import json

# Diese Elemente werden NUR bei einem Kaltstart initialisiert
s3_client = boto3.client('s3') 
bucket_name = 'my-agent-data'
object_key = 'config.json'

# Konfiguration einmal laden
try:
 response = s3_client.get_object(Bucket=bucket_name, Key=object_key)
 agent_config = json.loads(response['Body'].read().decode('utf-8'))
except Exception as e:
 print(f"Fehler beim Laden der Agentenkonfiguration: {e}")
 agent_config = {} # Fallback oder Fehler auslösen

def lambda_handler(event, context):
 # agent_config ist bereits geladen und verfügbar
 # ... Logik des Agents, die agent_config verwendet ...
 return {
 'statusCode': 200,
 'body': json.dumps(f"Der Agent läuft mit der Konfiguration: {agent_config.get('version', 'unbekannt')}")
 }

Für unseren KI-Agenten luden wir ein kleines Modell zur Klassifizierung von Absichten von S3. Das Verschieben dieses Modell-Ladevorgangs außerhalb der Handler-Funktion war ein erheblicher Gewinn. Das bedeutete, dass das Modell sofort nach der Invocation des Handlers einsatzbereit war, anstatt es jedes Mal abrufen und laden zu müssen.

5. Bereitgestellte Konkurrenz / Reservierte Instanzen: Die „Immer heiß“-Option

Dies ist der direkteste Weg, um Kaltstarts zu eliminieren, hat jedoch seinen Preis. Dienste wie die Bereitgestellte Konkurrenz von AWS Lambda oder der Premium-Plan von Azure Functions ermöglichen es Ihnen, eine bestimmte Anzahl von Ausführungsumgebungen vorab zu initialisieren. Diese Instanzen bleiben „heiß“ und sind bereit, Anfragen sofort zu bedienen, wodurch Kaltstarts für diese bereitgestellten Instanzen effektiv eliminiert werden.

Als der Agent unseres Kunden unbedingt Antwortzeiten von unter einer Sekunde benötigte, insbesondere während der Stoßzeiten, experimentierten wir mit der Bereitgestellten Konkurrenz. Das funktionierte sehr gut. Kaltstarts waren verschwunden. Der Agent schien unglaublich reaktionsschnell.

So geht’s:

  • Bewerten Sie Ihre Bedürfnisse: Haben Sie ein stabiles Verkehrsaufkommen, bei dem die Eliminierung von Kaltstarts entscheidend ist? Die bereitgestellte Konkurrenz könnte für Sie geeignet sein.
  • Überwachen Sie die Kosten: Sie zahlen für die bereitgestellte Konkurrenz, auch wenn Ihre Funktionen nicht aufgerufen werden. Balancieren Sie die Kosten gegen den Nutzen in Bezug auf die Leistung.
  • Kombinieren Sie mit Auto-Scaling: Oft können Sie die bereitgestellte Konkurrenz für Ihre Basis mit bedarfsgerechtem Scaling für Spitzenlasten kombinieren.

Für unseren Agenten haben wir genügend Konkurrenz bereitgestellt, um etwa 70 % unseres erwarteten Basisverkehrs zu bewältigen. Das bedeutete, dass die große Mehrheit unserer Benutzer keine Kaltstarts erlebte. Die verbleibenden 30 % des Spitzenverkehrs konnten weiterhin einen Kaltstart erfahren, aber es war ein viel kleinerer und akzeptabler Prozentsatz angesichts der erzielten Einsparungen.

6. Ihre Funktionen „aufwärmen“ (Mit Vorsicht)

Das ist ein bisschen ein alter Trick und weniger notwendig mit der bereitgestellten Konkurrenz, aber immer noch in bestimmten Szenarien gültig. Sie können Ihre Funktionen regelmäßig (z. B. alle 5-10 Minuten) mit einem „Ping“-Ereignis aufrufen, um sie warm zu halten. Dadurch wird verhindert, dass der Cloud-Anbieter die Ausführungsumgebung herunterfährt.

Ich habe dies für interne Tools verwendet, bei denen die Kosten ein großes Anliegen waren und die bereitgestellte Konkurrenz übertrieben erschien. Für einen öffentlichen Agenten würde ich in der Regel die bereitgestellte Konkurrenz wegen ihrer Zuverlässigkeit wählen, aber es ist gut zu wissen, dass diese Option existiert.

So geht’s:

  • Verwenden Sie geplante Ereignisse: Richten Sie eine CloudWatch-Ereignisregel (AWS) oder einen Timer-Trigger (Azure) ein, um Ihre Funktion regelmäßig aufzurufen.
  • Verwalten Sie Ping-Ereignisse: Überprüfen Sie in Ihrer Funktion, ob eine spezifische Nutzlast vorhanden ist, die anzeigt, dass es sich um einen Aufwärm-Ping handelt, und geben Sie einfach zurück, ohne echte Arbeit zu leisten.

Beispiel (Python):


def lambda_handler(event, context):
 if event.get('source') == 'aws.events' and event.get('detail-type') == 'Scheduled Event':
 print("Die Funktion hat einen Aufwärm-Ping erhalten. Vorzeitige Rückgabe.")
 return {
 'statusCode': 200,
 'body': json.dumps('Aufwärmen erfolgreich!')
 }
 
 # ... die normale Logik des Agents beginnt hier ...
 return {
 'statusCode': 200,
 'body': json.dumps('Hallo von Ihrem Agenten!')
 }

Diese Methode verursacht minimale Kosten für die Aufrufe, aber wenn Ihre Kaltstarts extrem lang sind und die bereitgestellte Konkurrenz für Ihren Anwendungsfall zu teuer ist, kann dies ein akzeptabler Kompromiss sein.

Handlungsorientierte Entscheidungen für Ihren Agenten

Okay, wir haben viel abgedeckt. Hier ist die Liste der Maßnahmen, die Sie morgen ergreifen sollten, damit Ihre Agenten wie die Geschwindigkeitsdämonen funktionieren, die sie sein sollen:

  1. Überprüfen Sie die Größe Ihres Pakets: Wirklich, öffnen Sie Ihr Deployment-Zip. Gibt es Dateien, die dort nicht sein sollten? Entfernen Sie diese Abhängigkeiten. Verwenden Sie Layer. Es ist eine einfache Aufgabe.
  2. Testen Sie den Speicher: Gehen Sie nicht davon aus, dass der Standard-Speicher der beste ist. Erhöhen Sie schrittweise den Speicher Ihrer Funktion und messen Sie die Kaltstartzeit. Finden Sie das richtige Gleichgewicht zwischen Leistung und Kosten.
  3. Refaktorisieren Sie für die Initialisierung: Überprüfen Sie den Code Ihrer Funktion. Alles, was einmal pro Lebenszyklus des Containers ausgeführt werden muss, sollte aus Ihrer Haupt-Handler-Funktion herausgenommen werden. Datenbankverbindungen, Modell-Laden, Konfigurationen abrufen – bringen Sie es aus dem kritischen Pfad heraus.
  4. Erwägen Sie die bereitgestellte Konkurrenz: Für kritische und benutzerorientierte Agenten bewerten Sie das Kosten-Nutzen-Verhältnis der bereitgestellten Konkurrenz. Es ist der direkteste Weg, um Kaltstarts zu eliminieren.
  5. Überwachen, Überwachen, Überwachen: Sie können nicht optimieren, was Sie nicht messen. Verwenden Sie die Protokollierungs- und Überwachungswerkzeuge Ihres Cloud-Anbieters (CloudWatch für AWS, Application Insights für Azure), um die Dauer der Kaltstarts vor und nach Ihren Änderungen zu verfolgen.

Die Optimierung von Kaltstarts für serverlose Agenten ist nicht nur eine technische Übung; es ist eine direkte Verbesserung der Benutzererfahrung. Ein schneller und reaktionsschneller Agent wirkt intelligent, fähig und vertrauenswürdig. Ein langsamer Agent wirkt umständlich, fehlerhaft und frustrierend. Lassen Sie nicht zu, dass Kaltstarts der Grund sind, warum Ihre brillanten Agentenideen scheitern.

Gehen Sie voran, bauen Sie schnelle Agenten und machen Sie Ihre Benutzer glücklich. Bis zum nächsten Mal, hier ist Jules Martin, der von agntmax.com auf Wiedersehen sagt!

🕒 Published:

✍️
Written by Jake Chen

AI technology writer and researcher.

Learn more →
Browse Topics: benchmarks | gpu | inference | optimization | performance
Scroll to Top