Den Agentencode behalten.
Den Stack drumherum ablösen.
Zieh deine Agenten von eigenen Containern, Cluster und Tracing zu connic um, einen nach dem anderen und egal mit welchem Framework. Deine Python-Tools kommen mit, private Datenbanken bleiben in deinem Netzwerk.
Builds, Skalierung, Retries und Tracing bringt connic mit.
Ein selbst betriebenes Agentenprojekt besteht meist aus Infrastruktur rund um ein paar Python-Dateien. Diese Infrastruktur übernimmt connic, Stück für Stück.
- Dockerfile, k8s/deployment.yamlDeployments
connic installiert requirements.txt und baut ein Deployment bei jedem Push auf einen zugeordneten Branch oder mit connic deploy.
- k8s/hpa.yamlmax_concurrent_runs
Eine Zeile in der Agentendatei begrenzt parallele Runs, bis zum Limit deines Tarifs. Replicas musst du nicht dimensionieren.
- server.pyconnectors/
Webhook, Kafka, SQS, E-Mail und mehr, als YAML definiert und beim Deployment auf jedes Environment angewendet.
- @retry(...)retry_options
Eine fehlgeschlagene Modellanfrage wird genau an dieser Stelle wiederholt oder wechselt zum fallback_model. Fertige Tool-Aufrufe behalten ihr Ergebnis.
- .env, k8s/secret.yamlVariablen je Environment
Secrets liegen verschlüsselt pro Environment, und deine Tools lesen sie wie gewohnt über os.environ.
- tracing.pyRuns und Traces
Jeder Run zeichnet Modell- und Tool-Aufrufe, Tokens und Kosten auf. Ein eigenes Tracing-Setup brauchst du nicht mehr.
- .github/workflows/deploy.ymlDeploy Gate
Liegt tests/ im Projekt, geht ein Deployment erst live, wenn jeder Testfall besteht.
- runbooks/rollback.mdActivate
Aktiviere ein früheres erfolgreiches Deployment. Es läuft wieder, ohne neuen Build.
Deine Tools bleiben Python. Der Agent wird eine YAML-Datei.
Prompt, KI-Modell und Tool-Liste kommen in eine Agentendatei, deine Tool-Funktionen nach tools/. Bei LangChain oder Google ADK schreibt connic migrate beides für dich.
- Aus jedem Framework
- Ein Tool ist eine normale Python-Funktion mit Type Hints und Docstring. Framework-Decorators fallen weg, die Logik bleibt, wie sie ist.
- LangChain und Google ADK mit einem Befehl
- connic migrate wandelt Agentendefinitionen, Tool-Funktionen samt Hilfsfunktionen, statische Prompts und Modellnamen um und prüft das Ergebnis mit connic lint.
- Mit connic neu gebaut
- Graph-Workflows, Checkpointer, dynamische Prompts und Retrieval-Chains werden zu sequenziellen Agenten, Sessions, Retrieval oder eigenen Tools.
- Dein OpenAI-Schlüssel funktioniert weiter
- openai/gpt-4.1 läuft mit deinem eigenen Schlüssel. Der Wechsel zu einem connic/*-Modell ist eine Zeile.
version: '1.0'
name: contract-review
type: llm
description: Flag clauses that break the legal playbook.
model: openai/gpt-4.1
system_prompt: Flag clauses that break the legal playbook.
tools:
- contracts.fetch_contract
- contracts.find_clauses
- contracts.flag_riskDie Datenbank bleibt in deinem Netzwerk.
Eine connic Bridge neben der Datenbank baut einen ausgehenden Tunnel zu connic auf. Das migrierte Tool behält seinen Postgres-Client, nur der Host ändert sich.
- Nur erlauben, was der Agent braucht
- ALLOWED_HOSTS gibt dieser Bridge nur contracts-db:5432 frei, nicht ihr ganzes Netzwerk.
- Keine eingehenden Ports
- Die Bridge verbindet sich nur nach außen. Aus dem Internet bleibt die Datenbank unerreichbar.
- Auch Verbindungen nutzen sie
- Ausgehende Webhooks und Verbindungen wie Kafka, SQS, PostgreSQL, E-Mail oder S3 können über sie laufen.
# Runs inside the network that hosts contracts-db
services:
connic-bridge:
image: connicorg/bridge:latest
restart: always
environment:
BRIDGE_TOKEN: ${CONNIC_BRIDGE_TOKEN}
ALLOWED_HOSTS: contracts-db:5432import os
import psycopg
from connic import bridge_host
DB_HOST = bridge_host(os.environ["CONTRACTS_BRIDGE_ID"], "contracts-db")
def fetch_contract(contract_id: str) -> dict:
"""Return a contract's title and full text.
Args:
contract_id: Contract ID from the review request
"""
with psycopg.connect(
host=DB_HOST,
port=5432,
dbname="contracts",
user="reviewer",
password=os.environ["CONTRACTS_DB_PASSWORD"],
) as conn:
row = conn.execute(
"SELECT title, body FROM contracts WHERE id = %s", (contract_id,)
).fetchone()
return {"title": row[0], "body": row[1]}Mit roten Tests geht nichts live. Rollbacks ohne neuen Build.
Schlagen die Tests fehl, wird das Deployment als Failed markiert, und das aktive läuft weiter. Aktivierst du ein früheres, kommen auch seine Verbindungen zurück.
Einen Agenten nach dem anderen umstellen.
Der alte Dienst läuft weiter, während contract-review Anfragen über eine eigene Webhook-URL annimmt. Stell einen Aufrufer um, vergleich die Runs, dann kommt der nächste Agent.
Fertige Prüfungen gehen über die Bridge zurück an deinen internen Endpunkt.
type: webhookmode: inboundagents: - contract-reviewtype: webhookmode: outboundbridge: contracts-vpcconfig: outbound_url: ${REVIEW_RESULTS_URL}agents: - name: contract-review outbound: { usage: automatic, source: [review-requests] }