📖 Теория: запросы, таймауты и эмбеддинги

← К оглавлению урока

⚡ Суть

  • API ненадёжны: лимиты, таймауты, ошибки. Защита: задержки, таймаут, повтор с ростом паузы.
  • Эмбеддинг — вектор текста; близость векторов = близость смысла.
  • Семантический поиск ищет по смыслу (FAISS / Pinecone / Weaviate), а не по словам.

Обработка запросов и таймаутов

При работе с API больших языковых моделей (OpenAI, Hugging Face, Google AI) программа отправляет запрос на сервер и ждёт ответа. В реальных условиях это ожидание может пойти не так:

  • Сервер перегружен и отвечает слишком медленно.
  • Слишком много запросов — API временно блокирует клиента (rate limit).
  • Нестабильная сеть — соединение рвётся, запрос сбоит.
Что такое API. Способ взаимодействия программы с внешним сервисом. На успех возвращает данные ({"answer": "..."}), на сбой — ошибку ({"error": "Rate Limit..."}). Код должен корректно обрабатывать оба случая, иначе он «сломается» на первой же ошибке.

Ограничения скорости (rate limits)

API не дают слать неограниченное число запросов. Пример лимитов Gemini 2.0 Flash (из лекции):

ОграничениеЗначение
По запросам2 000 запросов в минуту
По токенам4 000 000 токенов в минуту

Если отправить больше лимита за минуту, API вернёт ошибку «Rate Limit» и временно заблокирует. Решение: добавлять задержки между запросами (например, держать не более 200 запросов в минуту вместо предельных).

⚠️ Конкретные лимиты зависят от модели и тарифа и меняются. Значения выше — из лекции на момент её создания; актуальные смотрите в документации провайдера.

Таймауты: запрос может «зависнуть»

Если сервер перегружен, запрос может зависнуть, и программа будет ждать ответа бесконечно. Решение — таймаут: если ответа нет за N секунд (например, 10), программа прерывает ожидание и обрабатывает ошибку, а не зависает.

Обработка ошибок API (500, 429, 403)

КодЧто значит
500 Internal Server ErrorОшибка на стороне сервера API
403 ForbiddenНеверный API-ключ / нет доступа
429 Too Many RequestsПревышен лимит запросов (rate limit)

Решение — автоматический повтор запроса с увеличением задержки. Часть ошибок (500, 429, сетевые) временные: повтор через паузу часто срабатывает. Для этого удобна библиотека tenacity.

Экспоненциальная задержка (backoff). Между попытками пауза растёт: 2 с → 4 с → 8 с. Это снижает нагрузку на перегруженный сервер и повышает шанс на успех. В примере: 3 попытки максимум.
⚠️ Не повторяйте «вечно» и не повторяйте всё подряд. Ошибку 403 (неверный ключ) повторять бессмысленно — её нужно чинить, а не ретраить. Всегда ограничивайте число попыток.

Итог раздела: запросы стабильнее, есть защита от блокировки (rate limits), обработаны таймауты (код не виснет), добавлены автоповторы.

Эмбеддинги и векторные представления

Человек понимает смысл текста благодаря опыту. Машина «понимать» слова не умеет — текст нужно превратить в числа. Эмбеддинг (embedding) — это числовое (векторное) представление текста, которое позволяет AI улавливать смысл слов и предложений.

Простой пример — слова как векторы:

СловоВектор (упрощённо)
кошка[0.5, 0.8, 0.2]
собака[0.4, 0.7, 0.3]
кофе[0.1, 0.2, 0.9]

Чем ближе числа в векторах, тем ближе слова по смыслу. «Кошка» и «собака» (оба животные) — векторы близки; «кофе» — другое понятие, вектор сильно отличается.

Важно: настоящие эмбеддинги — это не 3 числа, а сотни-тысячи измерений (например, модель text-embedding-004 выдаёт вектор длиной 768). Три числа выше — лишь иллюстрация идеи.

Где применяются эмбеддинги

  • Перевод текста (Google Translate)
  • Поиск по смыслу (Google, YouTube, Yandex)
  • Рекомендательные системы (Netflix, Spotify, YouTube)
  • Распознавание речи и изображений (Siri, Alexa, Google Assistant)

Пример понимания смысла. Фразы «Я люблю программирование» и «Кодинг — это моё хобби» написаны разными словами, но AI по эмбеддингам определит, что они близки по смыслу.

Задача: есть база отзывов клиентов, нужно найти все отзывы о кофе, даже если само слово «кофе» там не встречается. Как:

  1. Преобразовать все отзывы в эмбеддинги (векторы).
  2. Преобразовать запрос «Мне нравится латте» в эмбеддинг.
  3. AI находит наиболее похожие векторы и возвращает подходящие отзывы.

Это семантический поиск — поиск не по ключевым словам, а по смыслу. «Латте» окажется рядом с «капучино» и «эспрессо», хотя слова разные.

Векторные базы данных

ИнструментЧто это
FAISS (Facebook AI Similarity Search)Библиотека для быстрого поиска похожих векторов (локально)
PineconeОблачная векторная база данных
WeaviateБаза данных с AI-оптимизированным поиском
⚠️ Best practice (вне лекции): для эмбеддингов чаще используют косинусную близость (угол между векторами), а не евклидово расстояние. В FAISS для этого векторы нормализуют и берут индекс по скалярному произведению (IndexFlatIP). Подробнее — на странице Старый vs Новый.