Files
voidea/docs/architecture.md
T

72 lines
4.3 KiB
Markdown

# Архитектура 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 и зависимости
```python
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): ...
```
## Правила слоёв
1. **API** не знает про БД — использует `Depends(get_db)` и сервисы
2. **Services** не импортируют HTTP — работают с бизнес-данными
3. **Integrations** оборачивают внешние API с таймаутами и ретраями
4. **Data** — SQLAlchemy модели без бизнес-логики
5. **Core** — фундамент без внешних зависимостей