# Prompt 3: Structured Outputs va Function Calling — JSON Schema, Tool Calling va Deterministic Extraction

> **Holat:** 2026-yil sentabr. Dasturiy ilovalar (backend yoki mobil app) ichida sun'iy intellektdan foydalanishda oddiy erkin matn (free-form text) yetarli emas. Tizimlar **qat'iy tiplashtirilgan (strongly typed) JSON ma'lumotlarni** talab qiladi. Ushbu darsda 100% sintaktik kafolat beruvchi Structured Outputs mexanizmi, JSON Schema va Function Calling arxitekturasi amaliy misollar bilan tushuntiriladi.

## Mundarija

1. [Nega "JSON formatida javob ber" deb yozish yetarli emas?](#muammo)
2. [Constrained Decoding (Cheklangan dekodlash) qanday ishlaydi?](#constrained-decoding)
3. [Qat'iy JSON Schema qoidalari](#json-schema)
4. [Function Calling va Tool Use arxitekturasi](#function-calling)
5. [Swift'da Codable bilan xavfsiz qabul qilish](#swift-codable)
6. [Amaliy keys: Crash loglarni strukturali hisobotga aylantirish](#amaliy-keys)
7. [Xulosa](#xulosa)
8. [Manbalar](#manbalar)

---

## 1. Nega "JSON formatida javob ber" deb yozish yetarli emas? {#muammo}

Ilgari dasturchilar prompt oxiriga `"Javobni faqat JSON formatida qaytar"` deb yozishar edi. Bu quyidagi muammolarni keltirib chiqarar edi:
- Model JSON'dan oldin yoki keyin tushuntirish matni qo'shib yuborishi (`"Mana siz so'ragan JSON: ..."`);
- Oxirgi qavs (`}`) qo'yilmay qolishi (token limiti tugashi tufayli);
- Maydon nomlari o'zgarib ketishi yoki kutilmagan turlar qaytishi (`"age": "25"` o'rniga `"age": 25`).

Bularning barchasi ishlab chiqarish tizimlarida `JSONDecodeError` xatosiga olib keladi.

---

## 2. Constrained Decoding (Cheklangan dekodlash) qanday ishlaydi? {#constrained-decoding}

Zamonaviy AI platformalari (OpenAI Structured Outputs, Outlines, vLLM) **Constrained Decoding** texnologiyasidan foydalanadi:

```text
Grammatika / JSON Schema ──► Logit Masking (Har bir qadamda faqat ruxsat etilgan belgilarni qoldirish)
                                      │
Model ehtimolliklari ─────────────────┴──► 100% Valid JSON Natija
```

Agar sxemada raqam kutilayotgan bo'lsa, model keyingi token sifatida harflarni umuman tanlay olmaydi — ularning ehtimolligi sun'iy ravishda nolga tenglashtiriladi (`logit masking`). Shu sababli JSON sintaktik jihatdan **100% kafolatlanadi**.

---

## 3. Qat'iy JSON Schema qoidalari {#json-schema}

Qat'iy Structured Outputs ishlashi uchun JSON Schema quyidagi talablarga javob berishi shart:
1. `additionalProperties: false` bo'lishi;
2. Barcha e'lon qilingan maydonlar `required` massiviga kiritilishi;
3. Ichki ob'ektlar ham to'liq ta'riflanishi.

### Namuna: Xato hisoboti sxemasi
```json
{
  "type": "object",
  "properties": {
    "error_type": {
      "type": "string",
      "enum": ["crash", "network", "ui_hang", "permission"]
    },
    "severity": {
      "type": "string",
      "enum": ["critical", "high", "medium", "low"]
    },
    "affected_screen": {
      "type": "string"
    },
    "reproduction_steps": {
      "type": "array",
      "items": { "type": "string" }
    }
  },
  "required": ["error_type", "severity", "affected_screen", "reproduction_steps"],
  "additionalProperties": false
}
```

---

## 4. Function Calling va Tool Use arxitekturasi {#function-calling}

Function Calling — bu modelga tashqi vositalar (ob-havo API, ma'lumotlar bazasi, kalkulyator) haqida ma'lumot berish va unga kerakli funksiyani aniq argumentlar bilan chaqirish imkonini berishdir:

```text
Foydalanuvchi: "Toshkentda ob-havo qanday?"
      │
      ▼
Model tahlil qiladi va javob o'rniga Tool chaqiruvini qaytaradi:
{ "name": "get_weather", "arguments": { "city": "Tashkent", "unit": "celsius" } }
      │
      ▼
Sizning Backend'ingiz haqiqiy API'ni chaqiradi va natijani modelga qaytaradi:
{ "role": "tool", "content": "{\"temp\": 24, \"condition\": \"Quyoshli\"}" }
      │
      ▼
Model yakuniy inson tushunadigan javobni shakllantiradi:
"Hozir Toshkentda havo quyoshli, harorat 24°C."
```

---

## 5. Swift'da Codable bilan xavfsiz qabul qilish {#swift-codable}

Olingan javob Swift ilovasida `Decodable` yordamida bir zumda modelga aylanadi:

```swift
import Foundation

public struct BugReport: Codable, Sendable {
  public let errorType: String
  public let severity: String
  public let affectedScreen: String
  public let reproductionSteps: [String]

  enum CodingKeys: String, CodingKey {
    case errorType = "error_type"
    case severity
    case affectedScreen = "affected_screen"
    case reproductionSteps = "reproduction_steps"
  }
}

public func parseReport(jsonData: Data) throws -> BugReport {
  let decoder = JSONDecoder()
  return try decoder.decode(BugReport.self, from: jsonData)
}
```

---

## 6. Amaliy keys: Crash loglarni strukturali hisobotga aylantirish {#amaliy-keys}

Xom konsol xatoliklarini tahlil qilish uchun Python skripti:

```python
import json

def validate_schema(data):
    required = ["error_type", "severity", "affected_screen", "reproduction_steps"]
    return all(field in data for field in required)

sample_response = {
    "error_type": "crash",
    "severity": "critical",
    "affected_screen": "CheckoutViewController",
    "reproduction_steps": [
        "Savatga mahsulot qo'shish",
        "To'lov turini Apple Pay tanlash",
        "Tasdiqlash tugmasini bosish"
    ]
}

if validate_schema(sample_response):
    print("Validatsiya muvaffaqiyatli: Qat'iy struktura ta'minlandi")
```

---

## 7. Xulosa {#xulosa}

- `Structured Outputs` erkin matnli javoblarni deterministik API darajasiga olib chiqadi.
- JSON Schema yordamida kompilyatsiya darajasidagi qat'iy tiplashtirish ta'minlanadi.
- Function Calling orqali AI modellarini real dunyo vositalari va API'lari bilan xavfsiz integratsiya qilish mumkin.

---

## 8. Manbalar {#manbalar}

1. [OpenAI Documentation — Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)
2. [JSON Schema Specification (Draft 2020-12)](https://json-schema.org/)
3. [Outlines — Structured Text Generation](https://github.com/dottxt-ai/outlines)
