Практычнае выкарыстанне постаційных AI-агентаў: вітраты, адхіленьне памяці і проблема 80%.
Чым было не так пасля замены одноразовых запросаў на агентаў, якія працуюць сталям: неконтрольаваныя вітраты на токены, поверхневыя запросы да змін, адхіленьне ад спецыфікацый і прычыны, чаму праца разработніка перасунулася ў аднос да кантэксту.
Крыніцы: I Replaced My Prompting Habit With Persistent Agents. Here’s What Broke.
Прыблызнае два гады стандартны спосаб прытворкі з модэллю быў дыялог. Вы пішаце запіт, чытаеце адпаведзь, пасля выкарыстоўваеце яе або сперачынаеце з ёю. Вы належыце да ціклу і перакантролюеце кожны выхад прытваркі, перш чым ён паець куды-небудзь. Пасля падход змяніўся: хаваць запыты, запускаць агентаў, якія працуюць самыя, маючы памяць, інструменты і права завершваць задачы без стагнаронкі на кожным кроку. Прабавайце гэта ўтыяждзень з агентамі, якія чытаюць код, запускаюць каманды і ачынаюць pull requests, і ў дзеяныя моменты гэта працуе. Большасць — ні. Неудачы праблескваюцца ў досыта прагнозаванай парады.
Чаму людзі перасталі вжываць запыты
Адаптацыя да зьместы без падачы запыткаў адбіваецца з-за рэальнага ліміту. Запытка — гэта адна запітанне і адна адпаведзь, што падходзіць для пошуку інфармацыі. Але гэта не падходзіць там, дзе мадэль должна збіраць інфармацыю з кальколькох джэроў, аналізаваць тое, што ведае, выкарыстоўваць інструменты і правяць корэктывы на адпаведнасць з рэзультатамі. Запрашаць усё гэта за адну спробу — гэта не тыя методы, якія вікорыстоўваюцца ў рэальнай працы.
Патрэбны цыкл: думаць, дзеяць, бачыць рэзультат, зноў думаць. Якшто дадаць памяць, якая застаецца між сэсіямі, тады отрываецца тое, што людзі называюць стойкім агентам. Адна разліка варта ўточніць з самага пачатку: транскрыпт чата — гэта не памяць агента. Памяць больш супадае з файлам, які агент можа чытаць і запісваць, каб запамятаваць розныя дадзеныя. Гэтае разліка будзе практычна паказана далей.
Такі дзеянні ўсуненыя, і ніхто не павінен прытварацца інакш. Гэтае важлівае — што будзе, калі вы ўсё-такі іх адбудзеце, пачынаючы з костоў і заканчваючы тым, хто будзе адпаведнальны за рэзультат.
Рахунак
Першае, пра што ніхто не згадвае: кожны вызов API пачынаецца з нуля. Прадаўцы не зберагаюць інформацыю пра пакульнія вызовы, таму працэграма павінна перасылаць усю інформацыю занова ў кожны раз, калі яна просіць які-небудзь дадзеныя. Першы крок ўжо недорогі. Але да двадцатага кроку, калі дадаюцца выходныя даны і додатковыя дэталі, кожны вызов можа містыць тыячы слоў, і вы плаціце за ўсе іх у кожны раз.
Арыметыка становіцца крыху некамфортнаю. Аналіз трыдцяці інжынерных каманд паказаў, што адна запознялася стадыя выканання задачы коштуе або паўтарох дзесяцята долара. Гэта здаецца трывіальным, пакуль не перамножыце гэта на пяцдзiesпяць этапаў за задачу, дзесяткі задач на адного распрацоўшчыка ў дзень і цэлую каманду. Рэзультат складае шасцізначную суму ў месцачнай перапісі, а агенты спалююць значна больш токенав, чым простая чат-перадача для той жа працы.
Іншым рызыкам ёсць несканавальнае зростанне віток. Цыкл, які продовжае прымоўляць тое, што не можа успэсна выконвацца, проста продовжае нарашчваты вітакі. Існуе історыя пра компанію, якая пачула рахунак у паловы мільярд долараў самэлька з-за такога патэрну. Незалежна ад таго, чы гэтая цыфра точная, цэлком правдападобнае, што адзін неканфігураванный агент спалюе весь ўсёдневны бюджэт на дзесятымінутную ручную працу. Няспакойнае ў гэтым тое, што паўтараючыся працэс выглядае нормальна. Агент працуе; ён проста ціркулюе ў калесах.
Рашэнні, якое практычна працюе, складаецца з трохоў частак:
- Акрутны ўздзеньны бюджэт для кожнага агента, які контролюецца паza самым агентам
- Актуальны вікна кантэксту, таму ранейшыя крокі знікаюць і не накапліваюцца
- Адправка рутынных заданняў дышэўскаму модэлю, а толькі складныя кейсы — моцнейшаму
Команды, якія выкарыстоўвалі гэты просты інструментарый, заявілі, што выкладкі на агентоў знізіліся на адзін месцы на 50% і больш. Хутчэйшы модэль ніколі не быў рашэннем; рашэннем была контроль, і гэта важна сказаць чыста, таму што першы інстынкт, калі прыходзіць рахунак, — шукаць лепшы модэль.
Першы pull request — гэта трук
Першы pull request агента можа выглядаць чамусьці нейкі. Цэлая функцыя з’яўляецца за калікві мінут, усі тэсты праходзяць, і натуральная рэакцыя — адчуванне полегчэння. Потым прыходзіць падазрэнне, што рэальная работа ўсё ж не адбылася, і падазрэнне зазвычай праведнае.
Команды продовжаюць адмаўляць пра той самы патэран: першыі PR захопляе, а да пяцаго ў рэальных умовах выканання ўтвараецца якаясь проблема, якую не змоглі выявіць тэсты. Бракавала паўтарной спробы. Случай null не быў адобрабаваны. Перакананне ў автэнтыкацыі павярнулася на тры канцэнты і праігноравала чатверты. Код работаў, але не вытрымаў контакту з рэальнасцю.
Гэта часта называецца проблемай 80%. Агент выкананыя очвістныя 80% задач, але стаўківаеся на 20%, якія складаюцца з нефункцыональных трэбаванняў, спосабаў выключэння і архітэктурной цэласнасці, таму што для гэтых 20% патрэбны кантэкст, якога у агента няма. Ён пішае код, які запускаецца, а не код, які вытрымае.
Ось версія гэтай пасткі ў адной лініі: код скомпіляваўся, праішоў пераглед, але ўсё равно дэлаў неправільна, таму што увага да яго зменшылася. Рэзультат выглядае завершаным, таму яго швыдка працягваюць, так сама, як паглядаецца на працу младшага спецыяліста.
Ліквідацыя проблемы пазней коштае большае, чым яе рашэнне з самага пачатку. Такія праслыні павтараюцца ў всім кодзе, таму няма аднаго месца, дзе можна было б іх вылечыць.
Памяць бывае двух відаў
Найбольшая проблема была з памяцюю, якая існуе у двух формах, якія спачатку не былі очывіце.
Першая — гэта забыванне ў межах адной задачы. Калі задача вядзе дужа давго, агент трапляецца без рашэнняў, якія ён прымеў спачатку. Звычны адказ у галузі — даўаць яму больш кантэксту, мільйон-два мільйона токэнаў, на падставе гіпотэзы, што ведаць усё прыводзіць да правільных рашэнняў. Аднак гэта не працуе. Агент, які разглядае вялікі шмат складнага коду, пачынае плутацца. Ён можа вылечыць адную проблему, але створыць большую, таму што бачыць многія маленькія часткі, але не розумее цэлага.
Другі формы ўражэння ёсць аднойчы больш хітрымі, і саме воні спрабоўваюць завдаць рэальнай шкоды: зміна кантэксту. Агент следуе за файламі налаштаванняў і спецыфікацый. База коду развіваецца, тады як гэтыя файлы застаюцца незменнымі. Незабоўсь цяпер агент, які працуе пастоянна, з упэўненасцю запішвае код па стандарту, які ўжо калькі месяцаў не актуальны, і нічога не выглядае ня так, таму што ён верна следуе інструкцыям з застарэлай копіі правды. Якшча такое становішча распространяецца між калькамі агентоў і рэпазітарыямі, разліка ўсё болей збільшваецца кожны дзень без жадных адчутнаў.
Самэ тама вінаватасць пераходзіць з модэлю. Зламаны элемент быў не модэль, а памяць праекту — тая частка, якая зберагаецца на дыску і жыве дольш за будзь-яю сесію, якая так і не была створана.
Змініўся абавязак распрацоўшчыка
Распрацоўшчык не зменшыўся. Абавязак проста пераселіўся, і рэзультат не такі драматычны, як або хайп, або негатыўныя рэакціі.
Калібраванне заповедзей стае менш значным, калі агент працуе ўпрацо. Гэта мае значэння — кантэкст: што можа бачыць агент, што ён можа запам’ятаваць, што яму дазволена робіць і як узагалі можна дазнавацца, што ён зрабіў. Команды, якія досяглі рэзультатаў, не мелі хытрых заповедзей. Яны пісалі спецыфікаціі, сталялі іх у часе, падавалі іх агенту як яго памяць і самі пераглядалі архітэктуру.
Работа на адной спецыфікацыі робіць распрацоўшчыка важлівейшым і перакладае увагу на тое, куды падае зусілля: на візначэнне таго, што агент павінен робіць, на затверджэнне таго, як далека ён можа зайсці, і на перагляд архітэктуры, якую ён пропанавае. Калі змянююцца трэбовання, змінюецца спецыфікація, а не заповедзь. Агент складае праект, яго рэалізуе і тэстуе па гэтай спецыфікацыі, і не ёсць власнікам напрамку розвітку. Гэты падзел быў ўжо ўсё, што запобегала зламам.
Пад за всім гэтым крыўцяеся адмеркаваны удар. Адна з даследжэнняў запісвала час, які распрацоўшчыкі прабывалі працаваць над рэальнымі кодамі, і выявіла, што яны працавалі прыблізна на 19% медленней, хоць самі чувалі ся на 20% быстрэй. Адчутак быстрой працы і рэальная быстрына сталі разнымі раштункамі. Пастойныя агенты падвайшваюць гэты разлік, калі ў іх ёсць такая можлівасць, адтолькі яны вельмі добра вмеюць ствараць адчутак шырокага тэкаўства. Тое, што яго зменшвае, — глуха, але неабходная рэч: кераванне, перагляд, спецыфікацыя, якая адпавядае рэальнасці, і ліміт на выдаткі.
Працаваць толькі за дапамою прыказаў — гэта не рашэння, адтолькі цыкл ёсць моцнейшы. Але агент — не колега. Ён — быстры, впэўнены підрадчык, які ніколі не з’являе, што ён не впэўнены. Вы трываеце такога підрадчыка, таму што ён корыстны, і вы чытаеце все, што ён вам дае, кожны раз.
Спадневаная літэратура
- Складанне запітоў для мадэлі Astra ад OpenAI: автонамія, навыкі, перакананне і правіла зупнення — Старыя прычыны складання запітоў можу нашкодзіць новейшай, больш автонамной модэлі. Неабяжна скорэктаваць параметры автонаміі, прыорытэта інструкцый, стылю, тэставання і правіла зупнення, выкарыстоўваючы готавыя запіты і чарткі перагляду.
- Экспертныя методы RAG: HyDE, стысненне, самастойнае запрашанне дадзэнняў і агентныя праблемы — Чатыры працоўныя тэхнікі адзысквання дадзэнняў для практычнае выкарыстоўвання RAG у Haystack: HyDE, кантэкставае стысненне, самастойнае запрашанне дадзэнняў і агентныя праблемы, а таксама інструкцыі пра тое, калі выкарыстоўваць кожную з іх.