🔖 Справочник: tenacity, эмбеддинги, FAISS

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

⚡ Минимум для старта

pip install google-genai python-dotenv tenacity numpy faiss-cpu
from tenacity import retry, stop_after_attempt, wait_exponential
from google.genai import types  # для таймаута: HttpOptions(timeout=ms)

Установка

ПакетНазначение
tenacityАвтоповтор запроса (retry) с задержками
numpyРабота с векторами (массивы чисел)
faiss-cpuПоиск похожих векторов (семантический поиск)
scikit-learnTF-IDF и косинусное сходство (пример без API)

Таймаут и повтор запроса

КонструкцияНазначение
from google.genai import typesТипы конфигурации клиента
genai.Client(api_key=..., http_options=types.HttpOptions(timeout=10000))Таймаут клиента (в миллисекундах: 10 000 = 10 с)
@retry(...)Декоратор tenacity: повторять функцию при исключении
stop_after_attempt(3)Не больше 3 попыток
wait_exponential(multiplier=1, min=2, max=10)Пауза растёт экспоненциально (2 → 4 → 8 с, не больше 10)
⚠️ Способ задать таймаут зависит от версии google-genai (через HttpOptions). Сверяйтесь с актуальной документацией SDK.

Получение эмбеддингов (Gemini)

ВызовНазначение
client.models.embed_content(model="text-embedding-004", contents=text)Получить эмбеддинг текста
response.embeddings[0].valuesСам вектор (список чисел)
np.array(values)Превратить в numpy-массив для расчётов
⚠️ Имя модели эмбеддингов (text-embedding-004) и поля ответа зависят от версии SDK; появляются новые модели (например, gemini-embedding-001). Проверяйте по документации.

FAISS — поиск похожих векторов

ВызовНазначение
faiss.IndexFlatL2(dimension)Индекс по евклидову расстоянию (L2); dimension = длина вектора
index.add(embeddings_array)Добавить векторы в индекс
D, I = index.search(query_vec, k)Найти k ближайших: D — расстояния, I — индексы
faiss.IndexFlatIP(dimension)Индекс по скалярному произведению (для косинуса — с нормализацией)
faiss.normalize_L2(arr)Нормализовать векторы (для косинусной близости)