Claude Architect · Pelajaran

Bidang Wajib vs Opsional/Boleh Null

Jangan pernah mewajibkan bidang yang mungkin tidak ada.

Pelajaran 3 dari 413 langkah

Bidang Wajib vs Opsional/Boleh Null adalah pelajaran Claude Architect gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Claude Architect, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Claude Architect mencakup 4 pelajaran total.

Aturan Inti

Keluaran terstruktur dengan tool_use dan JSON Schema menghilangkan kesalahan sintaks dan memungkinkan Anda memberlakukan bidang wajib. Namun, kemampuan ini memiliki sisi yang berisiko.

Aturan yang sangat penting untuk ujian dalam pelajaran ini: tandai suatu bidang sebagai required hanya jika bidang itu selalu ada. Jangan pernah mewajibkan bidang yang mungkin tidak ada.

Mengapa? Saat suatu bidang diwajibkan, model harus menghasilkan nilainya. Jika data sumber sebenarnya tidak memuat nilai tersebut, model tidak punya pilihan selain mengarang nilai untuk memenuhi skema. Bidang wajib adalah janji yang akan dipenuhi model bahkan ketika seharusnya tidak.

Mengapa Required Memaksa Pengarang-ngarangan

Array required dalam JSON Schema adalah batasan tegas, bukan petunjuk. Model tidak dapat mengembalikan objek yang valid secara struktural jika menghilangkan kunci yang diwajibkan.

Bayangkan Anda mengekstrak phone_number pelanggan dari email dukungan yang sama sekali tidak menyebutkan nomor telepon. Jika phone_number diwajibkan, model harus menghasilkan sesuatu — dan nomor yang tampak masuk akal tetapi dikarang lebih buruk daripada tidak ada nomor sama sekali, karena tidak ada proses di hilir yang dapat membedakannya dari nomor asli.

Solusinya bersifat struktural: jadikan bidang opsional benar-benar opsional, sehingga model dapat secara sah menghilangkannya ketika informasinya tidak ada.

Skema yang Memicu Pengarang-ngarangan

Berikut adalah alat ekstraksi yang menandai setiap bidang sebagai required. Email di bawah tidak memiliki nomor telepon — tetapi skema memaksa model untuk mengarangnya.

Ini adalah pola yang harus dihindari. Baca required dengan saksama: daftar tersebut memuat bidang yang mungkin benar-benar tidak ada dalam input nyata.

tool = {
    "name": "extract_contact",
    "description": "Extract contact details from a support email.",
    "input_schema": {
        "type": "object",
        "properties": {
            "name": {"type": "string"},
            "email": {"type": "string"},
            "phone_number": {"type": "string"},
        },
        # BAD: phone_number is often absent, but it is required here
        "required": ["name", "email", "phone_number"],
    },
}

Solusinya: Wajibkan Hanya yang Terjamin

Masukkan ke dalam required hanya bidang yang selalu ada. Semua yang mungkin tidak ada harus tetap di luar required — model kemudian dapat menghilangkannya dengan jujur.

Perhatikan bahwa name dan email tetap wajib karena setiap tiket dukungan memilikinya, sedangkan phone_number dihapus dari daftar.

tool = {
    "name": "extract_contact",
    "description": "Extract contact details from a support email.",
    "input_schema": {
        "type": "object",
        "properties": {
            "name": {"type": "string"},
            "email": {"type": "string"},
            "phone_number": {"type": "string"},
        },
        # GOOD: only the always-present fields are required
        "required": ["name", "email"],
    },
}

Opsional vs. Nullable: Dua Alat yang Berbeda

Ada dua cara untuk memungkinkan suatu bidang "tidak ada", dan maknanya berbeda:

  • Opsional — kunci tersebut cukup dihilangkan dari required. Model dapat menghilangkan kunci itu sepenuhnya dari objek.
  • Nullable — kunci tersebut selalu ada, tetapi tipenya mengizinkan null, yang menandakan "slot ini sudah diperiksa dan ternyata kosong".

Opsional menjawab "apakah model melaporkan bidang ini sama sekali?" Nullable menjawab "model sudah memeriksanya, dan nilainya secara eksplisit tidak ada." Pilih nullable ketika konsumen di hilir memerlukan setiap kunci hadir agar bentuk data tetap stabil.

Menyatakan Nullable dalam JSON Schema

Untuk membuat bidang nullable, izinkan null sebagai salah satu tipenya. Dengan keluaran terstruktur, biasanya Anda menyatakannya menggunakan anyOf (kata kunci yang didukung) yang menggabungkan tipe sebenarnya dan null.

Di sini phone_number selalu dikeluarkan sebagai kunci, tetapi nilainya null ketika email tidak memuat nomor — sebuah "kosong" yang jujur, bukan string digit yang dikarang.

"phone_number": {
    "anyOf": [
        {"type": "string"},
        {"type": "null"}
    ],
    "description": "Customer phone number, or null if none is stated in the email."
}

Nullable Tetap Memerlukan Instruksi yang Jujur

Tipe nullable mengizinkan null, tetapi model tetap menentukan kapan menggunakannya. Perjelas maksudnya dalam description bidang tersebut: beri tahu model untuk mengembalikan null, bukan menebak.

Ini memadukan jaminan struktural (tipe mengizinkan null) dengan jaminan perilaku (deskripsi menjelaskan kapan menggunakannya). Skema menentukan bentuk; deskripsi mengarahkan penilaian.

"discount_code": {
    "anyOf": [{"type": "string"}, {"type": "null"}],
    "description": "The promo code the customer mentioned. Return null if no code is present — do not invent or infer one."
}

Enum Ditambah Jalan Keluar 'Other'

