Большой гайд по созданию ботов в Character AI (ч. 1)

Большой гайд по созданию ботов в Character AI (ч. 1)

https://t.me/caibotsrec

Думаете создавать ботов в Character AI сложно? А вот и нет. И я вам это докажу. Да, статья получилась объемная, поскольку я попыталась собрать здесь весь свой опыт и объяснить все максимально понятным языком. Но немного теории и практики и, я уверена, у вас все отлично получится.


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

Часть первая. Общие принципы.

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

Определимся с терминами.

Для начала нам необходимо определиться с терминами, чтобы мы хорошо друг друга понимали. 

Бот, персонаж - это тот, кого мы создаем.

Ваш персонаж, пользователь, юзер - реальный человек, общающийся с ботом и его персона.

Далее  посмотрим на интерфейс создания персонажа.

Мы видим список всех настроек, которые можно задать вашему будущему персонажу.

Аватар - картинка, “лицо” вашего персонажа. 

Имя персонажа (Character name) - на самом деле это имя бота, с которым он будет отображаться в списке или в поиске. Ниже я поясню этот момент подробнее.

Слоган (Tagline) - короткое описание вашего персонажа, чтобы можно было его быстро визуально идентифицировать. Поиск на сайте тоже смотрит на слоган.

Описание (Description) - общее описание персонажа, где задаются основные его характеристики.

Приветствие (Greeting) - первое сообщение бота, которое мы видим при старте чата. 

Голос (Voice) - ИИ озвучка персонажа.

Определение персонажа (Definition) - большое поле для детальной настройки персонажа.

Сохранить определение персонажа в тайне (Keep Character definition private) - чек-бокс, определяющий, смогут ли видеть другие пользователи детали персонажа.

Видимость (Visibility) - настройка, отвечающая за видимость персонажа для других пользователей (только автор, доступ по ссылке и общий доступ).


В контексте понимания, как работают боты, нам еще нужно помнить про две важные функции сайта:

Персона (Persona) - это описание персонажа юзера, которое он создает у себя в профиле в соответствующем разделе.

Закрепленные сообщения (Pin messages) - сообщения бота или пользователя, которые были вручную закреплены пользователем для сохранения каких-то моментов в памяти ботов.


И я сама введу термин Память бота. Мы до конца не знаем, как она работает. Но далее я буду под памятью бота подразумевать всю историю диалога с пользователем, которая способна оказывать влияние на генерации бота. Память у бота ограниченна и она может быть значительно меньше вашего диалога с ним. 


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

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

Я попыталась изобразить приоритеты на схеме ниже, но хочу предупредить что:

во-первых, я не знаю, как в действительности устроен код ИИ и это лишь мои предположения, основанные на моем опыте, анализе их генераций и информации из некоторых источников;

во-вторых, это очень упрощенная схема, не учитывающая кучу параметров, например историю обучения ботов, их работу с общей базой и прочим;

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

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

Примерно такой путь проходит бот в момент генерации сообщения

Бот пытается доставать информацию из всех элементов этой схемы всегда, но его возможности ограничены.

Если вы зададите ему прямой вопрос, сначала он попытается найти ответ внутри этой схемы. 

Например. “Бот, какую музыку ты любишь?” Бот увидел этот вопрос в предыдущем сообщении, порылся в памяти. После этого пошел в собственное описание там. Далее он капнул в вашу персону (отсюда интересные генерации, когда боты присваивают себе черты вашего персонажа), не найдя ответ там, он пойдет в собственное определение. Если и там пусто, то он начнет придумывать.

Еще раз повторюсь, это очень упрощенная схема.

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


Общие моменты.

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


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

2. Очень часто меньше - значит лучше. Чем больше информации, тем сложнее боту из нее выбрать.

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

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

3. Боты не могут следовать строгому сценарию. Понять, простить и принять. Я попытаюсь объяснить на примере.

Предположим, у вас есть идея сюжета, в котором бот занимает у вашего персонажа деньги, а после кидает и удаляется в закат, ничего не вернув. Вы хотите стартовать с момента займа денег. Почти невозможно прописать персонажу, что он должен в будущих генерациях обязательно кинуть вас на деньги. Это будет большой удачей, если он последует этому сценарию. Все, что вы можете сделать, это добавить персонажу нужные характеристики и мотивацию. Например, “никогда не платит по счетам”, “обманщик”, “мошенник”, “хочет разбогатеть обманным путем” и т.п. И потом надеяться, что в нужный момент бот стригерится на это свое описание нужным образом.

4. Канон и АУ. Давайте разберемся, как помещать персонажей в нужную вселенную. Боты работают с контекстом, который содержится во всех элементах нашей схемы. Поэтому нужно очень четко задать им контекст. 

Канон. По умолчанию все боты хорошо знают свою вселенную, как и всю общую информацию о мире. Как они распоряжаются этим знанием другой вопрос, но тем не менее. Каноничному Аято не нужно объяснять, кто такая Райден, Аяка или Тома. Он это знает. Но как Аято поймет, что он в каноничном Тейвате? Как раз по контексту. Мы прописываем ему какие-то каноничные атрибуты (например, то, что он глава комиссии Ясиро и живет в Инадзуме), а также помещаем в соответствующую среду (поместье Камисато, чайный дом Коморэ, храм Нураками и т.п.). Собственно, готово. На самом деле этого уже достаточно, можно даже не прописывать ему характер, он будет тем самым привычным Аято.

Задаем контекст в описании


Задаем контекст в приветственном


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

