Пишем программу для обучения английскому языку с помощью OpenAI API

Хочу описать процесс создания приложения, которое работает с OpenAI API. Идея приложения возникла из потребности улучшить мой английский язык. Как говорится, если у вас есть молоток, то все проблемы выглядят как гвозди. Так как я программист, я решил написать Искусственный Интеллект, который будет заменять учителя английского языка.

Сценарий взаимодействия с приложением следующий: ученик задает тему урока, ИИ-учитель предоставляет список основных слов по теме. Ученик может спрашивать значение слов, которые ему не знакомы, ИИ-учитель предоставляет значения слов и примеры их использования. Затем ИИ-учитель вступает в диалог с учеником по заданной теме, ученик может отвечать на вопросы и задавать свои вопросы. ИИ-учитель также находит ошибки в ответах ученика.

Изначально я думал о создании полноценного веб-сервиса, на котором любой желающий сможет зарегистрироваться, привязать свою карту и начать обучение с ИИ-учителем. Однако в итоге, я решил начать с прототипа: консольного приложения на Rust, с которым можно будет вести диалог из терминала. Но потом я немного остыл от этой идеи, так как реализация полноценного сервиса требует открытия юридического лица, заключения договора с банком для обработки карт клиентов, аренды облака для сервера, разработки веб-версии ИИ-учителя и инвестиций в рекламную кампанию.

Я, конечно, могу выполнить все эти задачи, но создание такого сервиса будет достаточно долгим и необходимы значительные инвестиции. А сделать это на коленке и потерять свое время, и не иметь возможности составить конкуренцию с аналогичными стартапами из США, которые имеют достаточные средства на рекламу и развитие, неинтересно.

Вернемся к тонкостям реализации данного приложения. Для того чтобы получить список основных слов по теме, нужно выполнять запрос «completions» к OpenAI API. Этот запрос возвращает логическое завершение текста, который вы ему передадите, например, список основных слов по теме урока.

В итоге, методом проб и ошибок у меня получился запрос, который посылает программа, он выглядит следующим образом:

Give list of words linked with the subject "_TOPIC_". Words should comma separated. Only words.

Где _TOPIC_ — тема урока с ИИ-учителем. Результатом работы этого запроса будет список слов, разделенных запятой, по нужной вам теме.

Далее по логике приложения необходимо было дать объяснение словам, которые не знает ученик. Получился следующий запрос:

Give answer what is "_WORD_" from the field "_TOPIC_".

Где _WORD_ — слово, которое требует объяснения, _TOPIC_ — тема урока. В ответ вы получите 1-2 предложения, объясняющие данное слово.

Для наглядности, необходимо сгенерировать примеры использования данного слова. У меня получились следующие два запроса:

Give sentence with word "_WORD_" in field "_TOPIC_".

Give rude sentence with word "_WORD_" in field "_TOPIC_".

На каждый из них я получил два разных предложения, в которых демонстрируется использование слова. Первое — общего характера, второе — немного с агрессией, для разнообразия, так сказать.

Далее приложение должно вступить в диалог с учащимся. Один из самых простых способов — это использовать список слов по теме урока и задать вопрос, используя его. У меня получился следующий запрос к OpenAI API:

Give _QUESTION_TYPE_. About "_TOPIC_". Use word "_WORD_". Do not use word "_TOPIC_".

Где _QUESTION_TYPE_ — тип вопроса, который выбирается случайным образом из списка:

  1. Yes/No question

  2. Wh-question

  3. Choice question

  4. Open-ended question

  5. Hypothetical question

  6. Leading question

  7. Rhetorical question

  8. Funnel question

  9. Probing question

  10. Clarifying question

  11. Follow-up question

  12. Forced-choice question

  13. Matching question

  14. Categorical question

  15. Comparison question

  16. Rude question

  17. Polite question

Что позволяет генерировать всегда разные вопросы даже при многократном прохождении урока по одной и той же теме.

При том в этом запросе я добавил в конец «Do not use word «_TOPIC_», чтобы в каждом вопросе от учителя не было слова с упоминанием темы урока, а то все предложения будут одинаковыми. И выглядит это очень не естественно.

