Головна / Статті / AutoSaddler: агенти, які переписують власні сідла

AutoSaddler: агенти, які переписують власні сідла

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

3147 слів

Використовуйте це як оновлену версію ідей з книги „AutoSaddler: Teaching AI Agents to Improve Their Own Harness“ для співробітників-операторів: чіткі етапи, впорядковані блоки коду та примітки щодо відновлення, які залишаються при передачі обов’язків. Огляд працює найкраще, якщо його розглядати як вимірювану поверхню. Запишіть один ідеальний запис, один випадок збою та примітки щодо скасування змін перед розширенням обсягу роботи. Віддавайте перевагу невеликим, тестованим одиницям перед об’ємними скриптами. Коли якийсь крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на заплутану послідовність дій.

Проблема: агенти зазнають невдач не лише через проблеми з моделлю

Щодо проблеми: агенти зазнають невдач не лише через проблеми моделі, тому перед зміною коду необхідно визначити вхідні дані, власника кроку та критерії завершення. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Розглядайте цю стадію як контракт між вхідними даними та перевіреними результатами. Позначте всі елементи, визначте критерії успіху та не допускайте мовчазного часткового завершення. У разі, коли наступним кроком є код або виклик інструменту, віддавайте перевагу структурованим результатам із перевіркою схеми перед вільним текстом.

                 AI Agent
                     │
          ┌──────────┴──────────┐
          │                     │
       Model                 Harness
                                │
              ┌─────────────────┼─────────────────┐
              │                 │                 │
           Prompts            Tools          Middleware
              │                 │                 │
              └─────────────────┼─────────────────┘
                                │
                         Agent Loop Logic
                                │
                                ▼
                           Execution
                                │
                                ▼
                              Trace

Від інженерії запитів до інженерії використання ресурсів — необхідно визначити вхідні дані, відповідальну особу за кожен етап та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити етап з відомої точки контролю, не намагаючись вгадати прихований стан. Записуйте час виконання та витрати на токени чи запити поруч із функціональними результатами. Чітке бачення витрат заздалегідь запобігає несподіваним рахункам під час переходу від демо-середовищ до спільних. У разі, коли наступним кроком є написання коду чи виклик інструменту, краще використовувати структуровані результати з перевіркою схеми, ніж вільний текст.

Керування патчами

Для патчів Steering необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Конфігурацію слід тримати окремо від коду додатку. Файли середовища, сховища конфіденційних даних та флаги функцій мають знаходитися в одному місці, яке оператори можуть перевіряти, не читаючи весь код. Аутентифікуватися потрібно на шлюзі, а переавторизація — на рівні обробки даних. Один лише токен не є межею окремого тенантства. Для патчів Steering необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Краще використовувати невеликі, перевірювані одиниці коду замість величезних скриптів. Коли крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на заплутану систему обробки даних.

Патчі функціональності

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

Сліди виконання стають сигналом для навчання

Під час роботи з треками виконання, які є сигналом для навчання, спочатку запишіть умови використання: необхідні вхідні дані, сигнал про успіх та те, що відбувається при частковій невдачі. Такий перелік допомагає зберігати чесність пізніших змін у коді. Записуйте час виконання та витрати на токени або запити поруч із функціональними результатами. Відображення витрат заздалегідь запобігає несподіваним рахункам, коли процес переходить від демо-середовища до спільних. Фіксуйте назву інструменту, хеш аргументів, затримку та результат кожного виклику. Без цих записів дебагування циклів агента займає години.

Task
  ↓
Model reasoning / response
  ↓
Tool selection
  ↓
Tool arguments
  ↓
Tool result
  ↓
Middleware
  ↓
Next model action
  ↓
Final answer
  ↓
Evaluation
Task failed
   │
   ▼
Agent never inspected repository metadata
   │
   ▼
Why?
   │
   ▼
Tool existed but description didn't expose its purpose
   │
   ▼
Diagnosis
   │
   ▼
Update tool description
   │
   ▼
Evaluate again

Цикл оптимізації AutoSaddler

