Lewati ke konten utama

Tutorial API Claude Fable 5.2: Bangun Agen Penguji Hipotesis

Bisakah agen AI menalar seperti ilmuwan saat jawabannya disembunyikan darinya? Bangun agen Python dengan Claude Fable 5.2 yang menguji penjelasan bersaing untuk data berisik, merancang eksperimen lanjutan, dan memprediksi hasil yang belum pernah dilihat, dinilai oleh kode terpisah yang tidak bisa disentuhnya.
· 15 mnt Baca

Jelajahi bersama AI

LLM pandai terdengar seolah-olah mereka menalar hingga menemukan jawaban. Apakah itu benar-benar terjadi lebih sulit untuk diperiksa. Dalam banyak tugas, model entah pernah melihat sesuatu yang mirip dengan jawabannya, atau tidak ada yang bisa memverifikasi jawabannya sama sekali. Jadi saya membuat sebuah uji di mana jawabannya tetap tersembunyi.

Claude Fable 5.2 menerima pembacaan berisik dari perangkat simulasi yang mendingin setelah dimatikan, ditambah 4 kemungkinan penjelasan mengapa pendinginannya melambat di tengah jalan. Ia harus memilih satu, merancang eksperimen lanjutan, dan berkomitmen pada prediksi sebelum melihat satu pun pengukuran baru. Kode Python terpisah kemudian menilai prediksinya, dan Claude tidak pernah menyentuhnya.

Perangkat pendingin hanyalah kasus uji. Yang dapat dibawa ke konteks lain adalah pengaturannya: sembunyikan kebenaran dari model, tetapkan aturan penilaian sebelum panggilan API pertama, bekukan prediksi, dan nilai menggunakan kode yang tidak dapat dilihatnya. Anda bisa menggunakannya ulang untuk masalah apa pun bertema “penjelasan mana yang benar?”, dari analisis akar penyebab hingga membaca uji A/B.

Dalam tutorial ini, Anda akan membangun agen tersebut di Python. SciPy menangani hitungan; Claude memutuskan pemeriksaan apa yang dijalankan berikutnya dan apa kesimpulannya. Jika Anda nyaman dengan fungsi Python dan permintaan API, Anda bisa mengikuti, dan saya menjelaskan matematika pendinginan saat pertama kali muncul. Kita akan membahas cara:

  • Mengirim permintaan pertama ke Fable 5.2 dari Python.
  • Menghasilkan data pendinginan berisik sambil menjaga jawabannya di luar alat agen.
  • Mengestimasi empat model pendinginan dengan SciPy dan membandingkan galat data yang ditahan.
  • Membangun loop alat yang mempertahankan blok pemikiran Claude.
  • Membiarkan agen memilih eksperimen konfirmasi dan membekukan prediksinya.
  • Menilai pengukuran yang tak terlihat dan menghitung biaya API.

Ringkasan Claude Fable 5.2 kami membahas peluncuran dan tolok ukur, jadi di sini saya fokus pada API dan uji pendinginan. Saya menjalankan eksperimen sehari setelah peluncuran.

Ringkasnya

Saya memberi Fable 5.2 data berisik dari perangkat simulasi yang pendinginannya melambat di tengah jalan, plus empat kemungkinan penjelasan. Ia harus memilih satu, merancang eksperimen baru, dan memprediksi hasilnya sebelum melihatnya.

  • Fable menyimpulkan perlambatan dipicu sekitar 55 °C, bukan setelah waktu tetap. Pilihannya menghasilkan galat sekitar 4× lebih kecil daripada penjelasan terbaik berikutnya.
  • Prediksinya untuk eksperimen tak terlihat meleset rata-rata hanya 0,3 °C; alternatifnya meleset 2–4 °C.
  • Ia mengidentifikasi aturannya, bukan penyebab fisiknya, dan hanya memilih di antara penjelasan yang saya sediakan.
  • Seluruh proses biayanya sekitar $0,49 dan memakan waktu sekitar satu menit.

Rancang Eksperimen dan Harness

Implementasi saya memasangkan Claude dengan empat fungsi Python, disebut alat (tools), yang akan saya tampilkan setelah dataset. Kode lengkap dan antarmuka Streamlit opsional ada di repositori GitHub.

Definisikan empat model pendinginan

