Loading...
    • Panduan Pengembang
    • Referensi API
    • MCP
    • Sumber daya
    • Catatan rilis
    Search...
    ⌘K
    Langkah pertama
    Pengenalan ClaudeMulai cepat
    Model & harga
    Ikhtisar modelMemilih modelYang baru di Claude 4.6Panduan migrasiPenghentian modelHarga
    Bangun dengan Claude
    Ikhtisar fiturMenggunakan Messages APIMenangani alasan berhentiPraktik terbaik prompting
    Manajemen konteks
    Jendela konteksKompresiPengeditan konteks
    Kemampuan
    Caching promptPemikiran diperpanjangPemikiran adaptifUpayaStreaming pesanPemrosesan batchKutipanDukungan multibahasaPenghitungan tokenEmbeddingsVisiDukungan PDFFiles APIHasil pencarianOutput terstruktur
    Alat
    IkhtisarCara mengimplementasikan penggunaan alatStreaming alat berbutir halusAlat BashAlat eksekusi kodePemanggilan alat terprogramAlat penggunaan komputerAlat editor teksAlat pengambilan webAlat pencarian webAlat memoriAlat pencarian alat
    Keterampilan Agen
    IkhtisarMulai cepatPraktik terbaikKeterampilan untuk perusahaanMenggunakan Keterampilan dengan API
    Agent SDK
    IkhtisarMulai cepatTypeScript SDKTypeScript V2 (pratinjau)Python SDKPanduan migrasi
    MCP di API
    Konektor MCPServer MCP jarak jauh
    Claude di platform pihak ketiga
    Amazon BedrockMicrosoft FoundryVertex AI
    Rekayasa prompt
    IkhtisarGenerator promptGunakan template promptPenyempurna promptJadilah jelas dan langsungGunakan contoh (prompting multishot)Biarkan Claude berpikir (CoT)Gunakan tag XMLBerikan Claude peran (prompt sistem)Rantai prompt kompleksTips konteks panjangTips pemikiran diperpanjang
    Uji & evaluasi
    Tentukan kriteria kesuksesanKembangkan kasus ujiMenggunakan alat evaluasiMengurangi latensi
    Perkuat penjaga
    Kurangi halusinasiTingkatkan konsistensi outputMitigasi jailbreakStreaming penolakanKurangi kebocoran promptJaga Claude tetap dalam karakter
    Administrasi dan pemantauan
    Ikhtisar Admin APIResidensi dataRuang kerjaAPI penggunaan dan biayaClaude Code Analytics APIRetensi data nol
    Console
    Log in
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...

    Solutions

    • AI agents
    • Code modernization
    • Coding
    • Customer support
    • Education
    • Financial services
    • Government
    • Life sciences

    Partners

    • Amazon Bedrock
    • Google Cloud's Vertex AI

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Company

    • Anthropic
    • Careers
    • Economic Futures
    • Research
    • News
    • Responsible Scaling Policy
    • Security and compliance
    • Transparency

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Help and security

    • Availability
    • Status
    • Support
    • Discord

    Terms and policies

    • Privacy policy
    • Responsible disclosure policy
    • Terms of service: Commercial
    • Terms of service: Consumer
    • Usage policy
    Kemampuan

    Output terstruktur

    Dapatkan hasil JSON yang divalidasi dari alur kerja agen

    Output terstruktur membatasi respons Claude untuk mengikuti skema tertentu, memastikan output yang valid dan dapat diurai untuk pemrosesan hilir. Dua fitur yang saling melengkapi tersedia:

    • Output JSON (output_config.format): Dapatkan respons Claude dalam format JSON tertentu
    • Penggunaan alat ketat (strict: true): Jamin validasi skema pada nama alat dan input

    Parameter output_format telah dipindahkan ke output_config.format. Parameter output_format lama masih berfungsi sementara tetapi sudah usang dan akan dihapus dalam versi API mendatang. Perbarui kode Anda untuk menggunakan output_config: {format: {...}} sebagai gantinya.

    Fitur-fitur ini dapat digunakan secara independen atau bersama-sama dalam permintaan yang sama.

    Output terstruktur tersedia secara umum di Claude API dan Amazon Bedrock untuk Claude Opus 4.6, Claude Sonnet 4.5, Claude Opus 4.5, dan Claude Haiku 4.5. Output terstruktur tetap dalam beta publik di Microsoft Foundry.

    Bermigrasi dari beta? Parameter output_format telah dipindahkan ke output_config.format, dan header beta tidak lagi diperlukan. Header beta lama (structured-outputs-2025-11-13) dan parameter output_format akan terus berfungsi selama periode transisi. Lihat contoh kode di bawah untuk bentuk API yang diperbarui.

    Mengapa menggunakan output terstruktur

    Tanpa output terstruktur, Claude dapat menghasilkan respons JSON yang tidak terbentuk dengan baik atau input alat yang tidak valid yang merusak aplikasi Anda. Bahkan dengan prompt yang hati-hati, Anda mungkin mengalami:

    • Kesalahan penguraian dari sintaks JSON yang tidak valid
    • Bidang yang diperlukan hilang
    • Tipe data yang tidak konsisten
    • Pelanggaran skema yang memerlukan penanganan kesalahan dan percobaan ulang

    Output terstruktur menjamin respons yang sesuai dengan skema melalui decoding terbatas:

    • Selalu valid: Tidak ada lagi kesalahan JSON.parse()
    • Aman tipe: Tipe bidang dan bidang yang diperlukan dijamin
    • Andal: Tidak perlu percobaan ulang untuk pelanggaran skema

    Output JSON

    Output JSON mengontrol format respons Claude, memastikan Claude mengembalikan JSON yang valid sesuai dengan skema Anda. Gunakan output JSON ketika Anda perlu:

    • Mengontrol format respons Claude
    • Mengekstrak data dari gambar atau teks
    • Menghasilkan laporan terstruktur
    • Format respons API

    Mulai cepat

    curl https://api.anthropic.com/v1/messages \
      -H "content-type: application/json" \
      -H "x-api-key: $ANTHROPIC_API_KEY" \
      -H "anthropic-version: 2023-06-01" \
      -d '{
        "model": "claude-opus-4-6",
        "max_tokens": 1024,
        "messages": [
          {
            "role": "user",
            "content": "Extract the key information from this email: John Smith ([email protected]) is interested in our Enterprise plan and wants to schedule a demo for next Tuesday at 2pm."
          }
        ],
        "output_config": {
          "format": {
            "type": "json_schema",
            "schema": {
              "type": "object",
              "properties": {
                "name": {"type": "string"},
                "email": {"type": "string"},
                "plan_interest": {"type": "string"},
                "demo_requested": {"type": "boolean"}
              },
              "required": ["name", "email", "plan_interest", "demo_requested"],
              "additionalProperties": false
            }
          }
        }
      }'

    Format respons: JSON yang valid sesuai dengan skema Anda di response.content[0].text

    {
      "name": "John Smith",
      "email": "[email protected]",
      "plan_interest": "Enterprise",
      "demo_requested": true
    }

    Cara kerjanya

    1. 1

      Tentukan skema JSON Anda

      Buat skema JSON yang mendeskripsikan struktur yang ingin Anda ikuti oleh Claude. Skema menggunakan format JSON Schema standar dengan beberapa batasan (lihat batasan JSON Schema).

    2. 2

      Tambahkan parameter output_config.format

      Sertakan parameter output_config.format dalam permintaan API Anda dengan type: "json_schema" dan definisi skema Anda.

    3. 3

      Urai respons

      Respons Claude akan berupa JSON yang valid sesuai dengan skema Anda, dikembalikan di response.content[0].text.

    Bekerja dengan output JSON di SDK

    SDK Python dan TypeScript menyediakan pembantu yang memudahkan pekerjaan dengan output JSON, termasuk transformasi skema, validasi otomatis, dan integrasi dengan perpustakaan skema populer.

    Metode pembantu SDK (seperti .parse() dan integrasi Pydantic/Zod) masih menerima output_format sebagai parameter kenyamanan. SDK menangani terjemahan ke output_config.format secara internal. Contoh di bawah menunjukkan sintaks pembantu SDK.

    Menggunakan Pydantic dan Zod

    Untuk pengembang Python dan TypeScript, Anda dapat menggunakan alat definisi skema yang familiar seperti Pydantic dan Zod alih-alih menulis skema JSON mentah.

    from pydantic import BaseModel
    from anthropic import Anthropic, transform_schema
    
    class ContactInfo(BaseModel):
        name: str
        email: str
        plan_interest: str
        demo_requested: bool
    
    client = Anthropic()
    
    # With .create() - requires transform_schema()
    response = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=1024,
        messages=[
            {
                "role": "user",
                "content": "Extract the key information from this email: John Smith ([email protected]) is interested in our Enterprise plan and wants to schedule a demo for next Tuesday at 2pm."
            }
        ],
        output_config={
            "format": {
                "type": "json_schema",
                "schema": transform_schema(ContactInfo),
            }
        }
    )
    
    print(response.content[0].text)
    
    # With .parse() - can pass Pydantic model directly
    response = client.messages.parse(
        model="claude-opus-4-6",
        max_tokens=1024,
        messages=[
            {
                "role": "user",
                "content": "Extract the key information from this email: John Smith ([email protected]) is interested in our Enterprise plan and wants to schedule a demo for next Tuesday at 2pm."
            }
        ],
        output_format=ContactInfo,
    )
    
    print(response.parsed_output)

    Metode khusus SDK

    Python: client.messages.parse() (Direkomendasikan)

    Metode parse() secara otomatis mengubah model Pydantic Anda, memvalidasi respons, dan mengembalikan atribut parsed_output.

    Python: pembantu transform_schema()

    Untuk ketika Anda perlu secara manual mengubah skema sebelum mengirim, atau ketika Anda ingin memodifikasi skema yang dihasilkan Pydantic. Tidak seperti client.messages.parse(), yang secara otomatis mengubah skema yang disediakan, ini memberi Anda skema yang diubah sehingga Anda dapat menyesuaikannya lebih lanjut.

    Cara kerja transformasi SDK

    SDK Python dan TypeScript secara otomatis mengubah skema dengan fitur yang tidak didukung:

    1. Hapus batasan yang tidak didukung (misalnya, minimum, maximum, minLength, maxLength)
    2. Perbarui deskripsi dengan informasi batasan (misalnya, "Harus setidaknya 100"), ketika batasan tidak langsung didukung dengan output terstruktur
    3. Tambahkan additionalProperties: false ke semua objek
    4. Filter format string ke daftar yang didukung saja
    5. Validasi respons terhadap skema asli Anda (dengan semua batasan)

    Ini berarti Claude menerima skema yang disederhanakan, tetapi kode Anda masih memberlakukan semua batasan melalui validasi.

    Contoh: Bidang Pydantic dengan minimum: 100 menjadi integer biasa dalam skema yang dikirim, tetapi deskripsi diperbarui menjadi "Harus setidaknya 100", dan SDK memvalidasi respons terhadap batasan asli.

    Kasus penggunaan umum

    Penggunaan alat ketat

    Penggunaan alat ketat memvalidasi parameter alat, memastikan Claude memanggil fungsi Anda dengan argumen yang diketik dengan benar. Gunakan penggunaan alat ketat ketika Anda perlu:

    • Memvalidasi parameter alat
    • Membangun alur kerja agen
    • Memastikan panggilan fungsi yang aman tipe
    • Menangani alat kompleks dengan properti bersarang

    Mengapa penggunaan alat ketat penting untuk agen

    Membangun sistem agen yang andal memerlukan kepatuhan skema yang dijamin. Tanpa mode ketat, Claude mungkin mengembalikan tipe yang tidak kompatibel ("2" alih-alih 2) atau bidang yang diperlukan hilang, merusak fungsi Anda dan menyebabkan kesalahan runtime.

    Penggunaan alat ketat menjamin parameter yang aman tipe:

    • Fungsi menerima argumen yang diketik dengan benar setiap saat
    • Tidak perlu memvalidasi dan mencoba ulang panggilan alat
    • Agen siap produksi yang bekerja secara konsisten dalam skala besar

    Misalnya, anggaplah sistem pemesanan memerlukan passengers: int. Tanpa mode ketat, Claude mungkin memberikan passengers: "two" atau passengers: "2". Dengan strict: true, respons akan selalu berisi passengers: 2.

    Mulai cepat

    curl https://api.anthropic.com/v1/messages \
      -H "content-type: application/json" \
      -H "x-api-key: $ANTHROPIC_API_KEY" \
      -H "anthropic-version: 2023-06-01" \
      -d '{
        "model": "claude-opus-4-6",
        "max_tokens": 1024,
        "messages": [
          {"role": "user", "content": "What is the weather in San Francisco?"}
        ],
        "tools": [{
          "name": "get_weather",
          "description": "Get the current weather in a given location",
          "strict": true,
          "input_schema": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA"
              },
              "unit": {
                "type": "string",
                "enum": ["celsius", "fahrenheit"]
              }
            },
            "required": ["location"],
            "additionalProperties": false
          }
        }]
      }'

    Format respons: Blok penggunaan alat dengan input yang divalidasi di response.content[x].input

    {
      "type": "tool_use",
      "name": "get_weather",
      "input": {
        "location": "San Francisco, CA"
      }
    }

    Jaminan:

    • Input alat input ketat mengikuti input_schema
    • Nama alat name selalu valid (dari alat yang disediakan atau alat server)

    Cara kerjanya

    1. 1

      Tentukan skema alat Anda

      Buat skema JSON untuk input_schema alat Anda. Skema menggunakan format JSON Schema standar dengan beberapa batasan (lihat batasan JSON Schema).

    2. 2

      Tambahkan strict: true

      Atur "strict": true sebagai properti tingkat atas dalam definisi alat Anda, bersama dengan name, description, dan input_schema.

    3. 3

      Tangani panggilan alat

      Ketika Claude menggunakan alat, bidang input dalam blok tool_use akan ketat mengikuti input_schema Anda, dan name akan selalu valid.

    Kasus penggunaan umum

    Menggunakan kedua fitur bersama-sama

    Output JSON dan penggunaan alat ketat menyelesaikan masalah yang berbeda dan dapat digunakan bersama-sama:

    • Output JSON mengontrol format respons Claude (apa yang Claude katakan)
    • Penggunaan alat ketat memvalidasi parameter alat (bagaimana Claude memanggil fungsi Anda)

    Ketika digabungkan, Claude dapat memanggil alat dengan parameter yang dijamin valid DAN mengembalikan respons JSON terstruktur. Ini berguna untuk alur kerja agen di mana Anda memerlukan panggilan alat yang andal dan output akhir yang terstruktur.

    response = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=1024,
        messages=[{"role": "user", "content": "Help me plan a trip to Paris for next month"}],
        # JSON outputs: structured response format
        output_config={
            "format": {
                "type": "json_schema",
                "schema": {
                    "type": "object",
                    "properties": {
                        "summary": {"type": "string"},
                        "next_steps": {"type": "array", "items": {"type": "string"}}
                    },
                    "required": ["summary", "next_steps"],
                    "additionalProperties": False
                }
            }
        },
        # Strict tool use: guaranteed tool parameters
        tools=[{
            "name": "search_flights",
            "strict": True,
            "input_schema": {
                "type": "object",
                "properties": {
                    "destination": {"type": "string"},
                    "date": {"type": "string", "format": "date"}
                },
                "required": ["destination", "date"],
                "additionalProperties": False
            }
        }]
    )

    Pertimbangan penting

    Kompilasi tata bahasa dan caching

    Output terstruktur menggunakan sampling terbatas dengan artefak tata bahasa yang dikompilasi. Ini memperkenalkan beberapa karakteristik kinerja yang perlu diperhatikan:

    • Latensi permintaan pertama: Pertama kali Anda menggunakan skema tertentu, akan ada latensi tambahan saat tata bahasa dikompilasi
    • Caching otomatis: Tata bahasa yang dikompilasi di-cache selama 24 jam dari penggunaan terakhir, membuat permintaan berikutnya jauh lebih cepat
    • Invalidasi cache: Cache dibatalkan jika Anda mengubah:
      • Struktur skema JSON
      • Set alat dalam permintaan Anda (saat menggunakan output terstruktur dan penggunaan alat bersama-sama)
      • Mengubah hanya bidang name atau description tidak membatalkan cache

    Modifikasi prompt dan biaya token

    Saat menggunakan output terstruktur, Claude secara otomatis menerima prompt sistem tambahan yang menjelaskan format output yang diharapkan. Ini berarti:

    • Jumlah token input Anda akan sedikit lebih tinggi
    • Prompt yang disuntikkan menghabiskan token Anda seperti prompt sistem lainnya
    • Mengubah parameter output_config.format akan membatalkan cache prompt apa pun untuk utas percakapan itu

    Batasan JSON Schema

    Output terstruktur mendukung JSON Schema standar dengan beberapa batasan. Baik output JSON maupun penggunaan alat ketat berbagi batasan ini.

    SDK Python dan TypeScript dapat secara otomatis mengubah skema dengan fitur yang tidak didukung dengan menghapusnya dan menambahkan batasan ke deskripsi bidang. Lihat metode khusus SDK untuk detail.

    Output yang tidak valid

    Meskipun output terstruktur menjamin kepatuhan skema dalam kebanyakan kasus, ada skenario di mana output mungkin tidak sesuai dengan skema Anda:

    Penolakan (stop_reason: "refusal")

    Claude mempertahankan properti keselamatan dan kegunaannya bahkan saat menggunakan output terstruktur. Jika Claude menolak permintaan karena alasan keselamatan:

    • Respons akan memiliki stop_reason: "refusal"
    • Anda akan menerima kode status 200
    • Anda akan ditagih untuk token yang dihasilkan
    • Output mungkin tidak sesuai dengan skema Anda karena pesan penolakan mengambil alih batasan skema

    Batas token tercapai (stop_reason: "max_tokens")

    Jika respons dipotong karena mencapai batas max_tokens:

    • Respons akan memiliki stop_reason: "max_tokens"
    • Output mungkin tidak lengkap dan tidak sesuai dengan skema Anda
    • Coba lagi dengan nilai max_tokens yang lebih tinggi untuk mendapatkan output terstruktur yang lengkap

    Kesalahan validasi skema

    Jika skema Anda menggunakan fitur yang tidak didukung atau terlalu kompleks, Anda akan menerima kesalahan 400:

    "Terlalu banyak definisi rekursif dalam skema"

    • Penyebab: Skema memiliki definisi rekursif yang berlebihan atau siklik
    • Solusi: Sederhanakan struktur skema, kurangi kedalaman nesting

    "Skema terlalu kompleks"

    • Penyebab: Skema melebihi batas kompleksitas
    • Solusi: Pecah menjadi skema yang lebih kecil, sederhanakan struktur, atau kurangi jumlah alat yang ditandai sebagai strict: true

    Untuk masalah persisten dengan skema yang valid, hubungi dukungan dengan definisi skema Anda.

    Kompatibilitas fitur

    Bekerja dengan:

    • Pemrosesan batch: Proses output terstruktur dalam skala besar dengan diskon 50%
    • Penghitungan token: Hitung token tanpa kompilasi
    • Streaming: Stream output terstruktur seperti respons normal
    • Penggunaan gabungan: Gunakan output JSON (output_config.format) dan penggunaan alat ketat (strict: true) bersama-sama dalam permintaan yang sama

    Tidak kompatibel dengan:

    • Kutipan: Kutipan memerlukan interleaving blok kutipan dengan teks, yang bertentangan dengan batasan skema JSON ketat. Mengembalikan kesalahan 400 jika kutipan diaktifkan dengan output_config.format.
    • Prefilling Pesan: Tidak kompatibel dengan output JSON

    Cakupan tata bahasa: Tata bahasa hanya berlaku untuk output langsung Claude, bukan untuk panggilan penggunaan alat, hasil alat, atau tag pemikiran (saat menggunakan Extended Thinking). Status tata bahasa direset antar bagian, memungkinkan Claude berpikir bebas sambil tetap menghasilkan output terstruktur dalam respons akhir.

    Was this page helpful?

    • Mengapa menggunakan output terstruktur
    • Output JSON
    • Mulai cepat
    • Cara kerjanya
    • Bekerja dengan output JSON di SDK
    • Kasus penggunaan umum
    • Penggunaan alat ketat
    • Mengapa penggunaan alat ketat penting untuk agen
    • Mulai cepat
    • Cara kerjanya
    • Kasus penggunaan umum
    • Menggunakan kedua fitur bersama-sama
    • Pertimbangan penting
    • Kompilasi tata bahasa dan caching
    • Modifikasi prompt dan biaya token
    • Batasan JSON Schema
    • Output yang tidak valid
    • Kesalahan validasi skema
    • Kompatibilitas fitur