Обработка запросов и таймаутов
При работе с API больших языковых моделей (OpenAI, Hugging Face, Google AI) программа отправляет запрос на сервер и ждёт ответа. В реальных условиях это ожидание может пойти не так:
- Сервер перегружен и отвечает слишком медленно.
- Слишком много запросов — API временно блокирует клиента (rate limit).
- Нестабильная сеть — соединение рвётся, запрос сбоит.
{"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.
Итог раздела: запросы стабильнее, есть защита от блокировки (rate limits), обработаны таймауты (код не виснет), добавлены автоповторы.
Эмбеддинги и векторные представления
Человек понимает смысл текста благодаря опыту. Машина «понимать» слова не умеет — текст нужно превратить в числа. Эмбеддинг (embedding) — это числовое (векторное) представление текста, которое позволяет AI улавливать смысл слов и предложений.
Простой пример — слова как векторы:
| Слово | Вектор (упрощённо) |
|---|---|
| кошка | [0.5, 0.8, 0.2] |
| собака | [0.4, 0.7, 0.3] |
| кофе | [0.1, 0.2, 0.9] |
Чем ближе числа в векторах, тем ближе слова по смыслу. «Кошка» и «собака» (оба животные) — векторы близки; «кофе» — другое понятие, вектор сильно отличается.
text-embedding-004 выдаёт вектор длиной 768). Три числа выше — лишь иллюстрация идеи.
Где применяются эмбеддинги
- Перевод текста (Google Translate)
- Поиск по смыслу (Google, YouTube, Yandex)
- Рекомендательные системы (Netflix, Spotify, YouTube)
- Распознавание речи и изображений (Siri, Alexa, Google Assistant)
Пример понимания смысла. Фразы «Я люблю программирование» и «Кодинг — это моё хобби» написаны разными словами, но AI по эмбеддингам определит, что они близки по смыслу.
Векторные представления и поиск по смыслу
Задача: есть база отзывов клиентов, нужно найти все отзывы о кофе, даже если само слово «кофе» там не встречается. Как:
- Преобразовать все отзывы в эмбеддинги (векторы).
- Преобразовать запрос «Мне нравится латте» в эмбеддинг.
- AI находит наиболее похожие векторы и возвращает подходящие отзывы.
Это семантический поиск — поиск не по ключевым словам, а по смыслу. «Латте» окажется рядом с «капучино» и «эспрессо», хотя слова разные.
Векторные базы данных
| Инструмент | Что это |
|---|---|
| FAISS (Facebook AI Similarity Search) | Библиотека для быстрого поиска похожих векторов (локально) |
| Pinecone | Облачная векторная база данных |
| Weaviate | База данных с AI-оптимизированным поиском |
IndexFlatIP). Подробнее — на странице Старый vs Новый.