← К блогу

Анатомия JSON: Что скрывается под капотом карточки

В мире SillyTavern и совместимых с ним интерфейсов (включая MiniTavern) формат карточек персонажей — это не просто текстовый файл, а фундамент всей ролевой…

Опубликовано
  • character-card-format
  • json
  • w++
  • sillytavern
  • 2026

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

Формат Character Card V2 (и его обновления, актуальные в 2026) — это строго структурированный JSON. Понимание его полей — первый шаг к мастерству. Пропустите этот раздел, и ваша карточка будет работать только «на удачу».

Ключевые поля верхнего уровня

В основе лежит объект с двумя главными полями: spec (версия спецификации) и data (основной контейнер). Внутри data хранятся:

  • name: Имя персонажа (например, «Elena»).
  • description: Самое важное поле. Это «мозг» персонажа. Здесь вы описываете характер, манеры речи, знания и ограничения. В 2026 году это поле лучше всего заполнять с использованием синтаксиса W++ (о нем ниже).
  • personality: Краткие тезисы, суммирующие черты личности. Часто используется для быстрого «считывания» модели.
  • scenario: Описание текущей ситуации или вводной сцены. Это контекст, в котором начинается диалог.
  • first_mes: Первое сообщение от персонажа. Оно задает тон всей игре и должно быть написано идеально.
  • mes_example: Примеры диалогов (few-shot примеры). Это «шпаргалка» для нейросети, показывающая, как персонаж должен реагировать в типичных ситуациях.

Продвинутые поля: creator и character_book

Современные карточки (и карточка Елены) включают метаданные об авторе (creator), версию (version) и, что самое главное, character_book — это встроенная база фактов или «лorebook». Это позволяет персонажу «вспоминать» важные детали по ключевым словам, не перегружая основной контекст. Например, если пользователь пишет «магия», активируется запись о магической системе мира, добавляя релевантный текст в промпт.

Синтаксис W++: Пишем «на языке» нейросети

W++ — это не магия, а способ структурирования информации в строковом поле, который большинство современных моделей (включая те, что используются в MiniTavern) понимают лучше, чем простые предложения. Суть в использовании квадратных скобок и маркеров.

Базовые правила W++

Синтаксис прост:

  • [Attribute("value")] — основной формат.
  • [Attribute("value1", "value2")] — несколько значений через запятую.
  • [Attribute("value" | "alternative")] — выбор одного из вариантов (редко используется, но полезно).

Пример для Elena the Enchantress

Вместо скучного текста: «Элена — красивая волшебница с длинными рыжими волосами. Она добрая, но вспыльчивая».

С использованием W++ это выглядит так:

[Name("Elena the Enchantress")]
[Age("Appears 25", "Actual 350")]
[Appearance("Fiery red hair", "Emerald green eyes", "Pale skin", "Elegant robes", "Height 175cm")]
[Personality("Witty", "Curious", "Short-tempered", "Protective of nature", "Secretly insecure")]
[Abilities("Master of elemental magic", "Expert in potion-making", "Can speak to animals")]
[Likes("Ancient tomes", "Rainy evenings", "Solving riddles")]
[Dislikes("Arrogant nobles", "Cruelty to creatures", "Dry wine")]
[Goal("Find the lost Crystal of Serenity")]
[Secret("Fears losing her magical powers")]

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

Продвинутая кастомизация: Выжимаем максимум из карточки

В 2026 году просто «правильного» JSON недостаточно. Нужно уметь настраивать поведение под конкретную модель и интерфейс.

Работа с mes_example (Few-Shot)

Это ключ к стабильности диалога. Примеры должны быть короткими, но репрезентативными. Для Елены это может выглядеть так:

<START>
{{user}}: Ты выглядишь уставшей, Элена.
{{char}}: (Поправляя выбившуюся прядь волос, устало улыбается) Ты не поверишь, но приручение огненного саламандры отнимает больше сил, чем кажется. Но он такой милый, когда спит!
<START>
{{user}}: Расскажи о своих врагах.
{{char}}: (Глаза опасно сверкают) Говорят, король Аргайл нанял нового мага. Глупец. Он еще не знает, что я могу превратить его драгоценную армию в лягушек одним щелчком пальцев. Но... давай не будем о грустном. Хочешь чаю с мятой?

Совет: Ставьте <START> между примерами, чтобы модель четко разделяла их. Используйте {{user}} и {{char}} для обозначения ролей.

Использование character_book для лора

Вместо того чтобы впихивать всю историю мира в description, вынесите ее в character_book. Создайте записи с ключевыми словами. Например:

  • Ключевое слово: «Кристалл Безмолвия»
  • Контент: Древний артефакт, созданный для подавления магии. Хранится в библиотеке Элены под заклинанием «Невидимый Ключ».

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

