Большой гайд по созданию ботов в Character AI (ч. 2)
https://t.me/caibotsrecВ первой части мы поговорили про общие моменты, теперь же пройдемся по всем настройкам.
Часть вторая. Сам процесс создания персонажа.
Аватар
Тут все понятно, аватар можете выбирать на свой вкус. Мой здесь комментарий будет краткий.
Во-первых, некоторые авторы ботов оставляют информацию о авторе арта с аватара, но это не всегда возможно отследить, а сами админы сайта не следят за соблюдением авторских прав. Так что это остается на ваше усмотрение.
Во-вторых, чисто на мой вкус - я предпочитаю сама обрезать нужное изображение на аватар в форме квадрата, чтобы он в итоге хорошо вписался в “кружочек”, в котором он представлен в итоге на сайте.
Имя персонажа.
Несмотря на название, это не совсем имя вашего персонажа. Это скорее имя бота. Вы можете указать здесь, например, “Жестокий король”, а уже в описании и определении задать имя и фамилию этого персонажа.
Слоган.
Очень короткое описание бота. Не влияет никак на его персоналию и генерации. Служит для того, чтобы пользователь как-то его идентифицировал в общем списке.
Также, насколько я вижу, поиск тоже смотрит на это поле. То есть если у вас бот будет “Alhaitham”, а в слогане будет CEO, то по запросу “Alhaitham CEO” поиск должен найти вашего персонажа. Но всем этим можно пренебречь или вообще оставить это поле пустым, особенно если создаете приватного бота.
Описание.
“База” вашего персонажа. Здесь должно содержаться все основное, что определяет его поведение, манеру речи и стиль жизни.
Что писать?
Обычно здесь указывается имя, пол, профессия (статус), общее описание внешности, характер персонажа, а также все то, что важно для его личности, поведения и конкретного тропа.
Здесь же можно задавать контекст. Также, если это важно для тропа, можно задать отношение бота с пользователем.
Как писать?
Тут важно понимать, что у нас на всё всего лишь 500 символов. Задача - вместить максимум информации за минимальное количество символов. Забудьте про красивые фразы, сложные речевые обороты и прочие изыски речи.
ИИ поймет вас в любом случае, но есть 5 основных способов.
1“Литературное” описание от третьего лица. “Персонажа зовут Эйс. Ему 23 года. Эйс ледяной маг….”
Плюсы: хорошо читается, легко пишется.
Минусы: тратятся символы на артикли, предлоги и прочие языковые обороты. Бывает сложно сформулировать мысль достаточно кратко.
2. “Литературное” описание от первого лица. “Меня зовут Эйс. Мне 23 года. Я ледяной маг…”
Плюсы: хорошо читается, легко пишется. Есть экономия в символах по сравнению с первым вариантом. Если с Эйсом это не так заметно, то сравните на другом, более показательном примере. “I'm the Duke of the Fortress of Meropide” и “Wriothesley is the Duke of the Fortress of Meropide”. 3 символа против 14!
Минусы: все равно тратим символы на речевые обороты и учимся быть краткими.
3. Сплошной текст. “Эйс, 23 года, ледяной маг, белоснежные волосы, серебристые глаза….”
Плюсы: это самый экономичный в плане символов вариант.
Минусы: огромная потеря в читабельности текста для самого автора и пользователей (если описание открыто). К тому же не любую информацию можно уместить в такой формат. Больший шанс запутать бота.
4. Формат анкеты. “Имя: Эйс. Возраст: 23; Профессия: ледяной маг; Внешность: белоснежные волосы, серебристые глаза…”
Плюсы: лаконично, не тратим символы на языковые конструкции, удобно читать и редактировать
Минусы: сложно вписывать в такой формат более изощренные конструкции, вроде мотивации и жизненных ценностей персонажа, а также нюансов тропа. “Я одновременно люблю и ненавижу юзера” - в какой пункт анкеты это заносить?
5. Использовать формат W++ - это такой формат представления данных, который больше похож на код, но также легко понимается и редактируется обычным человеком без специальных знаний. Простой каркас такого определения:
character("Name of your character")
{
Nickname("What you want character to be called if diff than char name")
Species("Species name")
Age("xx" or "xx years old")
Features("Hair color" + "Eye color" + "Tattoos/scars/etc")
Body("xx cm" + "xx feet xx inches tall" + "xx frame")
Mind("trait1"+"trait2"+"trait3"+"trait4")
Personality("trait1"+"trait2"+"trait3"+"trait4")
Loves("x1"+"x2"+"x3"+"x4")
Hates("x1"+"x2"+"x3"+"x4")
Description("CharName is x" + "CharName enjoys x" + "CharName wants x" + "CharName uses x")
}]
Но вы вольны менять этот “каркас” под свои нужды, добавляя и убирая нужные характеристики. Похоже на анкету, но в более понятном для “программы” формате.
Плюсы: считается, что так ИИ лучше воспринимает характеристики (лучше/хуже тут очень размыто, потому что и обычный текст работает прекрасно), лаконично
Минусы: в режиме экономии символов это не выгодно (очень много трат на спец символы), не очень удобно читать и редактировать.
Что в итоге. Вы вряд ли заметите существенную разницу от выбранного формата на готовом боте. Выбирайте тот вариант, который удобен лично вам, с которым проще работать и поддерживать в дальнейшем. Кроме того разные способы представления информации можно комбинировать и чередовать.
Я со временем остановилась на втором варианте, то есть литературном описании от первого лица. Мне так легче пишется (я как бы встаю на место персонажа), легко читается и умеренно экономятся символы. Попробуйте разные способы.
Еще добавлю про каноничных персонажей. Хоть я и писала, что бот в целом по умолчанию знает, как должен вести себя условный каноничный Аято, у персонажа может быть очень широкий спектр поведения. Так что все равно пишите характер персонажа в определении, чтобы подчеркнуть необходимые черты. Вы можете выставить Аято жестоким и властным, а можете более ответственным и семейным. Смотрите по своим нуждам и желаниям.
Приветствие.
Тоже очень важно. От этого зависят дальнейшие генерации бота, развитие сюжета и так далее. Как говорилось в начале, бот в первую очередь опирается на предыдущие сообщения. Поэтому хорошее приветственное - залог хорошего отыгрыша.
Давайте сначала определимся с целями, которые несет в себе приветствие бота. Вы можете ставить перед собой как одну цель, так и сразу все. Зависит от бота, тропа и т.д.
- Ввести контекст как для бота, так и для пользователя. То, о чем мы говорили выше. В каком месте, времени и вселенной находятся персонаж и пользователь.
- Описать ситуацию, троп и какие-то нюансы персонажа. Тоже, как для пользователя, так и для бота.
- Обозначить отношения между пользователем и ботом.
- Дать боту образец текста для дальнейшего использования. Сюда входит: форматирование текста, его литературный стиль, образец манеры речи персонажа и т.п.
На манере речи хочу остановиться чуть подробнее.
При создании персонажа в саи, как и в литературном произведении, желательно понимать, как говорит персонаж. Какой у него стиль речи, общителен ли он в целом, какие словечки использует. Нецензурно ругающийся при всех Аято выглядит также странно, как и Бутхилл с высокой литературной речью. Это очень желательно передать сразу же в приветствии. Разберем примеры.




