Пора вводить строки подключения для LLM
Упрощаем конфигурацию моделей и провайдеров с помощью llm:// URL
Обновление: Эта статья привела к появлению 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 и ключ, чтобы просто сказать «привет».
Это не просто уродливо — это трение. Каждый раз, когда я хочу сменить модель или протестировать нового провайдера, я переписываю инициализационный код, охочусь за документацией по конкретным именам параметров и добавляю три новых строки в конфигурацию окружения.
Что если мы просто… украдём позаимствуем идею DB 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 может быть небезопасно, если вставлять их в публичные логи. Но современные системы логирования неплохо умеют вычищать такие паттерны, и, честно говоря, разве вы обращаетесь со своим .env намного лучше? Проверяйте, очищайте и используйте с осторожностью.
Отказоустойчивость? А почему бы и нет.
Многие библиотеки для работы с базами данных поддерживают round-robin 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Независимо от точного синтаксиса, основные преимущества неоспоримы:
- Переносимость: Скопируйте и вставьте всю конфигурацию из локального скрипта в облачный воркер.
- Удобство для CLI: Передавайте один аргумент в скрипты.
my-agent --model "llm://..."побеждаетmy-agent --model gpt-4 --temp 0.7 --key $KEY --host .... - Языковая независимость: В каждом языке программирования есть надёжный парсер URL. Мы получаем валидацию, разбор и санацию бесплатно.
Миру баз данных потребовались десятилетия, чтобы до этого додуматься.
Хорошая новость: по AI-меркам это всего полвибро-года назад.
Вердикт
Нам не нужен очередной сложный стандарт конфигурации или новый YAML-манифест. Нам просто нужно использовать тот инструмент, который работает для остального интернета последние 30 лет.
Давайте перестанем изобретать велосипед и начнём относиться к своим LLM-подключениям с тем же уважением, что и к базам данных. Ваш .env (и ваш рассудок) скажут вам спасибо.
