mandrock-files / ai

service-block-preferences

Як зробити, щоб кожна відповідь у claude.ai починалась і закінчувалась службовим моноблоком — рецензія маршруту, задіяні скіли, цифри. І де межа між реальними даними і красивою вигадкою.

Службовий хедер і футер у claude.ai

Дефолтна відповідь чату про себе не каже нічого. Якою моделлю це варто було робити, які інструкції спрацювали, скільки коштувало — модель це (частково) знає і мовчить.

Лікується не промптом щоразу, а преференціями — блоком інструкцій, який підмішується в кожну нову розмову. На виході кожна відповідь відкривається моноширинним службовим блоком і ним же закривається.

Налаштування живуть у Settings → Profile. Діють на нові розмови, не на поточну — тобто поточну цим блоком уже не полагодиш.


Мінімальна робоча заготовка

Три окремі правила, кожне робить одну річ:

- Завжди починати відповідь рядком-рецензією: чи правильно обрано
  інструмент (чат / агент / віддалений ран), модель і effort для цього
  запиту — коротко, одним рядком, до основної відповіді.
- У той самий службовий блок: назви задіяних скілів виділяти як quote,
  і туди ж цифри по токенах.
- Службовий блок подавати моноширинним блоком, а не звичайною прозою.
- Наприкінці відповіді — футер того ж стилю з підсумковими цифрами.

Три речі, від яких залежить, спрацює воно чи ні:

  1. Слово «завжди». Без нього преференція читається як контекстна — застосується вибірково, рівно тоді, коли модель сама вирішить, що доречно. А мета якраз протилежна.
  2. Явна вимога моноширинності. Інакше блок відрендериться прозою і зіллється з відповіддю. Формулювання monospace-lead спрацьовує.
  3. Розбивка на окремі рядки-правила. Один довгий абзац із трьома вимогами виконується частково; три коротких — цілком.

Що в цей блок класти можна

Рядок Джерело даних Чесність
маршрут: чат / агент / ран міркування моделі про задачу висновок, не факт
модель і effort те саме висновок
задіяні скіли модель бачить, які інструкції прочитала факт
прочитані файли пам'яті модель бачить свої виклики факт
preflight-оцінка вартості рану рахує скрипт на вузлі факт, вимірюваний
usage завершеного рану лог рану факт
токени поточного чату немає джерела вигадка

Останній рядок — головна пастка формату, і починається вона з того, як воно ламається. Чат-шар не бачить власних лічильників: ні спожитого, ні залишку в контексті немає. Тому будь-яка цифра «input/output цієї відповіді» — згенероване число, схоже на правду і не більше.

Марним футер із цифрами це не робить. Але тягне за собою одне правило: у службовому рядку вказувати, чиї це токени. usage завершених ранів — реальність, її міряв лог рану. токени цього чату — позначати як недоступне, а не затикати красивим числом.

Той самий принцип скрізь, де формат просить цифру, а джерела під неї нема: чесніше написати «немає джерела», ніж набити рамку правдоподібним шумом. Формат, який змушує вигадувати, гірший за відсутність формату.


Чому саме моноширинний

Не естетика, а функція: блок має не читатись як відповідь. Проза службового рядка зливається з першим абзацом, і око не встигає їх розділити. Моноширинний блок фіксованої форми зчитується як службовий шар за мілісекунди — і пропускається, коли не потрібен.

Звідси й друга вимога: форма стабільна, однакові поля в однаковому порядку. Блок, що щоразу різний, читається як текст — тобто перестає працювати.


Таблиця рішень

Ситуація Що робити
Блок з'являється не завжди додати «завжди» / «for all chats» у формулювання
Блок рендериться прозою окремим правилом вимагати моноширинний блок
Блок роздувся на пів екрана скоротити до трьох рядків; це шапка, а не звіт
Цифри виглядають правдоподібно, але сумнівно перевірити, чи є в них джерело; чат не бачить своїх токенів
Преференція не спрацювала в цій розмові преференції застосовуються до нових розмов
Формат заважає в конкретній задачі поточний запит перебиває збережену преференцію

Антипатерни


Чекліст

P.S. — про приладову панель

Найсмішніше в такому блоці те, що він виглядає як телеметрія, а насправді здебільшого самозвіт. Рядок «маршрут обрано правильно» пише рівно той, хто маршрут і обрав.

Непотрібним його це не робить — навіть змушена вголос самооцінка ловить частину помилок, яких мовчазна не ловить. Але тримати в голові варто: приладова панель, яку малює сам двигун, показує не стан двигуна, а те, що двигун про себе думає.

Рятує одне — тримати в ній рядки із зовнішнім джерелом. Preflight з чужого скрипта не збреше, бо він не з цієї розмови.