Найти тему
КиберMamedov 💻🔥

Создаём свой скайнет на базе Character.AI API

Оглавление

Все ведь смотрели терминатор? Помните там говорилось, что скайнет захватит мир? Вот сегодня мы выступим в роли его создателей и создадим свой скайнет на базе Character.AI API. 🙂

Важно! Если вы не читали первые две статьи, то обязательно прочтите начиная с первой. Это важно, т.к. читать данную статью без знаний представленных в первых двух статьях бесполезно. Прочтите и возвращайтесь сюда.

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

Если тебе хочется сохранить вариант, где только ты можешь задавать вопросы боту, то лучше сделай копию файлов.

Оптимизация кода

Первое с чего бы хотелось начать, это с беспокойства того, что наш код не является выразительным, т.е. его тяжело читать. А происходит это потому, что в нем встречается дублирование. Давайте для себя определим одно табу - дублирование кода является злом. Поэтому создадим отдельный файл, который назовем functions.py, где будем хранить все функции используемые в основном файле.

Теперь обратим внимание на проблему в нашем коде:

Дублируемый участок кода
Дублируемый участок кода

Вот это место, где наш код дублируется. Было бы прекрасно, чтобы в данном файле эти 10 строчек кода занимали всего две, которые будут вызывать функцию отправки сообщения. Давайте функцию так и назовем, отправка сообщения (send_message), а в её содержимое вставим верхний участок кода.

Новая функция
Новая функция

Теперь определим аргументы функции. На необходимо передать сообщение и устранить три зависимости: объект чата (chat), имя персонажа (tgt) и экземпляр класса (client).

Сообщение, объект чата и экземпляр класса клиента предлагаю передать в аргументе, а вот имя персонажа мы получим путем оптимизации кода в основном файле. Определим этим два аргумента и давай заменим

Определяем аргументы функции
Определяем аргументы функции

Осталось устранить проблему с именем персонажа. В коде основного файла у нас есть вот такой некрасивый участок кода.

Участок кода требуемый выноса в отдельную функцию
Участок кода требуемый выноса в отдельную функцию

В первую очередь нам необходимо создать еще одну функцию, куда мы вынесем данный код. Давай назовем её get_character_name.

Новая функция для получения имени персонажа
Новая функция для получения имени персонажа

Думаю, что вы уже догадались, что сюда достаточно лишь передать аргумент в виде объекта чата (chat) и мы сможем получать имя вызывая данную функцию даже из send_message, т.к. там есть объект чата (chat).

Еще хотелось бы сделать код более читаемым и убрать эти непонятные индексы в виде 0 и 1, которые используются в списке участников (participants) предлагаю сделать для них понятные константы. В результате вернем имя персонажа.

Внесенный изменения помечены красным цветом
Внесенный изменения помечены красным цветом

Теперь получаем имя персонажа в функции send_message и возвращаем картеж с именем и текстом сообщения персонажа.

Внесенный изменения помечены красным цветом
Внесенный изменения помечены красным цветом

Теперь подключим данные функции в основном файле и оптимизируем его убрав лишнее и заменив на данные функции.

Подключаем
Подключаем

Теперь оптимизируем участок с получением имени персонажа.

Результат оптимизации получения имени
Результат оптимизации получения имени

Далее оптимизируем два участка с отправкой сообщения.

Оптимизация первого участка кода
Оптимизация первого участка кода

Переходим ко второму участку.

Оптимизация второго участка кода
Оптимизация второго участка кода

Код основного файла стал более читаемым. Давай проверим, что ничего н сломалось. Запусти и проверь, чтобы убедиться в том, что нет ошибок.

Все работает
Все работает

Теперь перейдем к нашей основной задаче.

Создаем общение между персонажами

Теперь переходим к самому главному, к созданию общения между персонажами. У нас есть вот эти строчки, которые определяют чат с нашим персонажем.

Определение персонажа
Определение персонажа

Давай их тоже выведем в отдельную функцию по такому же принципу, как две предыдущие.

Создание функции get_chat
Создание функции get_chat

Оптимизируем основной файл.

Подключаем функцию
Подключаем функцию

Теперь оптимизируем строки получение чата.

Получаем чат
Получаем чат

Чтобы у нас было два разных чата, создадим вторую строку и назовем её переменную chat2.

Создали два чата с разными персонажами
Создали два чата с разными персонажами

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

Красным помечены изменения в коде
Красным помечены изменения в коде

Теперь давай запустим.

Персонажи поприветствовали друг друга
Персонажи поприветствовали друг друга

Ура! Персонажи начали общение. Теперь необходимо его продолжить. Перед тем, как перейдем редактированию беконечного цикла, давай задумаемся о том, что сообщения стоит читать с задержкой, поэтому позаботимся о соответствующей библиотеке time, которую заблаговременно подключим в основном файле.

Подключили библиотеку работы со временем
Подключили библиотеку работы со временем

Отсюда нам понадобится функция временного засыпания кода sleep. Теперь перейдем к редактированию кода. Запоминаем, что от второго персонажа нам пришло последнее сообщение, которое сейчас хранится в переменной character_name, давай его присвоим до цикла переменной под названием второй персонаж (second_character_message).

Создали переменную ответов второго пользователя
Создали переменную ответов второго пользователя

Далее в цикле просто создаем запросы для каждого персонажа последовательно, в соответствии с их ответами. Главное поставить задержку секунд в 10.

Красным помечены новые или измененные участки кода
Красным помечены новые или измененные участки кода

Теперь можем проверять.

Ребята общаются на серьезные темы 😀
Ребята общаются на серьезные темы 😀

Воу, эти ребят похоже знают толк в общении 🙂. Все готово! Теперь при каждом перезапуске начинается новое общение с новыми популярными персонажами.

Подписывайся на канал и ставь лайки. Дальше будет интереснее. Переходи к следующей статье по данной теме.