🏠 Домашнее задание

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

⚡ Что сдать (из лекции)

  • Код обработки запросов: таймаут + автоповтор
  • Получение эмбеддингов и/или семантический поиск
  • Скриншот результата

Подготовка окружения

# Терминал (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).

Задание (по лекции)

  1. Часть А — устойчивые запросы. Функция запроса к Gemini с таймаутом (10 с) и автоповтором (tenacity, 3 попытки, задержка 2→4→8 с).
  2. Часть Б — эмбеддинги и поиск. Получите эмбеддинги списка из 5–6 фраз и реализуйте семантический поиск через FAISS: по запросу выведите 2 ближайших текста.
  3. Прикрепите скриншот результата (ответ модели и/или найденные тексты).

Структура проекта

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.

Связь с разделами