На этой лекции мы реализуем две функции: Шаг 5. Задаем 5 вопросов Сколько вопросов нужно задать? 3 слишком мало, 10 – пользователю будет скучно отвечать. Предлагаю задать 5 вопросов:
- 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, "Сколько вам лет?")
- Сколько вам лет?
- Кем вы работаете?
- Какое у вас хобби?
- Что вам не нравится в людях?
- Цель знакомства?
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)
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