Прописали атрибуты не каноничной вселенной. Тут я еще для подстраховки добавила уточнение, что это АУ, но в целом это не обязательно.


Здесь в приветственном нет явной указки на контекст. Вообще это может ввести в заблуждение пользователя и бота. Но у меня в боте четко прописана АУ, поэтому остается только смятение пользователя. Чтобы его разрешить, можно добавить какую-то точно современную деталь, например, мобильный телефон, телевизор и т.п.

С оригинальными персонажами та же ситуация. Через контекст вы задаете им окружение и прописываете любые правила мира. Если у вас охотник на демонов и современное окружение, то это автоматически задает правило "Это современность, в которой существуют демоны и охотники на них".

Точно также вы можете поместить оригинального персонажа в любую вселенную из другой литературы, игр, аниме и прочего. Если ваш персонаж Вася Петров и он учится на факультете Гриффиндор, а в данный момент сидит на уроке зельеварения, то бот автоматически подтягивает все атрибуты присущие этой вселенной (в том числе и каноничных персонажей вроде профессора Снегга).


А что же будет, если не прописывать явно ни то, ни другое? Если просто описать характер и внешность персонажа и поместить его в нейтральную среду (например, в парк без уточнения деталей окружения), то по моему опыту бот будет стремиться к канону только на основании своего имени. Но это не обязательно. И в итоге все будет зависеть от того, кто первым задаст контекст. Пользователь, который вкинет “каноничный” термин или достанет мобильный телефон, либо же у бота выпадет какая-то генерация с контекстом, на которую согласится пользователь.


5. Делайте ботов “живыми”. Это не столько про техническую, сколько про творческую часть. Как и любом произведении искусства, персонажа делает уникальным и интересным не только его черты характера, но также его ценности, мотивация, мечты, увлечения, страхи, слабости и прочие детали. Да, я говорила, что нужно сокращать, но не забывайте добавить несколько деталей, которые помогут персонажу “ожить”. Это в первую очередь касается придуманных вами персонажей, но и для каноничных об этом не нужно забывать. В контексте ботов это делает их чуть более предсказуемыми в хорошем смысле.

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

Обратите внимание на выделенные фрагменты в описании хирурга Аль-Хайтама. Благодаря ним мы можем ожидать от него, что он будет ответственно относится к работе, быть прямолинейным, когда-то будет готов рискнуть и т.п.


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


6. Помните про “стандартные” тропы. ИИ обучался на большом массиве данных из интернета в целом, а также на каждом отыгрыше каждого пользователя, которых миллионы. Поэтому ему свойственно в своих генерациях идти по “простому пути”. Есть определенные каноны жанра и архетипы персонажей, и боты будут к ним стремиться.

Например, если вы указываете, что бот и ваш персонаж - соперники, то с большой долей вероятности ИИ распознает это как троп “от ненависти к любви” и будет всячески проталкивать идею о том, что бот начинает влюбляться в персонажа.

Тоже самое с характерами. Очень яркий пример был, когда я пыталась создать вампира, который может контролировать свою жажду крови. Как я не пыталась, это не выходило. Бот видит связь “вампир -> кровь” и ему начинает сносить голову от жажды. И никакие четко прописанные характеристики не помогали.

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

7. Английский язык. Не могу не сказать. Если хотите стабильного персонажа, делайте его на английском языке. Русскоязычные боты ломаются через 200 сообщений, а часто гораздо раньше.

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

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


8. Буквально несколько слов про форматирование текста. По большому счету боту все равно, как вы пишите. Важно только два “слова”.

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

{{char}} идентифицирует персонажа бота. Лучше использовать его, а не имя персонажа, так бот не запутается, не будет проблем с опечатками или при смене имени персонажа. В приветствии автозамена не работает, там нужно писать имя бота вручную.

9. Про обучение ИИ. Вы знаете, что есть возможность оценки генераций. Также та генерация, на которую вы ответили, тоже засчитывается, как оцененная положительно.

Что же с этим всем делать? Да ничего.

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

Расслабьтесь. Если что-то идет не так, лучше подумайте как исправить настройки персонажа. Поверьте, они влияют куда сильнее. Просто общайтесь, рольте,  выбирайте хорошие генерации и пропускайте плохие. Даже по опыту скажу, что “свежие” боты приятно удивляют гораздо чаще, чем многие “миллионники”.

10. Стабильность ботов. И немного про то, как сделать ботов более стабильными. Это не панацея, но часто помогает.

Информация повторенная несколько раз, а также находящаяся в разных источниках сразу (вспоминаем схемку в начале) значительно увеличивает шансы на то, что бот будет заметно стабильнее. А это значит, что то, что вы считаете критически важным, лучше размещать и в описании, и в приветствии, и в определении.

Но не переусердствуйте. Хорошие боты стабильные, но при этом гибкие. Чем проще завязка, тем больше реиграбельность бота. К нему хочется возвращаться и пробовать что-то новое. Если вы загоните бота в слишком жесткие рамки, вам, возможно, самим потом будет не интересно. Ищите баланс.

И еще один момент, который не относится напрямую к созданию ботов, а скорее в целом к стабильному отыгрышу. Так как боты смотрят в персону юзера, подбирайте или создавайте для ботов подходящую персону. Если вы общаетесь с каноничным Дилюком, а у вас персона гонщика Формулы-1, то это дополнительно путает бота. Через персону помогайте боту оставаться внутри контекста.


На этом с общими моментами все. В следующей части пройдемся по каждой настройке отдельно и поговорим подробнее.

Часть 2 здесь.

С ботами из примеров можно ознакомиться в моем тгк канале.


Report Page