РозробкаSenior

AI-агенти

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

Керування
Вирішує модель
Вартість задачі
Наперед невідома
Має бути обмежено
Кроки, токени, права

Цикл і чого він коштує

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

Агент — це цикл, у якому керування тримає модель. Вона відповідає або текстом, або проханням викликати один з описаних вами інструментів; ваш код виконує цей інструмент, дописує результат до розмови й викликає модель знову — доки вона не відповість текстом замість виклику. Два наслідки виявляються лише в проді. Кожен прохід надсилає заново всі попередні результати, тож вартість кроку зростає з ходом прогону. І для правильного підсумку правильними мають бути всі кроки, тож крок, правильний у девʼяноста пʼяти відсотках, після десяти кроків правильний десь у шістдесяти. Ніщо всередині циклу його не обмежує, тож ліміт кроків, бюджет токенів, мінімальні права інструментів і людина перед усім безповоротним мають забезпечуватися вашим власним кодом.

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

Робочий процес чи агент

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

Робочий процес

  • Керування тримає ваш код; виклики моделі стоять усередині відомих кроків.
  • Вартість і затримка прогону передбачувані ще до релізу.
  • Збій зводиться до одного кроку, який можна повторити окремо.
  • Тягне все, що можна перелічити, — а це більшість того, що продукти справді роблять.

Агент

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

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

Що потрібно агенту, щоб бути безпечним

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

Режим збоюЯк виглядаєЩо його стримує
Цикл, що не завершуєтьсяТі самі два інструменти по черзі, і кожен результат читається як привід спробувати знову.Жорсткий ліміт кроків і бюджет токенів, і те й те забезпечує ваш код, а не прохання в промпті.
Вичерпання контекстуРезультати інструментів накопичуються, доки вікно заповниться, а найраніші вказівки випадуть.Свідомо стискайте чи викидайте старі результати; повертайте посилання на великі дані, а не самі дані.
Упевнена хибна діяДобре сформований виклик, що робить не те, — часто після читання вставленого тексту.Перевірка у вашому коді, найменші привілеї для користувача й підтвердження перед усім безповоротним.
Подвоєні побічні ефектиПовторений виклик надсилає той самий лист або створює той самий запис двічі.Ключі ідемпотентності на кожному інструменті, що змінює стан, з перевіркою на сервері.
Некерована вартістьОдна задача тихо витрачає вп’ятдесятеро більше за типову.Стелю витрат на задачу з перериванням плюс сповіщення за розподілом, а не за середнім.

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

Як це виявляється в реальній поставці

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

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

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

Де це вироджується

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

Коли це застосовувати

Застосовуйте, коли

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

Уникайте, коли

  • Будь-яка задача, чиї кроки можна перелічити: робочий процес дешевший, швидший і придатний до налагодження.
  • Безповоротні дії без людської брами: платежі, видалення, вихідні повідомлення клієнтам.
  • Шляхи, чутливі до затримки: прогін — це багато послідовних викликів моделі, і швидким його не зробити.
  • Середовища, де не можна обмежити права за користувачем: агент успадковує більший доступ, ніж той, хто просить.

Було корисно?

Поділіться з тим, хто працює над тією ж задачею.