✅ Решения

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

⚡ Кратко

main.py + .env + .gitignore; ключ через os.getenv; запрос client.models.generate_content.

Часть 1. Ответы

  1. Токен — единица текста (слово/часть слова/символ). Методы: по словам, по символам, по подсловам (subword/BPE — в GPT/Gemini).
  2. Лимит контекста = запрос + ответ вместе. Чем длиннее промпт, тем меньше места на ответ.
  3. Приложение шлёт запрос → API передаёт серверу → модель обрабатывает → возвращает ответ (вы → официант → кухня).
  4. Ключ в коде попадает в git и к посторонним. При утечке: создать новый ключ, отключить старый, включить мониторинг.
  5. Новый: genai.Client(api_key=...) + client.models.generate_content(model=..., contents=[...]); старый — genai.configure() + GenerativeModel(...).generate_content().

Часть 2. Эталон проекта

# .env
GEMINI_API_KEY=ваш_ключ
# .gitignore
.env
.venv/
__pycache__/
# main.py
from google import genai
from dotenv import load_dotenv
import os

load_dotenv()
api_key = os.getenv("GEMINI_API_KEY")
if not api_key:
    raise RuntimeError("GEMINI_API_KEY не задан (.env)")

client = genai.Client(api_key=api_key)
response = client.models.generate_content(
    model="gemini-2.0-flash",
    contents=["Объясни, что такое токенизация, в 3 предложениях."],
)
print(response.text)

Часть 3. Со звёздочкой

# main.py (фрагмент)
prompt = "Объясни токенизацию в 3 предложениях."
n = client.models.count_tokens(model="gemini-2.0-flash", contents=[prompt])
print("Токенов на входе:", n.total_tokens)
try:
    r = client.models.generate_content(model="gemini-2.0-flash", contents=[prompt])
    print(r.text)
except Exception as e:
    print("Ошибка API:", e)
⚠️ Имена полей (total_tokens) и модель сверяйте с актуальным SDK.