Hukum pendinginan Newton menyatakan suatu objek mendingin lebih cepat saat jauh lebih panas daripada ruangan, lalu melambat ketika selisih suhu menyempit. Persamaannya adalah T(t) = Ta + (T0 - Ta) * exp(-k * t). Di sini, T0 adalah suhu awal, Ta adalah suhu ruangan, dan k adalah laju pendinginan per menit.

Saya menulis empat keluarga model untuk dipilih oleh agen:

  • Laju tunggal: satu k sepanjang waktu, digunakan sebagai baseline

  • Perubahan waktu: dua laju, berganti pada menit yang sama di setiap run

  • Ambang suhu: dua laju, berganti pada suhu bersama, sehingga pada menit berbeda di tiap run

  • Offset sensor: satu laju sebenarnya, plus galat probe yang mulai di tengah dan membesar

Pisahkan pengukuran terlihat dari kebenaran tersembunyi

Claude melihat tiga seri pendinginan dan apa pun yang dikembalikan alat. Laju sebenarnya, ambang, pengaturan data, dan pengukuran konfirmasi tetap berada di luar akses alatnya.

Diagram arsitektur dengan zona yang terlihat model berisi Claude Fable 5.2, alat Python, dan run yang terlihat, serta zona khusus harness berisi gerbang, prediksi beku, simulator privat, dan evaluator independen

Claude mengakses alat; kebenaran tetap tersembunyi. Gambar oleh Penulis.

Segala sesuatu di Python di sekitar Claude membentuk agent harness. Selain menjalankan alat, ia membatasi permintaan, waktu, dan biaya, seperti yang akan saya bahas pada loop alat.

Sebelum panggilan API pertama, saya tetapkan kandidat model, batas parameter, limit, dan aturan lolos untuk eksperimen baru: RMSE paling tinggi 1,0 °C dan tidak lebih dari setengah baseline laju tunggal. Aturan-aturan itu tetap tetap.

Menyiapkan Claude Fable 5.2 di Python

Penyiapan memerlukan lingkungan virtual dan kunci API. Model claude-fable-5-2 dapat membaca hingga 1M token dari prompt dan riwayat percakapan, lalu mengembalikan hingga 128K token keluaran.

Pemikiran adaptif, di mana model memutuskan seberapa banyak bernalar sebelum menjawab, selalu aktif, dan API bawaan pada upaya tinggi. Harga Claude API adalah $8 per satu juta token input dan $40 per satu juta token output, dengan penulisan prompt-cache lima menit seharga $10 dan pembacaan cache $0,20.

Anda memerlukan:

  • Python 3.12+, karena NumPy 2.5.4 dan SciPy 1.18.1 membutuhkannya (paket Anthropic sendiri mendukung 3.10)

  • Kunci API dengan akses ke claude-fable-5-2

  • anthropic 2.7.0, rilis yang menambahkan ID model

Klon proyek dan pasang dependensi yang dipin. Di macOS atau Linux, buat lingkungan dengan python3.12 -m venv .venv, aktifkan dengan source .venv/bin/activate, dan ganti Copy-Item dengan cp.

git clone https://github.com/KhalidAbdelaty/claude-fable-5-2-api.git
cd claude-fable-5-2-api
py -3.12 -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r requirements.txt
Copy-Item .env.example .env      # then paste your key after ANTHROPIC_API_KEY=

Kodenya memuat kunci API dari environment tanpa mencetaknya. README repositori mencantumkan perintah untuk eksperimen lengkap, dan hanya dua di antaranya yang memanggil API. Panduan API Claude kami mencakup kunci dan penagihan secara umum.

Buat permintaan API Fable 5.2 pertama Anda

Lewati bagian ini jika Anda sudah pernah memanggil Claude dari Python. Permintaan ini berfokus pada bukti yang membedakan dua hipotesis.

import anthropic
from dotenv import load_dotenv

load_dotenv(".env", override=True)
client = anthropic.Anthropic()  # reads ANTHROPIC_API_KEY

response = client.messages.create(
    model="claude-fable-5-2",
    max_tokens=4096,
    output_config={"effort": "high"},
    messages=[{"role": "user", "content": (
        "Three cooling runs start at 80, 95, and 110 C. Each seems to slow down partway through. "
        "In three short bullets: what pattern across the runs would point to a change after a fixed "
        "time, what pattern would point to a change at a fixed temperature, and what the data alone "
        "cannot tell us.")}],
)
print("block types:", [block.type for block in response.content])
print("stop reason:", response.stop_reason)
print("".join(block.text for block in response.content if block.type == "text"))

