Хочешь создать своего собственного персонажа на Character.AI прям из кода Python? Поздравляю! Эта статья точно решит твою проблему.
Эта статья входит в цикл статей по созданию приложений на базе персонажей API Character.AI, если ты не знаком с предыдущими статьями, то в первую очередь прочитай предыдущие.
Начнем с того, что посмотрим как создавать персонажа в используемой нами библиотеке:
Видно, что у функции есть три обязательных аргумента. На самом деле в библиотеке они расписаны достаточно расплывчато, и если ориентироваться на её описание, то не совсем понятно, что писать в третьем аргументе. Сразу раскрою тайну из уже полученного опыта:
- name - здесь все понятно, это имя персонажа. Только стоит подчеркнуть один важный момент, имя должно быть на английском языке и лучше не использовать пробелы;
- greeting - это текст приветствия, т.е. то, что персонаж напишет когда будет здороваться. Но на самом деле это вся его биография. Сюда нужно писать максимально подробное описание персонажа. Описывать можно на русском языке;
- identifier - если вы думали, что при общении будет отображаться значение из поля name, то вы ошибались также, как и я в свое время. 🙂 При общении с персонажем, в консоли будет отображаться имя, которое введено в данном аргументе. Поэтому указывать нужно такое же значение, как в первом аргументе.
Кажется, что все разобрали и можно писать код. Я думаю, вы уже поняли, что мы столкнемся с проблемой. 🙂 Но код все же напишем.
Мы вызвали функцию и присвоили её переменной потому, что нам нужно не просто создать нового героя (персонажа), а получить его идентификатор. Но прежде запустим и посмотрим, что будет в результате.
Получаем какое-то исключение… Я не буду вас водить по всем точкам, которые привели меня к пониманию проблемы. Начну сразу с ошибки. Чтобы её понять, м пошел на сам ресурс character.ai и создал там персонажа, а затем проверил все отправляемые заголовки. В результате ошибка была не в заголовках, а в адресе отправки. Вот так это выглядит в браузере:
А теперь давайте найдем в библиотеке то место, где прописывается адрес. Для этого нажмите клавишу Ctrl и подведите мышку к названию метода create появится подчеркивание.
Теперь просто кликните по нему и откроется код. Сразу переходите к return и обратите внимание на адрес.
Как видишь, в библиотеке появляются какие-то две точки. Это и есть ошибка и нам необходимо просто удалить этот участок.
Теперь запускаем и видим, что все работает. Но общение происходит между двумя случайными персонажами, а нам нужно сделать так, чтобы один из персонажей был наш герой. Как это сделать? В первую очередь обрати внимание, что в этой функции мы передаем экземпляр класса с популярными персонажами.
Но просто так взять и передать на данный момент не получится, т.к.в этой функции идентификатор персонажа извлекается следующим образом:
Нам необходимо понимать, что от нашего персонажа будет приходить словарь, из которого мы будем извлекать его идентификатор, а в данном случае приходит экземпляр класса.
Выходит, что нам нужно просто написать проверку и для каждого случая извлекать идентификатор в соответствии со структурой его объекта. Переписываем:
Не стал вас мучить извлечением структуры по возвращаемому словарю от функции create, сразу написал путь ['character']['external_id'].
Теперь возвращаемся в главный файл и передаем в функцию get_chat первого персонажа вместо аргумента trending_characters словарь, который вернулся при создании нового персонажа.
Можешь попробовать запустить.
Ой, опять ошибка. А все дело в том, что персонажа можно создать только один раз с такими значениями. Все персонажи должны быть уникальны по имени и описанию, поэтому нужно поменять все значения, т.е. создаем абсолютно нового персонажа.
Проверим результат.
Отлично! Теперь все работает и ты можешь создавать своих собственных персонажей. Если тебе интересно, как сделать так, чтобы новые персонажи сохранялись, то пиши в комментариях, я сделаю отдельную статью.
Обязательно подписывайся на канал, если хочешь получать актуальный статьи решающие время от времени твои проблемы.