Developer

Structured Outputs Claude Bedrock Rilis: JSON Dijamin Valid

AWS resmi ngerilis fitur structured outputs buat Claude di Amazon Bedrock. Nggak ada lagi drama JSON error atau logic retry yang bikin pusing!

Tim Engineering Classai

· 8 menit baca

Ilustrasi fitur structured outputs model Anthropic Claude di AWS Amazon Bedrock
Gambar: AWS

Inti singkat

  • Amazon Bedrock kini mendukung structured outputs untuk semua model Claude di endpoint bedrock-runtime dan bedrock-mantle.
  • Fitur ini memanfaatkan constrained decoding saat token di-generate sehingga output pasti valid sesuai JSON schema.
  • Tersedia mekanisme strict tool use yang menjamin argumen parameter function calling cocok 100% dengan skema.
  • Skema dikompilasi ke grammar artifact dan di-cache selama 24 jam untuk mempercepat request berikutnya.
  • Developer tidak perlu lagi menulis kode custom regex parsing atau mekanisme retry otomatis akibat format rusak.
Daftar isi9 bagian
  1. 01
  2. 02
  3. 03
  4. 04
  5. 05
  6. 06
  7. 07
  8. 08
  9. 09

Amazon Web Services resmi merilis structured outputs untuk seluruh model Anthropic Claude di Amazon Bedrock guna menghasilkan output JSON yang dijamin valid sesuai skema tanpa perlu validasi manual. Fitur baru ini mengubah pemformatan teks Claude yang tadinya bersifat probabilistik jadi sepenuhnya deterministik lewat teknik constrained decoding langsung saat token di-generate.

Kalau kamu pernah membangun pipeline AI atau sistem agen otomatis memakai LLM, kamu pasti paham rasa frustrasinya. Kamu sudah minta model membalas hanya dalam format JSON, tapi model malah nambahin teks pembuka kayak "Tentu, ini datanya:", lupa menutup kurung kurawal, atau tipe datanya ngaco. Menurut pengumuman resmi AWS Machine Learning Blog, update structured outputs claude bedrock ini hadir buat menyelesaikan problem klasik tersebut sampai ke akarnya.

Sekarang kamu bisa memanggil Claude lewat pustaka Boto3 di endpoint bedrock-runtime maupun lewat Messages API di endpoint bedrock-mantle. Keduanya siap ngasih data JSON yang patuh pada schema tanpa perlu logic retry yang boros token dan bikin pusing.

Panduan gratis · gratis

Panduan Cepat API AI untuk Developer

Dari request pertama sampai siap produksi: contoh kode, streaming, kontrol biaya, keamanan API key, dan penanganan error.

  • Contoh request dengan cURL, Python, dan JavaScript
  • Streaming dan format OpenAI vs Anthropic
  • Cara mengontrol biaya token
  • Checklist keamanan dan siap produksi

Dengan mengirim, kamu setuju menerima email dari Classai sesuai Kebijakan Privasi. Bisa berhenti berlangganan kapan saja.

Apa Itu Structured Outputs Claude di Amazon Bedrock?

Secara sederhana, structured outputs adalah fitur yang memaksa Claude memproduksi jawaban yang 100% sesuai dengan skema JSON (JSON schema) yang kamu tentukan. Fitur ini berlaku buat semua model Anthropic Claude yang tersedia di Amazon Bedrock, mulai dari Claude Haiku 5.5 sampai Claude Sonnet 5.

Sebelum adanya update ini, kalau kamu butuh JSON rapi, kamu biasanya mengandalkan prompt engineering tingkat dewa. Kamu bakal menulis prompt panjang lebar, ngasih contoh few-shot, lalu memasang library validator kayak Pydantic atau Zod di sisi backend. Kalau formatnya meleset, aplikasimu bakal melempar error JSON.parse() dan terpaksa memanggil API lagi lewat mekanisme retry. Cara lama ini nggak cuma bikin aplikasi lemot, tapi juga bikin tagihan cloud membengkak karena kamu bayar token untuk output yang gagal dibaca.

Lewat structured outputs di Amazon Bedrock, kamu nggak perlu lagi trik-trik ribet kayak gitu. Setiap field yang kamu wajibkan dipastikan selalu muncul, tipe datanya sesuai (string tetap string, boolean tetap boolean), dan model nggak bakal menyelipkan teks obrolan di luar kurung kurawal JSON.

