Интеграция с API нейросетей: LLM в своём бэкенде
Обновлено: Mon Jul 06 2026 00:00:00 GMT+0000 (Coordinated Universal Time)
Подключение OpenRouter, OpenAI или других LLM к FastAPI: сервисный слой, очереди, кэш, rate limit и обработка ошибок.
Задача
Вынести вызовы LLM в сервисный слой бэкенда: единая точка для моделей, лимитов, логирования и смены провайдера без правок UI.
Шаг 1. Выбор провайдера
| Провайдер | Плюсы |
|-----------|-------|
| OpenRouter | много моделей, один API-ключ |
| OpenAI | стабильность, function calling |
| Локальная LLM | данные не уходят наружу |
Ключ храните в .env (OPENROUTER_API_KEY=), не в коде и не в git.
Шаг 2. Сервисный слой
# services/llm.py — псевдокод
async def complete(prompt: str, *, model: str) -> str:
...
-
Таймаут 60–120 с.
-
Retry только на 429/5xx с backoff.
-
Типизированные ответы (Pydantic) для structured output.
Шаг 3. Очередь и rate limit
-
Ограничение запросов на user_id / IP.
-
Очередь для тяжёлых задач (summary статей пачкой).
-
Idempotency key для повторных submit.
Шаг 4. Кэш
Кэшируйте по hash (model, prompt) для идентичных запросов — экономия бюджета API.
Redis или PostgreSQL с TTL — в зависимости от масштаба.
Шаг 5. Безопасность и PII
-
Не отправляйте в LLM пароли, токены, полные email/телефоны.
-
Маскируйте PII в логах.
-
Audit trail для доступа к персональным данным.
Связанные материалы
Ключевые выводы
LLM — через сервисный слой с таймаутами, retry, rate limit и кэшем. Смена провайдера не должна ломать роутеры API.
FAQ
OpenRouter или прямой OpenAI?
OpenRouter удобен для нескольких моделей одним ключом; прямой API — когда нужен жёсткий SLA.
Как считать стоимость?
Логируйте tokens in/out по модели (без текста запросов с PII) и ставьте лимиты на user.
Нужен ли кэш ответов?
Да, для повторяющихся prompt — экономия бюджета и latency.