Risiko pengarang-ngarangan yang sama juga muncul pada enum. Jika suatu bidang harus berupa salah satu dari sekumpulan nilai tetap dan input nyata tidak cocok dengan satu pun nilai tersebut, enum yang ketat memaksa model memilih jawaban salah yang paling mendekati.

Pola yang direkomendasikan dalam ujian untuk ekstensibilitas: sertakan nilai "other" dalam enum serta bidang detail berupa teks bebas. Ini memberi model tempat yang jujur untuk menampung kasus ketika kenyataan melampaui enum Anda — alih-alih salah mengklasifikasikannya.

"category": {
    "type": "string",
    "enum": ["billing", "technical", "account", "other"]
},
"category_detail": {
    "anyOf": [{"type": "string"}, {"type": "null"}],
    "description": "Free-text description used when category is 'other'; otherwise null."
}

Mencoba Lagi Tidak Akan Menyelamatkan Nilai yang Tidak Ada

Saat validasi gagal, percobaan ulang dengan umpan balik sangat berguna — Anda mengirim ulang dokumen asli, keluaran model yang salah, dan kesalahan validasi yang tepat untuk memperbaiki kesalahan format, struktural, atau aritmetika.

Namun, percobaan ulang NOT membantu ketika informasi memang tidak ada dalam sumber. Jika nomor telepon tidak ada di email, pengulangan perintah sebanyak apa pun tidak akan memunculkan nomor yang benar. Rancangan yang tepat memungkinkan bidang tersebut tidak ada sejak awal — bidang yang wajib tetapi tidak ditemukan adalah bug skema, bukan kesalahan sementara yang perlu dicoba ulang.

Koreksi Mandiri Mendeteksi, Skema Mencegah

Untuk nilai yang seharusnya ada dan dapat diverifikasi, teknik pelengkapnya adalah koreksi mandiri: ekstrak calculated_total dan stated_total secara BOTH agar ketidakcocokan menampilkan perbedaan yang dapat Anda temukan.

Namun, koreksi mandiri mendeteksi kesalahan dalam data yang ada; teknik ini tidak dapat memvalidasi bidang yang sejak awal tidak pernah ada dalam sumber. Garis pertahanan pertama terhadap pengarang-ngarangan tetaplah skema itu sendiri: jangan mewajibkan sesuatu yang mungkin tidak ada. Gunakan validasi bergaya Pydantic pada hasilnya untuk memberlakukan invarian ini dalam kode.

from pydantic import BaseModel
from typing import Optional

class Invoice(BaseModel):
    invoice_id: str            # always present → required
    po_number: Optional[str]   # may be absent → optional / nullable
    calculated_total: float
    stated_total: float        # compare the two to detect discrepancies

Bedakan Kosong dari Kegagalan

Ada satu pembedaan penting lainnya bagi arsitek: hasil kosong yang valid ("email tidak memiliki nomor telepon") tidak sama dengan kegagalan akses ("alat ekstraksi mengalami kesalahan").

Bidang nullable merepresentasikan kasus pertama dengan jelas. Jangan memodelkan ketiadaan yang memang terjadi sebagai kesalahan untuk dicoba ulang, dan jangan menyembunyikan kegagalan nyata sebagai null. Buat skema menjelaskan perbedaannya: null untuk kondisi kosong yang memang sah, dan jalur kesalahan terpisah untuk kegagalan akses. Sinyal yang jelas dan terstruktur di hilir lebih baik daripada sinyal yang ambigu.

Pemeriksaan Singkat: Merancang Bidang Opsional

Terapkan aturan tersebut pada skenario ekstraksi yang realistis.

Ringkasan: Jangan Pernah Mewajibkan yang Mungkin Tidak Ada

Inti pembelajaran:

  • Wajibkan hanya bidang yang selalu ada. Mewajibkan bidang yang mungkin tidak ada akan memaksa model mengarang nilai.
  • Opsional = kunci boleh dihilangkan; nullable = kunci selalu ada, tetapi nilainya boleh berupa null. Pilih nullable ketika pihak yang menggunakan data memerlukan kumpulan kunci yang konsisten.
  • Pasangkan tipe nullable dengan deskripsi yang menyatakan "kembalikan null jika tidak ada — jangan menebak."
  • Untuk kumpulan nilai tertutup, tambahkan nilai enumerasi "other" serta bidang detail teks bebas agar dapat diperluas.
  • Pengulangan dengan umpan balik memperbaiki kesalahan format, struktur, dan aritmetika, bukan informasi yang tidak ada. Koreksi mandiri mendeteksi ketidaksesuaian pada data yang tersedia, bukan bidang yang hilang.
  • Bedakan hasil kosong yang valid dari kegagalan akses — jangan pernah menyembunyikan salah satunya secara diam-diam.
Gratis untuk memulai

Belajar Python dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
26
Pelajaran
104

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Bidang Wajib vs Opsional/Boleh Null” gratis?

Ya — teks lengkap “Bidang Wajib vs Opsional/Boleh Null” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Claude Architect, upgrade ke CoddyKit PRO. Kursus Claude Architect mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Bidang Wajib vs Opsional/Boleh Null”?

Jangan pernah mewajibkan bidang yang mungkin tidak ada. Kamu berlatih Claude Architect dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Claude Architect?

Tidak diperlukan pengalaman sebelumnya. Claude Architect di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Bidang Wajib vs Opsional/Boleh Null” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Claude Architect ini?

Ya. Setiap pelajaran Claude Architect menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. tool_use untuk Struktur yang Terjamin
  2. Merancang Skema JSON
  3. Bidang Wajib vs Opsional/Boleh Null
  4. Enum dengan 'other' untuk Ekstensibilitas
← Kembali ke Claude Architect