API-ключи
В конфигурации каждой модели указано имя API-ключа. Источник значения зависит от
настроенного хранилища секретов. По умолчанию используются переменные окружения и
файл .env. Команда llmbroker env создаёт заготовку с нужными
именами переменных и ссылками для получения ключей.
Подсказки доступны и из программы. Для каждого отсутствующего ключа поле help
есть в состоянии пула и в
отчёте об обновлении. На их основе можно показать пользователю,
какие ключи требуются, без отдельного справочника провайдеров.
Состояние пула содержит эти подсказки при любом реестре, в том числе SQLite,
PostgreSQL и MongoDB. Они берутся из поддерживаемого списка моделей, за которым
следует брокер, по копии, уже имеющейся на машине; обращения к сети при этом нет.
Если ваш собственный реестр предоставляет свои подсказки для ключей, приоритет
у них. При sync=None брокер не следует никакому списку, поэтому доступны только
подсказки из вашего реестра.
Модель без ключа не используется. Остальные модели продолжают работать. Это правило одинаково для всех перечисленных ниже источников.
Окружение и .env
Если отдельное хранилище не настроено, брокер сначала читает переменные окружения,
а затем файл .env из рабочего каталога. Значение из переменной окружения имеет
приоритет. Отсутствие файла не считается ошибкой. Файл разбирается средствами
стандартной библиотеки: поддерживаются строки KEY=VALUE и комментарии #, но
не подстановка переменных. Другой путь можно указать явно:
secrets=llmbroker.Secrets("/etc/llmbroker.env").
Ключи из кода
secrets = llmbroker.DictSecrets({"GROQ_API_KEY": "gsk_..."})
В параметр secrets= также можно передать обычную синхронную или асинхронную
функцию вида (имя) -> значение. Так можно подключить собственное хранилище.
AWS Secrets Manager
Установите дополнительные зависимости llmbroker[aws] (см.
Установка):
from llmbroker.aws import Secrets as AwsSecrets
async with llmbroker.AsyncBroker(
"postgresql://host/db",
secrets=AwsSecrets(region_name="us-east-1"),
) as broker:
reply = await broker.ask("Привет")
По умолчанию используются имена вида llmbroker/{имя ключа}. Префикс можно
изменить в настройках.
HashiCorp Vault
Установите дополнительные зависимости llmbroker[vault]:
from llmbroker.vault import Secrets as VaultSecrets
secrets = VaultSecrets(url="https://vault.example.com", token="s.xxx")
Используется KV v2 и путь llmbroker/{имя ключа}. Точка монтирования задаётся
параметром mount_point=.
Для пользовательских ключей действует дополнительное
правило. В Vault символ / разделяет каталоги, поэтому имя
u-42/GROQ_API_KEY сохраняется в одном сегменте как
u-42__GROQ_API_KEY. Это различие видно только при непосредственном просмотре
Vault. Имена ключей и областей, уже содержащие __, не поддерживаются: их нужно
переименовать.
Ключи в базе данных
Брокер, созданный с подключением к базе данных (Broker("broker.db"), PostgreSQL
или MongoDB), по умолчанию хранит ключи в той же базе. Подробнее см. в разделе
Серверы и кластеры. Источник ключей можно задать отдельно:
# база данных для моделей и журнала, переменные окружения для ключей
llmbroker.AsyncBroker("postgresql://host/db", secrets=llmbroker.Secrets())
Ключи, сохранённые таким образом, теряются при удалении таблиц llmbroker_* —
а именно так устанавливается версия llmbroker, меняющая схему. Выгрузите их
заранее, см. Обновление llmbroker.
Свой ключ на пользователя
В многопользовательском приложении брокер сначала ищет ключ для текущего
пользователя, а затем общий ключ. Пользовательский ключ хранится под именем
<область>/<имя ключа>, например u-42/GROQ_API_KEY. Объект, созданный через
for_scope("u-42"), использует этот ключ вместо общего. Подробнее об областях
данных см. в разделе Многопользовательские приложения.