Під час роботи з циклом оптимізації AutoSaddler спочатку запишіть контракт: необхідні вхідні дані, сигнал про успіх та те, що відбувається при частковій невдачі. Цей перелік допомагає зберігати чесність подальших змін у коді. Тримайте конфігурацію окремо від коду програми. Файли середовища, сховища секретних даних та флаги функцій мають знаходитися в одному місці, де оператори можуть їх перевіряти, не читаючи весь код. Фіксуйте назву інструменту, хеш аргументів, час відгуку та результат кожного виклику. Без цих записів дебагування циклів агента займає години. Під час роботи з циклом оптимізації AutoSaddler спочатку запишіть контракт: необхідні вхідні дані, сигнал про успіх та те, що відбувається при частковій невдачі. Цей перелік допомагає зберігати чесність подальших змін у коді. Віддавайте перевагу малим, тестованим одиницям перед величезними скриптами. Коли якийсь крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на заплутану послідовність операцій.

             Training Cases
                    │
                    ▼
              Run Agent
                    │
                    ▼
              Execution Traces
                    │
                    ▼
          ┌───────────────────┐
          │ Diagnosis-Patch   │
          │                   │
          │ Find root cause   │
          │ Propose patch     │
          └─────────┬─────────┘
                    │
                    ▼
              New Candidate
                    │
                    ▼
                Evaluate
                    │
          ┌─────────┴─────────┐
          │                   │
       Improved            Regressed
          │                   │
          └─────────┬─────────┘
                    ▼
               Reflection
                    │
                    ▼
             Reusable Lessons
                    │
                    ▼
                EvoDAG
                    │
                    ▼
            Candidate Evolution
                    │
                    ▼
             Development Gate
                    │
                    ▼
          Best Generalizing Harness

1. Diagnosis-Patch: виявлення справжньої проблеми

  1. Diagnosis-Patch: виявлення справжньої проблеми найкраще функціонує, якщо його розглядати як вимірювану поверхню. Збережіть один ідеальний запис, один випадок збою та примітку про скасування змін перед розширенням обсягу роботи. Розглядайте цей етап як контракт між вхідними даними та перевіреними результатами. Позначте всі елементи, визначте критерії успіху та не допускайте мовчазного часткового виконання завдань. Використовуйте інструменти з вузькими схемами та чіткими позначеннями побічних ефектів. Адміністраторам потрібно знати, які виклики змінюють стан системи, перш ніж вони автоматично схвалять їх.

2. Рефлексія: навчання на основі результату

  1. Рефлексія: навчання на основі результатів ефективніше, коли їх розглядають як вимірювану характеристику. Запишіть один ідеальний приклад роботи, один випадок невдачі та примітки щодо скасування змін перед розширенням обсягу завдань. Фіксуйте час виконання та витрати на токени чи запити поруч із функціональними результатами. Чітке бачення витрат заздалегідь запобігає несподіваним рахункам під час переходу з демо-середовища у спільні.
Patch:
Add stronger instruction to inspect repository metadata.
Observed:
✓ Fixed cases A, B, C
✓ Existing cases remain stable
✗ Case D still failsLesson:
Instruction improves metadata discovery,
but does not address downstream tool selection.

3. Еволюція: не забувайте про те, що спрацювало

  1. Еволюція: не забувайте, що те, що працює, працює найкраще, якщо розглядати це як вимірювану поверхню. Збережіть один ідеальний запис, один випадок збою та примітку про скасування змін перед розширенням обсягу. Тримайте конфігурацію окремо від коду додатку. Файли середовища, сховища конфіденційних даних та прапорці функцій мають знаходитися в одному місці, де оператори можуть перевіряти їх, не читаючи весь граф. Зробіть інструменти доступними з вузькими схемами та чіткими позначеннями побічних ефектів. Хостам потрібно знати, які виклики змінюють стан, перш ніж вони автоматично схвалюють їх.
  2. Еволюція: не забувайте, що те, що працює, працює найкраще, якщо розглядати це як вимірювану поверхню. Збережіть один ідеальний запис, один випадок збою та примітку про скасування змін перед розширенням обсягу. Віддавайте перевагу малим, тестованим одиницям перед величезними скриптами. Коли якийсь крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на заплутану послідовність дій.
Patch 1 → Patch 2 → Patch 3
                 Base
              /    |    \
             /     |     \
          P1       P2      P3
          │       / \       │
          │      /   \      │
         P4     P5   P6     P7
                 \   /
                  \ /
                   P8