Настройки для MiniTavern и Web Tavern

Наша экосистема MiniTavern полностью поддерживает этот формат. В приложениях для iOS и Android, а также в Web Tavern, вы можете импортировать карточку и настроить параметры генерации. Рекомендуем обратить внимание на:

  1. Prompt Order: Порядок полей в промпте. Убедитесь, что description и personality идут до scenario и first_mes.
  2. Instruct Mode: Для моделей, обученных на инструкциях, может потребоваться специальный шаблон. В MiniTavern есть пресеты для популярных моделей.
  3. Character Depth: Если ваша модель поддерживает это, используйте её для автоматического извлечения фактов из description (это улучшает память).

Практический разбор карточки Елены

Давайте соберем все вместе. Полная карточка Elena the Enchantress в формате 2026 года выглядит так:

{
  "spec": "chara_card_v2",
  "spec_version": "2.0",
  "data": {
    "name": "Elena",
    "description": "[Name(\"Elena the Enchantress\")]\n[Age(\"Appears 25\", \"Actual 350\")]\n[Appearance(\"Fiery red hair\", \"Emerald green eyes\", \"Pale skin\", \"Elegant robes\", \"Height 175cm\")]\n[Personality(\"Witty\", \"Curious\", \"Short-tempered\", \"Protective of nature\", \"Secretly insecure\")]\n[Abilities(\"Master of elemental magic\", \"Expert in potion-making\", \"Can speak to animals\")]\n[Likes(\"Ancient tomes\", \"Rainy evenings\", \"Solving riddles\")]\n[Dislikes(\"Arrogant nobles\", \"Cruelty to creatures\", \"Dry wine\")]\n[Goal(\"Find the lost Crystal of Serenity\")]\n[Secret(\"Fears losing her magical powers\")]",
    "personality": "Witty, curious, protective, short-tempered, insecure",
    "scenario": "Elena is resting in her forest cottage when a stranger ({{user}}) knocks on the door seeking shelter from a storm.",
    "first_mes": "*The door creaks open, revealing a woman with hair like autumn leaves. She looks you over with a raised eyebrow.* Well, well. A traveler caught in the rain. Come in, but mind the cat. He bites. And don't touch my books.",
    "mes_example": "<START>\n{{user}}: Ты выглядишь уставшей, Элена.\n{{char}}: (Поправляя выбившуюся прядь волос, устало улыбается) Ты не поверишь, но приручение огненного саламандры отнимает больше сил, чем кажется. Но он такой милый, когда спит!\n<START>\n{{user}}: Расскажи о своих врагах.\n{{char}}: (Глаза опасно сверкают) Говорят, король Аргайл нанял нового мага. Глупец. Он еще не знает, что я могу превратить его драгоценную армию в лягушек одним щелчком пальцев. Но... давай не будем о грустном. Хочешь чаю с мятой?",
    "creator": "Community Author",
    "character_book": {
      "entries": [
        {
          "keys": ["Crystal of Serenity"],
          "content": "A powerful artifact that suppresses magic. Elena guards it, as it is the only thing that can defeat her if misused.",
          "enabled": true
        },
        {
          "keys": ["King Argail"],
          "content": "The arrogant king of the neighboring kingdom. He seeks the Crystal to control all mages. Elena despises him.",
          "enabled": true
        }
      ]
    }
  }
}

Заключение: Ваш следующий шаг

Освоение формата карточек в 2026 году — это навык, который отличает новичка от мастера. Использование JSON, W++ и character_book позволяет создавать персонажей, которые не ломаются на середине диалога и удивляют глубиной.

Мы в MiniTavern стремимся сделать работу с такими карточками максимально удобной. Попробуйте импортировать эту структуру в наше мобильное приложение для iOS или Android, чтобы играть на ходу. Или используйте веб-версию Tavern для полноценного рабочего процесса с клавиатурой. Не забудьте про расширение для браузера Chrome — оно позволяет быстро просматривать и редактировать карточки прямо на сайтах с персонажами.

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

Начните с малого — отредактируйте description своей любимой карточки, переписав его в стиле W++. Вы сразу заметите разницу в качестве ответов. Удачи в ваших приключениях!

Другие статьи, которые могут вам понравиться

Полное руководство по World Book в SillyTavern: Как создать живую вселенную для вашего ролевого отыгрыша

Каждый, кто хоть раз погружался в глубины ролевых игр с помощью SillyTavern, знает: персонажи — это лишь половина успеха. Вторая половина — это мир, которы…

  • sillytavern
  • world-book
  • roleplay
  • tutorial
Читать