Как это работает
Каждый экспорт превращается в одинаковые нормализованные сообщения. Затем каждое действие персонажа воспроизводится модели как вызов инструмента, чтобы она училась тому, как человек взаимодействует, а не только тому, что он пишет, и отвечала так же.
Действия как вызовы инструментов
| Что сделал персонаж | Вызов инструмента в истории и в ответах в реальном времени |
|---|---|
| текстовый пузырь, возможно ответ или частичная цитата | send_message {text, reply_to?, quote?} |
| стикер | send_sticker {sticker_id, reply_to?} |
| GIF из медиатеки или URL из инструмента MCP | send_gif {gif_id | url, caption?} |
| фото, видео, голосовое, аудио, файл | send_media {media_id, caption?} |
| пересланная публикация | forward_message {message_id} |
| реакция | react {message_id, emoji} |
| (вспомнить старую историю) | search_history {query} |
Несколько вызовов за один ход становятся несколькими пузырями. Сообщения другой стороны превращаются в компактные строки, на которые ссылаются идентификаторы:
#52108 19:08 ↩ ответ на #52107 (вы: «лазанья бабушки 🍝»): Ты ни разу в жизни не готовил лазанью.
<sticker stk_156dbb381a>: кот в поварском колпаке помешивает кастрюлю
отреагировал 😂 на #52107 («лазанья бабушки 🍝»)Системный промпт
| Часть | |
|---|---|
| Кем быть | оценивать знания и стиль персонажа и никогда не знать больше, чем знал бы он |
| Профиль стиля | по всему экспорту: длина сообщений, заглавные буквы, пунктуация, использование эмодзи и стикеров, привычки ответов и реакций, пузыри за ход, дословные примеры |
| Медиатека | стикеры, GIF и медиа с тем, как их использовали |
| Заметки | то, что вы написали о человеке |
Промпт для чата статичен: без часов и счётчиков. Модель читает время из разделителей — день — и отметок HH:MM, а каждый запрос побайтно совпадает с началом следующего, поэтому кэши промптов провайдеров продолжают срабатывать.
Длинные чаты
бюджет истории ───────────────────────────────────────────▶
┌──────────────────────┬────────────────────────────────────────┐
│ память (≤ 350 слов) │ последние реплики, обрезано до 60 % │
└──────────────────────┴────────────────────────────────────────┘
отношения, факты, точка обрезки долго остаётся на месте,
темы, шутки поэтому кэшированный префикс тожеКогда воспроизводимая история превышает бюджет, следующий ответ сначала сворачивает самые старые реплики (и предыдущую память) в короткую сводку. Ничего не тратится при импорте и при открытии чата. Профиль стиля по-прежнему строится по всему экспорту, а search_history достаёт каждое старое сообщение. Использование токенов (промпт, кэш, ответ) показывается в { }.
Медиатека
Модель чата читает текст, поэтому стикер — это просто <sticker stk_…>, пока его не описали. Описать с ИИ отправляет изображения недостающих элементов медиамодели, которая должна поддерживать зрение.
- GIF, видеостикеры и видео отправляются как 4 кадра по порядку, чтобы модель видела движение. Для этого нужен ffmpeg (
brew install ffmpeg,apt install ffmpeg,winget install ffmpeg), иначе используется миниатюра. - Переделать описывает элемент заново. Любое описание можно отредактировать вручную.
- Описания принадлежат экспорту и служат всем его чатам.
Посмотрите сами в CLI: rooftop convert <экспорт> --persona "Jonas Weber".