Найважливіший захист: узагальнення

Для забезпечення найважливішого захисту – узагальнення – необхідно перед зміною коду визначити вхідні дані, виконавця кроку та критерії завершення. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись визначити прихований стан. Розглядайте цю стадію як контракт між вхідними даними та перевіреними результатами. Позначте всі елементи, визначте критерії успіху та не допускайте мовчазного часткового завершення роботи. Аутентифікуйтеся біля шлюзу та повторно авторизуйтесь на рівні обробки даних. Один лише токен-носій не є межею окремого тенанта.

Training cases
      │
      ▼
Generate candidate
      │
      ▼
Evaluate
      │
      ▼
Development split
      │
      ▼
Does the improvement generalize?
      │
   ┌──┴──┐
   │     │
  Yes    No
   │     │
   ▼     ▼
Keep   Reject

Чому важлива надійна екзекуція

Щоб зрозуміти, чому важлива надійна реалізація, необхідно перед зміною коду визначити вхідні дані, власника кроку та критерії завершення. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись визначити прихований стан. Записуйте час виконання та витрати на токени чи запити поруч із функціональними результатами. Відображення витрат на ранньому етапі запобігає несподіваним рахункам під час переходу з демо-середовища у спільні. Аутентифікуйтеся біля шлюзу та повторно авторизуйтесь на рівні обробки даних. Один лише токен-носій не є межею окремого тенантства.

                    Run
                     │
                     ▼
              Append-only Events
                     │
       ┌─────────────┼─────────────┐
       ▼             ▼             ▼
   Candidates    Evaluations    Sessions
       │             │             │
       └─────────────┼─────────────┘
                     ▼
                Snapshot
                     │
                     ▼
                Final Result

Відтворюваність вважається пріоритетною задачею

Оскільки відтворюваність вважається пріоритетною задачею, необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість знову виконати крок з відомої точки контролю, не намагаючись вгадати прихований стан. Зберігайте конфігурацію поза кодом додатку. Файли середовища, сховища конфіденційних даних та флаги функцій мають знаходитися в одному місці, яке оператори можуть перевірити, не читаючи весь код. Аутентифікуйтеся біля шлюзу та знову авторизуйтесь на рівні обробки даних. Один лише токен не є межею окремого тенантства. Оскільки відтворюваність вважається пріоритетною задачею, необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість знову виконати крок з відомої точки контролю, не намагаючись вгадати прихований стан. Віддавайте перевагу невеликим, тестованим одиницям перед об’ємними скриптами. Коли крок зазнає невдачі, причина має вказувати на конкретну відповідальність.

ніж заплутана система трубопроводів.

Candidate A
   │
   ├── Prompt version X
   ├── Harness commit Y
   ├── Dataset revision Z
   └── Model configuration M

V1 проти V2

Під час роботи над V1 проти V2 спочатку запишіть умови контракту: необхідні вхідні дані, сигнал про успіх та те, що відбувається при частковій невдачі. Цей перелік допомагає зберігати чесність у подальших змінах коду. Розглядайте цей етап як контракт між вхідними даними та перевіреними результатами. Дайте назви елементам, визначте критерії успіху та не допускайте беззвучного часткового виконання. Записуйте назву інструменту, хеш аргументів, час відгуку та результат кожного виклику. Без цих записів дебагування займає години.

V1

Під час роботи над V1 спочатку запишіть умови використання: необхідні вхідні дані, сигнал про успішне виконання та те, що відбувається у разі часткової невдачі. Такий перелік допомагає зберігати чесність пізніших змін у коді. Запишіть час виконання та витрати на токени або запити поруч із результатами функціоналу. Відомі заздалегідь витрати запобігають несподіваним рахункам, коли процес переходить від демо-середовища до спільних. Записуйте назву інструменту, хеш аргументів, час відгуку та результат кожного виклику. Без цих записів дебагування може займати години.

V2

