Агентҳои зеҳни сунъӣ

Китоб дар бораи он, ки агентҳои зеҳни сунъӣ чӣ гуна кор мекунанд, чӣ гуна онҳоро бояд сохт ва чӣ гуна бехатар ва боэътимод ба кор андохт: давраи «мулоҳиза — амал — мушоҳида», абзорҳо, меъмориҳо, хотира, арзёбӣ ва иҷрои бехатар.
Агенти Зеҳнӣ · 20 октябри 2026 · 17 саҳифа
Боби 7. Меъмориҳо ва қолабҳо: банақшагирӣ, вокуниш ва системаҳои бисёрагентӣ
Боби 7. Меъмориҳо ва қолабҳо: банақшагирӣ, вокуниш ва системаҳои бисёрагентӣ
Акнун медонед, ки агентҳои зеҳни сунъӣ ҷодугар нестанд. Онҳо системаҳои муҳандисишудаанд ва тавоноияшон аз тарзи дурусти ташкил кардани меъмории онҳо сарчашма мегирад. Бо якҷо кардани давраҳои андешаронӣ, абзорҳо, тарҳрезии дорои ҳолати ҳифзшаванда ва идоракунии мутобиқшаванда, моделҳои бузурги забонӣ метавонанд аз доираи промптҳои собит берун раванд ва ба системаҳои бисёрагентӣ — MAS (Multi-Agent Systems) — табдил ёбанд, ки дар вақти воқеӣ нақша мекашанд, вокуниш нишон медиҳанд ва натиҷаҳои худро бозбинӣ мекунанд.
Дар ин боб меъмориҳое баррасӣ мешаванд, ки чунин имкониятҳоро фароҳам меоранд: аз усулҳои андешаронии сохторёфта, монанди занҷираи андешаронӣ (Chain of Thought), дарахти андешаҳо (Tree of Thoughts) ва ReAct, то равишҳои меъморӣ, монанди агентҳои нозир ва системаҳои иерархӣ. Ҳамзамон, шумо ҷараёнҳои андешарониро амиқтар мефаҳмед ва мебинед, ки механизмҳои иштироки инсон дар раванд — аз ҷумла нуқтаҳои тасдиқ, ислоҳ ва таваққуф — чӣ гуна эътимоднокӣ, мутобиқат ба ҳадафҳо ва амнияти ин системаҳоро таъмин мекунанд.
Аҳаммияти меъмории агент ҳангоми муқоисаи тарзи иҷрои вазифа дар агенти содаи якмарҳилаӣ ва агенти чандмарҳилаӣ равшан мешавад. Агенти якмарҳилаӣ дархостро қабул мекунад, ҳамаи корҳоро дар дохили худ ба нақша мегирад, онҳоро дар як гузариш иҷро мекунад ва бе бозгашт ба марҳилаҳои мобайнӣ натиҷаро бармегардонад.
Баръакс, агенти чандмарҳилаӣ дар як давраи такрорӣ байни андешаронӣ ва амал мегузарад. Ҳангоми кор нақшаашро дар асоси натиҷаҳои қисман бадастомада ё мушоҳидаҳои нав мутобиқ мекунад. Маҳз ҳамин чандирӣ ба агентҳо имкон медиҳад, ки натиҷаҳоро пайваста беҳтар кунанд ва бо номуайянӣ ё бозхӯрди муҳит кор баранд. Ин фарқ дар расми 7.1 нишон дода шудааст. Ҷадвали 7.1 нишон медиҳад, ки ҳар ду равиш як вазифаро чӣ гуна қадам ба қадам иҷро мекунанд.

Расми 7.1. Равандҳои кори агенти якмарҳилаӣ — аз чап — ва агенти ReAct — аз рост. Дар тарафи агенти якмарҳилаӣ натиҷаи абзор ҳамчун натиҷаи ниҳоӣ нишон дода шудааст, то роҳи бе такрор таъкид шавад. Дар системаҳои воқеӣ ин натиҷа метавонад мустақиман баргардонда шавад ё барои шаклбандии ҷавоби ниҳоӣ дубора ба LLM дода шавад.
Ҷадвали 7.1. Мисол: иҷрои якмарҳилаӣ ва чандмарҳилаии ReAct барои вазифаи «Ҳуҷҷатро хулоса кун ва аз нишондиҳандаҳои асосӣ диаграммаи сутунӣ соз».
| Қадам | Агенти якмарҳилаӣ | Агенти чандмарҳилаии ReAct |
|---|---|---|
| 1 | Дархостро як бор мехонад. | Дархостро мехонад ва амали аввал — истихроҷи нишондиҳандаҳоро — муайян мекунад. |
| 2 | Тамоми пайдарпайии корро дар дохили худ ба нақша мегирад. | Амал: истихроҷро иҷро мекунад. Мушоҳида: додаҳои истихроҷшударо дар хотира нигоҳ медорад. |
| 3 | Хулоса ва диаграммаро дар як гузариш месозад. | Андеша: амали баъдиро барои таҳияи хулоса аз додаҳои истихроҷшуда ба нақша мегирад. |
| 4 | Натиҷаҳоро бе бозбинии натиҷаҳои мобайнӣ бармегардонад. | Амал: хулоса месозад. Мушоҳида: натиҷаро дар хотира нигоҳ медорад. |
| 5 | Дар миёни иҷро ягон ислоҳ ворид намекунад. | Андеша: сохтани диаграммаи сутуниро ба нақша мегирад. Амал: диаграммаро месозад. Мушоҳида: натиҷаро месанҷад. |
| 6 | — | Агар натиҷаҳои мобайнӣ нопурра бошанд, давраро то қонеъ гардидани талабот такрор мекунад ва баъд натиҷаҳои ниҳоиро бармегардонад. |
Ҷадвал фарқро қадам ба қадам нишон медиҳад, расми 7.1 бошад, равандҳои умумии корро паҳлуи ҳам муқоиса мекунад. Агенти якмарҳилаӣ аз промпт то натиҷа аз як пайдарпайии хаттӣ мегузарад. Агенти чандмарҳилаӣ бошад, андешаронӣ, амал ва хотираро ба давраи такрорӣ ворид мекунад, ки то ҳалли масъала ё тамом шудани буҷети ҳисоббарорӣ идома меёбад. Хотира дар боби 12 муфассал баррасӣ мешавад.
Дар бораи коди ин боб. Мисолҳои код танҳо қисмҳои асосиро нишон медиҳанд. Воридкуниҳо (
import), танзими модел, абзорҳо ва баъзе функсияҳои ёрирасон барои кӯтоҳӣ оварда нашудаанд, бинобар ин дар код номҳое вомехӯред, ки дар худи боб муайян нашудаанд. Коди пурраи иҷрошаванда дар анбори китоби аслӣ ҷойгир аст. Коди дарозтар ва мавзуъҳои пешрафта — татбиқи ToT, тавсифи математикии ReAct, қолабҳои мураккаби HITL ва коди гурӯҳҳои иерархӣ ва тӯда — дар охири боб, дар қисми «Барои хонандагони пешрафта», оварда шудаанд.
Андешаронӣ ва амали сохторёфта
Ба агентҳо додани шахсият ё нақши мушаххас, ки баъзан «инсонмонандсозӣ» номида мешавад, метавонад андешаронии онҳоро дақиқтар ва саҳмашонро ҳадафмандтар кунад. Агенти банақшагире, ки ҳамчун роҳбурдсози муназзам муаррифӣ шудааст, ба масъалаҳо аз агенти мунтақиде, ки нақши арзёбро дорад, ба таври дигар муносибат мекунад.
Вақте ҳар агент нақш ва тарзи муносибати равшан дорад, занҷираҳои андешаронии он одатан пайвастатар мешаванд ва ҳамкориаш дар системаи бисёрагентӣ ҳадафмандтар мегардад. Ин ҳамоҳангӣ ҳамкориро беҳтар мекунад, зеро ҳар агент медонад, ки аз он чӣ гуна дониш ва саҳм интизор аст.
Бо вуҷуди ин, муайян кардани нақш танҳо як қисми кор аст. Барои самараноктар кардани агентҳо шояд лозим шавад, ки тарзи андешидани онҳоро низ шакл диҳед. Маҳз дар ҳамин ҷо усулҳои андешаронии сохторёфта, монанди CoT, ToT ва ReAct, ба кор меоянд.
Ба агентҳои худ имкон диҳед, ки марҳилаҳои андешиданашонро баён кунанд
**Промптдиҳӣ бо занҷираи андешаронӣ — Chain-of-Thought prompting (CoT)**¹ аз раванди тафаккури инсон илҳом гирифтааст. Дар ин усул, пеш аз расидан ба ҷавоби ниҳоӣ, қадамҳои мобайнӣ ҳал мешаванд.
Гарчанде CoT аксар вақт ҳамчун ҳиллаи промптнависӣ муаррифӣ мешавад, дар заминаи агентҳои зеҳни сунъӣ он метавонад ба шакли қадамҳои иловагии андешаронӣ амал кунад, ки ҷараёни идоракуниро роҳнамоӣ мекунанд. Бо водор кардани модел ба тавлиди қадамҳои мобайнӣ, раванди андешаронӣ равшантар мешавад. Ин кор аксар вақт эътимоднокиро беҳтар мекунад ва метавонад ба моделҳои хурдтар имкон диҳад вазифаҳоеро иҷро кунанд, ки дар ҳолати дигар модели бузургтар талаб мекарданд. Ҳамин тавр, хароҷот камтар мемонад ва тарзи расидани агент ба қарорҳояш равшантар мешавад. Ҷадвали 7.2 барои ҳолатҳои маъмул намунаҳои промпт медиҳад, ки метавонед онҳоро ба ниёзҳои худ мутобиқ кунед.
Ҷадвали 7.2. Намунаҳои промпти CoT барои ҳолатҳои гуногун.
| Ҳолат | Намунаи промпти CoT |
|---|---|
| Банақшагирӣ | «Барои таҳияи ҷадвали якҳафтаинаи нашри блог қадам ба қадам нақша тартиб деҳ. Сабаби ҳар интихобро шарҳ деҳ». |
| Таҳлили додаҳо | «Аввал маҷмӯи додаҳоро тавсиф кун. Баъд қонуниятҳо ё тамоюлҳоро нишон деҳ. Дар охир хулосаи равшани натиҷаҳои таҳлилро пешниҳод кун». |
| Масъалаи математикӣ | «Масъаларо ба қисмҳои хурдтар ҷудо кун. Ҳар қисмро бо шарҳ ҳал кун. Сипас натиҷаҳоро барои гирифтани ҷавоби ниҳоӣ якҷо кун». |
| Вазифаи таҳқиқотӣ | «Аввал саволҳои асосиро номбар кун. Онҳоро як ба як таҳқиқ кун. Дар охир хулосаи ҷамъбастӣ пешниҳод намо». |
| Ёфтану ислоҳ кардани хато | «Аввал сабабҳои эҳтимолиро номбар кун. Ҳар сабабро бо навбат санҷ. Вариантҳои номувофиқро бо шарҳи сабаб рад кун, то ба роҳи ислоҳ бирасӣ». |
| Қабули қарор | «Ҳамаи вариантҳои дастрасро номбар кун. Бартариҳо ва камбудиҳоро қадам ба қадам баррасӣ намо. Вариантеро интихоб кун, ки ба меъёрҳо бештар мувофиқ аст ва сабабашро шарҳ деҳ». |
Барои равшантар кардани тарзи ворид кардани ин усул ба раванди кор, агенти таҳлили додаҳоро баррасӣ мекунем. Азбаски асоси агенти сабки CoT қобилияти тақсим кардани кор ба қадамҳои мобайнии андешаронӣ аст, таҳлили додаҳо намунаи муносиб мебошад.
Ҳадаф ин нест, ки тамоми андешаронии хоми бемаҳдуд ҳамчун ҷавоби ниҳоӣ ошкор шавад. Ҳадаф роҳнамоӣ кардани агент аз марҳилаҳои намоёни таҳлил аст: аввал маҷмӯи додаҳоро тавсиф кунад, баъд қонуниятҳо ё тамоюлҳоро нишон диҳад ва дар охир натиҷаҳоро тафсир намояд.
Намунаи 7.1 промпти умумии системавиро нишон медиҳад, ки барои чунин агент истифода бурдан мумкин аст. Барои кӯтоҳ нигоҳ доштани матн, қисми боқимондаи код оварда нашудааст, аммо татбиқи пурраи коршоям дар анбори китоби аслӣ дастрас аст.
Намунаи 7.1. Промпти CoT.
SYSTEM_INSTRUCTIONS = f"""You are a careful data analysis assistant.
Think step-by-step and be explicit in your reasoning.
Structure your analysis as a clear chain of thought, and present your FINAL ANSWER
in these three parts:
1. Describe the dataset: its shape, its columns, and what each column represents.
2. Highlight the patterns or trends you find.
3. Conclude with a clear summary of insights.
Return your FINAL ANSWER only after you have executed the analysis successfully."""
Промпт аз агент мехоҳад ҳамчун ёвари бодиққати таҳлили додаҳо кор кунад, таҳлилро марҳилавӣ ташкил намояд ва ҷавоби ниҳоиро дар се қисм диҳад: тавсифи маҷмӯи додаҳо, нишон додани қонуниятҳо ё тамоюлҳо ва хулосаи натиҷаҳои таҳлил. Ҷавоби ниҳоӣ бояд танҳо пас аз иҷрои муваффақонаи таҳлил пешниҳод шавад.
Барои он ки агент коди Python-ро иҷро карда тавонад, ба муҳити ҷудошуда — sandbox ниёз доред. Ин як «қуттии бехатар» аст: коди навиштаи агент дар дохили он иҷро мешавад ва ба компютери шумо дастрасӣ надорад.
LangChain барои ин абзори PyodideSandboxTool-ро дорад. Pyodide — ин Python-е аст, ки ба WebAssembly (формати коде, ки браузерҳо иҷро мекунанд) табдил дода шудааст; барои ҳамин коди оддии Python метавонад мустақиман дар браузер ё дар чунин муҳити ҷудошуда иҷро шавад.
Агент натиҷаи кодро чӣ гуна мебинад? Ҳар чизе, ки код бо print мебарорад, ба баромади стандартӣ — stdout — меравад ва агент онро мехонад. Агар код хато диҳад, агент гузориши хаторо — traceback — мегирад ва метавонад кодро ислоҳ кунад. Намунаи 7.2 ин муҳитро месозад.
Намунаи 7.2. Сохтани муҳити ҷудошудаи Pyodide.
python_repl = PyodideSandboxTool(
name="python_repl",
description=(
"Execute Python code for data analysis. Always print results. Use pandas for "
"tables. Charts must be emitted as pure SVG strings printed to stdout "
"(matplotlib is not available, and the sandbox filesystem is not visible to "
"the host)."
),
allow_net=True,
)
tools = [python_repl]
Тавсифи абзор талаб мекунад, ки натиҷаҳо ҳамеша чоп шаванд, барои ҷадвалҳо pandas истифода шавад ва диаграммаҳо ҳамчун сатрҳои холиси SVG ба stdout бароварда шаванд. Дар ин муҳит matplotlib дастрас нест ва системаи файлии муҳити ҷудошуда ба мизбон намоён нест.
Акнун барои истифодаи промпт танҳо лозим аст як агент созед, чунон ки дар намунаи 7.3 нишон дода шудааст.
Намунаи 7.3. Агенти CoT.
agent = create_react_agent(
model=llm,
tools=tools,
prompt=SYSTEM_INSTRUCTIONS,
)
Ҳангоми иҷрои код агент маҷмӯи додаҳои намунавиро дуруст тавсиф кард, қонуниятҳо ва тамоюлҳоро дақиқ таҳлил намуд ва ҳам диаграммаи сутунӣ ва ҳам хулосаи натиҷаҳои таҳлилро пешниҳод кард.
Ин мисол нишон медиҳад, ки CoT чӣ гуна раванди андешаронии агентро намоён ва санҷиданӣ мекунад. Бо истифодаи коди мазкур, шумо асосан агентро водор мекунед, ки қадамҳои мобайниашро баён намояд. Ҳамин тавр, на танҳо эътимод ба натиҷаҳо бештар мешавад, балки сабти равшане низ ба вуҷуд меояд, ки нишон медиҳад хулосаҳо чӣ гуна ҳосил шудаанд.
Сохтани дарахти имкониятҳо
Акнун ҳолатеро тасаввур кунед, ки вазифа мураккабтар аст, аммо намехоҳед модели махсуси андешаронӣ ё меъмории пурраи бисёрагентиро истифода баред. Бо вуҷуди ин, равиши ҷустуҷӯгарона ва стратегӣ лозим аст. Дар чунин ҳолатҳо метавонед аз **промптдиҳӣ бо дарахти андешаҳо — Tree-of-Thoughts prompting (ToT)**² истифода баред. ToT андешаронии CoT-ро ба раванди ҷустуҷӯи шохадор табдил медиҳад: пеш аз интихоби қадами беҳтарини баъдӣ, чанд роҳи андешаронӣ таҳқиқ ва арзёбӣ мешаванд.
ToT-ро метавон ҳамчун раванди марҳилавӣ, на ҳамчун системаи пурраи бисёрагентӣ, татбиқ кард. Ғояи асосӣ чунин аст: дар марҳилаи тавлид чанд роҳи эҳтимолӣ пешниҳод мешавад; дар марҳилаи арзёбӣ ба онҳо баҳо дода мешавад ё яке интихоб мегардад; дар марҳилаи иҷро роҳи интихобшуда пайгирӣ мешавад. Масалан, барои навиштаи блог модели хурд се равиши гуногун пешниҳод мекунад, модели қавитар ҳар сеяшро аз рӯйи равшанӣ ва навоварӣ баҳо дода, беҳтаринашро интихоб мекунад ва агент кори навиштанро танҳо бо ҳамон равиш идома медиҳад.
Ин марҳилаҳоро метавон ҳамчун нақшҳои ҷудогонаи агент, гиреҳҳои граф ё даъватҳои LLM татбиқ кард. Вобаста ба талаботи арзиш ва сифат, онҳо метавонанд моделҳои гуногунро истифода баранд. Усули содакардашудаи ToT роҳи амалии миёнаест байни давраи содаи ReAct — нигаред ба бахши «Чӣ гуна агентро ба амал ва бозбинӣ водор кунем» — ва алгоритмҳои мураккаби ҷустуҷӯи дарахтӣ, ки ҳисоббарории хеле зиёд талаб мекунанд (онҳо дар боби 13, барои хонандагони пешрафта, баррасӣ мешаванд).
ToT ҳамчун роҳи содатари муҳандисӣ
Сохтори сабуки ToT, ки дар он модели хурдтар шохаҳоро пешниҳод мекунад ва модели қавитар онҳоро арзёбӣ менамояд, баъзан метавонад ҷойи меъмории пурраи бисёрагентиро гирад. Дар ин ҳолат, «нақшҳо» марҳилаҳои раванди кор мебошанд, на агентҳои мустақил. Ин кор тарҳрезиро содатар мекунад ва вақт ва маблағро сарфа менамояд: агар сохтори хурдтар натиҷаҳои эътимоднок диҳад, дигар зарурати даъватҳои такрории моделҳои бузурги андешаронӣ намемонад.
Тафсилот дар охири боб: «Коди ToT: тавлид, интихоб ва граф» (қисми «Барои хонандагони пешрафта»).
Шояд CoT ва ToT танҳо ҳиллаҳои зираконаи промптнависӣ ба назар расанд, аммо дидед, ки онҳо метавонанд абзорҳои пурқуввати муҳандисӣ бошанд. Расми 7.2 ҳар ду равишро муқоиса мекунад: аз чап агенти ягона бо CoT андешаронӣ мекунад; аз рост сохтори бисёрагентӣ нишон дода шудааст, ки дар он нақшҳои гуногун барои таҳқиқ, бозбинӣ ва такмил ҳамкорӣ намуда, раванди ToT-ро тақлид мекунанд.