Claude mengembalikan daftar blok konten bertipe, jadi bacalah teks berdasarkan tipe blok; content[0] bisa jadi blok pemikiran. Berikut respons pertamanya:

block types: ['thinking', 'text']
stop reason: end_turn

- **Fixed time:** the slowdown appears at the same elapsed time in all three runs but at different temperatures, with the hotter-start runs still hotter when it happens.
- **Fixed temperature:** the slowdown appears at the same temperature in all three runs but at different elapsed times, with the hotter-start runs reaching it later.
- **What the data cannot tell us:** the cause. A matching pattern shows what the change tracks, not why it happens (for example a phase change, a setup artifact, or a shift in the surroundings). Since cooling naturally slows as it nears room temperature, the data also cannot show on its own that there is a distinct change rather than a smooth curve.

Baik blok thinking maupun text muncul. Token pemikiran dihitung sebagai token keluaran, jadi sertakan saat memperkirakan biaya. Panduan migrasi Claude Fable 5.2 menyatakan bahwa budget_tokens, thinking disabled, temperature, top_p, dan top_k mengembalikan galat 400.

Buat Dataset Pendinginan Tanpa Kebocoran Data

Datanya harus cukup berantakan sehingga memerlukan pemodelan, dan jawabannya harus tetap di luar jangkauan Claude.

Simulasikan tiga run pendinginan

Saya mensimulasikan tiga run dari hukum Newton dengan perubahan pendinginan tersembunyi yang kontinu. Run A mulai pada 80 °C di ruangan 21,0 °C, B pada 95 °C di 24,0 °C, dan C pada 110 °C di 22,5 °C. Generator bilangan acak NumPy tetap menambahkan noise Gaussian, dan satu pembacaan sengaja diberi galat ekstra.

Scatter plot tiga run pendinginan berisik, A mulai pada 80 °C, B pada 95 °C, dan C pada 110 °C, masing-masing diambil sampel tiap menit selama 55 menit, dengan satu pembacaan pada run B jauh di atas tetangganya

Tiga run berisik mencakup satu outlier. Gambar oleh Penulis.

Run A mendingin lebih cepat di awal daripada di akhir. Pola tersebut saja tidak menunjukkan perubahan diskret karena setiap eksponensial akan melambat saat mendekati suhu ruangan.

Run B berisi lonjakan terisolasi sekitar 4 °C, sementara celah tetangga di tempat lain tetap di bawah 1,2 °C. Setiap belokan menyebar selama beberapa menit yang berisik, jadi inspeksi visual tidak bisa membedakan model waktu vs ambang.

Uji Hipotesis Pendinginan dengan Alat Python

Python menyesuaikan (fit) tiap kandidat pendinginan di bawah aturan yang sama dan mengembalikan parameternya serta galatnya. Claude tidak pernah melihat kode fitting, hanya apa yang dikembalikan tiap alat.

Estimasi parameter bersama tanpa satu outlier mendominasi

Fitting berarti memilih nilai parameter yang menjaga tiap kurva prediksi tetap dekat dengan pengukurannya. Saya menggunakan loss L1 lembut karena itu mengurangi pengaruh galat besar tanpa menghapus pembacaan tersebut.

Semua run berbagi parameter hasil fitting, sedangkan tiap run menyimpan suhu awal dan suhu ruangannya sendiri. Untuk model ambang, itu memberi tiap run waktu ganti sendiri, ln((T0 - Ta) / (threshold - Ta)) / k_above.

Fungsi least_squares() SciPy mencari parameter terbaik, sementara batas parameter menjaga laju dan titik ganti tetap dalam rentang yang ditetapkan sebelum run.

Cuplikan di bawah menunjukkan pemanggilan solver dan pemeriksaan konvergensi. Fungsi residual dan pemindaian grid di sekitarnya ada di repositori.

from scipy.optimize import least_squares

def _solve(hypothesis, names, x0, lo, hi, runs):
    # soft L1: residuals under f_scale count roughly squared, larger ones roughly linearly
    return least_squares(_residuals, x0, bounds=(lo, hi), method="trf",
                         loss="soft_l1", f_scale=0.5, args=(hypothesis, names, runs))

# scan the change point in 0.5 steps with the rates fitted at each step, then refine all three
res = _solve(hypothesis, names, best_grid_point, lo, hi, runs)
converged = bool(res.success and res.status > 0 and np.all(np.isfinite(res.x)))
at_bound = [n for n, v, a, b in zip(names, res.x, lo, hi) if min(v - a, b - v) < 1e-4 * (b - a)]