Під час роботи над V2 спочатку запишіть контракт: необхідні вхідні дані, сигнал про успіх та те, що відбувається при частковій невдачі. Цей перелік допомагає зберігати чесність пізніших змін у коді. Тримайте конфігурацію окремо від коду додатку. Файли середовища, сховища секретів та флаги функцій мають знаходитися в одному місці, де оператори можуть їх перевіряти, не читаючи весь код. Фіксуйте назву інструменту, хеш аргументів, затримку та результат кожного виклику. Без цих записів дебагування займає години. Під час роботи над V2 спочатку запишіть контракт: необхідні вхідні дані, сигнал про успіх та те, що відбувається при частковій невдачі. Цей перелік допомагає зберігати чесність пізніших змін у коді. Віддавайте перевагу малим, тестованим одиницям перед величезними скриптами. Якщо якийсь крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на заплутану послідовність дій.

             AutoSaddler Core
                       │
              Scenario Plugin
                       │
       ┌───────────────┼───────────────┐
       ▼               ▼               ▼
    Harness         Benchmark       Evaluator
       │               │               │
       └───────────────┼───────────────┘
                       ▼
                 Evidence Builder
                       │
                       ▼
                 Optimizer Engine

Плагіни роблять ідею розширюваною

Плагіни роблять концепцію розширюваності найефективнішою, коли її розглядають як вимірювану поверхню. Запишіть один ідеальний приклад роботи, один випадок збою та примітки щодо скасування змін перед розширенням обсягу завдань. Розглядайте цей етап як контракт між вхідними даними та перевіреними результатами. Позначте всі елементи, визначте критерії успіху та не допускайте мовчазного часткового виконання завдань. Використовуйте інструменти з вузькими схемами та чіткими позначеннями побічних ефектів. Адміністраторам потрібно знати, які виклики змінюють стан системи, перш ніж автоматично схвалювати їх.

              AutoSaddler
                   │
       ┌───────────┼───────────┐
       ▼           ▼           ▼
    Agent A     Agent B     Agent C
       │           │           │
    Plugin A    Plugin B    Plugin C

Що робить AutoSaddler унікальним?

Що робить AutoSaddler унікальним? Він найкраще працює, коли розглядається як вимірювана поверхня. Запишіть один ідеальний результат, один випадок збою та примітку про скасування змін перед розширенням обсягу роботи. Записуйте час виконання та витрати на токени чи запити поруч із функціональними результатами. Візуалізація витрат на ранньому етапі запобігає несподіваним рахункам, коли процес переходить від демо-середовища до спільних. Розкривайте інструменти з вузькими схемами та чіткими позначеннями побічних ефектів. Хостам потрібно знати, які виклики змінюють стан, перш ніж автоматично схвалити їх.

1. Він оптимізує весь комплекс засобів

  1. Оптимізація всього комплексу пристроїв найкраще функціонує, коли його розглядають як вимірювану поверхню. Збережіть один ідеальний запис, один випадок збою та примітку про скасування змін перед розширенням обсягу роботи. Тримайте конфігурацію окремо від коду програми. Файли середовища, сховища конфіденційних даних та прапорці функцій мають знаходитися в одному місці, де оператори можуть їх перевіряти, не читаючи весь архітектурний план.
  2. Оптимізація всього комплексу пристроїв найкраще функціонує, коли його розглядають як вимірювану поверхню. Збережіть один ідеальний запис, один випадок збою та примітку про скасування змін перед розширенням обсягу роботи. Віддавайте перевагу малим, тестованим одиницям перед величезними скриптами. Коли якийсь крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на заплутану послідовність дій.

2. Воно діагностує перед тим, як вносити зміни

Для кроку 2. Спочатку відбувається діагностика перед змінами: необхідно визначити вхідні дані, виконавця цього кроку та критерії завершення перед модифікацією коду. Оператори повинні мати можливість знову запустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Розглядайте цю стадію як контракт між вхідними даними та перевіреними результатами. Позначте всі елементи, визначте критерії успіху та не допускайте мовчазного часткового завершення роботи. Аутентифікуйтеся біля шлюзу та знову надайте дозволи на рівні обробки даних. Один лише токен-носій не є межею окремого тенантства.

3. Використовуються структуровані втручання

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

4. Він навчається на основі регресій

