Подготовка окружения
# Терминал (Windows PowerShell)
python -m venv venv
venv\Scripts\Activate.ps1
pip install google-genai python-dotenv tenacity numpy faiss-cpu
pip freeze > requirements.txt
Ключ Gemini — из Google AI Studio, в .env (как в уроке 03).
Задание (по лекции)
- Часть А — устойчивые запросы. Функция запроса к Gemini с таймаутом (10 с) и автоповтором (
tenacity, 3 попытки, задержка 2→4→8 с). - Часть Б — эмбеддинги и поиск. Получите эмбеддинги списка из 5–6 фраз и реализуйте семантический поиск через FAISS: по запросу выведите 2 ближайших текста.
- Прикрепите скриншот результата (ответ модели и/или найденные тексты).
Структура проекта
ai-lesson-04/
├── .env # GEMINI_API_KEY=... (в .gitignore!)
├── .gitignore # .env, venv/
├── resilient.py # часть А: таймаут + retry
├── search.py # часть Б: эмбеддинги + FAISS
└── requirements.txt
Каркас решения (часть Б)
# search.py
import os, faiss
import numpy as np
from google import genai
from dotenv import load_dotenv
load_dotenv()
client = genai.Client(api_key=os.getenv("GEMINI_API_KEY"))
def get_embedding(text):
r = client.models.embed_content(model="text-embedding-004", contents=text)
return np.array(r.embeddings[0].values)
texts = ["...", "...", "..."] # ваши 5–6 фраз
emb = np.array([get_embedding(t) for t in texts])
index = faiss.IndexFlatL2(emb.shape[1]); index.add(emb)
q = get_embedding("ваш запрос").reshape(1, -1)
D, I = index.search(q, 2)
print([texts[i] for i in I[0]])
Проверка в VS Code
- Терминал:
python search.py— должны вывестись найденные тексты. - Проверьте «хитрый» запрос: синоним без общих слов с текстами — семантика должна сработать.
- Отладка: точка останова на
index.search, посмотрите массивыDиI.