Dua Cara Kerja: JSON Schema Output Format vs Strict Tool Use

AWS menyediakan dua mekanisme pelengkap buat memakai structured outputs di Amazon Bedrock. Keduanya dirancang buat kebutuhan arsitektur yang berbeda:

FiturTujuan UtamaContoh Penggunaan Nyata
JSON Schema output formatMengontrol struktur respons teks Claude secara langsungEkstraksi data, bikin laporan, respons API backend
Strict tool useMemvalidasi parameter tool atau function callingAgentic workflow, pemanggilan fungsi eksternal, otomasi multi-langkah

Fitur JSON Schema output format sangat pas kalau kamu butuh data langsung dari dokumen mentah atau teks pengguna. Misalnya, kamu memasukkan email keluhan pelanggan dan ingin Claude langsung membalas dalam objek JSON tanpa teks basa-basi.

Sementara itu, Strict tool use dirancang buat agentic workflow di mana Claude bertindak sebagai perencana yang memanggil berbagai tools internal. Saat memakai strict mode, parameter fungsi yang dikirim Claude ke sistemmu dijamin valid. Nggak bakal ada kasus di mana fungsi database mengharapkan integer tapi Claude malah mengirimkan teks.

Cara Kerja di Balik Layar: Constrained Decoding dan Caching

Banyak developer mengira AWS cuma memasang filter regex setelah Claude selesai menulis. Nyatanya, cara kerja fitur ini jauh lebih canggih karena memanfaatkan constrained decoding (dekode terbatas).

Begitu Claude men-generate teks token per token, mesin Amazon Bedrock secara aktif membatasi pilihan token berikutnya hanya pada token yang secara matematis valid menurut JSON schema kamu. Model secara fisik nggak diizinkan memproduksi karakter yang melanggar aturan skema. Inilah yang bikin sifat outputnya berubah dari probabilistik (tebak-tebakan probabilitas) menjadi deterministik (pasti patuh aturan).

Alur pemrosesan di balik layar berjalan lewat empat tahap:

  1. Schema validation: Bedrock mengecek apakah skema kamu memenuhi standar subset JSON Schema Draft 2020-12 yang didukung.
  2. Grammar compilation: Bedrock mengompilasi skema tersebut menjadi artefak grammar internal. Tahap kompilasi pertama ini butuh sedikit waktu ekstra pada request awal.
  3. Caching: Artefak grammar yang sudah jadi bakal disimpan dalam cache selama 24 jam penuh di tingkat akun AWS kamu. Request berikutnya yang memakai skema yang sama bakal langsung ngebut tanpa overhead kompilasi.
  4. Constrained generation: Model menghasilkan token yang otomatis menyusun JSON valid sesuai grammar tadi.

Tutorial Boto3: Ekstraksi Data Email Pakai InvokeModel API

Untuk mulai nyobain fitur ini di endpoint bedrock-runtime, kamu bisa memakai SDK Python resmi AWS yaitu Boto3. Skema JSON dimasukkan langsung ke dalam parameter output_config.format sebagai objek JSON bawaan Python (bukan string mentah).

Berikut contoh script lengkap buat mengekstrak data prospek (lead) dari email pelanggan memakai model Claude Sonnet 5.5:

python
import boto3
import json

REGION = "us-east-1"
bedrock_runtime = boto3.client(service_name="bedrock-runtime", region_name=REGION)

# Definisikan JSON schema yang wajib dipatuhi Claude
schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string", "description": "Customer name"},
        "email": {"type": "string", "description": "Customer email address"},
        "plan_interest": {"type": "string", "description": "Product plan of interest"},
        "demo_requested": {"type": "boolean", "description": "Whether a demo was requested"}
    },
    "required": ["name", "email", "plan_interest", "demo_requested"],
    "additionalProperties": False
}

