aidoc.uz

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.

ROOT: Selector (yoki)
birinchi muvaffaqiyatli bolani tanlaydi
1-Sequence: olma bormi? → ye
olma YO'Q → muvaffaqiyatsiz, keyingisiga o'tadi
2-Sequence: nok bormi? → ye
nok BOR → olma yeydi → muvaffaqiyat
Olma yeyish daraxti: agentda olma bor, nok yo'q

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 tushiradi
terminal
python 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?

Behavior tree afzalliklari
  • 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
Muqobil usullar
  • 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:

ROOT: Sequence
hamma qadam ketma-ket bajarilishi kerak
Condition: vazifa tushunarlimi?
prompt: «bu vazifa aniqmi?» → success/failure
Action: kod yoz
coder agent chaqiriladi
Condition: kod ishlaydimi?
tester agent tekshiradi
Selector: ishlamasa → tuzat yoki qayta yoz
muqobil yo'l
Kod yozish ABT: har tugun bir agent vazifasi

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#

Yodda saqlang
  • 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.