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
- Nega "JSON formatida javob ber" deb yozish yetarli emas?
- Constrained Decoding (Cheklangan dekodlash) qanday ishlaydi?
- Qat'iy JSON Schema qoidalari
- Function Calling va Tool Use arxitekturasi
- Swift'da Codable bilan xavfsiz qabul qilish
- Amaliy keys: Crash loglarni strukturali hisobotga aylantirish
- Xulosa
- 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:
additionalProperties: falsebo'lishi;- Barcha e'lon qilingan maydonlar
requiredmassiviga kiritilishi; - 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 Outputserkin 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.