Dilshod.dev

AI agenti aslida nima

Marketingni olib tashlasangiz, agent — uch qismli sikl. Shu qismlarni tushunish agentlar production'da nega qulashini va qaysi nosozliklarni tuzatishga arziyotganini aniq ko'rsatadi.

Muallif: Dilshod Abdullayev7 daqiqa o'qish

"Agent" — aytayotgan odamga nima kerak bo'lsa, o'shani anglatadigan so'zlardan biriga aylandi. Ma'lumotlar bazasidan qidiradigan chatbot — agent. O'rtasida LLM turgan cron vazifasi — agent. O'n ikkita servisdan iborat orkestratsiya platformasi — agent ham. So'z bularning barchasini qamrasa, u ma'lumot tashishdan to'xtagan.

Shuning uchun qurayotganda men aslida ishlatadigan ta'rif: agent — bu sikl bo'lib, unda model keyingi amalni tanlaydi, muhit uni bajaradi va natija yana ichkariga qaytariladi. Tamom. Uch qism — model, vositalar, sikl.

Agentlarda odamlarni hayratlantiradigan hamma narsa ham, ularni qulatadigan hamma narsa ham shu siklning mavjudligidan kelib chiqadi.

Butun g'oya o'ttiz qatorda

Har qanday freymvorkdan oldin, aslida naqadar oz mexanizm kerakligini ko'rish foydali. Mana, to'liq agent:

async function runAgent(task: string, tools: ToolSet, maxSteps = 12) {
  const messages: Message[] = [{ role: 'user', content: task }];
 
  for (let step = 0; step < maxSteps; step++) {
    const reply = await model.chat({ messages, tools: tools.schemas });
    messages.push(reply);
 
    // Vosita chaqirilmadi — demak model vazifani tugadi deb hisoblaydi.
    if (!reply.toolCalls?.length) return reply.content;
 
    for (const call of reply.toolCalls) {
      const result = await tools.run(call.name, call.arguments);
      messages.push({ role: 'tool', toolCallId: call.id, content: result });
    }
  }
 
  throw new Error('Step budget exhausted');
}

Butun g'oya shu. Freymvork sizga qayta urinishlar, trassirovka, streaming va yaxshiroq tiplar tizimini berishi mumkin — bular haqiqiy qiymat, olishga arziydi — lekin u yangi tushuncha qo'shmaydi. Shu o'ttiz qatorni tushunsangiz, agentlarni tushundingiz, va falon freymvork yordam berayotgan-bermayotganini baholashga ancha tayyorsiz.

Sikl aslida nima berayotganiga e'tibor bering: model keyingisini hal qilishdan oldin o'z amalining natijasini ko'radi. Bitta prompt hamma narsani oldindan rejalashtirib, umid qilishi kerak. Agent esa biror narsani sinab ko'rib, xatoni o'qib, yo'nalishini o'zgartira oladi. Butun ustunlik shu qaytar aloqada. Va ko'rib turganimizdek, butun muammo ham shunda.

Vositalar — bu API, va siz uni yomon loyihalayapsiz

Agent ishlaydimi-yo'qmi degan savolga eng katta ta'sir qiladigan narsa — vositalar dizayni, va u promptdagi so'z tanlashga berilayotgan e'tiborning kichik ulushinigina oladi.

Vosita ta'rifi — hujjati yo'q, so'raydigan hamkasbi yo'q va chaqiruvni to'g'ri qilishga bir imkoni bor o'quvchi uchun yozilgan API shartnomasi. Nom va tavsif — metadata emas. Ular butun interfeys.

Bir xil imkoniyatning ikki versiyasini solishtiring:

// A versiyasi — texnik jihatdan to'g'ri, amalda befoyda
{
  name: 'query',
  description: 'Ma\'lumotlar qatlamiga so\'rov yuboradi',
  parameters: { sql: 'string' },
}
 
// B versiyasi — mexanizmni emas, qarorni tavsiflaydi
{
  name: 'find_orders_by_customer',
  description:
    'Bitta mijozning eng so\'nggi 50 tagacha buyurtmasini yangisidan boshlab qaytaradi. ' +
    'Mijoz ID si bor va uning buyurtmalar tarixi kerak bo\'lganda ishlating. ' +
    'Bekor qilingan buyurtmalar kiritilmaydi. Buyurtma bo\'lmasa [] qaytadi.',
  parameters: {
    customerId: 'string — ichki mijoz UUID si, uning emaili emas',
    limit: 'number — ixtiyoriy, standart 20, maksimum 50',
  },
}