# Panggil Claude via InvokeModel API
response = bedrock_runtime.invoke_model(
    modelId="global.anthropic.claude-sonnet-5-5",
    body=json.dumps({
        "anthropic_version": "bedrock-2023-05-31",
        "max_tokens": 512,
        "messages": [
            {
                "role": "user",
                "content": (
                    "Paulo Santos ([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": schema
            }
        }
    })
)

body = json.loads(response["body"].read())

# Cek stop_reason sebelum memproses hasil
if body["stop_reason"] == "end_turn":
    result_text = next(b["text"] for b in body["content"] if b["type"] == "text")
    print(json.dumps(json.loads(result_text), indent=2))
elif body["stop_reason"] == "max_tokens":
    print("Response truncated: increase max_tokens and retry.")

Hasil output dari script di atas bakal langsung berupa objek JSON bersih tanpa embel-embel markdown backtick:

json
{
  "name": "Paulo Santos",
  "email": "[email protected]",
  "plan_interest": "Enterprise",
  "demo_requested": true
}

Kamu bisa langsung melempar hasil parsing tersebut ke database produksi atau sistem CRM tanpa perlu khawatir formatnya rusak di tengah jalan.

Strict Tool Use di Bedrock Mantle Buat Agentic Workflow

Kalau kamu sedang merancang AI agent yang bisa menjalankan tindakan otomatis di server, kamu bisa memanfaatkan endpoint Amazon Bedrock Mantle. Endpoint ini memang dioptimalkan buat alur kerja agen yang butuh server-side tools, background inference, dan percakapan stateful.

Di Bedrock Mantle, kamu bisa menambahkan opsi "strict": True pada deklarasi tool. Dengan opsi ini, Claude dilarang keras mengarang argumen di luar skema input tool yang sudah kamu pasang.

python
import json
from anthropic import AnthropicBedrockMantle

client = AnthropicBedrockMantle(aws_region="us-east-1")

message = client.messages.create(
    model="anthropic.claude-sonnet-5",
    max_tokens=512,
    messages=[{"role": "user", "content": "What's the weather like in San Francisco?"}],
    tools=[
        {
            "name": "get_weather",
            "description": "Get the current weather for a specified 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"],
                        "description": "Temperature unit"
                    }
                },
                "required": ["location", "unit"],
                "additionalProperties": False
            }
        }
    ]
)

for block in message.content:
    if block.type == "tool_use":
        print(f"Tool: {block.name}")
        print(f"Input: {json.dumps(block.input, indent=2)}")

Karena opsi strict aktif, parameter unit pasti bernilai salah satu dari enum (celsius atau fahrenheit). Model nggak bakal bisa memasukkan input lain kayak "kelvin" atau menambahkan properti dadakan. Kalau kamu tertarik mendalami arsitektur agen yang aman dan teruji di AWS, kamu juga bisa membaca artikel kami tentang evaluasi AI agent Amazon Bedrock AgentCore.

Contoh Klasifikasi Tiket Support Skala Besar Pakai Haiku 5.5

Untuk tugas-tugas berulang yang butuh kecepatan tinggi dan biaya murah—kayak klasifikasi tiket komplain pelanggan, peringkasan ringkas, atau query database—kamu bisa memakai model Claude Haiku 5.5. Model ini lincah banget kalau dipadukan dengan structured outputs.

Berikut contoh script untuk mengklasifikasi tiket komplain secara otomatis:

python
import boto3
import json

REGION = "us-east-1"
bedrock_runtime = boto3.client(service_name="bedrock-runtime", region_name=REGION)

schema = {
    "type": "object",
    "properties": {
        "category": {
            "type": "string",
            "enum": ["billing", "technical", "account", "sales", "other"],
            "description": "Primary ticket category"
        },
        "priority": {
            "type": "string",
            "enum": ["low", "medium", "high", "urgent"],
            "description": "Urgency based on business impact"
        },
        "sentiment": {
            "type": "string",
            "enum": ["positive", "neutral", "negative"],
            "description": "Customer sentiment"
        },
        "escalate": {"type": "boolean", "description": "Whether a human should review immediately"},
        "reason": {"type": "string", "description": "One-sentence justification for the classification"}
    },
    "required": ["category", "priority", "sentiment", "escalate", "reason"],
    "additionalProperties": False
}

ticket = (
    "Our production API calls have been failing with 500 errors since this morning. "
    "We're losing orders every minute. This is the second outage this month!"
)

