aidoc.uz

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?

A variant: an'anaviy UI
  • Foydalanuvchi maydonlarni to'ldiradi
  • Kirishlar cheklangan va tekshiriladi
  • Bashoratli — aniq qiymatlar
  • Baholash oson
B variant: proksi agent
  • 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.

1. Maqsadni aniqlash
profil nimaga erishishi kerak?
2. Mezonlarni belgilash
aniq, o'lchanadigan o'lchamlar
3. Shkala yaratish
1-5 yoki «A'lo/Yaxshi/O'rta/Yomon»
4. Tavsiflar berish
har daraja nima demak?
5-8. Qo'llash, hisoblash, izchillik, iteratsiya
Rubrika qurish — sakkiz qadam

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 moslik
Javob rubrika mezonlari, maqsadlari va kontekstiga mos keladimi?
2
Mavzuda qolish
Javob mavzudan chetga chiqmaydimi, berilgan ko'rsatmalarga rioya qiladimi?
3
Aniqlik va tegishlilik
Baholovchi 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 natijalar

Endi qaysi variant yaxshiroq ekanini raqam bilan bilasiz — his-tuyg'u bilan emas.


Baholash oqimi#

To'liq jarayon:

1. Test to'plami
30-50 ta savol
2. Variantlar
solishtiriladigan promptlar
3. Har variant javob beradi
test savollariga
4. Rubrika bo'yicha baholash
LLM hakam, temperature=0
5. Ballar solishtiriladi
eng yaxshi variant tanlanadi
6. Iteratsiya
yutgan variantni yana yaxshilash
Prompt baholash oqimi
Amaliy topshiriq

Prompt variantlarini rubrika bilan baholang

Bir vazifa uchun (kod tushuntirish, xat yozish, xulosalash) uch prompt varianti yozing: oddiy, persona bilan, qadamlar bilan.

Keyin:

  1. Rubrika yozing — 3-4 mezon, raqamli shkala bilan
  2. 10-15 test savoli tuzing
  3. baho_ber funksiyasi bilan har variantni baholang (temperature=0!)
  4. 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#

Yodda saqlang
  • 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.