Расми 7.2. Диаграммаи ҷараёни идоракунӣ барои муқоисаи CoT ва ToT.
Ин ду равиш нишон медиҳанд, ки андешаронии сохторёфта метавонад аз занҷираи хаттии қадамҳои мобайнӣ то раванди шохадори таҳқиқ ва интихоб густариш ёбад. Ҳар ду таъкид мекунанд: вақте агентҳо ба андешидани марҳилавӣ роҳнамоӣ мешаванд — хоҳ ҳамчун як агент, хоҳ ҳамчун гурӯҳи ҳамоҳанг — натиҷа санҷидатар ва эътимодноктар мегардад.
Чӣ гуна агентро ба амал ва бозбинӣ водор кунем
Дар бахши пеш дидед, ки CoT ва ToT барои андешаронӣ муфиданд. Аммо танҳо андешаронӣ кофӣ нест. Агенте, ки танҳо андеша мекунад, аз доираи матн берун намеравад; агенте, ки танҳо амал мекунад, аз қарорҳои худ чизе намеомӯзад. Барои якҷо кардани ин ду ба ReAct³ ниёз доред. Ин ном аз reasoning and action — «андешаронӣ ва амал» — гирифта шудааст.
Ба забони сода, ReAct ҳар қадамро ҳамчун интихоб байни андешидан бо забон ва амал кардан дар муҳит баррасӣ мекунад. Агент контексти ҷориро мебинад, қарор мекунад, ки шарҳи андешаронӣ тавлид кунад ё абзореро даъват намояд ва натиҷаро ба қадами баъдӣ мебарад.
Яъне ҳар андеша, ҳар даъвати абзор ва ҳар натиҷаи абзор ба таърихи паёмҳо илова мешавад ва агент қадами навбатиро аз рӯйи ҳамин таърихи пурра интихоб мекунад. Андеша худаш ба ҷаҳони беруна таъсир намерасонад — он танҳо контекстро барои қадами навбатӣ ғанӣ мекунад; амал (масалан, даъвати абзор) бошад, ба муҳит таъсир мерасонад.
Тавсифи математикии ReAct дар охири боб: «ReAct бо забони математика» (қисми «Барои хонандагони пешрафта»).
Дар ReAct мушоҳидаи ҳар қадам метавонад паёми корбар ё натиҷаи абзор бошад. Амали ҷавобӣ бошад, метавонад қадами андешаронӣ ё даъвати абзор бошад. Контекст аз пайдарпайии ин мушоҳидаҳо ва амалҳо ташкил мешавад. Ба ибораи дигар, агент на танҳо кори анҷомдодаашро, балки сабаби интихоби он роҳро низ ба қадамҳои баъдӣ мебарад. Ҳамин сохтори бозгаштӣ имкони бозбиниро фароҳам меорад: қарорҳои ояндаи агент ҳам аз таърихи амалҳо ва ҳам аз андешаронии ҷамъшуда таъсир мегиранд. Диаграммаи расми 7.3 давраи ҳадди ақалли агентро нишон медиҳад, ки дар LangGraph татбиқ шудааст.

