セッションは、エージェント (構成) と環境 (インフラストラクチャ) を組み合わせ、ステートフルな実行コンテキストとして提供します。セッションにメッセージを送信すると、イベントのストリームが返されます。
新しい Qoder CN ドキュメントサイトが利用可能になりました。このサイトの内容は、最新の製品機能や変更を反映していない場合があります。最新の製品ドキュメントについては、docs.qoder.cn にアクセスしてください。
セッションのライフサイクル
-
Create → idle
新しいセッションは
idle状態に入り、入力を待機します。 -
idle → processing
user.messageイベントを送信すると、ステータスがprocessingに変わります。 -
processing → idle
現在のターンが完了すると、セッションは
idle状態に戻り、次のターンに備えます。 -
processing → canceling → idle
実行中のセッションをキャンセルすると、ステータスは
cancelingに遷移してからidleに戻ります。セッションは引き続き利用できます。 -
archived (terminal state)
archivedステータスは終端状態です。アーカイブされたセッションは復元できません。
セッションは、次の主要ステータスを持つステートマシンです:
|
ステータス |
説明 |
遷移先 |
|
|
アイドル。ユーザーメッセージを待機します。 |
|
|
|
処理中。エージェントが実行されています。 |
|
|
|
キャンセルが要求されました。実行中のタスクが停止するのを待機しています。 |
|
|
|
アーカイブ済み。 |
— (終端状態) |
フィールド
|
パラメータ |
型 |
説明 |
|
|
string |
システムによって生成され、 |
|
|
string |
固定値: |
|
|
string/object |
バインドされるエージェント。最新バージョンを使用するには文字列 (エージェント ID) を指定し、特定バージョンに固定するにはオブジェクト |
|
|
string |
バインドされるエージェントの ID。このフィールドはレスポンスでのみ返され、下位互換性のために保持されています。 |
|
|
string |
バインドされる環境の ID。 |
|
|
string |
現在のステータス: |
|
|
string |
現在のターンのステータス: |
|
|
string |
セッションのタイトル。デフォルトは |
|
|
array |
関連付けられたメモリストア ID のリスト。デフォルトは |
|
|
array |
関連付けられた Vault ID のリスト。デフォルトは |
|
|
array |
セッションに添付されたファイルなどのリソース。デフォルトは |
|
|
string |
セッションが作成された時刻。 |
|
|
string |
セッションが最後に更新された時刻。 |
REST API のレスポンスにはトークン使用量データ (usage) は含まれません。各ターンの終了時に送信される session.status_idle Server-Sent Events (SSE) イベントにのみ含まれます。
セッションの作成
agent と environment_id を指定します。
エージェント ID (文字列) の使用
セッションをエージェントの 最新バージョン にバインドします。
# エージェント ID を使用してセッションを作成
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 .
エージェントオブジェクト (バージョン指定) の使用
一貫した動作のために、セッションをエージェントの 特定バージョン にバインドします。
# エージェントのバージョンを指定してセッションを作成
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 .
リクエストが成功すると、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"
}
本番環境では、エージェントの更新による予期しない動作変更を防ぐために、バージョンを指定してください。
agent フィールドの形式
|
形式 |
例 |
動作 |
|
string |
|
エージェントの最新バージョンを使用します。 |
|
object |
|
セッションを指定したバージョンに固定します。 |
状態遷移
イベントのリクエストボディ形式
POST /sessions/{id}/events のリクエストボディは、events 配列を含むオブジェクトである必要があります。配列内の各イベントには、コンテンツブロックの配列である content フィールドが含まれます。
|
パラメータ |
型 |
必須 |
説明 |
|
|
array |
Yes |
イベントの配列です。1 回のリクエストに 1 つ以上のイベントを含めることができます。 |
|
|
string |
Yes |
|
|
|
array |
Yes |
コンテンツブロックの配列です。 |
|
|
string |
Yes |
|
|
|
string |
Yes |
テキストコンテンツです。 |
idle から processing への遷移
セッションに user.message イベントを送信すると、ステータスが idle から processing に変わります。
# メッセージを送信して処理を開始
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 への遷移
処理が完了すると、セッションは自動的に idle に戻ります。イベントストリームを介して session.status_idle イベントを受信します。
セッションのキャンセル
実行中のセッションを中断できます。
# セッションをキャンセル
curl -s -X POST "https://api.qoder.com.cn/api/v1/cloud/sessions/sess_019e5ce0bf9074b69c3481e93771a522/cancel" \
-H "Authorization: Bearer $QODER_PAT"
キャンセルリクエストは、セッションが processing ステータスの場合にのみ実行を中断します。ステータスは最初に canceling に遷移し、中断が完了すると idle に戻ります。セッションは再利用できます。次の user.message を送信して続行してください。すでに idle のセッションをキャンセルしても影響はありません。idle ステータスは変わらず、200 OK レスポンスが返されます。
セッションの取得
# 単一のセッションを取得
curl -s "https://api.qoder.com.cn/api/v1/cloud/sessions/sess_019e5ce0bf9074b69c3481e93771a522" \
-H "Authorization: Bearer $QODER_PAT"
# すべてのセッションを一覧表示 (ページネーションあり)
curl -s "https://api.qoder.com.cn/api/v1/cloud/sessions?limit=10" \
-H "Authorization: Bearer $QODER_PAT"
ページネーションされたレスポンス例:
{
"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
}
トークン使用量
ターンごとのトークン使用量は REST API では返されません。代わりに、各ターンの終了時に送信される session.status_idle SSE イベントを待機してください。usage フィールドに、そのターンのトークン数が含まれます。
|
パラメータ |
説明 |
|
|
このターンで消費された入力トークン数。 |
|
|
このターンで生成された出力トークン数。 |
|
|
キャッシュから提供された入力トークン数。 |
|
|
キャッシュに書き込まれた入力トークン数。 |
session.status_idle SSE ペイロード例:
{
"type": "session.status_idle",
"usage": {
"input_tokens": 3840,
"output_tokens": 2156,
"cache_read_input_tokens": 0,
"cache_creation_input_tokens": 0
}
}
セッションとエージェントのバージョンバインド
セッションは、作成時点のエージェント構成をスナップショットとして保持します。
-
文字列形式
"agent": "agent_xxx"を使用すると、作成時点におけるエージェントの最新バージョンにバインドされます。 -
オブジェクト形式
"agent": {"id": "agent_xxx", "version": N}を使用すると、特定バージョンにバインドされます。 -
セッション作成後にエージェントを変更しても、そのセッションには影響しません。
-
エージェントの新しいバージョンを使用するには、新しいセッションを作成する必要があります。
Session A — Agent v1 にバインド更新前に作成されます。エージェントが v2 に更新された後も、Session A は v1 の構成を引き続き使用します。 |
Session B — Agent v2 にバインド更新後に作成されます。新しい v2 の構成を使用します。 |
マルチターン会話
セッションはマルチターン会話をサポートします。メッセージを送信した後、次のメッセージを送信する前に session.status_idle イベントを待機してください。
#!/bin/bash
# マルチターン会話の例
BASE_URL="https://api.qoder.com.cn/api/v1/cloud"
SESSION_ID="sess_019e5ce0bf9074b69c3481e93771a522"
HEADERS=(
-H "Authorization: Bearer $QODER_PAT"
)
# ターン 1:初回リクエストを送信
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."}]}]}'
# 処理完了まで待機... (ポーリングするか SSE を待機)
sleep 30
# ターン 2:追加要件を送信
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."}]}]}'
ステータス関連のエラーコード
セッションにイベントを送信する際によくあるエラー:
|
HTTP |
タイプ |
発生条件 |
|
409 |
|
|
|
404 |
|
セッションが存在しないか、アーカイブされています。 |
409 エラーレスポンス例:
{
"type": "error",
"error": {
"type": "conflict_error",
"message": "Session is currently processing a turn. Cancel the current turn or wait for completion."
}
}
ベストプラクティス
-
バージョン固定 — 本番環境では、常に
{"id": ..., "version": ...}形式を使用してセッションを作成してください。 -
適切なタイミングでのキャンセル — 不要なタスクはキャンセルして、コンピューティングリソースの消費を停止してください。
-
使用量の監視 — 想定外のコストを避けるために、
usageフィールドを定期的に確認してください。 -
メタデータでのタグ付け — タスク ID やトリガーソースなどの業務コンテキストを記録するために、
metadataフィールドを使用してください。
よくある質問
Q:セッションにタイムアウトの仕組みはありますか?
A:idle のセッションは一定期間保持されます。長期間アクティビティがないセッションは自動的にアーカイブされる場合があります。必要に応じてセッションを作成し、タスク完了後にキャンセルしてください。
Q:processing ステータスのセッションにメッセージを送信するとどうなりますか?
A:API は HTTP 409 conflict_error を返します。新しいメッセージを送信する前に、現在のターンをキャンセルするか、セッションが idle に戻るまで待機してください。
Q:セッションがサポートするターン数の上限はいくつですか?
A:厳密な上限はありませんが、モデルのコンテキストウィンドウのサイズにより実質的な上限があります。会話が長くなるにつれて、古い内容が切り捨てられる場合があります。
Q: セッションの完全な会話履歴を取得するにはどうすればよいですか?
A: GET /sessions/{id}/events オペレーションを呼び出して、ユーザーメッセージやエージェントの応答を含む、セッションのすべてのイベントを取得します。
Q:キャンセルしたセッションは再利用できますか?
A:はい。セッションをキャンセルすると、ステータスは canceling から自動的に idle に戻り、セッションは引き続き利用できます。次の user.message を送信して会話を継続できます。終端状態は archived のみです。アーカイブされたセッションは復元できません。