Внутри платформы

Как ИИ-агент осваивает новый навык - и убирает за собой

Агент, который помнит только факты, каждый раз выводит порядок действий заново. Агенты Olano записывают его. Эта статья - про инженерию, которая за этим стоит: как повторяющаяся работа превращается в записанную многоразовую процедуру, как агент улучшает навык, который писал не он, ни разу его не перезаписав, как выученная копия переживает день, когда оригинал обновили сверху, - и почему ничто из этого не может незаметно испортить систему, которую должно улучшать.

Память говорит, что верно. Навыки говорят, как делается работа.

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

Умение процедурно. Понедельничный отчёт собирается в определённом порядке, из определённых источников, с определёнными оговорками. Запрос на возврат сверяется с тремя вещами, прежде чем кто-либо ответит. Ежеквартальный разбор поставщиков каждый раз вытягивает одни и те же шесть цифр. Агент с идеальными фактами и без процедуры будет делать каждую из этих задач чуть иначе каждый раз, и команда замечает именно этот разброс.

Поэтому агенты Olano держат рядом с памятью артефакт второго рода - навык. Навык - это небольшая папка с файлом SKILL.md внутри: имя, описание в одну строку, триггер, который говорит, когда за ним тянуться, и нумерованные шаги. Часть навыков поставляется с платформой. Часть приходит из набора навыков или с маркетплейса. Часть пишете вы. А часть агент пишет себе сам - из работы, которую действительно проделал.

Именно о последней категории эта статья.

Откуда берётся выученный навык

Каждый ход агента дописывается в журнал. Фоновый проход читает эти журналы с определённой частотой - раз в час при самой активной настройке, раз в четыре часа при самой спокойной - и читает только то, что ещё не читал, отслеживая это байтовым смещением по каждому журналу. Ничто не разбирается повторно, и ничто не пропускается из-за того, что файл вырос между запусками.

Дальше проход намеренно трудно запустить:

  • Меньше четырёх новых ходов - и он ничего не делает. Смещения всё равно фиксируются, чтобы эти ходы не накапливались и поздний запуск не вычитал в них лишнего.
  • Он идёт на уровне глубоких рассуждений - или не идёт вовсе. Дешёвой запасной модели нет. У каждого агента свой суточный предел глубоких запусков - примерно шесть, двенадцать или двадцать четыре, в зависимости от предустановки частоты, - и когда предел или бюджет расходов исчерпан, цикл пропускается и повторяется в следующий раз, а его смещения остаются незафиксированными. Ухудшенный разбор хуже, чем никакой: он выдаёт уверенные и неверные процедуры.
  • Он отступает, пока память перезаписывается. Проход сведения памяти берёт блокировку; дистиллятор видит её и отходит, вместо того чтобы дописывать в файл, который переписывается целиком.

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

Разведчик читает библиотеку прежде, чем читает журнал

Именно это не даёт выученной библиотеке превратиться в свалку. Разведчику навыков не дают разговор с вопросом «что ты выучил?». Ему дают разговор и вместе с ним перечень всех навыков, которые у агента уже есть, - включая управляемые и сторонние, которые лежат вне его рабочего пространства и которых его файловые инструменты сами не видят, - и спрашивают, чего не хватает, если вообще не хватает.

Каждый возвращённый кандидат несёт действие, и два из трёх действий не создают нового навыка вовсе:

  • skip - возможность уже закрыта. Это самый частый исход, и это успех.
  • update - существующий навык почти закрывает задачу, его стоит заточить. Кандидат называет цель.
  • create - действительно новое. Только тогда навык записывается.

Новый навык затем проходит вторую проверку: она ищет почти совпадающие имена, останавливается, если находит, и пишет аккуратно устроенный SKILL.md с правильным frontmatter. Если проверка не может завершиться, система записывает кандидата напрямую, вместо того чтобы его потерять.

Улучшить навык, который он не писал

Интересен как раз случай улучшения, потому что самая очевидная реализация - неверная.

Навык, который вы установили, - не один документ. Это может быть многофайловое руководство: SKILL.md плюс скрипты, справочные таблицы, формы, шаблоны. И владеют им сверху: когда набор, из которого он пришёл, обновляется, эта папка заменяется целиком. Так что агент, который «улучшает» такой навык, переписывая его на месте, сделал две ошибки сразу: он протиснул руководство через пересказ и положил своё улучшение точно на путь следующего обновления, которое молча его удалит.

