На цій лекції ми реалізуємо дві функції:
- profile — дозволяє генерувати профіль для свого тіндера
- opener — генерація першого повідомлення незнайомій людині
Крок 1. Генерація Tinder-профілю
За аналогією з режимом gpt, вам потрібно створити 2 функції:- profile() — для обробки команди profile
- profile_dialog() — для обробки повідомлень користувача
- Режим роботи називається «profile».
- Додати боту хендлер для команди profile.
- Додати виклик функції profile_dialog у функцію hello.
Крок 2. Збір інформації про користувача
Для збору інформації про користувача нам знадобиться окремий об'єкт — назвемо його user і розмістимо всередині нашого об'єкта діалог.
dialog = Dialog()
dialog.mode = “main”
dialog.list = []
dialog.user = {}
Крок 3. Ставимо запитання
Давайте почнемо із запитання «Скільки вам років?». Гарне і доречне запитання. Пропоную поставити його наприкінці функції profile:
async def profile(update, context):
dialog.mode = "profile"
…
await send_text(update, context, "Скільки вам років?")
А відповідь на це запитання збережемо в об'єкт user у функції profile_dialog:
async def profile_dialog(update, context):
text = update.message.text
dialog.user["age"] = text
Друге запитання потрібно поставити відразу після відповіді на перше:
async def profile_dialog(update, context):
text = update.message.text
dialog.user["age"] = text
await send_text(update, context, "Ким ви працюєте?")
Крок 4. Обробка великої кількості запитань
А ось відповідь на друге запитання прийде знову у функцію profile_dialog. Щоб вона коректно працювала, нам потрібно ввести лічильник запитань: так вона знатиме, на яке за рахунком запитання надійшла відповідь. Давайте в наш об'єкт dialog додамо ще атрибут count.
dialog = Dialog()
dialog.mode = “main”
dialog.list = []
dialog.user = {}
dialog.count = 0
Ну і заодно в метод profile() додамо очищення об'єкта user і обнулення лічильника запитань:
async def profile(update, context):
dialog.mode = "profile"
text = load_message("profile")
await send_photo(update, context, "profile")
await send_text(update, context, text)
dialog.user.clear()
dialog.count = 0
await send_text(update, context, "Скільки вам років?")
Крок 5. Ставимо 5 запитань
Скільки запитань потрібно поставити? 3 занадто мало, 10 — користувачеві буде нудно відповідати. Пропоную поставити 5 запитань:- Скільки вам років?
- Ким ви працюєте?
- Яке у вас хобі?
- Що вам не подобається в людях?
- Мета знайомства?
text = update.message.text
dialog.count += 1
if dialog.count == 1:
dialog.user["age"] = text
await send_text(update, context, "Ким ви працюєте?")
elif dialog.count == 2:
dialog.user["occupation"] = text
await send_text(update, context, "Чи маєте хоббі?")
elif dialog.count == 3:
dialog.user["hobby"] = text
await send_text(update, context, "Що вам не подобається в людях?")
elif dialog.count == 4:
dialog.user["annoys"] = text
await send_text(update, context, "Мета знайомства?")
elif dialog.count == 5:
dialog.user["goals"] = text
Крок 6. Надсилаємо запит ChatGPT
Ми дізналися інформацію про користувача нашого чат-бота, тепер нам потрібно:- об'єднати її в один рядок,
- відправити його ChatGPT,
- відповідь ChatGPT переслати користувачеві.
async def profile_dialog(update, context):
...
prompt = load_prompt("profile")
user_info = dialog_user_info_to_str(dialog.user)
answer = await chatgpt.send_question(prompt, user_info)
await send_text(update, context, answer)
Що вам потрібно зробити:- викликати цей код після того, як користувач відповів на 5 запитань
- додати підтримку довгих відповідей від ChatGPT: використовуйте edit_text()
Крок 7. Генерація повідомлення для знайомства
За аналогією з режимом gpt вам потрібно створити 2 функції:- opener() — для обробки команди profile
- opener_dialog() — для обробки повідомлень користувача
- Режим роботи називається «opener».
- Додати боту хендлер для команди opener.
- Додати виклик функції opener_dialog у функцію hello.
Крок 8. Ставимо 5 запитань
Щоб написати гарне перше повідомлення, потрібно щось знати про вашу дівчину (або хлопця). Давайте також поставимо 5 запитань. Тільки інших:- Ім'я дівчини?
- Скільки їй років?
- Оцініть її зовнішність: 1-10 балів?
- Ким вона працює?
- Мета знайомства?
async def opener_dialog(update, context):
...
prompt = load_prompt("opener")
user_info = dialog_user_info_to_str(dialog.user)
answer = await chatgpt.send_question(prompt, user_info)
await send_text(update, context, answer)
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