Нейросеть для программирования на Python: как проверять правку
Тому, кто меняет Python-бэкенд с помощью кодового агента
Порядок от постановки задачи до проверенного ответа API
7 мин
Агент исправил ответ API, но соседний сценарий перестал работать
Правка ограничена задачей, тесты проверяют разные входы и итоговый ответ сервиса
Рабочий цикл для Python и FastAPI: окружение, ограниченная задача, тесты API и проверка перед сервером на примере проектов Алексея.
Нейросеть для программирования на Python особенно полезна, когда нужно разобраться в чужом обработчике, связать данные между API и базой либо написать проверку на ошибочный вход. Её ответ нельзя принимать по одному красивому фрагменту кода. В Python приложение часто запускается успешно даже тогда, когда редкая ветка запроса вернёт неверный статус или запишет неполные данные. Я пользуюсь коротким циклом: описать наблюдаемый результат, дать агенту доступ к нужным файлам, проверить изменённый маршрут и только затем смотреть широкий сценарий. Общее сравнение кодовых инструментов есть в статье о нейросетях для программирования; здесь рассматриваю именно Python-бэкенд.
С чего начать в существующем Python-проекте
Сначала установите, что сейчас работает. Откройте README, список зависимостей, команды тестов и расположение входной точки приложения. Проверьте статус Git и сохраните текущую версию до значимой правки. Затем сравните локальную копию с актуальным источником проекта: если рабочий сервер или основной репозиторий ушёл вперёд, задача агенту на старой версии создаст конфликт. Не нужно просить его менять код, пока не понятен настоящий исходный вариант.
Создайте отдельное окружение и установите зависимости так, как принято в проекте. Команды ниже показывают стандартный путь для проекта с requirements.txt; если у вас другой менеджер, используйте его lock-файл. Документация Python по venv и FastAPI по тестам сверена 25 октября 2026 года: venv, FastAPI Testing.
python3 -m venv .venv
. .venv/bin/activate
python -m pip install -r requirements.txt
python -m pip install pytest httpx pip‑audit
python -m pytest -q
uvicorn app:app --host 127.0.0.1Если тесты уже падают до работы агента, сохраните это как исходное состояние. Иначе после правки невозможно честно сказать, какая ошибка появилась сейчас. Если проекта с тестами пока нет, начните с воспроизведения одного API‑запроса на локальном сервере. Для FastAPI запускайте приложение на 127.0.0.1; открывать порт наружу ради пробы не требуется.
Как поставить задачу без выдуманной архитектуры
Хорошее задание называет вход, ожидаемый ответ и границу изменения. Например: «При неверном формате даты API должно вернуть понятную ошибку без записи в базу; при допустимой дате сохранить объект один раз. Перед правкой покажи, где сейчас проверяется вход и какой тест это покрывает». Так агент сначала изучит фактическую схему, затем предложит изменение.
В примере из истории выше изменение ответа API проверяют и по карточке менеджера. Сверьте тезисы разговора и связь с нужной сделкой, а затем посмотрите соседний сценарий.
| До запроса к агенту | Что показать | Что получить на выходе |
|---|---|---|
| Ошибка воспроизводится | Один запрос и текущий ответ | Причина в существующем маршруте |
| Затронута схема ответа | Модель и вызывающий экран | Список зависимых действий |
| Есть запись в БД | Сценарий успеха и отказа | Проверка отсутствия лишней записи |
| Есть рабочий сервер | Текущая версия кода | План правки на свежей копии |
Какие тесты нужны после ответа агента
Минимум три случая: правильный ввод, ошибочный ввод и соседний сценарий, который должен продолжить работать. Для действия записи добавьте повтор того же запроса, если он возможен через сеть. Разбор пограничных входов, включая пустое значение, ноль и дату, есть в статье о приёмке функции.
Для FastAPI официальная документация показывает TestClient и pytest; для запуска этого теста установите также httpx командой выше. Ниже учебный маленький маршрут и тест отказа без записи. В рабочем проекте возьмите настоящие имена моделей и маршрутов из кода.
from datetime import date
from fastapi import FastAPI
from fastapi.testclient import TestClient
from pydantic import BaseModel
app = FastAPI()
saved = []
class Example(BaseModel):
visit_date: date
@app.post('/example')
def create(body: Example):
saved.append(body.visit_date)
return {'ok': True}
client = TestClient(app)
def test_invalid_date_returns_error():
response = client.post('/example', json={'visit_date': 'не дата'})
assert response.status_code == 422
assert saved == []Список saved здесь изображает запись в учебном коде. В рабочем тесте нужно проверить состояние тестовой базы, а не глобальную переменную. Тест правильного входа должен сверять значимые поля ответа, а соседний путь гарантирует, что исправление не задело другую операцию. Я прошу агента сначала показать, какие существующие проверки запускаются, затем добавить ровно те, которые закрывают найденный риск.
Что проверить перед выкладкой Python-сервиса
После теста API откройте экран, который читает его ответ. В Radomir CRM это может быть карточка сделки с разбором звонка. Полный порядок чтения diff и проверки вызовов описан в статье о приёмке функции.
При изменении модели данных отметьте, нужна ли миграция и что произойдёт с уже сохранёнными строками. Не позволяйте агенту тихо менять тип поля, лишь бы прошёл новый тест. База на сервере хранит историю, которой нет в локальном пустом экземпляре. Проверка миграции вынесена в отдельный материал.
python -m pytest -q
python -m pip check
pip‑auditПеред выкладкой Python-сервиса запускайте pip‑audit и разбирайте найденные уязвимости. Служба работает от отдельного пользователя, приложение за nginx слушает 127.0.0.1. Успешный тест API ещё не проверяет доступность административных маршрутов и состояние зависимостей.
Где мой собственный опыт меняет задание агенту
На клиентских проектах Python часто связан с другим интерфейсом. Поэтому я формулирую результат через действие человека: «После звонка разбор появился в нужной карточке, и менеджер видит договорённость». Эта проверка связывает API с рабочим экраном.
Если меняется публичный API, покажите агенту пример запроса и ответа до правки, а затем сохраните итоговый пример. Если данные передаются в фоновую задачу, отдельно проверьте, что повторный запуск не создаёт дубль. Для каждого проекта конкретные поля, имена таблиц и сроки берутся из его кода и согласованного задания. Подставлять их из соседнего кейса нельзя.
| Признак готовности | Где смотреть | Что ещё проверить руками |
|---|---|---|
| Тесты прошли | Вывод pytest | Сценарий в интерфейсе |
| Синтаксис и зависимости целы | pip check, запуск сервиса | Ответ нужного маршрута |
| Diff ограничен задачей | git diff | Не пропали старые проверки |
| Данные сохраняются корректно | Тестовая БД | Повтор и отказ без дубля |
Частые вопросы
Достаточно ли попросить нейросеть написать тесты?
Нет. Дайте исходный сбой и ожидаемый результат, затем прочитайте сами проверки. Тест, который повторяет неверное предположение агента, закрепит ошибку.
Нужно ли знать Python, чтобы принять правку?
Полезно понимать вход и выход операции. Для сложной модели данных привлекайте разработчика; руководитель всё равно может проверить путь человека и сохранность результата.
Почему приложение запускается, а ошибка осталась?
Запуск проверяет загрузку сервиса, но редкая ветка выполняется только при определённом запросе. Воспроизведите именно его на локальной копии.
Можно ли сразу править на VPS?
Лучше работать с актуальной локальной копией, проверять diff и тесты, а затем выкладывать подготовленный результат. Так можно восстановить предыдущую версию.
Что делать, если агент предлагает новую библиотеку?
Попросите объяснить, какую проблему она решает, проверьте текущую официальную документацию и аудит зависимостей. Лишняя зависимость увеличивает поддержку проекта.
На обучении мы разбираем такой цикл на действующем проекте: задача, локальная проверка, просмотр изменения и проверка результата человеком.