738ae73ebd61e75a690a8101946595b55b8b5343
🤖 ChatBot - AI Telegram Bot
Интеллектуальный 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
- PostgreSQL 14+
- Ollama с установленной моделью
- Telegram Bot Token (создать через @BotFather)
Установка за 3 шага
1. Клонирование и установка зависимостей
git clone https://github.com/mrleo1nid/ChatBot.git
cd ChatBot
dotnet restore
2. Настройка окружения
Создайте файл ChatBot/.env:
# Database Configuration
DB_HOST=localhost
DB_PORT=5432
DB_NAME=chatbot
DB_USER=postgres
DB_PASSWORD=your_secure_password
# Telegram Bot Configuration
TELEGRAM_BOT_TOKEN=your_telegram_bot_token_here
# Ollama Configuration
OLLAMA_URL=http://localhost:11434
OLLAMA_DEFAULT_MODEL=gemma2:2b
3. Запуск
# Установите AI модель
ollama pull gemma2:2b
# Создайте базу данных
psql -U postgres -c "CREATE DATABASE chatbot;"
# Запустите бота
cd ChatBot
dotnet run
🎉 Готово! Откройте Telegram и найдите вашего бота.
📚 Документация
🎯 Начало работы
- 📋 Обзор проекта - Что такое ChatBot и его возможности
- ⚡ Быстрый старт - Запуск за 5 минут
- 🛠️ Установка и настройка - Подробная инструкция
- ⚙️ Конфигурация - Настройка параметров
🏗️ Архитектура
- 📐 Архитектура проекта - Общая архитектура
- 🏛️ Слои приложения - Детальное описание слоев
- 📊 Модели данных - Структура данных
- 🗄️ База данных - Работа с PostgreSQL
💻 Разработка
- 📁 Структура проекта - Организация кода
- 🤖 Команды бота - Все доступные команды
📖 Полная документация
👉 Перейти к полной документации
🎮 Использование
Команды бота
/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 развертывание
# Сборка образа
docker build -t chatbot:latest .
# Запуск с docker-compose
docker-compose up -d
🧪 Тестирование
# Запуск всех тестов
dotnet test
# С покрытием кода
dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=opencover
# Запуск конкретного теста
dotnet test --filter "FullyQualifiedName~ChatServiceTests"
📈 CI/CD
Проект использует Gitea Actions для автоматизации:
- ✅ Сборка проекта
- ✅ Запуск тестов
- ✅ Анализ кода (SonarQube)
- ✅ Проверка покрытия
Конфигурация: .gitea/workflows/build.yml
🔧 Конфигурация
Основные параметры
| Параметр | Описание | По умолчанию |
|---|---|---|
AI.Temperature |
Креативность ответов (0.0-2.0) | 0.9 |
AI.MaxRetryAttempts |
Макс. попыток повтора | 3 |
AI.EnableHistoryCompression |
Сжатие истории | true |
AI.CompressionThreshold |
Порог сжатия (сообщений) | 20 |
Подробнее: docs/configuration.md
🛠️ Разработка
Структура проекта
ChatBot/
├── ChatBot/ # Основной проект
│ ├── Services/ # Бизнес-логика
│ ├── Data/ # Доступ к данным
│ ├── Models/ # Модели и конфигурация
│ └── Program.cs # Точка входа
├── ChatBot.Tests/ # Тесты
└── docs/ # Документация
Добавление новой команды
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:
builder.Services.AddScoped<ITelegramCommand, MyCommand>();
🤝 Вклад в проект
Мы приветствуем вклад в развитие проекта!
Как внести изменения
- Fork репозитория
- Создайте feature branch (
git checkout -b feature/amazing-feature) - Commit изменения (
git commit -m 'Add amazing feature') - Push в branch (
git push origin feature/amazing-feature) - Откройте Pull Request
Guidelines
- Следуйте существующему стилю кода
- Добавляйте тесты для новой функциональности
- Обновляйте документацию
- Убедитесь, что все тесты проходят
📝 Лицензия
Этот проект распространяется под лицензией MIT. См. LICENSE.txt для подробностей.
🙏 Благодарности
- Telegram Bot API - За отличное API
- Ollama - За возможность использовать локальные LLM
- .NET Community - За мощный фреймворк
📞 Контакты и поддержка
🌟 Roadmap
- Поддержка мультимодальных моделей (изображения)
- Веб-интерфейс для управления ботом
- Метрики и аналитика использования
- Kubernetes deployment манифесты
- Дополнительные команды (история, экспорт)
- Плагинная система для расширений
Сделано с ❤️ используя .NET 9 и Ollama
Description
Languages
C#
99.9%
Dockerfile
0.1%