Цыклы супраць графаў: два спосабы будаваць AI-агентаў
Інжынерыя цыклаў супраць інжынерыі графаў для AI-агентаў: як працуе кожная архітэктура, калі выбіраць адну з іх і чэкліст перад выхадам у прадакшн.
Крыніцы: Loop Engineering vs. Graph Engineering: The Architecture Shift Quietly Reshaping AI Agents
Два популярных тэрміны, адна пытанне архітэктуры
Кожны, хто сочыць за ШЫ-агентамі, які шукаюць інфармацыю ў інтэрнэце, вызываюць інструменты, пішуць код чыстае віконваюць робочыя працэсы самостоятэльна, верагацейна апошнія час зустрэў два тэрміны: інжынерыя цыклаў і інжынерыя графаў. Яны звучаць як маркетынгавыя тэрміны, але вказуюць на рэальнае структурнае рашэнне.
Разглядзім агента, які вітрачае 40 000 токенаў і шасць хвілін у рэальны час на запыт, які мягчаў быся за тры крокі. У самай модэлі чыстае запытанні няма нічога параднага. Проблема ў дызайне, таму што агент не можа з’ясавіць, што ён вялікі час вучыўся ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўжо ўж
Такія проблемы вывалююць праектаванне агента за межы катэгорыі прамптавання і перакладаюць яго ў аднарод аптэктуры. Калі паглядзець на гэта так, майжэ кожная выпусканая сістэма агента апоўнюецца аднам з двух патэранаў: цыкламі і графамі. У наступным раздэле будзе расказана, што такое кожны з іх, як яны ствараюцца, дзе яны выклікаюць проблемы і чаму пераход з аднаго патэрана на другі змінюе падход інжынераў да гэтых сістэм, за выняткам простагі замены інструментаў.
Што на самай працы робіць агент
У кожны момент часу агент выконвае адна з трох праблем: ён думае (званне да LLM), ён дзеяе (званне да інструмента) або ён прымечае, што будзе далей. Інжынерыя агентаў у большай частцы являе сабою работу па з’ўязку гэтых трох функцый разам.
У першыя калькі гадоў існавання агентаў на аснове LLM практычна всі праектавалі іх аднойчынным спосабам — у вачынку. Гэта была явная выбор. Агенты у стылі ReAct працавалі так з самага пачатку, і гэта ўсё ўзмацнівае тое, як Anthropic апісвае простэйшага агента: мадэль, якая автонамна выкарыстоўвае інструменты ў вачынку.
Пазней агенты сталі распрацоўваць дыявохацей і сложнейшыя заведамы: калькі спецыялізаваных падагентаў, праказы, падтверджэнні людзей і розгалужаныя бізнес-правілы. Аднойчынны вачынок стаў недастатковым для такіх задач. Команды хацелі бачыць структуру працэсу, а не проста пакладацца на тое, што вачынок у канцы ўсё равно дастанецца да рашэння, і гэтае патрабаванне прывела да стварэння графаў, якія апісваюць працэс у вачынку вузлаў і рэгулі, не залішаючы гэтае ў развітанні парадоў.
Ніякі з гэтых падходаў не ўскладнены. Яны рашаюць разныя проблемы, таму кожны з іх заслуговае на адпаведную увагу.
Аналагія з кухні
Уявіце сабе, як вы навучаеце каго-небудзь гатаваць. Інжынерыя цікламі — гэта павтарэнне адной інструкцыі: пасмакаваце суп, калі трэба, дадзіце соль, зноў пасмакаваце і так да таго часу, пакуль все не будзе правільна. Цэлае гэта адна цыклічна процедура: дзеянне, перакананне, павтарэнне, калі трэба. Гэта проста, прыемна для разумення і лёгкая да уявлення.
Інжынерыя графамі нагадвае повную рэцэптуру з розгалужэннямі. Разрэзайце овочы, пакалі іншы чалавек каціць ваду. Калі і адно, і другое будуць гатовыя, з’едыніце іх. Калі той, хто пробуе смак, хоча больш прыправы, пададзіце каструлю знову на етап дадзення прыправ, а інакша падаце страву на тарэлку. Чырвоныя пункты тут нямае. Існуе калькі шляхоў, дзеянні можуць выконвацца адночасова, дзеянні іншыя залежаць ад рашэння, а толькі некалькі з іх павтараюцца, калі ў чымсь ёсць проблема.
Што значыць інжынерыя цікламі
Цікл — гэта асновны і найпростышы спосаб стварэння агента. Ён выконвуецца ў аднам непаўерывным цыкле:
- Прыймаеся вхідны даны, тыя самыя запытанні або цялі корыстніка.
- Задумайцеся, што робіць далей, — гэта ўзроўненне мадэлі.
- Дзеяць, што зазвычай значыць вызванне інструмента, запуск коду або пошук інфармацыі.
- З’явіцеся, што даў рэзультат дзеяння.
- Верніцеся да 2-го крока і продавайце да таго часу, пакуль агент не вынесе рашэння, што цялёва досягнута.
Людзі часта называюць гэта цыклам «задумацца, дзеяць, з’явіцеся», і багатыя з першых агентоў былі створаны на яго аднойчыні. У рамках практыкі інжынерыя цыклаў спрацоўваюць з агентам як з аднім павтараючымся цыклам: мадэль узроўнюе, выбірае дзеяння, запускае яго, аналізуе рэзультат і запісвае гэты рэзультат назад у свой сэнтэкст, пасля чаго зноў працюе, пакуль не вынесе вывару, што задача завершана або была досягнута межа.
Калькі пунктовяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяяя
- Ён лягае ў падставу вядомага шаблону ReAct (рацыянароўкі, спалучанай з дзеянням) ад Yao і яго саавтараў, дзе следы рацыянароўкі перакрываюцца з дзеяннямі, і модэлю не трэба заранее завершыць усю сваю рацыянароўкю.
- Большасць фрэймворкаў для агентаў таксама вядомае так адзін «агент» — як адну цыкл падконтролю з спяльным вікнам кантэксту і інтэрфейсам для вызываў інструментаў.
- Яго напісанне займае лішэ каля калькі ліній. Станам ёсць розмова, якая адбылася да гэтага часу, і існуе адна умова выходу. Дапаможнік для кодавання, які рэдагуе файл, або доследчы агент, які шукае, пакуль не будзе задоволены, не патрабуе нічога болей складнага.
- Кераванне ад Anthropic таксама гаворыць пра гэта: пачніце з самага простаг падходу, яны работае, і дадзіце структуру толькі тады, калі задача гэтага трэбуе.
Проблема заключаецца ў тым, што ўсё, пра што павінен размышляць цыкл – укладзеныя спробы, тые, якія не задаліся, а таксама мета – павінна знаходзіцца ў аднам усё расшыроўваюцымся вікні кантэксту. У працэсу няма окалічнай памяці; ён проста зберагае транскрыпцію.
Як складаецца цыкл
Працэс выконваецца ад початку да канца такім чынам.
Этапы ўжоў:
- Задача корыстніка запускае цыкл з аднаковай метай.
- На этапе размышлення мадэль чытае запрошэнне сістэмы, історыю размовы і апошнія спазыранні, пасля чаго вырашае, што будзе далей.
- Перакананне „Чы гэта завершанае задача?“ не ўтварае окалічнай сістэмы; мадэль сама, на адной з аснов свайго кантэксту, вырашае, чы завершана задача.
- Калі задача не завершана, мадэль выбірае інструмент і запускае яго.
- Рэзультат або адказка інструмента вяртаецца як спазыранні.
- Гэтыя спазыраннія дадаюцца да кантэксту, і цыкл зноў пачынаецца, пры кожнай пасэўцы маючы адносна дыявальнейшую історыю.
- Калі мадэль завершыла анаіз выконанай працы, цыкл заканчываецца і вяртае фінальную адпаведзь.
Кампактная версія на Python паказвае, як мало коду для гэтага трэба.
def run_agent(task: str, tools: list, max_iterations: int = 10) -> str:
context = [{"role": "user", "content": task}]
for step in range(max_iterations):
response = llm.generate(context, tools=tools)
if response.is_final_answer:
return response.content
tool_result = execute_tool(response.tool_call)
context.append({"role": "assistant", "content": response.content})
context.append({"role": "tool", "content": tool_result})
return "Stopped: max iterations reached"
Што такое інжынірынг графаў
Інжынірынг графаў являе сабою явны выказ пракцэсу агента. Гэта сукупнасць вузлаў, кожны з якіх ўособлівае елемент работы, такі як вызов LLM, вызов інструмента чыя-небудзь частка бізнес-логікі, якія з’яўляюцца ў спалучэнні за дапамогою рэгулярных чыя-небудзь умовных рэшэнняў. Усе вузлы чытаюць і запішуць даны ў аднаковы, тыпаваны об’ект стану. Корача, рабочы пракцэс стае картою з’яўленых у спалучэнні крокаў з шляхамі межы ямі, заменяючы адзін павтараючыся цыкл.
Вузел можа быць будзь-кам з наступных:
- агент, спецыялізаваныя ІІ з аднай задачай, такой як даследжэння, напісанне чыя-небудзь аналіз
- вызов інструмента, напрыклад пошук у інтэрнэце, вычысленні чыя-небудзь запыт да базы дадзенаў
- таксонамічная точка, якая выбірае наступны шлях
- точка з’еднання, якая аднаёднае рэзультаты з калькі шляхоў
Калькі могу выконвацца паралельна, а іншыя ўмоўныя і выконваныя толькі калі тэст працюе. Ціклы таксама можлівы, але яны з’яўляюцца толькі там, дзе яны неабходны, як кантролюемы элемент, які вяртае задачу на калькі крокаў назад і не перадзванаўляе все занова.
Чаму графы ўпэўнююць у сабе
- Паралелізм. Незалежныя задачы можу выконвацца адночасна і не чакаюць у чэрзі.
- Разгалужэння. Працэс можа развівацца рознымі кіраваннямі залежна ад сітуацыі і не проста павтарае тыя ж крокі.
- Спецыялізацыя. Кожны вузол можа быць самастоятэльным экспертным агентам з адным направленнем, што бліжэй да спосабу, якім людская команда дзеліць работу.
- Цільавыя перапрыбуткі. Калі такі крок, як перакантрольванне якосці, не працюе, толькі гэты крок вяртае задачу на перадзванаўленне, а усё інша застаецца недастрыжаным.
- Візуабільна частка. Паколькі рабочы працэс прэдставлены як карта, лёгкая ўсё пазнакаваць, дзе выйшла проблема і які шлях быў выбраны.
LangGraph — гэта фрэймворк, створаны на адной з гэтых ідэй, які мадэлюе рабочыя працэсы як становыя, цыклічныя спрамованыя графы. Граф можа заставацца у цыкле, адколі вузол можа мець рэшту, якая ведае назад да паканальнага вузла, таму можлівы пракаты і ітэраціі. Зменяецца тое, што цыкл стае адной з багацькох рэсцоў, паказаных на карце, яку можна адразу пазнакаваць, і перастае быць всей архітэктурой.
Гэта добра ўзмоўкваецца з размежаваннем, якое працюе Anthropic між рабочымі практыкамі, дзе LLM-ы і інструменты следуюць заздалега візначаным шляхам коду, якія кантролююць распрацоўшчыкі, і агентамі, дзе мадэль дынамічна керуе своім працэсам. Граф можа выражыць аба варыянты ў адной структуры: з фіксаванымі шляхамі, дзе важліва прыгаднасць, і галузямі, кераванымі мадэллю, дзе корыстна гнучкасць, і разлік паказваецца на дыяграме.
Як складаецца граф
Возьмім той самы тып задачы — агента, які павінен даследзіць, напісаць код і пераглянуць свой выход, а пасля пераканструаваць яго ў граф.
Этапы стварэння графа:
- START — гэта точка входу ў граф.
- Узлок-маршрутызатор чытае тэкушчы стан і выбірае шлях. Гэтым можа быць просты
if/else, або вызов LLM, які класіфікуе запіт.
Ёсць спрасаваны псевдакод у стылі, які выбірае большасць фрэймворкаў для графаў.
from graph_engine import StateGraph, START, END
def router(state: dict) -> str:
return state["task_type"] # "research" | "code" | "review"
def research_agent(state: dict) -> dict:
state["results"]["research"] = do_research(state["query"])
return state
def code_agent(state: dict) -> dict:
state["results"]["code"] = write_code(state["query"])
return state
def review_agent(state: dict) -> dict:
state["valid"] = validate(state["results"])
return state
def aggregator(state: dict) -> dict:
state["final_output"] = merge(state["results"])
return state
graph = StateGraph(schema=AgentState)
graph.add_node("router", router)
graph.add_node("research_agent", research_agent)
graph.add_node("code_agent", code_agent)
graph.add_node("review_agent", review_agent)
graph.add_node("aggregator", aggregator)
graph.add_conditional_edges("router", {
"research": "research_agent",
"code": "code_agent",
"review": "review_agent",
})
graph.add_edge(["research_agent", "code_agent", "review_agent"], "aggregator")
graph.add_conditional_edges("aggregator", {
"valid": END,
"invalid": "router", # explicit retry edge
})
app = graph.compile()
app.invoke({"query": "...", "results": {}, "task_type": "code"})
Калі разместыць два такія шаблоны па боку ад боку, контраст становіцца болей зрозумелым.
Чаму працоўніцкая сфера пераходзіць з цыклаў да графаў
Этот пераход не быў раптовым. Цыклы сталі ствараць сэрьёзныя прыгожданні, калі людзі прабавалі ствараць болей амбіцыёзныя сістэмы, з кальколькіх прычын.
Рэальная праца не ведзецца па прамай лініі. Дзеянні, якія стосуюцца даследжэнняў, адказоў кліентам, фінансавага аналізу і апрацоўкі контэнту, завжды маюць разныя напрамкі. Якшчо пытанне стосуецца вырахунку платы, трэба ісці аднім шляхам, а якшчо гэта тэхнічная проблема — іншым. Цыкл змушае ўсё гэта паўтарыцца ў адной дужа дзягучай лянцугу умов, што быстра прыводзіць да хаосу.
Сістэмы з кальколькіма агентамі патрабавалі крашчай структуры. Калі ў сістэме было кальколькі агентаў, напрыклад, даследнік, структуруючы выкладкі і пераканальнік фактов, адны цыкл не мог ўскладніць, калі два агенты павінны працаваць адночасова або калі адны павінны працаваць толькі ў разе, калі перакананне не выйшла. Граф натуральна адбівае гэта.
З часам важлівей стаюць візуабельна частка і доверчыня. Калі агенты выконвалі працу з высокім рызыкам, командам была патрэбна паспрабовы стэп-бай-стэп інфармацыя пра тое, што адбылася. Можна накрэсліць граф і паказаць, дзе саме працэс працав добра чым паслаба, тады калі цыкл — гэта непрозрачны блок, які выконвае ідэнтычны код дваццаць разоў.
Косц і швальнасць. Кожная змарнаваная ітэрацыя спалюе час, а часта і рэальныя грошы, адколі кожны крок размышлення — гэта вызов мовнага модэлю. Выконванне незалежных крокаў паралельна і поверненне толькі таго часткі, якая трэба перадзеяць, ёсць проста эфектывнейшым спосабам.
Тэставанне і адтрыманне становяцца простыяй. Можна стварыць, працаваць і змяніць граф узель за узелам. Цыкл з жорсткай структурам зазвычай ўоснованы на логіцы „усё або нічога“, і безпечна змяніць яго пасля запуску ўскладнена.
Выбір між імі
Прыкладны карэнтны падход да прыняцця рашэння прыводзіцца ніжчэй.
Выбірайце цыкл, калі:
- У заданні ёсць адзін цэль: адзін агент, адзін мета і адзін набор прыемас
- Перад тым, як вітрачаць грошы на архітэктуру, трэба пераканацца ў правільнасці ранньага пратотыпа
- Колькасць крокаў ў працэсе ў меры мала і дастаткова прыемна для прагнозавання
- Адна адзначка несе адпаведальнасць за весь працэс, і нічога не трэба перадаваць іншай камандзе
Іспользуйце граф, калі:
- Участвуюць два або больш спецыялізаваных агентоў або ролей
- Трэба можлівасць аўдытавання практык перапрыявлення, альтэрнатыўных способаў аб людскіх затверджэнняў
- Часткі працэсу можаць выконвацца паралельна і пазней трэба ўзяць іх разам
- Трэба відстэйляць выкананне, стварыць контрольныя пункты аб вярнуцца да пэўнай точкі, чаго не можа зрабіць пераўтвораны транскрыпт
- Разныя адзначкі аб каманды керуюць разнымі сегментамі, пры чым граф служыць угодай межа ўсіма
Гэта корыстная перапрацоўка. Калі код ціклу містыць каментар на кшталт «У гэты момент мы ужо павінны былі спробаваць X», гэта ўскрыце, што вы некорэктна мадэлюеце граф у цікле, і, верагатна, настав час накрэсліць граф.
Гэта не справжня выбора «або/або». Характарнае задачэ — падлашаваць інструмент пад задачу. Базавы чат-бот, які адпавядае на запытанні по аднаму, або маленькі скрыпт, які павтарае адну чыстую дзеянне пакуль не завершыцца, падходзяць для ціклу. Задача з калькамі крокаў, колькіма спецыялістамі, якія саўместна працуюць, паралельнае выкананне працы або патрэба ў чыстай візуабілізацыі таго, што і чаму адбылася, падходзіць для графа. Розумны стандартны варыянт — пачаць з ціклу і перайсці да графа тады, калі логіка «калі-тады» стане важкая для разумення.
Чэк-ліст для практычнага вікорыстоўвання
Перш чым запусціць будзь-канкрэтны з гэтых падходаў, гэтыя прыкметы дапамагаюць:
- Абсалютна граніца крокаў. І тыя, і іншыя шаблоны патрабуюць прыстрою для перэрыву працы, адколькі агент без ліміту не мае ніякага верхньяго межы для сумы рахунку.
- Зробіце тэставанне стану „завершання“ можлівым. Умова завершэння павінна быць чымось, што можа буць пераканана праз тэст, а не проста здогадкай, якай ствараецца у модэлі.
- Інструментавацыя кожнага крока. Да кожнаму вызову LLM і кожнаму вызову інструмента неабходна ўстановіць сае OpenTelemetry span або аналогічны элемент, і трэба ухіліцца ад вікорыстання аднаго едынаго span для всіх операцый.
- Версіяванне структуры графа. Зберагаюце вялічыны структуры ў сістэме керавання версіямі, як і будзь-які код, адтолькі ўмелыя змяны елементаў можу таямніча зменіць ўзімчыну працы.
- Праверкі стану на межах вузлаў. Пераканвайцеся, што схемы дадзеных, якія прыходзяць і выходзяць з кожнага вузла, адпавядаюць заданым тыпам, ўпрынцыпе, каб некарэктныя даныя не моглі працаваць далей.
У чым справа
Цыкл — гэта мінімальны дызайн: адна супакой, адны цыкл, пры чым модэль керуе тэкстурам выканання. Ён падходзіць для простых агентаў з адной функцыяй. Граф жа паказвае працэс праз вузлы, станы і рэшты, якія можна накрэсліць, роздзяліць, выканаць паралельна чырвоне намеравана павторна спробаваць.
Глыбэйшыя змяны не ў тым, што графы сталі крашчымі. Гэта перахад з процедурнага мышлэння, калі спытваюцца, што будзе далей, да дэкларатыўнага мышлэння, калі спытваюцца, якія мае форму сістэма. Графы чыннае падходзяць да працы з алеяваннем і стварэнням можлівасцяў адзірвання, якія патрабуюць сістэмы вырабніцтва, тады як цыклы чыннае падходзяць да шырокага ітэрацыйнага працы.
Большасць сістэм вырабніцтва ў канцы канцоў стаюць графамі, створанымі з цыкламі, па суты — машынамі станоў, чыяя вузлы ўтвараюць маленькія цыклы у стыле ReAct. Гэта робіць гэтыя два патэрны разнымі рэвэлюмі адной архітэктуры, а не канкурэнтамі. Для будзь-яга сучаснага праекта з агентамі правільным пытаннем ёсць тое, чы роўнасць усё яшчэ працуе як адны дугі цыкл, чы ўжо час адобразыць гэта як граф.
Супаўзялёныя матэрыялы
- Адзентныя петлі да графаў рабочых пралэтактав: тыпаваны стан, брамы падтверджэння і обмежаная вяснаванасць — Чаму агенты, якія працуюць дзялейна, не падходзяць для адной петлі, і як явныя вузлы, рэшткі, тыпаваныя артыфакты, пераходы, якія падтверджаны, і правыя на кожны вузел робяць іх надзеянымі.
- Інжынерыя адзентных харнісаў: стан, падтверджэнне і кантроль абоўшчы модэль — Практычны відказ пра агентыў у рэальным часе: чаму запыты і кантэкст недастатні, і як стойкі стан, прымус, падтверджэнне і можлівасць спазірвання заполняюць гэты прыемак.