response = bedrock_runtime.invoke_model(
    modelId="global.anthropic.claude-haiku-5-5",
    body=json.dumps({
        "anthropic_version": "bedrock-2023-05-31",
        "max_tokens": 512,
        "system": "You are a support ticket classifier. Classify the ticket accurately.",
        "messages": [
            {"role": "user", "content": f"Classify this support ticket:\n\n{ticket}"}
        ],
        "output_config": {"format": {"type": "json_schema", "schema": schema}}
    })
)

body = json.loads(response["body"].read())

if body["stop_reason"] == "end_turn":
    result_text = next(b["text"] for b in body["content"] if b["type"] == "text")
    result = json.loads(result_text)
    print(json.dumps(result, indent=2))
    if result["escalate"]:
        print(f"Escalating to on-call: {result['category']} / {result['priority']}")
elif body["stop_reason"] == "max_tokens":
    print("Response truncated: increase max_tokens and retry.")

Untuk workflow berskala masif, structured outputs ini juga mendukung fitur batch inference asynchronous serta cross-Region inference di endpoint bedrock-runtime. Kamu juga bisa mengalirkan respons secara real-time lewat teknik streaming typed events.

Bagi kamu yang butuh prompt awal untuk menguji ekstraksi data sederhana sebelum mengintegrasikannya ke Boto3, kamu bisa memakai template berikut:

Prompt siap pakai
Kamu adalah asisten ekstraksi data. Ekstrak informasi kontak dari teks berikut ke dalam format JSON yang valid:- Nama lengkap- Alamat email- Paket langganan yang diminati- Status permintaan demo (true/false) Teks: Budi Santoso ([email protected]) tertarik mencoba paket Enterprise dan meminta sesi demo produk untuk hari Kamis jam 10 pagi.

Aturan Wajib dan Batasan JSON Schema yang Perlu Kamu Tahu

Meskipun structured outputs ini sangat membantu, ada aturan main ketat dari AWS yang wajib kamu ikuti agar request API-mu nggak ditolak mentah-mentah.

Fitur JSON Schema yang didukung penuh meliputi tipe dasar (object, array, string, integer, number, boolean, null), nilai tetap via enum dan const, penggabungan via anyOf dan allOf dengan batasan tertentu, referensi internal ($ref, $def, definitions), format string standar (date-time, date, time, duration, email, hostname, uri, ipv4, ipv6, uuid), serta minItems pada array (khusus nilai 0 dan 1).

Selain itu, ada beberapa batasan penting yang tidak ditegakkan saat generasi token meskipun diterima oleh API:

  • Skema rekursif tidak didukung.
  • Referensi $ref eksternal tidak diizinkan.
  • Batasan angka (minimum, maximum, multipleOf) tidak dipaksa oleh model saat generasi token.
  • Batasan panjang teks (minLength, maxLength) tidak ditegakkan langsung oleh model.

Jika aplikasi kamu butuh batasan angka atau panjang teks yang kaku, validasi kedua hal tersebut tetap harus kamu jalankan di layer backend aplikasi setelah respons diterima.

Pastikan juga kodemu selalu mengecek parameter stop_reason. Model bisa saja menghasilkan output yang tidak tuntas jika terpotong batas max_tokens atau jika Claude menolak merespons karena aturan keselamatan sistem (refusal).

Dampak Nyata Buat Developer dan Tim Produk di Indonesia

Buat ekosistem software engineering di Indonesia—mulai dari startup fintech, SaaS B2B, logistik, sampai perbankan—rilisnya structured outputs di Amazon Bedrock ini ngasih dampak yang sangat nyata:

  1. Arsitektur Lebih Bersih: Kamu bisa menghapus ratusan baris kode parsing regex kotor dan modul retry otomatis yang selama ini bikin codebase terasa rapuh.
  2. Hemat Biaya Infrastruktur: Karena Claude tidak lagi men-generate kalimat basa-basi di awal dan akhir JSON, jumlah token output yang dihabiskan jadi jauh lebih sedikit. Di level traffic jutaan request, penghematan biaya komputasi ini bakal sangat terasa.
  3. Kepatuhan Privasi Data: Banyak perusahaan Indonesia yang memilih Amazon Bedrock karena alasan kepatuhan data residensi dan keamanan enterprise. Dengan hadirnya fitur ini langsung di dalam VPC AWS mereka, integrasi AI ke data sensitif perbankan atau rekam medis elektronik bisa berjalan mulus tanpa risiko kebocoran data pihak ketiga.

