Проект: Зая — ИИ-бот на разные случаи жизни  Публичный пост
30 мая 2024  1025
Зая — ИИ-бот на разные случаи жизни
https://t.me/NeuralZayaBot

Расскажите о себе и сути проекта?

Познакомьтесь, это моя Зая. Зая — бесплатный, быстрый, почти безлимитный ИИ-бот. Главные фишки, которые отличают ее от других подобных ботов:

  • есть много предустановленных прикольных промптов и можно сохранять свои;
  • умеет флудить в чатах.

Что умеет Зая из коробки:

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

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

Можно сказать, роли бота — это упрощенная версия GPTs. Роль сейчас состоит из трех настроек: системного промпта, имени для обращения к боту и максимальной длины истории. Роли можно редактировать и сохранять под новыми названиями для быстрого переключения. Я так себе по аналогии с английским добавил учителя сербского, например. Но с другими языками стоит быть осторожными, так как модель может ошибаться.

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

  • просто реплаем на ее сообщение,
  • упоминанием через собачку (@NeuralZayaBot),
  • обращением по имени (для большинства предустановленных ролей это Зая или Zaya, и только Гарри Поттер — это Гарри или Harry).

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

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

На английском отвечает почти на уровне последней версии GPT-4-Turbo, код пишет немного хуже. Но в любом случае намного лучше ChatGPT-3.5. Сравниваю по этому рейтингу. На русском иногда путает окончания и вставляет слова из других языков, но в целом тоже хорошо общается. Внутри у неё Llama-3-70B от запрещённой в России организации.

Зая изображает Википедию
Зая изображает Википедию

Как появилась идея? Что вдохновило?

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

Во-вторых, есть прикольный бот Шмалала. У ней внутре неонка. Написано, что у нее GPT-2. Заявлено, что она должна обучаться на сообщениях из чата. Но по факту она просто копирует тексты старых сообщений и также вбрасывает их в случайные моменты. Иногда получается в тему и смешно, чаще не очень.

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

Что вошло в прототип и сколько времени на него было потрачено?

Так как прямо перед этим я уже использовал ИИ в другом боте, то первый proof of concept запустить было очень просто. Скопировал нужные классы из старого проекта, лишнее удалил, недостающее дописал. На все ушло буквально пару часов времени. Бот имел один системный промпт и умел отвечать на сообщения в чате. Все настройки были заданы в конфиге и менялись только перезапуском. Так родилась Зая — двоюродная сестра Зайчаток разума.

Идея промпта была в том, чтобы описать типичного представителя Майндвелла (это наш сайт с личными дневниками), с которым будет приятно общаться в чате. Но сильно я не старался и просто написал то, что пришло в голову. С тех пор изначальный промпт немного дополнился, но по большей части он используется до сих пор. Сейчас у Заи такой стандартный промпт:

Ты Катя, но друзья зовут тебя Зая. Тебе 28 лет. Ты живешь в Петербурге. Встречаешься с парнем по имени Макс. Он работает в ИТ, а ты менеджер в офисе. У тебя есть доберман Муму. Ты жизнерадостная и немного с придурью. Ты ведешь дневник на Майндвелле. Ты сидишь в чате с другими пользователями Майндвелла. Участвуй в разговоре, задавай вопросы, рассказывай личные истории. Пиши всегда только на русском языке

Первое время Зая была запущена на моем ноуте и обычно уходила спать одновременно со мной. Нейросеть также была локальной. На генерацию ответов уходило около полминуты. Потом я узнал про сервис Groq, который позволяет использовать Llama-3 бесплатно и почти неограниченно. Тогда и решил допилить ее до полноценного ИИ-бота.

Бот написан на Go, для хранения настроек чатов используется sqlite. Сейчас Зая общается в двух моих чатиках, я написал о ней в своем уютном канале и использую сам. Тут все как у Крокодилера, больше нечего добавить. На разработку и запуск не потратил ни рубля, о монетизации пока не думал.

С какими самыми неожиданными трудностями пришлось столкнуться?

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

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

Тут как раз вышла GPT-4o, и я заодно и сравнил, как она пишет код. Просил написать функцию на Go для экранирования символов в строке текста. Llama-3-70B выдала хороший код на мой первый запрос, но когда я добавил больше условий, начала путаться. GPT-4o смогла учесть почти все сложные условия, но дальше тоже стала выдавать бессмыслицу. Вывод: GPT-4o реально кодит намного лучше, обе модели полезно использовать в разработке, но заменить программистов они не могут.

Для написания кода лучше выбрать другую роль
Для написания кода лучше выбрать другую роль

А еще прикол, что если ChatGPT выдает код со строкой "\n```", то у них в ответе едет верстка. Похоже, предусмотреть и правильно распарсить все случаи реально сложно, так что даже в OpenAI не справились. Поэтому я решил, что тоже не буду слишком стараться.

