DeepSeek Harness’ni maxsus qiladigan hamma narsa Cordis nomli plagin freymvorkidan keladi. Va Cordis harness uchun yozilmagan — u ancha oldin paydo bo‘lgan.
Cordis’ning o‘z tarixi bor: yillar davomida minglab jamoatchilik plaginlari ishlayotgan chat-bot freymvorki aynan uning ustida qurilgan. U o‘z tashkilotida yashaydi va DeepSeek Harness uni oddiy bog‘liqlik (dependency) sifatida tortib oladi. Uning tagidagi akademik maqolani Pekin universiteti va DeepSeek tadqiqotchilari birga yozgan.
Eslatma
Cordis — bu mikroyadro (microkernel). «Yadro» degani markaziy boshqaruvchi degani emas: bu yerda yadro faqat qobiliyatlarni ro‘yxatga oladigan va ularni bog‘laydigan eng kichik qism. Har bir yangi qobiliyat shu yadro ustiga plagin sifatida qo‘shiladi.
Imtiyozli yadro yo‘q
Cordis’ning asosiy g‘oyasi — hech bir qism boshqasining ustida turmaydi. Diagrammadagi har bir qism bitta umumiy kontekstga ro‘yxatdan o‘tadi va istalganini almashtirish mumkin:
| Qism | Vazifasi |
|---|---|
| llm | Model bilan gaplashadi |
| tools | Tool’larni ro‘yxatdan o‘tkazadi |
| permissions | Nima ruxsat etilishini hal qiladi |
| sandbox | Ijroni chegaralaydi |
| session | Nima bo‘lganini yozib boradi |
| agent-loop | Keyingi qadamni hal qiladi |
Diqqat qiling: agent-loop — ya’ni agentning keyingi qadamini hal qiladigan qism — boshqa hech qaysi qismning ustida emas. U ham xuddi llm yoki tools kabi bitta qism, uni ham almashtirish mumkin. Biror qismni olib tashlasangiz, kontekst uni qo‘shishdan oldingi holatiga qaytadi — o‘chirilgan qismdan asar qolmaydi.
Beshta g‘oya
Cordis’ning butun modeli beshta g‘oyaga sig‘adi:
1. Plugin
Plugin — qobiliyat qo‘shadigan obyekt. Boshqa hech narsa emas. Plugin kategoriyalari yo‘q, ular orasida ierarxiya yo‘q.
2. Context
Context — qobiliyatlar ombori. Har bir qobiliyat barqaror nom oladi, boshqalari aniq implementatsiyaga bog‘lanmaydi — shu nom orqali qidiradi. Bu esa qismlarni almashtirishni oson qiladi: nom o‘zgarmaydi, tagidagi qism o‘zgaradi.
3. Dependencies — e’lon qilinadi, tartiblanmaydi
Kerakli narsani e’lon qilgan plugin uni paydo bo‘lguncha kutadi va shundan keyin ishga tushadi. Yuklash tartibi qo‘lda yozilmaydi — bog‘liqliklardan kelib chiqib hosil qilinadi.
4. Events — tiplangan, yuborish usuli e’lon qilingan
Har bir event tinglovchilar (listener) orasida qanday taqsimlanishini e’lon qiladi. Bu taqsimot usuli — event’ning ommaviy shartnomasining bir qismi.
5. Teardown — har bir ro‘yxatdan o‘tkazish o‘zini bekor qilishni biladi
Plugin yukdan tushganda u o‘rnatgan hamma narsa o‘zi olib tashlanadi. Qolgan barcha g‘oyalar aynan shu g‘oyaga tayanadi — bu butun tizimning poydevori.
Ma'lumot
Event’larni tarqatishning to‘rtta rejimi bor: kuzatish (observed), o‘rash (wrapped), parallel tarqatish va tartibda bajarish. Rejim event’ning ommaviy shartnomasining qismi, va generatsiya qilingan katalog e’lonning amalda ishlatilishiga mosligini tekshiradi. Amaliy qoida: har bir ro‘yxatdan o‘tkazishda teardown funksiyasi bo‘lishi kerak; agar o‘chirish tartibi muhim bo‘lsa — bog‘liq ishlar bitta blokga yoziladi.
Bu g‘oyalar ishda: yetti tayanch qism
Cordis g‘oyalari nazariy emas — ularni tizimning o‘zida ko‘rish mumkin. Harness’ni ushlab turgan yetti tayanch qism bor, va ularning har biri kontekstda barqaror nom oladi:
| Qism | Nima qiladi | Kontekst kaliti |
|---|---|---|
| Sessiya jurnali | Bo‘lib o‘tgan hamma narsani yozadi | ctx.sessions |
| Prompt yig‘uvchi | Har so‘rov boshida model ko‘radigan narsani quradi | ctx.systemPrompt |
| Tool registry | Model foydalanishi mumkin narsani tutadi va qo‘riqchilar bilan ishga tushiradi | ctx.tools |
| Agent ta’rifi | Agent nima ekanini tasvirlaydi | ctx.agents |
| Agent loop | Ishni oldinga haydaydi | ctx.agentLoop |
| Model adapter | Ichki lug‘at bilan har bir provayder API’si o‘rtasida tarjima qiladi | ctx.llm |
| Per-agent logging | Agent doirasida kuzatuv izlarini beradi | kalitsiz |
Asosiy xulosa shu jadvalning o‘zida: agent loop, boshqa har qanday mahsulotda daxlsiz yadro bo‘lardi, bu yerda provayder adapteri bilan teng maqomda bitta qism bo‘lib ko‘rinadi.
Ro‘yxat — tayanch, inventar emas. Fayllar, terminallar, til serverlari, veb-ga kirish, subagentlar, fon vazifalari, kontekst siqish va yana bir qancha narsalar uchun alohida qismlar bor.
Amaliy maslahat
Keyingi darslarda uchraydigan `ctx.` prefiksli barcha kalitlar — shu yerda ko‘rsatilgan mexanizmning natijasi. Plugin qismga to‘g‘ridan-to‘g‘ri bog‘lanmaydi, uni kontekst nomi orqali topadi. Shuning uchun bir qismni boshqasiga almashtirish qolganlarini buzmaydi.
Xulosa
Cordis — DeepSeek Harness’ning asosi: hech bir qism boshqasining ustida turmaydigan plagin freymvorki. Uning beshta g‘oyasi — plugin, context, e’lon qilingan bog‘liqliklar, tiplangan event’lar va teardown. Eng muhimi, agent-loop ham boshqa qismlar bilan teng — ya’ni agentning keyingi qadamini hal qiladigan qismni ham almashtirish mumkin. Keyingi darsda bu qismlar mashinada qanday yig‘ilishini ko‘ramiz: profillar, bundle’lar va qatlamlar.