Расми 7.3. Диаграммаи ҷараёни идоракунии агенти ReAct. Ин давра нишон медиҳад, ки агент дар ҳар қадам амали навбатиро чӣ гуна интихоб мекунад.
Раванд аз __start__ оғоз мешавад. Ин нуқта идоракуниро ба агент медиҳад ва баъд, вобаста ба натиҷа, роҳҳо ҷудо мешаванд:
- Агар агент қарор кунад, ки ба хулоса расидааст, сигнали анҷом медиҳад ва ба
__end__мегузарад. - Агар андешаронӣ ё амали бештар лозим бошад, агент сигнали идома медиҳад ва метавонад барои ҷамъоварии маълумоти иловагӣ ё иҷрои амал абзорҳоро даъват кунад.
- Пас аз кор бо абзорҳо идоракунӣ ба агент бармегардад, то натиҷаҳоро якҷо кунад, онҳоро бозбинӣ намояд ва баъд қарор диҳад, ки идома диҳад ё истад.
Моҳияти ReAct ҳамин аст: якҷо кардани андешаронӣ, амал ва бозбинӣ дар давраи такрорӣ. ReAct аз «модел аввал фикр мекунад ва баъд амал мекунад» фаротар меравад. Худи баёни андешаронӣ як қисми ҳолати тағйирёбанда мешавад. Яъне агент байни баёнҳои андешаронӣ ва натиҷаҳои абзорҳо мегузарад ва ин баёнҳо дубора ба контекст ворид мешаванд.
Гарчанде ин мисол ба як агент дахл дорад, ҳамин сохтор ба системаҳои бузурги бисёрагентӣ низ табиатан густариш меёбад. Ҳар агент метавонад давраи андешаронӣ ва амали худро нигоҳ дорад ва баёнҳои андешаронӣ байни агентҳо мубодила шаванд. Ҳамин тавр, ReAct на танҳо абзори қабули қарори инфиродӣ, балки заминаи ҳамкорӣ ва бозбинӣ дар сохторҳои мураккабтари агентӣ низ мебошад.
Акнун диаграммаро ба код табдил медиҳем. Мисли пештара, дар ин ҷо танҳо қисмҳои муҳим оварда мешаванд. Татбиқи пурраи иҷрошаванда дар ноутбуки ҳамроҳи китоб дастрас аст.
Пеш аз дидани код, мақсадро ба ёд оред: ҳолати гуфтугӯ пайваста афзоиш меёбад, дар ҳоле ки модел байни баёнҳои забонӣ ва амалҳои вобаста ба вазифа мегузарад. Дар ҳар қадам андеша, амал ё мушоҳидаи абзор ба ҳолат илова мешавад. Код ҳамин давраро инъикос мекунад. Аз ин рӯ, аввал ҳолати графро месозед.
Намунаи 7.4. Сохтани ҳолати ReAct.
class AgentState(TypedDict):
messages: Annotated[Sequence[BaseMessage], add_messages]
AgentState ҳолати агентро муайян мекунад. Ҷараёни паёмҳо контекстро ташкил медиҳад.
Дар намунаи 7.5 ба модел ду қобилият медиҳед: он метавонад токенҳои забонӣ тавлид кунад, ки нақши андешаҳоро доранд, ва метавонад дархости сохторёфтаи даъвати абзор фиристад. Пайвастани абзорҳо ин амалҳоро ба натиҷаҳои мустақиме табдил медиҳад, ки муҳити иҷро метавонад онҳоро ба абзори дахлдор равона кунад.
Намунаи 7.5. Омода кардани LLM.
model = ChatOpenAI(model="gpt-5.4-mini", temperature=0)
model = model.bind_tools(TOOLS)
Пайвастани абзорҳо ба модел фазои амалҳои имконпазири онро васеъ мекунад.
Намунаи 7.6 қадами интихоби амал аст. Қоидаеро, ки амали навбатиро интихоб мекунад, сиёсат (policy) меноманд; дар ин ҷо ин қоида худи LLM аст. Он тамоми таърихи паёмҳоро мехонад, қоидаҳои системавиро татбиқ мекунад ва андеша, дархости даъвати абзор ё ҳар дуро тавлид менамояд. Дар ин ҷо масирро ҷудо намекунед; танҳо қарори моделро бармегардонед.
Намунаи 7.6. Даъвати модел.
def call_model(state: AgentState, config: RunnableConfig) -> Dict[str, Any]:
response = model.invoke([SYSTEM_PROMPT] + state["messages"], config)
return {"messages": [response]}
Сиёсати интихоби амал тавассути model.invoke ба контексти ҷорӣ татбиқ мешавад. Reducer (функсияи ҷамъкунандаи ҳолат) қоидаест, ки мегӯяд натиҷаи гиреҳ бо ҳолати пешина чӣ гуна якҷоя шавад. Дар ин ҷо add_messages ҳамин корро мекунад: паёмҳои навро ба рӯйхат илова мекунад, на ки рӯйхати пешинаро иваз (нигаред ба боби 6). Ҳамин тавр контекст бо ҳар қадам пур мешавад.
Дар намунаи 7.7 нияти агент ба таъсири воқеӣ табдил меёбад. Ҳар даъвати дархостшудаи абзор бо тартиби муайян иҷро мешавад ва натиҷааш дар шакли паём ҷой мегирад. Бо ворид кардани мушоҳида ба ҳамон ҷараёни паёмҳо, имкон медиҳед, ки қадами навбатии модел далелҳои тозаро бе механизми махсуси иловагӣ баррасӣ кунад.
Намунаи 7.7. Иҷрои даъватҳои абзор.
def tool_node(state: AgentState) -> Dict[str, Any]:
last = state["messages"][-1]
outputs: list[ToolMessage] = []
for tc in getattr(last, "tool_calls", []) or []:
name = tc.get("name")
args = tc.get("args") or {}
tool_fn = TOOLS_BY_NAME.get(name)
if not tool_fn:
result = json.dumps({"error": f"Unknown tool {name}"})
else:
result = tool_fn.invoke(args)
outputs.append(
ToolMessage(
content=result,
name=name,
tool_call_id=tc.get("id"),
)
)
return {"messages": outputs}
Агар модел амале интихоб карда бошад, абзор иҷро мешавад. Натиҷаи абзор мушоҳидаест, ки ба қадами баъдӣ маълумот медиҳад.
Қоидаи қатъ дар намунаи 7.8 сода аст. Агар модел абзореро дархост карда бошад, пеш аз даъвати навбатии модел он амал бояд иҷро шавад. Агар абзор дархост нашуда бошад, чунин мешуморем, ки модел ҷавоби ниҳоиро тавлид кардааст. Ин кор давраро пешгӯишаванда нигоҳ медорад ва аз амалҳои дархостшудаи иҷронашуда пешгирӣ мекунад.
Намунаи 7.8. Шарти қатъ.
def should_continue(state: AgentState) -> str:
last = state["messages"][-1]
if getattr(last, "tool_calls", None):
return "continue"
return "end"
Санҷиши қатъ паёми охирини зеҳни сунъиро мехонад ва муайян мекунад, ки раванд идома ёбад ё анҷом шавад.
Акнун қисмҳоро ба мошини хурди ҳолатҳо пайваст мекунед, чунон ки дар намунаи 7.9 нишон дода шудааст. Канорҳо ҷараёни идоракуниро ифода мекунанд, ки бо диаграммаи ReAct мувофиқ аст. Аввал гиреҳи сиёсати интихоби амал иҷро мешавад. Агар он амал барорад, идоракунӣ ба гиреҳи абзорҳо ва баъд боз ба гиреҳи модел меравад. Агар танҳо андеша ё ҷавоби ниҳоӣ барояд, раванд қатъ мешавад.
Намунаи 7.9. Сохтани графи раванди кор.
workflow = StateGraph(AgentState)
workflow.add_node("agent", call_model)
workflow.add_node("tools", tool_node)
workflow.set_entry_point("agent")
workflow.add_conditional_edges(
"agent",
should_continue,
{"continue": "tools", "end": END},
)
workflow.add_edge("tools", "agent")
graph = workflow.compile()
Ҳангоми иҷро граф ҳар дафъа аз як канор мегузарад. Канори шартӣ муайян мекунад, ки гузариши баъдӣ ба tools бошад ё ба END. Канори собит аз tools ба agent давраи «андеша–амал»-ро пурра мекунад.
Барои дидани ин раванд дар амал саволе медиҳед. Мо пурсидем, ки ҳавои Сюрих чӣ гуна мешавад. LLM аввал муайян мекунад, ки барои ҷавоби беҳтар кадом абзорро даъват кунад. Сипас абзор маълумот бармегардонад ва модел ҷавоби ниҳоиро бар асоси ҳамон маълумот менависад. Азбаски ҳар қадам дар ҷараёни паёмҳо сабт мешавад, раванди андешарониро бозбинӣ кардан мумкин аст:
Оғози сабти нави ReAct...
Савол: Имрӯз ҳаво дар Сюрих чӣ гуна аст?
Хулосаи андешаронӣ: интихоби абзор дар асоси дархост.
Амал:
{
"action": "internet_search",
"action_input": {
"query": "Zurich weather today forecast"
}
}
Мушоҳидаи намунавӣ: сарлавҳаи натиҷа «Пешгӯии обу ҳавои Сюрих, Сюрих, Швейтсария» аст. Порчаи намоишдодашуда пешгӯии соатбайъро меорад: соати 1-и шаб 55° ва эҳтимоли борон 54%; соати 2-и шаб 54° ва 25%; соатҳои 3 ва 4-и шаб 54° ва 20%; соати 5-и саҳар 53° ва 20%. Дар манбаъ порчаи JSON-и ин мушоҳида нопурра оварда шудааст.
Ҷавоби ниҳоӣ: «Имрӯз дар Сюрих ҳаво абрнок буда, гоҳ-гоҳ борон меборад. Ҳарорат тақрибан 14–19°C мешавад. Баъзе пешгӯиҳо ҳамчунин борони сабук ё борони гузарандаро бо эҳтимоли баланди бориш нишон медиҳанд. Барои тафсилоти бештар пешгӯии пурраро бинед».
Сабт анҷом ёфт.
Акнун мефаҳмед, ки ReAct то чӣ андоза тавоно буда метавонад. Масъала танҳо дар он нест, ки агент байни андешидан ва амал кардан мегузарад; худи андешаронӣ низ қисми ҳолат мешавад. Ин раванди бозгаштӣ ба агентҳо имкон медиҳад мутобиқ шаванд, роҳбурдҳояшонро беҳтар кунанд ва интихобҳои худро шарҳ диҳанд. Дар амал, ин ҳатто ба моделҳои нисбатан хурд имкон медиҳад вазифаҳои мураккабро боэътимодтар иҷро кунанд ва раванди қабули қарорашон равшантар бошад.
CoT, ToT ва ReAct дар якҷоягӣ нишон медиҳанд, ки роҳбурдҳои гуногуни андешаронӣ чӣ гуна қобилияти агентҳоро шакл медиҳанд. Ҳар равиш бартарии худро дорад: CoT равшанӣ ва эътимоднокиро пешниҳод мекунад; ToT пеш аз интихоб чанд вариантро таҳқиқ мекунад; ReAct бо пайвастани андешаронӣ ва истифодаи абзорҳо давраро пурра месозад. Ҷадвали 7.3 ин қолабҳоро бо тавсияҳои истифодаашон ҷамъбаст мекунад.
Ҷадвали 7.3. Хулосаи усулҳои андешаронии сохторёфта.
| Усул | Мавриди истифода | Бартариҳо | Камбудиҳо ва ҳолатҳои эҳтимолии нокомӣ |
|---|---|---|---|
| Занҷираи андешаронӣ — CoT | Андешаронии қадам ба қадам барои математика, банақшагирӣ ва таҳлил | Эътимоднокӣ ва равшаниро беҳтар мекунад; ба моделҳои хурдтар барои иҷрои вазифаҳои душвортар кумак мекунад | Сусттар аст; ҷавобҳо тӯлонӣ мешаванд; метавонад андешаронии зоҳиран боварибахш, вале нодуруст тавлид кунад |
| Дарахти андешаҳо — ToT | Вазифаҳои ҷустуҷӯӣ бо чанд роҳи ҳал, монанди навиштани эҷодӣ ва ҷустуҷӯи роҳбурд | Вариантҳоро таҳқиқ мекунад; майл ба қабули ҷавоби аввалро кам мекунад | Хароҷоти ҳисоббарорӣ баландтар аст; бе буридани шохаҳо шумораи онҳо зуд зиёд мешавад |
| ReAct | Вазифаҳое, ки ҳам андешаронӣ ва ҳам абзор мехоҳанд: таҳқиқ, барномасозӣ, API | Андешаронӣ ва амалро якҷо мекунад; сабти пайгиришаванда месозад; ба бозхӯрд мутобиқ мешавад | Идоракунии ҳолат мураккабтар аст; метавонад абзорҳоро аз ҳад зиёд даъват кунад ё бе шарти қатъ дар давра бимонад |
Ин муқоиса нишон медиҳад, ки ҳангоми ворид шудан ба раванди умумии агентӣ, усулҳои мазкур метавонанд ба ҷузъҳои пурқуввати сохтмонии система табдил ёбанд.
Шӯхӣ мекунӣ, агенти зеҳни сунъӣ?!
Баъзан рафтори агент хандаовар мешавад. Шояд абзори нодурустро даъват кунад, беохир дар як давра бимонад ё ҷавоби ғайриодии эҷодӣ диҳад. Дар чунин лаҳзаҳо мумкин аст хандед ва гӯед: «Шӯхӣ мекунӣ, ҳамин тавр не?»
Аммо вақте ҳамин пешгӯинашавандагӣ ба назорати дастрасӣ, амалиёти молиявӣ ё маълумоти муштариён мерасад, дигар ҷои шӯхӣ нест. Амале, ки дар вақти нодуруст ё дар системаи нодуруст анҷом мешавад, метавонад паёмадҳои ҷиддӣ дошта бошад. Маҳз барои ҳамин иштироки инсон дар раванд — Human-in-the-Loop (HITL) вуҷуд дорад. HITL ба агент имкон медиҳад дар нуқтаҳои муҳим таваққуф кунад, тасдиқи шуморо талаб намояд ва танҳо вақте идома диҳад, ки пеш рафтан бехатар бошад.
HITL танҳо барои пешгирии хатоҳо нест. Он ҳамчунин масъулиятпазирӣ ва равшаниро таъмин мекунад. Бо ворид кардани нуқтаҳои санҷиш ба раванди кори агент, бовар ҳосил мекунед, ки амалҳои баргаштнопазир баррасӣ мешаванд, қарорҳо пайгиришавандаанд ва амалиёти ҳассос зери назорати инсон мемонанд. Ин назорат агентҳоро боэътимодтар мекунад ва истифодаашонро дар муҳитҳои воқеии корӣ осонтар мегардонад.
Тарҳрезии равандҳои дорои иштироки инсон
Дар раванди HITL метавонед чанд навъи таваққуфро истифода баред. Маъмултаринашон инҳоянд.
Тасдиқ ё рад. Пеш аз қадами муҳим, масалан даъвати API, графро боздоред, то амал баррасӣ ва тасдиқ шавад. Агар амал рад гардад, метавонед иҷрои онро пешгирӣ кунед ва эҳтимолан роҳи дигареро интихоб намоед. Ин қолаб аксар вақт масири графро бар асоси ҷавоби инсон муайян мекунад.
Баррасӣ ва таҳрир. Графро барои баррасӣ ва таҳрири ҳолат боздоред. Ин барои ислоҳи хатоҳо ё илова кардани маълумоти нав ба ҳолат муфид аст.
Баррасии даъватҳои абзор. Агар даъвати абзор ба системаҳои беруна таъсир расонад, пеш аз иҷро аргументҳои онро санҷед. Масалан, пеш аз фармоиши сафар метавонед ҷузъиёти бронро тасдиқ кунед.
Санҷиши маълумоти воридкардаи инсон. Дар қадами муайяни граф аз инсон ошкоро маълумот дархост кунед. Ин барои гирифтани маълумот ё контексти иловагӣ, ки ба қабули қарори агент кумак мекунад, ё барои дастгирии гуфтугӯҳои чанднавбатӣ муфид аст.
LangGraph барои татбиқи ин қолабҳо дар барномаҳо ҳуҷҷатгузории муфассал дорад. Илова бар ин, анбори китоби аслӣ намунаҳои пурраи иҷрошавандаи шаш қолаби гуногунро дар бар мегирад. Тавассути функсияи main() метавонед яке аз онҳоро интихоб кунед.
Намунаи 7.10. Функсияи асосӣ барои намоиши қолабҳои HITL.
def main():
menu = """
Pick a demo
1. Human feedback loop for writing
2. Approval gate before API call
3. Review and edit state
4. Parallel interrupts with resume map
5. Tool call review in a tiny ReAct loop
6. Static interrupts for debugging
q. Quit
> """
Меню шаш намуна пешниҳод мекунад: давраи бозхӯрди инсон барои навиштан; нуқтаи тасдиқ пеш аз даъвати API; баррасӣ ва таҳрири ҳолат; таваққуфҳои ҳамзамон бо харитаи идомадиҳӣ; баррасии даъвати абзор дар давраи хурди ReAct; ва таваққуфҳои собит барои ёфтану ислоҳ кардани хато. q барои баромадан аст.
Дар намунаҳои 7.11 то 7.15 тарзи татбиқи ду қолаби асосиро — «тасдиқ ё рад» ва «баррасӣ ва таҳрир» — шарҳ медиҳем ва нуктаҳои асосиеро меорем, ки ҳангоми истифода бояд ба онҳо диққат диҳед. Коди қолабҳои мураккабтар дар охири боб оварда шудааст.
Қолаби «тасдиқ ё рад»-ро вақте истифода баред, ки мехоҳед қадами дорои таъсири беруна, монанди дархости HTTP, аз нуқтаи тасдиқ гузарад. Намунаи 7.11 аз LLM нақшаи дархост месозонад ва онро дар proposed_request нигоҳ медорад.
Намунаи 7.11. Пешниҳоди дархост бо LLM.
def b_propose(state: BState) -> BState:
prompt = ("Return only JSON with keys url and params for GET to "
"https://httpbin.org/get using q and limit.")
text = LLM.invoke(prompt).content
m = re.search(r"\{.*\}", text, re.S)
data = {"url": "https://httpbin.org/get", "params":
{"q": "fallback", "limit": 1}}
if m:
try:
data = json.loads(m.group(0))
except Exception:
pass
return {"proposed_request": data}
Ин код аз LLM нақшаи сохторёфта дархост мекунад. Промпт танҳо JSON бо калидҳои url ва params барои дархости GET ба https://httpbin.org/get, бо параметрҳои q ва limit, талаб мекунад. Барои ҳолати нокомии таҳлили JSON дархости пешфарз вуҷуд дорад. Код кӯшиш мекунад JSON-ро аз натиҷаи модел ҷудо ва таҳлил кунад ва натиҷаро дар ҳолат, зери калиди proposed_request, нигоҳ дорад.
Command дар LangGraph
Command ҷараёни идоракунӣ — канорҳо — ва навсозии ҳолат — гиреҳҳоро — якҷо мекунад. Он муоширати чанд иҷрокунанда ё чанд агентро осон месозад. Масалан, гиреҳ метавонад ҳам ҳолати худро нав кунад ва ҳам муайян намояд, ки баъд ба кадом гиреҳ гузаштан лозим аст. LangGraph инро тавассути баргардондани объекти Command аз функсияҳои гиреҳҳо имконпазир мекунад.
Дар намунаи 7.12 маҳз ҳамин Command истифода мешавад. Гиреҳ аввал interrupt(...)-ро даъват мекунад, то иҷро таваққуф кунад ва аз инсон тасдиқ ё ислоҳ талаб шавад. Баъд вобаста ба ҷавоби инсон Command бармегардонад: goto гиреҳи навбатиро нишон медиҳад, update ҳолатро нав мекунад.
Намунаи 7.12. Нуқтаи тасдиқи дархост.
def b_gate(state: BState) -> Command[Literal["b_call", "b_propose"]]:
v = interrupt({
"question": "Approve or revise request",
"proposed_request": state["proposed_request"],
"schema": {
"type": "object",
"properties": {
"action": {"enum": ["approve", "revise"]},
"update": {"type": "object"}
},
"required": ["action"]
}
})
action = v.get("action")
if action == "approve":
return Command(goto="b_call", update={"decision": "approved"})
upd = v.get("update") or {}
new_req = state["proposed_request"].copy()
if "url" in upd:
new_req["url"] = upd["url"]
if isinstance(upd.get("params"), dict):
new_req.setdefault("params", {}).update(upd["params"])
return Command(goto="b_gate", update={"proposed_request": new_req,
"decision": "revised"})
Ин қадам иҷрои барномаро боздошта, қарори инсонро интизор мешавад. Дархости пешниҳодшуда барои санҷиш намоиш дода мешавад ва ҷавоб бояд ба сохтори тасдиқ ё ислоҳ мувофиқ бошад. Ҳангоми тасдиқ идоракунӣ ба қадами даъвати дархост мегузарад. Ҳангоми ислоҳ дархости навшуда боз ба ҳамон нуқтаи тасдиқ бармегардад.
Барои идома додан чунин фармон мефиристед:
Command(resume={"action": "approve"})
Ё барои ворид кардани тағйирот:
{"action": "revise", "update": {...}}
Дар ҳолати дуюм таҳрирҳо якҷо мешаванд ва раванд ба нуқтаи тасдиқ бармегардад.
Намунаи 7.13 дархости HTTP-ро танҳо баъди тасдиқ иҷро карда, натиҷаро дар api_result нигоҳ медорад. Рад кардани амал метавонад иҷрои онро пешгирӣ кунад; масир ба ҷавоби инсон вобаста аст.
Намунаи 7.13. Иҷрои дархости тасдиқшудаи HTTP.
def b_call(state: BState) -> BState:
import requests
r = requests.get(state["proposed_request"]["url"],
params=state["proposed_request"]["params"], timeout=10)
return {"api_result": {"status_code": r.status_code, "url": r.url}}
Дархости беруна танҳо баъди тасдиқ иҷро мешавад. Натиҷа дар ҳолат, зери калиди api_result, нигоҳ дошта мешавад.
Қолаби «баррасӣ ва таҳрир»-ро барои ислоҳ ё беҳтар кардани натиҷаи модел тавассути навиштани мустақим ба ҳолат истифода мебаред. Дар намунаи 7.14 LLM хулосаи кӯтоҳ тавлид мекунад ва онро дар summary нигоҳ медорад.
Намунаи 7.14. Тавлиди матни хулоса.
def c_write(state: CState) -> CState:
text = LLM.invoke("Write 2 sentences about why human "
"in the loop matters for agents").content
return {"summary": text}
Промпт аз модел мехоҳад дар бораи аҳаммияти иштироки инсон дар раванди кори агентҳо ду ҷумла нависад. Модел хулосаи ибтидоӣ месозад ва он барои баррасии баъдӣ дар ҳолат нигоҳ дошта мешавад.
Намунаи 7.15 бо interrupt(...) таваққуф мекунад. Дар он схемаи JSON мавҷуд аст, ки майдони edited_text-ро талаб мекунад.
Намунаи 7.15. Таваққуф барои таҳрири инсон.
def c_edit(state: CState) -> CState:
res = interrupt({
"task": "Edit the summary text",
"summary": state["summary"],
"schema": {
"type": "object",
"properties": {"edited_text": {"type": "string"}},
"required": ["edited_text"]
}
})
return {"summary": res["edited_text"]}
Раванд боздошта мешавад ва аз инсон матни таҳриршуда талаб мегардад. Хулосаи тавлидшуда барои санҷиш пешниҳод мешавад. Таҳрир бояд дар майдони матнӣ ворид гардад ва баъд ҷойи арзиши пешинаи summary-ро мегирад.
Барои идома чунин фармон истифода мешавад:
Command(resume={"edited_text": "матни таҳриркардаи шумо"})
Гиреҳ аз нав оғоз мешавад ва ин дафъа ба ҷойи таваққуф таҳрири шуморо бармегардонад. Сипас граф summary-ро бо нусхаи инсон нав мекунад. Яъне шумо аслан барои баррасӣ таваққуф мекунед ва баъд ҳолати графро бо муҳтавои таҳриршуда иваз менамоед.
Қолаби «баррасии даъватҳои абзор» ба ҳамин монанд кор мекунад: ҳар абзор «печонда» мешавад, яъне пеш аз иҷрои абзор агент таваққуф мекунад ва инсон метавонад даъватро қабул кунад, аргументҳояшро таҳрир намояд ё ба ҷойи абзор худаш ҷавоб диҳад.
Коди ин қолаб дар охири боб: «Баррасии даъватҳои абзор: печондани абзор» (қисми «Барои хонандагони пешрафта»).
Таваққуфҳо ва таъсирҳои беруна
Ҳеҷ гоҳ коди дорои таъсири беруна — монанди даъвати API ё навиштан ба пойгоҳи додаҳо — ро дар ҳамон гиреҳе, ки interrupt(...) дорад, ҷойгир накунед. Аввал таваққуф кунед ва баъд таъсирҳоро танҳо пас аз тасдиқи ошкоро иҷро намоед, то ҳангоми идома додан амалҳо такрор нашаванд.
Баъзан лозим мешавад, ки якчанд нафар ҳамзамон ҷавоб диҳанд — масалан, тасдиқи ҳуқуқӣ ва тасдиқи техникӣ. Дар ин ҳолат граф дар якчанд ҷой якбора таваққуф мекунад ва танҳо пас аз ҷамъ шудани ҳамаи ҷавобҳо идома меёбад.
Тафсилот дар охири боб: «Таваққуфҳои ҳамзамон» (қисми «Барои хонандагони пешрафта»).
Тавре дидед, барои илова кардани назорати инсон танҳо як роҳи «дуруст» вуҷуд надорад. Вобаста ба ҳассосияти вазифа ва сатҳи назорате, ки мехоҳед нигоҳ доред, метавонед аз қолабҳои гуногун интихоб кунед. Тавсия медиҳем ин қолабҳоро дар ноутбуки пешниҳодшуда санҷед. Ин кор нишон медиҳад, ки назорати инсон чӣ гуна метавонад аз нуқтаҳои содаи тасдиқ ба ҳамкории ғанитар байни инсон ва агентҳо табдил ёбад.
Равишҳои пешрафтаи агентӣ: агентҳои нозир ва иерархӣ
Агар вазифаҳо аз мисолҳои то ин ҷо дидаатон мураккабтар шаванд ё бинед, ки агент душворӣ мекашад, тақсим кардани вазифа ба зервазифаҳои хурдтар метавонад муфид бошад. Инро мисли сохтани як гурӯҳ тасаввур кунед: ҳар шахс малакаи гуногун меорад ва онҳо якҷоя масъалаи бузургтарро ҳал мекунанд.
Ба ҳамин тарз, метавонед агентҳои хурди мустақилро ворид кунед, ки дар якҷоягӣ системаи бисёрагентиро ташкил медиҳанд. Яке аз сохторҳои маъмул меъмории нозир — supervisor architecture мебошад. Дар он ҳамаи агентҳо ба як нозир гузориш медиҳанд ва нозир муайян мекунад, ки кӣ баъдӣ амал кунад. Навъи пешрафтатар меъмории иерархӣ — hierarchical architecture аст. Дар ин ҷо танҳо як нозир вуҷуд надорад; нозироне ҳастанд, ки нозирони дигарро идора мекунанд. Ин густариш ҷараёнҳои чандиртари идоракуниро имконпазир мекунад.
Ин равиш аз ToT фарқ дорад. ToT барои таҳқиқи чанд роҳи эҳтимолии андешаронӣ дар як вазифа шохабандиро истифода мебарад. Системаи бисёрагентии нозирӣ ё иерархӣ бошад, масирро интихоб мекунад, то муайян созад кадом агенти махсус ё зергуруҳ бояд баъдӣ амал намояд. Ба ибораи дигар, ToT вариантҳоро дар фазои андешаҳо ташкил мекунад, меъмориҳои MAS бошад, корро байни агентҳо тақсим мекунанд.

