Runtime-Steuerung
Ausführungslimits, koordinierte parallele Runs, persistente Sessions und gemeinsame Konfigurationen für zusammengehörige Agenten.
Auf dieser Seite
Ausführungslimits und Wiederholungsversuche
max_concurrent_runs: 10
max_iterations: 50
timeout: 180
retry_options:
attempts: 3
attempt_timeout: 120
initial_delay: 10
max_delay: 30
# Tool and sequential agents only:
rerun_middleware: truemax_concurrent_runsbegrenzt gleichzeitige Runs, bis zur Grenze des Abonnements.max_iterationsbegrenzt den LLM Loop, damit wiederholte Tool-Aufrufe nicht unbegrenzt laufen.timeoutlegt die maximale Ausführungszeit in Sekunden fest, mit mindestens fünf Sekunden. Die Obergrenze ist das Run-Timeout deines Plans, das auf der Preisseite steht.retry_optionsgilt bei LLM-Agenten für einzelne KI-Modell-Anfragen. Bei jedem Fehler einer solchen Anfrage greift die konfigurierte Regel für Wiederholungsversuche oder Fallback. Dazu zählen Timeouts und Ablehnungen durch den Provider. Ein Dateityp, den das KI-Modell nicht akzeptiert (unsupported_file_type), wird beim selben KI-Modell nicht wiederholt, kann aber weiterhin zum Fallback wechseln. Ergebnisse abgeschlossener Tool-Aufrufe und der Middleware bleiben erhalten. Bei Tool- und Sequential-Agenten wird weiterhin der jeweilige Vorgang wiederholt.attemptserlaubt 1–10 Versuche einschließlich des ersten; der Standardwert ist 3. Ohne Fallback gilt die Anzahl für das primäre KI-Modell. Mit Fallback erhält das primäre KI-Modell einen Versuch und das Fallback-KI-Modell die konfigurierte Anzahl. Eine konfigurierte Kontextkomprimierung kann einen zusätzlichen Versuch ermöglichen.attempt_timeoutbeträgt standardmäßig 120 Sekunden und muss eine positive, endliche Zahl sein. Für jede vollständige Antwort und jeden Stream gilt dieses Zeitlimit oder die verbleibende Zeit des Runs, falls diese kürzer ist. Alle Versuche und Wartezeiten teilen sich das Zeitlimit des Runs. Wiederholungsversuche setzen es nicht zurück; die Anzahl der Versuche teilt es auch nicht auf.- Weitere Versuche mit demselben KI-Modell verwenden exponentiellen Backoff mit Equal Jitter. Die Wartezeit liegt zufällig zwischen der Hälfte und dem gesamten begrenzten Backoff. Die Standardwerte sind 10 Sekunden für
initial_delayund 30 fürmax_delay. Ein gültigerRetry-After-Wert des Providers ersetzt diese Wartezeit. Der Wechsel zum Fallback erfolgt sofort. Reicht die Restzeit des Runs nicht für die erforderliche Wartezeit, startet keine weitere Anfrage. rerun_middlewaregilt nur für Wiederholungsversuche bei Tool- und Sequential-Agenten. Erneute KI-Modell-Anfragen behalten den laufenden LLM-Run und den Middleware-Zustand bei. Wiederholungsversuche der Provider-SDKs sind deaktiviert, damit sie die konfigurierte Anzahl nicht vervielfachen.
Im Beispiel ist eine Antwort nach 90 Sekunden bereits im ersten Versuch erfolgreich. Erreicht ein Versuch 120 Sekunden, teilen sich weitere Versuche die Restzeit des auf 180 Sekunden begrenzten Runs.
Das Streaming-Timeout umfasst die gesamte Antwort; eingehende Chunks setzen es nicht zurück. Hat eine Anfrage bereits Ausgabe geliefert, meldet connic eine Unterbrechung als unvollständige Antwort und startet die Anfrage nicht erneut. Auch ein Abbruch oder das erreichte Run-Timeout beendet weitere Versuche. Das gilt für normales LLM-Streaming; native Voice-Sessions haben einen eigenen Ablauf.
Regeln zur Nebenläufigkeit
Regeln zur Nebenläufigkeit stellen sicher, dass pro eindeutigem Schlüssel immer nur ein Run aktiv ist. Verwende sie, wenn ein Agent Events für einen bestimmten Support-Prozess, Kunden oder Auftrag verarbeitet und eine parallele Verarbeitung zu Konflikten führen würde.
Queue-Modus (Standard)
Trifft ein weiteres Event für einen aktiven Schlüssel ein, wartet es, bis der erste Run beendet ist, und startet anschließend automatisch.
version: "1.0"
name: support-processor
type: llm
model: connic/gpt-5.6-terra
description: "Processes support tickets one at a time per process"
system_prompt: "You are a support agent. Process the incoming ticket."
# Only one run per process_id at a time. Additional runs wait in queue.
concurrency:
key: "process_id"
on_conflict: queueDrop-Modus
Trifft ein weiteres Event für einen aktiven Schlüssel ein, wird der neue Run sofort abgebrochen. Verwende diesen Modus, wenn doppelte Arbeit unnötig wäre.
version: "1.0"
name: notification-handler
type: tool
description: "Handles notifications, skipping duplicates"
tool_name: notifications.handle
# Drop duplicate runs for the same customer while one is active.
concurrency:
key: "data.customer_id"
on_conflict: dropCoalesce-Modus
Trifft ein weiteres Event für einen aktiven Schlüssel ein, wartet sein Run wie im Queue-Modus, aber pro Schlüssel kann nur ein Run warten. Ein neueres Event ersetzt den wartenden Run. Viele Events während eines langen Runs führen so zu genau einem Folge-Run mit der neuesten Payload. Verwende diesen Modus, wenn jedes Event den Agenten nur auffordert, denselben Zustand erneut zu prüfen.
Der ersetzte Run wird abgebrochen. Sein Kontext enthält superseded_by_concurrency_rule und superseded_by, die ID des Runs, der ihn ersetzt hat.
version: "1.0"
name: process-agent
type: llm
model: connic/gpt-5.6-terra
description: "Re-evaluates the current process step on every status event"
system_prompt: "Check the current step of the process and act on it."
# Events that arrive during a run collapse into one follow-up run.
concurrency:
key: "process_id"
on_conflict: coalesceSchlüssel extrahieren
key liest die Trigger-Payload in Punktnotation. Wenn ein Kafka-Payload {"data": {"customer_id": "abc"}} lautet, verwende data.customer_id. Existiert der Pfad nicht, wird die Nebenläufigkeitsregel für diesen Run übersprungen.
Zusammenspiel mit max_concurrent_runs
Beide Einschränkungen gelten. Mit max_concurrent_runs: 5 und concurrency.key: "process_id"können fünf Prozess-IDs parallel laufen, aber pro Prozess-ID kann nur ein Run aktiv sein. Runs, die auf ihren Schlüssel warten, belegen keinen Platz.
Wartende Runs
- Wartende Runs werden dauerhaft gespeichert. Sie überstehen Neustarts und Deployments und starten auf dem aktiven Deployment.
- Ein Schlüssel bleibt während eines Deployments belegt. Ein Run, der noch auf dem vorherigen Deployment läuft, behält seinen Schlüssel bis zu seinem Ende.
- Ein Run, der auf eine Freigabe wartet, behält seinen Schlüssel. Nach der Entscheidung läuft er vor allen wartenden Runs weiter.
- Im Queue-Modus starten wartende Runs in der Reihenfolge, in der ihre Events eingetroffen sind.
- Es gibt keine Obergrenze für wartende Runs und kein Warte-Timeout. Die Wartezeit zählt nicht zu
timeout, und ein Run verbraucht vor seinem Start kein Projektguthaben. Runs, die durchdropodercoalesceabgebrochen werden, starten nie.
Regeln zur Nebenläufigkeit werden bei Sequential-Agenten nicht unterstützt. Der Schlüssel wird aus der ursprünglichen Trigger-Payload gelesen. Das funktioniert für alle Trigger-Typen, darunter Kafka, HTTP, Cron, API und trigger_agent.
Persistente Sessions
Mit session: true teilen alle Runs des Agenten eine Session. Ein Objekt ohne key oder mit key: null verwendet dieselbe gemeinsame Session. false, null oder das Weglassen von session deaktiviert die dauerhafte Speicherung.
version: "1.0"
name: support-bot
type: llm
model: connic/gpt-5.6-terra
description: "A support chatbot that remembers conversation history"
system_prompt: |
You are a helpful support agent. Use the conversation history
to provide contextual responses.
# Maintain persistent sessions keyed by chat ID from middleware
session:
key: context.chat_id
ttl: 86400 # Sessions expire after 24 hours of inactivity
# Keep long conversations within the model context window
context_compression:
enabled: true
# Optional model for compression summaries; defaults to the agent model
model: connic/gpt-5.6-luna
keep_recent_messages: 12
# Optional early compression based on model-reported prompt usage
max_prompt_tokens: 100000Verlauf und Browserzustand
history und browser sind standardmäßig true. Dieses Beispiel behält Cookies und Local Storage pro Chat; jeder Run beginnt mit einem neuen Gesprächsverlauf. Bei browser: false funktionieren Browser-Tools weiterhin, starten aber mit leerem Browserzustand.
session:
key: context.chat_id
ttl: 86400
history: false
browser: trueSession-Schlüssel
Der optionale key trennt Sessions nach dem aufgelösten Wert. Wenn angegeben, muss er eines von zwei Präfixen verwenden:
context.<path>liest den Session-Schlüssel aus dem Middleware-Kontext. Die Middleware kann ihn auch aus den Anfragedaten ableiten.input.<path>liest den Session-Schlüssel direkt aus der Payload der Verbindung, bevor die Middleware ausgeführt wird. Die Payload muss gültiges JSON sein; auch verschachtelte Felder sind zugänglich.
Schlüssel in Middleware setzen
async def before(content: dict, context: dict) -> dict:
# Extract a stable identifier for this conversation from the connector payload.
payload = context.get("payload", {})
context["chat_id"] = payload.get("chat_id")
return contentInput-Schlüssel verwenden
# When the connector payload is JSON like {"user_id": "u123", "message": "..."}
session:
key: input.user_idTTL und Session-Verwaltung
Der optionale Wert ttl legt fest, nach wie vielen Sekunden ohne Aktivität eine Session abläuft. Das Minimum beträgt 60 Sekunden; ohne TTL laufen Sessions nie ab. Aktive Sessions lassen sich im Dashboard unter Storage > Sessions ansehen und löschen. Sessions gelten pro Environment.
Runs mit derselben Session werden nicht automatisch nacheinander ausgeführt. Überschneiden sich zwei Runs derselben Session, schlägt der Run fehl, der als zweiter schreibt. Wenn das passieren kann, setze eine Regel zur Nebenläufigkeit auf das Feld, das die Session identifiziert, etwa concurrency.key: conversation_id zusammen mit session.key: input.conversation_id.
Kontextkomprimierung
Mit context_compression verkürzt connic den Gesprächsverlauf, wenn der Provider ein überschrittenes Kontextfenster meldet. Die Komprimierung erfolgt vor einem Wechsel zum Fallback. Danach erhält dasselbe KI-Modell eine zusätzliche Anfrage mit dem gekürzten Verlauf. Pro KI-Modell-Aufruf im Agent-Loop ist höchstens ein solcher Reparaturversuch außerhalb der regulären Anzahl erlaubt. Das Zeitlimit des Runs und die bereits verbrauchten Versuche bleiben bestehen. Schlägt die Reparatur fehl, gilt wieder die normale Regel für Wiederholungsversuche oder Fallback. Mit context_compression.model lässt sich ein separates KI-Modell für Zusammenfassungen festlegen. Der Reparaturversuch verwendet das KI-Modell, das den Kontext abgelehnt hat. max_prompt_tokens ermöglicht eine frühere Komprimierung anhand der gemeldeten Prompt-Nutzung. session_history.interval komprimiert auch den gespeicherten Verlauf zwischen Runs.
Für den gespeicherten Verlauf gibt es keine Obergrenze bei Gesamtgröße oder Anzahl der Runs; jede gespeicherte Nachricht darf bis zu 5 MB groß sein. Mit session_history.interval: 4 fasst jeder vierte Run an seinem Ende den älteren Verlauf zusammen und behält die letzten keep_recent_runs Runs (Standard 1) unverändert. Ohne diese Einstellung lädt jeder Run den vollständigen gespeicherten Verlauf, und die Komprimierung kürzt nur die Anfrage, nicht die gespeicherte Session.
Wenn ein konfigurierter Schlüsselpfad einen leeren oder fehlenden Wert ergibt, schlägt der Run fehl. Ohne key wird die gemeinsame Session des Agenten verwendet.
Kaskadierende Defaults mit _defaults.yaml
Füge _defaults.yaml in einem beliebigen Verzeichnis unter agents/ hinzu, um die Konfiguration mit Agenten auf dieser und darunterliegenden Ebenen zu teilen. Verwende die Datei für ein gemeinsames model, guardrails, Tools oder database.collections.
connic kombiniert Standardwerte von der obersten zur tiefsten Ebene und wendet danach die Agent-Datei an, sodass deren Werte bei Konflikten Vorrang haben.
Zulässige Inhalte einer Defaults-Datei
Eine Defaults-Datei unterstützt dieselben Felder wie Agent YAML, muss aber nicht alle Pflichtfelder enthalten. Es gibt zwei Ausnahmen:
nameunddescriptionsind nicht erlaubt, da sie einen bestimmten Agenten identifizieren.versionist erlaubt, um die Schema-Version für das gesamte Projekt festzulegen. Die Agent-Datei muss sie dennoch zusammen mitnameunddescriptionfestlegen.
Merge-Regeln
- Skalare Werte wie
model,temperature,system_promptundtimeoutwerden durch die tiefere Ebene ersetzt. - Objekte wie
database,retrieval,retry_options,approval,sessionundguardrailswerden rekursiv nach Schlüssel zusammengeführt. - Listen werden zusammengeführt und dedupliziert:
tools,discoverable_toolsundapproval.toolswerden nach Tool-Referenz dedupliziert; eine tiefere Deklaration überschreibt den geerbten Eintrag.approval.inputswird nach dem Namen des Eingabe-Tools dedupliziert; eine tiefere Deklaration ersetzt die geerbte Konfiguration dieses Namens.mcp_serverswerden nach Servernamen dedupliziert; eine tiefere vollständige Serverkonfiguration ersetzt die geerbte.guardrails.inputundguardrails.outputwerden, wenn vorhanden, nach Regelnamen dedupliziert und andernfalls angehängt.- Bei Sequential-Agenten werden in der Liste
agentsdoppelte Agentennamen entfernt.
Beispiel
version: "1.0"
type: llm
model: connic/gpt-5.6-terra
temperature: 0
guardrails:
input:
- type: prompt_injection
mode: block
output:
- type: system_prompt_leakage
mode: block
tools:
- audit.log_eventversion: "1.0"
name: refund-agent
description: "Issues refunds against the billing system."
system_prompt: "Refund only valid charges. Use the tools."
tools:
- billing.lookup_charge
- billing.issue_refund
approval:
tools:
- billing.issue_refund: param.amount > 50
timeout: 3600Der resultierende refund-agent erbt das KI-Modell, den Temperatur-Wert und beide Guardrails. Seine Tools werden zu [audit.log_event, billing.lookup_charge, billing.issue_refund].
Führe connic lint aus, um die zusammengeführte Konfiguration zu validieren. A/B-Test-Varianten namens <base>-test-<name>.yaml erben dieselben Standardwerte wie ihre Basis.
connic dev stellt eine Cloud-Entwicklungsumgebung mit Hot Reload bereit.