1-qism · Boshlash·01-bob
OpenAI API nima va qanday ishlaydi
API kaliti, so'rov-javob modeli, narxlash mantig'i va mahsulot quruvchi sifatida bilishingiz kerak bo'lgan asosiy tushunchalar.
ChatGPT'ni brauzerda ochib savol berish bilan, o'z dasturingizdan OpenAI modeliga murojaat qilish — ikki xil narsa. Birinchisida siz mahsulotdan foydalanasiz, ikkinchisida esa infratuzilmadan: sizning kodingiz to'g'ridan-to'g'ri modelga so'rov yuboradi va javobni raqamli formatda oladi, uni istalgan interfeysga (veb-sayt, bot, mobil ilova, buyruqlar qatori, hatto boshqa dastur) joylashtirasiz.
1. API nima ekanini tushunish#
API (Application Programming Interface) — ikki dastur o'rtasidagi "muloqot shartnomasi". Siz internet orqali (HTTPS) OpenAI serveriga so'rov yuborasiz, u esa belgilangan formatda javob qaytaradi. Texnik jihatdan bu shunchaki HTTP so'rov — hech qanday maxfiy protokol emas:
curl https://api.openai.com/v1/responses \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-mini",
"input": "Toshkentda bugun ob-havo qanday bo'lishi mumkinligi haqida bitta gap yoz."
}'Python yoki JavaScript'da ishlatadigan "kutubxonalar" (SDK'lar) — shu HTTP so'rovlarni siz uchun qulayroq qiladigan qobiq, xolos. Ular ichida hech qanday sehr yo'q: xato tutish, qayta urinish, tipларни tekshirish kabi qulayliklarni qo'shadi, lekin tagida baribir shu HTTP so'rov yotadi.
- URL
- https://api.openai.com/v1/...Har bir imkoniyat (matn, rasm, ovoz, embedding) o'zining alohida yo'lida (endpoint) joylashgan.
- Header
- Authorization: Bearer sk-...Sizni tanituvchi API kalit — har bir so'rovda majburiy.
- Body
- JSON obyektSo'rovning o'zi: qaysi model, qanday kirish, qanday parametrlar.
- Javob
- JSON obyektModel natijasi, foydalanilgan token soni, so'rov holati.
2. Rasmiy SDK'lar — qaysi tilda ishlasangiz ham bor#
OpenAI o'zi bir nechta tilda rasmiy kutubxona qo'llab-quvvatlaydi, jamoa esa yana ko'plab tillar uchun kutubxona yozgan:
| Til | O'rnatish |
|---|---|
| Python | pip install openai |
| Node.js / TypeScript | npm install openai |
| .NET | dotnet add package OpenAI |
| Java | Maven/Gradle orqali com.openai:openai-java |
| Go | go get github.com/openai/openai-go |
Bu kitobda Python va JavaScript'ga urg'u beramiz, chunki ular eng ko'p ishlatiladi va misollarni boshqa tillarga moslashtirish oson — mantiq har qanday tilda bir xil qoladi, faqat sintaksis farq qiladi.
3. API kaliti — eshikning kaliti#
API kaliti — sizni tanitadigan maxfiy satr (sk-... bilan boshlanadi). Uni
platform.openai.com saytida, "API keys"
bo'limida yaratasiz. Kalit — parol bilan barobar:
- Hech qachon kodga qattiq yozib qo'ymang (
api_key = "sk-...") — bu GitHub'ga tasodifan yuklab yuborilgan minglab kalitlarning sababi. - Uni
.envfaylida yoki muhit o'zgaruvchisida (environment variable) saqlang. .envfaylini.gitignore'ga qo'shing — Git tarixiga tushib qolsa, kalitni bekor qilishdan boshqa chora yo'q (Git tarixini "tozalash" amalda juda qiyin va ishonchsiz).
# .env fayli
OPENAI_API_KEY=sk-proj-...import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])Agar OPENAI_API_KEY muhit o'zgaruvchisi allaqachon o'rnatilgan bo'lsa,
OpenAI()'ni argumentsiz chaqirsangiz ham ishlayveradi — kutubxona uni
avtomatik topadi.
4. Loyihalar va tashkilotlar (Organizations & Projects)#
Hisobingiz kattalashgani sari (bir nechta loyiha, bir nechta jamoa a'zosi), kalitlarni tartibga solish kerak bo'ladi. OpenAI ikki darajali tuzilma taklif qiladi:
Amaliy foyda: sinov (test) va ishlab chiqarish (production) uchun alohida loyiha va alohida kalit yarating. Shunda sinov paytida qilingan xato so'rovlar ishlab chiqarish xarajati va limitiga aralashmaydi, va kerak bo'lganda faqat bitta loyihaning kalitini bekor qilib, boshqalariga tegmasdan muammoni izolyatsiya qilish mumkin.
5. Nima uchun to'laysiz — token iqtisodi#
Model matnni token deb ataladigan bo'laklarga bo'lib qayta ishlaydi (bu haqda "Til modeli qanday ishlaydi" bobida batafsil yozganmiz). Narx ikki qismdan iborat:
| Qism | Nima uchun to'lanadi |
|---|---|
| Input token | Siz yuborgan barcha matn — tizim ko'rsatmasi, suhbat tarixi, savol |
| Output token | Model qaytargan javob |
Ba'zi modellarda uchinchi tushuncha ham bor — cached input token: agar so'rovingizning boshlang'ich qismi (masalan, uzun tizim ko'rsatmasi) oldingi so'rovlar bilan bir xil bo'lsa, model uni qaytadan "o'qimay", keshdan foydalanishi mumkin — bu input narxining bir qismini sezilarli arzonlashtiradi. Buning ishlashi uchun maxsus hech narsa qilish shart emas — takrorlanuvchi qismni har safar so'rov boshida bir xil tartibda joylashtirsangiz kifoya.
Har bir model uchun 1 million tokenning narxi turlicha, va vaqt o'tishi bilan o'zgaradi — shuning uchun bu kitobda aniq dollar raqamlarini keltirmaymiz. Har doim platform.openai.com/docs/pricing sahifasidan joriy narxni tekshiring. Amaliy qoida shunday:
- Kichikroq, tezroq modellar (masalan,
gpt-4o-minioilasi) — oddiy vazifalar, klassifikatsiya, ko'p sonli parallel so'rovlar uchun arzon va yetarli. - Kattaroq modellar — murakkab fikrlash, uzun kontekst, nozik nuanslarni talab qiladigan vazifalar uchun.
Ishlab chiqarishga chiqarishdan oldin qaysi model kerakligini narx/sifat nisbati bo'yicha sinab ko'ring — ko'pincha eng qimmat model shart emas.
6. So'rov-javob aylanishi (request lifecycle)#
Har bir API chaqiruvi besh qadamdan iborat:
So'rov tuzasiz
Qaysi model, qanday kirish (input) va qanday parametrlar (masalan, ijodkorlik darajasi) kerakligini belgilaysiz.
HTTPS orqali yuborasiz
So'rov OpenAI serveriga boradi, sizning API kalitingiz orqali tanilasiz. Ulanish har doim shifrlangan (HTTPS) — matn tarmoq orqali ochiq holda yurmaydi.
Model ishlaydi
Server sizning navbatingizni oladi, modelni ishga tushiradi, token-bo'lak javob generatsiya qiladi.
Javob qaytadi
To'liq JSON obyekt (yoki oqim — buni 4-bobda ko'ramiz) sifatida javob kelib tushadi: matn, foydalanilgan token soni, to'xtash sababi.
Siz qayta ishlaysiz
Javobni foydalanuvchiga ko'rsatasiz, bazaga yozasiz yoki keyingi so'rovga kontekst sifatida qo'shasiz.
7. Har bir javobda keladigan "yashirin" ma'lumot#
response.output_text'dan tashqari, har bir javobda debug qilish uchun
foydali maydonlar bor:
response = client.responses.create(model="gpt-4o-mini", input="Salom!")
print(response.id) # "resp_abc123..." — shu so'rovning noyob ID'si
print(response.created_at) # so'rov qachon yaratilgani (Unix vaqt tamg'asi)
print(response.status) # "completed", "incomplete" yoki "failed"
print(response.model) # aslida qaysi model ishlaganiresponse.id'ni loglaringizda saqlab boring. Agar kelajakda OpenAI'ga
qo'llab-quvvatlash so'rovi yuborsangiz yoki xatoni tekshirsangiz, aynan shu
ID orqali "qaysi so'rov" ekanini aniq ko'rsatish mumkin — "kecha soat 3 da
biror narsa ishlamadi" deyishdan ancha ishonchli.
8. Nima aniq kelmaydi (keng tarqalgan noto'g'ri tushuncha)#
Yangi boshlovchilar ko'pincha API'ni "xotirasi bor chatbot" deb tasavvur qiladi. Aslida API xotirasiz — har bir so'rov mustaqil. Model avvalgi xabaringizni "eslamaydi", agar siz uni har safar qayta yubormasangiz:
# NOTO'G'RI tasavvur: model "eslaydi"
response1 = client.responses.create(model="gpt-4o-mini", input="Mening ismim Aziz.")
response2 = client.responses.create(model="gpt-4o-mini", input="Mening ismim nima edi?")
# Model bilmaydi — bu ikkinchi so'rov birinchisi bilan hech qanday bog'liq emas
# TO'G'RI: butun suhbat tarixini har safar qayta yuborasiz
response2 = client.responses.create(
model="gpt-4o-mini",
input=[
{"role": "user", "content": "Mening ismim Aziz."},
{"role": "assistant", "content": "Tanishganimdan xursandman, Aziz!"},
{"role": "user", "content": "Mening ismim nima edi?"},
],
)Bu — kontekst oynasi mavzusining amaliy oqibati. "Suhbat" tuyulgan narsa aslida har safar butun tarixni qaytadan o'qiydigan model, xolos. Keyingi bobda buni qanday qurishni, jumladan serverga saqlashni topshiruvchi muqobil usulni ham ko'ramiz.
9. Nima noto'g'ri ketishi mumkin#
| Belgi | Ehtimoliy sabab |
|---|---|
401 Unauthorized | API kalit noto'g'ri, eskirgan yoki bekor qilingan |
| Kalit ishlaydi, lekin "loyiha topilmadi" xatosi | Kalit boshqa loyihaga tegishli, noto'g'ri loyiha ID'si ishlatilmoqda |
| So'rov juda sekin qaytadi | Uzun kontekst yoki kattaroq model — kichikroq modelni sinab ko'ring |
| Xarajat kutilganidan yuqori chiqdi | Suhbat tarixi cheksiz o'sib ketgan yoki max_output_tokens qo'yilmagan |
O'z hisobingizni sozlang
Amaliy topshiriq: haqiqiy OpenAI hisobingizda ikkita loyiha va ikkita alohida API kalit yarating (agar hisobingiz bo'lmasa, jarayonni hujjatlar orqali o'rganib, keyinroq amalga oshiring). Nega ikkita alohida kalit kerakligini o'z so'zlaringiz bilan tushuntiring.
Maslahatni ko'rsatish
platform.openai.com'da ikkita alohida loyiha yarating: 'sinov' va 'production'. Har biriga alohida API kalit chiqaring. .env faylingizga sinov kalitini yozing va birinchi bo'limdagi curl buyrug'ini shu kalit bilan ishga tushiring — javobda response.id'ni toping.