Olano вместо этого ответвляет. В первый раз, когда агент улучшает не свой навык:

  • Вся папка побайтово копируется в выученную библиотеку агента, а внутренние ссылки на пути переписываются, чтобы копия работала с нового места.
  • Копия берёт точное имя оригинала, поэтому при загрузке навыков она затеняет оригинал, а не подменяет его. Файл оригинала на диске не трогают никогда.
  • Рядом записывается справка о происхождении: отпечаток источника по каждому файлу на момент ответвления, отпечаток копии по каждому файлу на тот же момент и структура разделов исходного файла SKILL.md.
  • Нетронутый снимок исходного состояния хранится отдельно и позже служит базой слияния.

Каждое последующее улучшение применяется к копии, добавлением. Отсюда вытекают два свойства, которых не может быть у схемы с перезаписью на месте: «потеряло ли это улучшение что-нибудь?» становится проверяемым вопросом относительно зафиксированной基 линии, а не размытым сравнением двух несвязанных документов, и «изменился ли оригинал сверху?» остаётся вопросом, на который всегда есть ответ.

Заслон сохранности

Отказ, которого все боятся в самоизменяющихся системах, - это постепенная тихая деградация: каждый проход чуть короче, чуть бледнее, пока то, что работало, не станет абзацем общих слов. Обещать, что так не будет, - не инженерный ответ.

Поэтому при каждой загрузке навыков выученная копия сверяется со своим же зафиксированным исходным состоянием. Она не проходит, если:

  • файла, который был на момент ответвления, теперь нет;
  • текстовый файл сжался ниже половины исходного размера (файлы примерно до половины килобайта не проверяются: небольшие файлы законно сильно меняются в размере);
  • файл SKILL.md потерял больше трети заголовков разделов оригинала.

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

Когда оригинал меняется внизу

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

ОригиналВыученная копияЧто происходит
Без измененийЛюбоеОставить выученную копию. Делать нечего.
ИзменёнНе тронутВзять новую версию сверху, переписать её внутренние ссылки на пути и заново проштамповать происхождение новым отпечатком источника.
УдалёнНе тронутУдалить и из выученной копии. Сверху его убрали не просто так, и локально ничто этому не противоречит.
УдалёнИзменёнОставить выученную копию и приложить пометку о конфликте. На это стоит посмотреть человеку; до тех пор ничто не выбрасывается.
ИзменёнИзменён - текстТрёхстороннее слияние относительно зафиксированной базы. Чистое слияние применяется. Настоящий конфликт оставляет выученную копию и уходит на проход по библиотеке для согласования по смыслу.
ИзменёнИзменён - скрипт или двоичный файлОставить выученную копию и помечать её. Код никогда не сливается автоматически: молча сломанный скрипт хуже устаревшего.

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

Один проход по всей библиотеке

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

Граница не рекомендация, а принуждение: для этого прохода оригиналы и управляемые навыки - только для чтения. Править, сливать и удалять он может лишь внутри выученной библиотеки. Перед началом с каждого файла, который он может тронуть, снимается снимок, а по завершении он сообщает, что изменил, с одной кнопкой отмены.

То же обращение с самим рабочим пространством

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

Этим занимается проход сведения рабочего пространства. Он читает файлы личности, поведения, указаний и долговременной памяти агента плюс дневные журналы за последние две недели и переписывает их на месте: сводит переформулированные дубликаты, убирает противоречия, группирует связанное под ясными заголовками и переносит содержимое в файл, которому оно и принадлежит. Дневные журналы чистятся от повторов жёстче всего, потому что именно там повторы набираются быстрее.

Указание, по которому он работает, длиной в одно предложение - и это предложение несёт всё: сохрани голос агента и каждое уникальное указание; сводить можно, удалять нельзя. Как и на проходе по библиотеке, с каждого целевого файла сначала снимается снимок, а результат сообщается с отменой в один щелчок.

Два правила, и разница важна

Не всё в этом цикле управляется одинаково, и разделение сделано намеренно, а не из удобства.

  • Менять то, что агенту велено делать, можно только предложением. The pass that reviews recent work and concludes an agent's instructions should be sharper does not edit those instructions. It writes grounded proposals into a review queue, and they wait - even with Fully Autonomous on, which otherwise lets new skills, memory and tidy-ups apply on their own. Nothing rewrites an agent's instructions because a background job thought it should, unless a deployment owner has explicitly lifted that hold for the agent.
  • Уборка без потерь применяется сразу, со снимком и отменой. Убрать дубликаты в памяти, свести два одинаковых выученных навыка, соединить повторяющуюся заметку - это не меняет того, что агент делает, только то, насколько опрятно это записано. Требовать человеческого щелчка на каждое такое действие значило бы приучить команду одобрять не читая, а это худший возможный исход для той очереди, которая действительно важна. Поэтому они применяются напрямую, после снимка, и каждый запуск сообщает, что изменил, с отменой.

