Домашка: первый запрос к модели
Домашка
Каждый агент на этом курсе начинается одинаково: код зовёт модель и получает ответ. Сегодня вы сделаете этот первый шаг — и заодно заложите правило, которое выручит все следующие модули: настоящий «мозг» и фальшивый должны быть взаимозаменяемыми. Тогда тесты будут летать без сети и ключей, а боевая подмена — занимать одну строку.
Описание задачи
Создайте репозиторий devbuddy (обычный git-репозиторий), подготовьте в нём venv и пакеты из урока. Затем три файла:
Основная функциональность
fake_llm.py— классFakeLLMс тем же интерфейсом, что уLLMClient: конструктор принимает строкуanswer, методask(prompt)возвращает её, игнорируя промпт.hello.py— функцияmake_llm(): если переменная окруженияLLM_API_KEYнепустая, возвращаетLLMClient, иначе —FakeLLMс заготовкой(фейковый ответ: задайте LLM_API_KEY). Функцияmain()получает модель черезmake_llm(), спрашивает «Ответь одним словом: работает?» и печатаетОтвет модели: <текст>.llm.py— вашLLMClientиз урока (он почти готов, возможно, захотите убрать проверку наLLM_MODEL— оставьте, она полезная).
Дополнительные условия
Ключ встречается только в переменных окружения — ни в одном файле репозитория его быть не должно.
Оба класса (
FakeLLMиLLMClient) имеют методask(prompt: str) -> str— это и есть их «взаимозаменяемость».
Как проверить себя
Положите рядом файл test_hello.py и запустите python -m pytest test_hello.py -v (в окружении, где не задан LLM_API_KEY):
# test_hello.py
from fake_llm import FakeLLM
from hello import make_llm
def test_fake_without_key(monkeypatch):
monkeypatch.delenv("LLM_API_KEY", raising=False)
assert isinstance(make_llm(), FakeLLM)
def test_fake_returns_preset_answer():
fake = FakeLLM("заготовка")
assert fake.ask("любой промпт") == "заготовка"
def test_main_prints_prefix(monkeypatch, capsys):
monkeypatch.delenv("LLM_API_KEY", raising=False)
from hello import main
main()
out = capsys.readouterr().out
assert out.startswith("Ответ модели:")Все три теста зелёные — домашка готова. Тесты проверяют ровно то, что написано в требованиях: подмена работает, заглушка отвечает заготовкой, вывод имеет нужный префикс.
Пример работы программы
Без ключа:
$ python hello.py
Ответ модели: (фейковый ответ: задайте LLM_API_KEY)С настроенной моделью (переменные из урока):
$ python hello.py
Ответ модели: ДаКритерии готовности
python -m pytest test_hello.py -v— три зелёных теста.python hello.pyпечатает ответ: фейковый без ключа, настоящий — с настроенным окружением.Ключа нет ни в одном файле (проверьте себя
git grep -i api_keyпосле первого коммита).Коммит в devbuddy: к концу курса их будет пара десятков.
Что такое AI-агент: скрипт, который сам выбирает следующий шаг
6 мин
Путь курса: от первого запроса к LLM до бота в GitHub Actions
5 мин
Окружение: Python, VS Code и «мозг» для агента
8 мин
Домашка: первый запрос к модели
4 мин
Квиз: Окружение: Python, VS Code и „мозг“ для агента
6 мин