3-qism · Ilg'or imkoniyatlar·09-bob
Prompt flow bilan promptlarni boshqarish
Promptlarni his-tuyg'u bilan emas, o'lchov bilan yaxshilash. Prompt flow, profil variantlari, rubrikalar, grounding va LLM'ni hakam qilib batafsil baholash.
Prompt yozdingiz. U yaxshimi? "Ishlayotgandek ko'rinadi" — bu javob emas.
Bu bob promptlarni tizimli yaxshilashni o'rgatadi: variantlarni solishtirish, rubrika bilan baholash, LLM'ni hakam qilib o'lchash. His-tuyg'u emas — raqam.
Nega tizimli baholash kerak#
Tavsiya beruvchi agentni eslang. Unga "tavsiya ro'yxatini ber" deyish oson. Lekin bu tavsiyalar foydalimi — buni bilish uchun javobni baholash kerak.
Muammo: prompt sifatini aniqlik foizi bilan o'lchab bo'lmaydi. "To'g'ri/noto'g'ri" oddiy holatlar uchun ishlaydi, lekin ko'p holatda javob shunchaki "yaxshi" yoki "yomon" emas — u darajali.
Prompt variantlari#
Birinchi qadam — bir necha variant yaratib, ularni solishtirish.
Misol: tavsiya beruvchi profilning ikki varianti:
# Variant 1: kirishlar USER promptida
variant_1 = """Foydalanuvchiga tavsiya ber.
Mavzu: {mavzu}
Janr: {janr}
Format: {format}"""
# Variant 2: kirishlar SYSTEM promptida
variant_2_system = """Siz {mavzu} bo'yicha {janr} janridagi {format}
formatida tavsiya beruvchi ekspertsiz."""
variant_2_user = "Menga tavsiya ber."Farq nozik — kirishlar system'da yoki user'da. Lekin natija sezilarli farq qilishi mumkin. Buni faqat sinab bilib olasiz.
Kirishlarni tayyorlash: ikki yo'l#
Tavsiya agentiga ma'lumot (mavzu, janr) qanday beriladi?
- Foydalanuvchi maydonlarni to'ldiradi
- Kirishlar cheklangan va tekshiriladi
- Bashoratli — aniq qiymatlar
- Baholash oson
- Proksi agent foydalanuvchi bilan gaplashib ma'lumot yig'adi
- Tabiiy, UI yo'q
- Kuchliroq va kengaytiriladigan
- Ko'proq noma'lumlik — baholash qiyinroq
A cheklangan lekin ishonchli; B tabiiy lekin baholash murakkab. Tanlovingiz baholash usulini belgilaydi — cheklangan kirishlar cheklangan baholash beradi.
Rubrikalar#
Rubrika — ta'limdan olingan tushuncha. O'quvchi ma'lum baho olishi uchun bajarishi kerak bo'lgan tuzilgan mezonlar to'plami.
Xuddi shu narsani prompt baholash uchun ishlatamiz.
Misol: film tavsiyasi rubrikasi:
RUBRIKA = {
"janr_mosligi": {
"tavsif": "Tavsiya so'ralgan janrga qanchalik mos",
"shkala": {
5: "Aynan so'ralgan janr",
3: "Yaqin janr",
1: "Janr umuman mos emas",
},
},
"mavzu_mosligi": {
"tavsif": "Tavsiya mavzuga qanchalik mos",
"shkala": {5: "To'liq mos", 3: "Qisman", 1: "Mos emas"},
},
"aniqlik": {
"tavsif": "Tavsiya haqiqiy va to'g'rimi",
"shkala": {5: "Barcha faktlar to'g'ri", 3: "Ba'zi xatolar", 1: "Ko'p xato"},
},
}Grounding#
Grounding — javob rubrika mezonlariga qanchalik mos kelishini o'lchaydi. Uni promptning kutilgan minimal darajasi deb ham o'ylash mumkin.
- 1
- Mezonlarga moslikJavob rubrika mezonlari, maqsadlari va kontekstiga mos keladimi?
- 2
- Mavzuda qolishJavob mavzudan chetga chiqmaydimi, berilgan ko'rsatmalarga rioya qiladimi?
- 3
- Aniqlik va tegishlilikBaholovchi javobning aniqligini, tegishliligini va standartlarga rioyasini o'lchaydi.
Yaxshi grounded javob — barcha rubrika mezonlariga berilgan kontekstda mos keladi.
LLM'ni hakam qilish#
Endi eng amaliy qism. Rubrikani avtomatik qo'llash uchun LLM'ni hakam qilamiz.
import json
def baho_ber(savol, javob, rubrika, client):
"""LLM javobni rubrika bo'yicha baholaydi."""
mezonlar_matni = "\n".join(
f"- {nom}: {m['tavsif']} (shkala: {m['shkala']})"
for nom, m in rubrika.items()
)
prompt = f"""Quyidagi javobni rubrika bo'yicha bahola.
SAVOL: {savol}
JAVOB: {javob}
RUBRIKA:
{mezonlar_matni}
Har mezon uchun ball ber va sababini yoz.
Natijani QAT'IY JSON formatida qaytar:
{{"janr_mosligi": {{"ball": N, "sabab": "..."}}, ...}}"""
natija = client.chat.completions.create(
model="gpt-4-turbo",
messages=[{"role": "user", "content": prompt}],
temperature=0, # baholash IZCHIL bo'lishi kerak
)
matn = natija.choices[0].message.content
boshi, oxiri = matn.find("{"), matn.rfind("}") + 1
return json.loads(matn[boshi:oxiri])Ikki variantni solishtirish#
Endi ikki profilni ob'ektiv solishtiramiz:
def variantlarni_solishtir(test_savollar, variant_a, variant_b, rubrika, client):
"""Ikki profilni rubrika bo'yicha baholab solishtiradi."""
natijalar = {"a": [], "b": []}
for savol in test_savollar:
# Har variant javob beradi
javob_a = variant_a(savol)
javob_b = variant_b(savol)
# LLM ikkalasini baholaydi
baho_a = baho_ber(savol, javob_a, rubrika, client)
baho_b = baho_ber(savol, javob_b, rubrika, client)
natijalar["a"].append(sum(m["ball"] for m in baho_a.values()))
natijalar["b"].append(sum(m["ball"] for m in baho_b.values()))
print(f"Variant A o'rtacha: {sum(natijalar['a']) / len(natijalar['a']):.2f}")
print(f"Variant B o'rtacha: {sum(natijalar['b']) / len(natijalar['b']):.2f}")
return natijalarEndi qaysi variant yaxshiroq ekanini raqam bilan bilasiz — his-tuyg'u bilan emas.
Baholash oqimi#
To'liq jarayon:
Prompt variantlarini rubrika bilan baholang
Bir vazifa uchun (kod tushuntirish, xat yozish, xulosalash) uch prompt varianti yozing: oddiy, persona bilan, qadamlar bilan.
Keyin:
- Rubrika yozing — 3-4 mezon, raqamli shkala bilan
- 10-15 test savoli tuzing
baho_berfunksiyasi bilan har variantni baholang (temperature=0!)- Natijalarni jadval qilib chizing
Savollar:
- Qaysi variant umumiy yutdi?
- Qaysi variant qaysi mezonda kuchli? (Ba'zan biri aniqlikda, boshqasi tushunarlilikda yutadi)
- Sizning holatingiz uchun qaysi mezon muhimroq?
Maslahatni ko'rsatish
Bir vazifa tanlang (masalan: kod tushuntirish, xat yozish, xulosalash). 1. Uch prompt varianti yozing: - v1: oddiy «X qil» - v2: persona bilan «Siz ekspertsiz, X qil» - v3: qadamlar bilan «1. ..., 2. ..., 3. ...» 2. Rubrika yozing (3-4 mezon), masalan: RUBRIKA = { 'aniqlik': {...}, 'tushunarlilik': {...}, 'to_liqlik': {...}, } 3. 10-15 test savoli tuzing 4. baho_ber funksiyasi bilan har variantni baholang 5. Jadval chizing: variant aniqlik tushunarlilik to_liqlik jami --------------------------------------------------- v1 3.2 3.5 3.0 9.7 v2 4.1 4.3 3.8 12.2 v3 4.5 4.0 4.6 13.1 MUHIM: baho_ber'da temperature=0 ishlating. Savol: qaysi variant qaysi MEZONDA yaxshi? Ba'zan bir variant aniqlikda, boshqasi tushunarlilikda yutadi. Sizga qaysi mezon muhimroq?
Xulosa#
- 01Prompt sifatini aniqlik foizi bilan o'lchab bo'lmaydi — ko'p javob darajali, «yaxshi/yomon» emas. Rubrika kerak.
- 02Variantlarni bir-biriga qarshi sining. Har o'zgarishni alohida sinang — aks holda qaysi biri ta'sir qilganini bilmaysiz.
- 03Rubrika: aniq, o'lchanadigan, maqsadga bog'liq mezonlar. Rubrikasiz baholash — «menga yoqdi». Rubrika bilan — takrorlanadigan o'lchov.
- 04Grounding — javob rubrika mezonlariga qanchalik mos. Promptning kutilgan minimal darajasi.
- 05LLM'ni hakam qiling, lekin temperature=0 bilan — baholash izchil bo'lishi shart.
- 06Yetarli test savoli (30-50) va izchil rubrika bilan promptlarni his-tuyg'u emas, o'lchov asosida yaxshilaysiz.
Keyingi bobda agent fikrlashi va baholashga o'tamiz: to'g'ridan-to'g'ri yechim promptlari, chain-of-thought, self-consistency va tree-of-thought — agentni yaxshiroq fikrlashga majburlash usullari.