Пора переходить на строки подключения llm://
Упростите настройку моделей и провайдеров с помощью URL llm://
Обновление: Эта статья привела к появлению Internet-Draft для URI-схемы
llm://и вспомогательного npm-пакетаllm-strings. Реализация также доступна на GitHub.
Помните те недобрые старые времена, когда подключение к базе данных означало жонглирование разномастной кучей переменных окружения?
Это была башня из хрупкой конфигурации. 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 я вообще молчу — чтобы просто сказать «привет», вам понадобятся endpoint, имя deployment, версия API и ключ.
Дело не только в том, что это некрасиво; это создаёт трение. Каждый раз, когда я хочу сменить модель или протестировать нового провайдера, мне приходится переписывать код инициализации, выискивать в документации названия специфичных параметров и добавлять ещё три строки в конфигурацию окружения.
А что, если просто… украсть позаимствовать идею URL базы данных?
Знакомьтесь: строки подключения к 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Анатомия строки подключения к LLM
Схема — llm://. Хост — базовый URL API провайдера. Путь — имя модели. А параметры запроса отвечают за все параметры выполнения, которые обычно засоряют код.
Нужна аутентификация? Отлично, добавим её.
Как и в postgres://, аутентификацию можно встроить прямо в строку:
llm://app-name:sk-proj-123456@api.openai.com/gpt-5.2?reasoning_effort=none&temp=0.7Примечание: да, хранить учётные данные в URL может быть небезопасно, если вы вставляете такие URL в публичные логи. Но современные сервисы логирования неплохо вычищают подобные шаблоны. И честно говоря, разве с вашим .env всё обстоит настолько лучше? Проверяйте, санитизируйте и используйте с осторожностью.
Отказоустойчивость? Почему бы и нет.
Многие библиотеки для работы с базами данных поддерживают переключение по кругу при отказе, если указать несколько хостов. Почему наши 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Какой бы ни была точная синтаксическая форма, ключевые преимущества очевидны:
- Переносимость: скопируйте и вставьте всю конфигурацию из локального скрипта в облачный воркер.
- Удобство для CLI: передайте скрипту один аргумент.
my-agent --model "llm://..."лучше, чемmy-agent --model gpt-4 --temp 0.7 --key $KEY --host .... - Независимость от языка: в каждом языке программирования есть надёжный парсер URL. Валидация, разбор и санитизация достаются нам бесплатно.
Миру баз данных понадобились десятилетия, чтобы до этого додуматься.
Хорошая новость: по меркам AI это было всего около полутора вайб-месяцев назад.
Вердикт
Нам не нужен ещё один сложный стандарт конфигурации или новый YAML-файл манифеста. Достаточно использовать инструмент, который уже 30 лет работает для всего остального интернета.
Хватит изобретать велосипед — пора относиться к подключениям к LLM с тем же уважением, что и к базам данных. Ваш .env (и ваша психика) будут вам благодарны.

