Outcomes adalah fitur Research Preview. Minta akses untuk mencobanya.
outcome meningkatkan sesi dari percakapan menjadi pekerjaan. Anda menentukan seperti apa hasil akhirnya dan cara mengukur kualitasnya. Agen bekerja menuju target tersebut, mengevaluasi diri sendiri dan melakukan iterasi sampai hasil tercapai.
Ketika Anda menentukan hasil, harness secara otomatis menyediakan grader untuk mengevaluasi artefak terhadap rubrik. Ini memanfaatkan jendela konteks terpisah untuk menghindari dipengaruhi oleh pilihan implementasi agen utama.
Grader mengembalikan rincian per-kriteria: baik konfirmasi bahwa artefak memenuhi rubrik, atau celah spesifik antara pekerjaan saat ini dan persyaratan. Umpan balik tersebut diberikan kembali kepada agen untuk iterasi berikutnya.
Semua permintaan Managed Agents API memerlukan header beta managed-agents-2026-04-01. Fitur research preview juga memerlukan managed-agents-2026-04-01-research-preview. SDK menetapkan header beta ini secara otomatis.
Rubrik adalah dokumen markdown yang menjelaskan penilaian per-kriteria. Rubrik diperlukan.
Contoh rubrik:
# Rubrik Model DCF
## Proyeksi Pendapatan
- Menggunakan data pendapatan historis dari 5 tahun fiskal terakhir
- Memproyeksikan pendapatan setidaknya 5 tahun ke depan
- Asumsi tingkat pertumbuhan dinyatakan secara eksplisit dan masuk akal
## Struktur Biaya
- COGS dan biaya operasional dimodelkan secara terpisah
- Margin konsisten dengan tren historis atau penyimpangan dibenarkan
## Tingkat Diskon
- WACC dihitung dengan asumsi yang dinyatakan untuk biaya ekuitas dan biaya utang
- Beta, tingkat bebas risiko, dan premi risiko ekuitas bersumber atau dibenarkan
## Nilai Terminal
- Menggunakan metode pertumbuhan perpetuitas atau kelipatan keluar (nyatakan mana)
- Tingkat pertumbuhan terminal tidak melebihi pertumbuhan PDB jangka panjang
## Kualitas Output
- Semua angka dalam satu file .xlsx dengan lembar yang diberi label dengan jelas
- Asumsi kunci ada di lembar "Assumptions" terpisah
- Analisis sensitivitas pada WACC dan tingkat pertumbuhan terminal disertakanBerikan rubrik sebagai teks inline pada user.define_outcome (ditunjukkan di bagian berikutnya), atau unggah melalui Files API untuk digunakan kembali di seluruh sesi:
Memerlukan header beta files-api-2025-04-14.
from pathlib import Path
rubric = client.beta.files.upload(file=Path("/path/to/pr_review_rubric.md"))
print(f"Uploaded rubric: {rubric.id}")Setelah membuat sesi, kirim acara user.define_outcome. Agen mulai bekerja segera; tidak ada acara pesan pengguna tambahan yang diperlukan.
# Create a session
session = client.beta.sessions.create(
agent=agent.id,
environment_id=environment.id,
title="Financial analysis on Costco",
)
# Define the outcome — agent starts working on receipt
client.beta.sessions.events.send(
session_id=session.id,
events=[
{
"type": "user.define_outcome",
"description": "Build a DCF model for Costco in .xlsx",
"rubric": {"type": "text", "content": RUBRIC},
# or: "rubric": {"type": "file", "file_id": rubric.id},
"max_iterations": 5, # optional; default 3, max 20
}
],
)Kemajuan pada sesi berorientasi hasil ditampilkan pada aliran acara.
agent.* (pesan, penggunaan alat, dll.) menunjukkan kemajuan menuju hasil.span.outcome_evaluation_* hanya dipancarkan untuk sesi berorientasi hasil dan menunjukkan jumlah loop iterasi dan proses umpan balik grader.user.message events ke sesi berorientasi hasil, untuk mengarahkan pekerjaan agen saat berkembang, tetapi ini tidak perlu; agen tahu untuk bekerja sampai telah menghabiskan iterasinya atau mencapai hasil.user.interrupt akan menghentikan pekerjaan pada hasil saat ini dan menandai span.outcome_evaluation_end.result sebagai interrupted, memungkinkan Anda untuk memulai hasil baru.Hanya satu hasil yang didukung pada satu waktu, tetapi Anda dapat merantai hasil bersama secara berurutan. Untuk melakukan ini, kirim acara user.define_outcome baru setelah acara terminal hasil sebelumnya.
Ini adalah acara yang Anda kirim untuk memulai hasil. Ini diulang kembali saat diterima, termasuk stempel waktu processed_at dan outcome_id.
{
"type": "user.define_outcome",
"description": "Build a DCF model for Costco in .xlsx",
"rubric": { "type": "file", "file_id": "file_01..." },
"max_iterations": 5
}Dipancarkan setelah grader memulai evaluasi atas satu loop iterasi. Bidang iteration adalah penghitung revisi berbasis 0: 0 adalah evaluasi pertama, 1 adalah re-evaluasi setelah revisi pertama, dan seterusnya.
{
"type": "span.outcome_evaluation_start",
"id": "sevt_01def...",
"outcome_id": "outc_01a...",
"iteration": 0,
"processed_at": "2026-03-25T14:01:45Z"
}Detak jantung yang dipancarkan saat grader berjalan. Penalaran internal grader tidak transparan: Anda melihat bahwa itu bekerja, bukan apa yang dipikirkannya.
{
"type": "span.outcome_evaluation_ongoing",
"id": "sevt_01ghi...",
"outcome_id": "outc_01a...",
"processed_at": "2026-03-25T14:02:10Z"
}Dipancarkan setelah grader selesai mengevaluasi satu iterasi. Bidang result menunjukkan apa yang terjadi selanjutnya.
| Hasil | Selanjutnya |
|---|---|
satisfied | Sesi beralih ke idle. |
needs_revision | Agen memulai siklus iterasi baru. |
max_iterations_reached | Tidak ada siklus evaluasi lebih lanjut. Agen dapat menjalankan satu revisi akhir sebelum sesi beralih ke idle. |
failed | Sesi beralih ke idle. Dikembalikan ketika rubrik secara fundamental tidak cocok dengan tugas, misalnya jika deskripsi dan rubrik saling bertentangan. |
interrupted | Hanya dipancarkan jika outcome_evaluation_start sudah dipecat sebelum gangguan. |
{
"type": "span.outcome_evaluation_end",
"id": "sevt_01jkl...",
"outcome_evaluation_start_id": "sevt_01def...",
"outcome_id": "outc_01a...",
"result": "satisfied",
"explanation": "All 12 criteria met: revenue projections use 5 years of historical data, WACC assumptions are stated, sensitivity table is included...",
"iteration": 0,
"usage": {
"input_tokens": 2400,
"output_tokens": 350,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 1800
},
"processed_at": "2026-03-25T14:03:00Z"
}Anda dapat mendengarkan pada aliran acara untuk span.outcome_evaluation_end, atau polling GET /v1/sessions/:id dan membaca outcome_evaluations[].result:
session = client.beta.sessions.retrieve(session.id)
for outcome in session.outcome_evaluations:
print(f"{outcome.outcome_id}: {outcome.result}")
# outc_01a...: satisfiedAgen menulis file output ke /mnt/session/outputs/ di dalam kontainer. Setelah sesi idle, ambil melalui Files API yang dibatasi pada sesi:
files = client.beta.files.list(scope_id=session.id)
for f in files.data:
print(f"{f.id}: {f.filename} ({f.size_bytes} bytes)")
content = client.beta.files.download(files.data[0].id)
content.write_to_file("costco_dcf.xlsx")Was this page helpful?