Saya menetapkan f_scale ke 0,5 °C sebelum run. Residual yang lebih besar dari itu mulai kehilangan pengaruh di bawah L1 lembut. Pemindaian grid atas titik ganti memberi solver nilai awal yang masuk akal.

Validasi model dengan uji leave-one-run-out

MAE adalah rata-rata selisih dalam °C. RMSE mengkuadratkan galat terlebih dahulu, sehingga galat yang lebih besar dihitung lebih berat.

Galat pelatihan menguntungkan model dengan lebih banyak parameter. Validasi silang memperkirakan galat data yang ditahan dengan memutar data yang dikecualikan. Di sini, validasi leave-one-run-out (LORO) melakukan fitting pada dua run dan memprediksi yang ketiga.

Definisikan skema pemanggilan alat Claude

Skema alat adalah deskripsi JSON tentang fungsi Python dan argumen yang boleh dikirim Claude. Strict tool use membuat API memeriksa bentuk tersebut sebelum Python menjalankan fungsinya.

Claude dapat meminta empat alat:

  • inspect_runs: mengembalikan pengukuran yang terlihat dan ringkasan kemiringan sederhana.

  • fit_hypothesis: melakukan fitting satu model pendinginan dan mengembalikan parameternya serta galat data yang ditahan.

  • inspect_residuals: menunjukkan di mana suhu terukur berbeda dari prediksi model.

  • compare_predictions: membandingkan model terpasang di bawah kondisi eksperimen yang diusulkan.

Skema compare_predictions menjaga pengukuran konfirmasi tetap di luar alat:

{"name": "compare_predictions", "strict": True,
 "description": "Predict a new run from existing fits under proposed conditions and report how far the "
                "predictions differ. initial_temp_c must be 75 to 115 and ambient_temp_c 20 to 25. "
                "Returns predictions only; no new measurements are generated.",
 "input_schema": {"type": "object", "additionalProperties": False,
                  "properties": {"initial_temp_c": {"type": "number"},
                                 "ambient_temp_c": {"type": "number"},
                                 "fit_ids": {"type": "array", "items": {"type": "string"}}},
                  "required": ["initial_temp_c", "ambient_temp_c", "fit_ids"]}}

Nilai fit_ids merujuk pada model yang telah difit sebelumnya dalam investigasi yang sama. Skema ketat tidak menerima minimum atau maximum, jadi Python memeriksa sendiri rentang suhu. Biarkan tool_choice pada auto, karena memaksa alat mengembalikan galat 400 pada Fable 5.2.

Bangun Tool Loop Claude

Aplikasi mengulang satu siklus: kirim percakapan ke Claude, jalankan alat Python yang diminta, dan kembalikan hasilnya. Ini berlanjut hingga perbandingan yang diperlukan selesai, lalu meminta Claude laporan akhir dalam format tetap.

Tulis prompt untuk pengujian hipotesis

Prompt sistem menggambarkan metode tanpa menyarankan jawaban. Inti promptnya adalah:

SYSTEM = """You are a scientific investigator working on a controlled cooling experiment. You decide which
checks to run and how to read the results. Python tools do every numerical calculation.

How to work:
- Look at the measurements before you choose a model.
- Fit every candidate model with fit_hypothesis. Compare them on leave-one-run-out error as well as
  training error, because a model with more parameters always fits the training runs at least as well.
- Use inspect_residuals to look for systematic patterns and to decide whether any single reading is
  an outlier.
- Use only numbers that a tool returned. Do not invent measurements, parameters, or errors.
- Keep observed evidence separate from assumptions. The data can show which mathematical model fits
  best; it cannot show the physical cause of a change.
- If the evidence does not separate the candidates, say so and treat the result as inconclusive.
..."""

Saya paling peduli dengan butir terakhir. Tanpanya, model harus menyebut pemenang bahkan ketika galatnya terlalu berdekatan untuk diputuskan.

Pertahankan tool loop hanya-menambah

Setiap panggilan mengirim system dan tools yang sama, dan setiap respons dikembalikan tanpa sentuhan. Cuplikan ini menunjukkan penanganan pesan; loop lengkap dengan penanganan penghentian ada di repositori.