Всё это можно отключить. Каждое поведение - дистилляция, обучение навыкам, поддержание библиотеки, сведение рабочего пространства, сведение памяти - отдельный переключатель, задаваемый для всей установки и переопределяемый по агенту в обе стороны, так что «выключено везде, кроме этого одного агента» - реальная конфигурация. Над ними стоит главный переключатель и отдельный выбор: работать по расписанию или только когда попросят. Предустановки частоты - спокойная, сбалансированная, активная - двигают расписания и суточные пределы глубоких рассуждений вместе, и все они подчиняются тем же жёстким средствам контроля расходов, которые управляют всем остальным в установке.

Как выглядит полный цикл

Агенты делают настоящую работу дняРазбираются только непрочитанные ходы - на глубоком уровне или никакФакты попадают в память; разведчик сначала проверяет всю библиотекуНовые навыки проверяются и записываются; улучшения ответвляются, но никогда не перезаписываютЗаслон сохранности отправляет в карантин всё, что деградировалоОбновления сверху возвращаются трёхсторонним слияниемБиблиотека и рабочее пространство сведены, со снимками, с возможностью отката

Накопление идёт медленно и конкретно. Отчёт, который ваш операционный агент три недели подряд собирал руками, на четвёртой существует как записанная процедура. Навык из набора, почти подходивший вашей отрасли, несёт вашу правку и всё равно принимает следующее обновление поставщика, вместо того чтобы быть им затёртым. Файл указаний, разросшийся до четырёх страниц перекрывающихся советов, стал двумя страницами без перекрытий - и каждая фраза, которая была только в удалённой версии, по-прежнему есть в оставленной.

Чем это не является

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

Это не ограничение, которое мы обходим. Именно поэтому цикл - то, чем вы можете управлять, а не то, чему приходится доверять, - и по той же причине модель под ним можно заменить так, что агент не потеряет выученного.

Читайте также

Остальные материалы серии «Платформа изнутри» и главы руководства, которые идут глубже.

Частые вопросы

Что такое навык и чем он отличается от памяти?

Память держит то, что верно о вашем бизнесе: цены, людей, решения, предпочтения. Навык держит то, как делается работа: короткая записанная процедура с именем, описанием, триггером, который говорит, когда за ней тянуться, и нумерованными шагами. Память избавляет от того, чтобы агент задавал вам один и тот же вопрос дважды. Навыки избавляют от того, чтобы он дважды изобретал одну и ту же процедуру, каждый раз чуть иначе.

Переписывает ли агент навыки, которые вы ему дали?

Нет. Навыки от вас, из набора навыков или с маркетплейса - это оригиналы только для чтения, их никогда не правят и не удаляют. Чтобы улучшить такой навык, агент копирует всю его папку в свою выученную библиотеку и правит копию, которая берёт имя оригинала и поэтому имеет приоритет при загрузке навыков. Файл оригинала на диске остаётся нетронутым - именно это делает позднее обновление сверху пригодным для слияния, а не потерянным.

Что мешает выученному навыку деградировать до худшего пересказа?

Заслон сохранности, который срабатывает при загрузке навыков. Выученная копия сверяется со своим же зафиксированным исходным состоянием: если текстовый файл сжался ниже половины исходного размера, если пропало больше трети исходных заголовков разделов или если файла, который был в начале, теперь нет, копия уходит в карантин, а работает оригинал. Это структурная проверка, а не обещание, - и копии, написанные человеком вручную, не проверяются, потому что осознанные замены остаются главными.

Что произойдёт, когда исходный навык позже обновят?

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

Меняется ли что-нибудь без моего согласия?

Зависит от того, что меняется, и разделение сделано намеренно. Всё, что меняет то, что агенту велено делать, - его указания, его поведение - записывается предложением в очередь на рассмотрение и никогда не применяется само. Уборка без потерь - убрать дубликаты в памяти, свести повторяющиеся выученные навыки, соединить повторяющиеся заметки - может применяться напрямую, но только после снимка, и каждый такой запуск сообщает, что изменил, с отменой в один щелчок. Кроме того, каждое из этих поведений можно отключить отдельно - для всей установки или для одного агента.

Это дообучение ИИ-модели на моих данных?

Нет. Никакие веса модели не обучаются и не дообучаются. Всё, что производит этот цикл, - обычный markdown-файл внутри вашей установки: навык, запись памяти, предложение изменить указание. Ваша команда может их читать, сравнивать, править руками, одобрять и откатывать. Эта читаемость и есть суть: именно она делает цикл улучшений тем, чем можно управлять, а не тем, чему приходится доверять.

Разверните систему, которая записывает то, чему научилась

Накопление имеет значение только если работа под ним настоящая. Запишитесь на консультацию: мы опишем процесс, оценим его и начнём строить только после вашего согласия.

Обсудить проект