Azimjon Abdurasulov

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

🤖 Prompt & AI Engineering

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?
  2. Constrained Decoding (Cheklangan dekodlash) qanday ishlaydi?
  3. Qat'iy JSON Schema qoidalari
  4. Function Calling va Tool Use arxitekturasi
  5. Swift'da Codable bilan xavfsiz qabul qilish
  6. Amaliy keys: Crash loglarni strukturali hisobotga aylantirish
  7. Xulosa
  8. 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:

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

{
  "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:

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:

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:

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
  2. JSON Schema Specification (Draft 2020-12)
  3. Outlines — Structured Text Generation

Markdown manba

iOS Lessons