live_session_complete
Finalize a live teaching session after the learner declares it closed. Writes required summary, teacher reflection, and next-action hook, with optional evaluation attached.
Instructions
收课——Live 收尾的一次写作动作 (一次判决原则). REFLECT 三段全部必填, 缺任一即拒收: summary (她这节课学了什么——短判词, 不复述课堂过程) / teacher_reflection (薄弱环节, 直白不吹捧) / next_action (下次课的钩子, 具体到下一步该练什么). 这三段学习者会在课文页直接读到——写成给她看的人话, 内部 id (tr_/evt_/snap_ 等) 一律不进正文; 要给判词锚证据, 填 evaluation.evidence_refs (那才是机器引用通道, 服务端验 id 存在与同 pair 归属)。id 只有一个归宿: evidence_refs (2026-07-26 口径收窄——agent_observation 已在学习者折叠区可见, 不再是纯内账, 故原"写内账或 evidence_refs"的二选一作废)。 可选 evaluation 随行——同一次调用把这场的现场评估一并落库 (等价于紧接着调 record_live_evaluation, 一场一评, 已有场评时不覆盖), 收课+场评从此是一次动作, 不必分两笔写两段长文. status → completed, awaiting_role → none, ended_at 只在首次完成时打. 幂等: session 已是 completed 时重复调用不再改 session, 原样回执 "已于 <首次 ended_at> 完成, 本次为幂等重放, 未改动", ended_at 保留首次值 (带 evaluation 且该场还没有场评时, 场评仍会补写). 收课握手: 调用前确认——学习者最后一题已单独判过 (对错+点评自成回合), 且她已明确表态收课; 顶着未判的消息、或没等她点头就 complete, 违反 live-teaching 红线. 下课铃机器门禁: 本场必须已有学习者收课宣告 (learner_close_declared_at, 她在 Live 房内亲手按的下课铃)——未宣告时本工具 CONFLICT 拒收官; 若她已口头表示结束, 请引导其按下 Live 房内的下课铃后再收官 (铃响会追加 live.learner_close_declared 事件, live_wait/live_pending 都看得见). cancel 不受此门 (取消≠收官).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| summary | Yes | 必填, 非空——她这节课学了什么: 短判词, 不复述过程。**学习者在课文页直接读这一段**: 写人话不写机器词, 内部 id 不进正文——需要锚到具体对话条目时, 把 id 填进 evaluation.evidence_refs (机器引用通道), 判词本身保持可读。 | |
| evaluation | No | 可选——收课同笔写入这场的现场评估 (一次判决原则: 收课+场评一次动作)。字段与 record_live_evaluation 相同 (live_session_id 自动取本场)。该场已有场评时幂等返回既有那条, 不覆盖。 | |
| session_id | Yes | ||
| next_action | Yes | 必填, 非空——下次课的钩子, 具体到下一步该练什么。**学习者在课文页直接读这一段**: 写人话, 内部 id 不进正文 (要锚证据填 evaluation.evidence_refs)。 | |
| idempotency_key | No | 可选。幂等键 (建议 uuid) —— 同一 key 重放此调用返回首次结果, 不重复写入. 网络重试/断线重连时带上同一个 key, 而不是猜"上次到底写没写". | |
| teacher_reflection | Yes | 必填, 非空——薄弱环节, 直白不吹捧。**学习者在课文页直接读这一段**: 写人话, 内部 id 不进正文 (要锚证据填 evaluation.evidence_refs)。 |