7.0 KiB
7.0 KiB
🏗️ Архитектура проекта
📐 Общая архитектура
ChatBot построен на принципах Clean Architecture с четким разделением ответственности.
🔄 Диаграмма слоев
┌─────────────────────────────────────────────┐
│ Presentation Layer │
│ (Telegram Bot, Commands, Handlers) │
├─────────────────────────────────────────────┤
│ Service Layer │
│ (ChatService, AIService, Compression) │
├─────────────────────────────────────────────┤
│ Data Access Layer │
│ (Repositories, DbContext, Entities) │
├─────────────────────────────────────────────┤
│ Infrastructure Layer │
│ (PostgreSQL, Ollama, Telegram) │
└─────────────────────────────────────────────┘
🎯 Принципы проектирования
SOLID
- Single Responsibility - Каждый класс имеет одну ответственность
- Open/Closed - Открыт для расширения, закрыт для модификации
- Liskov Substitution - Интерфейсы взаимозаменяемы
- Interface Segregation - Мелкие специализированные интерфейсы
- Dependency Inversion - Зависимость от абстракций
Design Patterns
- Repository Pattern -
IChatSessionRepository - Dependency Injection - Microsoft.Extensions.DependencyInjection
- Strategy Pattern -
ISessionStorage(In-Memory/Database) - Command Pattern - Telegram команды
- Adapter Pattern -
OllamaClientAdapter
📦 Компоненты системы
1. Presentation Layer
Telegram Bot Integration:
TelegramBotService- Основной сервис ботаTelegramMessageHandler- Обработка сообщенийTelegramCommandProcessor- Обработка командTelegramErrorHandler- Обработка ошибок- Commands:
StartCommand,HelpCommand,ClearCommand, etc.
2. Service Layer
Core Services:
ChatService- Управление диалогамиAIService- Генерация ответов AIHistoryCompressionService- Сжатие историиSystemPromptService- Загрузка системного промптаModelService- Управление AI моделями
Storage Services:
DatabaseSessionStorage- Хранение в БДInMemorySessionStorage- Хранение в памяти
3. Data Access Layer
Repositories:
ChatSessionRepository- Работа с сессиямиChatBotDbContext- EF Core контекст
Entities:
ChatSessionEntity- Сессия чатаChatMessageEntity- Сообщение чата
4. Infrastructure
External Services:
- PostgreSQL - База данных
- Ollama - AI модели
- Telegram Bot API - Telegram интеграция
🔌 Dependency Injection
// Telegram Services
services.AddSingleton<ITelegramBotClient>
services.AddSingleton<ITelegramBotService>
services.AddSingleton<ITelegramMessageHandler>
// Core Services
services.AddSingleton<IAIService, AIService>
services.AddScoped<ChatService>
services.AddScoped<ISessionStorage, DatabaseSessionStorage>
// Data Access
services.AddDbContext<ChatBotDbContext>
services.AddScoped<IChatSessionRepository, ChatSessionRepository>
🔄 Data Flow
Обработка сообщения пользователя
User Message
↓
TelegramBotService (получение update)
↓
TelegramMessageHandler (валидация)
↓
TelegramCommandProcessor (проверка команды)
↓ (если не команда)
ChatService (обработка сообщения)
↓
SessionStorage (получение/создание сессии)
↓
AIService (генерация ответа)
↓
OllamaClient (запрос к AI)
↓
AIService (получение ответа)
↓
ChatService (сохранение в историю)
↓
SessionStorage (сохранение сессии)
↓
TelegramMessageSender (отправка ответа)
↓
User receives response
🗂️ Структура проекта
ChatBot/
├── Common/ # Общие константы
│ └── Constants/
├── Data/ # Слой доступа к данным
│ ├── Interfaces/
│ ├── Repositories/
│ └── ChatBotDbContext.cs
├── Models/ # Модели и конфигурация
│ ├── Configuration/
│ ├── Dto/
│ ├── Entities/
│ └── ChatSession.cs
├── Services/ # Бизнес-логика
│ ├── HealthChecks/
│ ├── Interfaces/
│ ├── Telegram/
│ └── *.cs
├── Migrations/ # EF Core миграции
├── Prompts/ # AI промпты
└── Program.cs # Точка входа
📊 Диаграмма классов (упрощенная)
┌─────────────────────┐
│ ChatService │
├─────────────────────┤
│ + ProcessMessage() │
│ + ClearHistory() │
└──────────┬──────────┘
│
├──> IAIService
├──> ISessionStorage
└──> IHistoryCompressionService
┌─────────────────────┐
│ AIService │
├─────────────────────┤
│ + GenerateChat() │
└──────────┬──────────┘
│
└──> IOllamaClient
🔐 Security Architecture
- Секреты в переменных окружения
- Валидация входных данных
- SQL инъекции предотвращены (EF Core)
- Безопасное логирование (без секретов)
📈 Scalability
Готовность к масштабированию:
- Stateless сервисы
- Database session storage
- Async/await везде
- Connection pooling
- Health checks
🎛️ Configuration Management
Environment Variables → .env
↓
appsettings.json
↓
IOptions<T>
↓
Validation (FluentValidation)
↓
Services