Далее стоит задача определить, есть ли ошибки в ответе ученика. Для этого у OpenAI API есть запрос «edits». Он позволяет взять кусок текста и изменить в него. Там два параметра: исходный текст и то, что с ним надо сделать. В итоге, я, вызывая эту функцию, передавал текст ответа ученика и следующую строку:

Fix grammar and spelling.

На выходе я получал строку с исправленным текстом. Если она не совпадала с тем что писал ученик, то я считал, что он ошибся, и выводил исправленный вариант.

В случае, когда ученик игнорирует вопрос ИИ-учителя и пишет в ответ свой вопрос, или отвечая на него, добавляет еще и свой, то я через OpenAI API «completions» генерирую ему ответ такой строкой:

Give _SENTENCE_TYPE_ answer on text: _STUDENT_QUESTION_.

Где _STUDENT_QUESTION_ — текст с вопросом учащегося, а _SENTENCE_TYPE_ — тип утвердительного предложения который выбирается случайным образом из следующего списка:

  1. Declarative

  2. Imperative

  3. Assertive

  4. Optative

  5. Exhortative

  6. Descriptive

  7. Expository

  8. Complex

  9. Polite

  10. Rude

Таким образом, даже на одни и те же вопросы ИИ-учитель всегда дает разный ответ, что вносит разнообразие во время общения.

Код консольной программы ИИ-учителя можно посмотреть здесь. Код библиотеки работающей с OpenAI API можно посмотреть здесь.

Ну и наконец, пример взаимодействия с этой программой, которая заменяет учителя английского языка:

Please enter a topic of the lesson:

hotel

Words of lesson:

  1. Lodging

  2. Accommodation

  3. Suite

  4. Room

  5. Reception

  6. Concierge

  7. Check-in

  8. Check-out

  9. Amenities

  10. Restaurant

  11. Bar

  12. Pool

  13. Spa

  14. Gym

  15. Valet

  16. Bellhop

Do you know all these words? Say: Yes or write unknown words comma separated:

bellhop, valet

Bellhop

A bellhop is a hotel employee who assists guests with their luggage and other needs. They are usually the first person a guest sees when they arrive at the hotel. Example 1: The bellhop carried our luggage to our room in the hotel. Example 2: «Hey bellhop, why are you so slow? Hurry up and get my bags to my room!»

Valet

Valet is a service offered by some hotels where a guest can have their car parked and retrieved by a hotel employee. Example 1: The hotel valet was very helpful in parking our car. Example 2: «If you can’t do your job as a valet in this hotel, then you should find another job.»

What type of establishment typically offers a variety of food and beverages for customers to enjoy?

I think it is restraunt.

I think it is restaurant. < grammar fixes

What is the process for check-in at a lodging establishment?

You need show a passport and student card. Is it correct?

You need to show a passport and student card. Is it correct? < grammar fixes

Yes, it is correct that you need to show a passport and student card in order to prove your identity and student status. Depending on the situation, you may need to provide additional documents such as a birth certificate or proof of address.

What kind of lodging would you prefer?

I prefer room with toulet and shower. If I visit hotel with wife then I prefer one big bad for two.

I prefer room with toilet and shower. If I visit hotel with wife then I prefer one big bad for two. < grammar fixes

What is the average wait time at the reception desk?

Usually it could take not more 5 minutes.

Usually it could take not more than 5 minutes. < grammar fixes

What services does a concierge provide?

You could ask a concierge call you at 7:00 am to wake you tommorow.

You could ask a concierge to call you at 7:00 am to wake you tomorrow. < grammar fixes

What kind of accommodation can you find when you travel?

When I travel I usualy take apartmant in hotel.

When I travel I usually take an apartment in a hotel. < grammar fixes

Do you have a swimming pool at your accommodation?

No We do not have swimming pool at the hotel.

No, we do not have a swimming pool at the hotel. < grammar fixes


ссылка на оригинал статьи https://habr.com/ru/post/712596/

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *