DanLevy.net

Il est temps d'adopter les chaînes de connexion LLM

Simplifiez la configuration modèle & fournisseur avec les URLs llm://

Mise à jour : Cet article a mené à un Internet-Draft pour le schéma d’URI llm://.

Vous vous souvenez de l’époque où se connecter à une base de données revenait à jongler avec un attirail hétéroclite de variables d’environnement ?

C’était une tour de configuration fragile. DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_NAME… ou plutôt, c’était DB_USERNAME ? C’était DB_PASS ou DB_PWD ? Est-ce que j’ai besoin des préfixes PG_* cette fois-ci ? Et où diable se règle le timeout ?

Un château de cartes prêt à s’effondrer sur votre build de production parce que vous avez oublié de mettre HOST en majuscule.

Puis, quelqu’un a eu l’idée géniale d’utiliser une simple URL¹ :

Terminal window
postgres://user:pass@host:5432/dbname

Une seule chaîne. Tout ce dont vous avez besoin. Universellement parsable. Portable. Oserais-je dire… magnifique ?

Alors pourquoi traitons-nous les LLMs comme si nous étions en 1999 ?

L’explosion des variables d’environnement

À l’heure actuelle, mon fichier .env ressemble à un cimetière de clés API abandonnées. OPENAI_API_KEY, ANTHROPIC_API_KEY, MISTRAL_API_KEY, GROQ_API_KEY. Et ne me parlez pas d’Azure — il vous faut un endpoint, un nom de déploiement, une version d’API, et une clé rien que pour dire « bonjour ».

Ce n’est pas seulement moche ; c’est une friction. Chaque fois que je veux changer de modèle ou tester un nouveau fournisseur, je réécris du code d’initialisation, je cherche de la documentation pour des noms de paramètres spécifiques, et j’ajoute trois lignes de plus à ma config d’environnement.

Et si on… piquait empruntait l’idée des URLs de bases de données ?

Présentation des chaînes de connexion LLM

Imaginez configurer toute votre interface modèle avec une seule ligne :

Terminal window
llm://api.openai.com/gpt-5.2?reasoning_effort=none&temp=0.7&max_tokens=1500
llm://api.z.ai/glm-4.7?top_p=0.9&cache=true


Anatomie d’une chaîne de connexion LLM

les parties d'une chaîne de connexion LLM

Le schéma est llm://. L’hôte est l’URL de base de l’API du fournisseur. Le chemin est le nom du modèle. Et les paramètres de requête gèrent toutes les options d’exécution qui encombrent généralement votre code.

Besoin d’authentification ? Pas de problème, ajoutez-la.

Tout comme postgres://, on peut intégrer l’authentification directement :

Terminal window
llm://app-name:sk-proj-123456@api.openai.com/gpt-5.2?reasoning_effort=none&temp=0.7

Note : Oui, mettre des identifiants dans des URLs peut présenter un risque de sécurité si vous les collez dans des logs publics. Mais les services de logging modernes sont plutôt doués pour filtrer ces motifs, et honnêtement, traitez-vous votre fichier .env beaucoup mieux ? Vérifiez, assainissez, et utilisez avec prudence.

De la résilience ? Et pourquoi pas.

De nombreuses bibliothèques de bases de données supportent le basculement round-robin en spécifiant plusieurs hôtes. Pourquoi nos agents IA n’auraient-ils pas la même fiabilité ?

Terminal window
llms://primary.gpt,backup.gpt/gpt-6?temp=0.9

Le s dans llms:// n’est pas une faute de frappe. C’est le pluriel. Si primary.gpt plante, le client réessaie automatiquement sur backup.gpt. Pas de logique de routeur complexe nécessaire.

Une seule chaîne avec tout, de votre authentification à votre endpoint en passant par vos hyperparamètres.

Formats alternatifs

Je ne suis pas marié à llm://. Le schéma spécifique importe moins que la norme elle-même.

Je pourrais imaginer un monde où l’on utilise des schémas spécifiques aux fournisseurs par souci de concision, tout en conservant la structure standard :

Terminal window
ollama://localhost:11434/llama3
vercel://anthropic/sonnet-4.5?temp=0.8&web_search={"maxUses":3}
bedrock://us-west-2.aws/anthropic/sonnet-4.5?temp=0.8&cacheControl=ephemeral

Quelle que soit la syntaxe exacte, les avantages fondamentaux sont indéniables :

  1. Portabilité : Copiez-collez toute votre configuration d’un script local vers un worker cloud.
  2. Ami de la CLI : Passez un seul argument à vos scripts. my-agent --model "llm://..." bat my-agent --model gpt-4 --temp 0.7 --key $KEY --host ....
  3. Indépendant du langage : Tout langage de programmation possède un parseur d’URL robuste. On obtient validation, parsing et assainissement gratuitement.
Le monde des bases de données a mis des décennies à comprendre ça.
Bonne nouvelle, dans les timelines IA, ça ne représente qu’environ une demi vibe-year.

Le verdict

Nous n’avons pas besoin d’une autre norme de configuration complexe ou d’un énième fichier de manifeste YAML. Nous avons juste besoin d’utiliser l’outil qui fonctionne pour le reste d’Internet depuis 30 ans.

Arrêtons de réinventer la roue et commençons à traiter nos connexions LLM avec le même respect que nous accordons à nos bases de données. Votre fichier .env (et votre santé mentale) vous remercieront.

un tiroir à bazar de variables d'environnement