Вайбкодинг — подход к разработке, при котором вы описываете задачу на естественном языке, а ИИ-агент генерирует работающий код. Python для этого подходит хорошо: читаемый синтаксис, устоявшиеся паттерны и огромная экосистема, по которой у моделей много примеров. Ниже — как собрать стек, настроить проект под агента и не потерять данные.
Что такое вайбкодинг и зачем это вообще
Термин ввёл Андрей Карпатый в начале 2025 года. Идея: не писать каждую строку руками, а описать, что нужно, дать ИИ сгенерировать код, проверить результат и итерировать.
Это не замена опыту, а усилитель. Опытный разработчик с агентом закрывает рутину заметно быстрее. Начинающий получает код, который неожиданно работает, но легко ломается.
Главный принцип: ИИ пишет код, разработчик понимает его и отвечает за него.
ИИ-инструменты для вайбкодинга на Python
Cursor: IDE с ИИ-агентом
Cursor — форк VS Code со встроенным ИИ:
- Agent: читает проект, выполняет многошаговые задачи, правит несколько файлов;
- Chat: вопросы по коду с контекстом открытых файлов;
- Tab: предсказание следующей строки или блока;
- @-упоминания:
@file,@folder,@web,@docs— управление контекстом.
Сайт: cursor.com. Есть бесплатный план и платные тарифы; модели можно выбирать от разных провайдеров — для сложных задач берите самую сильную доступную модель, для рутины — более быструю.
Claude Code: агент в терминале
Claude Code (Anthropic) — агент командной строки:
# Установка
npm install -g @anthropic-ai/claude-code
# Запуск в папке проекта
claude
# Или сразу с задачей
claude "добавь эндпоинт для получения пользователей с фильтрацией по роли"
Агент сам читает файлы, понимает структуру, пишет код и запускает тесты. Хорошо подходит для рефакторинга, новых фич и отладки.
Windsurf: альтернатива Cursor
Windsurf (ранее Codeium) — AI-редактор с агентом Cascade. По возможностям близок к Cursor, есть бесплатный план.
Другие инструменты
- GitHub Copilot — автодополнение и агентный режим в VS Code и JetBrains;
- Replit Agent — разработка и деплой прямо в браузере;
- v0 — быстрое создание UI (фронтенд);
- Bolt.new — fullstack-прототипы в браузере.
Оптимальный Python-стек для вайбкодинга
Управление пакетами: uv
uv от Astral быстро стал выбором по умолчанию для новых проектов: он заметно быстрее pip, сам управляет версиями Python, виртуальным окружением и lock-файлом.
# Установка uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# Новый проект
uv init myproject
cd myproject
# Зависимости (вместо pip install)
uv add "fastapi[standard]" sqlmodel
# Запуск
uv run python main.py
Для вайбкодинга это важно: агент не ждёт медленной установки, а uv.lock фиксирует версии, так что «у меня работает» воспроизводится.
Веб-фреймворк: FastAPI
FastAPI — частый выбор для вайбкодинга на Python:
- async/await из коробки;
- автоматическая документация (Swagger на
/docs); - Pydantic для валидации — модели ИИ пишет уверенно;
- компактный и читаемый код.
# main.py
from fastapi import FastAPI
from pydantic import BaseModel, EmailStr
app = FastAPI(title="My API", version="1.0.0")
class UserCreate(BaseModel):
name: str
email: EmailStr # нужен пакет email-validator, он входит в fastapi[standard]
role: str = "user"
class UserResponse(BaseModel):
id: int
name: str
email: str
role: str
@app.get("/")
async def root():
return {"message": "API работает"}
@app.post("/users", response_model=UserResponse)
async def create_user(user: UserCreate):
# ИИ добавит логику сохранения в БД
...
@app.get("/users/{user_id}", response_model=UserResponse)
async def get_user(user_id: int):
...
Запуск:
uv run fastapi dev main.py
# Открыть http://127.0.0.1:8000/docs — интерактивная документация
База данных: SQLModel
SQLModel (от автора FastAPI Себастьяна Рамиреса) объединяет SQLAlchemy и Pydantic: одна модель служит и таблицей, и схемой API.
from typing import Optional
from sqlmodel import SQLModel, Field, Session, create_engine, select
class User(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
name: str
email: str = Field(unique=True)
role: str = Field(default="user")
class UserCreate(SQLModel):
name: str
email: str
role: str = "user"
DATABASE_URL = "sqlite:///./app.db" # или postgresql+psycopg://...
engine = create_engine(DATABASE_URL)
SQLModel.metadata.create_all(engine)
def create_user(user: UserCreate) -> User:
with Session(engine) as session:
db_user = User.model_validate(user)
session.add(db_user)
session.commit()
session.refresh(db_user)
return db_user
def get_users(role: Optional[str] = None) -> list[User]:
with Session(engine) as session:
query = select(User)
if role:
query = query.where(User.role == role)
return list(session.exec(query).all())
В продакшене вместо create_all используйте миграции Alembic (ниже).
Тестирование: pytest + httpx
uv add --dev pytest httpx
# tests/test_api.py
from fastapi.testclient import TestClient
from main import app
client = TestClient(app)
def test_root():
response = client.get("/")
assert response.status_code == 200
def test_create_user():
response = client.post("/users", json={
"name": "Иван",
"email": "ivan@example.com"
})
assert response.status_code == 200
assert response.json()["name"] == "Иван"
Попросите ИИ: «напиши тесты для всех эндпоинтов с edge-кейсами» — и обязательно прочитайте, что именно они проверяют.
Настройка проекта под вайбкодинг
Файл правил для ИИ
Cursor читает правила из .cursor/rules/ (старый формат — .cursorrules в корне), Claude Code — CLAUDE.md, многие агенты — AGENTS.md. Пример содержимого:
# Правила проекта
## Стек проекта
- Python 3.12+
- FastAPI + Uvicorn
- SQLModel + SQLite (dev) / PostgreSQL (prod)
- uv для управления пакетами, pytest для тестов
## Правила кода
- Типизируй все функции (type hints)
- Входные данные валидируй через Pydantic-модели
- Синхронный SQLModel — только в обычных def-эндпоинтах, не в async def
- Для каждой новой фичи пиши тест в tests/
- Ошибки возвращай через HTTPException с понятным сообщением
- Секреты только из переменных окружения
## Структура проекта
app/api, app/models, app/services, app/core, tests/, main.py
## Что запрещено
- print() для отладки — используй logging
- Any там, где можно указать тип
- DROP, TRUNCATE и downgrade миграций без подтверждения в чате
Структура проекта
myproject/
├── .cursor/rules/ # Правила для Cursor
├── CLAUDE.md # Правила для Claude Code
├── pyproject.toml # Зависимости (uv)
├── uv.lock
├── .env # Секреты (НЕ в git)
├── .env.example # Шаблон без секретов (в git)
├── app/
│ ├── api/
│ ├── models/
│ ├── services/
│ └── core/
│ ├── config.py
│ └── database.py
├── tests/
└── main.py
Популярные дополнения к стеку
Celery + Redis: фоновые задачи
uv add "celery[redis]"
# tasks.py
from celery import Celery
celery_app = Celery("tasks", broker="redis://localhost:6379/0")
@celery_app.task
def send_email(user_id: int, template: str):
...
Alembic: миграции базы данных
uv add alembic
uv run alembic init migrations
Попросите ИИ: «создай миграцию Alembic для добавления колонки phone в таблицу users» — и проверьте сгенерированный файл до alembic upgrade head.
Loguru: логирование
from loguru import logger
logger.info("Сервер запущен")
logger.error("Ошибка подключения к БД: {error}", error=str(e))
pydantic-settings: конфигурация
uv add pydantic-settings
# app/core/config.py
from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
model_config = SettingsConfigDict(env_file=".env")
DATABASE_URL: str = "sqlite:///./app.db"
SECRET_KEY: str
DEBUG: bool = False
CORS_ORIGINS: list[str] = ["http://localhost:3000"]
settings = Settings()
Эффективные промпты для Python-разработки
Плохой промпт:
«Сделай API»
Хороший промпт:
«Добавь эндпоинт
POST /ordersв FastAPI. Принимает user_id (int), product_id (int), quantity (int, min=1). Проверь наличие пользователя и продукта через SQLModel, если нет — 404. Сохрани заказ в таблицу orders со статусомpending. Верни OrderResponse с id, статусом и суммой. Напиши 3 теста: успешное создание, несуществующий пользователь, нулевое количество.»
Принципы:
- конкретная задача, а не концепция;
- входные и выходные данные;
- edge-кейсы, которые нужно обработать;
- тесты сразу;
- ссылки на файлы проекта: «смотри модель User в app/models/user.py».
Типичные ошибки вайбкодинга на Python
Ошибка 1: принять код без понимания
ИИ написал сложный код, вы его не понимаете, но деплоите. Через неделю баг в продакшене, и починить его некому. Правило: не понимаете строку — попросите объяснить.
Ошибка 2: накопление технического долга
Соблазн добавлять фичу поверх фичи велик. Регулярно просите ИИ: «проведи ревью текущего кода и предложи рефакторинг».
Ошибка 3: игнорирование безопасности
ИИ не знает ваших требований. Спрашивайте явно: «проверь код на SQL-инъекции», «убедись, что пользователь не получит чужие данные», «добавь rate limiting».
Ошибка 4: потеря данных
Агент может предложить DROP TABLE при рефакторинге, сгенерировать миграцию, которая удаляет колонку с данными, или удалить app.db «для чистоты». Защита — в следующем разделе.
Бэкапы SQLite и PostgreSQL в Python-проекте
В типичном стеке из этой статьи данные лежат в двух местах: локально и на staging — файл app.db (SQLite), в продакшене — PostgreSQL. alembic downgrade откатывает схему, но не возвращает удалённые строки, поэтому перед каждым alembic upgrade head нужна копия базы.
Для SQLite в Python не нужен внешний sqlite3: модуль стандартной библиотеки умеет онлайн-бэкап, который безопасен даже при работающем приложении (в отличие от копирования файла в режиме WAL):
import sqlite3
src = sqlite3.connect("app.db")
dst = sqlite3.connect("backups/app-before-migration.db")
src.backup(dst)
ok = dst.execute("PRAGMA integrity_check").fetchone()[0]
print("integrity:", ok) # ожидаем "ok"
dst.close()
src.close()
Подробнее про .backup, VACUUM INTO и WAL — в статье как сделать бэкап SQLite. Для PostgreSQL — pg_dump по cron с выгрузкой в S3: pg_dump по cron в S3.
Копия на том же диске не спасёт, если агент удалит папку целиком или умрёт сервер. Храните её вне проекта — в S3 или в dbsend, который ведёт версии и показывает diff схемы между ними:
dbsend backup ./app.db -d "$DBSEND_DATABASE_ID" -e sqlite -l "before-alembic-$(date +%F)"
dbsend log "$DBSEND_DATABASE_ID"
Все команды — в документации CLI. И хотя бы раз восстановите копию и запустите на ней тесты — чек-лист в статье как проверить, что бэкап рабочий.
Деплой
Для быстрого старта
- Railway (railway.com) — деплой из GitHub, PostgreSQL в том же проекте;
- Render (render.com) — автодеплой, есть бесплатный план с ограничениями;
- Fly.io — деплой Docker-образов в разных регионах.
Для российской аудитории и оплаты в рублях — Amvera или Coolify на российском VPS, см. аналоги Railway в России.
Для серьёзного проекта
- Coolify (self-hosted) — Heroku-подобная панель на своём сервере;
- VPS + Docker Compose — Timeweb Cloud, Selectel, Beget и другие российские провайдеры;
- Yandex Cloud / VK Cloud — управляемый PostgreSQL и serverless.
Минимальный Dockerfile для FastAPI
FROM python:3.12-slim
WORKDIR /app
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
COPY pyproject.toml uv.lock ./
RUN uv sync --frozen --no-dev
COPY . .
EXPOSE 8000
CMD ["uv", "run", "--no-dev", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Стек 2026 года: итоговая шпаргалка
| Категория | Инструмент | Назначение |
|---|---|---|
| IDE | Cursor / Windsurf | Вайбкодинг |
| ИИ-агент | Claude Code | Терминал |
| Язык | Python 3.12+ | Основной |
| Пакетный менеджер | uv | Зависимости |
| Веб-фреймворк | FastAPI | API |
| ORM | SQLModel / SQLAlchemy 2.0 | База данных |
| БД (dev) | SQLite | Локальная разработка |
| БД (prod) | PostgreSQL | Продакшен |
| Миграции | Alembic | Схема БД |
| Тесты | pytest + httpx | Автотесты |
| Логирование | Loguru | Логи |
| Конфигурация | pydantic-settings | Переменные окружения |
| Фоновые задачи | Celery + Redis | Очереди |
| Деплой | Railway / Fly.io / Coolify / Amvera | Хостинг |
| Мониторинг | Sentry | Ошибки |
| Бэкапы БД | sqlite3.backup / pg_dump + S3 или dbsend | Внешние копии |
Частые вопросы
Вайбкодинг — это для новичков или для опытных?
Для всех, но по-разному. Опытный разработчик ускоряет рутину и прототипирование. Новичок рискует получить код, который работает непонятно почему. Совет новичкам: учите основы Python и FastAPI параллельно.
Какую ИИ-модель выбрать в Cursor?
Модели обновляются каждые несколько месяцев. Для архитектуры и рефакторинга берите самую сильную доступную модель, для мелких правок — быструю и дешёвую. Сравнивайте на своих задачах, а не по рейтингам.
FastAPI или Django для вайбкодинга?
FastAPI — для новых API: код компактнее, документация генерируется автоматически. Django — если нужна админка из коробки, проект контентный или команда уже работает с Django. Подробнее о выборе базы под Django — в статье лучшая база данных для Django.
Можно ли вайбкодить без понимания Python?
Частично. Без основ вы не сможете проверить код, найти баги и развивать проект. Минимум: типы данных, функции, классы, async/await.
Как защитить данные при вайбкодинге с ИИ?
Не давайте агенту продакшен-данные — работайте с тестовой базой. Делайте бэкап перед каждой задачей, которая трогает схему или данные. Ограничьте права пользователя БД, от имени которого работает агент.
uv или Poetry?
Для новых проектов чаще выбирают uv: он быстрее, управляет версиями Python и использует стандартный pyproject.toml. Poetry по-прежнему рабочий вариант, если он уже есть в проекте.