Для пункту 4. Система вчиться на регресіях, тому перед зміною коду необхідно визначити вхідні дані, власника кроку та критерії завершення. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Конфігурацію слід тримати окремо від коду додатку. Файли середовища, сховища конфіденційних даних та флаги функцій мають знаходитися в одному місці, яке оператори можуть перевірити, не читаючи весь алгоритм. Аутентифікуватися потрібно на шлюзі, а повторна авторизація — на рівні обробки даних. Один лише токен не є межею окремого тенантства. Для пункту 4. Система вчиться на регресіях, тому перед зміною коду необхідно визначити вхідні дані, власника кроку та критерії завершення. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Краще використовувати невеликі, перевірювані одиниці коду замість об’ємних скриптів. Коли крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на заплутану структуру обробки даних.

5. Він оптимізується для узагальнення

Під час роботи над пунктом 5. Він оптимізується для узагальнення спочатку складіть контракт: необхідні вхідні дані, сигнал про успіх та те, що відбувається при частковій невдачі. Цей перелік допомагає зберігати чесність пізніших змін у коді. Розглядайте цей етап як контракт між вхідними даними та перевіреними результатами. Позначте всі елементи, визначте критерії успіху та не допускайте беззвучного часткового виконання. Записуйте назву інструменту, хеш аргументів, час виконання та результат кожного виклику. Без цих записів дебагування займає години.

6. Він зберігає історію еволюції

Під час роботи над пунктом 6, який стосується збереження еволюційної історії, спочатку запишіть умови контракту: необхідні вхідні дані, сигнал про успіх та те, що відбувається при частковій невдачі. Такий перелік допомагає залишатися чесним під час подальших змін у коді. Запишіть час виконання та витрати на токени або запити поруч із функціональними результатами. Чітке бачення витрат заздалегідь запобігає несподіваним рахункам, коли процес переходить від демо-версії до спільних середовищ. Записуйте назву інструменту, хеш аргументів, затримку та результат кожного виклику. Без цих записів дебагування агента може займати години.

7. Він є стійким

Під час роботи над принципом „7. Він є стійким“ спочатку запишіть контракт: необхідні вхідні дані, сигнал про успіх та те, що відбувається при частковій невдачі. Цей перелік допомагає зберігати чесність пізніших змін у коді. Тримайте конфігурацію окремо від коду додатку. Файли середовища, сховища секретних даних та флаги функцій мають знаходитися в одному місці, де оператори можуть їх перевіряти, не читаючи весь код. Фіксуйте назву інструменту, хеш аргументів, час відгуку та результат кожного виклику. Без цих записів дебагування займає години. Під час роботи над принципом „7. Він є стійким“ спочатку запишіть контракт: необхідні вхідні дані, сигнал про успіх та те, що відбувається при частковій невдачі. Цей перелік допомагає зберігати чесність пізніших змін у коді. Віддавайте перевагу малим, тестованим одиницям коду перед величезними скриптами. Якщо якийсь крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на заплутану послідовність операцій.

Що може бути далі?

Що може статися далі? Цей підхід найкраще функціонує, якщо його розглядати як вимірювану поверхню. Зафіксуйте один ідеальний результат, один випадок невдачі та примітку про скасування змін перед розширенням обсягу роботи. Розглядайте цей етап як контракт між вхідними даними та перевіреними результатами. Позначте всі елементи, визначте критерії успіху та не допускайте мовчазного часткового виконання завдань. Використовуйте інструменти з вузькими схемами та чіткими позначеннями побічних ефектів. Адміністраторам потрібно знати, які виклики змінюють стан системи, перш ніж вони автоматично схвалять їх.

Постійна оптимізація інструментарію

Оптимізація постійно діючих конфігурацій працює найкраще, коли її розглядають як вимірювану поверхню. Збережіть один ідеальний запис, один випадок збою та примітку про скасування змін перед розширенням обсягу роботи. Записуйте час виконання та витрати на токени чи запити поруч із функціональними результатами. Візуалізація витрат на ранньому етапі запобігає несподіваним рахункам, коли процес переходить від демо-середовища до спільних середовищ. Використовуйте інструменти з вузькими схемами та чіткими позначеннями побічних ефектів. Адміністраторам потрібно знати, які виклики змінюють стан, перш ніж автоматично схвалювати їх.

Автоматична еволюція інструментів

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

Оптимізація мідлверу

Навчання між агентами

Оптимізація з урахуванням витрат

Quality
   +
Reliability
   +
Latency
   +
Token Cost
   +
Tool Cost

Інженерні виклики, що попереду

Заключні міркування

Чек-лист для роботи