aidoc.uz

1-qism · Asoslar·02-bob

LLM kuchidan foydalanish

OpenAI API bilan ishlash, xabar rollari, token va xarajat, mahalliy modellar (LM Studio) va prompt muhandisligining oltita aniq taktikasi — kod bilan.

Agent qurishning har qanday yo'li bitta narsadan boshlanadi: LLM'ga so'rov yuborish va javob olish. Bu bob shu poydevorni quradi.

Generativ va bashoratli modellar#

Avval bir farqni aniqlaymiz. LLM'lar — generativ modellar. Ular kontentni bashorat qilmaydi yoki tasniflmaydi, balki yaratadi.

Generativ model (LLM)
  • Kirishdan YANGI narsa yaratadi
  • «Fransiya poytaxti nima?» → matn yozadi
  • Chat, yozish, kod uchun
  • Iteratsiya bilan yaxshilanadi
Bashoratli / tasniflovchi model
  • Kirishni TASNIFLAYDI
  • «Bu sharh ijobiymi?» → yorliq beradi
  • Klassifikatsiya, bashorat uchun
  • Bitta javob beradi, iteratsiyasiz

Agentlar uchun bizga aynan generativ, «chat completions» turidagi modellar kerak — ular iteratsiya, fikrlash va reja tuzishda eng yaxshi ekani isbotlangan.


OpenAI API bilan ishlash#

Ko'p agent loyihalari OpenAI API SDK'sini ishlatadi. Bu standart bo'lmasa ham, uning naqshi de-fakto standartga aylangan — shuning uchun uni tushunish muhim.

