Zum Hauptinhalt springen
Connic
Build

Runtime-Steuerung

Ausführungslimits, koordinierte parallele Runs, persistente Session-Verläufe und gemeinsame Konfigurationen für zusammengehörige Agenten.

Zuletzt aktualisiert

Ausführungslimits und Wiederholungsversuche

agents/agent.yaml
max_concurrent_runs: 10
max_iterations: 50
timeout: 120

retry_options:
  attempts: 5
  initial_delay: 10
  max_delay: 60
  # Tool and sequential agents only:
  rerun_middleware: true
  • max_concurrent_runs begrenzt gleichzeitige Runs, bis zur Grenze des Abonnements.
  • max_iterations begrenzt den LLM Loop, damit wiederholte Tool-Aufrufe nicht unbegrenzt laufen.
  • timeout legt die maximale Ausführungszeit in Sekunden fest, mit mindestens fünf Sekunden und einer Obergrenze je nach Abonnement.
  • retry_options wiederholt den fehlgeschlagenen Vorgang. Bei LLM-Agenten wird nur die fehlgeschlagene KI-Modell-Anfrage wiederholt. Fehler aus Tool-Aufrufen werden an das KI-Modell zurückgegeben, ohne den Agenten von vorne zu starten. Bei Tool- und Sequential-Agenten wird der gesamte Vorgang erneut ausgeführt. attempts schließt den ersten Versuch ein und ist auf 10 begrenzt.
  • KI-Modell-Anfragen verwenden begrenzten exponentiellen Backoff mit Jitter, sofern der Provider kein Retry-After vorgibt.max_delay begrenzt die automatisch berechnete Wartezeit. Gibt der Provider eine Wartezeit vor, wird diese vor einer weiteren Anfrage an dasselbe KI-Modell eingehalten. Das Gesamt-Timeout gilt weiterhin.
  • rerun_middleware wirkt sich nur auf Wiederholungsversuche auf Vorgangsebene bei Tool- und Sequential-Agenten aus; LLM-Agenten werden nie erneut ausgeführt.

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.

agents/support-processor.yaml
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: queue

Drop-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.

agents/notification-handler.yaml
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: drop

Schlü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.

Einschränkungen

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

Standardmäßig erstellt jede Anfrage eine isolierte Session. Persistente Sessions erhalten den Gesprächsverlauf über Anfragen, Neustarts und erneute Deployments hinweg.

agents/support-bot.yaml
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: 100000

Session-Schlüssel

key identifiziert die Session und muss 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

middleware/support-bot.py
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 content

Input-Schlüssel verwenden

agents/agent.yaml
# When the connector payload is JSON like {"user_id": "u123", "message": "..."}
session:
  key: input.user_id

TTL 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.

Kontextkomprimierung

Füge context_compression hinzu, damit lange LLM-Sessions innerhalb des KI-Modell-Kontextfensters bleiben. Nach der Konfiguration lösen Kontextfensterfehler des Providers eine Komprimierung und einen automatischen Wiederholungsversuch aus. Lege context_compression.model fest, um ein separates KI-Modell für Zusammenfassungen zu verwenden; normale Agent-Aufrufe und ihre Wiederholungsversuche nutzen weiterhin das KI-Modell des Agenten. Lege max_prompt_tokens fest, um anhand der gemeldeten Prompt-Nutzung früher zu komprimieren. Verwende session_history.interval nur, wenn auch der gespeicherte Verlauf zwischen Runs komprimiert werden soll.

Session-Schlüssel dürfen nicht leer sein

Wenn der Session-Schlüssel fehlt oder leer ist, schlägt der Run fehl. Stelle sicher, dass Middleware oder Payload ihn immer bereitstellen.

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.

agents/-Struktur
agents/
_defaults.yamlapplies to every agent in the project
process/
_defaults.yamladds/overrides for everything under process/
ingest/
foo.yamlinherits root + process defaults
enrich/
_defaults.yamladds/overrides for process/enrich/*
bar.yamlinherits root + process + enrich defaults
support-assistant.yamlinherits only root defaults

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:

  • name und description sind nicht erlaubt, da sie einen bestimmten Agenten identifizieren.
  • version ist erlaubt, um die Schema-Version für das gesamte Projekt festzulegen. Die Agent-Datei muss sie dennoch zusammen mit name und description festlegen.

Merge-Regeln

  • Skalare Werte wie model, temperature, system_prompt und timeout werden durch die tiefere Ebene ersetzt.
  • Objekte wie database, retrieval, retry_options, approval, session und guardrails werden rekursiv nach Schlüssel zusammengeführt.
  • Listen werden zusammengeführt und dedupliziert:
    • tools, discoverable_tools und approval.tools werden nach Tool-Referenz dedupliziert; eine tiefere Deklaration überschreibt den geerbten Eintrag.
    • mcp_servers werden nach Servernamen dedupliziert; eine tiefere vollständige Serverkonfiguration ersetzt die geerbte.
    • guardrails.input und guardrails.output werden, wenn vorhanden, nach Regelnamen dedupliziert und andernfalls angehängt.
    • Bei Sequential-Agenten werden in der Liste agents doppelte Agentennamen entfernt.

Beispiel

agents/_defaults.yaml
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_event
agents/billing/refund-agent.yaml
version: "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: 3600

Der 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.

Cloud-Entwicklungsumgebung

connic dev stellt eine Cloud-Entwicklungsumgebung mit Hot Reload bereit.