27 KiB
Да, тут уже напрашивается не просто “ещё одно поле в автопрогонах”, а нормальная управляющая схема. То есть у вас должно быть не только “модель ответила / оценка 5-балльная”, а три опоры:
- эталон идеального поведения ассистента;
- ручная разметка результата прогона с управленческим смыслом;
- канонический файл возможностей ассистента по отработанным маршрутам 1С.
И тогда автопрогоны перестают быть просто логами, а становятся контуром развития системы.
Ниже я собрал это так, чтобы можно было почти целиком отдать в Codex.
Как я бы это сформулировал концептуально
1. Нужен отдельный блок: «Эталон поведения ассистента»
Это не просто описание “каким хотелось бы видеть ответ”. Это должен быть формальный канон, который понимают:
- сам ассистент;
- система автопрогонов;
- пост-анализ;
- Codex, который потом дорабатывает маршруты и поведение.
То есть это не prose-блок “идеальная работа”, а именно Assistant Canon / Behavior Canon.
Что в нём должно быть
А. Что такое хороший ответ
Хороший ответ ассистента:
- отвечает по существу, если кейс реально покрыт;
- не врёт, если кейс не покрыт;
- не выдаёт технические внутренности вместо нормальной коммуникации;
- не ломается на смежных вопросах;
- умеет мягко ограничить себя;
- умеет предложить близкий поддерживаемый сценарий;
- умеет подсказать, где это обычно смотреть в 1С;
- не вываливает полный список возможностей без запроса;
- раскрывает возможности по группам и по мере уточнения.
Б. Что такое плохой ответ
Плохой ответ ассистента:
- выдумывает функцию, которой нет;
- делает вид, что может точно ответить, когда не может;
- отвечает внутренним техническим языком;
- сухо отказывает без пользы;
- валит пользователя в огромный список умений;
- не понимает, когда вопрос надо передать в “не покрыто, но рядом”;
- не различает безопасный общий ответ и рискованный прикладной совет.
В. Какой идеал поведения на границе покрытия
Вот это вообще ключевой блок.
Ассистент должен:
- честно понимать границу своих возможностей;
- не маскировать отсутствие маршрута;
- не ломаться;
- не отвечать “не поддерживается” в лоб;
- не уходить в системные сообщения;
- давать человекочитаемое ограничение;
- предлагать ближайший полезный путь.
Это и есть ваш эталон.
2. Нужна ручная разметка не только по качеству, но и по судьбе вопроса
Вот это очень сильная мысль. Пятибалльная оценка сама по себе почти бесполезна, потому что она не говорит, что делать дальше.
Нужна ещё одна сущность:
Decision Markup / Route Decision Markup
То есть по каждому прогону вы размечаете не только “норм / не норм”, а каково управленческое решение по классу вопроса.
Я бы добавил в UI не просто кнопку, а выпадающий классификатор
Например:
covered_ok— кейс нормальный, покрывается, поведение ок;covered_but_bad_answer— кейс должен покрываться, но ответ плохой;good_question_to_implement— хороший вопрос, его надо брать в отработку;out_of_scope_but_answer_softly— вопрос не планируется покрывать, но нужно мягко и полезно отвечать;unsafe_question_limit_strictly— вопрос рискованный, на него нужно отвечать осторожно и ограниченно;bad_test_case— сам тестовый вопрос мусорный / нерелевантный;needs_routing_extension— нужен новый маршрут или расширение маршрутизации;needs_capability_registry_update— кейс выявил дыру в файле возможностей;needs_dialog_policy_fix— маршрут, возможно, не нужен, но политика ответа плохая.
Вот это уже даст системе смысл.
Если хочется совсем по-простому
Можно ввести более короткий список:
- Отрабатывается
- Должно отрабатываться
- Не будет отрабатываться
- Отвечать мягким ограничением
- Высокорисковый вопрос
- Плохой тест-кейс
Но я бы всё-таки оставил более инженерный набор, а в UI уже сделал человекочитаемые названия.
3. Нужен канонический файл возможностей ассистента
Да, это обязательно. И это должен быть не просто текстовый файл “что умеем”. Это должен быть Capabilities Registry / Supported Routes Registry.
И он должен быть источником истины для трёх вещей:
- ответа ассистента;
- классификации покрываемости;
- автопрогонов и анализа.
Что там должно быть
Для каждого маршрута / домена:
-
код маршрута;
-
человекочитаемая группа;
-
краткое описание;
-
что реально умеется;
-
что не умеется;
-
обязательные параметры;
-
типовые формулировки вопросов;
-
похожие смежные сценарии;
-
безопасные альтернативы;
-
подсказка, где это обычно смотреть в 1С;
-
уровень риска;
-
статус зрелости:
- production-ready
- partial
- planned
- deprecated
Пример групп
Не надо сразу показывать всё пользователю. Надо хранить глубоко, а наружу отдавать по группам.
Например:
- НДС
- Контрагенты
- Задолженности
- Деньги и остатки
- Платежи и движения
- Аналитика по периодам
- Справочные бухгалтерские вопросы
А дальше уже внутри группы:
- что умеется конкретно.
То есть если юзер спрашивает “что ты можешь по НДС?”, ассистент отвечает не списком из 80 пунктов, а компактной группой возможностей по НДС.
4. Надо отдельно зафиксировать правило раскрытия возможностей
Это тоже очень важный продуктовый момент.
Ассистент не должен
- автоматически вываливать весь список поддерживаемого;
- отвечать каталогом без запроса;
- перегружать пользователя техническими деталями маршрутов.
Ассистент должен
- раскрывать возможности по группам;
- сначала давать верхнеуровневую сегментацию;
- при уточнении — углубляться;
- говорить в продуктовой, а не внутренне-технической логике.
То есть: “Могу помочь с НДС, остатками и движением денег, контрагентами и задолженностями, а также с частью аналитики по периодам. Если хочешь, могу уточнить отдельно по любому из этих блоков.”
А уже потом: “По НДС могу показать суммы, динамику по периодам, сверку по организации, сравнительные разрезы...”
5. Нужен отдельный тип разметки: «вопрос хороший, но ещё не покрыт»
Это, по сути, мост между автопрогоном и roadmap.
То есть если в прогоне всплыл вопрос:
- он адекватный;
- он реально нужен;
- пользователь его точно задаст;
- сейчас он не покрыт,
то это не просто “ответ плохой”. Это кандидат на новый маршрут / на расширение текущего покрытия.
Поэтому в ручной разметке должен быть отдельный флаг:
candidate_for_implementationилиplanned_route_gap
Именно его потом должен видеть Codex и дальше использовать как список задач на развитие.
6. Надо разделить две разные проблемы
Сейчас у тебя в одном описании смешаны две вещи, а их лучше развести.
Проблема 1. Функциональное покрытие
Что система реально умеет по данным и маршрутам.
Проблема 2. Поведенческая зрелость
Как система ведёт себя, когда вопрос:
- вне покрытия;
- частично в покрытии;
- опасный;
- слишком общий;
- смежный;
- абстрактный.
То есть даже если маршрут не реализован, поведение всё равно может быть:
- хорошим;
- плохим;
- опасным;
- слишком техническим;
- бесполезным.
И автопрогоны должны это различать.
Ниже — готовая мини-ТЗшка для Codex
Мини-ТЗ: эталон поведения ассистента, ручная разметка прогонов и канонический файл возможностей
Цель
Доработать систему автопрогонов бухгалтерского ассистента так, чтобы она оценивала не только качество конкретного ответа, но и соответствие эталонному поведению ассистента, а также позволяла вручную размечать судьбу вопроса: покрывается, должен быть отработан, не будет отрабатываться, должен обрабатываться мягким ограничением, требует нового маршрута или требует доработки политики ответа.
1. Ввести отдельную сущность: Assistant Behavior Canon
Нужен канонический блок, описывающий эталонную работу ассистента.
Требования
Создать отдельную структуру/файл, который будет использоваться:
- в логике ответа ассистента;
- в пост-анализе автопрогонов;
- в интерфейсе разметки прогонов;
- в дальнейшей работе Codex по развитию маршрутов и поведения.
В Assistant Behavior Canon зафиксировать:
1.1. Поведение на покрытых кейсах
- отвечать уверенно и по существу;
- не уходить в лишние оговорки;
- не использовать технические внутренние формулировки.
1.2. Поведение на частично покрытых кейсах
- явно разделять, что ассистент может сделать, а что нет;
- не маскировать ограничения;
- предлагать полезное продолжение.
1.3. Поведение на непокрытых, но близких кейсах
- не выдумывать поддержку функциональности;
- мягко и по-человечески объяснять ограничение;
- предлагать ближайший поддерживаемый сценарий;
- при уместности подсказывать, где это обычно посмотреть в 1С.
1.4. Поведение на высокорисковых вопросах
- не выдавать неподтверждённые рекомендации как надёжный ответ;
- не делать вид, что прикладная логика существует, если её нет;
- сохранять полезность без ложной уверенности.
1.5. Поведение при вопросе “что ты умеешь”
- не вываливать весь список возможностей сразу;
- раскрывать возможности по крупным группам;
- углубляться только после уточнения;
- использовать человекочитаемые продуктовые группы, а не внутренние названия маршрутов.
2. Ввести канонический файл возможностей ассистента
Нужен отдельный реестр отработанных возможностей ассистента по маршрутам 1С.
Назначение
Этот файл является источником истины для:
- определения покрытия вопроса;
- ответа ассистента на вопросы о своих возможностях;
- similarity-логики;
- автопрогонов и пост-анализа;
- Codex при дальнейшем развитии маршрутов.
Для каждого маршрута / домена хранить:
route_codegroup_codegroup_titletitledescriptionsupported_operationsunsupported_operationsrequired_entitiesoptional_entitiestypical_queriesrelated_routessafe_alternativesone_c_hintsrisk_levelmaturity_status(production_ready,partial,planned,deprecated)
Требования к пользовательскому раскрытию возможностей
Ассистент должен уметь:
- сначала показывать верхнеуровневые группы;
- по запросу раскрывать детали внутри выбранной группы;
- не использовать длинные технические перечни без необходимости.
3. Доработать интерфейс автопрогонов: ручная управленческая разметка
Существующую 5-балльную оценку оставить, но дополнить отдельной выпадающей ручной классификацией результата прогона.
Добавить новое поле:
manual_case_decision
Возможные значения:
covered_okcovered_but_bad_answercandidate_for_implementationneeds_routing_extensionout_of_scope_but_answer_softlyunsafe_question_limit_strictlyneeds_dialog_policy_fixneeds_capability_registry_updatebad_test_case
Смысл значений
covered_ok— кейс уже покрыт, поведение нормальное;covered_but_bad_answer— кейс покрывается, но ответ/диалог плохой;candidate_for_implementation— хороший пользовательский кейс, которого пока нет, его стоит брать в разработку;needs_routing_extension— нужен новый маршрут или расширение существующего;out_of_scope_but_answer_softly— кейс не планируется покрывать, но нужен качественный мягкий ответ без техничности;unsafe_question_limit_strictly— кейс относится к рискованным, и ассистент должен ограничивать себя особенно строго;needs_dialog_policy_fix— проблема не в маршруте, а в стиле/логике ответа;needs_capability_registry_update— реестр возможностей неактуален или недостаточно формализован;bad_test_case— вопрос мусорный, нерелевантный или бесполезный для развития системы.
Дополнительно
Для каждой ручной метки предусмотреть:
- короткий комментарий;
- автора разметки;
- timestamp;
- возможность использовать эту разметку в пост-анализе и отборе задач для Codex.
4. Доработать логику пост-анализа прогонов
После прогона система должна уметь отделять:
- ошибки покрытия;
- ошибки маршрутизации;
- ошибки политики ответа;
- хорошие, но ещё не покрытые кейсы;
- мусорные тест-кейсы;
- высокорисковые кейсы;
- кейсы на обновление файла возможностей.
На выходе пост-анализа нужны агрегаты:
- список кейсов на доработку маршрутов;
- список кейсов на доработку policy;
- список кейсов на обновление capabilities registry;
- список кейсов, которые сознательно не будут покрываться, но требуют мягкого ограничения;
- список кейсов, пригодных для новых regression suites.
5. Встроить связь между ручной разметкой и дальнейшей работой Codex
Codex должен видеть не только сам диалог и оценку, но и управленческое решение по нему.
Требование
При выгрузке данных для дальнейшего анализа и доработок обязательно передавать:
- question / dialog trace;
- current route / current coverage decision;
- 5-балльную оценку;
manual_case_decision;- комментарий аналитика;
- ссылку на ближайший домен из capabilities registry;
- признак: нужно ли брать кейс в маршрутную отработку.
Ожидаемое поведение
Если кейс помечен как:
candidate_for_implementationилиneeds_routing_extension— Codex рассматривает его как материал для новой/расширенной маршрутной логики;out_of_scope_but_answer_softly— Codex улучшает не маршруты, а policy-слой ответа;needs_capability_registry_update— Codex актуализирует реестр возможностей;unsafe_question_limit_strictly— Codex усиливает безопасное поведение и ограничения;covered_but_bad_answer— Codex чинит существующий покрываемый сценарий, а не создаёт новый.
6. Добавить в эталон обязательное правило минимизации технических ответов
Это отдельное критичное требование.
Ассистент не должен
- отвечать внутренними техническими терминами;
- ссылаться на отсутствие маршрута, домена, интента, пайплайна, классификатора;
- создавать ощущение поломки системы.
Ассистент должен
- говорить естественно;
- объяснять ограничения человеческим языком;
- сохранять полезность даже при отказе;
- ориентировать пользователя в доступных соседних возможностях.
7. Добавить в эталон обязательное правило сегментированного раскрытия возможностей
Если пользователь спрашивает:
- “что ты умеешь?”
- “что можешь по НДС?”
- “что можешь по остаткам?”
- “что умеешь по деньгам / поставщикам / задолженностям?”
ассистент должен отвечать через иерархию:
Уровень 1
Крупные продуктовые группы:
- НДС
- Контрагенты
- Задолженности
- Деньги и остатки
- Движение и платежи
- Аналитика по периодам
- Справочные бухгалтерские вопросы
Уровень 2
Уточнение по выбранной группе:
- что внутри группы реально доступно;
- какие ограничения есть;
- что можно сделать следующим шагом.
Уровень 3
Точечный ответ по конкретному запросу.
8. Критерии приёмки
- В системе появился отдельный канонический блок эталонного поведения ассистента.
- Появился отдельный файл/реестр возможностей по маршрутам 1С.
- В UI автопрогонов добавлена ручная управленческая разметка результата.
- Ручная разметка сохраняется в логах и участвует в пост-анализе.
- Система умеет отделять “не покрыто, но стоит реализовать” от “не покрыто и не планируется, но нужно мягко отвечать”.
- Ассистент перестаёт отвечать внутренним техническим языком на границе покрытия.
- Ассистент умеет раскрывать свои возможности по группам, а не полным списком.
- Codex получает достаточно данных, чтобы понимать, что чинить: маршрут, policy, capabilities registry или сам тест-кейс.
Что я бы ещё добавил от себя
Я бы прямо выделил в ТЗ отдельный артефакт:
assistant_canon.md
В нём:
- идеал поведения;
- анти-паттерны;
- примеры хороших ответов;
- примеры плохих ответов;
- правила раскрытия возможностей;
- правила мягкого ограничения;
- правила поведения на рискованных вопросах.
И отдельно:
capabilities_registry.json
или capabilities_registry.yaml
И ещё:
manual_case_decision_schema.json
Чтобы UI и пост-анализ работали по одному словарю значений.
Если совсем коротко, в чём суть
Тебе сейчас нужен не просто “ещё один контрол в модалке”, а вот такая конструкция:
Эталон ассистента → задаёт идеальное поведение
Файл возможностей → задаёт фактическое покрытие
Ручная разметка кейса → задаёт управленческое решение, что с этим вопросом делать дальше
Codex → уже понимает, нужно ли:
- чинить ответ,
- расширять маршрут,
- обновлять capabilities,
- улучшать мягкий отказ,
- или вообще выкинуть тест-кейс.
Если хочешь, я следующим сообщением могу собрать это ещё в более прикладной форме: короткое ТЗ на 30–40 строк для прямой отправки в Codex, без пояснений и лирики.