add docs
All checks were successful
SonarQube / Build and analyze (push) Successful in 3m22s

This commit is contained in:
Leonid Pershin
2025-10-21 05:08:40 +03:00
parent bc1b3c4015
commit e5e69470f8
12 changed files with 3550 additions and 6 deletions

287
README.md
View File

@@ -1,10 +1,46 @@
# ChatBot
# 🤖 ChatBot - AI Telegram Bot
## Настройка окружения
[![.NET](https://img.shields.io/badge/.NET-9.0-blue)](https://dotnet.microsoft.com/)
[![License](https://img.shields.io/badge/license-MIT-green)](LICENSE.txt)
[![PostgreSQL](https://img.shields.io/badge/PostgreSQL-14+-blue)](https://www.postgresql.org/)
1. Создать `.env` файл:
пример
Интеллектуальный Telegram-бот на базе локальных AI моделей (Ollama), построенный на .NET 9 с использованием Clean Architecture.
## ✨ Основные возможности
- 🤖 **AI-интеграция** - Использование локальных LLM через Ollama (gemma2, llama3, mistral)
- 💬 **Telegram Bot** - Полнофункциональный бот с поддержкой команд и групповых чатов
- 💾 **PostgreSQL** - Надежное хранение истории диалогов и сессий
- 🗜️ **История сжатия** - Автоматическая оптимизация длинных диалогов
- 🔄 **Retry механизмы** - Устойчивость к сбоям с экспоненциальным backoff
- 📊 **Health Checks** - Мониторинг состояния всех сервисов
- 🧪 **Высокое покрытие тестами** - 50+ тестовых классов
- 📝 **Serilog** - Структурированное логирование
## 🚀 Быстрый старт
### Требования
- [.NET 9.0 SDK](https://dotnet.microsoft.com/download/dotnet/9.0)
- [PostgreSQL 14+](https://www.postgresql.org/download/)
- [Ollama](https://ollama.ai/) с установленной моделью
- Telegram Bot Token ([создать через @BotFather](https://t.me/botfather))
### Установка за 3 шага
#### 1. Клонирование и установка зависимостей
```bash
git clone https://github.com/mrleo1nid/ChatBot.git
cd ChatBot
dotnet restore
```
#### 2. Настройка окружения
Создайте файл `ChatBot/.env`:
```env
# Database Configuration
DB_HOST=localhost
DB_PORT=5432
@@ -16,5 +52,244 @@ DB_PASSWORD=your_secure_password
TELEGRAM_BOT_TOKEN=your_telegram_bot_token_here
# Ollama Configuration
OLLAMA_URL=https://sample.api.home/
OLLAMA_DEFAULT_MODEL=gemma3:4b
OLLAMA_URL=http://localhost:11434
OLLAMA_DEFAULT_MODEL=gemma2:2b
```
#### 3. Запуск
```bash
# Установите AI модель
ollama pull gemma2:2b
# Создайте базу данных
psql -U postgres -c "CREATE DATABASE chatbot;"
# Запустите бота
cd ChatBot
dotnet run
```
🎉 **Готово!** Откройте Telegram и найдите вашего бота.
## 📚 Документация
### 🎯 Начало работы
- [📋 Обзор проекта](docs/overview.md) - Что такое ChatBot и его возможности
- [⚡ Быстрый старт](docs/quickstart.md) - Запуск за 5 минут
- [🛠️ Установка и настройка](docs/installation.md) - Подробная инструкция
- [⚙️ Конфигурация](docs/configuration.md) - Настройка параметров
### 🏗️ Архитектура
- [📐 Архитектура проекта](docs/architecture/overview.md) - Общая архитектура
- [🏛️ Слои приложения](docs/architecture/layers.md) - Детальное описание слоев
- [📊 Модели данных](docs/architecture/data-models.md) - Структура данных
- [🗄️ База данных](docs/architecture/database.md) - Работа с PostgreSQL
### 💻 Разработка
- [📁 Структура проекта](docs/development/project-structure.md) - Организация кода
- [🤖 Команды бота](docs/api/bot-commands.md) - Все доступные команды
### 📖 Полная документация
**👉 [Перейти к полной документации](docs/README.md)**
## 🎮 Использование
### Команды бота
```
/start - Начать работу с ботом
/help - Показать справку
/clear - Очистить историю диалога
/settings - Показать текущие настройки
/status - Проверить статус бота
```
### Пример диалога
```
Вы: Привет!
Бот: Привет! Как дела? 😊
Вы: Расскажи анекдот
Бот: Программист ложится спать...
Ставит рядом два стакана:
один с водой — если захочет пить,
другой пустой — если не захочет 😄
```
## 🏗️ Технологический стек
### Backend
- **Runtime:** .NET 9.0
- **Language:** C# 13
- **Architecture:** Clean Architecture, SOLID
### Основные библиотеки
- **Telegram.Bot** 22.7.2 - Telegram Bot API
- **OllamaSharp** 5.4.7 - Ollama клиент для AI
- **Entity Framework Core** 9.0.10 - ORM
- **Npgsql** 9.0.4 - PostgreSQL провайдер
- **Serilog** 4.3.0 - Логирование
- **FluentValidation** 12.0.0 - Валидация
### Тестирование
- **xUnit** 2.9.3 - Тестовый фреймворк
- **Moq** 4.20.72 - Моки и стабы
- **FluentAssertions** 8.7.1 - Assertions
- **Coverlet** 6.0.4 - Code coverage
## 📊 Архитектура
```
┌─────────────────────────────────────┐
│ Telegram Bot Layer │
│ (Commands, Handlers) │
├─────────────────────────────────────┤
│ Service Layer │
│ (ChatService, AIService) │
├─────────────────────────────────────┤
│ Data Access Layer │
│ (Repositories, DbContext) │
├─────────────────────────────────────┤
│ Infrastructure │
│ (PostgreSQL, Ollama, Telegram) │
└─────────────────────────────────────┘
```
**Принципы:**
- Clean Architecture
- SOLID принципы
- Dependency Injection
- Repository Pattern
- Command Pattern для команд бота
## 🐳 Docker развертывание
```bash
# Сборка образа
docker build -t chatbot:latest .
# Запуск с docker-compose
docker-compose up -d
```
## 🧪 Тестирование
```bash
# Запуск всех тестов
dotnet test
# С покрытием кода
dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=opencover
# Запуск конкретного теста
dotnet test --filter "FullyQualifiedName~ChatServiceTests"
```
## 📈 CI/CD
Проект использует Gitea Actions для автоматизации:
- ✅ Сборка проекта
- ✅ Запуск тестов
- ✅ Анализ кода (SonarQube)
- ✅ Проверка покрытия
Конфигурация: [`.gitea/workflows/build.yml`](.gitea/workflows/build.yml)
## 🔧 Конфигурация
### Основные параметры
| Параметр | Описание | По умолчанию |
|----------|----------|-------------|
| `AI.Temperature` | Креативность ответов (0.0-2.0) | 0.9 |
| `AI.MaxRetryAttempts` | Макс. попыток повтора | 3 |
| `AI.EnableHistoryCompression` | Сжатие истории | true |
| `AI.CompressionThreshold` | Порог сжатия (сообщений) | 20 |
**Подробнее:** [docs/configuration.md](docs/configuration.md)
## 🛠️ Разработка
### Структура проекта
```
ChatBot/
├── ChatBot/ # Основной проект
│ ├── Services/ # Бизнес-логика
│ ├── Data/ # Доступ к данным
│ ├── Models/ # Модели и конфигурация
│ └── Program.cs # Точка входа
├── ChatBot.Tests/ # Тесты
└── docs/ # Документация
```
### Добавление новой команды
```csharp
public class MyCommand : TelegramCommandBase
{
public override string Command => "mycommand";
public override string Description => "Описание команды";
public override async Task<ReplyInfo> ExecuteAsync(TelegramCommandContext context)
{
return new ReplyInfo { Text = "Ответ" };
}
}
```
Зарегистрируйте в `Program.cs`:
```csharp
builder.Services.AddScoped<ITelegramCommand, MyCommand>();
```
## 🤝 Вклад в проект
Мы приветствуем вклад в развитие проекта!
### Как внести изменения
1. Fork репозитория
2. Создайте feature branch (`git checkout -b feature/amazing-feature`)
3. Commit изменения (`git commit -m 'Add amazing feature'`)
4. Push в branch (`git push origin feature/amazing-feature`)
5. Откройте Pull Request
### Guidelines
- Следуйте существующему стилю кода
- Добавляйте тесты для новой функциональности
- Обновляйте документацию
- Убедитесь, что все тесты проходят
## 📝 Лицензия
Этот проект распространяется под лицензией MIT. См. [LICENSE.txt](LICENSE.txt) для подробностей.
## 🙏 Благодарности
- [Telegram Bot API](https://core.telegram.org/bots/api) - За отличное API
- [Ollama](https://ollama.ai/) - За возможность использовать локальные LLM
- [.NET Community](https://dotnet.microsoft.com/) - За мощный фреймворк
## 📞 Контакты и поддержка
- 🐛 [Сообщить о проблеме](https://github.com/mrleo1nid/ChatBot/issues)
- 💡 [Предложить улучшение](https://github.com/mrleo1nid/ChatBot/issues)
- 📖 [Документация](docs/README.md)
## 🌟 Roadmap
- [ ] Поддержка мультимодальных моделей (изображения)
- [ ] Веб-интерфейс для управления ботом
- [ ] Метрики и аналитика использования
- [ ] Kubernetes deployment манифесты
- [ ] Дополнительные команды (история, экспорт)
- [ ] Плагинная система для расширений
---
**Сделано с ❤️ используя .NET 9 и Ollama**