Калі панелі керування зеленая, а агент памыліваецца: трэйсінг стану
Панель керування зелёная, і агент памыляецца: неяксамоце падаюць у стане, яны перадаюцца между стабільнымі крокамі. Какія запісы трэць ведаць пра тракарынг, маршрутызацыю і ацэнку.
Крыніцы: When the Dashboard Is Green and the Agent Is Wrong: Tracing Multi-Step Failures Past the LLM Call
Зелёная панель керування і некальканыя адказы
Адлагоджэнне агентаў AI мае раздражаючую особлівасць: экран манітарынгу можа стверджваць, што усё гаразд. Выклік модэлю завершыўся, інструменты працавалі, API адпавялі з кодам 200, час адпаведзі ўсё ў норме, а выкарыстоўванне токенав таксама, як і чакалася. З точкі зору інфраструктуры нічога не відбываецца, але ўсё жа канечны рэзультат можа быць абсалютна некальканым.
Гэта не той ад некальканасці, калі модэль выдумвае ўсё абсурднае. Такія неудачы лёгкія, таму што прынеймна вядома, з чаго пачаць. Складнейшы варыант — калі кожны крок здаецца разумным, тэхнічна нічога не зламалася, а адказ настолькі правдападобны, што хтось можа прымусіцца дзеяць на ўсходзе з яго.
Проблема парадоксальна, калі сістэмы пераходзяць з простых вызоў LLM у агентаў і багатыя заходы. Перш чым з’явіцца адпаведнае адпаведзенне, інфармацыя, якая лежыць у ўсіх етапах апрацоўкі, могла працаваць з калькольнікамі, інструментамі, API, прыемамі трансформацыі і маршрутызаторамі, таму фінальны мадэль можа выконваць сваю працу ідэальна, працуючы з данымі, якія ужо былі спачатку зіпсаваны. Цяй аспект спостэрагальнасці за агентамі трэбуе значна большай увагі, чым яе фактычна атрымуе.
Змена схемы, якой ніхто не бачыць
Разглянем прыклад звычайнай працы па падтрымцы кліентаў. Агенту прасяб’е знайсці кліентаў, чыя падтрымкі заканчываюцца за 30 дзён, пазначыць абліквы, якія, як вярогодна, можу пакінуць сервіс, і падготавіць адчытку для команды падтрымкі. Па дорозе ён можа запытаць CRM, вырачыць рызык, запрашаць апошнія запытанні кліентаў, пераканацца ў ступені вікорыстоўвання продукту і, нарэшце, прабачыць LLM напісаць адчытку.
Цяпер заўважкім, што CRM зменіў адну з схем сваіх адпаведзенняў. Учора пакет даных выглядаў так.
{
"health_score": 42
}
Сёньдзе ўсё выглядае так.
{
"health": {
"score": 42
}
}
API яшчэ працюе, запыт успехоўна выкананы, а JSON яшчэ парсуецца. Залежна ад коду інтэграцыі, няма прычыны выклікваць жадных асключэнняў. Непрыемнасці пачынаюцца пазней, калі шар нормалізацыі продовжае шукаты health_score, а наступны крок атрымвае значэнне null.
Можа, механізм ацэнкі рызыка спрыймае відсутніе значэння як нейтральнае, а можа, інструкцыя працюе так, што трэба вікорыстоўваць тое, што ёсць. У обох случаях працэс продовжаецца і завершаецца правдападобным атласам, у яком не паведамляецца пра аблік, пра якій командзе трэба было ведаць.
Акцэнт на фінальным выніку выкалікае упадак на модэль, і люды проста перапішуць інструкцыі, змінююць модэлі або налаштовуюць параметры тэмпературы, не трапляючыся з асалодным вызваннем. Лепшы вопыт — гэты, калі саме стан стаў некорэктным, і з такім вопытом дэбаггін агента выглядае зусім інакш.
Падзеі успеху не падтверджваюць розумеў
Адно з няўякшых эсэяў пра тое, як веб стае API для агентаў, опісвае, як програмнае забезпечэнне пераходзіць з функціі аддачы інформацыі да функціі выканання дзеянняў за корыстувальніка. У ягом утварэнні стаўкаецца на тое, што выклаканне інструментаў для модэлю — гэта толькі частка працы, бо намеры, правыя на выкананне, кантроль у часе выканання і можлівасць аўдыту маюць значэнне, калі агенты выканаюць рэальныя дзеяння.
То ж самае стосуецца і дыбаггавання гэтых дзеянняў. Інформацыя пра тое, які інструмент быў выкананы, ёсць корыстной, але яна не паказвае, чы рэшта рабочага прайсупутку разумела, што створыў інструмент. Уявіце траец, які містыць такую інформацыю.
crm.search_accounts
status: success
duration: 184ms
records: 47
Вы даведзеся, што CRM адпаведзеў 47 запісамі. Неясна застаецца тое, чырвон 47 запісаў дасяглі наступнага крока цілыя. Можа, існавалі ўсьмо шэсць дадатковых стораніцаў, а паградуванне завершылася пасля першай. Можа, сума была пераканута з долераў у цэнты, або часавы меткі UTC пазней былі спрыяты як местны час. Можа, у enum змянілася артыкуляцыя з „cancelled“ на „canceled,“ або API пачаў адчытвалаць бяговыя памылкі ў адпаведзеўцы, якой статус HTTP выглядаў нормальна.
Гэта звычныя багі прыстрою, усе яны. Але з агентамі справа ў тым, што наступны модэль зазвычай працюе далей, прыймаючы даны, якія выглядаюць правдападобнымі, і аналізуючы іх. Таму аднавышаны модэль не павінен неабходна чагосьці вылечыць. Калі даны ўжэ з самага пачатку некарэктныя, модэль проста рашае некорэктную проблему з большай майстэрнасцю.
У значныях моментах вы должны магчымаць адзірнуцца на вхідны даны, выхідны рэзультат, ператворэнне, якое было застосаванае да адпаведнай адпаведзі, і тое, што фактычна наступная ступень запрацавала. Не ўсё неабходна зберагаць назаўсёды, але трэба зберагчы достатню колькасць дадзеных, каб можна было восстановіць працэс пасля абякання.
Аналіз відсутнега конкурэнта
Інструменты стаюць крашчымі. Семантычныя стандарты GenAI ад OpenTelemetry пачынаюць стандартызаваць спосаб працы з вызовамі модэляў і выкананнем інструментаў, а такія фрэймворкі, як OpenAI Agents SDK, адстэжаюць працэсы генеравання, вызовы інструментаў, перадачу дадзеных і правіла безпекі. Гэта корыстны первасны матэрыял, але зробіць аналіз корыстным заўсёды складна, калі працэс завершыўся, а фактычнае абяканне захавалося ў стане, які перадаецца між двумя ступенямі працы.
Разглядзім прыклад спрасцаванага працэсу, як паказана на малюнку.
Падзірцем, якшчо у заканчоўнай аналізе не ёсць конкурэнта, які явна павінен быць. Раней прыметалі, што трэба ачыніць заканчоўны запіт і пераглянуць адпаведзь модэлі. Можа, інструкцыі былі недастаткова чыстыя, або модэль проігноравала частку кантэксту, або іншая модэлі могла бы парадзіць лепшая. Але такі падход вялікай мерай вялікай мерай не ёсць правільным.
Замест таго працуйце адваротна. Чы модэлі ўсё-такі заўважыла відсутнія конкурэнта? Якшчо ні, то чы працаваў крок ранжыравання? Якшчо ён з’явіўся раней, чым было здзейснена ранжыравання, чы ён быў прысутны пасля выкарыстоўвання даных? Якшчо ён прысутны пасля выкарыстоўвання даных, але ўтрачаецца пасля нормалізаціі, значыць, проблема знаходзіцца самэль на аднай з меж.
{
"company": "Example Corp",
"website": {
"url": "https://example.com"
}
}
Хоча наэтапе нормалізацыі яго і чакалі.
{
"company": "Example Corp",
"website": "https://example.com"
}
Нічага ў гэтым не было драматычнага. У серэдзіне працэсу аб’ект змяніў свою форму, і адна з дзеянь была выканана неправільна, пры тым большая частка суседніх операцый застаўалася нормальной. Такія бягы трэба аналізаваць, адколі без гэтага вінаватасць падае на той компонент, які ўвідзе, незалежна ад таго, што адбылася раней.
Практычны урок заключаецца не ў тым, што патрэбны якісь конкрэтныя інструменты для стэкхолдынгу. Ён у тым, што трэкаванне павінна дазволіць вам сочыць за станам упродовж рабочага працэсу, а не проста перыявляць, якія компоненты працавалі. Існуе вялікі разлік між тым, калі вы ведаеце, што працаваў Крок 4, і тым, калі вы ведаеце, што Крок 5 отрымаў ад яго.
Планаванне змін здаецца разумным
Калі вы знайдзеце адзін з бягаў, выкліканых обмежэннямі інструментаў, гэта ўжо досыць чытка. Аднак планаванне адхылэнняў ёсць сложнейшым, адколькі агент можа пакінуць пачатковую задачу праз крокі, кожны з якіх здаецца разумным. Уявіце сабе агента, якому паведамілі даследзіць пяцьх постаўшчыкаў, вырахаваць ўсія ўмовы цэн і надзеямоснасці, а таксама напісаць рэкамендацыю, пры чым дадзеныя інструкцыі не кантактавацца з імі.
Агент знаходзіць постаўшчыкаў і пачынае збіраць даныя. Двое з іх не паводзяць цэн, таму ён шукае іншы спосаб прыняць рашэнне. У канцы канцоў ён знаходзіць інструмент для перадачы электранаўпысаў. Яго логіка не ёсць абсурдной: патрэбныя ёсць цэны, але яны не ў публічным доступе, а паведамленне паўнамоцнаму постаўшчыку могла б выясніць сітуацыю. Аднак гэта таксама нарабляе адхыленне ад аднаго з найважнейшых правілаў задачы.
Калі правілле ўсьмо толькі абзац пад самым верхам растучага вікна кантэксту, усё залежыць ад таго, чы рэчынны модэль будзе яго ўсё ўважаць важлівым пасля таго, як сотні токэнаў рэзультатаў пошуку, выходу з інструментаў і проміжных станоў накупіліся. Абмежэнні, якія маюць рэальныя наследкі, заслуговуюць на чыстае, ясна адзначанае выражэнне.
{
"objective": "Compare suppliers and prepare a recommendation",
"constraints": [
"Do not contact suppliers"
],
"completed_steps": [
"discover_suppliers",
"collect_public_pricing"
],
"next_action": "request_missing_prices",
"requested_tool": "send_email"
}
Цяпер пры выкананні якога-небудзь дзеяння аплікацыя мае што пераканаліць. Яна можа адхіліцаваць запуск інструмента, запрашаць падтрымкі ад чалавека або падслаць агента, каб той знайшоў іншы маршрут. Правільная адпаведзь залежыць ад процэсу работы, але галоўная мысль у тым, што абмежэнні больш не знаходзяцца выключна ў формуліраванні запіту.
Правілы на кшталт ліміту на выдаткі, „зробічы праект, але не адправляй“ або „ніколі не чапайся за працуючыя сістэмы“ працуюць так сама. Простая мова дапамагае перадаць намеры корыстніка, але разрэшэнні і ліміты, якія маюць значэння, таксама павінны выражацца у контроле пад час выканання.
Програмнае забезпечэнне справляецца з гэтым у всіх іншых віпадках. Ніхто не будзе пісаць у каментары „будзь ласка, не дазволяй неавтарызаваным корыстнікам выдаліць базу дадзеных“ і называць гэта контролем доступу, а агенты не заслуговуюць на адступленні таму, што ўсі іх інструкцыі напісаны англійскай мовай.
Маршрутызацыя модэляў стварае межу
Маршрутызацыя стварае падобную проблему. Выбір модэлі перастае быць простым значэннем налаштавання, калі трэба сбалансаваць якасць, косць, затрымку, вікорыстоўванне інструментаў і разныя можлівасці модэляў у працоўнай сістэме, і рашэнне па маршрутызацыі стае часткай лога, які патрэбен для дыбаггінгу.
Скажымо, крок 6 зазвычай выконваецца на модэлі A. Пад час рэальнага выканання прадаўцу адбываецца обмежэнне швыдкасці, і маршрутызатор пераходзіць на модэлі B. Гэта ёсць альтэрнатыва, якая працуе за прызначэнням, адколі робочы працэс застаецца актываў, а не збіваецца. Аднак модэлі B фарматуе структурованыя аргументы для наступнага інструмента адносна інакш. Яны застаюцца валіднымі, і інструмент работае, але адна з поль вычытаецца так, што змінюе рэзультат на наступным этапе.
Калі аптэкты працэйнаспроможнасці паказваюць толькі модэль, настроеныю для рабочага прайсепту, хтось можа паспяліць гадзіны, намагаючыся воспавтавіць абярошчанне на модэлі A, калі запыт обслужыла модэль B, якая спрычыніла яго. Таму траг павінен фіксаваць модэль, якая была запрошана, тую, якая адпаведзела, будзь-якія альтэрнатыўныя варыянты, дзейную політыку маршрутызаціі і тое, чы быў вызов пракатаннем. Гэта не ўзбуджаючая інфармацыя, але большасць корыстных способаў адлагоджэння ў працэйным сераўеры таксама не ўзбуджаючыя. Па захадзе дэманстрацый большая частка работы заключаецца у выявленні таго, які непразначны дэталіцы змяніўся без увагі.
Стан трагу, а не толькі запісы падзей
Інструменты агента зараз добраўна паказваюць структуру выканання задачы, з відображэнням вызоў модэляў, інструментаў, перадачы задач, пракатанняў і іншых запісаў у все болей зручных вікнах аналізу. Памылкай будзе прыпуск, што фіксацыя большай колькіцы запісаў апошнім чынам дае хорашую можлівасць сочыць за працай сістэмы. Нават якшы задача складаецца з дзесяці чыста задокументаваных элементаў, вы застаецеся без рашэння, якшо не зможаце з’ясаваць, які стан існаваў між ямі.
Короткі спіс запытанняў памагае разбірацца з неудачным выкананням. Чаго на самай суцэльнай хацеў корыстувальнік? Якія былі обмежэнні? Які план следаваў сістэме? Што вернуў кожны інструмент і што отрымаў наступны крок? Калькі модэль прыняў кожнае рашэння? Чы ў чымсь у зовнішнім свеце з’явіліся змяны? Дзе выходны рэзультат перэстаў падтрымваць адзічыненыя спадзяванні?
Адказ на гэтыя запытанні захопляе менш часу, чым обработка ўсіх дадзеных, а захопленне всьго прыносіць сабе свае проблемы. Запытанні, параметры інструментоў і ўсё, што яны адпавядаюць, можу містыць прыватныя даны кліентаў, аутантыфікацыйныя даны чы іншы чутлівы контэнт, які не павінен без раздумаў потрапляць на платформу для аналізу. Рэкамендаціі OpenTelemetry ў частцы GenAI на гэта звяртаюць увагу, а ўсёясная спецыфікацыя элементаў задачы робіць захопленне вхідных і выхідных дадзеных модэля факультатыўным, а не стандартным.
Такім чынам, мета — адзначыць і рэканструюваць тыя часткі выканання задачы, якія ёсць значнымі, а не фіксавацыя ўсьго. Інодзе дастатнікоў адрэдагаванага адпаведзення, інодзе — версія схемы і ID об’екта, а інодзе для проміжнага рэзультата патрэбна копія, калі нічога іншага не можа відтворыць выканання задачы. Прыймайце рашэнні свядома, каб у разе інцыдэту не засталося толькі значэння status: success як елемента, які вы зафіксавалі.
Што гэта значыць для ацэнкі
Аналіз следа паўтлівае, што самэ гэта адбылася, але не паўтлівае, чы рэзультат быў хорашы, таму ацэнка застаецца неабходная. Anthropic таксама стварыць гэтае ў сваёй стацыі пра ацэнку агентаў. Агентаў лёгкае ацэніць больш, чым адзінаковыя адпаведзі, таму што яны функцыонуюць працоўнае колькасць раундоў, выклікаюць інструменты, зменяюць стан і прыстосоўваюцца да таго, што было раней.
Дзеякія рэзультаты можна пераканацца без дадатковага модэлю. Агент, якому сказалі не адправляць электрана, але які яго адправіў, парадуў, а задача выкарыстоўвання, якая мяла вернуць 27 запісаў, але вернула толькі 11, значна не падтрымала цялевых показнікаў. Іншыя кэсы ўскладненыя: чы быў дакладны даследнічы атлас? Чы былі джэрэлы надзеяныя? Чы рашэнне падтрымкі вырашыла проблему кліента? Для такіх кэсоў можа знадобіцца людская пераглядка, адзывы корыстувачаў, наборы дадзеных або модэлю-ацэнікі.
Прыглыдная цэнна выклікаецца заўязкам ацэнкі з апісам дзеяння. Знак «не паспела» пад схованам канечным адказам толькі паказвае, што корыстніку ён не спадзяўся. Калі гэты сігнал заўязаны з усім працэсам, ён дазволяе адразу паглядзець на збераны матэрыял, інструменты, якія былі выкарыстоўваны, участковыя мадэлі і месца, дзе змяніўся стан.
Калі будзе знайдзена справжняя прычына аблукаў, такі працэс вырабніцтва зберагае сваю цэнна пасля інцыдэту, адтак як можа стаць прыкладам для ацэнкі, які захоцьце ад заповтарэння пасля будучых змян запыткаў, модэляў чы рабочых практык. Гэта набагато лепшая, чым паштоўваць паказваныя некарэктныя адказы по аднаму і спадзявацца, што больш нічога не зламаецца.
Хавайце прыступаць не толькі да канечнай запыткі
Паверхова змянена ў працэсе дыягностыкі сістэм AI — гэта. У простам прыкладзе LLM, які дае некарэктны адказ, дастатнька ўвага прайшоўшым запітам і адказам, адтак як іншых магчымых прычын проблемы майжэ немае. Калі сістэмы становяцца больш складнымі, такі падход стае менш эфектывным. Уявіце сабе ланцоўку, якая складаецца з калькольнікаў, засобаў пошуку, зовнішніх API, маршрутаў і ціклу пераканання: адказ на пасляпэльны запіт можа проста паказаць, дзе нарэшце выявілася поперадняя памылка.
RAG ужэ дала неабяжлівы лекцыю. Калі працэс выкарыстоўвання дакументаў падае некарэктны дакумент у вікно кантэксту, большыя мадэлі генеравання не зможуць гэта парадражыць, і трэба вярнуцца да самага працэсу выкарыстоўвання дакументаў, каб яго пасправіць. Агенты прыменяюць тую ж логіку, але з дадатковымі абмежэннямі. Чы гэты працэс выкарыстоўвання дакументаў працуе правільна? Паглядзіце, якім стаў рэзультат. І гэта таксама працуе правільна? Паглядзіце на наступную рашэнне. Чы было выбрана правільная інструмент? Паглядзіце на аргументы і рэзультат. Чы стан далей застаецца правільным? Продавайце далей, пакуль не знайдзеце першага моменту, калі ён адхіляецца ад таго, чаго вы чакалі.
На паперы гэта здаецца простым, але людзі забываюць пра гэта, таму што фінальны адказ — гэта тое, што ўсё час стоіць пры ўвазе, і яго зазвычай лёгкая звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна звычайна
Агенты становяцца ўсё болей складнымі. MCP адкрывае для яных больш засобаў, дзеяння калькulu з адзельнымі агентамі дагадваюцься дэлегаваннем і перадачай задач, маршрутызаторы выбіраюць мадэлі ў рэальны час, а дзеяння, якія трываюць дзяўно, забезпечваюць стойкі стан, можлівасць павторных спроб і продажу дзеяння. Апраўленне чалавека можа адбыцца ў момент выканання дзеяння, а агенты, якія работаюць у браузеры чым камп’ютары, можу змяніць сістэму за межамі простаг чату. Кожны з гэтых фактараў робіць агенты болей спроможнымі, але таксама падвышае рызык правіленняў, калі кожны компанент адзвяртаеся пра успех.
Самэльга таму стэпен спостэрагальнасці павінен выйсці за межы метрык LLM. Значэнне маюць затрымкі, колькасць токенаў, адказы і вартасць, і панелі керування павінны безумовна павесты, калі агент застрагае і выкарыстоўвае крэдыты API о 2 гадзіны ночы. Тым не менш, гэтыя показнікі пераважна паведамляюць толькі пра тое, чы праца працуе. Агент, які выканання калькulu з калькulu, таксама павінен маты спосаб падтвердзіць, што тое, што праходзіць праз яго, продавжае падходзіць да задачы корыстувальніка.
У практыцы гэта значыць выявленне пачатковага намерэння, ключоўых абмежэнняў, інструментаў і модэляў, якія фактычна былі выкарыстоўваны, стану, які пераходзілі між крокамі, і заканчоўнага рэзультата. Калі рэзультат некарэктны, трэба быць у стане працаваць у зворатным напрамку да першай точкі, дзе стан адхіліўся ад рэальнасі. З такой можлівасцю проблемная праца стае звычайной інжынернай задачай, яю можна дакладна выявіць, перадаць і працаваць над яю. Без яе вы проста адзірвана заўважваеце заканчоўны адпаведзь і здагадваецеся, якая частка сістэмы зламалася ранейш.
Спаднёе чытанне
- Практычныя нотаткі: Стварэнне агента для кодавання ў прыватным воблака: OpenCode + локальны LLM — Паследовыя інструкцыі па стварэнні агента для кодавання ў прыватным воблака: OpenCode + локальны LLM: контракты, перакананні і шаблоны коду для команд, якія вікорыстоўваюць гэты патэрн.