aidoc.uz

2-qism · Matn generatsiyasi·03-bob

Xabarlar, rollar va parametrlar

developer/user/assistant rollari; instructions, temperature, max_output_tokens, metadata; suhbatni davom ettirishning ikki usuli va ularning savdo-sotig'i.

Bitta qatorlik input="..." — eng sodda holat. Haqiqiy ilovada esa modelga qanday xatti-harakat qilishi kerakligini aytish, va suhbatni bir necha xabar davomida davom ettirish kerak bo'ladi. Buning uchun rollar, instructions parametri va tarixni boshqarish usullari bor.

1. Uchta rol#

Har bir xabar ikki narsadan iborat: kim aytdi (rol) va nima aytdi (matn). Rollar uchtа:

developer
Tizim ko'rsatmasi
Model qanday xatti-harakat qilishi kerakligini belgilaydi. Foydalanuvchiga ko'rinmaydi. "Sen — mehribon yordamchisan, faqat o'zbek tilida javob ber" kabi.
user
Foydalanuvchi
Haqiqiy odam (yoki sizning dasturingiz) yozgan xabar — savol, buyruq, ma'lumot.
assistant
Model javobi
Modelning avvalgi javobi. Suhbat tarixini qayta yuborayotganda buni ham qo'shasiz — birinchi bobda ko'rganimizdek.
response = client.responses.create(
    model="gpt-4o-mini",
    instructions="Sen — do'stona dasturlash o'qituvchisisan. Faqat o'zbek tilida, sodda misollar bilan tushuntirasan.",
    input="Python'da ro'yxat (list) nima?",
)

instructions — bu developer rolining qulay yo'li: uni alohida parametr sifatida bir marta belgilaysiz, u butun so'rovga tatbiq etiladi.

2. Nega alohida instructions parametri bor#

Texnik jihatdan instructions'ni input massivining boshiga {"role": "developer", "content": "..."} sifatida qo'shish bilan bir xil natija beradi. Lekin instructions alohida parametr sifatida ajratilgan sababi bor: u suhbat tarixi qayta yozilganda ham o'zgarmas holda qoladi va model uni har doim eng yuqori ustuvorlikdagi ko'rsatma sifatida ko'radi. Amaliyotda: instructions'ga xatti-harakat qoidalarini ("qanday ohangda gapirish", "nimani hech qachon qilmaslik"), input'ga esa haqiqiy suhbat mazmunini joylashtiring.

3. Suhbatni davom ettirishning ikki usuli#

1-usul — butun tarixni o'zingiz saqlaysiz:

history = [{"role": "user", "content": "Python'da ro'yxat nima?"}]
 
response = client.responses.create(model="gpt-4o-mini", input=history)
history.append({"role": "assistant", "content": response.output_text})
 
history.append({"role": "user", "content": "Unga qanday element qo'shaman?"})
response = client.responses.create(model="gpt-4o-mini", input=history)

Bu usul — to'liq nazorat: tarixni bazaga saqlashingiz, kerak bo'lsa eski xabarlarni olib tashlashingiz yoki tahrirlashingiz mumkin.

2-usul — serverga saqlashni topshirasiz, previous_response_id orqali:

r1 = client.responses.create(model="gpt-4o-mini", input="Python'da ro'yxat nima?")
 
r2 = client.responses.create(
    model="gpt-4o-mini",
    previous_response_id=r1.id,
    input="Unga qanday element qo'shaman?",
)

Bu holda OpenAI server tomonida oldingi javobni "eslaydi" — siz faqat yangi xabarni yuborasiz. Kodingiz qisqaradi, lekin tarix ustidan nazoratingiz kamayadi (masalan, eski xabarni o'chira olmaysiz, va store parametri false'ga o'rnatilgan bo'lsa bu usul umuman ishlamaydi — pastda ko'ramiz).

1-usul: o'zingiz saqlaysiz
  • Har bir foydalanuvchining tarixini bazada alohida boshqarasiz
  • Eski xabarni tahrirlash yoki o'chirish mumkin
  • Tarixni xulosalash yoki qisqartirish strategiyasini qo'llash oson
2-usul: previous_response_id
  • Kamroq kod — tezkor prototip uchun qulay
  • Tarix ustidan nazorat yo'q — faqat 'davom ettirish' bor
  • store=false bo'lsa ishlamaydi

Ko'p foydalanuvchili real ilova (veb-sayt, mobil ilova) qurayotgan bo'lsangiz — 1-usulni tanlang. Shaxsiy skript yoki tezkor prototip uchun — 2-usul tezroq natija beradi.

4. store parametri — maxfiylik va qonuniy talablar#

Standart holatda OpenAI so'rovingizni va javobni bir muddat serverida saqlaydi (bu previous_response_id'ning ishlashi uchun kerak). Agar loyihangiz maxfiy ma'lumot bilan ishlasa (tibbiy, moliyaviy, shaxsiy ma'lumot), buni o'chirish mumkin:

response = client.responses.create(
    model="gpt-4o-mini",
    input="Maxfiy ma'lumot bor xabar",
    store=False,  # server hech narsani saqlamaydi
)

5. Javobni boshqaruvchi parametrlar#

ParametrNima qiladiOdatiy holat
temperatureTanlov tasodifiyligi — 0 aniq/takrorlanuvchi, 1+ ijodiy1
max_output_tokensJavobning maksimal uzunligi (token hisobida)Model chegarasi
top_ptemperature'ga muqobil — ehtimollik massasining qaysi qismidan tanlash1
metadataSo'rovga o'zingiz biriktiradigan kalit-qiymat juftlik (masalan, user_id)Yo'q

temperature va top_p'ni birga o'zgartirmang — ikkalasi ham bir xil muammoni (tasodifiylik) boshqaradi, ikkalasini birga sozlash natijani bashorat qilib bo'lmaydigan qiladi. Birini tanlang.

# Klassifikatsiya, ma'lumot ajratish — bir xil kirishga bir xil javob kerak
response = client.responses.create(
    model="gpt-4o-mini",
    temperature=0,
    input="Bu sharh ijobiymi yoki salbiy? Faqat 'ijobiy' yoki 'salbiy' deb javob ber: 'Xizmat juda yomon edi.'",
)
 
# Ijodiy yozish — xilma-xillik kerak
response = client.responses.create(
    model="gpt-4o-mini",
    temperature=1.2,
    input="Bahor haqida to'rt qatorlik she'r yoz.",
)

metadata esa modelning javobiga ta'sir qilmaydi — u faqat sizning tomoningizda kuzatuv (analytics) va debug qilish uchun foydali:

response = client.responses.create(
    model="gpt-4o-mini",
    input="Salom!",
    metadata={"user_id": "12345", "sahifa": "bosh-sahifa"},
)

6. max_output_tokens — kesilib qolgan javob#

Agar max_output_tokens juda kichik bo'lsa, javob yarim yo'lda kesiladi — bu xato emas, lekin natija chala bo'ladi. Buni response.status orqali tekshirish mumkin:

response = client.responses.create(
    model="gpt-4o-mini",
    max_output_tokens=20,
    input="Python haqida uzun, batafsil insho yoz.",
)
 
if response.status == "incomplete":
    print("Javob kesildi:", response.incomplete_details.reason)  # "max_output_tokens"

7. Nima noto'g'ri ketishi mumkin#

BelgiSababYechim
Model "eslamayapti" ko'rinadiTarix qayta yuborilmagan1 yoki 2-usuldan foydalanib, tarixni to'g'ri uzating
Har safar butunlay boshqa uslubda javobtemperature juda yuqoritemperature'ni pasaytiring yoki 0 qiling
Javob to'satdan kesiladimax_output_tokens kichikQiymatni oshiring, status'ni tekshiring
previous_response_id xato beradiOldingi so'rov store=False bilan yuborilgan ediTarixni o'zingiz saqlash usuliga o'ting
Amaliy topshiriq

Ikki usulni solishtiring

Uch bosqichli oddiy suhbat yozing: (1) "Salom, mening ismim bor", (2) "Men dasturchiman", (3) "Ismim va kasbim nima edi?" — bu suhbatni avval 1-usul (o'zingiz saqlangan tarix), keyin 2-usul (previous_response_id) bilan amalga oshiring. Ikkala natija bir xil chiqishi kerak.

Maslahatni ko'rsatish

Bir xil uch xabarli suhbatni ikkala usulda ham (o'zingiz saqlagan tarix va previous_response_id) amalga oshiring. Kodning uzunligini va o'qilishini solishtiring — qaysi biri sizning loyihangizga mosroq bo'lardi va nega?