resp = client.messages.create(
    model="claude-fable-5-2",
    max_tokens=20_000,
    system=SYSTEM,
    tools=TOOLS,  # all four, declared on the first request
    thinking={"type": "adaptive", "display": "summarized"},
    output_config={"effort": "high"},
    cache_control={"type": "ephemeral"},  # automatic prompt caching
    messages=messages,
)
messages.append({"role": "assistant", "content": resp.content})  # unchanged, thinking included

if resp.stop_reason == "tool_use":
    results = []
    for block in resp.content:
        if block.type == "tool_use":
            out, is_error = box.run(block.name, dict(block.input))
            results.append({"type": "tool_result", "tool_use_id": block.id,
                            "content": out, "is_error": is_error})
    messages.append({"role": "user", "content": results})

Preserved thinking memungkinkan Claude menyimpan penalaran sebelumnya lintas giliran, selama system, tools, dan pesan sebelumnya tetap tak berubah. Pada Fable 5.2, mengedit salah satunya mengembalikan galat 400 secara default.

Anda dapat mengubah output_config, tool_choice, dan max_tokens antar panggilan, meski format keluaran baru tetap tidak memanfaatkan prompt cache. Kelompokkan hasil alat paralel dalam satu pesan pengguna, seperti loop di atas.

Tetapkan batas permintaan, waktu, dan biaya

Python menghitung jumlah permintaan, panggilan alat, waktu berlalu, dan biaya, dan tidak akan memulai pekerjaan baru setelah batas tercapai. Permintaan yang sudah berjalan masih bisa melampaui batas waktu atau biaya, jadi perlakukan dua hal itu sebagai batas lunak.

Sebelum menerima jawaban akhir, Python juga memeriksa bahwa Claude telah melakukan fitting untuk semua kandidat, memeriksa residual, dan membandingkan desain konfirmasi. Jika Claude berhenti karena alasan apa pun selain permintaan alat atau giliran selesai, investigasi berakhir sebagai tidak konklusif. Tetapkan max_tokens cukup tinggi untuk pemikiran plus jawaban.

Kembalikan laporan terstruktur

Setelah pemeriksaan lolos, satu permintaan lagi meminta keluaran terstruktur pada riwayat yang sama, sehingga laporan akhir tiba sebagai objek Python yang tervalidasi:

messages.append({"role": "user", "content": REPORT_PROMPT})
resp = client.messages.parse(
    model="claude-fable-5-2", max_tokens=20_000, system=SYSTEM, tools=TOOLS,
    thinking={"type": "adaptive", "display": "summarized"},
    output_config={"effort": "high"},
    output_format=InvestigationReport,  # the SDK sends this as output_config.format
    tool_choice={"type": "none"},       # tools stay declared, so the prefix check passes
    messages=messages,
)
problems = validate(resp.parsed_output, box.fits)  # fit IDs exist, all four covered, ranges hold

Pydantic memeriksa bentuk laporan, dan validate() mengonfirmasi bahwa setiap fit yang disebutkan ada dan kondisinya berada dalam rentang yang diizinkan. Setelah itu, pilihan model dan kondisi bersifat final.

Fable 5.2 Memilih Model Ambang Suhu

Saya menjalankan satu investigasi pada upaya high. Berikut cara Claude sampai pada jawabannya.

Lacak urutan uji Claude

Claude memulai dengan memeriksa pengukuran. Sebelum melakukan fitting apa pun, ringkasannya berbunyi: "Perubahan muncul sekitar 55 °C di setiap run: pada menit 12 di A, menit 19 di B, dan menit 22 di C. Itu mengarah ke ambang, jadi saya akan fit keempatnya."

Saya menyebutnya anchoring: Claude berkomitmen pada jawaban sebelum mengujinya. Fitting berikutnya setuju, dengan pergantian dekat menit 12, 18, dan 22. Jejak terminal menunjukkan urutan pemeriksaan yang tersisa.

Terminal PowerShell yang menunjukkan urutan pemilihan model: baca run yang terlihat, fit empat model, periksa residual, dan pilih model ambang suhu

Jejak terminal menunjukkan urutan uji Claude. Gambar oleh Penulis.

Bandingkan galat data yang ditahan di empat model

RMSE latih mengukur tiap fit pada ketiga run. Kolom held-out merata-ratakan tiga uji LORO.

Kandidat

Asumsi utama

RMSE latih (°C)

MAE held-out (°C)

RMSE held-out (°C)

Laju tunggal

Satu laju sepanjang run