Расми 7.4. Муқоисаи меъмориҳои агенти ягона, нозирӣ ва иерархӣ.
Бартариҳои асосии MAS модулӣ будан, тахассус ва назорат мебошанд. Бо тақсим кардани вазифаҳо байни агентҳо, таҳия, санҷиш ва нигоҳдории тамоми система осонтар мешавад. Ҳар агентро метавон ҳамчун коршиноси соҳаи муайян тарҳрезӣ кард, ки кори умумии системаро беҳтар мекунад. Илова бар ин, бар хилофи даъвати содаи функсияҳо, сохтори бисёрагентӣ назорати ошкорои тарзи муоширати агентҳоро низ медиҳад.
Сохтани гурӯҳи таҳқиқотии иерархӣ
Барои равшан кардани мафҳуми нозирон ва зерагентҳо, мисоли сохтани гурӯҳи таҳқиқотии иерархиро баррасӣ мекунем. Барои тезонидани татбиқи агенти ReAct аз ҷузъи тайёр ва дубора истифодашавандаи create_react_agent дар LangGraph истифода мебарем.
Сипас ба ҳар агенти иҷрокунанда нақши равшан дода мешавад: баъзеҳо ба ҷустуҷӯи веб машғул мешаванд; дигарон муҳтавои саҳифаҳоро мегиранд; баъзеҳо барои натиҷаҳои сохторёфтатар ба Exa муроҷиат мекунанд; дигарон патентҳоро дар Google меҷӯянд.
Агенти нозир дар боло қарор мегирад. Он мутахассисонро ҳамоҳанг мекунад ва бар асоси вазифаи ҷорӣ, ҳолати гуфтугӯ ва натиҷаҳои охирини агентҳои иҷрокунанда муайян мекунад, ки кӣ баъдӣ амал кунад. Ҳадафи ниҳоӣ сохтани гурӯҳи таҳқиқи бозор аст.