A versiyasi SQL inyeksiya urinishlari, noto'g'ri so'rovlar va model nomini taxmin qilgan jadvallarni keltirib chiqaradi. B versiyasi esa maydonni shunchalik toraytiradiki, nosozliklarning ko'pini ifodalashning imkoni qolmaydi.

Men doim qaytib keladigan qoidalar:

Tor — umumiydan yaxshi. find_orders_by_customer querydan yaxshiroq, garchi query ko'proq ish qila olsa ham. Hamma narsani qila oladigan vosita modeldan hamma narsani bilishni talab qiladi.

Nima qilmasligini ayting. "Bekor qilingan buyurtmalar kiritilmaydi" — noto'g'ri javoblarning butun bir turkumini oldini oladi. Tavsifdagi salbiy maydon ijobiy maydon qadar qimmatli.

Model harakat qila oladigan xatolar qaytaring. {"error": "customer_not_found", "hint": "UUID olish uchun email bilan search_customers ishlating"} — bundan chiqib ketiladi. Stack trace esa besh marta bir xil qayta urinishga olib keladi.

Chiqishni cheklang. 8 000 qator qaytaradigan vosita modelga yordam bermadi; u kontekst oynasidan qolgan hamma narsani siqib chiqardi.

Oxirgisi alohida urg'uga loyiq, chunki sodda agentlar aynan shu yerda jimgina o'ladi.

Kontekst — bu idish emas, byudjet

Har bir vosita natijasi suhbatda qolib ketadi. Uchinchi qadamning chiqishi o'n birinchi qadamda ham o'sha yerda turadi va e'tibor uchun qolgan hamma narsa bilan raqobatlashadi. Beshta fayl o'qigan, uchta qidiruv yurgizgan va bazani tekshirgan agent oynasining katta qismini bir qadam uchun kerak bo'lgan, endi esa shovqinga aylangan materialga sarflagan.

Bir vaqtda ikkita narsa buziladi. Ko'zga tashlanadigani — qattiq chegara: oyna tugaydi va so'rov qulaydi. Nozikroq va zararliroqi esa — model e'tibori chegaragacha ancha oldin susayadi. Eskirgan vosita chiqishlariga to'la uzun kontekst qisqa kontekstdan yomonroq qarorlar beradi, va buni jimgina qiladi. Sizga xato kelmaydi. Sizga to'qqizinchi qadamda ikkinchi qadamdagidan sirli ravishda ahmoqroq bo'lib qolgan agent keladi.

Shuning uchun sikl nimani ko'tarib yurishini boshqarishi kerak:

function compact(messages: Message[], keepRecent = 6): Message[] {
  if (messages.length <= keepRecent + 1) return messages;
 
  const [task, ...rest] = messages;
  const older = rest.slice(0, -keepRecent);
  const recent = rest.slice(-keepRecent);
 
  // Eski navbatlarni nima aytilgani bilan emas, nima bilib olingani bilan almashtiramiz.
  return [task, { role: 'system', content: summarise(older) }, ...recent];
}

O'sha izohdagi farq — eng muhimi. Nima aytilgani haqidagi xulosa transkriptni saqlaydi. Nima bilib olingani haqidagi xulosa esa holatni saqlaydi: "foydalanuvchi tarifi pro, 2026-08-14 da tugagan; billing jadvalida uning qatori yo'q" — bu o'ttiz token turadigan va uch mingtasini almashtiradigan uchta fakt.

Agentlar aslida qayerda qulaydi

Bularni production'da ishlatib ko'rgach, nosozliklar to'rt shaklga guruhlanadi.

Ishonchli sikl. Model vositani chaqiradi, tushunmaydigan xato oladi va o'sha vositani o'sha argumentlar bilan yana chaqiradi. Qayta-qayta. Uning buni endigina sinaganidan xotirasi yo'q, chunki uning nuqtai nazaridan har bir navbat — o'sib borayotgan transkriptga yangi qarash. Qadamlar byudjeti buni ushlaydi. Takrorlangan bir xil chaqiruvni aniqlab, "aynan shu chaqiruv X xatosi bilan qulagan edi — boshqa yo'l sinab ko'ring" deb kiritish esa yaxshiroq ushlaydi.

