От чат прозореца към кода
В уроци 16 и 17 отговорът на модела се четеше от човек. В програма отговорът трябва да влезе в друга функция — да се запише в база, да се покаже в интерфейс, да се провери. За това е нужно извикване по мрежата, а Python от урок 18 е инструментът.
API на езиков модел
Мрежова услуга, на която програмата изпраща промпт и настройки и получава отговор. „API“ е програмен интерфейс: набор от функции, които се извикват отдалечено, а не през бутони.
Ключът
Всяко извикване се придружава от API ключ — дълъг низ, който казва на услугата кой пита, кой плаща и чии лимити се използват. Ключът е като парола, и то такава, с която някой друг може да харчи от ваше име.
- Никога не се записва в кода. Кодът се споделя, показва на проектор, качва в хранилище — ключът не бива да е в него.
- Никога не влиза в git. Разкрит ключ в публично хранилище се намира и използва от чужди хора за минути.
- В Colab се пази в „Secrets“ (иконата с ключето отляво) и се чете с userdata.get("GEMINI_API_KEY").
- В истинско приложение стои в променлива на средата на сървъра и никога не стига до браузъра на потребителя.
Заявка → отговор
Ползваме безплатното ниво на Gemini през Google AI Studio и библиотеката google-genai. Най-късата работеща програма:
from google import genai
from google.colab import userdata
client = genai.Client(api_key=userdata.get("GEMINI_API_KEY"))
otgovor = client.models.generate_content(
model="gemini-2.5-flash",
contents="Какво е първичен ключ? Отговори с едно изречение.",
)
print(otgovor.text)| Какво изпращаме | Какво прави | Къде е в кода |
|---|---|---|
| ключ | удостоверява кой пита | api_key=… |
| модел | кой модел да отговори; бърз и евтин за упражнения | model=… |
| съдържание | промптът — текст или списък от части | contents=… |
| системна инструкция | роля и правила за целия разговор (урок 17) | config=…system_instruction |
| температура | колко разнообразен да е изходът (урок 16) | config=…temperature |
| максимални токени | таван на дължината на отговора | config=…max_output_tokens |
Моделът няма памет
Услугата не помни предишните ви заявки. Ако искате разговор, вие изпращате цялата история всеки път. Оттам следва и че дългият разговор става все по-скъп — всяко ново съобщение носи със себе си всички предишни.
Грешките, които ще срещнете
Заявките по мрежа се провалят понякога — това е нормално. Услугата връща грешка с числов код, а библиотеката я превръща в изключение. Знаете изключенията от C# (try/catch); в Python са try/except.
| Код | Значение | Какво да направим |
|---|---|---|
| 400 | лоша заявка — грешна структура или параметър | проверете аргументите |
| 401 / 403 | невалиден ключ или липсващо право | проверете ключа в Secrets и достъпа на тетрадката |
| 404 | няма такъв модел | вземете актуалното име от документацията |
| 429 | твърде много заявки — лимитът е достигнат | изчакайте и повторете след пауза |
| 500 / 503 | проблем при услугата | повторете след кратко изчакване |
| — (празен отговор) | моделът не е върнал текст, напр. спрян от филтър | проверете otgovor.text, преди да го ползвате |
from google.genai import errors
try:
otgovor = client.models.generate_content(model="gemini-2.5-flash", contents=vapros)
tekst = otgovor.text or "(празен отговор)"
except errors.APIError as e:
tekst = f"Грешка {e.code}: {e.message}"
print(tekst)Цена и безплатното ниво
Услугите таксуват на токени — отделно за вход и за изход (урок 16). За курса ползваме безплатно ниво: ограничен брой заявки в минута и на ден. Стига за упражнения, но налага дисциплина:
- Пробвайте промпта първо в чат прозореца (урок 17), чак после от код.
- Не пускайте цикли по 100 заявки, докато не сте сигурни в кода — първо с една.
- Ограничавайте дължината на отговора с max_output_tokens.
- Пазете отговорите в променлива, вместо да питате пак за същото.
- Ако лимитът за деня свърши — има резервен вариант със записан отговор (задача 5).
Какво трябва да запомниш
- API е програмен интерфейс: програмата изпраща заявка по мрежата и получава отговор — без чат прозорец.
- Ключът е парола, с която се харчи от ваше име: в Secrets на Colab или в променлива на средата, никога в кода и в git.
- Заявката носи модел, съдържание и настройки (системна инструкция, температура, максимални токени); услугата не помни нищо между заявките.
- Грешките са нормални: 401/403 ключ, 404 модел, 429 лимит, 5xx услугата; try/except ги хваща, а празният отговор се проверява.
- Безплатното ниво има лимити в минута и на ден — първо една заявка, после цикъл; винаги с резервен вариант.