4,08

3,90

4,60

Perubahan waktu

Pergantian bersama sekitar menit 19

1,92

2,17

2,63

Ambang suhu

Pergantian bersama sekitar 55 °C

0,49

0,32

0,48

Offset sensor

Drift pengukuran yang membesar

1,49

1,45

1,87

Untuk model ambang, galat latih dan held-out berdekatan, jadi fit terbawa dari satu run ke run lain, meski tiga run tidak bisa menyingkirkan overfitting secara umum. Plot residual di bawah menunjukkan suhu teramati dikurangi prediksi tiap model.

Bagan dua panel: panel atas menumpuk fit ambang, perubahan waktu, dan laju tunggal di tiga run; panel bawah menunjukkan residual untuk fit ambang dan perubahan waktu, dengan pembacaan bertanda di run B pada menit 33

Residual ambang tidak menunjukkan pola sistematis. Gambar oleh Penulis.

Fit perubahan waktu cocok dengan run B. Setelah pergantian, ia meleset pada run A sekitar +2,5 hingga +3,5 °C dan pada run C sebesar -1,5 hingga -2,8 °C.

Saya menganggap perubahan tanda lebih berguna daripada peringkat semata: itu menunjukkan pergantian datang lebih awal di A dan lebih lambat di C, seperti yang diprediksi pemicu suhu. Model offset sensor mengurangi sebagian galat dengan menambahkan drift, namun galat held-out-nya tetap lebih besar.

Periksa pembacaan yang rusak

Agen tidak tahu pembacaan mana yang saya rusak. Ia menemukan run B, menit 33, dengan residual sekitar +4,3 °C. Z-score robust-nya, yang mengukur jarak dari sebaran residual khas, di atas 12.

Claude membiarkan pembacaan itu tetap ada, karena L1 lembut sudah membatasi tarikannya. Untuk memeriksa pilihan itu, saya melakukan fitting ulang keempat model tanpa pembacaan tersebut. Model ambang tetap pertama dengan selisih besar, dan estimasi ambangnya nyaris tidak bergerak.

Rancang Eksperimen Konfirmasi

Agen membandingkan prediksi kandidat di berbagai suhu awal dan suhu ruangan, lalu memilih kondisi tanpa melihat pengukuran baru apa pun.

Diagram membandingkan menit pergantian waktu tetap dan ambang suhu saat suhu awal berubah, dengan run terlihat dan kondisi konfirmasi ditandai

Suhu awal mengungkapkan masing-masing aturan pemicu. Gambar oleh Penulis.

Pilih kondisi yang memisahkan model

Seperti disebutkan di Ringkasnya, agen memilih awal 75 °C dan ruangan 20 °C. Model ambang berganti dekat menit 10, sementara model waktu berganti dekat menit 19. Kurva offset sensor juga tetap terpisah dari prediksi ambang.

Setelan menengah dekat run B hanya akan memisahkan model ambang dan waktu sekitar 0,6 °C. Kondisi yang dipilih sedikit berada di luar rentang yang diuji, dan Claude menandai itu dalam laporannya.

Bagan garis prediksi beku dari semua empat kandidat terpasang untuk run mulai 75 °C dengan 20 °C ambient, dengan garis putus-putus menandai pergantian model ambang pada 10,0 menit dan model waktu pada 18,7 menit

Prediksi kandidat untuk run terpilih. Gambar oleh Penulis.

Kunci prediksi sebelum pembuatan data

Saya mengunci kondisi pilihan, parameter hasil fitting, dan prediksi setiap kandidat sebelum menghasilkan pengukuran baru. Agen tidak menerima pengukuran konfirmasi dan tidak bisa merevisi jawabannya setelah hasil keluar.

Pengukuran konfirmasi menggunakan model noise Gaussian yang sama, seed tetap terpisah, dan tanpa outlier tambahan.

Nilai Run yang Tak Terlihat

Kode Python terpisah menilai prediksi beku. Ia tidak pernah memanggil API, jadi Claude tidak turut serta menilai jawabannya sendiri.

Nilai prediksi dengan Python independen

Prediksi ambang lulus kedua uji prasetel. Pada run yang tak terlihat, ia mencetak 0,27 °C MAE dan 0,32 °C RMSE. Waktu tetap mencetak 3,67 °C RMSE, offset sensor 2,35 °C, dan laju tunggal 4,28 °C.