Jimgina qisman muvaffaqiyat. Agent sakkiz qadamning oltitasini bajaradi, keyin sakkiztasi ham muvaffaqiyatli o'tgandek o'qiladigan xulosa yozadi. Men buni chinakam xavfli nosozlik deb bilaman, chunki u aynan muvaffaqiyatga o'xshaydi. Yagona haqiqiy himoya — modeldan tashqarida tekshirish: bazadagi haqiqiy qatorni, haqiqiy faylni, haqiqiy API javobini tekshiring. Vazifa bajarildimi degan savolga agentning o'zi yagona hakam bo'lishiga hech qachon yo'l qo'ymang.

Vosita argumentlarida ishonarli to'qima. ID si yo'q mijozning buyurtmalari so'ralganda, model chiroyli tuzilgan, lekin mavjud bo'lmagan UUID chiqaradi. Parametr tavsifi ("ichki mijoz UUID si, uning emaili emas") va aniq customer_not_found qaytaradigan vosita buning ko'pini hal qiladi.

Ko'rinmas o'sadigan xarajat. Har qadam butun suhbatni qaytadan yuboradi. O'n ikki qadamli agent o'n ikki chaqiruvlik token turmaydi; u o'sib boruvchi prefiks yig'indisiga yaqin turadi, ya'ni saqlanayotgan uzunlikka nisbatan kvadratik. Shuning uchun siqish (compaction) sifat nazorati qadar xarajat nazorati hamdir, va shuning uchun prompt keshlash agentlar uchun mayda optimizatsiya emas — u yashaydigan va yashamaydigan variant orasidagi farq.

Qachon qurmaslik kerak

"Agent" deb yorliqlangan vazifalarning ko'pi uchun quvur (pipeline) yaxshiroq. Qadamlar ketma-ketligini oldindan bilsangiz — ol, tasnifla, o'zgartir, saqla — o'sha ketma-ketlikni yozing. Deterministik kod arzonroq, tezroq, testlanadigan va ba'zan boshqa ish qilishga qaror qilmaydi.

Sikl o'z narxini ketma-ketlik yo'lda topilgan narsaga chindan bog'liq bo'lgandagina oqlaydi. Qulayotgan testni tuzatish — haqiqiy agent vazifasi: birinchisini o'qimaguningizcha bitta fayl kerakmi yoki yettitami, bilmaysiz. Maqolani qisqartirish esa yo'q. Bu — yaxshi prompt bilan bitta chaqiruv, va uni siklga o'rash hech nima evaziga kechikish va nosozlik yo'llarini qo'shadi.

Oqilona sinov: blok-sxemani chiza olsangiz, blok-sxemani quring. Sxemada "nima topishimizga bog'liq" deb yozilgan katak paydo bo'lganda agentga qo'l uzating.

O'zlashtirishga arziydigan qism

Agent — aqlliroq model emas. Bu o'sha modelning o'zi, faqat keyingi harakatga o'tishdan oldin oqibatlarni ko'rish imkoniyati berilgan. Har bir kuchli tomon shundan kelib chiqadi — xatolardan chiqib ketish, taxmin qilingan emas, aslida mavjud bo'lgan holatga moslashish. Har bir zaif tomon ham shundan: to'planib boruvchi kontekst, avjlanib boruvchi xatolar, har qadamda o'sadigan xarajat.

Xarakterni emas, siklni loyihalang. Vositalarni noto'g'ri amalni ifodalash qiyin bo'lguncha toraytiring. Natijalarni model tashqarisida tekshiring. Prompt bularning barchasidan ancha kam ahamiyatga ega — bu noqulay, chunki prompt aynan yozish qiziqarli bo'lgan qism.

O'xshash maqolalar

aiagents

Kontekst muhandisligi — yangi to'siq

Prompt muhandisligi so'z tanlash haqida edi. Kontekst muhandisligi esa cheklangan oynada qaysi tokenlar joy olishga haqli ekanini hal qiladi — va bugun ishlaydigan agent bilan deyarli ishlaydigan agentni ajratadigan narsa aynan shu.

5 daqiqa o'qish
airag

RAG — asosan qidiruv muammosi

RAG tizimi noto'g'ri javob berganda, aybdor odatda model emas — kerakli bo'lak kontekstga umuman tushmagan. Buni qanday isbotlash va isbotlagandan keyin nimani tuzatish haqida.

11 daqiqa o'qish
aicareer

Yo'qolgan birinchi zinapoya

Stanford oyiga besh million amerikalikning maoshini kuzatadi. Yigirma ikki–yigirma besh yoshdagilar bandligi AI ta'sir qilgan kasblarda kutilgandan o'n to'qqiz foiz past. Odamlar ishdan bo'shatilmayapti — ularni ishga olish to'xtagan. Va bu ikkisi butunlay boshqa muammo.

6 daqiqa o'qish