Расми 7.5. Барномаи ниҳоӣ бо меъмории иерархӣ.
Аммо пеш аз расидан ба ин ҳадаф, аз сохтори хурдтар — аввалин гурӯҳи таҳқиқотии дорои нозир — оғоз мекунед. Намуди умумии он дар расми 7.6 оварда шудааст. Пас аз омода шудани он, қадами дуюм илова кардани гурӯҳи нависандагон аст. Ин гурӯҳ натиҷаи гурӯҳи таҳқиқотиро гирифта, дар системаи файлии шумо ҳамчун файли одии матнӣ нигоҳ медорад.

Расми 7.6. Диаграммаи ҷараёни кори гурӯҳи таҳқиқотӣ.
Дар коди ин гурӯҳ се қисми асосӣ ҳаст. Якум, нозир: ин LLM аст, ки таърихи гуфтугӯро мехонад ва танҳо як чизро бармегардонад — номи иҷрокунандаи навбатӣ ё калимаи FINISH, ки маънояш «кор тамом шуд» аст. Дуюм, иҷрокунандагон: ҳар яки онҳо агенти хурди ReAct бо нақш ва абзорҳои худ аст ва пас аз анҷоми кор идоракуниро ба нозир бармегардонад. Сеюм, граф: ҳамаи иҷрокунандагонро ба нозир мепайвандад.
Коди пурра дар охири боб: «Коди гурӯҳи таҳқиқотӣ: нозир ва иҷрокунандагон» (қисми «Барои хонандагони пешрафта»).
Мо аз гурӯҳи таҳқиқотӣ пурсидем: «Агентҳои зеҳни сунъӣ чистанд? Оё дар бораи агентҳои LLM патентҳо вуҷуд доранд?» Граф бо ҳамин дархост оғоз мешавад ва нозир муайян мекунад, ки кадом агентҳо амал кунанд.
Натиҷа аввал тавсифи кӯтоҳи агентҳои зеҳни сунъӣ мебошад. Баъд абзори патентҳо барои санҷиши патентҳои нав истифода мешавад. Қадамҳо чунинанд; барои кӯтоҳӣ паёмҳои воқеии байни агентҳо оварда нашудаанд:
{'supervisor': {'next': 'search'}}
{'supervisor': {'next': 'patent_research'}}
{'supervisor': {'next': '__end__'}}
Гурӯҳи нависандагонро низ метавонед ба ҳамин тарз созед. Ноутбуки ин бахш коди пурраи коршоямро дар бар мегирад. Расми 7.7 намуди умумии гурӯҳи нависандагонро нишон медиҳад.

Расми 7.7. Диаграммаи ҷараёни кори гурӯҳи нависандагон.
Ин равиши модулӣ имкон медиҳад системаҳои бисёрагентии тавонотарро қадам ба қадам созед: аввал иҷрокунандагони махсусро ба ҳам пайвандед, баъд гурӯҳҳои пурраро дар графҳои бузургтар якҷо кунед. Дар амал, метавонед аз гурӯҳи хурди таҳқиқотӣ бо ҷустуҷӯ, гирифтани муҳтавои саҳифаҳо ва ҷустуҷӯи патентҳо оғоз кунед. Сипас онро ба гурӯҳи нависандагон пайваст карда, раванди пурраи кор созед. Ё онро бо дастрасӣ ба додаҳои дохилӣ ва агентҳои сохтани диаграмма ва графикҳо боз ҳам васеъ кунед.
Барои гузаштан аз гурӯҳҳои ҷудогона ба иерархияи воқеӣ, графи дигаре лозим аст, ки ҳамаи қисмҳоро ба ҳам пайвандад. Онро «суперграф»-и худ тасаввур кунед.
Дар суперграф нозири болоӣ ду «иҷрокунанда» дорад — гурӯҳи таҳқиқотӣ ва гурӯҳи нависандагон, — ва ҳар гурӯҳ дар дохили худ нозири худашро дорад.
Код дар охири боб: «Коди суперграфи иерархӣ» (қисми «Барои хонандагони пешрафта»).
Мо аз системаи иерархӣ хостем, ки дар бораи рушди нимноқилҳо гузориши таҳқиқотии таҳлилӣ аз 800 калима навишта шавад. Он бояд аз хулосаи роҳбариятбоби бозёфтҳо оғоз гардад, патентҳои нави мувофиқ бо пайвандҳо ва пайвандҳои тамоми манбаъҳоро дар бар гирад. Дар охир гузориши пурра бо абзори write_document ҳамчун файли .txt бо номи semiconductor_whitepaper.txt дар диск нигоҳ дошта мешавад.
Иҷрои ин сохтор ба пайдарпайии зерини қарорҳои нозир оварда мерасонад. Паёмҳо боз ҳам барои кӯтоҳӣ оварда нашудаанд:
{'supervisor': {'next': 'research_team'}}
{'supervisor': {'next': 'writing_team'}}
{'supervisor': {'next': 'writing_team'}}
{'supervisor': {'next': '__end__'}}
Дар охири иҷро гузориш дар semiconductor_whitepaper.txt бомуваффақият нигоҳ дошта мешавад. Дар амал, ин раванди кор барои ҷамъоварии маводи таҳқиқотӣ, тавлиди матн ва навиштани ҳама чиз ба файл тақрибан ду дақиқа вақт мегирад.
Сохтани тӯдаи агентҳо
Равиши муҳими дигар меъмории тӯда — swarm architecture аст. Дар ин ҷо агентҳо вобаста ба тахассусашон идоракуниро ба таври тағйирёбанда ба якдигар месупоранд. Мафҳуми асосии тӯда супоридани идоракунӣ — handoff аст: агенти ҷорӣ ба агенти дигар мегӯяд «акнун навбати туст» ва кор, якҷо бо контекст, ба он мегузарад. Handoff муайян мекунад, ки кӣ баъдӣ сухан мегӯяд, кӣ амал мекунад ва дар кадом шароит. Бар хилофи иерархияи қатъӣ, тӯдаҳо ба ҳамкории ҳамсатҳ такя мекунанд. Система пайгирӣ мекунад, ки кадом агент охирин бор фаъол буд, то ҳамкориҳои баъдӣ бо агенти муносиб бе танаффус идома ёбанд.
Ин мубодилаи дуҷониба имкон медиҳад кор табиатан байни агентҳо гузарад. Масалан, таҳқиқгар манбаъҳоро ҷамъ карда, ба нависанда месупорад; нависанда бошад, метавонад пеш аз ҷамъбасти ниҳоӣ маълумоти бештар дархост кунад.

