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

Создаём собственного персонажа через API Character.AI

Хочешь создать своего собственного персонажа на Character.AI прям из кода Python? Поздравляю! Эта статья точно решит твою проблему.

Свой собственный персонаж (герой)
Свой собственный персонаж (герой)

Эта статья входит в цикл статей по созданию приложений на базе персонажей API Character.AI, если ты не знаком с предыдущими статьями, то в первую очередь прочитай предыдущие.

Начнем с того, что посмотрим как создавать персонажа в используемой нами библиотеке:

Страница с документацией по функции create
Страница с документацией по функции create

Видно, что у функции есть три обязательных аргумента. На самом деле в библиотеке они расписаны достаточно расплывчато, и если ориентироваться на её описание, то не совсем понятно, что писать в третьем аргументе. Сразу раскрою тайну из уже полученного опыта:

  1. name - здесь все понятно, это имя персонажа. Только стоит подчеркнуть один важный момент, имя должно быть на английском языке и лучше не использовать пробелы;
  2. greeting - это текст приветствия, т.е. то, что персонаж напишет когда будет здороваться. Но на самом деле это вся его биография. Сюда нужно писать максимально подробное описание персонажа. Описывать можно на русском языке;
  3. identifier - если вы думали, что при общении будет отображаться значение из поля name, то вы ошибались также, как и я в свое время. 🙂 При общении с персонажем, в консоли будет отображаться имя, которое введено в данном аргументе. Поэтому указывать нужно такое же значение, как в первом аргументе.

Кажется, что все разобрали и можно писать код. Я думаю, вы уже поняли, что мы столкнемся с проблемой. 🙂 Но код все же напишем.

Написали вызов функции по созданию нового героя
Написали вызов функции по созданию нового героя

Мы вызвали функцию и присвоили её переменной потому, что нам нужно не просто создать нового героя (персонажа), а получить его идентификатор. Но прежде запустим и посмотрим, что будет в результате.

Ошибка
Ошибка

Получаем какое-то исключение… Я не буду вас водить по всем точкам, которые привели меня к пониманию проблемы. Начну сразу с ошибки. Чтобы её понять, м пошел на сам ресурс character.ai и создал там персонажа, а затем проверил все отправляемые заголовки. В результате ошибка была не в заголовках, а в адресе отправки. Вот так это выглядит в браузере:

Анализ POST запроса
Анализ POST запроса

А теперь давайте найдем в библиотеке то место, где прописывается адрес. Для этого нажмите клавишу Ctrl и подведите мышку к названию метода create появится подчеркивание.

Переход к коду метода
Переход к коду метода

Теперь просто кликните по нему и откроется код. Сразу переходите к return и обратите внимание на адрес.

Адрес отправки в библиотеке
Адрес отправки в библиотеке

Как видишь, в библиотеке появляются какие-то две точки. Это и есть ошибка и нам необходимо просто удалить этот участок.

Убрали выход из папки
Убрали выход из папки

Теперь запускаем и видим, что все работает. Но общение происходит между двумя случайными персонажами, а нам нужно сделать так, чтобы один из персонажей был наш герой. Как это сделать? В первую очередь обрати внимание, что в этой функции мы передаем экземпляр класса с популярными персонажами.

Куда необходимо передать идентификатор нашего персонажа
Куда необходимо передать идентификатор нашего персонажа

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

Получение идентификатора случайного персонажа из популярных
Получение идентификатора случайного персонажа из популярных

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

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

Проверка типа данных аргумента и извлечение идентификатора персонажа
Проверка типа данных аргумента и извлечение идентификатора персонажа

Не стал вас мучить извлечением структуры по возвращаемому словарю от функции create, сразу написал путь ['character']['external_id'].

Теперь возвращаемся в главный файл и передаем в функцию get_chat первого персонажа вместо аргумента trending_characters словарь, который вернулся при создании нового персонажа.

Передача словаря со значением идентификатора нового персонажа
Передача словаря со значением идентификатора нового персонажа

Можешь попробовать запустить.

Ошибка
Ошибка

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

Описание нового персонажа
Описание нового персонажа

Проверим результат.

Успех
Успех

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

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