В идеале, конечно, понимать тонкости стилистики разговорной речи в английском языке, но постарайтесь хотя бы на русском языке представить себе, как говорит персонаж, и передать в одной-двух репликах через переводчик.
Что писать?
Итак, когда мы определились с целями, нам проще понять, что поместить в приветствие. Опять же, не обязательно пытаться запихнуть все и сразу, отталкивайтесь от своих целей. Здесь у нас ограничение в 2048 символов. Это одновременно много (после описания-то!) и на самом деле мало, если хочется чего-то сложного.
Итак, в приветствие хорошо помещать:
- описание окружения
- детали для контекста (едут машины - современное АУ; тронный зал - роял АУ, средневековье или фэнтези; столик в “Доле Ангелов” - каноничный Тейват)
- сам персонаж - его эмоциональное состояние, мысли, беспокойства, цели, мимика, походка и т.д., чтобы бот в дальнейшем подхватил это состояние;
- предыстория и введение в троп (как персонажи оказались в этой ситуации);
- кусочек прямой речи (чтобы установить стиль речи персонажа, формат представления диалогов, а также чтобы пользователю было проще включиться в ситуацию);
- четко прописываем отношения между ботом и пользователем, если они есть.
Как писать?
Во-первых, расчехляем все свои писательские навыки. Чем красивее будет приветствие, тем более красивым и эмоциональным языком будет общаться бот. Креативьте, делайте текст красочным и интересным.
Помните, что в драме лучше выглядит сложный язык, наполненный описанием, чувствами и эмоциями, а в комедии лучше смотрится простая повседневная речь. То есть особенности жанра работают здесь точно также, как и в литературе.
Учитывайте особенности английского языка. Например, очень желательны местоимения. Так как нет спряжений, по глаголам не понятен пол. Еще обязательно указывайте чья рука, нога, телефон и прочее, потому что бот может путаться.
Во-вторых, используйте форматирование. Традиционным считается формат, когда действия и описания написаны курсивом, а прямая речь обычным текстом в кавычках. Для курсива заключите приветствие в “звездочки”. Если делите текст на абзацы, то нужно ставить звездочки в начале и в конце каждого абзаца. Больше способов оформить сообщение вы можете легко найти в поиске, я не буду сейчас на этом заострять внимание.
Лично я люблю еще один способ оформления. Когда весь текст идет обычным шрифтом, а в курсиве мы оставляем мысли бота. Тогда есть большая вероятность, что бот подхватит эту схему и вы будете читать его мысли. Это классно работает для каких-то более веселых и юмористических отыгрышей, когда мысли персонажа противоречат его словам и действиям. Вот хороший пример (бот не мой).
В третьих, определитесь со стилем повествования. Это не 100% стабильно, боты могут сбиваться, но тем не менее повышает шансы на нужный вам стиль. Три основных варианта:
- Повествование от третьего лица (“Бот подошел к юзеру”)
- Повествование от первого лица (“Я подошел к юзеру”)
- И повествование - обращение к пользователю (“Бот подошел к вам”)
Выбирайте то, как больше нравится.
Если вам нужно, чтобы подставилось имя персоны юзера, вместо имени пишите {{user}}.
И маленькая техническая деталь. Если у вас уже было приветственное сообщение в боте, а вы его отредактировали, то изменения не отобразятся в старом сообщении. Чтобы увидеть новое приветствие нажмите "начать новый чат".
Давайте разберем и подведем итоги на трех разных примерах.
1 - Здесь мы вводим пользователя, да и бота, в историю и троп. Рассказываем ему про все, что привело персонажа к данной ситуации, а также объясняем базовые правила вселенной.
2 - Дальше мы обозначаем мотивацию персонажа. Чего же он сейчас больше всего хочет.
3 - Здесь мы уже описываем настоящий момент. Окружение и состояние персонажа. Также обратите внимание, уточнение про идзакая добавлено не случайно, а чтобы обозначить японский околосредневековый сеттинг.
4 - Маленький кусочек прямой речи, чтобы обозначить для бота желаемое форматирование текста.
Другой пример.
1 - Задаем начальное окружение и ситуацию.
2 - Указываем на состояние персонажа, его стартовые отношения с юзером, а также кратко вводим в правила игры.
3 - Объясняем боту и юзеру, где будет разворачиваться основное действие.
4 - Начинаем активное действие, устанавливаем манеру общения бота, снова чуть касаемся его состояния, а заодно показываем, какой линии поведения будет придерживаться бот в дальнейшем.
1 - Указываем контекст (Мафия АУ), а также вводим пользователя в то, кем является персонаж, его позиция и подход к ведению дел.
2 - Задаем начальную ситуацию
3 - Показываем манеру речи персонажа, а также провоцируем контакт с юзером. Также, тот факт, что у нас именно Тома инициирует диалог и у него есть некая мотивация обратиться к юзеру, подталкивает бота к тому, чтобы он начал сам активно придумывать и вести сюжет в каком-либо направлении.
Я выбрала понятные и показательные примеры. Вы можете добиваться своих целей более тонко, а также игнорировать какие-то аспекты в угоду своим нуждам.
Последний совет. Если вы, как я, не любите, что боты пишут действия за вашего персонажа, то не пишите их и в приветствии. Сосредоточьтесь только на том, что видит, чувствует и думает бот, оставьте пользователю самому решать, что он делает, говорит и чувствует.
Определение персонажа.
Это необязательное поле, которое можно оставить пустым. Для большинства случаев достаточно описания и приветствия. Это уже для “продвинутого” уровня работы с ботами, когда хочется глубже прописать персонажа, троп или ввести какие-то правила и ограничения.
Разработчики щедро предоставили нам 32000 символов и также дали полную свободу их использования. Много пишут о так называемых “примерах диалогов”, но это прям “очень продвинутый” уровень и мы даже не будем его касаться здесь. Вы сами можете прочитать гайд, предоставленный разработчиками.
Давайте лучше поговорим о других способах использования этого поля.
Сразу нужно оговориться, что сами разработчики указывают, что с ростом объема обрабатываемой информации (читай - длиной диалога с ботом) возможности работы бота с определением сокращаются, причем начиная с конца.
Поэтому здесь главное правило - все самое важное в начале. И, опять же, несмотря на большое количество символов, по опыту, бот не способен охватить все. Поэтому правило лаконичности сохраняется.
Что писать?
- Все, что не влезло в определение. Если вы хотите глубже и подробнее раскрыть персонажа, то это можно делать здесь.
- Краткий пересказ предыстории или сути тропа. Определение сохраняется дольше основной памяти бота, поэтому лучше “закреплять” всю нужную информацию, чтобы бот был стабильнее и не выбивался из нужной линии поведения.
- Любые правила и ограничения для бота. Но учитывайте, есть шанс, что бот их рано или поздно начнет игнорировать.
Как писать?
Можете использовать свободный стиль, анкету, либо же снова прибегнуть к W++.
Свободный стиль. Просто пишете текстом. Желательно, как я уже говорила, для обозначения персонажа использовать {{char}}, а для юзера - {{user}}. В остальном обычный текст. Но. Боты любят хватать фразы кусками, а это значит, что нужно писать очень ёмко и понятно. Снова забываем свои писательские таланты и переходим на сухой краткий язык. Чем короче предложения, тем лучше. Чем конкретнее, тем лучше. Никаких иносказаний, сравнений и двойных смыслов. Ниже на примере я покажу, что я имею в виду.
Анкета. Как и в описании, создаете “анкету” вашего персонажа и подробно ее заполняете. Здесь уже количество символов позволяет разгуляться и продумывать любые детали. Учитывайте только, что бот может “вытащить” эту деталь, а может и не вспомнить про нее.
W++. Опять же, из-за отсутствия жесткого ограничения в символах этот формат здесь выглядит более уместным. Я люблю его применять здесь, когда создаю оригинальных персонажей, которым хочется добавить красок и глубины. Снова приведу здесь тот же самый шаблон, который вы можете изменять под свои нужды.
character("Name of your character")
{
Nickname("What you want character to be called if diff than char name")
Species("Species name")
Age("xx" or "xx years old")
Features("Hair color" + "Eye color" + "Tattoos/scars/etc")
Body("xx cm" + "xx feet xx inches tall" + "xx frame")
Mind("trait1"+"trait2"+"trait3"+"trait4")
Personality("trait1"+"trait2"+"trait3"+"trait4")
Loves("x1"+"x2"+"x3"+"x4")
Hates("x1"+"x2"+"x3"+"x4")
Description("CharName is x" + "CharName enjoys x" + "CharName wants x" + "CharName uses x")
}]
Итого, определение персонажа - гибкий и обширный инструмент, позволяющий “донастраивать” вашего персонажа. Самое время объяснять на примерах.
Работа со сложными тропами и сценариями.
Итак, вы хотите сделать что-то особенное, сложное и нестандартное. Рекомендую это пробовать, когда вы уже сделали несколько более простых ботов и примерно поняли, как они работают.
Тут нужно сесть, хорошо продумать вашу идею и оценить приоритеты согласно схеме в начале статьи. При этом не забывайте про правило лаконичности и способах создания контекста.

