Skip to content

Commit

Permalink
Merge pull request #38 from hackathon-Vink-Team-3/dev
Browse files Browse the repository at this point in the history
Fixes
  • Loading branch information
AndreyDogadkin authored Apr 8, 2024
2 parents c4505ae + 68cb029 commit e55b0ef
Show file tree
Hide file tree
Showing 6 changed files with 143 additions and 24 deletions.
109 changes: 108 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,108 @@
# chat-bot-backend
# 'Хакатон 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)
16 changes: 8 additions & 8 deletions chat_bot/.env.example
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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="Служба поддержки недоступна, попробуйте позже."
21 changes: 20 additions & 1 deletion chat_bot/src/apps/chat/admin.py
Original file line number Diff line number Diff line change
@@ -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",)
2 changes: 1 addition & 1 deletion chat_bot/src/apps/core/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@


@admin.register(YaGptSettings)
class LMSAdmin(admin.ModelAdmin):
class YaGptSettingsAdmin(admin.ModelAdmin):
"""Админ панель для настроек модели."""

list_display = (
Expand Down
7 changes: 0 additions & 7 deletions chat_bot/src/apps/tg_bot/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
12 changes: 6 additions & 6 deletions chat_bot/src/apps/tg_bot/templates.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class BaseTemplates:
HELP_MESSAGE = (
"Онлайн-помощник Винк будет стараться предоставить вам консультацию "
"по продукции нашей компании. Чтобы получить помощь, просто отправьте "
"свой вопрос или воспользуйтесь предложенными ниже вариантами "
"свой вопрос или воспользуйтесь предложенными ниже категориями "
"на клавиатуре.\n\nОбратите внимание, что помощник работает у нас "
"недавно, поэтому может ошибаться и иногда уходить от темы. "
"Не стоит ругать его за это, так как он активно учится и "
Expand All @@ -25,11 +25,11 @@ class BaseTemplates:
)
NOT_TEXT_MESSAGE = "Я могу ответить только на текстовые сообщения."
POPULAR_QUESTIONS = (
"Как оформить заказ?",
"Какие сроки доставки?",
"Минимальная сумма заказа?",
"Что подойдет для оклейки машины?",
"Как связаться с менеджером?",
"Рулонные материалы",
"Самоклеящиеся плёнки",
"Листовые материалы",
"Чернила",
"Упаковочные материалы",
)
STATE_CLEAR = "🔄 Состояние сброшено, теперь вам доступны все команды."
CANCEL_CALLBACK = "Вернемся к этому позже 😉"
Expand Down

0 comments on commit e55b0ef

Please sign in to comment.