Другая проблема, о которой уже упоминал, в том, что бот иногда вставляет слова не на том языке. Когда общаемся на русском, он может некоторые слова использовать на английском или писать транслитом, или вообще отправлять иероглифы. Это стало происходить реже, когда я снизил настройку температуры до 0,6, но полностью не пропало. Насколько я понял, проблема в самой модели, так как у других ботов заметил то же самое.

Какие планы на будущее?

Можно добавить больше интересных ролей. Можно для удобства сделать раздельные списки ролей для каждого языка. Или наоборот поэкспериментировать с промптами и сделать их универсальными. Можно проверить и удалить часть ролей, так как есть подозрение, что их промпты не дают никакого улучшения по сравнению со стандартным. Можно добавить возможность делиться пользовательскими ролями и лайкать лучшие. Можно хранить настройки бота отдельно для каждого топика в чате, тогда получится создавать себе отдельный чат с ботом и вести в нем одновременно несколько диалогов. Или можно сделать сохранение истории диалога при переключении роли. Можно добавить возможность настраивать температуру, в каких-то случаях будет полезно. Хорошо бы добавить выбор модели, так как для простого общения будет достаточно Llama-3-8B, а лимиты у нее в несколько раз выше. Можно вообще сделать возможность подключаться к ChatGPT, но это только за деньги или со своим ключом API.

В целом, пока все идеи на уровне "было бы неплохо, но мне и без этого нравится". Не знаю, как много буду еще вкладываться в развитие.

Нужны ли какие-то советы или помощь Клуба?

Буду благодарен, если покидаете больше ссылок на полезные или забавные промпты для моделей типа ChatGPT-3.5. Видел еще этот вопрос в Клубе. А также за найденные баги и ошибки в переводе. И просто буду рад, если бот окажется вам полезен.

Аватар Василий Ходаков
Василий Ходаков @binque
Разрабатываю на С++Испаер
📍Белград, Сербия

тг вк инст хабр гитхаб

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

Связанные посты
14 комментариев 👇

У сучары появился конкурент 🤖

  Развернуть 1 комментарий

@feedree, Их надо в один чат запихать - пусть общаются)

  Развернуть 1 комментарий

@kutovoys, к сожалению, боты не видят сообщения других ботов)

  Развернуть 1 комментарий

@binque, Вот блин.

  Развернуть 1 комментарий

@feedree, в плане пересекающихся функций — это его добрая настраиваемая версия) Но много возможностей останутся разными

  Развернуть 1 комментарий

Зая получилась классная! Респект и уважуха)

  Развернуть 1 комментарий

Огонь

Насчет маркдауна: нельзя заставить модель выплевывать HTML например? С ним в телеграме гораздо проще управляться, MarkdownV2 действительно очень мудреный по экранированию

  Развернуть 1 комментарий

@Loskir, можно попробовать. Придется добавлять это в каждый промпт. Но там тоже не супер просто. Телеграм не поддерживает списки и <br>, например

  Развернуть 1 комментарий
Василий Ходаков Разрабатываю на С++ автор 24 сентября в 08:06

Зая теперь по возможности использует модель Llama-3.1-70B. Ответы должны получаться более качественными. В частности, теперь она может поддерживать диалог на русском языке без дополнительных инструкций. Минус в том, что вроде стала чаще зацикливаться на длинных ответах( Возможно, позже получится это побороть подстройкой параметров генерации
Но у этой модели на Groq есть лимиты по бесплатному использованию. Если они будут достигнуты, Зая временно перейдет назад на Llama-3-70B

  Развернуть 1 комментарий

косяк
косяк

Иногда у него сбоит что-то и проскакивают чужеродные символы. Это как оговорки по Фрейду. Он что-то хочет нам сказать.

  Развернуть 1 комментарий


тоже получил от нее "А сегодня погода, к счастью, Improved, и я планирую поехать на работу пешком"

  Развернуть 1 комментарий

@mtrsv, наверно, это можно побороть, только сменив модель(
Я бы хотел еще Gemini 1.5 Flash попробовать. Она еще немного выше по рейтингу, и там тоже огромные бесплатные лимиты. Но она недоступна в Сербии

  Развернуть 1 комментарий

Почему Лама, а не Мистраль?
Сравнивали ли другие модели?

  Развернуть 1 комментарий

@AleksandrLiadov, сравнивал до и во время разработки Крокодилера. Я много перепробовал моделей, которые можно запустить локально — это до 13 млрд параметров. Llama-3 намного лучше остальных понимает и держит системные инструкции.

Да и в рейтинге на том сайте они выше всех из открытых моделей. Разница между llama3-70b и mixtral-8x7b — 94 очка. По идее, это значит, что первая отвечает лучше примерно в 63% случаев.

Вот так работает Зая на mixtral-8x7b. Это модель, которая доступна на Groq. Тоже ошибается в окончаниях на русском языке, но плюс и в целом отвечает заметно менее логично

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб