Пора ввести connection strings для LLM
Упрощаем настройку моделей и провайдеров с помощью URL llm://
Обновление: Благодаря этой статье появился Internet-Draft для URI-схемы
llm://.
Помните те далёкие времена, когда подключение к базе данных означало жонглирование кучей разрозненных переменных окружения?
Это был карточный домик из конфигураций. DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_NAME… или, погодите, DB_USERNAME? Может DB_PASS или DB_PWD? На этот раз нужен префикс PG_*? И куда, чёрт возьми, вставлять настройку таймаута?
Хрупкая конструкция, готовая развалить ваш продакшен только потому, что вы забыли написать HOST заглавными буквами.
А потом кому-то пришла в голову гениальная идея — просто использовать URL¹:
postgres://user:pass@host:5432/dbnameОдна строка. Всё, что нужно. Универсально парсится. Переносимо. Осмелюсь сказать… красиво?
Так почему же мы относимся к LLM как к технологиям из 1999 года?
Взрыв переменных окружения
Сейчас мой .env выглядит как кладбище брошенных API-ключей. OPENAI_API_KEY, ANTHROPIC_API_KEY, MISTRAL_API_KEY, GROQ_API_KEY. И не начинайте про Azure — там нужны эндпоинт, имя деплоя, версия API и ключ, просто чтобы сказать «привет».
Это не просто некрасиво — это трение. Каждый раз, когда я хочу сменить модель или протестировать нового провайдера, приходится переписывать код инициализации, рыться в документации в поисках конкретных имён параметров и добавлять ещё три строки в конфиг окружения.
А что если просто… стащить позаимствовать идею connection strings из мира баз данных?
Представляем connection strings для LLM
Представьте, что вы настраиваете весь интерфейс взаимодействия с моделью одной строкой:
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=trueАнатомия connection string для LLM
Схема — llm://. Хост — базовый URL API провайдера. Путь — имя модели. А query-параметры обрабатывают все настройки, которые обычно захламляют ваш код.
Нужна авторизация? Отлично, добавьте её.
Точно так же, как в postgres://, мы можем встроить аутентификацию прямо в URL:
llm://app-name:sk-proj-123456@api.openai.com/gpt-5.2?reasoning_effort=none&temp=0.7Примечание: Да, хранение учётных данных в URL может быть риском для безопасности, если вы вставляете их в публичные логи. Но современные сервисы логирования неплохо справляются с маскировкой таких паттернов, и честно, разве вы относитесь к своему .env файлу намного бережнее? Проверяйте, очищайте и используйте с осторожностью.
Отказоустойчивость? Почему бы и нет.
Многие библиотеки для баз данных поддерживают failover с переключением между хостами, указывая несколько серверов. Почему бы нашим AI-агентам не иметь ту же надёжность?
llms://primary.gpt,backup.gpt/gpt-6?temp=0.9Эта s в llms:// — не опечатка. Это множественное число. Если primary.gpt зависает, клиент автоматически повторяет запрос на backup.gpt. Никакой сложной логики роутера не требуется.
Одна строка со всем: от авторизации до эндпоинта и гиперпараметров.
Альтернативные форматы
Я не фанатично привязан к llm://. Конкретная схема важна меньше, чем сам стандарт.
Могу представить мир, где мы используем специфичные для провайдеров схемы для краткости, сохраняя при этом стандартную структуру:
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=ephemeralНезависимо от точного синтаксиса, ключевые преимущества неоспоримы:
- Переносимость: Скопируйте и вставьте весь конфиг из локального скрипта в облачный worker.
- Удобство для CLI: Передавайте один аргумент в ваши скрипты.
my-agent --model "llm://..."лучше, чемmy-agent --model gpt-4 --temp 0.7 --key $KEY --host .... - Независимость от языка: У каждого языка программирования есть надёжный парсер URL. Валидация, парсинг и санитизация достаются нам бесплатно.
Миру баз данных потребовались десятилетия, чтобы разобраться с этим.
Хорошая новость: в AI-таймлайнах это всего лишь около половины вайб-года.
Итог
Нам не нужен ещё один сложный стандарт конфигурации или новый YAML-манифест. Нам просто нужно использовать тот инструмент, который безотказно работает для остального интернета уже 30 лет.
Хватит изобретать велосипед и начнём относиться к нашим LLM-соединениям с тем же уважением, что и к базам данных. Ваш .env файл (и ваши нервы) скажут спасибо.