Birinchi ulanish#

  1. O'rnatish

    terminal
    pip install openai python-dotenv
    Successfully installed openai-1.59.0 python-dotenv-1.0.1 ...
  2. Kalitni sozlash

    .env fayl yarating (bu fayl hech qachon git'ga tushmasligi kerak):

    # .env
    OPENAI_API_KEY='sk-...'

    .gitignore ga qo'shing:

    .env
    
  3. Birinchi so'rov

    import os
    from openai import OpenAI
    from dotenv import load_dotenv
     
    load_dotenv()                                    # .env dagi sirlarni yuklaydi
    api_key = os.getenv("OPENAI_API_KEY")
     
    if not api_key:
        raise ValueError("API kalit topilmadi. .env faylni tekshiring.")
     
    client = OpenAI(api_key=api_key)
     
     
    def sora(matn):
        javob = client.chat.completions.create(
            model="gpt-4-turbo",
            messages=[
                {"role": "system", "content": "Siz foydali yordamchisiz."},
                {"role": "user", "content": matn},
            ],
            temperature=0.7,
        )
        return javob.choices[0].message.content
     
     
    print(sora("Fransiya poytaxti qaysi shahar?"))
    # Fransiya poytaxti — Parij.

So'rov va javob tuzilishi#

Uch rol#

Chat completions so'rovida xabarlar uch rolga bo'linadi. Bu tushunchani puxta bilib oling — barcha agent tizimlari shunga tayanadi.

system
Tizim roli
So'rovning qoidalari va yo'riqnomalari. LLM'ning rolini belgilaydi: «Siz Python dasturchisiz». Butun suhbat davomida amal qiladi.
user
Foydalanuvchi roli
Foydalanuvchidan kelgan xabar. Haqiqiy savol yoki topshiriq.
assistant
Assistant roli
LLM'ning oldingi javoblari. Suhbat tarixini saqlaydi. Yoki — sun'iy tarix kiritish uchun (model biror narsani «avval aytgandek» ko'rsatish).

Suhbat tarixi#

Model xotirasiz. Har so'rovda butun suhbatni yuborasiz — uch rol aralashib:

suhbat = [
    {"role": "system", "content": "Siz foydali yordamchisiz."},
    {"role": "user", "content": "Fransiya poytaxti nima?"},
    {"role": "assistant", "content": "Fransiya poytaxti — Parij."},
    {"role": "user", "content": "U haqda qiziq fakt ayt."},      # model kontekstni biladi
]
 
javob = client.chat.completions.create(
    model="gpt-4-turbo",
    messages=suhbat,
    temperature=0.7,
)

Ikkinchi savolda "nima haqda" demadik — chunki tarix yuborildi. Model assistant rolidagi oldingi javobni ko'rib, "u" so'zi Parijga ishora qilishini tushunadi.

Temperatura#

temperature javobning tasodifiyligini boshqaradi:

for temp in [0.0, 0.7, 1.0]:
    javob = client.chat.completions.create(
        model="gpt-4-turbo",
        messages=[{"role": "user", "content": "Menga sabr haqida o'rgat"}],
        temperature=temp,
    )
    print(f"temp={temp}: {javob.choices[0].message.content[:60]}...")
QiymatXulqQachon
0.0Har doim bir xil javobJSON, kod, aniq ma'lumot
0.7MuvozanatliSuhbat, umumiy ish
1.0Eng ko'p o'zgaruvchanIjodiy yozish

Javobdagi ma'lumot#

Javob shunchaki matn emas — unda foydali metama'lumot bor:

javob = client.chat.completions.create(...)
 
print(javob.choices[0].message.content)          # matn
print(javob.choices[0].finish_reason)            # "stop" — normal tugadi
print(javob.usage.prompt_tokens)                 # kirish tokenlari
print(javob.usage.completion_tokens)             # chiqish tokenlari
print(javob.usage.total_tokens)                  # jami

Mahalliy modellar: LM Studio#

Tijoriy modellar (GPT-4, Claude) o'rganish uchun ajoyib. Lekin ularning kamchiliklari bor:

Mahalliy model (LM Studio)
  • BEPUL — token uchun to'lamaysiz
  • MAXFIY — ma'lumot kompyuteringizdan chiqmaydi
  • Internetsiz ishlaydi
  • Cheklovsiz — xohlagancha so'rov
Tijoriy API (GPT-4, Claude)
  • Pullik — har token uchun to'lov
  • Ma'lumot tashqi serverga ketadi
  • Internet kerak
  • Sifat ancha yuqori

O'rganish va tajriba uchun mahalliy model — arzon va maxfiy. Ishlab chiqarish sifati kerak bo'lsa — tijoriy API. Ko'p loyiha ikkalasini birga ishlatadi.

LM Studio — bepul dastur (Windows, Mac, Linux), modelni yuklab, mahalliy ishga tushiradi.

  1. O'rnatish

    lmstudio.ai dan yuklab oling va operatsion tizimingizga mos o'rnating.

  2. Model tanlash

    Ajoyib xususiyat: LM Studio kompyuteringizni tahlil qiladi va qaysi model ishlashini aytadi. "Compatibility Guess" tugmasi modelning sizning tizimingizda ishlashini ko'rsatadi.

    Chat completions uchun mo'ljallangan modelni tanlang (masalan Mistral, Llama, Qwen).

  3. Server sifatida ishga tushirish

    Model yuklangach, uni server rejimida ishga tushiring. LM Studio OpenAI bilan mos API beradi — ya'ni kodni deyarli o'zgartirmasdan ishlatasiz:

    from openai import OpenAI
     
    # Faqat base_url o'zgaradi — qolgani bir xil
    client = OpenAI(
        base_url="http://localhost:1234/v1",     # LM Studio serveri
        api_key="lm-studio",                      # istalgan matn — tekshirilmaydi
    )
     
    javob = client.chat.completions.create(
        model="local-model",                      # LM Studio'da yuklangan model
        messages=[{"role": "user", "content": "Salom!"}],
        temperature=0.7,
    )
    print(javob.choices[0].message.content)

Prompt muhandisligi#

Prompt — so'rovdagi xabar mazmuni. Prompt muhandisligi — yaxshiroq javob olish uchun promptlarni tuzish usullari.

OpenAI oltita strategiyani hujjatlashtirgan. Kitob ularni boblar bo'yicha taqsimlaydi:

Aniq ko'rsatma yozing
aniq bo'ling — bu bob
asoslar
Ma'lumot manbasi bering
to'qishni kamaytiradi
8-bob (RAG)
Tashqi asboblardan foydalaning
qidiruv, kod ishga tushirish
8-bob
Murakkab vazifani bo'ling
xatoni kamaytiradi
11-bob
Modelga «o'ylash» vaqti bering
ishonchli fikrlash
10-11 bob
O'zgarishlarni tizimli sinang
yaxshilanish haqiqiyligini tekshiradi
9-bob
OpenAI prompt strategiyalari — qaysi bob qamraydi

Bu bobda birinchi strategiya — aniq ko'rsatma yozishni to'liq ko'ramiz. G'oyasi oddiy:

LLM'dan vazifa so'rash — odamdan so'rash bilan bir xil. Qancha ko'p aniq ma'lumot bersangiz, javob shuncha yaxshi.

Bu strategiya oltita taktikaga bo'linadi.

1. Batafsil so'rovlar#

Batafsil so'rov
  • «Kanadaning bosh vaziri kim va saylovlar qanchalik tez-tez o'tkaziladi?»
  • Model aniq kontekstni biladi
  • To'liq, foydali javob
Yalang'och so'rov
  • «Bosh vazir kim?»
  • Qaysi mamlakat? Qachon?
  • Model taxmin qiladi, ko'pincha noto'g'ri

Qoida: iloji boricha ko'proq detal bering. Umuman olganda, ko'proq detal — yaxshiroq javob.

2. Persona qabul qilish#

Modelga rol bering — demografiya, bilim, shaxsiyat:

messages = [
    {
        "role": "system",
        "content": "Siz prompt bo'yicha ekspertsiz va foydalanuvchi "
                   "so'rovini yaxshilash yo'llarini taklif qilasiz.",
    },
    {"role": "user", "content": "Kanadaning poytaxti nima?"},
]

Bu javobning ohangi va chuqurligini o'zgartiradi. "Siz bolalar shifokorisiz" va "Siz tibbiyot professorisiz" — bir xil savolga butunlay boshqa javob beradi.

3. Ajratkichlar (delimiters) ishlatish#

Kontentni ko'rsatmadan ajrating — bu chalkashlikni oldini oladi:

prompt = '''Uch tirnoq bilan ajratilgan matnni limerik (she'r) bilan xulosalang:
 
"""
Bu yerga xulosalanadigan matn keladi. U uzun bo'lishi mumkin va
ko'rsatmalar bilan aralashib ketmasligi kerak.
"""'''

4. Qadamlarni ko'rsatish#

Murakkab vazifani aniq qadamlarga bo'ling:

messages = [
    {
        "role": "system",
        "content": """Foydalanuvchi kiritgan matnga quyidagi qadamlar bilan javob bering:
 
Qadam 1 - Uch tirnoqdagi matnni bitta jumlada xulosalang.
          Boshiga "Xulosa: " qo'ying.
Qadam 2 - 1-qadamdagi xulosani ingliz tiliga tarjima qiling.
          Boshiga "Tarjima: " qo'ying.""",
    },
    {"role": "user", "content": '"""xulosalanadigan va tarjima qilinadigan matn"""'},
]

5. Misollar berish (few-shot)#

Bu — few-shot learningning bir shakli. Javob formatini ko'rsatishning eng yaxshi usuli:

messages = [
    {"role": "system", "content": "Izchil uslubda javob bering."},
    {"role": "user", "content": "Menga sabr haqida o'rgat."},
    {
        "role": "assistant",
        "content": "Eng chuqur vodiyni o'ygan daryo kamtar buloqdan boshlanadi; "
                   "eng murakkab gilam yagona ipdan boshlanadi.",
    },
    {"role": "user", "content": "Menga okean haqida o'rgat."},      # model uslubni taqlid qiladi
]

Model birinchi javobdagi metaforik uslubni ko'rib, ikkinchi savolga ham xuddi shunday javob beradi. Hech qanday "shunday uslubda yoz" demadik — misol o'zi ko'rsatdi.

6. Chiqish uzunligini belgilash#

prompt = """Uch tirnoqdagi matnni taxminan 50 so'zda xulosalang.
 
\"\"\"xulosalanadigan matn\"\"\""""

Uzunlikni so'z, punkt yoki boshqa o'lchov bilan cheklash mumkin: "3 ta punkt", "bir jumla", "100 so'zdan oshmasin".

Amaliy topshiriq

Oltala taktikani sinab, farqni o'lchang

Bitta murakkab vazifa oling (masalan "bu kodni tahlil qil") va oltala taktikani alohida sinang.

Har biri uchun:

  1. Promptni yozing
  2. Javobni oling
  3. Sifatni 1-10 baholang
  4. Token sonini yozib boring

Keyin savollarga javob bering:

  • Qaysi taktika eng katta yaxshilanish berdi?
  • Qaysi biri eng ko'p token yedi?
  • Taktikalarni birlashtirsangiz (persona + qadamlar + ajratkich) natija yaxshilanadimi?
Maslahatni ko'rsatish

Test uchun bitta murakkab vazifa oling, masalan: «Ushbu kod nima qiladi va uni qanday yaxshilash mumkin?» Har taktika uchun alohida prompt yozing va natijani solishtiring: 1. Yalang'och: «bu kodni tushuntir» 2. Batafsil: «bu Python funksiyasini qatorma-qator tushuntir, vaqt murakkabligini ayt» 3. Persona: system=«siz senior code reviewer» 4. Ajratkich: kodni ``` ichiga oling 5. Qadamlar: «1-qadam: tushuntir, 2-qadam: muammolarni top, 3-qadam: tuzat» 6. Misol: bitta yaxshi tahlil namunasi bering Har javobning sifatini 1-10 baholang va token sonini yozing. Qaysi taktika eng katta farq berdi? Bonus: taktikalarni BIRLASHTIRING (persona + qadamlar + ajratkich). Natija yig'indidan yaxshiroqmi?


To'g'ri LLM'ni tanlash#

Agent quruvchi bo'lish LLM'ni chuqur bilishni talab qilmaydi — protsessor qanday qurilishini bilmasangiz ham kompyuterdan foydalanasiz. Lekin spetsifikatsiyalarni baholay olish foydali.

Sakkizta mezon:

1
Ishlash (performance)
Model berilgan vazifalarda qanchalik yaxshi. Kod agenti quryapsizmi? Kodda yaxshi ishlaydigan model kerak.
2
Parametr soni (hajm)
Odatda katta model umumiy vazifalarda yaxshiroq. Lekin har doim emas — Chinchilla darsini eslang.
3
Turi (use case)
Chat completions, instruct, completions. Agentlar uchun — chat completions.
4
O'quv ma'lumoti
Model nimada o'qitilgan. Butun internet yoki maxsus soha (masalan Python kodi).
5
O'qitish usuli
RLHF, instruction tuning. ChatGPT RLHF bilan o'qitilgan.
6
Kontekst hajmi
Necha token sig'adi. Uzun agent suhbatlari uchun katta kontekst muhim.
7
Tezlik
OpenAI «Turbo» modellari tezroq. Mahalliy modellar uchun apparatingizga bog'liq.
8
Narx
API narxi yoki mahalliy hosting xarajati. Agent bitta savolga ko'p chaqiradi — narx tez o'sadi.

Xulosa#

Yodda saqlang
  • 01Agentlar uchun chat completions turidagi generativ modellar kerak — ular iteratsiya, fikrlash va rejada eng yaxshi.
  • 02Uch rol: system (qoidalar), user (savol), assistant (tarix). Model xotirasiz — har so'rovda butun suhbat yuboriladi.
  • 03temperature javob tasodifiyligini boshqaradi. JSON yoki aniq javob kerak bo'lsa 0 qo'ying — eng ko'p unutiladigan sozlama.
  • 04Har chaqiruvda usage'ni loglang — token soni to'g'ridan-to'g'ri narx. tiktoken emas, provayder o'lchovini ishlating.
  • 05Mahalliy model (LM Studio) bepul va maxfiy. OpenAI mosligi tufayli faqat base_url o'zgaradi.
  • 06Aniq ko'rsatma — birinchi va eng muhim strategiya. Oltita taktika: batafsil so'rov, persona, ajratkich, qadamlar, misol, uzunlik.

Keyingi bobda GPT Assistants bilan ishlaymiz — OpenAI'ning tayyor agent platformasi. Kod yozmasdan, hujjat yuklab, maxsus harakatlar qo'shib agent qurishni ko'ramiz.