4.3 KiB
4.3 KiB
Архитектура VoIdeaAI
Слои
┌──────────────────────────────────────────────────┐
│ API (FastAPI) │
│ HTTP роуты / Pydantic / OpenAPI / StaticFiles │
│ → Services │
├──────────────────────────────────────────────────┤
│ Services │
│ Бизнес-логика: auth, idea, user, agent, sync │
│ → Integrations, Data │
├──────────────────────────────────────────────────┤
│ Integrations │
│ AI Fallback Chain (YandexGPT → GigaChat) │
│ → Data │
├──────────────────────────────────────────────────┤
│ Tasks (Celery) │
│ Асинхронный анализ идей, прямой вызов при │
│ отсутствии Celery │
│ → Services, Integrations │
├──────────────────────────────────────────────────┤
│ Agents │
│ 11 системных агентов (Doc → Supervisor) │
│ → Services, Integrations │
├──────────────────────────────────────────────────┤
│ Data (SQLAlchemy) │
│ Модели: User, Idea, AgentConfig, BacklogTask, │
│ LogEntry, AgentReport, AgentMetrics │
│ → Core │
├──────────────────────────────────────────────────┤
│ Core │
│ Config, base, exceptions, security, dependencies │
│ Фундамент, не зависит ни от чего │
└──────────────────────────────────────────────────┘
Ключевые решения
| Решение | Выбор | Причина |
|---|---|---|
| БД | PostgreSQL (asyncpg) | Единая БД на всех этапах. VPS Ubuntu. |
| Фронтенд | FastAPI StaticFiles | Без Nginx, без Docker. One process |
| Фоновые задачи | Celery / прямой вызов | Graceful degradation при отсутствии Redis |
| AI провайдеры | FallbackChain: YandexGPT → GigaChat | 2 retry, таймауты |
| Аутентификация | JWT (access + refresh) | Stateless, без сессий |
| Версионирование агентов | A.B.C + SHA256 checksum | Независимое версионирование |
| Деплой | systemd + venv | Напрямую на VPS, без контейнеризации |
DI и зависимости
async def get_db() -> AsyncSession:
async with async_session_maker() as session:
yield session
class IdeaService:
def __init__(self, db: AsyncSession): ...
class AuthService:
def __init__(self, db: AsyncSession, settings: Settings): ...
Правила слоёв
- API не знает про БД — использует
Depends(get_db)и сервисы - Services не импортируют HTTP — работают с бизнес-данными
- Integrations оборачивают внешние API с таймаутами и ретраями
- Data — SQLAlchemy модели без бизнес-логики
- Core — фундамент без внешних зависимостей