From dfbabbece545db7f6cc81fd19069179e82489596 Mon Sep 17 00:00:00 2001 From: Andey Dogadkin Date: Mon, 8 Apr 2024 23:37:51 +0300 Subject: [PATCH 1/4] Added README and fixed .env.example. --- README.md | 109 +++++++++++++++++++++++++++++++++++++++++- chat_bot/.env.example | 16 +++---- 2 files changed, 116 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 3983095..3f7aaa8 100644 --- a/README.md +++ b/README.md @@ -1 +1,108 @@ -# chat-bot-backend \ No newline at end of file +# 'Хакатон Vink х Практикум март-апрель’24' + +### Задача +Разработать и внедрить чат-бота с технологией GPT +на сайт компании для предоставления консультаций по материалам и +оборудованию, а также оказания помощи клиентам 24/7. + + +### Команда + +[Максим Савилов - developer](https://github.com/msavilov) + +[Андрей Догадкин - developer](https://github.com/AndreyDogadkin) + +### Технологии +- _[Python 3.11.6](https://www.python.org/downloads/release/python-3116/)_ +- _[Django 4.2](https://www.djangoproject.com/download/4.2.11/tarball/)_ +- _[Django Rest Framework](https://pypi.org/project/djangorestframework/)_ +- _[Postgresql 15](https://hub.docker.com/_/postgres)_ Docker-образ +- _[Docker and docker-compose](https://www.docker.com/get-started/)_ +- _[YandexGPT](https://cloud.yandex.ru/ru/docs/yandexgpt/quickstart#console_1)_ +- _[Telegram Bot API]()_ +- _[WhatsApp Business API]()_ + +### Быстрый старт. +* В терминале (командной строке): + ```bash + git clone https://github.com/hackathon-Vink-Team-3/chat-bot-backend.git + ``` +* В терминале (командной строке): + ```bash + cd chat-bot-backend + ``` +* Cоздать файл `.env` в соответствии с шаблоном `.env.example`. +* Перейти в директорию .docker `cd .docker` +* Выполнить команду `docker compose up` + + +### Инструкция по запуска backend'a. +**Без докера** +#### 1. Клонировать репозиторий. +В терминале (командной строке): +```bash +git clone https://github.com/hackathon-Vink-Team-3/chat-bot-backend.git +``` + +#### 2. Перейти в корневой каталог приложения. +В терминале (командной строке): +```bash +cd chat-bot-backend +``` + +#### 3. Создать и активировать виртуальное окружение +В терминале в корневом каталоге приложения, находясь chat-bot-backend: +```bash +# Создать виртуальное окружение +python -m venv venv +``` + +#### 4. Активировать виртуальное окружение для проекта +```bash +# Если Windows: +source venv\Script\activate + +# Если Linux или Mac +source venv\bin\activate +``` + +#### 5. В активированном виртуальном окружении необходимо обновить менеджер пакетов pip и установить зависимости: +```bash +python -m pip install --upgrade pip +pip install -r ./chat-bot/requirements.txt +``` + +#### 6. Далее нужно подготовить проект к запуску. +В корневом каталоге chat-bot-backend создать файл `.env` в соответствии с +шаблоном `.env.example`. + + +#### 7. Выполнить миграции на уровне проекта из директории `/chat-bot/`: + + ```bash + # для OS Lunix и MacOS + python3 manage.py makemigrations && python3 manage.py migrate + + # для OS Windows + python manage.py makemigrations && python manage.py migrate + ``` + +#### 8. Запустить redis: + ```bash + # для MacOS + brew services start redis + ``` + +#### 9. Запуск проекта локально: + + ```bash + # для OS Lunix и MacOS + python3 manage.py runserver + + # для OS Windows + python manage.py runserver + ``` + +### Работа с документацией +- [Swagger](https://vink-chat.ddns.net/api/v1/swagger) +- [Redoc](https://vink-chat.ddns.net/api/v1/redoc) \ No newline at end of file diff --git a/chat_bot/.env.example b/chat_bot/.env.example index b397be3..3532822 100644 --- a/chat_bot/.env.example +++ b/chat_bot/.env.example @@ -1,11 +1,11 @@ # django -SECRET_KEY="" +SECRET_KEY="" # Команды для генерации python manage.py shell -> from django.core.management import utils -> utils.get_random_secret_key() ALLOWED_HOSTS=localhost,127.0.0.1 # telegram_bot -TG_BOT_TOKEN='' +TG_BOT_TOKEN='TGToken' WEBHOOK_SECRET='ExampleSecret' -WEBHOOK_URL='https://4da1-95-25-218-131.ngrok-free.app/tg-bot/' # Временная мера так как нужен https +WEBHOOK_URL='https://4da1-95-25-218-131.ngrok-free.app/tg-bot/' # Пример туннеля для вебхука ТГ Бота # postgres DB_ENGINE=django.db.backends.postgresql_psycopg2 @@ -16,18 +16,18 @@ DB_HOST=db DB_PORT=5432 # redis -REDIS_HOST="127.0.0.1" +REDIS_HOST="redis" Если запуск без докера 127.0.0.1 # cors CORS_ALLOWED_ORIGINS=localhost,http://127.0.0.1:8000 # csrf -CSRF_TRUSTED_ORIGINS=http://*.ddns.net/,https://*.ddns.net/ +CSRF_TRUSTED_ORIGINS=http://*.example.net/,https://*.example.net/ # yagpt -YA_API_URL="" -YA_CATALOG_ID="" +YA_API_URL="https://llm.api.cloud.yandex.net/foundationModels/v1/completion" +YA_CATALOG_ID="ExAmplECatalogId" MODEL_TEMPERATURE=0.5 -MODEL_API_KEY="" +MODEL_API_KEY="ExaPlEToKEN" BASE_PROMPT_TEXT="Ты онлайн консультант компании Vink." BASE_ERROR_ANSWER="Служба поддержки недоступна, попробуйте позже." \ No newline at end of file From 76f99570a38df7c438df930ef65cb9d599985c3d Mon Sep 17 00:00:00 2001 From: Andey Dogadkin Date: Tue, 9 Apr 2024 00:00:37 +0300 Subject: [PATCH 2/4] Added admin message panel, fix admin model setting panel. --- chat_bot/src/apps/chat/admin.py | 21 ++++++++++++++++++++- chat_bot/src/apps/core/admin.py | 2 +- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/chat_bot/src/apps/chat/admin.py b/chat_bot/src/apps/chat/admin.py index 8c38f3f..9c84da5 100644 --- a/chat_bot/src/apps/chat/admin.py +++ b/chat_bot/src/apps/chat/admin.py @@ -1,3 +1,22 @@ from django.contrib import admin -# Register your models here. +from src.apps.chat.models import Message + + +@admin.register(Message) +class MessageAdmin(admin.ModelAdmin): + """Админ панель для сообщений.""" + + list_per_page = 20 + list_max_show_all = 40 + + list_display = ( + "id", + "text", + "sender_type", + "created_date", + "chat", + "dialog", + "user", + ) + list_display_links = ("id",) diff --git a/chat_bot/src/apps/core/admin.py b/chat_bot/src/apps/core/admin.py index ff5df46..a22bc4f 100644 --- a/chat_bot/src/apps/core/admin.py +++ b/chat_bot/src/apps/core/admin.py @@ -5,7 +5,7 @@ @admin.register(YaGptSettings) -class LMSAdmin(admin.ModelAdmin): +class YaGptSettingsAdmin(admin.ModelAdmin): """Админ панель для настроек модели.""" list_display = ( From 642159c4293843bce519aa6e4eed8f5e7493a2ce Mon Sep 17 00:00:00 2001 From: Andey Dogadkin Date: Tue, 9 Apr 2024 00:01:04 +0300 Subject: [PATCH 3/4] Delete ready method from tg bot app. --- chat_bot/src/apps/tg_bot/apps.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/chat_bot/src/apps/tg_bot/apps.py b/chat_bot/src/apps/tg_bot/apps.py index 89c595d..1361531 100644 --- a/chat_bot/src/apps/tg_bot/apps.py +++ b/chat_bot/src/apps/tg_bot/apps.py @@ -4,10 +4,3 @@ class TGBotConfig(AppConfig): default_auto_field = "django.db.models.BigAutoField" name = "src.apps.tg_bot" - - def ready(self): - import os - from src.apps.tg_bot.loader import on_startup - - if os.environ.get("RUN_MAIN"): - on_startup() From 68cb0293970294754d2cbdb5695c6efdb056b431 Mon Sep 17 00:00:00 2001 From: Andey Dogadkin Date: Tue, 9 Apr 2024 00:06:08 +0300 Subject: [PATCH 4/4] Fix tg bot popular questions. --- chat_bot/src/apps/tg_bot/templates.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/chat_bot/src/apps/tg_bot/templates.py b/chat_bot/src/apps/tg_bot/templates.py index 0d58437..ae12cbc 100644 --- a/chat_bot/src/apps/tg_bot/templates.py +++ b/chat_bot/src/apps/tg_bot/templates.py @@ -14,7 +14,7 @@ class BaseTemplates: HELP_MESSAGE = ( "Онлайн-помощник Винк будет стараться предоставить вам консультацию " "по продукции нашей компании. Чтобы получить помощь, просто отправьте " - "свой вопрос или воспользуйтесь предложенными ниже вариантами " + "свой вопрос или воспользуйтесь предложенными ниже категориями " "на клавиатуре.\n\nОбратите внимание, что помощник работает у нас " "недавно, поэтому может ошибаться и иногда уходить от темы. " "Не стоит ругать его за это, так как он активно учится и " @@ -25,11 +25,11 @@ class BaseTemplates: ) NOT_TEXT_MESSAGE = "Я могу ответить только на текстовые сообщения." POPULAR_QUESTIONS = ( - "Как оформить заказ?", - "Какие сроки доставки?", - "Минимальная сумма заказа?", - "Что подойдет для оклейки машины?", - "Как связаться с менеджером?", + "Рулонные материалы", + "Самоклеящиеся плёнки", + "Листовые материалы", + "Чернила", + "Упаковочные материалы", ) STATE_CLEAR = "🔄 Состояние сброшено, теперь вам доступны все команды." CANCEL_CALLBACK = "Вернемся к этому позже 😉"