Run konfirmasi tidak mengandung outlier yang ditanam, yang membantu menjelaskan galatnya lebih rendah dibanding hasil leave-one-run-out. Sampel noise acak yang berbeda juga bisa berkontribusi.

Bagan garis prediksi model beku untuk run pendinginan mulai 75 °C dengan 20 °C ambient, ditumpuk dengan pengukuran konfirmasi tak terlihat yang mengikuti kurva ambang suhu

Prediksi beku cocok dengan pengukuran yang tak terlihat. Gambar oleh Penulis.

Bandingkan parameter hasil fitting dengan kebenaran tersembunyi

Setelah penilaian, bandingkan parameter hasil fitting dengan nilai pembangkitan tersembunyi:

import numpy as np

def true_curve(t0, ta, minutes, truth):
    """Newton cooling whose rate drops when the temperature crosses a threshold. Continuous at the switch."""
    t = np.asarray(minutes, dtype=float)
    k1, k2, th = truth["k_above"], truth["k_below"], truth["threshold_c"]
    if t0 <= th:
        return ta + (t0 - ta) * np.exp(-k2 * t)
    t_cross = np.log((t0 - ta) / (th - ta)) / k1
    fast = ta + (t0 - ta) * np.exp(-k1 * t)
    slow = ta + (th - ta) * np.exp(-k2 * (t - t_cross))  # restarts from the threshold
    return np.where(t <= t_cross, fast, slow)

Simulator menambahkan noise Gaussian ber-seed di sekitar kurva ini.

Aturan tersembunyi adalah ambang suhu di 55 °C, dengan laju 0,045 dan 0,020 per menit serta deviasi standar noise 0,35 °C.

Laju hasil fitting cocok hingga 3 angka desimal, ambang berada dalam 0,1 °C, dan pergantian yang diprediksi dalam 0,1 menit.

Data mengidentifikasi aturan matematis yang digunakan simulator. Data tidak dapat menunjukkan apakah perangkat nyata yang melambat dekat 55 °C melibatkan perubahan fase, siklus kipas, atau penyebab fisik lainnya.

Tinjau bagaimana agen mencapai jawabannya

Laporan mengutip ID fit dan nomor alat sebagai bukti, dan menyebutkan hal yang tidak bisa ditegakkan oleh tiga run. Titik lemahnya adalah tebakan awal yang saya sebutkan tadi. Satu investigasi tidak bisa menunjukkan seberapa sering tebakan semacam itu keliru.

Tonton investigasi di Streamlit

Dalam video, saya memulai run langsung, mengikuti log alat, dan membuka tab Report, Curves, Confirmation, dan Cost setelah penilaian.

Antarmuka Streamlit menampilkan satu investigasi. Video oleh Penulis.

Ukur Biaya API Claude Fable 5.2

Investigasi, termasuk laporan akhir, memakan biaya sekitar $0,49 dan memakan waktu sedikit di atas satu menit. SciPy berjalan di mesin Anda, jadi tidak menambah tagihan API.

Permintaan laporan saja memakan hampir setengah biaya dan waktu. Seperti saya sebutkan di bagian tool-loop, format keluaran baru melewatkan prompt cache, sehingga permintaan terakhir itu memproses seluruh percakapan lagi sebelum menulis laporan panjang. Lacak input non-cache, penulisan cache, pembacaan cache, dan keluaran secara terpisah, karena masing-masing memiliki harga sendiri.

Batas dan Pertimbangan Praktis

Ada dua jenis batas yang penting di sini: apa yang dapat ditunjukkan oleh eksperimen, dan apa yang dibutuhkan kode sebelum berjalan sebagai layanan.

Batas ilmiah

Simulator dan kandidat ambang menggunakan persamaan yang sama. Pergantian bertahap pada perangkat nyata masih bisa cocok dengan model ini sambil mengikuti kurva yang berbeda.

Jika aturan sebenarnya tidak ada, agen masih bisa memilih model terdekat yang disediakan daripada menjawab inconclusive. Noise yang lebih besar atau ambang yang nyaris terlewati dapat membuat galat terlalu mirip untuk dipisahkan. Run lain mungkin mengambil urutan alat yang berbeda.

Sebelum produksi

Batas dari tool loop mencakup satu investigasi di mesin Anda. Layanan produksi memerlukan lebih banyak:

Kapan pola ini cocok

