Es ist Zeit für LLM-Connection-Strings
Modell- & Provider-Konfiguration mit llm://-URLs vereinfachen
Update: Dieser Artikel führte zu einem Internet-Draft für das
llm://-URI-Schema.
Erinnerst du dich an die schlechten alten Zeiten, in denen die Verbindung zu einer Datenbank bedeutete, eine verschiedene Sammlung von Umgebungsvariablen zu jonglieren?
Es war ein fragiles Konstrukt aus Konfiguration. DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_NAME… oder war es doch DB_USERNAME? Ist es DB_PASS oder DB_PWD? Brauche ich dieses Mal die PG_*-Präfixe? Und wo zum Teufel gehört die Timeout-Einstellung hin?
Es war ein fragiles Kartenhaus, bereit, deinen Production-Build zum Absturz zu bringen, weil du vergessen hast, HOST großzuschreiben.
Dann hatte jemand die brillante Idee, einfach eine URL zu verwenden¹:
postgres://user:pass@host:5432/dbnameEin String. Alles, was man braucht. Universell parsbar. Portabel. Fast schon… schön?
Also warum behandeln wir LLMs, als wäre es 1999?
Die Env-Var-Explosion
Meine .env-Datei sieht derzeit aus wie ein Friedhof verwaister API-Keys. OPENAI_API_KEY, ANTHROPIC_API_KEY, MISTRAL_API_KEY, GROQ_API_KEY. Und fang gar nicht erst mit Azure an – du brauchst einen Endpunkt, einen Deployment-Namen, eine API-Version und einen Key, nur um „Hallo” zu sagen.
Es ist nicht nur hässlich; es ist Reibung. Jedes Mal, wenn ich ein Modell tauschen oder einen neuen Provider testen will, schreibe ich Initialisierungscode um, suche in der Dokumentation nach spezifischen Parameternamen und füge drei weitere Zeilen zu meiner Environment-Konfiguration hinzu.
Was wäre, wenn wir die DB-URL-Idee einfach klauen ausleihen würden?
LLM-Connection-Strings
Stell dir vor, du konfigurierst deine gesamte Modellschnittstelle mit einer einzigen Zeile:
llm://api.openai.com/gpt-5.2?reasoning_effort=none&temp=0.7&max_tokens=1500llm://api.z.ai/glm-4.7?top_p=0.9&cache=trueAnatomie eines LLM-Connection-Strings
Das Schema ist llm://. Der Host ist die API-Basis-URL des Providers. Der Pfad ist der Modellname. Und Query-Parameter kümmern sich um all die Runtime-Optionen, die normalerweise deinen Code zumüllen.
Authentifizierung nötig? Perfekt, füge sie hinzu.
Genau wie bei postgres:// können wir Authentifizierung direkt einbetten:
llm://app-name:sk-proj-123456@api.openai.com/gpt-5.2?reasoning_effort=none&temp=0.7Hinweis: Ja, Credentials in URLs zu packen kann ein Sicherheitsrisiko sein, wenn du sie in öffentliche Logs einfügst. Aber moderne Logging-Dienste sind ziemlich gut darin, diese Patterns zu bereinigen, und ehrlich – behandelst du deine .env-Datei wirklich viel besser? Prüfen, bereinigen und mit Vorsicht verwenden.
Resilienz? Warum zum Teufel nicht.
Viele Datenbankbibliotheken unterstützen Round-Robin-Failover, indem sie mehrere Hosts angeben. Warum sollten unsere KI-Agenten nicht die gleiche Zuverlässigkeit haben?
llms://primary.gpt,backup.gpt/gpt-6?temp=0.9Das s in llms:// ist kein Tippfehler. Es ist Plural. Wenn primary.gpt hängt, wechselt der Client automatisch zu backup.gpt. Keine komplexe Router-Logik erforderlich.
Ein String mit allem – von Authentifizierung über Endpunkt bis hin zu Hyperparametern.
Alternative Formate
Ich bin nicht starr auf llm:// fixiert. Das konkrete Schema ist weniger wichtig als der Standard selbst.
Ich könnte mir eine Welt vorstellen, in der wir provider-spezifische Schemata der Kürze halber verwenden, während die Standardstruktur erhalten bleibt:
ollama://localhost:11434/llama3vercel://anthropic/sonnet-4.5?temp=0.8&web_search={"maxUses":3}bedrock://us-west-2.aws/anthropic/sonnet-4.5?temp=0.8&cacheControl=ephemeralUnabhängig vom exakten Syntax sind die Kernvorteile unbestreitbar:
- Portabilität: Kopiere und füge deine gesamte Konfiguration von einem lokalen Skript in einen Cloud-Worker ein.
- CLI-freundlich: Übergib ein einzelnes Argument an deine Skripte.
my-agent --model "llm://..."schlägtmy-agent --model gpt-4 --temp 0.7 --key $KEY --host .... - Sprachunabhängig: Jede Programmiersprache hat einen robusten URL-Parser. Wir bekommen Validierung, Parsing und Sanitisierung gratis dazu.
Die Datenbankwelt brauchte Jahrzehnte, um das herauszufinden.
Gute Nachricht – in KI-Zeitlinien ist das nur etwa ein halbes Vibe-Jahr her.
Fazit
Wir brauchen keinen weiteren komplexen Konfigurationsstandard oder eine neue YAML-basierte Manifest-Datei. Wir müssen nur das eine Werkzeug verwenden, das seit 30 Jahren für den Rest des Internets funktioniert.
Hör auf, das Rad neu zu erfinden, und fang an, unsere LLM-Verbindungen mit dem gleichen Respekt zu behandeln wie unsere Datenbankverbindungen. Deine .env-Datei (und deine Nerven) werden es dir danken.