Расми 7.8. Ҷараёни супоридани идоракунӣ байни агентҳои тӯда.
Дар мисоли мо тӯда ду агент дорад. Ёвари таҳқиқотӣ манбаъҳоро дар веб меҷӯяд ва вақте онҳо кофӣ шаванд, идоракуниро ба ёвари нависанда месупорад. Нависанда ҷавоби кӯтоҳ бо истинодҳо менависад ва агар манбаъҳо кам ё норавшан бошанд, корро ба таҳқиқгар бармегардонад. Барои ин ба ҳар агент абзори махсуси супоридани идоракунӣ дода мешавад. Мо аз тӯда пурсидем, ки барои стартапҳои хурди финтех дар Швейтсария кадом имкониятҳои иҷозатномагирӣ вуҷуд доранд. Тӯда се банди равшан бо истинодҳо ба саҳифаҳои расмии танзимгар ва манбаъҳои боэътимоди молиявӣ дод ва тамоми кор тақрибан 30 сония вақт гирифт.
Коди тӯда дар охири боб: «Коди тӯда: абзорҳои супоридани идоракунӣ ва create_swarm» (қисми «Барои хонандагони пешрафта»).
Меъмориҳои нозирӣ, иерархӣ ва тӯдагӣ нишон медиҳанд, ки роҳбурдҳои гуногуни ҳамоҳангсозӣ ба системаҳои бисёрагентӣ чӣ гуна таъсир мерасонанд. Нозирон идоракунии мутамарказ медиҳанд; иерархияҳо ташкил кардани гурӯҳҳои гурӯҳҳоро дар миқёси калон имконпазир мекунанд; тӯдаҳо бошанд, ба ҳамкории чандири агентҳои ҳамсатҳ такя мекунанд.
Ҷадвали 7.4. Хулосаи роҳбурдҳои ҳамоҳангсозии чанд агент.
| Меъморӣ | Кай истифода шавад | Бартариҳо | Камбудиҳо |
|---|---|---|---|
| Нозирӣ | Гурӯҳҳои хурди агентҳо бо ҳудуди равшани вазифаҳо | Сохтани сода; назорати қавӣ; пешгирии дармондани тарафайн | Нозир метавонад нуқтаи маҳдудкунандаи суръат ва нуқтаи ягонаи нокомӣ гардад |
| Иерархӣ | Равандҳои бузурги чандгуруҳӣ, ки ба густариши миқёс ниёз доранд | Модулӣ; миқёспазир; монанд ба сохторҳои созмонӣ | Ёфтану ислоҳ кардани хато душвортар аст; тарҳрезии бодиққат мехоҳад |
| Тӯдагӣ | Ҳамкории тағйирёбандаи агентҳои ҳамсатҳ, масалан таҳқиқгар ↔ нависанда | Чандир; рафтуомади табиии кор | Камтар пешгӯишаванда; механизми боэътимоди супоридани идоракунӣ мехоҳад |
Ҳар қолаби ҳамоҳангсозӣ миқёс ва сабки гуногуни ҳамкории агентҳоро дастгирӣ мекунад. Бо якҷо кардани онҳо метавонед равандҳое созед, ки дар тарҳи умумии MAS байни назорат, миқёспазирӣ ва мутобиқшавӣ мувозинат нигоҳ доранд.
Пеш назар: агентҳо чӣ гуна беҳтар мешаванд
Дар ин боб дидем, ки меъмории дуруст агентро тавонотар мекунад. Аммо агенти аллакай сохташуда бо мурури вақт чӣ гуна беҳтар мешавад? Дар ин ҷо чор ғояи асосиро бе формула меорем.
Ҳар иҷро — як траектория. Вақте агент вазифаро иҷро мекунад, пайдарпайии андешаҳо, даъватҳои абзор, натиҷаҳои онҳо ва ҷавоби ниҳоӣ ба вуҷуд меояд. Ин пайдарпайии пурраро траектория (trajectory) меноманд. Дар агенти ReAct-и мо траектория амалан ҳамон таърихи паёмҳост. Агар траекторияҳоро нигоҳ доред ва ба онҳо баҳо диҳед, мебинед, ки агент дар куҷо хато мекунад: абзори нодурустро интихоб мекунад, беҳуда давр мезанад ё ҷавобро барвақт медиҳад. Аксар вақт барои ислоҳи ин хатоҳо вазнҳои модел — рақамҳое, ки модел ҳангоми омӯзиш ёд гирифтааст — тағйир дода намешаванд. Одатан кифоя аст, ки промпт, тавсифи абзорҳо ё худи абзорҳоро беҳтар кунед.
Муқоиса кардан аз баҳо додан осонтар аст. Ба як ҷавоб баҳои мутлақ додан — масалан, «7 аз 10» — душвор ва ноустувор аст: як довар имрӯз 7 медиҳад, фардо 8. Аммо агар ба як вазифа якчанд ҷавоб гирем ва онҳоро бо ҳам муқоиса кунем — «кадомаш беҳтар аст?» — натиҷа осонтар ва боэътимодтар мешавад. Ғояи LLM ҳамчун довар (LLM-as-a-judge) ба ҳамин такя мекунад: LLM-и дигар ҷавобҳоро мехонад ва ба онҳо баҳо медиҳад. Ин ғояро мо дар ToT дидем: модели қавитар аз се варианти пешниҳодшуда беҳтаринашро интихоб кард.
Санҷишҳоро омехта кунед. Баъзе чизҳоро код дақиқ месанҷад: оё ҷавоб JSON-и дуруст аст, оё рақам дуруст ҳисоб шудааст, оё файл сохта шуд. Сифати матн — равшанӣ, пуррагӣ, оҳанг — бошад, бо код душвор санҷида мешавад; дар ин ҷо довари LLM кумак мекунад. Беҳтар аст ҳарду якҷоя истифода шаванд: код дурустиро месанҷад, довари LLM сифатро.
«Дарозтар андешидан» кумак мекунад. Ба ҷойи он ки ба ҷавоби аввал бовар кунем, метавонем аз модел якчанд ҷавоб гирем ва беҳтаринашро интихоб кунем ё як ҷавобро қадам ба қадам такмил диҳем. Ин вақт ва ҳисоббарории бештар талаб мекунад, аммо ҳатто модели хурдро боэътимодтар мегардонад — ҳамон ғояе, ки дар CoT ва ToT дидем.
Ин усулҳо, аз ҷумла омӯзиши агентҳо бо тақвият (reinforcement learning), дар боби 13 муфассал шарҳ дода мешаванд. Он боб барои хонандагони пешрафта аст ва дар хониши аввал метавонед онро гузаронед.
Хулоса
Нуктаи асосии ин боб он аст, ки қобилияти агенти зеҳни сунъӣ танҳо аз LLM-и истифодашаванда намеояд; меъмории он низ нақши муҳим дорад. Аз ҳамин нигоҳ, баррасӣ кардед, ки қолабҳои меъморӣ чӣ гуна қобилият ва эътимоднокии агентҳоро шакл медиҳанд. Бо гузаштан аз иҷрои якмарҳилаӣ дидед, ки равишҳои CoT, ToT ва ReAct ба раванди андешидани агент сохтор медиҳанд ва натиҷаҳоро санҷидатару равшантар мекунанд.
Ҳамчунин дидед, ки иштироки инсон дар раванд чӣ гуна агентҳоро амнтар месозад. Таваққуфҳо, нуқтаҳои тасдиқ ва марҳилаҳои баррасӣ нишон доданд, ки чораҳои назоратӣ агентҳоро дар муҳити воқеӣ, ки хатоҳо паёмадҳои воқеӣ доранд, боэътимодтар мекунанд. Мувозинат байни мустақилият ва назорат яке аз мавзуъҳои муайянкунандаи тарҳрезии муосири агентҳост.
Шумо инчунин омӯхтед, ки ин усулҳои андешаронӣ чӣ гуна ба системаҳои бисёрагентӣ густариш меёбанд. Меъмориҳои нозирӣ ва иерархӣ вазифаҳоро байни иҷрокунандагони махсус тақсим мекунанд; сохторҳои тӯдагӣ бошанд, супоридани чандири идоракуниро байни агентҳои ҳамсатҳ имконпазир месозанд. Ин равишҳо дар якҷоягӣ нишон медиҳанд, ки зиракии агент танҳо ба модели қавитар вобаста нест. Муҳим аст, ки моделҳо чӣ гуна дар системаҳое ҳамоҳанг карда мешаванд, ки метавонанд нақша кашанд, амал кунанд ва натиҷаҳои худро бозбинӣ намоянд.
Чиро бояд дар ёд дошт
- CoT: аз модел хоҳиш кунед, ки қадам ба қадам андеша кунад. Ҷавоб боэътимодтар мешавад ва дида метавонед, ки он чӣ гуна ҳосил шуд.
- ToT: модел якчанд вариант пешниҳод мекунад, довар (одатан модели қавитар) беҳтаринашро интихоб мекунад ва кор танҳо бо ҳамон вариант идома меёбад.
- ReAct: давраи «андеша → амал (абзор) → мушоҳида», ки то ҷавоби ниҳоӣ такрор мешавад. Ҳар қадам дар таърихи паёмҳо сабт мешавад ва ҳамин сабт ба агент имкони бозбинӣ медиҳад.
- Иштироки инсон (HITL): пеш аз амалҳои хатарнок агент бо
interruptтаваққуф мекунад ва инсон тасдиқ, таҳрир ё рад мекунад. Амалҳои беруна (API, навиштан ба пойгоҳи додаҳо) танҳо пас аз тасдиқ иҷро шаванд. - Системаҳои бисёрагентӣ: нозир корро мутамарказ тақсим мекунад, иерархия «гурӯҳи гурӯҳҳо» месозад, тӯда ба агентҳои ҳамсатҳ имкон медиҳад, ки идоракуниро ба якдигар супоранд. Аз сохтори содатарин оғоз кунед.
Барои хонандагони пешрафта
Ин қисм барои хониши аввал ҳатмӣ нест. Дар он тафсилоти техникӣ, формулаҳо ва коди пурра оварда шудаанд. Агар китобро бори аввал мехонед, метавонед онро гузаронед ва ба боби навбатӣ гузаред.
Коди ToT: тавлид, интихоб ва граф
Аввал «дарахт»-и имкониятҳоро месозед. Гиреҳи propose_options дар намунаи 7.16 қадами аввал аст. Он ба ҷойи тавлиди як натиҷаи хаттӣ, модели хурдтари забониро истифода мебарад, то се равиши фарқкунанда барои навиштаи блог пешниҳод кунад. Дар ин мисол шумораи шохаҳо қасдан ба се маҳдуд шудааст, то санҷидани раванди кор осон ва иҷрои он камхарҷ бошад. Ин вариантҳо шохаҳои номзад ё «андешаҳо» ба маънои ToT мебошанд, ки пеш аз интихоби роҳ арзёбӣ мешаванд.
Ин бо ошкор кардани раванди дохилии андешаронии модел як чиз нест. Дар ин ҷо «андеша» натиҷаи номзадест, ки ҳамчун қисми раванди кор ошкоро тавлид шудааст. Принсипи асосии ToT ҳамин аст: гузаштан аз як занҷираи ягона ба таҳқиқи чанд роҳ.
Намунаи 7.16. Тавлиди андешаҳо.
# BlogState, OptionsPayload ва gen_llm дар коди пурраи анбори китоб муайян шудаанд
def propose_options(state: BlogState) -> BlogState:
"""Generator (small): propose 3 creative approaches (ToT-style branching)."""
proposer = gen_llm.with_structured_output(OptionsPayload)
prompt = (
"Generate exactly 3 distinct approaches for a developer-focused blog on:\n"
f"{state['topic']}\n\nFor each option, provide: title, audience, angle, "
"a 5-bullet outline, and a concise rationale."
)
payload: OptionsPayload = proposer.invoke(prompt)
state["options_json"] = payload.model_dump_json()
state["messages"].append(AIMessage(content=state["options_json"]))
return state
Промпт барои блоги ба таҳиягарон равонашуда маҳз се равиши фарқкунанда талаб мекунад. Барои ҳар вариант сарлавҳа, аудитория, кунҷи баррасӣ, нақшаи панҷбандӣ ва асосноккунии кӯтоҳ пешниҳод мешаванд.
Сипас метавонед марҳилаи бозбинӣ ва интихобро ворид кунед — намунаи 7.17 — ки шохаҳои номуносиби дарахтро мебурад. Дар ин ҷо LLM-и қавитар се варианти пешниҳодшударо арзёбӣ мекунад. Ба модел метавон дастур дод, ки ҳар вариантро аз рӯйи меъёрҳое монанди равшанӣ ва навоварӣ танқидӣ баррасӣ карда, беҳтаринашро интихоб кунад.
Барои ин марҳилаи буридани шохаҳо модели қавитарро истифода мебарем, зеро арзёб қарори муҳими масирро қабул мекунад: агар шохаи нодуруст интихоб шавад, раванди кор метавонад роҳи умедбахштаринро барвақт аз даст диҳад. Ин аз арзёбии нисбӣ дар миқёси калон фарқ мекунад. Дар он ҷо довари арзонтар ҳам метавонад кофӣ бошад, агар танҳо лозим бошад номзадҳои бисёрро дар дохили як гурӯҳ пайваста дараҷабандӣ кунад.
Ин қадам дар ToT муҳим аст: агент танҳо аз паси фикри аввал намеравад, балки вариантҳоро танқидӣ арзёбӣ карда, роҳи умедбахштаринро интихоб мекунад.
Намунаи 7.17. Гиреҳи буридани шохаҳо.
# ChoicePayload ва judge_llm низ дар коди пурраи анбор муайян шудаанд
def reflect_and_select(state: BlogState) -> BlogState:
"""Judge (stronger): critique options and select best one."""
chooser = judge_llm.with_structured_output(ChoicePayload)
eval_prompt = (
"Evaluate the 3 approaches for clarity, originality, developer relevance, "
"and feasibility under time constraints. Pick ONE by index 0..2 and justify."
f"Options JSON:\n{state['options_json']}"
)
choice: ChoicePayload = chooser.invoke(eval_prompt)
opts = json.loads(state["options_json"])["options"]
idx = max(0, min(choice.choice_index, len(opts)-1))
choice.choice_index = idx
state["choice_json"] = choice.model_dump_json()
state["messages"].append(AIMessage(content=state["choice_json"]))
return state
Промпти арзёбӣ се равишро аз рӯйи равшанӣ, навоварӣ, аҳаммият барои таҳиягарон ва иҷрошавӣ дар шароити маҳдудияти вақт месанҷад. Сипас як вариант бо индекси аз 0 то 2 интихоб ва асоснок мешавад.
Мисли пештара, барои кӯтоҳӣ коди гиреҳҳои дигарро намеорем. Татбиқи пурра дар анбори китоби аслӣ дастрас аст. Дар ин ҷо мехоҳем нишон диҳем, ки ҳамаи қисмҳо чӣ гуна дар LangGraph пайваст мешаванд ва истифодаи кадом навъҳои LLM-ро пешниҳод мекунем.
Дар LangGraph гиреҳҳо мантиқи агентҳоро ифода мекунанд ва канорҳо гузаришҳои идоракуниро нишон медиҳанд. Бо пайвастани чанд гиреҳ шумо амалан дар дохили як граф системаи бисёрагентӣ месозед. Ҳолати муштарак хотира ва контекстест, ки ҳамаи гиреҳҳо бо он кор мекунанд. Намунаи 7.18 нишон медиҳад, ки чунин пайвасткунӣ барои ToT дар амал чӣ гуна аст.
Намунаи 7.18. Сохтани граф барои ToT.
# research_with_tools ва draft_outline_and_intro — гиреҳҳое, ки дар ин ҷо оварда нашудаанд
graph = StateGraph(BlogState)
graph.add_node("propose", propose_options)
graph.add_node("reflect", reflect_and_select)
graph.add_node("research", research_with_tools)
graph.add_node("draft", draft_outline_and_intro)
graph.add_edge(START, "propose")
graph.add_edge("propose", "reflect")
graph.add_edge("reflect", "research")
graph.add_edge("research", "draft")
graph.add_edge("draft", END)
checkpointer = MemorySaver()
app = graph.compile(checkpointer=checkpointer)
Нақшҳои гиреҳҳо:
propose: модели хурди эҷодкор барои тавлиди вариантҳо;reflect: модели қавитар барои доварӣ ва бозбинӣ;research: таҳқиқгаре, ки абзорҳоро истифода мебарад;draft: модели хурд барои навиштан.
Ҳангоми иҷрои код вариантҳои гуногуни мавзуъро бо пайвандҳои манбаъҳо мебинед. Барои беҳтар кардани натиҷаҳо метавонед иштироки инсонро низ ворид кунед, то амалҳо баррасӣ ва тасдиқ шаванд. Ба бахши «Тарҳрезии равандҳои дорои иштироки инсон» нигаред.
ReAct бо забони математика
Аз ҷиҳати математикӣ, инро метавон ҳамчун табдил додани контекст ба амале дар фазои васеъшудаи амалҳо тасаввур кард. Як қисми ин фазо амалҳои вобаста ба вазифаро дар бар мегирад, ки ба муҳит таъсир мерасонанд; қисми дигар аз баёнҳои забонии андешаронӣ ё андешаҳо иборат аст. Ба ибораи дигар, ҳар қадам метавонад амали беруна, баёни андешаронӣ ё ҳар дуро тавлид кунад.
Ин баёнҳо дубора ба ҳолати агент ворид мешаванд ва контекстро тағйир медиҳанд.
[ c_{t+1} = (c_t,\ \hat{a}_t), \qquad \hat{a}_t \in \mathcal{L} ]
Ин ҷо (c_t) — контексти агент дар қадами (t), (\hat{a}_t) — андешае, ки ба забон баён шудааст, ва (\mathcal{L}) — фазои баёнҳои забонӣ. Андеша ба муҳит таъсир намерасонад; он танҳо контекстро барои қадами навбатӣ ғанӣ мекунад.
Илова бар ин, агент аз сиёсати интихоби амал пайравӣ мекунад.
[ a_t \sim \pi(a_t \mid c_t), \qquad a_t \in \hat{\mathcal{A}} = \mathcal{A} \cup \mathcal{L}, \qquad c_t = (o_1, a_1, \dots, o_{t-1}, a_{t-1}, o_t) ]
Ин ҷо (\pi) — сиёсати агент, (\mathcal{A}) — амалҳое, ки ба муҳит таъсир мерасонанд (масалан, даъвати абзор), ва (o_t) — мушоҳидаи қадами (t).
Баррасии даъватҳои абзор: печондани абзор
Қолаби «баррасии даъватҳои абзор»-ро вақте истифода мебаред, ки абзор метавонад ба системаҳои беруна таъсир расонад ва аргументҳояш бояд санҷида шаванд. Намунаи 7.19 ҳар абзорро бо interrupt([...]) мепечонад. Маълумоти таваққуф аз инсон қабул кардан, таҳрир кардан ё ҷавоб доданро талаб мекунад.
Намунаи 7.19. Печондани абзор бо нуқтаи баррасӣ.
def add_hitl(tool_obj: BaseTool | Any) -> BaseTool:
if not isinstance(tool_obj, BaseTool):
tool_obj = tool(tool_obj)
@tool(tool_obj.name,description=tool_obj.description,
args_schema=tool_obj.args_schema)
def wrapped(**tool_input):
request = [{
"action_request": {"action": tool_obj.name, "args": tool_input},
"config": {"allow_accept": True, "allow_edit":
True, "allow_respond": True},
"description": "Review this tool call"
}]
response = interrupt(request)[0]
if response["type"] == "accept":
return tool_obj.invoke(tool_input)
if response["type"] == "edit":
new_args = response["args"]["args"]
return tool_obj.invoke(new_args)
if response["type"] == "response":
return response["args"]
raise ValueError("Unsupported interrupt response type")
return wrapped
Ин код даъвати аслии абзорро ба дархости баррасӣ мепечонад. Номи абзор ва аргументҳо барои санҷиш пешниҳод мешаванд. Инсон метавонад даъватро қабул кунад, аргументҳоро таҳрир намояд ё ба ҷойи абзор худаш ҷавоб диҳад. Иҷро то гирифтани қарор таваққуф мекунад: ҳангоми қабул даъвати аслӣ иҷро мешавад; ҳангоми таҳрир абзор бо аргументҳои нав иҷро мегардад; ҳангоми ҷавоби мустақими инсон натиҷаи абзор бо ҷавоби инсон иваз мешавад.
Барои идома яке аз ин ҷавобҳоро истифода бурдан мумкин аст:
{"type": "accept"}
{"type": "edit", "args": {"args": {"query": "weather in NY"}}}
{"type": "response", "args": "Skip the tool right now"}
Ҷавоби сеюм маънои «Ҳоло ин абзорро иҷро накун»-ро дорад. Печонанда ё даъвати аслиро иҷро мекунад, ё онро бо аргументҳои таҳриршуда ба кор меандозад, ё бе даъвати абзор паёми инсонро бармегардонад. Бо ин роҳ даъватҳои абзорро пеш аз таъсир расонданашон ба ҷаҳони беруна месанҷед ва тасдиқ мекунед.
Таваққуфҳои ҳамзамон
Баъзан лозим мешавад чанд ҷавобро ҳамзамон ҷамъ оваред ва танҳо пас аз омода шудани ҳамаи онҳо графро идома диҳед. Ин ҳолат вақте муфид аст, ки қарорҳои мустақили инсонӣ метавонанд ҳамзамон қабул шаванд: масалан, баррасии ду бахши матни тавлидшуда, гирифтани тасдиқҳои ҷудогонаи ҳуқуқӣ ва техникӣ ё санҷиши қисмҳои гуногуни натиҷаи агент аз тарафи чанд таҳлилгар. Намунаи 7.20 тарзи татбиқи ин ҳолатро нишон медиҳад.
Намунаи 7.20. Таваққуфҳои ҳамзамон барои иштироки инсон.
class DState(TypedDict, total=False):
text_1: str
text_2: str
def d_h1(state: DState):
v = interrupt({"text_to_revise": state["text_1"]})
return {"text_1": v}
def d_h2(state: DState):
v = interrupt({"text_to_revise": state["text_2"]})
return {"text_2": v}
def build_graph_D():
g = StateGraph(DState)
g.add_node("d_h1", d_h1)
g.add_node("d_h2", d_h2)
g.add_edge(START, "d_h1")
g.add_edge(START, "d_h2")
g.add_edge("d_h1", END)
g.add_edge("d_h2", END)
return g.compile(checkpointer=CHECKPOINTER) # CHECKPOINTER дар коди пурра муайян шудааст
Гиреҳи аввал барои таҳрири text_1 таваққуф мекунад ва баъд ҳолатро бо матни навшуда пур мекунад. Гиреҳи дуюм ҳамин корро барои text_2 анҷом медиҳад. Ҳар ду гиреҳ ба граф илова мешаванд ва мустақиман аз START шоха мегиранд. Граф бо нигоҳдорандаи нуқтаҳои ҳолат — checkpointer — компилятсия мешавад, то ҳар ду таваққуфро идома додан мумкин бошад.
Дар ин ҷо ҳар ду гиреҳ аз START оғоз шуда, interrupt(...)-ро даъват мекунанд. Дар намунаи 7.21 луғате сохта мешавад, ки ҳар interrupt_id-ро ба арзиши мувофиқ мепайвандад. Баъд иҷро тавассути Command(resume=that_map) идома меёбад.
Намунаи 7.21. Идома додани чанд таваққуф.
# jdump — ёрирасон барои чопи JSON (дар коди пурраи анбор)
def wait_for_interrupt_and_prompt(app, cfg):
state = app.get_state(cfg)
ints = getattr(state, "interrupts", []) or []
if not ints:
print("No interrupts pending")
return None
if len(ints) > 1:
print("\nMultiple interrupts pending:")
for i, it in enumerate(ints, 1):
print(f"[{i}] id={it.interrupt_id} value={jdump(it.value)}")
print("Enter values per interrupt. Leave blank to echo original.")
resume_map = {}
for it in ints:
val = input(f"Value for {it.interrupt_id}: ").strip()
if val:
try:
resume_map[it.interrupt_id] = json.loads(val)
except Exception:
resume_map[it.interrupt_id] = val
else:
resume_map[it.interrupt_id] = it.value
return Command(resume=resume_map)
Ин функсия таваққуфҳои мунтазирро аз ҳолат мегирад ва чанд таваққуфро якбора коркард мекунад. Барои ҳар таваққуф шиноса ва арзиши ҷорӣ чоп мешавад, сипас аз инсон арзиши нав талаб мегардад. Барои таҳрирҳои сохторёфта кӯшиш мешавад ҷавоб ҳамчун JSON таҳлил гардад. Агар ҷавоб ворид нашавад, арзиши аслӣ нигоҳ дошта мешавад. Дар охир иҷро бо харитаи пурраи арзишҳои навшуда идома меёбад.
Коди гурӯҳи таҳқиқотӣ: нозир ва иҷрокунандагон
Ҷузъиёти сохтани абзорҳоро намеорем, зеро онро дар боби 6, намунаи 6.2, омӯхтед. Аввал ба функсияи ёрирасон барои сохтани нозир ниёз доред. Ин функсия ҳамчун масирдиҳанда амал мекунад — ба бахши «Мувофиқати FSM/HSM ба чаҳорчӯбаҳои агентӣ» дар қисми «Барои хонандагони пешрафта»-и боби 6 нигаред — ва муайян мекунад, ки кадом иҷрокунанда қадами баъдиро иҷро кунад ё раванд бояд анҷом ёбад.
Намунаи 7.22. Функсияи ёрирасон барои нозир.
class State(MessagesState):
next: str
def make_supervisor_node(llm: BaseChatModel, members: list[str]) -> str:
options = ["FINISH"] + members
system_prompt = (
"You are a supervisor tasked with managing a conversation between the"
f" following workers: {members}. Given the following user request,"
" respond with the worker to act next. Each worker will perform a"
" task and respond with their results and status. When finished,"
" respond with FINISH."
)
class Router(TypedDict):
"""Worker to route to next. If no workers needed, route to FINISH."""
next: Literal[*options]
def supervisor_node(state: State) -> Command[Literal[*members, "__end__"]]:
"""An LLM-based router."""
messages = [
{"role": "system", "content": system_prompt},
] + state["messages"]
response = llm.with_structured_output(Router).invoke(messages)
goto = response["next"]
if goto == "FINISH":
goto = END
return Command(goto=goto, update={"next": goto})
return supervisor_node
Ин код ҳолатеро месозад, ки иҷрокунандаи баъдиро нигоҳ медорад ва функсияи ёрирасонеро муайян мекунад, ки барои ҳар маҷмӯи агентҳо гиреҳи нозир месозад. Промпти системавӣ ба LLM нақши нозирро мефаҳмонад: дар асоси дархости корбар иҷрокунандаи баъдиро интихоб кунад; ҳар иҷрокунанда натиҷа ва ҳолати кори худро бармегардонад; пас аз анҷом нозир FINISH медиҳад. Натиҷаи сохторёфта интихоби боэътимоди иҷрокунандаи баъдиро таъмин мекунад ва FINISH равандро дуруст анҷом медиҳад.
Масирдиҳанда дақиқан чӣ бармегардонад? Синфи Router шакли ҷавоби LLM-ро муайян мекунад: ҷавоб луғатест бо як калид — next — ва арзиши он танҳо яке аз номҳои иҷрокунандагон ё FINISH буда метавонад. Навишти Literal[*options] маҳз ҳаминро ифода мекунад (ин навишт Python 3.11 ё навтарро талаб мекунад). Гиреҳи нозир ин номро гирифта, объекти Command бармегардонад: goto мегӯяд, ки идоракунӣ ба кадом гиреҳ гузарад (ё ба END, агар ҷавоб FINISH бошад), update бошад, номи интихобшударо дар майдони next-и ҳолат нигоҳ медорад. Навъи Command[Literal[...]] танҳо ба LangGraph хабар медиҳад, ки ин гиреҳ ба кадом гиреҳҳо гузашта метавонад.
Баъд ба функсияи ёрирасон барои сохтани гиреҳҳои иҷрокунанда ниёз доред. Татбиқи он дар намунаи 7.23 нишон дода шудааст. Ин кор сохторро кӯтоҳ ва дубора истифодашаванда мекунад, то ҳангоми илова кардани агенти нав коди якхеларо такрор накунед.
Намунаи 7.23. Функсияи ёрирасон барои сохтани гиреҳ.
def make_react_worker_node(
*,
llm: ChatOpenAI,
name: str,
tools: list,
prompt: str | None = None,
goto: str = "supervisor",
):
agent = create_react_agent(llm, tools=tools, prompt=prompt)
def node(state: State) -> Command[Literal["supervisor"]]:
result: Dict[str, Any] = agent.invoke(state)
msgs: Sequence[BaseMessage] = result.get("messages", [])
content = getattr(msgs[-1], "content", "") if msgs else ""
return Command(
update={"messages": [HumanMessage(content=content, name=name)]},
goto=goto,
)
return node
Дар ин ҷо агенти махсуси ReAct бо абзорҳо ва промпти нақшаш сохта мешавад. Агент бо ҳолати ҷорӣ даъват мегардад. Сипас натиҷаи охиринаш ба ҳолат ворид шуда, идоракунӣ ба нозир бармегардад.
Пас аз омода шудани ин функсияҳо метавонед агентҳоро муайян кунед. Ба ҳар агент нақши мушаххас додан муфид аст. Азбаски ҳадаф сохтани гурӯҳи таҳқиқи бозор аст, нақшҳо бояд хеле дақиқ бошанд.
Намунаи 7.24. Таъйин кардани нақшҳо ба агентҳои таҳқиқотӣ.
SEARCH_PROMPT = """Role: Web researcher. Use the search tool and return a
concise research note with sources. No follow-up questions."""
SCRAPER_PROMPT = """Role: Web scraper. Use the scraping tool to fetch details
from given URLs and summarize key findings. No follow-up questions."""
EXA_PROMPT = """Role: Research assistant. You can search for all recent info
on Exa Search. Your response should clearly articulate the key points you found."""
PATENT_PROMPT = """Role: Market researcher with 20 years of experience.
You are very knowledgeable in patent research and in finding up-to-date info
about patents using the Google Patents API."""
Маънои промптҳои нақш:
- Таҳқиқгари веб: абзори ҷустуҷӯро истифода барад ва ёддошти кӯтоҳи таҳқиқотӣ бо манбаъҳо диҳад; саволҳои иловагӣ надиҳад.
- Ҷамъоварандаи муҳтавои веб: ҷузъиётро аз URL-ҳои додашуда гирад ва бозёфтҳои асосиро хулоса кунад; саволҳои иловагӣ надиҳад.
- Ёвари таҳқиқотӣ: маълумоти навро дар Exa Search ҷустуҷӯ карда, нуктаҳои асосиро равшан баён намояд.
- Таҳқиқгари патентҳо: ҳамчун таҳқиқгари бозор бо таҷрибаи 20-сола ва дониши амиқи таҳқиқи патентҳо амал карда, маълумоти навро тавассути Google Patents API пайдо кунад.
Акнун агентҳоро месозем. Бо функсияи ёрирасони намунаи 7.23 метавонед ҳар иҷрокунандаро сохта, ба он нақш ва абзори мувофиқ диҳед.
Намунаи 7.25. Сохтани агентҳои таҳқиқотӣ.
# tavily_tool, scrape_webpages, exa_search_tool ва patent_search — абзорҳо аз коди пурра (сохтани абзорҳо дар боби 6)
specs = [
dict(
name="search",
tools=[tavily_tool],
prompt=SEARCH_PROMPT,
),
dict(
name="web_scraper",
tools=[scrape_webpages],
prompt=SCRAPER_PROMPT,
),
dict(
name="exa_search",
tools=[exa_search_tool],
prompt=EXA_PROMPT,
),
dict(
name="patent_research",
tools=[patent_search],
prompt=PATENT_PROMPT,
),
]
nodes = {s["name"]: make_react_worker_node(llm=llm, **s) for s in specs}
search_node = nodes["search"]
web_scraper_node = nodes["web_scraper"]
exa_search_node = nodes["exa_search"]
patent_research_node = nodes["patent_research"]
Ҳар иҷрокунанда бо абзорҳо ва нақшаш муайян мешавад. Сипас функсияи ёрирасон ҳамаи онҳоро бе такрори коди қолабӣ месозад.
Барои пурра кардани меъмории нозирӣ, нозире месозем, ки кори ҳамаи чор агенти таҳқиқотиро ҳамоҳанг карда тавонад. Ин имкон медиҳад раванди кор дармонда намонад ва ҳар агент дар вақти муносиб саҳм гузорад.
Намунаи 7.26. Сохтани гиреҳи нозири таҳқиқот.
research_supervisor_node = make_supervisor_node(
llm, ["search", "web_scraper", "exa_search", "patent_research"]
)
Ин нозир кори ҳамаи чор агенти таҳқиқотиро ҳамоҳанг мекунад.
Ниҳоят, графи воқеиро месозем: гиреҳҳоро сабт мекунем ва канорҳоеро мепайвандем, ки ҷараёни идоракуниро муайян мекунанд. Дар натиҷа графи пурра коркунандаи гурӯҳи таҳқиқотӣ ба вуҷуд меояд.
Намунаи 7.27. Сохтани графи гурӯҳи таҳқиқотӣ.
research_builder = StateGraph(State)
research_builder.add_node("supervisor", research_supervisor_node)
research_builder.add_node("search", search_node)
research_builder.add_node("web_scraper", web_scraper_node)
research_builder.add_node("exa_search", exa_search_node)
research_builder.add_node("patent_research", patent_research_node)
research_builder.add_edge(START, "supervisor")
research_builder.add_edge("search", "supervisor")
research_builder.add_edge("web_scraper", "supervisor")
research_builder.add_edge("exa_search", "supervisor")
research_builder.add_edge("patent_research", "supervisor")
research_graph = research_builder.compile()
Дар ин код гиреҳҳои нозир ва иҷрокунандагон сабт мешаванд. Канорҳо тавре пайваст мешаванд, ки ҳамаи иҷрокунандагон идоракуниро ба нозир баргардонанд. Сипас граф ба раванди иҷрошаванда компилятсия мешавад.
Барои санҷидани сохтор метавонед коди намунаи 7.28-ро иҷро кунед.
Намунаи 7.28. Оғоз кардани гурӯҳи таҳқиқотӣ бо промпт.
for s in research_graph.stream(
{"messages": [("user", """What are AI agents? Are there any patents out there
about LLM agents?""")]},
{"recursion_limit": 100},
):
print(s)
print("---")
Коди суперграфи иерархӣ
Намунаи 7.29. Сохтани меъмории иерархӣ.
# teams_supervisor_node, call_research_team ва call_paper_writing_team дар коди пурраи анбор муайян шудаанд
super_builder = StateGraph(State)
super_builder.add_node("supervisor", teams_supervisor_node)
super_builder.add_node("research_team", call_research_team)
super_builder.add_node("writing_team", call_paper_writing_team)
super_builder.add_edge(START, "supervisor")
super_graph = super_builder.compile()
Пас аз омода шудани он, метавонед ба системаи бисёрагентии иерархӣ промпт диҳед.
Намунаи 7.30. Иҷрои MAS-и иерархӣ.
TARGET_FILE = "semiconductor_whitepaper.txt"
TASK_MSG = f"""
Write an 800-word research report whitepaper on semiconductor development.
Start with an executive summary of your findings.
Search for relevant recent patents and include links to them.
IMPORTANT: Provide links to all your sources.
Finally, save the full report to disk as a .txt file using the write_document tool.
Use file_name="{TARGET_FILE}".
"""
for step in super_graph.stream(
{
"messages": [
("user", TASK_MSG.strip())
],
},
{"recursion_limit": 150},
):
print(step)
print("---")
Коди тӯда: абзорҳои супоридани идоракунӣ ва create_swarm
LangGraph китобхонаи матнбозеро пешниҳод мекунад, ки сохтани тӯдаи агентҳоро метезонад. Ба таври пешфарз агентҳои тӯда абзорҳои супоридани идоракуниро истифода мебаранд, ки бо функсияи тайёри create_handoff_tool сохта шудаанд. Ҳамчунин метавонед абзорҳои махсуси худро созед, то ба раванди коратон беҳтар мувофиқ бошанд. Масалан:
- Ном ё тавсифи абзорро тағйир диҳед, то мақсади супоридани идоракунӣ равшантар бошад.
- Ба даъвати абзор аргументҳое илова кунед, ки LLM онҳоро пур мекунад, масалан тавсифи вазифаи мушаххас барои агенти баъдӣ.
- Муайян кунед, ки ба агенти баъдӣ кадом додаҳо гузаранд. Ба таври пешфарз
create_handoff_toolтамоми таърихи паёмҳо ва паёми абзореро, ки супоридани идоракуниро тасдиқ мекунад, мефиристад. Аммо метавонед танҳо қисми интихобшудаи контекстро фиристед.
Пеш аз пайвастани тӯдаи пурра, аввал абзорҳои ёрирасони супоридани идоракуниро муайян мекунед. Ин абзорҳо ҳамчун сигнал амал мекунанд, ки ба як агент имкон медиҳанд идоракуниро ба дигаре диҳад. Дар мисоли баъдӣ ёвари таҳқиқотӣ пас аз ҷамъоварии манбаъҳои кофӣ метавонад корро ба нависанда супорад. Агар далелҳои бештар лозим шаванд, нависанда метавонад идоракуниро баргардонад.
Намунаи 7.31. Сохтани абзорҳои супоридани идоракунӣ.
# create_handoff_tool ва create_swarm аз китобхонаи langgraph_swarm гирифта мешаванд
to_writer = create_handoff_tool(
agent_name="writer_assistant",
description="""Transfer to the writing assistant to synthesize sources into
an answer.""",
)
to_research = create_handoff_tool(
agent_name="research_assistant",
description="""Return to the research assistant to fetch or scrape more
sources.""",
)
Абзори аввал ба ёвари таҳқиқотӣ имкон медиҳад идоракуниро ба ёвари нависанда диҳад, то манбаъҳоро ба ҷавоби ҷамъбастӣ табдил диҳад. Абзори дуюм роҳи баръаксро муайян мекунад: баргаштан ба ёвари таҳқиқотӣ барои гирифтани манбаъҳои бештар ё муҳтавои саҳифаҳо.
Пас аз омода шудани абзорҳои ёрирасон, метавонед агентҳоро муайян кунед. Беҳтар аст нақшҳо аз ҳам равшан ҷудо бошанд: як агент танҳо ба таҳқиқ ва дигаре ба навиштан машғул шавад. Абзорҳои супоридани идоракунӣ имкон медиҳанд, ки ҳангоми ниёз ба манбаъҳои бештар ё фаро расидани вақти ҷамъбаст кор байни онҳо рафтуомад кунад.
Намунаи 7.32. Таъйин кардани нақшҳои ёварони таҳқиқотӣ ва нависанда.
research_assistant = create_react_agent(
model=llm,
tools=[tavily_tool, scrape_webpages, to_writer],
prompt=(
"""You are a research assistant. Search the web with Tavily.
When you have 3 to 5 solid sources, scrape key pages for details,
then hand off to the writer assistant."""
),
name="research_assistant",
)
writer_assistant = create_react_agent(
model=llm,
tools=[to_research],
prompt=(
"""You are a writing assistant. Read the provided documents and messages.
Synthesize a concise answer with citations by site name in brackets. If
sources are thin or unclear, hand back to research with a short request."""
),
name="writer_assistant",
)
Промпти ёвари таҳқиқотӣ чунин маъно дорад: «Шумо ёвари таҳқиқотӣ ҳастед. Бо Tavily дар веб ҷустуҷӯ кунед. Вақте 3 то 5 манбаи боэътимод ҷамъ шуд, муҳтавои саҳифаҳои асосиро барои гирифтани ҷузъиёт гиред ва баъд идоракуниро ба ёвари нависанда супоред».
Промпти ёвари нависанда: «Шумо ёвари нависанда ҳастед. Ҳуҷҷатҳо ва паёмҳои пешниҳодшударо хонед. Ҷавоби кӯтоҳи ҷамъбастӣ бо зикри номи сомонаҳо дар қавсҳои мураббаъ таҳия кунед. Агар манбаъҳо нокифоя ё норавшан бошанд, бо дархости кӯтоҳ идоракуниро ба таҳқиқгар баргардонед».
Ёвари таҳқиқотӣ барои ҷустуҷӯи веб ва гирифтани муҳтавои саҳифаҳо масъул аст. Ба он ҳам абзорҳои таҳқиқотӣ ва ҳам абзори супоридани кор ба нависанда дода мешаванд. Ёвари нависанда барои ҷамъбасти маълумот ва истиноддиҳӣ масъул аст. Агар далели бештар лозим шавад, он метавонад идоракуниро ба ёвари таҳқиқотӣ баргардонад.
Акнун, ки ҳар ду нақш муайян шудаанд, онҳоро ба тӯда пайваст мекунем. Тӯда механизми ҳамоҳангсозиро таъмин мекунад: ба таври пешфарз аз ёвари таҳқиқотӣ оғоз мекунад, вале иҷозат медиҳад идоракунӣ то анҷоми вазифа ба нависанда ва боз баръакс гузарад.
Намунаи 7.33. Сохтани тӯдаи таҳқиқгар–нависанда.
swarm = create_swarm(
agents=[research_assistant, writer_assistant],
default_active_agent="research_assistant",
).compile()
Барои санҷидани система метавонед промпти зеринро истифода баред. Дар ин ҷо мо хулосаи имкониятҳои иҷозатномагирии финтех дар Швейтсарияро дархост кардем. Тӯда аввал манбаъҳоро меҷӯяд, баъд идоракуниро барои ҷамъбаст ба ёвари нависанда медиҳад ва агар лозим шавад, барои гирифтани маълумоти бештар ба таҳқиқ бармегардад.
Намунаи 7.34. Иҷрои тӯдаи таҳқиқгар–нависанда.
user_request = {
"messages": [
{
"role": "user",
"content": (
"""Find the current Swiss fintech licensing options for small
startups. Gather authoritative sources and produce a short
summary with three bullet points and references."""
),
}
]
}
for chunk in swarm.stream(user_request):
print(chunk)
print()
Дархост чунин аст: «Имкониятҳои амалкунандаи иҷозатномагирии финтехро дар Швейтсария барои стартапҳои хурд пайдо кун. Манбаъҳои муътамад ҷамъ оварда, хулосаи кӯтоҳро дар се банд бо истинодҳо пешниҳод намо». Натиҷаҳо тадриҷан намоиш дода мешаванд ва раванди супоридани идоракунӣ дар амал дида мешавад.
Иҷро се банди равшан бо истинодҳо медиҳад, ки ба саҳифаҳои расмии танзимгари Швейтсария ва манбаъҳои боэътимоди молиявӣ такя мекунанд. Аммо агар нависанда далелҳоро нокифоя шуморад, метавонад идоракуниро ба таҳқиқ баргардонад. Давраи пурраи ҷамъоварии маълумот ва тавлиди натиҷаи ниҳоии сохторёфта тақрибан 30 сония вақт мегирад.
Манбаъҳо
- Wei, J. ва ҳамкорон (2022). Chain-of-Thought Prompting Elicits Reasoning in Large Language Models. https://arxiv.org/abs/2201.11903
- Yao, S. ва ҳамкорон (2023). Tree of Thoughts: Deliberate Problem Solving with Large Language Models. https://arxiv.org/abs/2305.10601
- Yao, S. ва ҳамкорон (2022). ReAct: Synergizing Reasoning and Acting in Language Models. https://arxiv.org/abs/2210.03629

Барномасозӣ
Олами Афсонаҳо
Ахбор
Саломатӣ
Дунё