Gunakan pola ini ketika ada beberapa penjelasan yang masuk akal, Python dapat mengujinya, dan eksperimen tersembunyi dapat menilai pilihannya, terutama saat eksperimen berikutnya lebih mahal daripada panggilan API.

Gunakan Python biasa ketika Anda sudah tahu keluarga modelnya. Panduan model Fable 5.2 dari Anthropic menyarankan mencoba Opus terlebih dahulu dan menguji Fable ketika Opus tidak memenuhi kebutuhan.

Pemikiran Akhir

Kita membangun agen yang membandingkan empat model pendinginan, memilih ambang suhu, merancang run konfirmasi, dan memprediksi pengukuran yang belum pernah dilihat. Untuk perangkat sintetis ini, jawaban atas pertanyaan pembuka saya adalah ya.

Saya tidak akan membawanya terlalu jauh ke peralatan nyata atau penemuan terbuka. Seperti yang saya bahas dalam batas, kandidat mencakup persamaan milik simulator, dan saya menjalankan agen sekali.

Yang terbawa adalah metodenya: sembunyikan kebenaran, tetapkan aturan penilaian sebelum permintaan pertama, bekukan prediksi, dan gunakan evaluator terpisah. Uji berikut yang berguna adalah menambahkan model transisi bertahap dan mengulangi investigasi pada tingkat noise yang berbeda.

Untuk pemilihan model, kursus Introduction to Claude Models kami membahas lini produk Claude dan pertukarannya.

FAQs

Bisakah saya mematikan pemikiran atau menetapkan anggaran pemikiran pada Claude Fable 5.2?

Tidak. Pemikiran adaptif selalu aktif, dan baik thinking: {type: "disabled"} maupun budget_tokens mengembalikan galat 400. Kendalikan seberapa banyak ia berpikir dengan parameter effort sebagai gantinya, yang default-nya high. Token pemikiran ditagih sebagai output dan dihitung terhadap max_tokens.

Mengapa Claude Fable 5.2 mengembalikan galat 400 setelah saya mengedit pesan sebelumnya?

Setiap blok pemikiran hanya valid terhadap prompt sistem, alat, dan pesan yang datang sebelumnya, dan Fable 5.2 memeriksa ini pada setiap akun. Pertahankan percakapan hanya-menambah dan bekukan system dan tools untuk sesi. Sebagai solusi sementara, mengatur prefix_mismatch_behavior ke "drop_block" dengan header beta akan menjatuhkan blok yang terdampak alih-alih gagal.

Bisakah saya memaksa Claude Fable 5.2 untuk memanggil alat tertentu?

Tidak. Mengatur tool_choice ke any atau ke nama alat tertentu mengembalikan galat 400; hanya auto dan none yang berfungsi. Sebutkan alatnya dalam instruksi Anda dan atur strict: true sehingga pemanggilan sesuai dengan skema Anda. Jika pemanggilan diperlukan, gunakan pesan sistem di tengah percakapan.

Apa yang terjadi ketika Claude Fable 5.2 menolak permintaan?

Respons kembali dengan stop_reason: "refusal", dan stop_details.category memberi tahu Anda pagar pengaman mana yang terpicu. Anda dapat mencoba lagi pada model lain sendiri, atau memilih fallback sisi server dengan fallbacks: "default", beta yang mencoba ulang pada Claude Opus 4.8 atau Claude Opus 5. Model fallback tidak menerima blok pemikiran Fable 5.2.

Bisakah saya menggunakan Claude Fable 5.2 dengan zero data retention?

Tidak secara default. Fable 5.2 memerlukan retensi data 30 hari, dan permintaan API dari organisasi atau ruang kerja tanpa itu mengembalikan galat 400. Di bawah pengaturan ZDR, aktifkan retensi 30 hari untuk ruang kerja atau hubungi tim akun Anthropic Anda.

Bisakah Batch API menggantikan tool loop dari eksperimen ini?

Tidak. Setiap langkah alat membutuhkan respons sebelumnya, jadi Batch API tidak dapat langsung menggantikan loop ini. Diskon 50%-nya cocok untuk permintaan independen atau evaluasi paralel.

Khalid Abdelaty

Penulis

Khalid Abdelaty

Saya seorang data engineer dan pembangun komunitas yang bekerja lintas pipeline data, cloud, dan perkakas AI sambil menulis tutorial praktis dan berdampak tinggi untuk DataCamp dan pengembang yang sedang berkembang.

Topik

Terkait

blogs

Spaghetti Plot dan Jalur Badai

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026