Sesi merupakan unit eksekusi untuk tugas dalam Qoder Cloud Agents. Sesi menggabungkan Agent (konfigurasi) dan Environment (infrastruktur) untuk membentuk konteks eksekusi stateful. Anda mengirim pesan ke Sesi, yang kemudian memprosesnya dan mengembalikan aliran event.
Siklus hidup sesi
Create → idle
Sesi baru memasuki status
idle, menunggu input.idle → processing
Setelah Anda mengirim event
user.message, status berubah menjadiprocessing.processing → idle
Ketika putaran saat ini selesai, Sesi kembali ke status
idle, siap untuk putaran berikutnya.processing → canceling → idle
Ketika Anda membatalkan Sesi yang sedang berjalan, statusnya berubah menjadi
cancelingsebelum kembali keidle. Sesi tetap tersedia untuk digunakan.archived (terminal state)
Status
archivedmerupakan status terminal; sesi yang diarsipkan tidak dapat dipulihkan.
Sesi merupakan mesin keadaan dengan status inti berikut:
Status | Deskripsi | Beralih ke |
| Idle, menunggu pesan pengguna. |
|
| Sedang memproses; Agent sedang berjalan. |
|
| Permintaan pembatalan telah diterima; Sesi sedang menunggu tugas terganggu. |
|
| Diarsipkan. | — (status terminal) |
Bidang
Parameter | Tipe | Deskripsi |
| string | Dibuat sistem, dengan awalan |
| string | Nilai tetap: |
| string/object | Agent yang di-bind. Gunakan string (ID Agent) untuk versi terbaru, atau objek |
| string | ID Agent yang di-bind. Bidang ini hanya dikembalikan dalam respons dan dipertahankan demi kompatibilitas mundur. |
| string | ID Environment yang di-bind. |
| string | Status saat ini: |
| string | Status putaran saat ini: |
| string | Judul Sesi. Nilai default: |
| array | Daftar ID Memory Store yang terkait. Nilai default: |
| array | Daftar ID Vault yang terkait. Nilai default: |
| array | Sumber daya, seperti file, yang dilampirkan ke Sesi. Nilai default: |
| string | Waktu saat Sesi dibuat. |
| string | Waktu saat Sesi terakhir diperbarui. |
Respons REST API tidak menyertakan data token usage (usage). Data tersebut hanya muncul dalam event Server-Sent Events (SSE) session.status_idle di akhir setiap putaran.
Buat sesi
Saat membuat Sesi, Anda harus menentukan agent dan environment_id.
Gunakan ID Agent (string)
Metode ini mengikat Sesi ke versi terbaru Agent.
# Buat Sesi menggunakan ID Agent
curl -s -X POST https://api.qoder.com.cn/api/v1/cloud/sessions \
-H "Authorization: Bearer $QODER_PAT" \
-H "Content-Type: application/json" \
-d '{
"agent": "agent_019e5ce0bf307a1a8f952eb814aea3d5",
"environment_id": "env_019e44eb66bb748cabcd1489f6fa4428"
}' | jq .
Gunakan objek Agent (tentukan versi)
Metode ini mengikat Sesi ke versi tertentu Agent untuk memastikan perilaku yang konsisten.
# Buat Sesi dengan menentukan versi Agent
curl -s -X POST https://api.qoder.com.cn/api/v1/cloud/sessions \
-H "Authorization: Bearer $QODER_PAT" \
-H "Content-Type: application/json" \
-d '{
"agent": {
"id": "agent_019e5ce0bf307a1a8f952eb814aea3d5",
"version": 2
},
"environment_id": "env_019e44eb66bb748cabcd1489f6fa4428"
}' | jq .
Permintaan yang berhasil mengembalikan respons 201 Created.
{
"id": "sess_019e5ce0bf9074b69c3481e93771a522",
"agent": {
"created_at": "2026-05-18T10:00:00Z",
"default_environment": "",
"description": "",
"id": "agent_019e5ce0bf307a1a8f952eb814aea3d5",
"instructions": "You are a code review expert.",
"mcp_servers": [],
"model": "ultimate",
"name": "code-reviewer",
"system": "You are a code review expert.",
"tools": [
{
"type": "agent_toolset_20260401",
"enabled_tools": ["Bash", "Read", "Write"]
}
],
"type": "agent",
"updated_at": "2026-05-18T10:00:00Z",
"version": 2
},
"agent_id": "agent_019e5ce0bf307a1a8f952eb814aea3d5",
"environment_id": "env_019e44eb66bb748cabcd1489f6fa4428",
"status": "idle",
"title": "",
"turn_status": "idle",
"memory_store_ids": [],
"resources": [],
"vault_ids": [],
"type": "session",
"created_at": "2026-05-18T12:00:00Z",
"updated_at": "2026-05-18T12:00:00Z"
}
Untuk lingkungan produksi, kami merekomendasikan menggunakan metode kedua (menentukan versi) untuk mencegah perubahan perilaku tak terduga akibat pembaruan Agent.
Format bidang agent
Format | Contoh | Perilaku |
string |
| Menggunakan versi terbaru Agent. |
object |
| Mengunci Sesi ke versi yang ditentukan. |
Transisi status
Format badan permintaan event
Badan permintaan untuk POST /sessions/{id}/events harus berupa objek yang berisi array events. Setiap event dalam array mencakup bidang content, yang merupakan array blok konten.
Parameter | Tipe | Wajib | Deskripsi |
| array | Ya | Array event. Satu permintaan dapat berisi satu atau beberapa event. |
| string | Ya | Tipe event, seperti |
| array | Ya | Array blok konten. |
| string | Ya | Tipe blok konten, seperti |
| string | Ya | Konten teks. |
idle → processing
Saat Anda mengirim event user.message ke Sesi, statusnya berubah dari idle menjadi processing.
# Kirim pesan untuk memicu pemrosesan
curl -s -X POST "https://api.qoder.com.cn/api/v1/cloud/sessions/sess_019e5ce0bf9074b69c3481e93771a522/events" \
-H "Authorization: Bearer $QODER_PAT" \
-H "Content-Type: application/json" \
-d '{
"events": [{
"type": "user.message",
"content": [{"type": "text", "text": "Analyze the code complexity of all Python files in the current directory."}]
}]
}' | jq .
processing → idle
Setelah Agent selesai memproses, Sesi secara otomatis kembali ke status idle. Anda akan menerima event session.status_idle melalui aliran event.
Batalkan sesi
Anda dapat menghentikan Sesi yang sedang berjalan.
# Batalkan Sesi
curl -s -X POST "https://api.qoder.com.cn/api/v1/cloud/sessions/sess_019e5ce0bf9074b69c3481e93771a522/cancel" \
-H "Authorization: Bearer $QODER_PAT"
Permintaan pembatalan hanya menghentikan eksekusi jika Sesi berada dalam status processing. Status pertama kali berubah menjadi canceling lalu kembali ke idle setelah gangguan selesai. Sesi dapat digunakan kembali; cukup kirim user.message berikutnya untuk melanjutkan. Mencoba membatalkan Sesi yang sudah berstatus idle tidak berpengaruh. Permintaan tersebut mengembalikan respons 200 OK tanpa mengubah status idle.
Ambil sesi
# Ambil satu Sesi
curl -s "https://api.qoder.com.cn/api/v1/cloud/sessions/sess_019e5ce0bf9074b69c3481e93771a522" \
-H "Authorization: Bearer $QODER_PAT"
# Daftar semua Sesi (dengan pagination)
curl -s "https://api.qoder.com.cn/api/v1/cloud/sessions?limit=10" \
-H "Authorization: Bearer $QODER_PAT"
Berikut contoh respons terpaginasi:
{
"data": [
{
"id": "sess_019e5ce0bf9074b69c3481e93771a522",
"type": "session",
"agent_id": "agent_019e5ce0bf307a1a8f952eb814aea3d5",
"environment_id": "env_019e44eb66bb748cabcd1489f6fa4428",
"status": "idle",
"turn_status": "idle",
"title": "",
"memory_store_ids": [],
"vault_ids": [],
"resources": [],
"created_at": "2026-05-18T12:00:00Z",
"updated_at": "2026-05-18T12:30:00Z"
}
],
"first_id": "sess_019e5ce0bf9074b69c3481e93771a522",
"last_id": "sess_019e5ce0bf9074b69c3481e93771a522",
"has_more": false
}
Penggunaan token
Penggunaan token untuk setiap putaran tidak dikembalikan melalui REST API. Untuk melihat penggunaannya, dengarkan event SSE session.status_idle di akhir setiap putaran. Bidang usage-nya berisi jumlah token untuk putaran tersebut.
Parameter | Deskripsi |
| Jumlah token input yang digunakan dalam putaran ini. |
| Jumlah token output yang dihasilkan dalam putaran ini. |
| Jumlah token input yang disajikan dari cache. |
| Jumlah token input yang ditulis ke cache. |
Berikut contoh muatan dari event SSE:
{
"type": "session.status_idle",
"usage": {
"input_tokens": 3840,
"output_tokens": 2156,
"cache_read_input_tokens": 0,
"cache_creation_input_tokens": 0
}
}
Pengikatan versi Sesi dan Agent
Saat Sesi dibuat, konfigurasi Agent diambil sebagai snapshot.
Gunakan format string
"agent": "agent_xxx"untuk mengikat ke versi terbaru Agent pada saat pembuatan.Gunakan format objek
"agent": {"id": "agent_xxx", "version": N}untuk mengikat ke versi tertentu.Setelah Sesi dibuat, memodifikasi Agent tidak memengaruhi Sesi tersebut.
Untuk menggunakan versi baru Agent, Anda harus membuat Sesi baru.
Sesi A — Diikat ke Agent v1Dibuat sebelum pembaruan. Sesi A tetap menggunakan konfigurasi v1 meskipun Agent telah diperbarui ke v2. | Sesi B — Diikat ke Agent v2Dibuat setelah pembaruan. Menggunakan konfigurasi v2 yang baru. |
Percakapan multi-putaran
Sesi mendukung percakapan multi-putaran. Setelah mengirim pesan, tunggu event session.status_idle, lalu Anda dapat mengirim pesan berikutnya.
#!/bin/bash
# Contoh percakapan multi-putaran
BASE_URL="https://api.qoder.com.cn/api/v1/cloud"
SESSION_ID="sess_019e5ce0bf9074b69c3481e93771a522"
HEADERS=(
-H "Authorization: Bearer $QODER_PAT"
)
# Putaran 1: Buat permintaan awal
curl -s -X POST "$BASE_URL/sessions/$SESSION_ID/events" \
"${HEADERS[@]}" \
-H "Content-Type: application/json" \
-d '{"events": [{"type": "user.message", "content": [{"type": "text", "text": "Create a Python Flask project scaffold."}]}]}'
# Tunggu hingga pemrosesan selesai... (poll atau dengarkan SSE)
sleep 30
# Putaran 2: Tambahkan persyaratan lanjutan
curl -s -X POST "$BASE_URL/sessions/$SESSION_ID/events" \
"${HEADERS[@]}" \
-H "Content-Type: application/json" \
-d '{"events": [{"type": "user.message", "content": [{"type": "text", "text": "Add unit tests and a CI configuration to the project."}]}]}'
Kode kesalahan terkait status
Berikut adalah kesalahan umum terkait status yang dapat terjadi saat Anda mengirim event ke Sesi.
HTTP | Tipe | Kondisi pemicu |
409 |
| Mengirim pesan ke Sesi dalam status |
404 |
| Sesi tidak ada atau telah dihapus. |
Berikut contoh respons kesalahan 409:
{
"type": "error",
"error": {
"type": "conflict_error",
"message": "Session is currently processing a turn. Cancel the current turn or wait for completion."
}
}
Praktik terbaik
Penguncian versi — Di lingkungan produksi, selalu buat Sesi dengan menggunakan format
{"id": ..., "version": ...}.Pembatalan tepat waktu — Batalkan Sesi yang tidak diperlukan untuk melepaskan sumber daya.
Monitor penggunaan — Periksa secara berkala bidang
usageuntuk menghindari biaya tak terduga.Tandai dengan metadata — Gunakan bidang
metadatauntuk mencatat konteks bisnis, seperti ID tugas atau sumber pemicu.
FAQ
T: Apakah Sesi memiliki mekanisme timeout?
J: Sesi dalam status idle dipertahankan selama periode tertentu. Sesi yang tidak aktif dalam jangka waktu lama dapat diarsipkan secara otomatis oleh sistem. Kami merekomendasikan membuat Sesi sesuai kebutuhan dan membatalkannya setelah tugas selesai.
T: Apa yang terjadi jika saya mengirim pesan ke Sesi yang sedang dalam status processing?
J: API mengembalikan HTTP 409 conflict_error dengan pesan Session is currently processing a turn. Cancel the current turn or wait for completion. Anda harus membatalkan putaran saat ini atau menunggu Sesi kembali ke status idle sebelum mengirim pesan baru.
Q: Berapa jumlah maksimum giliran yang didukung oleh Sesi?
J: Tidak ada batas ketat jumlah putaran; namun, ukuran jendela konteks model memberikan batas praktis. Seiring percakapan bertambah panjang, konten awal mungkin dipotong.
T: Bagaimana cara mendapatkan riwayat percakapan lengkap Sesi?
J: Panggil operasi GET /sessions/{id}/events untuk mengambil semua event Sesi, termasuk pesan pengguna dan respons Agent.
T: Apakah Sesi yang dibatalkan dapat digunakan kembali?
J: Ya. Setelah Anda membatalkan Sesi, statusnya secara otomatis berubah dari canceling kembali ke idle, dan Sesi tetap tersedia. Anda dapat mengirim user.message berikutnya untuk melanjutkan percakapan. Hanya status archived yang merupakan status terminal. Sesi yang diarsipkan tidak dapat dipulihkan.