17 β PHP GenAI frameworklari (LLPhant, Neuron AI)¶
β¬ οΈ Oldingi: 16 β Kesh va xarajat Β· π Kitob boshi Β· Keyingi: 18 β Laravel integratsiya β‘οΈ
Bu bobda: 1-16 boblarda biz suhbatni, tool chaqirishni, RAG quvurini, embeddingni β hammasini qo'lda, asosiy SDK ustida qurdik. Bu o'rgatuvchi, lekin katta loyihada takrorlanishni keltiradi. Endi tanishamiz: PHP GenAI frameworklari β tayyor bloklardan tuzilgan "konstruktor", LangChain (Python/JS) ning PHP olamidagi ekvivalentlari. Ikkitasini ko'ramiz: LLPhant (RAG/quvur uslubi) va Neuron AI (agentlar/workflow). Asosiy g'oya β provayder-agnostiklik (bitta kod, ko'p provayder) va kam kod bilan ko'p ish. Eng muhim savol: qachon framework, qachon to'g'ridan SDK? β buni aniq jadval bilan hal qilamiz.
Muammo: hammasini qo'lda qurdik¶
Avvalgi 16 bobni bir nazardan o'tkazaylik. Biz nima yasadik?
- Suhbat (4-bob) β
messagesmassivini o'zimiz to'ldirdik, tarixni o'zimiz saqladik. - Streaming (5-bob) β hodisalarni o'zimiz aylanma (loop) bilan o'qidik.
- Tool calling (9β10-bob) β tool ta'rifini, chaqiruv-natija siklini o'zimiz yozdik.
- RAG (13β15-bob) β hujjatni bo'laklarga bo'lish, embedding, vektor bazaga yozish, qidirish, promptga qo'shish β har bir qadamni o'zimiz qurdik.
- Kesh va xarajat (16-bob) β narx hisoblash, kesh, model tanlash β yana o'zimiz.
Bu yondashuvning kuchli tomoni bor: siz har bir g'ildirakni o'z qo'lingiz bilan yasadingiz, demak ostida nima borligini tushunasiz. Kitob aynan shuning uchun shunday tuzilgan β avval poydevor.
Lekin endi bir necha haqiqiy muammo paydo bo'ladi:
- Takrorlanish. Har yangi loyihada xuddi shu RAG quvurini, xuddi shu tool siklini qaytadan yozasiz. Bu β vaqt va xato.
- Provayderga bog'lanish. Bizning kodimiz
Anthropic\Clientga to'g'ridan bog'langan. Ertaga "Gemini'ga o'tamiz" desangiz β o'nlab joyni o'zgartirasiz. - Standart bloklar o'zi yo'q. Hujjat o'qish (PDF/Word), bo'laklarga bo'lish, ko'p hil vektor bazaga ulanish β har birini noldan yozish ko'p mehnat.
Hayotiy o'xshatish β mebel. Avvalgi boblar β bu "har taxtani o'zingiz yo'nib, mix qoqib stol yasash". Buni o'rganish zarur: yog'och qanday ishlashini bilasiz. Lekin har safar shunday qilsangiz β sekin. Framework β bu tayyor, o'lchovli mebel bloklari: tortma, oyoq, qopqoq β siz faqat yig'asiz. Tezroq, lekin ichida nima borligini avval bilganingiz uchun, sinsa ham tuzata olasiz.
Eslatma
Bu bobda biz frameworklarni kontseptual ko'rsatamiz β umumiy oqim va g'oyani. LLPhant va Neuron AI tez rivojlanmoqda va aniq metod nomlari versiyadan versiyaga o'zgaradi. Shuning uchun aniq API imzosini yoddan yozmaymiz β o'rniga oqimni tushuntiramiz va har doim rasmiy hujjatga ishora qilamiz. Asosiy SDK kodi (taqqoslash uchun) esa β 1-16 boblardagi tasdiqlangan API.
Framework nima beradi?¶
Framework (bu kontekstda β GenAI framework) β bu LLM ilovasi uchun tayyor, qayta ishlatiladigan bloklar to'plami. U sizga bir necha narsani beradi:
- Provayder-agnostik abstraktsiya β bitta kod yozasiz, ostida Claude, OpenAI, Gemini yoki lokal (Ollama) ishlashi mumkin. Provayderni almashtirish β bir-ikki qator.
- Tayyor RAG quvuri β hujjat o'qish β bo'laklarga bo'lish β embedding β vektor bazaga yozish β qidirish β hammasi tayyor zveno sifatida.
- Agent / workflow β model + tool + xotira + qaror siklini o'zi boshqaradigan tayyor mexanizm (11-bobdagi agentni eslang β endi tayyor).
- Vektor store ulanishi β pgvector, Qdrant, Pinecone, Meilisearch va boshqalarga tayyor "ulagich"lar.
- Hujjat o'qish β PDF, Word, matn, veb-sahifani o'qib, tozalab, bo'laklarga ajratuvchi yordamchilar.
- Xotira va chat history β suhbat tarixini saqlash/yuklash tayyor.
Boshqacha aytganda: 1-16 boblarda qo'lda yozgan narsalaringizning ko'pini framework tayyor beradi.
Maslahat
Framework β kod yozmaslik uchun emas, kamroq yozish va standart narsalarga vaqt sarflamaslik uchun. Siz biznes mantiqqa (sizning ilovangizga xos qism) e'tibor berasiz, "g'ildirak"ni qayta ixtiro qilmaysiz.
Framework ichidagi tushunchalar β atamalar lug'ati¶
Frameworklarning hujjatlarini o'qishni boshlaganingizda, bir nechta takrorlanadigan atama uchraydi. Ularni avval tushunib oling β bularning hammasini biz allaqachon qo'lda ko'rganmiz, faqat endi yangi nom bilan:
- Provider / driver (provayder/drayver) β qaysi LLM bilan gaplashishni belgilaydigan qism (Claude, OpenAI, Gemini, Ollama). Biz buni
Anthropic\Clientdeb yozgandik (2-bob). - Chain / pipeline (zanjir/quvur) β qadamlarni ketma-ket ulash: kirish β qadam1 β qadam2 β chiqish. RAG quvuri (15-bob) β aynan shu.
- Loader / splitter (yuklovchi/bo'luvchi) β hujjatni o'qib (PDF/Word/matn), kichik bo'laklarga (chunk) ajratuvchi qism (15-bobda qo'lda yozdik).
- Embedder (embeddinglovchi) β matnni vektorga aylantiruvchi (13-bob).
- Vector store (vektor ombor) β vektorlarni saqlab, o'xshashlik bo'yicha qidiradigan baza ulagichi (14-bob β pgvector).
- Retriever (topuvchi) β savolga eng mos bo'laklarni topib beruvchi (RAG'ning "R" qismi).
- Agent / tool β model + vositalar + qaror sikli (9β11-bob).
- Memory (xotira) β suhbat tarixi va holatni saqlash (4-bob).
Hayotiy o'xshatish β yangi til, eski tushuncha. Bu xuddi bir hunarni o'rganib bo'lib, keyin uni boshqa shevada eshitishga o'xshaydi. "Bo'laklash" endi "splitter", "vektor baza" endi "vector store" deyiladi β lekin ish o'sha. Siz qo'lda o'rganganingiz uchun yangi nomlarni tez tanib olasiz.
Eslatma
Aynan shu sabab kitob frameworkni oxirida o'rgatadi. Agar siz birinchi kundan frameworkni ishlatib boshlaganingizda, "retriever" yoki "vector store" so'zlari sehrli qutilarday tuyulardi. Endi esa ularning ichida nima borligini bilasiz β bu sizni frameworkning xo'jayini qiladi, quli emas.
LLPhant β LangChain uslubidagi framework¶
LLPhant β PHP uchun GenAI frameworki, g'oyasi va tuzilishi bilan mashhur LangChain (Python/JS) ga o'xshaydi. U ayniqsa RAG va quvur (pipeline) uslubidagi ishlar uchun kuchli.
O'rnatish (Composer orqali):
LLPhant qo'llab-quvvatlaydigan provayderlar (jumladan): OpenAI, Anthropic (Claude), Mistral, Ollama (lokal). Ya'ni siz Claude'da yozgan kodni keyinroq OpenAI yoki lokal modelga osongina o'tkaza olasiz.
Asosiy imkoniyatlari:
- Chat β oddiy suhbat (bizning 4-bobdagi ish, lekin abstraksiya orqali).
- Embedding β matnni vektorga aylantirish (13-bob).
- RAG quvuri β hujjat o'qish (PDF/Word/matn) β bo'laklarga bo'lish (chunk) β embedding β vektor bazaga yozish β savol bo'yicha qidirish β javob (15-bobning hammasi bitta quvurda).
- Agent / tool β modelga vositalar berish va sikl.
Hayotiy o'xshatish β RAG "konvent lentasi". 15-bobda biz hujjatni qo'lda bo'laklab, qo'lda embedding qilib, qo'lda bazaga yozdik. LLPhant β bu konveyer lentasi: bir uchidan hujjatni qo'yasiz, lenta o'zi bo'laklaydi, embeddinglaydi, saqlaydi. Ikkinchi uchidan savol berasiz β javob chiqadi. Siz lentani sozlaysiz, har detalni qo'lda surmaysiz.
Kontseptual misol (LLPhant β RAG oqimi)¶
Ehtiyot bo'ling β bu kontseptual oqim
Quyidagi kod g'oyani ko'rsatadi, aniq metod nomlari emas. LLPhant versiyalari orasida klass/metod nomlari o'zgaradi. Aniq API uchun har doim LLPhant rasmiy hujjatiga qarang. Bu yerda muhimi β necha bosqich va necha qator kodda RAG quvuri yig'ilishini ko'rish.
Quyida RAG quvurining kontseptual ko'rinishi (LLPhant uslubida β taxminiy):
<?php
require __DIR__ . '/vendor/autoload.php';
// DIQQAT: bu KONTSEPTUAL oqim β aniq klass nomlari uchun LLPhant hujjatiga qarang.
// G'oya: hujjatni o'qish -> bo'laklash -> embedding -> vektor baza -> savol -> javob.
// 1) Hujjatni o'qib, bo'laklarga ajratamiz (PDF/matn -> kichik bo'laklar)
$bolaklar = hujjatniOqibBolakla('qollanma.pdf');
// 2) Vektor bazaga yozamiz (embedding avtomatik β framework qiladi)
$vektorBaza = vektorBazaYarat(); // masalan, pgvector ulagichi
$vektorBaza->saqla($bolaklar); // embedding + yozish bitta qadamda
// 3) RAG so'rovi: savol -> tegishli bo'laklar topiladi -> javob yoziladi
$rag = ragQuvurYarat($vektorBaza); // provayder: Claude/OpenAI/Ollama
$javob = $rag->sora('Qaytarish siyosatimiz qanday?');
echo $javob;
Buni 15-bob bilan solishtiring: u yerda biz yuzlab qator yozgandik (chunklash, embedding sikli, baza sxemasi, qidiruv SQL, prompt yig'ish). LLPhant bilan o'sha mantiq bir necha qatorga jamlanadi. Sehr yo'q β framework ostida xuddi 15-bobdagi ishni bajaradi, faqat siz uchun.
Boshqa provayderda
LLPhant'da provayderni almashtirish β bu odatda konfiguratsiya/klass o'zgarishi. Misol RAG mantiqi o'zgarmaydi; faqat "qaysi model" qismi boshqasiga almashadi. Bu β provayder-agnostiklikning amaliy foydasi.
Neuron AI β agentik framework¶
Neuron AI β PHP uchun agentik (agentlarga yo'naltirilgan) framework. Agar LLPhant ko'proq "RAG/quvur" haqida bo'lsa, Neuron AI ko'proq agent, workflow va tool haqida.
O'rnatish:
Qo'llab-quvvatlaydigan provayderlar (jumladan): OpenAI, Anthropic (Claude), Gemini, Mistral. Uning bayroqdor xususiyati β provayderni bir qatorda almashtirish: agentingizning mantiqi o'zgarmaydi, faqat "qaysi provayder" satri almashadi.
Asosiy imkoniyatlari:
- Agent β model + tool + qaror sikli (11-bobdagi agent g'oyasi, tayyor).
- RAG β hujjatlar bo'yicha savol-javob.
- Workflow β bir necha qadamdan iborat murakkab oqim (qadamlar ketma-ketligi, shartlar, tarmoqlanish).
- Vektor store β vektor bazalarga ulanish.
- Xotira (memory) va chat history β suhbat va holatni saqlash.
Hayotiy o'xshatish β yordamchi-xodim. Neuron AI agenti β bu "vazifa beradigan xodim" kabi: unga maqsad va bir nechta asbob (tool) berasiz, u o'zi qaror qiladi β qaysi asbobni qachon ishlatish, qachon to'xtash. Siz har qadamni buyurmaysiz β natijani so'raysiz.
Kontseptual misol (Neuron AI β agent oqimi)¶
Ehtiyot bo'ling β bu kontseptual oqim
Quyidagi kod g'oyani ko'rsatadi, aniq imzolar emas. Aniq API uchun Neuron AI rasmiy hujjatiga qarang. Bu yerda muhimi β agent qanday tuziladi va provayder qanday almashtirilishi mumkinligi.
<?php
require __DIR__ . '/vendor/autoload.php';
// DIQQAT: KONTSEPTUAL oqim β aniq klass/metod nomlari uchun Neuron AI hujjatiga qarang.
// G'oya: agentga provayder + tool berasiz, u o'zi qaror qilib, javob qaytaradi.
// 1) Agent yaratamiz va provayderni belgilaymiz (bu yer almashtiriladigan QATOR)
$agent = agentYarat()
->provayder('anthropic', 'claude-opus-4-8') // <- ertaga 'openai'/'gemini' qilib o'zgartirasiz
->tool(obHavoTool()) // 9-10-bobdagi tool g'oyasi, tayyor shaklda
->xotira(suhbatXotirasi()); // chat history avtomatik
// 2) Foydalanuvchi savolini beramiz β agent o'zi tool chaqiradi, javob qaytaradi
$javob = $agent->sora('Toshkentda ob-havo qanday? Issiqmi?');
echo $javob;
E'tibor bering: provayder('anthropic', ...) qatorini provayder('openai', ...) ga o'zgartirsangiz β qolgan mantiq o'zgarmaydi. Bu β agentik frameworkning kuchi: siz nima qilish kerakligini yozasiz, qaysi model bilan β bu sozlama bo'lib qoladi.
Provayder-agnostiklik β eng katta g'oya¶
Frameworklarning markaziy va'dasi β provayder-agnostiklik (provider-agnostic). Bu nima degani?
Sizning kodingiz to'g'ridan-to'g'ri Anthropic\Client ga emas, balki abstraksiyaga (umumiy interfeysga) tayanadi. Framework ostida "qaysi provayder" deganni sozlama bilan hal qiladi. Natijada bitta kod turli provayderlar bilan ishlaydi.
Hayotiy o'xshatish β rozetka. Uyingizdagi rozetka β standart. Telefon, choynak, noutbuk β har xil qurilma, lekin hammasi o'sha rozetkaga ulanadi. Abstraksiya β shu rozetka. Provayder (Claude, OpenAI, Gemini) β turli qurilma. Siz "qurilma"ni almashtirasiz, lekin "rozetka" (kodingiz) o'zgarmaydi.
Nega bu muhim? Uchta amaliy sabab:
- Narx. Ertaga boshqa provayder o'sha sifatni arzonroqqa bersa β bir qatorda o'tasiz (16-bobdagi tejamkorlik g'oyasi).
- Sifat. Bir vazifada bir model, boshqasida boshqasi yaxshiroq bo'lishi mumkin β sinab ko'rish oson.
- Mavjudlik. Bir provayderda uzilish (yoki tezkorlik cheklovi) bo'lsa β boshqasiga o'tib qolasiz. 8-bobdagi "fallback" g'oyasi, ammo provayder darajasida.
Eslatma
Provayder-agnostiklik β frameworksiz ham mumkin. 8-bobda biz soraber() da fallback yozgandik. Lekin framework buni standart qiladi: siz bu mexanizmni har safar qaytadan yozmaysiz. Bu β frameworkning asosiy qulayligi.
Amaliy senariy β provayderni almashtirish¶
Buni hayotiy misol bilan ko'raylik. Tasavvur qiling, ilovangiz Claude bilan ishlayapti. Bir kun kelib quyidagilardan biri yuz beradi:
- Boshqaruv "xarajatni kamaytiramiz, ko'p so'rovni arzonroq provayderga o'tkazamiz" deydi;
- Yangi loyihada mijoz "biz lokal model (Ollama) ishlatamiz, ma'lumot tashqariga chiqmasin" deydi;
- Bitta vazifada boshqa provayder sezilarli yaxshiroq natija beryapti.
Frameworksiz (to'g'ridan SDK) bu o'zgarish nimani talab qiladi? Kodingizda Anthropic\Client, messages->create(...), $message->content[0]->text kabi Anthropic'ga xos chaqiruvlar ko'p joyda tarqalgan. Har birini topib, yangi provayderning shakliga moslashtirasiz. Bu β xatoga moyil, sekin ish (agar 8-bobdagidek interfeys orqali yozmagan bo'lsangiz).
Framework bilan esa o'zgarish odatda bitta joyda β sozlamada bo'ladi. Mantiqiy farqni quyidagi jadval ko'rsatadi:
| Vazifa | Frameworksiz (tarqoq SDK) | Framework bilan |
|---|---|---|
| Provayderni topish | Ko'p faylda Anthropic\Client |
Bitta sozlama qatori |
| Chaqiruv shakli | Har provayderda boshqacha | Abstraksiya bir xil saqlaydi |
| Javobni o'qish | content[0]->text (Anthropic) |
Framework yagona shaklga keltiradi |
| Xato xavfi | Yuqori (ko'p joy) | Past (bir joy) |
Ehtiyot bo'ling
Almashtirish "bir qator" bo'lsa-da, natijalar bir xil bo'lmaydi. Har model boshqacha "fikrlaydi" β promptingiz Claude uchun sozlangan bo'lsa, OpenAI'da boshqacha javob berishi mumkin. Provayderni almashtirgach, har doim qayta sinang (21-bob β testlash va baholash). Framework kodni almashtirishni osonlashtiradi, lekin sifatni baribir siz tekshirasiz.
Framework bilan RAG β 15-bobni qayta ko'ramiz¶
Eng yaxshi farqni RAG misolida ko'ramiz, chunki 15-bobda biz uni to'liq qo'lda qurgandik. Eslaylik, 15-bobda RAG quvuri quyidagi qadamlardan iborat edi:
| Qadam | 15-bobda (qo'lda) |
|---|---|
| Hujjatni o'qish | file_get_contents, tozalash β o'zimiz |
| Bo'laklash (chunk) | bo'lakka bo'lish mantiqini o'zimiz yozdik |
| Embedding | har bo'lak uchun embedding so'rovi β sikl, o'zimiz |
| Vektor bazaga yozish | pgvector sxemasi, INSERT β o'zimiz |
| Qidirish | o'xshashlik SQL (<=>) β o'zimiz |
| Promptga qo'shish | topilgan bo'laklarni promptga yig'ish β o'zimiz |
| Javob | messages->create(...) β o'zimiz |
Bu β kuchli o'rganish, lekin har loyihada qaytariladigan ko'p kod. Framework bilan bu o'sha qadamlar tayyor zvenolarga aylanadi:
<?php
// KONTSEPTUAL β framework bilan RAG (g'oya, aniq API uchun hujjatga qarang)
$baza = vektorBazaYarat(); // ulagich (pgvector/Qdrant/...)
$baza->saqla(hujjatniOqibBolakla('faq.pdf')); // o'qish + chunk + embedding + yozish
$rag = ragQuvurYarat($baza); // qidirish + prompt + model β tayyor
$javob = $rag->sora('Kafolat muddati qancha?');
echo $javob;
Diqqat β bu sehr emas. Framework ostida aynan 15-bobdagi qadamlarni bajaradi. Siz ularni endi tushunasiz, demak framework noto'g'ri javob bersa yoki sekin ishlasa β qayerda muammo borligini bilasiz. Aynan shuning uchun kitob avval qo'lda qurishni o'rgatdi.
Maslahat
Framework RAG'ni qisqartiradi, lekin sifatni baribir siz nazorat qilasiz: bo'lak o'lchami (chunk size), nechta bo'lak topish (top-k), prompt shakli (15-bob). Bular framework'da ham sozlama sifatida turadi β ularni 13β15-boblardagi tushuncha bilan to'g'ri qo'yasiz.
Framework vs to'g'ridan SDK β qaysi biri qachon?¶
Bu β bu bobning eng muhim qismi. Framework har doim yaxshi emas; to'g'ridan SDK (1-16 boblardagi yo'l) ham har doim yaxshi emas. Tanlov vaziyatga bog'liq.
| Mezon | Framework (LLPhant / Neuron AI) | To'g'ridan SDK (1-16 boblar) |
|---|---|---|
| Tezlik (prototip) | Tez β tayyor bloklar | Sekinroq β o'zingiz yozasiz |
| Kod miqdori | Kam | Ko'proq |
| Ko'p provayder | Oson (abstraksiya tayyor) | Qo'lda qilasiz (8-bob fallback) |
| Tayyor RAG/agent | Bor | O'zingiz qurasiz |
| To'liq nazorat | Kamroq (framework qoidalari) | To'liq β har detalni boshqarasiz |
| Bog'liqlik (dependency) | Ko'proq (framework + uning paketlari) | Kam (faqat SDK) |
| Yangi imkoniyatga kirish | Kutish kerak (framework qo'shguncha) | Darhol (SDK yangilanishi bilan) |
| O'rganish chuqurligi | Yuzaki bo'lib qolishi mumkin | Chuqur β ostini bilasiz |
Qachon framework?
- Tez prototip / MVP kerak;
- Standart RAG yoki agent quvuri yetarli;
- Bir necha provayderni qo'llab-quvvatlash kerak;
- Jamoa katta, "g'ildirak"ni qayta ixtiro qilishni xohlamaysiz.
Qachon to'g'ridan SDK?
- Har detalni to'liq nazorat qilish kerak (maxsus mantiq, nostandart oqim);
- Bog'liqlikni minimal saqlamoqchisiz;
- Provayderning eng yangi imkoniyatiga (masalan, Opus 4.8 ning yangi
outputConfig/thinking) darhol kirish kerak; - Ilovangiz bitta provayderga qurilgan va ko'chirish rejada yo'q.
Eslatma
Tanlov "yo u, yo bu" emas. Ko'p loyihada ikkalasi ham bo'ladi: oddiy RAG uchun framework, maxsus, nozik joy uchun to'g'ridan SDK. Muhimi β har birining kuchli/zaif tomonini bilib, ongli tanlash.
Framework tanlash: LLPhant yoki Neuron AI?¶
Ikkalasi ham yaxshi β tanlov ishingiz xususiyatiga bog'liq:
- LLPhant β agar asosiy ishingiz RAG va hujjat bilan ishlash bo'lsa (savol-javob baza, qo'llanma chatboti). LangChain'dan kelganlar uchun tanish uslub.
- Neuron AI β agar asosiy ishingiz agent, tool, workflow (ko'p qadamli avtomatlashtirish) bo'lsa, va provayderni juda oson almashtirmoqchi bo'lsangiz.
Hayotiy o'xshatish β asboblar do'koni. LLPhant β bu yaxshi jihozlangan "kutubxona/arxiv" tizimi: hujjatlarni saqlash, izlash, javob topish uchun. Neuron AI β bu "robot-yordamchi" qurish to'plami: vazifani o'zi bajaradigan agent uchun. Ikkalasi ham foydali, lekin har xil ish uchun.
Boshqalar (qisqa eslatma). PHP olamida boshqa kichik kutubxonalar ham bor (alohida provayder mijozlari β masalan openai-php/client, 19-bobda), va Symfony AI kabi yangi tashabbuslar paydo bo'lmoqda. Bu maydon tez o'zgaryapti β yangi paketlar chiqadi, eskisi to'xtaydi. Shuning uchun tanlashdan oldin paketning faolligini (yangilanishlar, GitHub yulduzlari, jamoa) tekshiring.
Maslahat
Framework tanlashda 3 narsani ko'ring: (1) sizga kerak provayderni qo'llab-quvvatlaydimi; (2) sizga kerak vektor baza uchun ulagichi bormi; (3) loyiha faolmi (oxirgi commit, ochiq muammolar). Eskirgan framework β kelajakdagi muammo.
Ogohlantirish: framework β qora quti emas¶
Framework qulay, lekin bir necha xavfini unutmang:
- Qora quti tuzog'i. Agar siz frameworkni faqat "ishlatib" qolsangiz va ostida nima borligini bilmasangiz β muammo chiqqanda (sekin javob, noto'g'ri natija, qimmat hisob) nima qilishni bilmaysiz. Aynan shuning uchun kitob avval qo'lda o'rgatdi: framework β bu siz biladigan narsaning qisqartmasi bo'lsin, bilmaydigan narsaning yashirinchasi emas.
- Bog'liqlik (dependency). Framework β bu sizning loyihangizga qo'shilgan katta tashqi paket (yana o'z bog'liqliklari bilan). U yangilanmay qolsa, xavfsizlik teshigi chiqsa yoki sizga kerak provayderni tashlasa β siz bilan bog'lab qolasiz.
- Eskirish xavfi. Bu maydon juda tez o'zgaryapti. Bugun mashhur framework ertaga to'xtab qolishi mumkin. To'g'ridan SDK esa odatda provayderning o'zi tomonidan qo'llab-quvvatlanadi.
- Abstraksiya narxi. Abstraksiya β qulaylik, lekin u provayderning eng yangi, o'ziga xos imkoniyatiga (masalan, Claude'ning
thinking: adaptive) kirishni qiyinlashtirishi yoki kechiktirishi mumkin.
Xavfsizlik
Frameworkdan foydalansangiz ham, xavfsizlik qoidalari o'zgarmaydi: API kalitni hech qachon kodga yozmang β muhit o'zgaruvchisidan (getenv('ANTHROPIC_API_KEY')) oling. Framework kalitni odatda konfiguratsiya orqali oladi β uni ham .env dan bering, kodga emas. Foydalanuvchi kiritgan matnga ishonmang (20-bob β prompt injection framework'da ham muammo).
To'liq misol: to'g'ridan SDK (taqqoslash uchun)¶
Frameworkning qadrini his qilish uchun, o'sha oddiy ishni β bitta savol-javobni β bizning tasdiqlangan, ishlaydigan asosiy SDK kodi bilan ko'rsatamiz. Bu β frameworkning ostida turadigan "haqiqiy" qatlam. 2-bobdagi birinchi so'rovni eslang:
<?php
require __DIR__ . '/vendor/autoload.php';
use Anthropic\Client;
// API kalit MUHIT O'ZGARUVCHISIDAN β kodga yozma!
$client = new Client(apiKey: getenv('ANTHROPIC_API_KEY'));
$message = $client->messages->create(
model: 'claude-opus-4-8',
maxTokens: 1024,
system: 'Sen foydali PHP yordamchisisan. O\'zbek tilida qisqa javob ber.',
messages: [
['role' => 'user', 'content' => 'RAG nima? Bir jumlada tushuntir.'],
],
);
// Javob bloklaridan matnni o'qiymiz
echo $message->content[0]->text;
Bu β to'liq nazorat: har parametr (model, maxTokens, system) sizning qo'lingizda, hech qanday qatlam yashirmaydi. Framework esa shu kabi chaqiruvni o'rab, sizdan "qaysi model" va "qaysi savol"ni so'raydi, qolganini o'zi qiladi.
Endi g'oyaviy taqqoslash. To'g'ridan SDK bilan ko'p provayderni qo'llab-quvvatlash uchun siz 8-bobdagidek qo'lda "ko'prik" yozasiz:
<?php
// KONTSEPTUAL β frameworksiz provayder-agnostiklik (8-bob fallback g'oyasi)
// Har provayder uchun bitta umumiy interfeys yozasiz va ichini o'zingiz to'ldirasiz.
interface LlmProvayder
{
public function sora(string $savol): string;
}
// Claude uchun amalga oshirish (tasdiqlangan SDK ichida)
final class ClaudeProvayder implements LlmProvayder
{
public function __construct(private Client $client) {}
public function sora(string $savol): string
{
$m = $this->client->messages->create(
model: 'claude-opus-4-8',
maxTokens: 1024,
messages: [['role' => 'user', 'content' => $savol]],
);
return $m->content[0]->text;
}
}
// OpenAI/Gemini uchun ham xuddi shunday klass yozasiz (har biri o'z SDK'si bilan).
// Ilovangiz LlmProvayder interfeysiga tayanadi -> provayderni almashtirish oson.
Mana shu interfeys + amalga oshirish g'oyasi β frameworkning ostidagi asosiy fikr. Framework aynan shuni siz uchun tayyor beradi (ko'p provayder uchun klasslarni o'zi yozib qo'ygan). Demak: agar sizga bittagina provayder kerak bo'lsa β to'g'ridan SDK soddaroq; agar ko'p provayder va tayyor RAG/agent kerak bo'lsa β framework vaqtingizni tejaydi.
Misol β qaror
"Bizning kompaniya FAQ'i bo'yicha chatbot kerak, faqat Claude bilan, lekin nozik prompt sozlash bilan" β to'g'ridan SDK (15-bob RAG + maxsus prompt). "Bir necha provayderni sinab ko'radigan, tez prototip, standart RAG" β framework (LLPhant). "Ko'p qadamli avtomatlashtirish, agent, tool" β framework (Neuron AI).
Xulosa¶
- Muammo: 1-16 boblarda biz suhbat, tool, RAG, kesh β hammasini qo'lda qurdik. Bu o'rganish uchun zarur, lekin katta loyihada takrorlanish va provayderga bog'lanish keltiradi.
- Framework β tayyor, qayta ishlatiladigan bloklar: provayder-agnostik abstraktsiya, tayyor RAG quvuri, agent/workflow, vektor store ulanishi, hujjat o'qish, xotira. "Har taxtani o'zi yo'nish" o'rniga "tayyor mebel yig'ish".
- LLPhant (
theodo-group/llphant) β LangChain uslubidagi framework; OpenAI/Anthropic/Mistral/Ollama; ayniqsa RAG va hujjat bilan ishlash uchun kuchli. - Neuron AI (
neuron-core/neuron-ai) β agentik framework; OpenAI/Anthropic/Gemini/Mistral; provayderni bir qatorda almashtirish, agent, workflow, vektor store, xotira. - Provayder-agnostiklik β markaziy g'oya: kod abstraksiyaga tayanadi, provayderni almashtirish bir qator bo'ladi. Foydasi: narx, sifat, mavjudlik bo'yicha erkin almashtirish.
- Framework vs SDK: framework β tez prototip, kam kod, ko'p provayder, tayyor RAG; to'g'ridan SDK β to'liq nazorat, kam bog'liqlik, yangi imkoniyatga tez kirish. Tanlov vaziyatga bog'liq, ko'pincha ikkalasi ishlatiladi.
- Ogohlantirish: framework β qora quti emas. Ostida nima borligini bilish kerak (shuning uchun avval qo'lda o'rgandik). Bog'liqlik va eskirish xavfini, abstraksiya narxini hisobga oling. Xavfsizlik (kalit, injection) framework'da ham o'z kuchida.
Amaliy mashqlar¶
-
LLPhant bilan RAG (kontseptual reja). Bir A4 hujjatni (masalan, kompaniya FAQ'i) RAG bazaga aylantirish uchun LLPhant quvurining qadamlarini ketma-ket yozib chiqing (o'qish β bo'laklash β embedding β saqlash β so'rov). Har qadam yonida 15-bobdagi qo'lda ekvivalentini ko'rsating. Xulosa: necha qator "qo'lda" kod framework'da necha qatorga qisqaradi? (Kodni LLPhant rasmiy hujjati bo'yicha aniqlashtiring β yoddan yozmang.)
-
Neuron AI agenti (kontseptual reja). Bir agent loyihalang: maqsadi β foydalanuvchi savoliga javob berib, kerak bo'lsa ob-havo va valyuta kursi toollarini chaqirsin. Agar tuzilishini chizing (provayder β tool'lar β xotira) va 11-bobdagi qo'lda agent loop bilan solishtiring. Provayderni
anthropicdan boshqasiga o'zgartirsangiz, qaysi qator(lar) o'zgaradi? -
Framework vs SDK tahlil. Uchta turli loyiha tasvirlang: (a) bitta provayderli nozik chatbot; (b) ko'p provayderli tez MVP; (c) ko'p qadamli avtomatlashtirish agenti. Har biri uchun frameworkmi yoki to'g'ridan SDKmi to'g'ri ekanini tanlang va bu bobdagi jadval mezonlari (tezlik, nazorat, bog'liqlik, yangi imkoniyat) bilan qaroringizni asoslang.
-
Provayder almashtirish (o'z interfeysingiz). Frameworksiz, to'g'ridan SDK ustida
LlmProvayderinterfeysini yozing (sora(string): string) va kamida ikkita amalga oshirish bering:ClaudeProvayder(tasdiqlangan SDK bilan, ishlaydigan) hamda bitta "soxta"EchoProvayder(savolni qaytaradigan β test uchun). Ilovangiz faqat interfeysga tayansin. Endi: bir joyni o'zgartirib provayderni almashtirib ko'ring. Bu mashq frameworkning ostidagi g'oyani his qildiradi. -
Framework faolligini baholash. LLPhant va Neuron AI ning GitHub sahifalarini ochib, har biri uchun: oxirgi commit sanasi, ochiq muammolar soni, qo'llab-quvvatlanadigan provayderlar va vektor bazalar ro'yxatini yozib chiqing. Shu ma'lumotga tayanib, "agar bugun loyiha boshlasam, qaysisini tanlardim va nega?" degan savolga bir paragraf javob yozing.
β¬ οΈ Oldingi: 16 β Kesh va xarajat Β· π Kitob boshi Β· Keyingi: 18 β Laravel integratsiya β‘οΈ