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.
- Kirishdan YANGI narsa yaratadi
- «Fransiya poytaxti nima?» → matn yozadi
- Chat, yozish, kod uchun
- Iteratsiya bilan yaxshilanadi
- 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#
O'rnatish
terminalpip install openai python-dotenvSuccessfully installed openai-1.59.0 python-dotenv-1.0.1 ...Kalitni sozlash
.envfayl yarating (bu fayl hech qachon git'ga tushmasligi kerak):# .env OPENAI_API_KEY='sk-...'.gitignorega qo'shing:.envBirinchi 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 roliSo'rovning qoidalari va yo'riqnomalari. LLM'ning rolini belgilaydi: «Siz Python dasturchisiz». Butun suhbat davomida amal qiladi.
- user
- Foydalanuvchi roliFoydalanuvchidan kelgan xabar. Haqiqiy savol yoki topshiriq.
- assistant
- Assistant roliLLM'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]}...")| Qiymat | Xulq | Qachon |
|---|---|---|
0.0 | Har doim bir xil javob | JSON, kod, aniq ma'lumot |
0.7 | Muvozanatli | Suhbat, umumiy ish |
1.0 | Eng ko'p o'zgaruvchan | Ijodiy 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) # jamiMahalliy modellar: LM Studio#
Tijoriy modellar (GPT-4, Claude) o'rganish uchun ajoyib. Lekin ularning kamchiliklari bor:
- BEPUL — token uchun to'lamaysiz
- MAXFIY — ma'lumot kompyuteringizdan chiqmaydi
- Internetsiz ishlaydi
- Cheklovsiz — xohlagancha so'rov
- 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.
O'rnatish
lmstudio.aidan yuklab oling va operatsion tizimingizga mos o'rnating.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).
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:
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#
- «Kanadaning bosh vaziri kim va saylovlar qanchalik tez-tez o'tkaziladi?»
- Model aniq kontekstni biladi
- To'liq, foydali javob
- «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".
Oltala taktikani sinab, farqni o'lchang
Bitta murakkab vazifa oling (masalan "bu kodni tahlil qil") va oltala taktikani alohida sinang.
Har biri uchun:
- Promptni yozing
- Javobni oling
- Sifatni 1-10 baholang
- 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'lumotiModel nimada o'qitilgan. Butun internet yoki maxsus soha (masalan Python kodi).
- 5
- O'qitish usuliRLHF, instruction tuning. ChatGPT RLHF bilan o'qitilgan.
- 6
- Kontekst hajmiNecha token sig'adi. Uzun agent suhbatlari uchun katta kontekst muhim.
- 7
- TezlikOpenAI «Turbo» modellari tezroq. Mahalliy modellar uchun apparatingizga bog'liq.
- 8
- NarxAPI narxi yoki mahalliy hosting xarajati. Agent bitta savolga ko'p chaqiradi — narx tez o'sadi.
Xulosa#
- 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.