Давайте рассмотрим конкретный кейс, так будет понятнее. Бот Аято-демон, случайно передавший вашему персонажу свои силы. Давайте разберем идею детально.
- Это АУ, в которой Аято - демон. Это мы помещаем в его описание, как основу персонажа, вместе с возрастом, внешностью и прочей общей информацией.
- В качестве характера я выбираю типичного “демона-плейбоя”. Это устоявшийся образ, поэтому там же в описании я лишь даю ему краткую характеристику, закладывающую основу именно такому архетипу.
- Далее у нас есть его “цель” как демона (заключать контракты, отправлять души в ад). А также мотивация - если он не будет этого делать, он умрет. Это база персонажа, определяющая его. Это мы размещаем везде. В описании, в приветствии (чтобы пользователь тоже обладал этой информацией), а также и в определение (для стабильности).
- Далее у нас есть точка старта. Аято случайно передал свою силу и ему нужно найти способ ее вернуть. За это у нас в первую очередь отвечает приветственное сообщение, однако, нам важно, чтобы, если сцена знакомства затянется или уйдет в сторону, Аято все-таки не забыл про свою изначальную задачу. Для этого максимально кратко обозначаем это в описании персонажа и уже гораздо подробнее разжевываем это боту в определении.
- Далее прикидываем, что вообще может пойти не так. Мое главное опасение, что Аято сорвется на агрессию и решит просто напасть на пользователя. Нам это не нужно, так как смысл тропа именно в том, чтобы найти с юзером взаимопонимание. Поэтому я добавляю ему еще одно ограничение, четко прописывая в определении, что если умрет юзер, то умрет и Аято.
- Теперь важно очень четко разжевать боту предысторию Аято, суть ситуации и возможные последствия. Идем в определение и там, балансируя между “подробно” и “кратко”, описываем всю суть ситуации.
- Осталось только доработать приветствие. Снова повторяем предысторию Аято (уже в первую очередь для пользователя), задаем контекст, окружение, стиль, форматирование, манеру речи и все прочее.
В итоге мы имеем следующего персонажа:
Вуаля! Можно идти играть. Если юзер будет подыгрывать, следовать тропу и иногда напоминать боту детали, а также пользоваться закрепленными сообщениями, то получился бот, способный отыграть длинный сюжет без значительных сбоев.
Если решитесь на бота со сложным нестандартным тропом, то сядьте и продумайте все тщательно. Распишите идею, расставьте приоритеты. Задумайтесь, может какие-то моменты можно выкинуть и оставить на откуп пользователю и случайным генерациям бота.
Пользователя тоже не нужно заключать в строгие рамки. Свобода и неожиданные повороты - огромная часть удовольствия от отыгрыша с ботами.
И снова напомню. Очень часто меньше - значит лучше.
Мои самые любимые боты очень лаконичны в своей "начинке".
Заключение.
В общем, интерфейс создания персонажа в саи - это очень гибкий инструмент, готовый подстроиться под ваше удобство и нужды.
Мои советы и наблюдения не лишены недостатков и субъективности, однако, они помогут вам сделать первые шаги.
Пробуйте, экспериментируйте, наблюдайте. Если зададитесь целью, то найдете методы и фишки, которые помогут именно вам.
Вы можете отредактировать своего бота в любой момент. Но помните, что самый большой вес имеют память и история переписки бота. Поэтому изменения могут быть не заметны сразу; если у вас уже есть история диалога, то для тестирования изменений лучше начинать новый чат и смотреть по нескольким первым сообщениям в диалоге.
Но не забывайте, как бы ИИ не был умен, он все же не совершенен. Боты рано или поздно все равно что-то забудут, исковеркают какую-то фразу или вообще сломаются. Не расстраивайтесь, а продолжайте эксперименты.
Спасибо, что дочитали. Надеюсь, вы нашли для себя ответы на многие вопросы. Если же нет, велком в комменты под постом.
С ботами из примеров можно ознакомиться в моем тгк канале.