
Rizzo Flow nima?
Rizzo Flow — tuzilmagan matn yoki JSON holatini ehtimollarga ega tiplashtirilgan qarorlarga aylantiruvchi ochiq kodli, lokal ishlashga ustuvorlik beradigan tizim. Til modelidan matn yoki JSONʼni tokenma-token yaratishni so‘rash o‘rniga, u to‘g‘ridan-to‘g‘ri ishlov berishdan keyin cheklangan javob harflari to‘plami uchun model ehtimolini o‘qiydi.
Bu dizayn quyidagi kabi qarorlarni qo‘llab-quvvatlaydi:
trueehtimoliga ega mantiqiy javob.- Nomi berilgan variantlar orasidan tanlov, har bir variant uchun ehtimol bilan.
- Tartiblangan mezon darajalari bo‘yicha baho.
- Namunaviy tayanch qiymatlarga asoslangan sonli taxmin.
Rizzo Flow o‘z uskunangizda llama.cpp orqali ishlaydi. U Apple Metal, NVIDIA CUDA, Vulkan, AMD ROCm, Intel SYCL yoki CPUʼda bajarilishni qo‘llashi mumkin. Shuningdek, Jev bilan mos HTTP interfeysini taqdim etadi, bu mos ilovalarga joylashtirilgan xizmat o‘rniga lokal URL manziliga murojaat qilish imkonini beradi.
Rizzo Flow — mustaqil loyiha. U Jev ortidagi interfeys namunasini takrorlaydi, Jevʼning xususiy arxitekturasi yoki o‘qitish jarayonini emas. Ehtimollari o‘zingizning vakillik maʼlumotlaringizda kalibrlamasangiz, kalibrlanmagan bo‘ladi.
Nol tokenli qarorlar qanday ishlaydi?
Har bir so‘rov uchun Rizzo Flow holatni prompt boshiga joylashtiradi va uni bir marta qayta ishlaydi. Keyin savollar umumiy holat keshidan tarmoqlanadi. Har bir mumkin bo‘lgan javob katta harfga moslanadi va tizim faqat ruxsat etilgan harflar uchun logitlarni o‘qiydi.
- Holat matnga aylantiriladi va modelning KV keshiga oldindan to‘ldiriladi.
- Har bir savol cheklangan ko‘p variantli masala sifatida ifodalanadi.
- Bir xil holatga ega savollar mikro-batchlarda baholanadi.
- Ruxsat etilgan javob logitlari softmax yordamida ehtimollarga aylantiriladi.
- Python kodi sxema orqali tekshirilgan mantiqiy, tanlov, baho yoki sonli maʼlumotlarni qaytaradi.
Dekodlash sikli, tanlangan matn, chiqishni tahlil qilish yoki JSONʼni tuzatish mavjud emas. Biroq hosil qilingan tokenlar soni nol bo‘lishi hisoblash ham nol degani emas: holat va savol promptlari baribir model inferensiyasini talab qiladi.
Asosiy imkoniyatlar
- To‘liq lokal ishlash: model inferensiyasi kompyuteringizda amalga oshadi.
- Tiplashtirilgan natijalar: ilovalar yaratilgan matn o‘rniga tuzilgan qiymatlarni oladi.
- Ehtimol taqsimotlari: tanlov va baho natijalari faqat eng katta ehtimolli javobni emas, balki ehtimollarni ham taqdim etadi.
- To‘rtta asosiy primitiv: mantiqiy, tanlov, baho va sonli.
- Ixtiyoriy javobdan voz kechish: asosiy API dalil yetarli emasligi, noaniqlik yoki diapazondan tashqari sonli natija haqida xabar berishi mumkin.
- Umumiy holatni batchda qayta ishlash: bitta so‘rovdagi bir nechta savol holatning KV keshidan qayta foydalanadi.
- Jev bilan mos endpointlar: mavjud mijozlar
/v1/systemoneva/v1/modelsdan foydalanishi mumkin. - Uzun kontekstli model: Spark-X2.5 1,048,576 tagacha tokenli mahalliy kontekstni qo‘llab-quvvatlaydi, biroq Rizzo Flow har bir savol uchun sukut bo‘yicha 8,192 tokenni belgilaydi.
- Lokal vositalar: server playground, interaktiv OpenAPI hujjatlari va Snake namoyishini o‘z ichiga oladi.
Talablar
Rizzo Flowʼni o‘rnatishdan oldin quyidagilar mavjudligiga ishonch hosil qiling:
- Python 3.11 yoki undan yangiroq versiyasi.
- Git.
- Qaramliklar va muhitni boshqarish uchun uv.
- Tanlangan model va ish muhiti uchun yetarli disk maydoni.
Sukut bo‘yicha Spark-X2.5-4B Q8_0 modelini yuklab olish hajmi taxminan 4.4 GB. Ish muhiti yuklamasi platformaga qarab farq qiladi: Macʼda taxminan 11 MB dan CUDA paketi uchun qariyb 570 MB gacha.
Serverni o‘rnatish va ishga tushirish
Reponi klonlang, undagi belgilangan qaramliklarni sinxronlang, sukut bo‘yicha ish muhiti va modelni yuklab oling hamda xizmatni ishga tushiring:
git clone https://github.com/Rizzo-AI-Academy/rizzo-flow
cd rizzo-flow
uv sync --locked
uv run rizzo download
uv run rizzo serve
Yuklab olish buyrug‘i joriy kompyuter uchun rasmiy, oldindan qurilgan llama.cpp paketini tanlaydi, uning SHA-256 nazorat summasini tekshiradi va Spark-X2.5-4B Q8_0ʼni yuklab oladi. Uzilib qolgan yuklamalarni to‘xtagan joyidan davom ettirish mumkin.
Loyiha hujjatlariga ko‘ra, modelni yuklash taxminan o‘n soniya davom etadi. Xizmat tayyor bo‘lgach, quyidagilarni oching:
- Vizual playground uchun
http://127.0.0.1:8017/playground. - Interaktiv OpenAPI hujjatlari uchun
http://127.0.0.1:8017/docs. - Snake namoyishi uchun
http://127.0.0.1:8017/snake.
Playground tayyor misollar, savol tuzuvchisi, ikkala API uchun xom JSON tahrirlagichlari, ehtimol panellari, vaqt tafsilotlari va unga teng cURL buyruqlarini o‘z ichiga oladi. U tashqi so‘rovlarni amalga oshirmaydi va inglizcha hamda italyancha tillar o‘rtasida almashtirilishi mumkin.
Kichikroq modeldan foydalanish
Birinchi yuklab olishni tezlashtirish uchun 1.7B modelini o‘rnating:
uv run rizzo download --size 1.7b
uv run rizzo serve --size 1.7b
1.7B Q8_0 fayli taxminan 1.8 GB hajmda bo‘lib, qariyb ikki baravar tez ishlaydi, ammo README unda aniqlik ancha pastligi haqida ogohlantiradi. Abstention yoqilganda, u yetarli dalil yo‘q variantini tanlashga ham moyil bo‘ladi, shuning uchun uni o‘z ish yuklamangizda sinchiklab tekshiring.
Birinchi qaroringizni qabul qiling
Eng tezkor API testi Jev bilan mos keluvchi POST /v1/systemone endpointidan foydalanadi. Quyidagi so‘rov yordam xabari shoshilinchlikni bildiradimi yoki yo‘qmi, deb so‘raydi:
curl http://127.0.0.1:8017/v1/systemone \
-H 'Content-Type: application/json' \
-d '{
"state": "Help! My payouts have been failing for 3 days.",
"model": "rizzo-latest",
"questions": {
"is_urgent": {
"type": "noul",
"instructions": "Does this convey urgency?"
}
}
}'
noul natijasi noli bilan biri orasidagi son ko‘rinishida ifodalangan “ha” ehtimolidir. So‘rovda rizzo-latest yoki qulay taxallus ishlatilgan bo‘lsa ham, javob haqiqiy mahalliy model identifikatorini qaytaradi.
Bitta so‘rovda bir nechta savol bering
Rizzo Flow bir xil holat bo‘yicha bir nechta savolni baholash uchun mo‘ljallangan. Ularni bitta so‘rovga birlashtirish savollarga holatning KV keshidan birgalikda foydalanish imkonini beradi:
curl http://127.0.0.1:8017/v1/systemone \
-H 'Content-Type: application/json' \
-d '{
"state": "Help! My payouts have been failing for 3 days.",
"model": "rizzo-latest",
"questions": {
"is_urgent": {
"type": "noul",
"instructions": "Does this convey urgency?"
},
"department": {
"type": "choice",
"instructions": "Which team should handle this?",
"criteria": {
"billing": "Payments, invoicing, refunds",
"technical": "Bugs and outages",
"sales": null
}
},
"frustration": {
"type": "score",
"instructions": "How frustrated is the customer?",
"criteria": ["Calm", "Frustrated", "Very angry"]
}
}
}'
Javobda noul uchun “ha” ehtimoli, barcha tanlov variantlari ehtimollari hamda izohi bilan ehtimollik asosida tortilgan ball mavjud bo‘ladi. usage.output_tokens qiymati har doim nolga teng.
Mahalliy qarorlar API’sidan foydalaning
Mahalliy POST /v1/decisions endpointi Rizzo Flow’ning raqamli savollar va abstentionni o‘z ichiga olgan to‘liq funksiyalar to‘plamini taqdim etadi. Uning to‘rtta savol turi quyidagilardan iborat:
boolean: tiplangan qiymat va true ehtimolini qaytaradi.choice: tanlangan variant va barcha variantlarning to‘liq taqsimotini qaytaradi.score: tartiblangan darajalar bo‘yicha ehtimollik asosida tortilgan va normallashtirilgan ballarni qaytaradi.numeric: baho, mediana, tarqalish hamda diapazondan past yoki yuqori bo‘lish ehtimolini qaytaradi.
Anchorlar yordamida raqamli qiymatni baholang
Raqamli savolda o‘sish tartibida joylashgan namunaviy anchorlar belgilanadi. Bu misolda modeldan ko‘rsatilgan to‘ldirish foizini o‘qish so‘raladi:
curl http://127.0.0.1:8017/v1/decisions \
-H 'Content-Type: application/json' \
-d '{
"state": {"measurement": 75, "unit": "percent"},
"questions": {
"fill": {
"type": "numeric",
"instructions": "Read the reported fill percentage.",
"unit": "percent",
"anchors": [
{"value": 0, "description": "Empty"},
{"value": 50, "description": "Half full"},
{"value": 75, "description": "Three quarters full"},
{"value": 100, "description": "Completely full"}
]
}
}
}'
Anchorlar statistik intervallar emas, balki namunaviy qiymatlardir. Qayd etilgan o‘rtacha qiymat eng past va eng yuqori anchorlar orasida qoladi, kvantillar esa ushbu anchorlar bo‘yicha diskret ehtimollik taqsimotini tavsiflaydi.
Abstentionni tushuning
Mahalliy savollarda abstention sukut bo‘yicha yoqilgan. Rizzo Flow ichki “dalil yetarli emas” variantini qo‘shadi, raqamli savollarda esa diapazondan past va yuqori imkoniyatlar ham mavjud. Tanlangan variant va siyosatga qarab, asosiy qiymat null bo‘lishi, status esa insufficient_evidence, out_of_range yoki uncertainni bildirishi mumkin.
Jev bilan mos format abstentiondan foydalanmaydi. Undagi ha/yo‘q natijasi aynan ikkita variant asosida hisoblanadi. Kichikroq 1.7B modelidan mahalliy API orqali foydalansangiz, loyiha tavsiya qilganidek, allow_abstainni false qilib belgilashni ko‘rib chiqing va uning ma’lumotlaringizga ta’sirini tekshiring.
Qarorlarni serversiz ishga tushiring
Skriptlar, testlar yoki bir martalik baholashlar uchun so‘rov faylini bevosita CLI’ga uzating:
uv run rizzo decide examples/ticket.json
Shuningdek, virtual muhitni faollashtirib, uv run prefiksini olib tashlashingiz mumkin:
source .venv/bin/activate
rizzo decide examples/ticket.json
PowerShell’da uni quyidagicha faollashtiring:
.venv\Scripts\activate
Model, kvantlash va qurilmani tanlang
Sukut bo‘yicha konfiguratsiya Spark-X2.5-4B Q8_0’dan foydalanadi. Hujjatlarda ko‘rsatilgan boshqa kvantlash turlari Q4_K_M va BF16:
- 4B Q8_0: taxminan 4.4 GB va sukut bo‘yicha konfiguratsiya.
- 4B Q4_K_M: taxminan 2.6 GB.
- 4B BF16: taxminan 8.2 GB.
- 1.7B Q8_0: taxminan 1.8 GB.
- 1.7B Q4_K_M: taxminan 1.1 GB.
- 1.7B BF16: taxminan 3.4 GB.
Serverni ishga tushirishdan oldin runtime ko‘ra oladigan qurilmalarni tekshiring:
uv run rizzo devices
Shundan so‘ng qurilma oilasini aniq tanlashingiz mumkin:
uv run rizzo serve --device cuda
uv run rizzo serve --device vulkan
uv run rizzo serve --device metal
uv run rizzo serve --device cpu
Nomlangan qurilma oilalari shunchaki tavsiya emas, balki talab hisoblanadi, shuning uchun Rizzo Flow aniq ko‘rsatilgan GPU oilasini CPU’ga jimgina almashtirmaydi. Qo‘shimcha runtime paketlarini alohida yuklab olish mumkin:
uv run rizzo download --only runtime --runtime rocm
uv run rizzo download --only runtime --runtime sycl
uv run rizzo download --only runtime --runtime cpu
Kengaytirilgan sozlamalar va amaliy maslahatlar
Turkumga tegishli savollar
Bir xil holatga oid barcha savollarni bitta so‘rovga joylashtiring. Bu Rizzo Flow dizaynining asosiy qismidir: holat bir marta oldindan to‘ldiriladi, savol qo‘shimchalari esa mikro-turkumlarda baholanadi. Savollarning standart mikro-turkum hajmi to‘rtga teng va uni --batch-size orqali o‘zgartirish mumkin.
uv run rizzo serve --batch-size 8
Kattaroq turkumlar har doim ham yaxshiroq natija bermaydi. Maqsadli qurilmada kechikish va xotira sarfini solishtiring.
Kontekstni ehtiyotkorlik bilan oshiring
Spark-X2.5 tabiiy ravishda bir million tokenlik kontekstni qo‘llab-quvvatlasa-da, server har bir savol uchun standart tarzda 8,192 tokenni belgilaydi. Chegarani --ctx orqali oshiring:
uv run rizzo serve --ctx 32768
KV keshi ishga tushirish vaqtida ajratiladi. 4B modeli uchun README har bir token uchun taxminan 144 KiB, ya’ni standart chegara uchun taxminan 1.4 GiB va 32,000 token uchun 4.8 GiB xotira kerakligini hisoblaydi. Sozlangan chegaradan oshib ketgan kirishlar qisqartirilmaydi, balki rad etiladi. Taxminan 60,000 tokendan oshganda schema.py faylidagi repozitoriyga tegishli 256 KB holat chegarasini ham oshirish kerak.
Mos endpointlarni himoyalash
Jev’ga mos endpointlarda Bearer autentifikatsiyasini talab qilish uchun serverni ishga tushirishdan oldin RIZZO_API_KEY ni belgilang:
export RIZZO_API_KEY="replace-with-a-secret"
uv run rizzo serve
Windows PowerShell’da:
$env:RIZZO_API_KEY = "replace-with-a-secret"
uv run rizzo serve
Autentifikatsiya xatolari HTTP 401 holat kodini qaytaradi. Noto‘g‘ri so‘rov ma’lumotlari HTTP 422 holat kodini qaytarishi mumkin.
Mos mijozni yo‘naltirish
Hosted TypeSafe API uchun ishlab chiqilgan mijoz asosiy URL’ni o‘zgartirish orqali lokal xizmatga yo‘naltirilishi mumkin:
export TYPESAFE_BASE_URL=http://127.0.0.1:8017
Loyiha ushbu muhit o‘zgaruvchisi sozlamasi rasmiy SDK’lar uchun mo‘ljallanganini, ammo ular bilan hali sinovdan o‘tkazilmaganini bildiradi. Interfeys mos keladi, biroq uning ostidagi lokal model Jev emas.
Ishonch va ehtimollarni to‘g‘ri talqin qiling
Mos API’dagi ishonch qiymati variantlar taqsimotining shaklini ifodalaydi. U javobning to‘g‘riligiga oid tasdiqlangan ehtimol emas. Xuddi shuningdek, modelning xom ehtimollari haddan tashqari yuqori yoki boshqa jihatdan noto‘g‘ri kalibrlangan bo‘lishi mumkin.
Qarorlarni vakillik qiluvchi belgilangan ma’lumotlar to‘plamida tekshiring va zarur bo‘lganda ularni amaldagi foydalanish muhitiga moslab kalibrlang. Server kalibrlash faylini --calibration orqali qabul qiladi:
uv run rizzo serve --calibration fit.json
Kalibrlash u moslangan model fayli, runtime, kvantlash va apparat backendiga bog‘liq. CUDA, Vulkan va Metal turlicha yaxlitlashi mumkin, kvantlash esa qaytariladigan ehtimollarni o‘zgartirishi mumkin.
Javob slotlari chegarasiga rioya qiling
Har bir nomzod bitta katta harfga mos keladi, natijada har bir savol uchun ko‘pi bilan 26 ta javob sloti mavjud bo‘ladi. Ichki javobdan voz kechish va diapazon variantlari ham slotlarni egallaydi. Shuning uchun tanlov javobdan voz kechishsiz 26 tagacha, javobdan voz kechish bilan esa 25 tagacha oddiy variantni qo‘llab-quvvatlaydi. Sonli savollarda mavjud tayanchlar kamroq bo‘ladi, chunki diapazondan past, diapazondan yuqori va ixtiyoriy yetarli dalil yo‘q variantlari ham slotlarni egallaydi.
Maxsus model fayli yoki llama.cpp qurilmasidan foydalanish
--model dan foydalanib, serverni muayyan GGUF fayli bilan ishga tushiring:
uv run rizzo serve --model /path/to/model.gguf
Maxsus llama.cpp o‘rnatilmasidan foydalanish uchun RIZZO_LLAMA_DIR ni libllama joylashgan katalogga yo‘naltiring. README llama.cpp’ning 161755f kommitini talab qiladi, chunki bog‘lamalar ushbu versiya sarlavha fayliga bog‘langan.
Snake namoyishini ko‘ring
Lokal Snake sahifasi tiplashtirilgan qarorlar interaktiv ilovani qanday boshqarishi mumkinligini ko‘rsatadi. Har bir harakat doska tavsifi va qonuniy harakatlar ro‘yxati berilgan tanlov savolini o‘z ichiga olgan bitta POST /v1/decisions so‘rovini yuboradi. Sahifa matn yaratmasdan javob ehtimollari, logitlar, vaqt o‘lchovlari va qarorlar jurnalini ko‘rsatadi.
Namoyish yana bir muhim modellashtirish sabog‘ini ko‘rsatadi: kirish ma’lumotlarini ifodalash muhim. README hisobotiga ko‘ra, 4B modeli ASCII to‘rining o‘ziga qaraganda har bir harakat uchun hisoblangan sensorlar bilan ancha yaxshi ishlaydi. Ushbu kuzatuvlar oz sonli norasmiy o‘yinlardan olingan va benchmark sifatida qabul qilinmasligi kerak.
Ishlash tekshiruvlari
Model kelib chiqishi va fayl xeshlarini tekshirish uchun GET /health dan foydalaning. So‘rov va javob sxemalari request.schema.json va response.schema.json fayllarida ham mavjud. Takrorlanadigan joylashtirishlar uchun model, kvantlash, runtime, backend, kontekst sozlamalari va kalibrlashni o‘zgarmas holda saqlang.
README RTX 5060 Ti’da Spark-X2.5-4B Q8_0 bilan qisqa qaror uchun taxminan 50 millisekund kerakligini bildiradi, ammo bu ko‘rsatkich apparat va ish yukiga bog‘liq. Xuddi shu hujjatda Apple Silicon, AMD, Intel, Linux NVIDIA va CPU konfiguratsiyalarining barchasi teng darajada sinovdan o‘tkazilmagani qayd etilgan, shuning uchun kechikish bo‘yicha kutilmalarni belgilashdan oldin o‘z qurilmangizni benchmark qiling.
Xulosa
Rizzo Flow tuzilmagan holatni matn generatsiya qilmasdan, tiplashtirilgan, ehtimolli qarorlarga aylantirish uchun amaliy mahalliy interfeysni taqdim etadi. Playground’dan boshlang, o‘zaro bog‘liq savollarni bitta so‘rovga birlashtiring va raqamli baholar yoki qaror qabul qilishdan tiyilish kerak bo‘lganda native API’dan foydalaning. Ishlab chiqarishda qo‘llashdan oldin aniqlik, kechikish, kalibrlash, kvantlash va backend xatti-harakatlarini haqiqiy ilovangizni aks ettiruvchi ma’lumotlarda sinab ko‘ring.
