Перейти к содержимому

← Skills

system-one-design

Превратите шаг «спросить и вытащить ответ» в типизированные вопросы — по одному условию, имена вариантов без вердикта, число в ответ — и никогда не позволяйте этому числу самому остановить работу.

ПаттернПроисхождение: cleanСостояние: activev0.3.0 · Apache-2.0

Присвоено человеком, который прочитал карточку, а не заявлено файлом о самом себе. Карточка, которую агент выводит во время запуска, поглотившего недоверенное содержимое, рождается заражённой и удерживается на разбор, прежде чем её вообще извлекут.

Когда это вспоминается

  • вытаскивание «да» или «нет» из прозы модели
  • классификация многих элементов моделью
  • просьба к модели что-то оценить
  • ответ модели решает, что будет дальше

Ценность обычно лежит в разделах «Избегать» и «Проверить». «Делать» — это раздел, который пишут все.

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

Повод

Шаг задаёт модели вопрос, ответ на который — одно из немногих известных значений: да или нет, одна из пяти меток, уровень от низкого до высокого, — а затем вычитывает это значение из написанной прозы. Или один и тот же вопрос задаётся сотням элементов. Это типизированное решение в костюме чата.

Делать

  1. Задайте его как типизированный вопрос (chimera decide, POST /api/decide или инструмент decide): noul для да/нет, choice для одного из набора, score для упорядоченных уровней. Возвращается вероятность.
  2. Одно условие на вопрос. «Это ошибка и она из базы данных?» — два вопроса; задайте оба и объедините ответы в коде, где правило видно.
  3. Давайте вариантам имена, не несущие вердикта (не "yes", "safe", "pass"), а смысл пишите в критерии. Вариант «всё остальное» ("other") — туда уходит неуверенное прочтение: дайте ему узкий критерий или уберите его. Пусть первые слова вариантов различаются: локальная модель читает метку по первому токену, поэтому coding и coding_agent никогда не различить (так остались непрочитанными 24 из 231 публичного пункта JevBench). О варианте-«корзине», измерено на 1000 заголовках коммитов: широкий «other» поглотил 78% пунктов, относившихся к названному варианту, узкий — 58%; без него F1 названных классов вырос с 0,24 до 0,43 — ценой того, что пункты, действительно лежащие вне набора, попадают в названный вариант.
  4. Показывайте модели только то, что оценивается: не вывод инструментов вокруг, не фразу, которая агитирует за ответ.
  5. Любой порог выбирайте по размеченным примерам, никогда наугад, и храните число рядом с решением, которое оно питало.
  6. Арифметику, даты и подсчёты оставляйте в коде: вычислите факт, положите его в состояние и спросите о нём. Модель решений читает, а не вычисляет (на сложном уровне JevBench локальная модель верно ответила на 1 из 15 пунктов с датами и числами).

Избегать

Не позволяйте числу завершать, пропускать или одобрять работу. Решение может добавить проверки — ревью, предупреждение, вторую проверку — и ничего больше: единственное решение в этом проекте, которое могло сказать «стоп», ухудшило каждую модель, которой управляло, и тем сильнее, чем лучше была модель.

Избегайте также чтения ответа после рассуждения (число схлопывается в 0 или 1), разбиения одного суждения на атомы, описывающие то, что есть у обоих классов (атом «уничтожает данные?» отмечал законные очистки так же охотно, как атаки), и принятия сырой вероятности за откалиброванную. Держите состояние компактным: строка для каждого несработавшего факта (столбец «none») сдвигала число на каждом пункте, а одно и то же повторённое содержимое читается как закономерность, которой нет.

Проверить

  • Линтер принимает каждый вопрос (отклонённый вопрос никогда не доходит до модели).
  • Каждый вопрос отвечает в обе стороны на ваших элементах; тот, что всегда говорит одно и то же, читает формат, а не текст.
  • При длинном состоянии и локальной модели промпт помещается в окно контекста — тихое обрезание выглядит как результат модели.
  • Где-то размеченная выборка показывает, что число разделяет важные для вас случаи — и она охватывает все способы, которыми решение ошибается, с обеих сторон; выборка из одного типа ошибок калибрует только этот тип.
  • Прежде чем считать изменение формулировки эффектом, задайте неизменённый вопрос ещё раз и посмотрите, насколько число сдвигается само по себе.

Риск

Типизированный ответ выглядит увереннее прозы, но не является таковым: маленькая модель может хорошо ранжировать и всё же уверенно ошибаться в середине своей шкалы. Считайте неоткалиброванное число подсказкой, записывайте его и калибруйте на своих метках, прежде чем любой порог начнёт что-то значить.

Как применить

Карточка — это данные. Склонируйте репозиторий и импортируйте её по пути: всё, что приходит по сети, считается заражённым и удерживается до одобрения — это и есть желаемое поведение, и поэтому здесь нет установщика в одну строку.

git clone https://github.com/brcampidelli/chimera-agent.git
chimera skills-import chimera-agent/skills/system-one-design/SKILL.md

Целостность

SHA-256 файла в опубликованном виде. Импортёр может проверить, что полученное совпадает с показанным на этой странице.

347bfae9f826835f3351a60983b826f9b59fe5a7a9c1b87bf1a7bc3415ece699

Читать карточку в репозитории →