2-qism · Agentlarni qurish·06-bob
Avtonom assistantlar va behavior tree'lar
Robototexnika va o'yinlardan olingan behavior tree naqshi agentlarni boshqarish uchun. Node turlari, muvaffaqiyat/muvaffaqiyatsizlik mantiqi, py_trees kodi va agentic behavior tree (ABT).
Agent murakkab vazifani bajarayotganda uni qanday boshqarasiz? Qaysi qadam qachon, qaysi shart bajarilsa nima bo'ladi?
Javob — o'nlab yillik naqsh: behavior tree (xatti-harakat daraxti). U robototexnika va o'yinlarni boshqarishda sinalgan, endi esa agentlarga qo'llaniladi.
Behavior tree nima#
Kompyuter o'yinida NPC (o'yinchi bo'lmagan personaj) bilan o'ynagansiz. Uning "aqli" — ko'pincha behavior tree.
G'oyasi 1986-yilda Rodney Brooks tomonidan robotlar uchun taklif qilingan. Bugun u daraxt va tugun tuzilmasiga aylangan.
Node turlari#
- →
- Sequence (ketma-ketlik)Bolalarni navbat bilan bajaradi. BITTASI muvaffaqiyatsiz bo'lsa — to'xtaydi. Hammasi muvaffaqiyatli bo'lsagina success qaytaradi. «VA» mantiqi.
- ?
- Selector (tanlovchi / fallback)Bolalarni navbat bilan sinaydi. BIRINCHI muvaffaqiyatli bo'lganda to'xtaydi. Hech biri ishlamasa — failure. «YOKI» mantiqi. Xato bo'lsa muqobil yo'lga o'tadi.
- ◇
- Condition (shart)Shartni tekshiradi. To'g'ri bo'lsa success, aks holda failure. Mantiqiy qiymat emas — success/failure.
- ■
- Action (harakat)Haqiqiy ish shu yerda bajariladi. Muvaffaqiyatli bo'lsa success, aks holda failure.
- ▽
- Decorator (bezovchi)Bola tugunning bajarilishini boshqaradi. Ko'pincha «control barrier» sifatida — xavfli yoki keraksiz harakatni bloklaydi.
- ⇉
- Parallel (parallel)Barcha bolalarni bir vaqtda bajaradi. Muvaffaqiyat — necha bola muvaffaqiyatli bo'lishi kerakligi chegarasi bilan aniqlanadi.
Ijro tartibi#
Behavior tree yuqoridan pastga, chapdan o'ngga ijro etiladi.
Diqqat qiling: birinchi ketma-ketlik muvaffaqiyatsiz bo'ldi (olma yo'q), lekin daraxt qulamadi — Selector avtomatik ikkinchi yo'lga o'tdi. Bu behavior tree'ning kuchi.
py_trees bilan kod#
import py_trees
class OlmaBormi(py_trees.behaviour.Behaviour):
def __init__(self, name, olma_bor):
super().__init__(name)
self.olma_bor = olma_bor
def update(self):
if self.olma_bor:
return py_trees.common.Status.SUCCESS
return py_trees.common.Status.FAILURE
class OlmaYe(py_trees.behaviour.Behaviour):
def update(self):
print("Olma yeyildi!")
return py_trees.common.Status.SUCCESS
# Daraxtni quramiz
seq1 = py_trees.composites.Sequence(name="Olma ketma-ketligi", memory=True)
seq1.add_children([OlmaBormi("Olma bormi?", olma_bor=False), OlmaYe("Olma ye")])
seq2 = py_trees.composites.Sequence(name="Nok ketma-ketligi", memory=True)
seq2.add_children([OlmaBormi("Nok bormi?", olma_bor=True), OlmaYe("Nok ye")])
root = py_trees.composites.Selector(name="Tanlovchi", memory=True)
root.add_children([seq1, seq2])
daraxt = py_trees.trees.BehaviourTree(root)
py_trees.logging.level = py_trees.logging.Level.DEBUG
daraxt.tick() # daraxtni bir marta ishga tushiradipython behavior_tree.py[DEBUG] Olma bormi? : FAILURE [DEBUG] Nok bormi? : SUCCESS [DEBUG] Nok ye : SUCCESS
tick() — daraxtni bir marta yuqoridan pastga ishga tushiradi. Har tick'da daraxt
joriy holatga qarab qaror qiladi.
Nima uchun behavior tree?#
Agentlarni boshqarishning boshqa usullari ham bor. Behavior tree ular orasida nima uchun ajralib turadi?
- Modulli — tugunlarni qayta ishlatish oson
- Xatoga chidamli — Selector avtomatik muqobil yo'l tanlaydi
- Ko'rinadigan — daraxtni chizib, mantiqni ko'rish mumkin
- Har darajada ishlaydi — mikrodan makrogacha
- State machine — sodda, lekin murakkablikda tarqoq bo'lib ketadi
- if/else zanjiri — o'qish qiyin, kengaytirish qiyin
- Oddiy sikl — moslashuvchanlik yo'q
- Neyron tarmoq — kuchli, lekin tushunarsiz (qora quti)
Behavior tree — murakkab, ko'p shartli xatti-harakat uchun eng ko'rinadigan va boshqariladigan naqsh. Agentlar uchun ideal, chunki mantiq daraxt shaklida aniq ko'rinadi.
Agentic behavior tree (ABT)#
Endi eng qiziq qism. ABT — behavior tree'ni agent tizimlariga qo'llaydi.
Asosiy farq: oddiy behavior tree'da shartlar va harakatlar qat'iy kod. ABT'da esa ular promptlar.
Misol: kod yozish ABT'si:
Har tugunda LLM chaqiruvi bor — lekin daraxt tuzilishi oqimni boshqaradi. Bu function calling siklidan farq qiladi: u yerda model o'zi qaror qiladi, bu yerda daraxt boshqaradi.
Assistantlarni boshqaradigan assistant#
Kitobning qiziq g'oyasi: assistantlarni yaratish va boshqarish uchun ham assistant ishlatish.
Manager Assistant — barcha narsaga kira oladigan "admin" agent. U:
- Mavjud assistantlarni ro'yxatlaydi
- Yangi assistant o'rnatadi
- Ularning ta'riflarini JSON'da saqlaydi
Foydalanuvchi → Manager Assistant:
"O'rnatilishi mumkin bo'lgan assistantlarni ro'yxatla"
→ ro'yxat
"Python Coding Assistant'ni o'rnat"
→ o'rnatildi
"Barcha assistantlarni assistants.json fayliga saqla"
→ saqlandi
Back chaining#
Behavior tree'ni qurishning aqlli usuli — orqadan zanjir (back chaining).
G'oyasi: maqsaddan boshlab orqaga qarab quring. "Menga X kerak" → "X uchun Y kerak" → "Y uchun Z kerak". Shunday qilib daraxt maqsaddan kelib chiqib avtomatik quriladi.
Bu ayniqsa foydali, chunki LLM buni o'zi qila oladi: maqsadni berasiz, u kerakli qadamlar daraxtini teskari tuzadi.
Xulosa#
- 01Behavior tree muvaffaqiyat/muvaffaqiyatsizlik asosida ishlaydi, mantiqiy true/false emas. Bu daraxtni xatoga chidamli qiladi.
- 02Sequence = «VA» (biri yiqilsa to'xtaydi), Selector = «YOKI» (biri ishlasa to'xtaydi). Selector avtomatik muqobil yo'l tanlaydi.
- 03tick() daraxtni bir marta yuqoridan pastga, chapdan o'ngga ishga tushiradi. Har tick'da joriy holatga qarab qaror qilinadi.
- 04ABT — behavior tree'ning agent versiyasi. Shartlar va harakatlar promptlar. Stoxastik — testlash qiyinroq, loglang va temperature=0 ishlating.
- 05Function calling'da model qaror qiladi, ABT'da daraxt boshqaradi. Ikkalasi turli darajadagi nazorat beradi.
- 06Agentlarni maqsadga xos va cheklangan qiling. «Hamma narsani qila oladigan» agent — xavfsizlik muammosi. Ishonch cheklovlar orqali.
Keyingi bobda to'liq agent platformasi quramiz: Nexus va Streamlit bilan profillar, personalar va asboblar bo'lgan ishlaydigan chat ilovasi.