Kebutuhan pipeline inferensi enterprise di cloud AWS memang berkembang cepat, mirip dengan kemudahan scaling model open source yang kami ulas di artikel TorchNeuron AWS Trainium Hugging Face.

Cara Nyobain Model Claude Lebih Simpel Lewat Classai Router

Mengonfigurasi izin IAM AWS, endpoint Bedrock, dan SDK Boto3 memang tepat untuk infrastruktur cloud skala besar. Tapi kalau kamu cuma mau bikin prototipe cepat, menguji performa Claude Sonnet 5, atau butuh integrasi API instan tanpa kartu kredit luar negeri, kamu bisa melirik Classai Router.

Classai Router menyediakan satu API key universal yang kompatibel langsung dengan SDK OpenAI maupun Anthropic Messages API. Cukup arahkan base URL ke router.classai.id/v1, dan kamu bisa langsung memanggil model Claude Sonnet 5 (claude-sonnet-5) dengan tarif Rp3.210 per 1 juta token input dan Rp15.750 per 1 juta token output. Pilihan model flagship lain kayak Claude Opus 5 (claude-opus-5) juga tersedia mulai Rp4.500 per 1 juta token input.

Kamu bisa mengisi saldo mulai dari Rp10.000 saja lewat QRIS, transfer virtual account bank lokal, atau e-wallet tanpa ribet urusan tagihan kurs valuta asing. Praktis banget buat kamu yang ingin segera menguji ketangguhan berbagai model frontier sebelum membawanya ke tahap produksi.

Sumber & referensi

  1. 01

Artikel ini ditulis ulang oleh Tim Classai dengan bantuan AI berdasarkan sumber di atas — bukan terjemahan. Ada yang keliru? Kabari kami di [email protected].

Pertanyaan yang sering ditanyakan

Apa bedanya structured outputs dengan prompting JSON biasa?

Prompting biasa hanya meminta model membalas format JSON secara tebak-tebakan sehingga formatnya rawan rusak. Structured outputs memakai constrained decoding di level mesin token, sehingga output dijamin 100% patuh skema.

Apakah fitur structured outputs ini tersedia untuk semua model Claude?

Ya, Amazon Bedrock mendukung structured outputs untuk semua model Anthropic Claude yang tersedia di endpoint bedrock-runtime dan bedrock-mantle.

Kenapa request pertama saat memakai schema baru terasa lebih lama?

Amazon Bedrock butuh mengompilasi skema JSON menjadi artefak grammar sebelum token di-generate. Hasil kompilasi ini bakal disimpan dalam cache selama 24 jam sehingga request berikutnya berjalan cepat.

Apakah structured outputs bisa dipakai untuk streaming dan batch inference?

Bisa banget. Structured outputs di Amazon Bedrock mendukung pemrosesan batch inference untuk volume data besar dan mendukung pengiriman streaming dalam bentuk typed events.

Luthfi

Classai Weekly

dari Luthfi · Setiap Senin, 06.30 WIB

Nggak sempat ngikutin berita AI? Biar aku yang rangkumin tiap Senin.

  • 5 berita AI paling penting minggu ini — udah disaring, nggak perlu baca puluhan situs
  • Kenapa itu penting buat kamu — plus opini jujur Luthfi soal arahnya
  • 1 prompt siap pakai yang bisa langsung dicoba
  • Pilihan kelas & model AI minggu ini — kadang ada promo khusus pelanggan

Dengan mengirim, kamu setuju menerima email dari Classai sesuai Kebijakan Privasi. Bisa berhenti berlangganan kapan saja.

Lihat contoh edisi

Bermanfaat? Bagikan ke tim atau temanmu.

Langkah berikutnya

Sudah paham teorinya. Sekarang praktikkan.

Daftar, isi saldo mulai puluhan ribu rupiah, dan panggil model AI pilihanmu dari kode yang sudah ada.

Ditulis oleh

Tim Engineering Classai

Pengembang Classai Router

Tim Engineering Classai membangun dan menjalankan Classai Router, gateway API AI yang kompatibel dengan format OpenAI dan Anthropic. Kami menulis panduan teknis dari pengalaman mengoperasikan API AI setiap hari.

Baca juga

Artikel terkait

Semua Developer