Эта страница переведена с английской документации. Команды, идентификаторы и примеры не изменены. Среда выполнения 7.24.4 · SDK 2.6.7. Английский оригинал
Управление harness и проверенная оценка
Статус: действует
Область: текущее состояние
Последняя проверка: 2026-09-14
Владелец: среда выполнения ax-code
Об effort конкретной модели, переключателях размышления и воспроизведении рассуждения см. средства управления рассуждением текущей модели.
Необязательный контекст и управление инструментами
Включайте каждый эксперимент отдельно в конфигурации AX Code:
{
"experimental": {
"context_recovery": true,
"mcp_tool_discovery": true,
"tail_reminders": true,
"read_only_recipes": true
}
}
Все четыре параметра по умолчанию выключены. Прежде чем включать их вместе, измерьте успех задачи и затраченное время на своей модели. Они сохраняют уже заданные права инструментов и параметры изоляции. См. диагностику производительности.
context_recovery открывает context_recover и добавляет указатели на исходный код к успешным сводкам сжатия. Инструмент
принимает ключевое слово, идентификатор сообщения, необязательный идентификатор части и предел числа результатов. Он читает только текущий сеанс, включая
историю до сжатия, и исключает откатанный материал, скрытое рассуждение, а также игнорируемый или синтетический текст. Возвращает
исходные идентификаторы сообщений и частей и ограниченные выдержки. Поиск просматривает не больше 100 частей на страницу и первые 16 000 символов
каждой части. before продолжает поиск в более старых частях. Отсутствие совпадения не доказывает, что во всей истории этого текста нет.
Ответвления используют скопированную историю и новые идентификаторы. Присваивания учётных данных в выдержках скрываются.
mcp_tool_discovery оставляет встроенные инструменты доступными и вводит tool_search для подключённых инструментов MCP. Поиск
возвращает до пяти подходящих схем и делает эти инструменты доступными в следующем запросе модели. Он их не выполняет.
Выбор ограничен сеансом, не больше 32 инструментов, и на каждом запросе пересекается с текущим допуском.
Большие схемы могут быть опущены в результате поиска и загружены в следующем запросе. Если tool_search запрещён,
обычный допущенный каталог MCP остаётся доступен. Уже существующий конфликтующий инструмент с именем tool_search даёт ошибку.
tail_reminders переносит в конец запроса провайдера только динамические напоминания хода, которые порождает AX Code. Сохранённые сообщения
пользователя, рассуждение ассистента, история инструментов и статические инструкции не меняются. Это может изменить поведение модели
и использование кэша. Само по себе ускорение это не устанавливает.
read_only_recipes открывает read_recipe. Он выполняет до восьми зависимых вызовов read, glob или grep через
обычный диспетчер инструментов. У каждого дочернего вызова свои проверки прав, хуки, отмена и свидетельства сеанса. Рецепт
не может вычислять код, запускать команды оболочки, писать файлы, вызывать инструменты MCP или вкладывать другой рецепт.
{
"steps": [
{ "id": "files", "tool": "glob", "parameters": { "pattern": "src/**/*.ts" } },
{
"id": "source",
"tool": "read",
"parameters": { "filePath": { "$ref": { "step": "files", "path": ["paths", 0] } } }
}
],
"select": [{ "step": "source", "path": ["text"] }]
}
Канонические результаты glob содержат paths и truncated. Результаты grep содержат matches с path, line, text.
Результаты чтения содержат kind, отрисованный text и truncated. Выбирайте предыдущий результат по его шагу и пути
собственного свойства. Выбор из массива поддерживает буквальный фильтр contains и limit. Проверяйте возвращённый статус и усечение.
У рецепта срок отмены 60 секунд, бюджет аргументов 32 КБ, промежуточный бюджет 192 КБ и ограниченный итоговый
вывод. Отмена ждёт, пока принадлежащий инструмент завершится. Новые инструкции репозитория или медиа приостанавливают выполнение и
сохраняют обычный дочерний вывод, чтобы модель увидела их до продолжения. Успешный выбор заменяет промежуточный
вывод только в запросе модели. Исходные дочерние записи остаются в истории. Прерванные родители сохраняют дочерний вывод.
Исправление идущей генерации
GET /session/{sessionID}/steering возвращает UUID активной генерации и недавние квитанции. Включите существующий
параметр запроса directory, когда выбираете проект через сервер HTTP.
Отправьте POST /session/{sessionID}/steering с телом:
{
"expectedGeneration": "00000000-0000-4000-8000-000000000001",
"clientID": "correction_1",
"text": "Preserve the existing public function signature."
}
Используйте UUID из GET, а не пример UUID. accepted означает, что исправление ожидает. applied означает, что оно
записано как сообщение пользователя на границе цикла и включает идентификатор сообщения. Завершение у провайдера это не гарантирует.
rejected означает, что исправление не применено. Хуки жизненного цикла могут запретить допуск. Принятое исправление продлевает генерацию,
которая вот-вот завершится, ещё на одну итерацию, поэтому исправление, отправленное на финише, применяется, а не
отклоняется. Отмена и ошибки по-прежнему отклоняют ожидающие исправления, и старая генерация не может допустить текст в
следующую. Одинаковые повторы возвращают ту же сохранённую квитанцию. Другое содержимое при уже существующем идентификаторе клиента возвращает
HTTP 409. Жест TUI ctrl+s «отправить сейчас» использует эту конечную точку.
Параллельные вызовы инструментов в одном шаге
Когда модель выдаёт несколько вызовов инструментов в одном сообщении ассистента, среда выполнения выполняет их одновременно через
шлюз читатель/писатель в пределах сеанса. Инструменты только для чтения делят полосу и перекрываются. Правки файлов, bash, bash_input,
правки блокнотов, ops_apply, инструменты MCP и любой batch с дочерним элементом, небезопасным для параллельности, занимают исключительную полосу
и идут поодиночке в порядке прибытия. Вызов, прерванный в ожидании, не выполняется. Пакет держит собственный барьер порядка для
вызовов, которые сам отправляет, а у дочерних сеансов свой шлюз.
Квитанции локальны для процесса: не больше 256 на сеанс и 32 ожидающих запроса. Завершающие квитанции и записи неактивных сеансов
могут вытесняться. После перезапуска получите новую генерацию и сверьте сохранённые сообщения. Этот API не
обещает устойчивый поиск квитанций между перезапусками. Сгенерированный SDK открывает session.steering и session.steer.
Направление сохранённого продолжения в идущий ход
POST /task-queue/{taskID}/steer допускает текст поставленного в очередь продолжения в идущую генерацию сеанса на
следующей границе шага — в той же точке доставки, что и POST /session/{sessionID}/steering, — и в том же запросе отменяет строку очереди,
записывая steeredInto (UUID генерации) и steeredAt в полезную нагрузку строки для аудита.
Продолжения только из текста до 16 000 символов можно направить. Направленный текст применяет агента,
модель и инструменты идущего хода. Вложения, виды не-продолжений, уже урегулированные строки и слишком длинный текст отклоняются с HTTP 400, а
строка, которая по ходу запроса успевает перейти в другой статус, возвращает HTTP 409.
Ответ несёт последний элемент очереди и квитанцию, которая может быть пустой. Если активной генерации нет, строка остаётся
нетронутой, а ответ сообщает generation_not_active с пустой квитанцией. Вызывающий код может тогда отступить к
POST /task-queue/{taskID}/send-now, который только переносит строку в начало очереди и всё равно ждёт
конца хода. Направленную строку нельзя отменить, но она остаётся видимой как cancelled в истории /queue вместе с полями
аудита.
В TUI сочетание input_submit_steer (по умолчанию ctrl+s) направляет набранный черновик, если он есть. При
пустом поле ввода над занятым сеансом оно вместо этого продвигает направляемый префикс сохранённой очереди в порядке FIFO
и останавливается на первой ненаправляемой строке, чтобы поздние продолжения никогда не перескакивали вперёд. Раздел «Продолжения» боковой панели
и диалог /queue предлагают то же действие «направить сейчас» для строки, а подсказка рядом с поставленными продолжениями показывает назначенную
клавишу. Сгенерированный SDK открывает taskQueue.steer.
Предложение навыка из проверенной работы
Кандидаты в навыки — явные записи в уже существующем локальном хранилище AX Code. Они не входят в обнаружение навыков, пока вы их не повысите, и никогда не запускают автоматический вызов модели или переписывание инструкций.
Создайте файл предложения JSON с name, description, applicability, procedure и evidence, содержащим
sessionID, messageID и partID. Свидетельство должно указать исходный успешный результат verify_project с
выполненными конвертами теста или проверки типов на текущей чистой ревизии Git. Фразы об успехе или произвольного выхода оболочки
недостаточно. Валидация должна сослаться на успешную проверку другого сеанса на той же ревизии.
ax-code skill candidate propose --proposal proposal.json
ax-code skill candidate show verified-procedure
ax-code skill candidate validate verified-procedure --proposal independent-evidence.json
ax-code skill candidate promote verified-procedure
ax-code skill candidate retire verified-procedure
Держите входной JSON вне рабочего дерева или в игнорируемом локальном каталоге, чтобы проверка чистой ревизии оставалась осмысленной.
Повышение создаёт .ax-code/skill/{name}/SKILL.md и не перезаписывает существующий навык. Свидетельство источника перепроверяется
перед повышением. Каталоги-символические ссылки отклоняются. Вывод из обращения удаляет только собственный неизменённый файл кандидата.
Ручные правки вызывают конфликт. Перезапустите уже работающий экземпляр среды выполнения, чтобы обновить кэш обнаружения навыков.
Пройденные проверки устанавливают свидетельство именно для этих проверок. Прежде чем повышать, оцените применимость процедуры.
Снятие согласованного эксперимента
Из исходной копии репозитория используйте:
pnpm --dir packages/ax-code exec tsx script/harness-eval.ts run /path/to/manifest.json > /path/to/runs.ndjson
pnpm --dir packages/ax-code exec tsx script/harness-eval.ts compare /path/to/runs.ndjson baseline candidate
Доверенный манифест оператора содержит явные provider/model, runtimeRevision, необязательный argv CLI command,
repetitions, timeoutMs, ровно два именованных arms и tasks. У каждого плеча есть необязательные features (экспериментальные
флаги выше) и toolProfile. Каждая задача задаёт id, prompt, встроенные files (path/content) и oracle.
Оракул — доверенный JavaScript, который Node.js выполняет после выхода процесса написания кода. process.argv[1] указывает
временную оснастку. Его код остаётся вне рабочей области агента и никогда не берётся из ответа модели.
Каждая попытка получает свежую оснастку Git. Оракул должен завершиться с кодом 1 на начальной оснастке. Исполнитель использует
фиксированный вызов неинтерактивного CLI, чередует порядок плеч между повторами, применяет тайм-аут и снова запускает оракул
после завершённой попытки. elapsedMs включает процесс написания кода и проверку после прогона. verificationMs отдельно указывает
эту проверку. Подготовка оснастки и начальная неуспешная проверка исключены. Поток записывает каждую завершённую,
неуспешную, просроченную или отменённую попытку по мере окончания. Сырые промпты, вывод подпроцессов и учётные данные в
записях оценки не выдаются. Прерванная когорта остаётся незавершённой и не может дать согласованное сравнение.
Сравнение отвергает дубликаты и отсутствующие или несовпавшие пары задача/модель/когорта/повтор. Неуспешные и непроверенные попытки остаются в знаменателях доли успеха. Медианы задержки и парные отношения явно обусловлены проверенным успехом. P95 требует 20 успешных наблюдений в ячейке задача/модель/когорта/плечо. Сводки по смешанным ячейкам его опускают. Когорта хеширует манифест, но ревизия среды выполнения и внешние условия провайдера, конфигурации и кэша всё равно требуют контроля оператора. Малый дымовой прогон не устанавливает общего превосходства по скорости и не оправдывает смену значений по умолчанию.
Выбор возможностей и диагностика восстановления
Автономные запросы могут включать пакет контекста длинного агента, если у модели не меньше 64 000 токенов контекста, есть поддержка рассуждения и поддержка инструментов. Для моделей без записи в реестре все три свойства нужно объявить в разрешённых метаданных модели. Дополнительный пакет имеет предел оценки в 2048 токенов по символам. Это не окно разговора. Явные отрицательные объявления и зарегистрированные ограничения не дают допуск. Эта оптимизация текста промпта не устанавливает совместимость кэша или сохранённого размышления и не меняет автоматические сроки Super-Long и темп. Для них остаются прежние правила квалификации и переопределения.
Две подряд структурированные неудачи инструмента после последнего сообщения пользователя (счёт до синтетических хвостовых напоминаний) запрашивают более глубокое рассуждение при следующем вызове модели, если есть пригодный вариант effort. Успешный результат инструмента сбрасывает счётчик. Явный effort пользователя и настроенные параметры рассуждения сохраняют приоритет. Меняется выбор effort, а не пределы повторов и не права инструментов.
Локальные события воспроизведения llm.request включают capabilityResolution: протокол, окно контекста, выбран ли пакет контекста или
режим Super-Long, подряд идущие неудачи инструментов, а также выбор рассуждения или причину, почему он не применён.
boundary: "policy-selection" описывает решение AX Code. Плагины и SDK провайдеров всё ещё могут изменить итоговый запрос.
Явные значения effort GPT-6 сохраняются. API требует low или выше, а не none или minimal.
Событие хранит хеши запроса, а не тела промпта или учётных данных. Отсутствие варианта effort не означает,
что размышление по умолчанию у провайдера выключено.
Парный съём harness читает события JSON CLI step_finish и tool_use для токенов входа, выхода, рассуждения и чтения из кэша,
завершённых вызовов инструментов и ошибок инструментов. Повторяющиеся идентификаторы частей считаются один раз. metricsStatus равен observed, partial или
unavailable. Усечённые или повреждённые потоки и прерванные попытки скрывают итоги. Сравнения сообщают для каждой метрики
число наблюдённых и пропущенных прогонов и медиану, включая неуспешные попытки, где наблюдения есть. Пропущенные значения остаются
пропущенными. Эти счётчики описывают выданные события среды выполнения, а не биллинг провайдера, расход дочерних сеансов или внутренние инструменты собственного CLI. Полный наблюдённый поток без завершающих событий инструментов сообщает ноль вызовов инструментов. Проверка
оракулом остаётся источником успеха задачи. Один лишь расход не устанавливает успешное восстановление или лучшее качество.