03 β Prompt muhandisligi asoslari¶
β¬ οΈ Oldingi: 02 β Muhit va birinchi so'rov Β· π Kitob boshi Β· Keyingi: 04 β Suhbat va kontekst β‘οΈ
Bu bobda: Modelga qanday gapirsangiz β shunday javob olasiz. Prompt nima ekanligini, system va user prompt farqini, aniqlik tamoyilini, rol berish, few-shot (misol bilan o'rgatish), format so'rash, qadam-baqadam fikrlash, harorat va effort tushunchalarini o'rganamiz. Oxirida bir vazifani "yomon prompt" va "yaxshi prompt" bilan yonma-yon yozib, farqni o'z ko'zingiz bilan ko'rasiz.
Prompt nima?¶
Oldingi bobda biz Claude'ga birinchi so'rovimizni yubordik. O'sha so'rovning ichidagi matn β "Salom, Claude! O'zbek tilida javob ber" β prompt deyiladi.
Prompt β bu siz modelga beradigan ko'rsatma, savol yoki vazifa. Bu modelning kirish ma'lumoti: siz nima yozsangiz, model o'sha matnni o'qib, davomini yozadi.
Hayotiy o'xshatish. Tasavvur qiling, siz juda bilimdon, lekin sizni umuman tanimaydigan yordamchini ishga oldingiz. U dunyodagi deyarli hamma narsani biladi, ammo sizning ayni damdagi maqsadingizni faqat siz aytgan so'zlardan tushunadi. "Hujjat tayyorla" desangiz β qaysi hujjat? Kim uchun? Qanday uslubda? Qancha uzun? Agar buni aytmasangiz, u taxmin qiladi. Prompt β aynan o'sha yordamchiga bergan topshirig'ingiz. Topshiriq qancha aniq bo'lsa, natija shuncha yaxshi.
Shu yerdan kitobning eng muhim tamoyili kelib chiqadi:
Yaxshi savol = yaxshi javob. Model "aqlsiz" emas β u shunchaki siz aytgan narsaga javob beradi. Yomon javob olsangiz, ko'pincha aybdor model emas, balki noaniq prompt.
Prompt muhandisligi (prompt engineering) β bu modeldan eng yaxshi natijani olish uchun promptni to'g'ri yozish san'ati va ko'nikmasi. Bu "sehrli so'zlar" topish emas; bu aniq fikrlash va aniq yozish. Aslida bu β o'z xohishingizni odamga tushuntirishga juda o'xshaydi, faqat tinglovchi β til modeli.
Eslatma
Prompt muhandisligi provayderga bog'liq emas. Bu yerdagi kod Claude (Anthropic PHP SDK) uchun, lekin tamoyillarning hammasi β aniqlik, rol, few-shot, format β OpenAI, Gemini, lokal modellarga ham bir xil ishlaydi. Bir marta o'rgansangiz, hamma joyda foydalanasiz.
System prompt va user prompt¶
Oldingi bobda messages massivi va system parametrini ko'rgan edingiz. Endi ularning roli nimada ekanligini chuqurroq tushunamiz, chunki bu prompt muhandisligining poydevori.
Claude'ga ikki xil "qatlam"da gapirish mumkin:
- System prompt β modelning roli va qoidalari. "Sen kimsan? Qanday javob berasan? Nimani qilma?" degan doimiy ko'rsatma. Bu butun suhbatga taalluqli β go'yo lavozim yo'riqnomasi.
- User prompt β aniq savol yoki vazifa. Foydalanuvchi ayni damda nimani so'rayapti.
Hayotiy o'xshatish. Restoran tasavvur qiling. System prompt β bu oshpazga ish boshlashidan oldin beriladigan yo'riqnoma: "Sen milliy taomlar ustasisan, har taomni o'zbekona uslubda tayyorla, achchiqni kam sol". User prompt β bu mijozning aniq buyurtmasi: "Bitta osh, ikkita choy". Oshpaz har buyurtmani o'sha umumiy yo'riqnoma asosida bajaradi. Yo'riqnomani har safar takrorlash shart emas β u doimiy.
Kodda bu shunday ko'rinadi. system β alohida, eng yuqori darajadagi parametr; messages esa foydalanuvchi savolini saqlaydi:
<?php
require __DIR__ . '/vendor/autoload.php';
use Anthropic\Client;
$client = new Client(apiKey: getenv('ANTHROPIC_API_KEY'));
$javob = $client->messages->create(
model: 'claude-opus-4-8',
maxTokens: 512,
// System prompt β modelning roli va qoidalari (butun suhbatga taalluqli)
system: 'Sen tajribali PHP dasturchisisan. Doim o\'zbek tilida, '
. 'qisqa va aniq javob ber. Kod misol so\'ralsa β toza, ishlaydigan kod ber.',
// User prompt β aniq savol
messages: [
['role' => 'user', 'content' => 'PHP da massivni qanday saralayman?'],
],
);
echo $javob->content[0]->text;
Bu yerda nima bo'ldi:
systemorqali biz modelga kim ekanligini va qanday javob berishini bir marta aytdik.messagesichida esa faqat aniq savol turibdi.- Endi suhbat davom etsa ham (4-bobda ko'ramiz),
systemo'sha qoidalarni eslatib turadi β har savolda takrorlash shart emas.
Maslahat
System prompt'ni "doimiy qoidalar", user prompt'ni "joriy savol" deb ajrating. Suhbat davomida o'zgarmaydigan narsalar (til, ohang, rol, taqiqlar) β system'ga; o'zgaradigan narsa (savolning o'zi) β user'ga. Bu kodingizni ham, modelning javobini ham barqaror qiladi.
Boshqa provayderda
OpenAI'da system prompt messages massivining ichida ['role' => 'system', ...] sifatida yuboriladi. Claude'da esa system β alohida, top-level parametr (messages ichida "system" roli yo'q). G'oya bir xil, faqat joylashuvi farq qiladi.
Aniqlik tamoyili: noaniq prompt β noaniq javob¶
Prompt muhandisligida birinchi va eng kuchli qoida β aniqlik. Model sizning miyangizdagi rasmni ko'rmaydi; u faqat yozgan so'zlaringizni ko'radi. Nimani aniq aytmasangiz, model o'zicha taxmin qiladi β va taxmini siznikidan farq qilishi mumkin.
Bir xil vazifani ikki xil so'rab ko'raylik:
β Yomon prompt:
"Maqola yoz."
β
Yaxshi prompt:
"PHP da xatolarni qanday boshqarish haqida boshlovchilar uchun
qisqa maqola yoz. 3 ta sarlavhali bo'lim bo'lsin, har bo'limda
bitta kod misoli. O'zbek tilida, do'stona ohangda, taxminan
300 so'z."
Birinchi promptda model: qaysi mavzu? Kim uchun? Qancha uzun? Qaysi tilda? β hech narsa bilmaydi. U biror maqola yozadi, lekin sizga kerakligini emas.
Ikkinchi promptda biz mavzu, auditoriya, tuzilma, uzunlik, til va ohangni aniq berdik. Natija ham aniq bo'ladi.
Hayotiy o'xshatish. Taksi haydovchisiga "meni shaharga olib bor" deganingiz bilan "meni Chilonzor 19-kvartal, 5-uyga olib bor" deganingiz β ikki xil natija. Birinchisida haydovchi o'zi bir joyga olib boradi; ikkinchisida β aynan kerakli joyga. Manzilni aniq aytish β sizning vazifangiz.
Aniq prompt yozishning oddiy retsepti β quyidagi savollarga javob bering:
| Savol | Promptga nima qo'shasiz |
|---|---|
| Nima qilish kerak? | Aniq vazifa fe'li: "tarjima qil", "umumlashtir", "tasnifla" |
| Kim uchun? | Auditoriya: "boshlovchilar uchun", "menejer uchun" |
| Qanday ko'rinishda? | Format: ro'yxat, JSON, jadval, abzats |
| Qancha uzun? | "3 jumla", "300 so'z", "5 punkt" |
| Qaysi tilda/ohangda? | "o'zbek tilida", "rasmiy ohangda" |
| Qo'shimcha kontekst bormi? | Kerakli ma'lumot, cheklovlar, misollar |
Ehtiyot bo'ling
"Yaxshi qilib yoz", "professional bo'lsin", "sifatli bo'lsin" kabi so'zlar β aniq emas. Modelga "yaxshi" nima ekanligi ma'lum emas. Buning o'rniga aniq, o'lchanadigan ko'rsatma bering: "har gap 15 so'zdan oshmasin", "texnik atamalardan qoch", "har punktda misol bo'lsin".
Rol berish¶
Aniq promptning eng kuchli usullaridan biri β modelga rol berish. "Sen tajribali PHP dasturchisisan...", "Sen sabr-toqatli o'qituvchisan...", "Sen qattiqqo'l kod tekshiruvchisisan..." kabi.
Nega bu ishlaydi? Model juda ko'p turdagi matnda o'rgangan β dasturchilar yozgan kod, o'qituvchilar tushuntirgan darslar, jurnalistlar yozgan maqolalar. Rol berganingizda, siz modelga qanday uslub va bilim sohasiga yo'naltirishini aytasiz. U o'sha rolga mos javob beradi: dasturchi roli β texnik va aniq; o'qituvchi roli β sodda va sabrli.
Hayotiy o'xshatish. Bir savolni shifokorga ham, do'stingizga ham berishingiz mumkin β javoblar boshqacha bo'ladi. Shifokor tibbiy atamalar bilan, do'stingiz sodda til bilan javob beradi. Rol berish β modelga "ayni damda kim bo'lib gapir" deganingiz.
Rolni odatda system prompt'da beramiz, chunki u butun suhbat davomida o'zgarmasligi kerak:
$javob = $client->messages->create(
model: 'claude-opus-4-8',
maxTokens: 1024,
system: 'Sen 10 yillik tajribaga ega PHP/Laravel dasturchisisan. '
. 'Boshlovchilarga tushuntirayotganda sodda til ishlatasan, '
. 'har tushunchani hayotiy misol bilan ochib berasan, '
. 'kerak bo\'lsa qisqa kod namunasi keltirasan. '
. 'Javoblar o\'zbek tilida bo\'lsin.',
messages: [
['role' => 'user', 'content' => 'Dependency injection nima?'],
],
);
echo $javob->content[0]->text;
Bu yerda rol (10 yillik tajribaga ega PHP/Laravel dasturchi) modelga: texnik aniqlik, boshlovchiga moslik, hayotiy misol va kod namunasini birga bering β degan signal beradi.
Maslahat
Rolni iloji boricha aniq qiling. "Sen yordamchisan" β kuchsiz. "Sen mijozlarga sabr bilan javob beradigan texnik qo'llab-quvvatlash mutaxassisisan, har javobni keyingi qadam bilan yakunlaysan" β kuchli. Rolga qanday gapirishini ham qo'shsangiz, yana ham aniqroq.
Few-shot: misollar bilan o'rgatish¶
Ba'zan vazifani so'z bilan tushuntirgandan ko'ra, bir-ikki misol ko'rsatish osonroq va aniqroq. Bu usul few-shot ("bir necha misol") deyiladi. Promptga 1-3 ta namuna (kirish β kutilgan chiqish) qo'ssangiz, model o'sha naqshni o'rganib, yangi kiritmaga ham o'shanga mos javob beradi.
Hayotiy o'xshatish. Yangi ishchiga vazifa tushuntirayotganda ko'pincha "mana, bittasini men qilib ko'rsatay, keyin sen davom et" deysiz. Bir-ikki namunani ko'rgach, ishchi naqshni tushunadi va o'zi qila boshlaydi. Few-shot β modelga aynan shunday "namuna ko'rsatish".
Faqat so'z bilan tushuntirish β bu zero-shot (misolsiz, "nol misol"). Misol qo'shilsa β few-shot. Murakkab yoki o'ziga xos formatli vazifalarda few-shot ko'pincha aniqroq ishlaydi.
Klassik misol β sharhlarni tasniflash (ijobiy/salbiy/neytral). Avval modelga bir nechta tayyor namuna ko'rsatamiz, keyin yangi sharhni beramiz. Bu yerda namunalarni user va assistant rollari orqali "suhbat" ko'rinishida beramiz β model buni o'tgan misol deb qabul qiladi:
$javob = $client->messages->create(
model: 'claude-opus-4-8',
maxTokens: 16,
// Vazifani qoida sifatida system'ga qo'yamiz
system: 'Sen mijoz sharhlarini "ijobiy", "salbiy" yoki "neytral" '
. 'deb tasniflaysan. Faqat bitta so\'z qaytar, boshqa hech narsa.',
messages: [
// 1-misol (namuna)
['role' => 'user', 'content' => 'Mahsulot zo\'r, juda yoqdi!'],
['role' => 'assistant', 'content' => 'ijobiy'],
// 2-misol (namuna)
['role' => 'user', 'content' => 'Yetkazib berish kechikdi, xafa bo\'ldim.'],
['role' => 'assistant', 'content' => 'salbiy'],
// 3-misol (namuna)
['role' => 'user', 'content' => 'Narxi o\'rtacha, oddiy mahsulot.'],
['role' => 'assistant', 'content' => 'neytral'],
// Endi haqiqiy savol β model naqshga ergashadi
['role' => 'user', 'content' => 'Buyurtma bugun keldi, hammasi joyida.'],
],
);
echo $javob->content[0]->text; // Kutilgan: "ijobiy"
Bu yerda nima sodir bo'ldi:
- System modelga vazifani aytdi: tasnifla, faqat bitta so'z qaytar.
- Uchta
user β assistantjufti modelga naqshni ko'rsatdi: kirish qanday, chiqish qanday bo'lishi kerak. - Oxirgi
userxabari β haqiqiy savol. Model namunalarga qarab, o'shanga mos formatda javob beradi.
Few-shot ayniqsa quyidagilarda foydali:
- Aniq format kerak bo'lganda (faqat bitta so'z, ma'lum ko'rinishdagi javob).
- O'ziga xos vazifa β so'z bilan tushuntirish qiyin, lekin misol bilan oson.
- Izchillik kerak bo'lganda β model har safar bir xil uslubda javob bersin.
Eslatma
Few-shot β bu modelni "o'qitish" emas. Model o'rganmaydi yoki o'zgarmaydi; u shunchaki shu so'rov ichidagi namunalarga qarab naqshni payqaydi. So'rov tugagach, namunalar unutiladi. (Suhbat va xotira haqida 4-bobda batafsil gaplashamiz.)
Maslahat
Misollaringiz sifatli va xilma-xil bo'lsin. Agar barcha namunalar bir xil bo'lsa, model tor naqshga tushib qoladi. 2-4 ta turli misol odatda yetarli β juda ko'p misol token (ya'ni matn bo'lakchasi β model uchun hisob birligi) sarflaydi va har doim ham yaxshilamaydi.
Format so'rash¶
Model matn qaytaradi β lekin o'sha matn qanday ko'rinishda bo'lishini siz boshqarishingiz mumkin. Promptda formatni aniq aytsangiz, model unga amal qiladi:
- "Javobni raqamli ro'yxat shaklida ber."
- "Natijani jadval ko'rinishida chiqar."
- "Faqat 3 ta punkt, har biri bitta jumla."
- "Javob o'zbek tilida bo'lsin."
- "Faqat JSON qaytar, boshqa hech qanday matn yozma."
Bu juda muhim, chunki javobni dasturda ishlatadigan bo'lsangiz, uning ko'rinishi oldindan ma'lum bo'lishi kerak. Masalan, model javobni ro'yxat qilib bersa, siz uni qatorlarga ajratib ishlatasiz.
$javob = $client->messages->create(
model: 'claude-opus-4-8',
maxTokens: 512,
system: 'Sen PHP bo\'yicha yordamchisan. O\'zbek tilida javob ber.',
messages: [
['role' => 'user', 'content' =>
'PHP da o\'zgaruvchi nomlash uchun 5 ta qoidani sanab ber. '
. 'Javobni raqamli ro\'yxat shaklida ber, har qoida bitta qisqa jumla bo\'lsin.'],
],
);
echo $javob->content[0]->text;
Bu yerda biz formatni ham (raqamli ro'yxat), uzunlikni ham (5 ta, har biri bitta jumla) aniq berdik. Natija o'qishga ham, dasturda qayta ishlashga ham qulay bo'ladi.
Hayotiy o'xshatish. Hisobotni "yozib ber" deganingiz bilan "jadval qilib, ustunlarga sana, summa, izoh qo'yib ber" deganingizning farqi katta. Format aytish β tartibni o'zingiz belgilash.
Boshqa provayderda
"Faqat JSON qaytar" deb so'rash β eng keng tarqalgan format talabi. U deyarli har provayderda ishlaydi, lekin model ba'zan JSON atrofiga ortiqcha matn qo'shib yuborishi mumkin. Ishonchli, kafolatlangan JSON kerak bo'lsa β Claude'da strukturali chiqish (outputConfig + model klass) ishlatiladi. Bu 6-bobda to'liq ko'rib chiqiladi; hozircha "format so'rash" β eng sodda usul deb biling.
Qadam-baqadam fikrlash (chain of thought)¶
Murakkab masalalar β mantiqiy jumboqlar, ko'p bosqichli hisob-kitob, sabab-natija tahlili β uchun kuchli usul bor: modelga qadam-baqadam o'ylashini so'rash. Buni inglizcha chain of thought ("fikrlash zanjiri") deyiladi.
Oddiygina "Bu masalani qadam-baqadam yech" yoki "Avval o'ylab ko'r, keyin javob ber" deb qo'shsangiz β model javobni shoshib bermay, oraliq qadamlarni yozib boradi va shu tufayli aniqroq xulosaga keladi.
Hayotiy o'xshatish. Matematik masalani yechayotgan o'quvchi shartni o'qib, darrov javobni aytsa β ko'pincha xato qiladi. Lekin "avval shartni yozaman, keyin formulani, keyin hisoblayman" deb bosqichma-bosqich ketsa β to'g'ri javobga keladi. Model ham xuddi shunday: "ovoz chiqarib o'ylasa", xatosi kamayadi.
$javob = $client->messages->create(
model: 'claude-opus-4-8',
maxTokens: 2048,
messages: [
['role' => 'user', 'content' =>
'Bir do\'konda olma 1 kg 12 000 so\'m, banan 1 kg 18 000 so\'m. '
. 'Mijoz 3 kg olma va 2 kg banan oldi, 100 000 so\'m berdi. '
. 'Qaytim qancha? Qadam-baqadam hisobla, keyin yakuniy javobni ayt.'],
],
);
echo $javob->content[0]->text;
"Qadam-baqadam hisobla" iborasi tufayli model avval har bosqichni (olma narxi, banan narxi, jami, qaytim) yozadi, keyin yakuniy javobni beradi β bu yo'l xatoga kamroq imkon qoldiradi.
Maslahat
Qadam-baqadam fikrlash har savol uchun kerak emas. Oddiy savolda u faqat javobni uzaytiradi va ko'proq token sarflaydi. Uni murakkab, ko'p bosqichli yoki mantiqiy masalalar uchun saqlang.
Eng yangi Claude modellari (Opus 4.8, Sonnet 4.6) bunda yana bir qadam oldinga ketgan: ularda kengaytirilgan fikrlash (extended thinking) imkoniyati bor β model javobdan oldin alohida "fikrlash" bosqichidan o'tadi. Buni quyidagi thinking bo'limida ko'ramiz.
Harorat va effort tushunchasi¶
Bu bo'lim muhim β chunki ko'p eski qo'llanmalarda "harorat"ni o'zgartirish maslahat beriladi, lekin eng yangi Claude modellarida bu o'zgargan.
Harorat (temperature) nima?¶
Harorat (temperature) β modelning javobidagi "tasodifiylik" yoki "ijodkorlik" darajasini boshqaradigan tushuncha:
- Past harorat (masalan, 0 ga yaqin) β model eng ehtimolli, "xavfsiz" so'zlarni tanlaydi. Javob aniq, barqaror, takrorlanadigan. Faktik savollar, kod, tasnif uchun yaxshi.
- Yuqori harorat β model kamroq ehtimolli so'zlarni ham tanlashga moyil bo'ladi. Javob xilma-xil, ijodiy, kutilmagan. Hikoya, g'oya, marketing matni uchun yaxshi.
Hayotiy o'xshatish. Oshpazga "har doim aynan bir xil osh pishir" desangiz β bu past harorat: natija doim bir xil, ishonchli. "Bugun yangicha, ijodiy taom o'ylab top" desangiz β bu yuqori harorat: har safar boshqacha, ba'zan ajoyib, ba'zan g'alati.
MUHIM: eng yangi Claude'da harorat olib tashlangan¶
Mana eng muhim nuqta. Claude Opus 4.8 va Sonnet 4.6 kabi eng yangi modellarda temperature parametri olib tashlangan. Agar siz unga harorat (yoki topP, topK) yuborsangiz β so'rov 400 (xato) bilan rad etiladi.
Buning sababi: bu modellar shu darajada rivojlanganki, "ijodkorlikni" raqam bilan emas, balki promptning o'zi va effort sozlamasi orqali boshqarish ma'qul.
Ehtiyot bo'ling
Eski qo'llanmada temperature: 0.7 kabi kodni ko'rsangiz va uni claude-opus-4-8 da ishlatsangiz β 400 xatosi olasiz. Eng yangi Opus/Sonnet'da haroratni yubormang. (Harorat eski modellarda hali ishlaydi β agar maxsus eski model bilan ishlasangiz, foydalanish mumkin. Lekin bu kitobda biz eng yangi modellarni ishlatamiz.)
Demak, "aniqroq" yoki "ijodiyroq" javob kerak bo'lsa β promptda aytasiz:
- Aniq kerak bo'lsa: "Faqat faktlarga tayan, taxmin qilma, qisqa va aniq javob ber."
- Ijodiy kerak bo'lsa: "Erkin fikrla, bir nechta original variant taklif qil."
Effort β fikrlash chuqurligi¶
Harorat o'rniga eng yangi modellarda effort ("kuch sarfi") tushunchasi keladi. Effort β model masalaga qancha chuqur o'ylashini va qancha resurs sarflashini boshqaradi. To'rt daraja bor: low, medium, high, max.
lowβ tez va arzon; oddiy, tushunarli vazifalar uchun.high/maxβ model chuqurroq fikrlaydi; murakkab, ko'p bosqichli masalalar uchun (lekin sekinroq va qimmatroq).
Effort outputConfig parametri ichida beriladi (top-level emas):
$javob = $client->messages->create(
model: 'claude-opus-4-8',
maxTokens: 2048,
// Effort outputConfig ICHIDA: low | medium | high | max
outputConfig: ['effort' => 'high'],
messages: [
['role' => 'user', 'content' =>
'Quyidagi mantiqiy jumboqni yech: uch do\'st β Ali, Vali va Soli β '
. 'turli kasb egasi (o\'qituvchi, shifokor, muhandis). Ali shifokor emas, '
. 'Vali muhandis emas va o\'qituvchi emas. Kim qaysi kasb egasi?'],
],
);
echo $javob->content[0]->text;
effort: 'high' modelga "shoshilma, chuqurroq o'yla" deydi β murakkab masalalarda foydali.
Adaptiv thinking β model o'zi qaror qilsin¶
Yana bir variant β kengaytirilgan fikrlashni yoqish. Bunda model javobdan oldin alohida ichki "fikrlash" bosqichidan o'tadi. Eng yangi Claude'da buning eng sodda usuli β adaptiv rejim: model masalaning murakkabligiga qarab qancha fikrlashni o'zi hal qiladi.
$javob = $client->messages->create(
model: 'claude-opus-4-8',
maxTokens: 4096,
// Adaptiv thinking β model qancha o'ylashni o'zi hal qiladi
thinking: ['type' => 'adaptive'],
messages: [
['role' => 'user', 'content' =>
'Bu algoritmik masalani qadam-baqadam tahlil qil va yechimini ber: '
. 'massivdagi eng katta ketma-ket o\'suvchi qism ketma-ketligini qanday topaman?'],
],
);
echo $javob->content[0]->text;
Ehtiyot bo'ling
Eski qo'llanmalarda thinking uchun budget_tokens (token byudjeti) ishlatilardi. Eng yangi Opus 4.8'da bu usul ishlamaydi (400 xatosi). Buning o'rniga thinking: ['type' => 'adaptive'] ishlating.
Eslatma
effort, thinking va promptdagi "qadam-baqadam o'yla" β uchalasi ham bitta maqsadga xizmat qiladi: murakkab masalada modelni chuqurroq o'ylashga undash. Oddiy savollarda ularning hojati yo'q va ular faqat token sarflaydi. Vazifaga qarab tanlang.
Eng yaxshi amaliyotlar (checklist)¶
Yuqoridagilarni bitta amaliy ro'yxatga jamlaylik. Yaxshi prompt yozayotganda shu savollardan o'ting:
- Aniq bo'l. Nima, kim uchun, qaysi tilda β hammasini ayt. "Yaxshi qil" emas, o'lchanadigan ko'rsatma.
- Rolni belgila. Modelga kim bo'lib gapirishini ayt (system prompt'da).
- Kontekst ber. Vazifa uchun zarur ma'lumot, cheklov va fonni qo'sh.
- Format ayt. Ro'yxat, jadval, JSON, abzats β javob qanday ko'rinishda bo'lsin.
- Misol ber (few-shot). O'ziga xos yoki formatli vazifada 1-3 namuna ko'rsat.
- Bo'lib-bo'lib so'ra. Murakkab vazifani bitta katta promptga tiqishtirma; qadamlarga ajrat. Kerak bo'lsa "qadam-baqadam o'yla" qo'sh.
- Murakkablikka mos effort tanla. Oddiy β
low; murakkab/mantiqiy βhigh/maxyoki adaptiv thinking. - Test qil va takomillashtir. Birinchi prompt kamdan-kam mukammal bo'ladi. Natijaga qarab promptni yaxshilab boring β bu normal jarayon.
Maslahat
Prompt muhandisligi β bir martalik ish emas, iteratsiya (takror-takror yaxshilash). Promptni yozing, natijani ko'ring, kamchilikni toping, promptni tuzating, yana sinab ko'ring. Eng yaxshi promptlar β bir necha marta sayqallangani.
To'liq misol: yomon prompt vs yaxshi prompt¶
Endi hamma narsani bitta misolda birlashtiramiz. Bir xil vazifa β mijoz sharhini tahlil qilish β ni avval yomon prompt, keyin yaxshi prompt bilan bajarib, farqni ko'ramiz.
Quyidagi PHP skripti ikkala promptni ham yuboradi va javoblarni yonma-yon chiqaradi. (Eslatma: bu yerda haqiqiy API kaliti bo'lsa, ikki xil javob ko'rasiz; biz e'tiborni promptning tuzilishiga qaratamiz.)
<?php
require __DIR__ . '/vendor/autoload.php';
use Anthropic\Client;
$client = new Client(apiKey: getenv('ANTHROPIC_API_KEY'));
$sharh = 'Telefon yaxshi, lekin batareyasi tez tugaydi va narxi qimmat.';
// ββ 1) YOMON prompt: noaniq, rolsiz, formatsiz ββββββββββββββββββ
$yomon = $client->messages->create(
model: 'claude-opus-4-8',
maxTokens: 512,
messages: [
['role' => 'user', 'content' => "Bu sharhni ko'rib chiq: $sharh"],
],
);
// ββ 2) YAXSHI prompt: rol + aniq vazifa + few-shot + format ββββββ
$yaxshi = $client->messages->create(
model: 'claude-opus-4-8',
maxTokens: 512,
// ROL + QOIDA (system)
system: 'Sen mijoz fikrlarini tahlil qiluvchi mutaxassissan. '
. 'Har sharhni tahlil qilib, FAQAT quyidagi formatda javob ber:'
. "\nKayfiyat: <ijobiy|salbiy|aralash>"
. "\nIjobiy jihatlar: <vergul bilan>"
. "\nSalbiy jihatlar: <vergul bilan>"
. "\nQisqa xulosa: <bitta jumla>"
. "\nJavob o'zbek tilida bo'lsin.",
messages: [
// FEW-SHOT: bitta namuna
['role' => 'user', 'content' => 'Sharh: Yetkazib berish tez, lekin qadoq buzilgan edi.'],
['role' => 'assistant', 'content' =>
"Kayfiyat: aralash\n"
. "Ijobiy jihatlar: tez yetkazib berish\n"
. "Salbiy jihatlar: buzilgan qadoq\n"
. "Qisqa xulosa: Tezkor yetkazib berish yoqqan, ammo qadoqlash sifatsiz."],
// HAQIQIY savol
['role' => 'user', 'content' => "Sharh: $sharh"],
],
);
echo "=== YOMON PROMPT JAVOBI ===\n";
echo $yomon->content[0]->text . "\n\n";
echo "=== YAXSHI PROMPT JAVOBI ===\n";
echo $yaxshi->content[0]->text . "\n";
Farqni ko'ring:
| Jihat | Yomon prompt | Yaxshi prompt |
|---|---|---|
| Rol | Yo'q | "mijoz fikrlarini tahlil qiluvchi mutaxassis" |
| Vazifa | Noaniq ("ko'rib chiq") | Aniq (kayfiyat, jihatlar, xulosa) |
| Format | Yo'q β model o'zicha yozadi | Qat'iy belgilangan to'rt qatorli format |
| Misol | Yo'q | Bitta few-shot namuna |
| Natija | Har safar har xil, prognoz qilib bo'lmaydi | Barqaror, dasturda ishlatishga qulay |
Yomon promptda model "yaxshi sharh ekan, foydalanuvchi qanoatlangan ko'rinadi..." kabi erkin, har safar boshqacha matn beradi. Yaxshi promptda esa javob har doim bir xil tuzilmada keladi β buni siz dasturda aniq parse qilib, ma'lumotlar bazasiga yozishingiz mumkin.
Asosiy xulosa. Modelni o'zgartirmadik, savol mavzusi ham o'zgarmadi β faqat promptni yaxshiladik. Natija sifatida sezilarli farq. Mana shu β prompt muhandisligining kuchi.
Tekshirib ko'ring
Yuqoridagi skriptni o'z loyihangizda (2-bobda sozlagan muhitda) ishga tushirib ko'ring. Yomon va yaxshi promptlar javoblarini solishtiring. Keyin "yaxshi" promptga yana bitta few-shot misol qo'shsangiz, javob barqarorligi o'zgaradimi β sinab ko'ring.
Xulosa¶
- Prompt β modelga beradigan ko'rsatma/savol; "yaxshi savol = yaxshi javob". Prompt muhandisligi β natijani yaxshilash uchun aniq fikrlash va aniq yozish ko'nikmasi.
- System prompt β modelning roli va doimiy qoidalari; user prompt β aniq joriy savol. Doimiy narsa system'ga, o'zgaradigan narsa user'ga.
- Aniqlik β eng kuchli qoida: nima, kim uchun, qaysi tilda, qancha uzun, qaysi formatda β hammasini ayting. Noaniq prompt β noaniq javob.
- Rol berish modelni kerakli uslub va bilim sohasiga yo'naltiradi; few-shot (1-3 misol) naqshni ko'rsatib o'rgatadi.
- Format so'rash javobni dasturda ishlatishga qulay qiladi; kafolatlangan JSON kerak bo'lsa β 6-bobdagi strukturali chiqish.
- Qadam-baqadam fikrlash murakkab masalalarda aniqlikni oshiradi.
- Harorat eng yangi Claude (Opus 4.8/Sonnet 4.6)'da olib tashlangan (yuborilsa 400 xato); uning o'rniga prompt +
outputConfig: ['effort' => 'high']+thinking: ['type' => 'adaptive']. - Prompt muhandisligi β iteratsiya: yoz, sinab ko'r, tuzat, yana sina.
Amaliy mashqlar¶
-
Rol berish. Bir savol tanlang (masalan, "REST API nima?"). Uni avval rolsiz, keyin uch xil rol bilan (boshlovchi o'qituvchi, qattiqqo'l senior dasturchi, qiziqarli hikoyachi) system promptda so'rang. Javoblardagi uslub farqini yozib chiqing.
-
Few-shot klassifikator.
user β assistantnamunalari bilan email mavzusini "muhim", "reklama" yoki "shaxsiy" deb tasniflaydigan few-shot prompt yozing. Kamida 3 namuna bering, so'ng 2 ta yangi email mavzusini sinab ko'ring. Modeldan faqat bitta so'z qaytarishini talab qiling. -
Format so'rash. Modeldan "PHP da fayl bilan ishlash"ga oid 5 ta foydali funksiyani jadval ko'rinishida (ustunlar: funksiya nomi, vazifasi, qisqa misol) so'rang. Keyin xuddi shu so'rovni raqamli ro'yxat formatida takrorlang va qaysi biri sizga qulayroq ekanini baholang.
-
Yomon promptni yaxshilash. "Kod yoz" degan yomon promptni oling va uni aniq, to'liq promptga aylantiring: vazifa (qaysi funksiya), til (PHP 8.4), format (izohlar bilan), cheklov (tashqi kutubxonasiz) va auditoriya (boshlovchi) qo'shing. Ikkala promptni ham ishga tushirib, natijani solishtiring.
-
Effort solishtiruvi. Bitta mantiqiy jumboq tanlang. Uni avval
outputConfig: ['effort' => 'low'], keyin'effort' => 'max'bilan yuboring. Javob aniqligi va uzunligida farq bormi β kuzating. (Eslatma: bu mashq haqiqiy API kalitini talab qiladi.)
β¬ οΈ Oldingi: 02 β Muhit va birinchi so'rov Β· π Kitob boshi Β· Keyingi: 04 β Suhbat va kontekst β‘οΈ