DanLevy.net

Пора переходить на строки подключения 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¹:

Terminal window
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

Представьте, что весь интерфейс вашей модели настраивается одной строкой:

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


Анатомия строки подключения к LLM

части строки подключения к LLM

Схема — llm://. Хост — базовый URL API провайдера. Путь — имя модели. А параметры запроса отвечают за все параметры выполнения, которые обычно засоряют код.

Нужна аутентификация? Отлично, добавим её.

Как и в postgres://, аутентификацию можно встроить прямо в строку:

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

Примечание: да, хранить учётные данные в URL может быть небезопасно, если вы вставляете такие URL в публичные логи. Но современные сервисы логирования неплохо вычищают подобные шаблоны. И честно говоря, разве с вашим .env всё обстоит настолько лучше? Проверяйте, санитизируйте и используйте с осторожностью.

Отказоустойчивость? Почему бы и нет.

Многие библиотеки для работы с базами данных поддерживают переключение по кругу при отказе, если указать несколько хостов. Почему наши AI-агенты должны быть менее надёжными?

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

Буква s в llms:// — не опечатка. Это множественное число. Если primary.gpt зависнет, клиент автоматически повторит запрос через backup.gpt. Никакой сложной логики маршрутизации не требуется.

Одна строка — всё: от вашей аутентификации и эндпоинта до гиперпараметров.

Альтернативные форматы

Я не женат на llm://. Конкретная схема менее важна, чем сам стандарт.

Можно представить мир, где ради краткости мы используем схемы конкретных провайдеров, сохраняя при этом общую структуру:

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

Какой бы ни была точная синтаксическая форма, ключевые преимущества очевидны:

  1. Переносимость: скопируйте и вставьте всю конфигурацию из локального скрипта в облачный воркер.
  2. Удобство для CLI: передайте скрипту один аргумент. my-agent --model "llm://..." лучше, чем my-agent --model gpt-4 --temp 0.7 --key $KEY --host ....
  3. Независимость от языка: в каждом языке программирования есть надёжный парсер URL. Валидация, разбор и санитизация достаются нам бесплатно.
Миру баз данных понадобились десятилетия, чтобы до этого додуматься.
Хорошая новость: по меркам AI это было всего около полутора вайб-месяцев назад.

Вердикт

Нам не нужен ещё один сложный стандарт конфигурации или новый YAML-файл манифеста. Достаточно использовать инструмент, который уже 30 лет работает для всего остального интернета.

Хватит изобретать велосипед — пора относиться к подключениям к LLM с тем же уважением, что и к базам данных. Ваш .env (и ваша психика) будут вам благодарны.

беспорядочный ящик с переменными окружения