Я розробляю власну платформу для спілкування з AI-персонажами — аналог Character.ai, але з власною архітектурою пам'яті, роутингом моделей і категоріями персонажів. Одне з перших практичних питань яке постало: яку LLM використовувати і чи підходить одна модель для всіх типів персонажів.
Коротка відповідь — ні. Модель яка чудово пише код або аналізує документи може виявитись посереднім співрозмовником: губить роль персонажа, відповідає надто формально, ігнорує деталі з попередніх повідомлень. У цій статті — конкретний досвід: які моделі обрав для різних категорій персонажів, скільки це коштує і коли варто переходити на іншого провайдера.
Чому не кожна LLM підходить для AI-персонажа
Більшість сучасних мовних моделей створювалися як універсальні асистенти. Їх навчали відповідати точно, безпечно і корисно. Для чат-бота підтримки або кодового асистента — це саме те що потрібно. Для AI-персонажа — часто перешкода.
Типові проблеми при використанні "асистентних" моделей для персонажів:
- Модель виходить з ролі через кілька десятків повідомлень
- Відповіді звучать надто офіційно навіть коли персонаж має бути неформальним
- Постійні нагадування про те, що перед користувачем AI, а не жива людина
- Слабка емоційна залученість у розмову
- Відмови в нешкідливих рольових сценаріях
Для AI-компаньона важливі зовсім інші характеристики: утримання ролі персонажа протягом тривалого діалогу, природний розмовний стиль, емоційні відповіді та здатність "пам'ятати" деталі з попередніх розмов.
Тому для різних категорій персонажів варто використовувати різні моделі — і це принципово впливає на якість кінцевого продукту.
Як я організував роутинг моделей по категоріях персонажів
У моїй платформі персонажі розподілені за категоріями: EDUCATION, SUPPORT, ENTERTAINMENT, COMPANION, ROMANTIC, FINANCE, CAREER, FITNESS, LANGUAGE, KIDS, CREATIVE. Кожна категорія має свої вимоги — для освітнього персонажа важлива точність, для романтичного — утримання ролі.
Архітектурне рішення яке я обрав — зберігати налаштування моделей у конфігурації
і будувати окремий ChatClient для кожної категорії. Щоб змінити модель —
достатньо одного рядка в application.properties без жодних змін у коді:
# application.properties
ai.models.education=openai/gpt-4o-mini
ai.models.support=openai/gpt-4o-mini
ai.models.entertainment=deepseek/deepseek-v4-flash
ai.models.romantic=sao10k/l3.3-euryale-70b
ai.models.finance=openai/gpt-4o-mini
ai.models.summary=deepseek/deepseek-v4-flash
На рівні Spring Boot це реалізується через Map<CharacterCategory, ChatClient>
де кожна категорія отримує свій клієнт. Категорії без окремої моделі маппляться
на найближчу за змістом:
@Bean
public Map<CharacterCategory, ChatClient> chatClientsByCategory(AiModelsProperties props) {
ChatClient educationClient = buildChatClient(props.getEducation());
ChatClient entertainmentClient = buildChatClient(props.getEntertainment());
ChatClient romanticClient = buildChatClient(props.getRomantic());
return Map.ofEntries(
Map.entry(CharacterCategory.EDUCATION, educationClient),
Map.entry(CharacterCategory.ENTERTAINMENT, entertainmentClient),
Map.entry(CharacterCategory.ROMANTIC, romanticClient),
Map.entry(CharacterCategory.COMPANION, romanticClient),
Map.entry(CharacterCategory.FINANCE, educationClient)
);
}
Окремо я реалізував агентний роутинг: якщо повідомлення потребує актуальних даних —
погода, новини, курси акцій — запит передається SearchAgent з набором
інструментів: Wikipedia, Tavily, NewsAPI, AlphaVantage. Для RP-категорій
(ROMANTIC, COMPANION) цей роутинг відключений — спеціалізовані RP-моделі
не підтримують function calling.
Огляд моделей: DeepSeek, GPT-4o mini, Euryale, MiniMax M2-Her
DeepSeek V4 Flash
DeepSeek V4 Flash — моя основна модель для більшості категорій. Використовує архітектуру Mixture-of-Experts: 284B загальних параметрів але лише 13B активних при кожному запиті. Саме тому вона така дешева при прийнятній якості відповідей.
Актуальна ціна через OpenRouter: $0.10/M input, $0.20/M output. Контекстне вікно — 1M токенів. Підтримує tool calling та structured output.
Я обрав її як основу з кількох причин: стабільна робота без 429 помилок на відміну від безкоштовної версії, повноцінний tool calling для SearchAgent, і вартість в рази нижча за GPT-4o mini при порівнянній якості для розважального контенту.
Не підходить коли: персонаж має складний характер з тонкими емоційними реакціями — модель іноді "зісковзує" в нейтральний асистентний тон після 20–30 повідомлень. Для ROMANTIC і COMPANION категорій це помітно і псує враження.
GPT-4o mini
GPT-4o mini — використовую для категорій де важлива точність і безпека контенту. Актуальна ціна: $0.15/M input, $0.60/M output. Контекстне вікно — 128K токенів.
Чому саме вона для EDUCATION, SUPPORT, FINANCE, KIDS: модель найкраще слідує системному промпту і обмеженням контенту. Для дитячих персонажів це принципово — інші моделі інколи виходять за межі дозволеного навіть при чітко прописаних заборонах у промпті. Плюс стабільний tool calling для SearchAgent коли персонаж має давати актуальні відповіді.
Не підходить коли: потрібна висока емоційна залученість і тривалий RP-діалог. GPT-4o mini надто "ввічлива" — навіть саркастичний персонаж у неї звучить м'якше ніж задумано в промпті.
Sao10K Euryale 70B
Llama 3.3 Euryale 70B — спеціалізована RP-модель від незалежного розробника Sao10K, популярна серед спільноти SillyTavern. Навчена спеціально на рольових сценаріях і тривалих діалогах з персонажами. Актуальна ціна: $0.65/M input, $0.75/M output. Контекстне вікно — 131K токенів.
Я підключив її для ROMANTIC категорії після того як помітив що DeepSeek і GPT-4o mini обидві "пом'якшують" персонажів — навіть з детальним системним промптом відповіді виходили надто нейтральними для романтичного компаньйона.
Важливе обмеження яке одразу виявив на практиці: модель не підтримує function calling. При спробі передати їй запит через SearchAgent з інструментами — отримую 404. Тому для цієї категорії агентний роутинг відключений окремо.
Не підходить коли: персонаж має давати актуальну інформацію (новини, курси, погода) або потрібна висока точність фактичних відповідей. Це суто RP-модель.
MiniMax M2-Her
MiniMax M2-Her — модель яку я розглядаю як проміжний варіант між DeepSeek і Euryale. Навчена спеціально під AI-компаньонів. Актуальна ціна: $0.30/M input, $1.20/M output.
Цікава тим що краще утримує роль персонажа ніж DeepSeek але вдвічі дешевша за Euryale по input. Поки тестую для COMPANION категорії — якщо результати підтвердяться, перейду на неї як основну для RP без жорстких романтичних сценаріїв.
Не підходить коли: потрібен максимальний рівень занурення в роль і тривалий діалог — тут Euryale поки виграє. Також варто перевірити підтримку tool calling перед використанням з агентним роутингом.