Запитання, з якого все почалося
«Чому в кожного персонажа не може бути власної бульбашки повідомлення, як в інших застосунках?»
Ми часто чуємо це запитання. І, чесно кажучи, воно чудове. Більшість чат-застосунків показує повідомлення окремими бульбашками — по одній на кожну людину. То чому ж наш груповий чат об'єднує відповіді кількох персонажів в одне повідомлення?
Причина не в лінощах і не в недогляді. Це свідомий інженерний вибір, що виріс із місяців експериментів із трьома принципово різними підходами до групових AI-розмов.
Три архітектури
Створюючи AI-розмови з кількома персонажами, кожна платформа стикається з тим самим вибором. Є рівно три способи це зробити, і кожен має глибокі наслідки для вартості, якості та користувацького досвіду.
1. Структурований вивід (JSON-масиви)
Найпоширеніший підхід у галузі. Ти просиш AI повернути JSON-масив, де кожен елемент — це відповідь одного персонажа:
[
{
"speaker": "Sherlock",
"emotion": "заінтригований",
"content": "Захопливо. Візерунок бруду свідчить..."
},
{
"speaker": "Watson",
"emotion": "розгублений",
"content": "Голмсе, що ви маєте на увазі?"
}
]
Чим приваблює:
- Один API-виклик, одне списання кредитів
- Легко розібрати й показати окремими бульбашками повідомлень
- Можна додати багаті метадані (емоції, дії, описи сцени)
- Ідеально підходить для генерування підказок відповідей для користувача
Як є насправді:
- Надійно підтримують структурований вивід лише дорогі преміум-моделі (Claude, GPT-4) — більшості доступних моделей важко стабільно дотримуватися JSON-формату
- Помилки формату ламають усю відповідь
- Інструкції щодо JSON з'їдають токени й залишають менше простору для творчості
- Моделі відчуваються «скутими» — творчість часто страждає
- Обмеження вмісту стають суворішими: режим структурованого виводу часто вмикає агресивнішу фільтрацію контенту, тож дорослі чи гострі сценарії рольової гри частіше не вдаються
- Засмічення контексту: історія розмови заповнюється JSON-структурами
- Складна обробка помилок: що робити, коли розбір ламається посеред потоку?
Більшість сторонніх платформ із персонажами використовує саме цей підхід. Він працює, але обмеження реальні.
2. Виклик інструментів (режим агента)
Найбільш «інтелектуальний» підхід. AI вирішує, який персонаж має говорити наступним, викликає інструмент, щоб це позначити, а потім генерує відповідь цього персонажа. І так повторюється, доки сцена не здаватиметься завершеною.
AI думає: "Ватсон має відреагувати на це відкриття"
→ викликає інструмент: next_speaker("Watson")
→ генерує відповідь Ватсона
→ AI думає: "Тепер мав би втрутитися Шерлок"
→ викликає інструмент: next_speaker("Sherlock")
→ генерує відповідь Шерлока
...
Чим приваблює:
- Найприродніший плин розмови
- AI повністю творчо контролює темп сцени
- Кожна відповідь персонажа отримує окрему якісну генерацію
- Природно створює окремі повідомлення для кожного персонажа
Як є насправді:
- Кілька API-викликів = кілька списань кредитів
- Затримка накопичується: N персонажів = N циклів запит-відповідь
- Надійно працюють із викликом інструментів лише топові моделі (Claude, GPT-4) — дешевші моделі часто збоять або галюцинують виклики інструментів
- Складне керування станом між викликами
- Ризик нескінченних циклів чи неочікуваного завершення
- Налагодження перетворюється на кошмар: проблеми важко відтворити
Це «архітектура мрії», яка гарно виглядає на папері, але створює операційний головний біль у масштабі.
3. Вільний текстовий вивід (наш поточний вибір)
Найпростіший підхід. Попросити AI природно написати сцену й дати йому вирішити, як подати кількох персонажів у плавній прозі:
Шерлок подався вперед, його погляд загострився. «Захопливо.
Візерунок бруду свідчить, що наш підозрюваний прийшов зі
східного боку».
Ватсон насупився. «Голмсе, що ви маєте на увазі? Це просто бруд».
«Просто бруд?» Шерлок усміхнувся. «Мій любий Ватсоне, не буває
нічого, що було б "просто" чимось».
Чим приваблює:
- Працює з будь-якою AI-моделлю, без жодних спеціальних можливостей
- Максимальна творча свобода — AI пише природно
- Чистий контекст: історія розмови читається як роман
- Чудовий досвід потокового виводу
- Один виклик, передбачувана вартість
- Найпростіше реалізувати й підтримувати
Як є насправді:
- Усі персонажі в одному блоці повідомлення
- Не можна легко перегенерувати відповідь лише одного персонажа
- Гнучкість інтерфейсу обмежена
- Користувачі, які очікують бульбашок у стилі чату, можуть розгубитися
Ми навчилися цього на власних помилках
Ось чим ми ще не ділилися публічно: перша версія нашого групового чату використовувала виклик інструментів.
Ми вірили в «архітектуру мрії». AI вирішує, хто говорить наступним, кожен персонаж отримує окрему генерацію, гарні окремі бульбашки повідомлень. Це було елегантно. Це було розумно. І в продакшені це обернулося катастрофою.
Користувачі стикалися з непередбачуваною вартістю — іноді втричі більшою, ніж вони очікували за ту саму розмову. Час відповіді шалено коливався залежно від того, скількох персонажів AI вирішував залучити. Дешевші моделі галюцинували виклики інструментів або застрягали в циклах. Наші журнали помилок заповнювалися крайовими випадками, яких ми й уявити не могли.
Після місяців латок і обхідних рішень ми ухвалили непросте рішення переписати все з нуля на вільному текстовому виводі. Це здавалося кроком назад. Але іноді «менш інтелектуальне» рішення виявляється розумнішим вибором.
Чому ми зробили такий вибір
Після ретельного тестування всіх трьох підходів — і випуску одного з них у продакшен — ми обрали для групового чату вільний текст. Ось чому:
Стабільність важливіша за функції — структурований вивід ламається непередбачувано. Коли груповий чат ламається посеред розмови, користувачам уже байдуже до окремих бульбашок — вони просто хочуть, щоб усе працювало. Вільний текст ніколи не ламається через проблеми з форматом.
Якість важливіша за кількість — обмежені формати непомітно знижують творчість AI. Коли ми порівнювали результати, вільний текст стабільно давав яскравіші й природніші взаємодії персонажів. AI міг зосередитися на оповіді, а не на синтаксисі JSON.
Передбачувана вартість — режим агента списує кредити за кожного персонажа в кожній відповіді. Сцена з п'ятьма персонажами могла коштувати в 5–10 разів більше, ніж очікувалося. Користувачі заслуговують на передбачувані ціни.
Універсальна сумісність — ми підтримуємо багато AI-моделей. Не всі однаково добре підтримують структурований вивід чи виклик інструментів. Вільний текст працює всюди й дає користувачам ширший вибір моделей.
Компроміс, на який ми йдемо
Так, ми жертвуємо досвідом «одна бульбашка на персонажа». Натомість ми отримуємо:
- Залізну надійність
- Кращу творчу якість
- Передбачувану вартість
- Підтримку ширшого кола моделей
- Чистішу історію розмов
Для групової рольової гри, де найважливіше занурення, ми вважаємо, що цей компроміс того вартий.
Що на нас чекає: Режим історій
А тепер дещо захопливе: ми створюємо новий Режим історій, який використовує структурований вивід.
Чому інший підхід? У Режиму історій інші пріоритети:
- Точний контроль над сценою важливіший за вільну творчість
- Багаті метадані (ракурси камери, музичні підказки, розриви між розділами) додають цінності
- Формат передбачуваніший (чітка структура розділів і сцен)
- Користувачі очікують більш «режисерського» досвіду
Різні сценарії використання заслуговують на різні архітектури. Ми не фанатики жодного окремого підходу — ми обираємо те, що найкраще служить користувачам.
Чесна правда
Ідеального розв'язку для AI-розмов із кількома персонажами не існує. Кожен підхід жертвує чимось цінним заради чогось іншого.
Інші платформи, що показують окремі бульбашки? Найімовірніше, вони використовують структурований вивід і миряться з його обмеженнями. Платформи з більш «інтелектуальним» керуванням сценою? Імовірно, виклик інструментів із вищою вартістю та затримкою.
Ми обрали шлях, який ставить на перше місце те, що наші користувачі цінують найбільше: надійну, творчу й економну групову рольову гру.
Окремі бульбашки — це приємно. Але не ціною всього іншого.
Що ми досліджуємо
Ми експериментуємо з гібридними підходами:
- Розбір після генерації: використання легких моделей, щоб після генерації розділити вільний текст на фрагменти окремих персонажів
- Необов'язковий структурований режим: можливість для досвідчених користувачів обрати структурований вивід, коли їм потрібен точний контроль
- Розумне визначення сцен: автоматичне виявлення природних точок розриву для кращого відображення в інтерфейсі
Мета не в тому, щоб знайти «правильну» відповідь. Мета — постійно покращувати досвід, зберігаючи те, що працює.
Маєш думки про те, як має працювати груповий чат? Ми будемо раді тебе почути.

