aidoc.uz

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 obyekt
So'rovning o'zi: qaysi model, qanday kirish, qanday parametrlar.
Javob
JSON obyekt
Model 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:

TilO'rnatish
Pythonpip install openai
Node.js / TypeScriptnpm install openai
.NETdotnet add package OpenAI
JavaMaven/Gradle orqali com.openai:openai-java
Gogo 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 .env faylida yoki muhit o'zgaruvchisida (environment variable) saqlang.
  • .env faylini .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:

Tashkilot (Organization)
Butun hisobingiz — billing, a'zolar shu darajada boshqariladi
Loyiha (Project)
Tashkilot ichidagi alohida bo'lim — masalan, 'Ishlab chiqarish' va 'Sinov' uchun alohida
API kalit
Har bir kalit muayyan loyihaga bog'langan — shu loyihaning limitlari va xarajati unga tegishli

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:

QismNima uchun to'lanadi
Input tokenSiz yuborgan barcha matn — tizim ko'rsatmasi, suhbat tarixi, savol
Output tokenModel 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-mini oilasi) — 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:

  1. So'rov tuzasiz

    Qaysi model, qanday kirish (input) va qanday parametrlar (masalan, ijodkorlik darajasi) kerakligini belgilaysiz.

  2. HTTPS orqali yuborasiz

    So'rov OpenAI serveriga boradi, sizning API kalitingiz orqali tanilasiz. Ulanish har doim shifrlangan (HTTPS) — matn tarmoq orqali ochiq holda yurmaydi.

  3. Model ishlaydi

    Server sizning navbatingizni oladi, modelni ishga tushiradi, token-bo'lak javob generatsiya qiladi.

  4. Javob qaytadi

    To'liq JSON obyekt (yoki oqim — buni 4-bobda ko'ramiz) sifatida javob kelib tushadi: matn, foydalanilgan token soni, to'xtash sababi.

  5. 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 ishlagani

response.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#

BelgiEhtimoliy sabab
401 UnauthorizedAPI kalit noto'g'ri, eskirgan yoki bekor qilingan
Kalit ishlaydi, lekin "loyiha topilmadi" xatosiKalit boshqa loyihaga tegishli, noto'g'ri loyiha ID'si ishlatilmoqda
So'rov juda sekin qaytadiUzun kontekst yoki kattaroq model — kichikroq modelni sinab ko'ring
Xarajat kutilganidan yuqori chiqdiSuhbat tarixi cheksiz o'sib ketgan yoki max_output_tokens qo'yilmagan
Amaliy topshiriq

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.