外观
独立评审、局部修订与人工处理
1. 解决什么问题
一次生成可能含错误,整篇重写又容易破坏已经正确的内容。本系统让评审先明确问题,再按稳定内容 ID 定点修改,保留版本和差异;自动循环结束后仍由人工决定是否交付。
2. 原理与术语
评审报告需要位置、类别、严重程度、依据和修订要求。局部 Patch 描述要替换哪些块,而不是把整个新教材当成“修改结果”。独立评审指上下文与权限职责隔离,不保证统计意义上的判断独立。
3. 输入输出与执行
review 合并模型报告和确定性检查;revise 接收问题,生成 Patch 并校验目标 ID。存在可修复 error/critical 且未到上限时继续修订;来源或结构问题无法通过当前局部编辑契约处理,直接交给人工。
4. 混淆点
警告不阻塞自动流程,但仍显示给人;评审没有错误也不等于自动发布。达到自动修订上限不是成功,它只是停止继续消耗资源。人工明确退回可触发下一次处理,但不是偷偷扩大自动预算。
5. 最小示例
python
from app.content import apply_patch, version_diff
lesson={"title":"示例","chapters":[{"id":"c","title":"章","blocks":[
{"id":"b","kind":"exercise","text":"2+2=?","translation":"2+2=?","answer":"5"}]}],"facts":[],"sources":[]}
patch={"edits":[{"block_id":"b","text":"2+2=?","translation":"2+2=?","answer":"4"}],"facts":[]}
new=apply_patch(lesson,patch,{"b"})
assert lesson['chapters'][0]['blocks'][0]['answer']=='5'
assert len(version_diff(lesson,new))==16. 实际实现
apply_patch 深拷贝原教材,拒绝重复目标、未知目标与未授权目标。facts 只能在授权 __facts__ 时修改已有键。当前不支持通过 Patch 新增章节、增加块或重写来源;这些问题不能伪装成已自动修复。
7. 源码与数据结构
阅读 system/app/content.py::apply_patch/business_review/version_diff、graph.py::review/revise/human、schemas.py::Issue/Patch/Decision。业务版本保留 parent_version、reason、规则和来源快照;reviews 绑定明确 version。
8. 设计取舍
定点修改降低变更范围,但依赖准确的问题定位。评审给错 ID 会被拒绝;给对 ID 却建议错误内容,需要复审和人工识别。严重问题人工强制通过需 override=true 且提供 note,日志保留原因,这不表示问题已经消失。
9. 实验与验收
在 system 目录创建无法自动修好的演示任务:
bash
curl -s -H "X-API-Key: ${LAB_API_KEY:-}" -H 'Content-Type: application/json' \
-d '{"theme":"校园生活","scenario":"persistent_error","max_revisions":1}' http://127.0.0.1:8000/api/jobs等待 human,查看原版与修订版。预期错误仍在,自动循环停止,普通 approve 被拒绝。再在界面显式修改练习答案并退回,观察新版本复审。不要仅凭“版本数增加”判断修复成功。
10. 故障排查
修订波及其他块先查 allowed_ids;问题反复出现查模板或模型 Patch;审批 409 查 expected_version;资料问题无法局部修复属于契约边界。版本差异只显示块级差异,facts 与来源需同时查看完整版本对象。
11. 面试题与追问
问:如何保证局部修订? 服务端按允许 ID 更新副本并重新验证 Lesson。追问:模型仍把整篇内容塞入某一块呢? ID 限制不保证语义质量,还需长度、结构与独立评审。再追问:审核通过同时另一章变了? 人工通过前再次读取既有事实;跨任务并发一致性仍需额外设计,不能宣称书籍级串行化。
STAR 应用:假设实验场景,R 为应核对的证据
| 对应 | S:情境 | T:目标 | A:行动 | R:验收证据 |
|---|---|---|---|---|
| 主问 | 仅一道练习答案错误 | 保留其余教材 | 按允许block_id应用Patch | diff只包含目标块,原对象保持不变 |
| 追问一 | 目标块内被写入无关长文 | 防止形式正确的坏修订 | 重新校验并独立复审 | 字段合规仍可被业务评审拒绝 |
| 追问二 | 审核期间其他章节获批 | 缩小事实过期窗口 | 批准前重新读canonical facts | 记录新冲突;不宣称跨任务事务已串行化 |
这些是设计讨论的参考表达,实际执行前不能改写为已取得的历史成果。
12. 官方资料与版本
LangGraph Interrupts、Pydantic Models。项目 LangGraph 1.0.10 / Pydantic 2.14.2;核验日期 2026-11-03。演示评审模板本身不具备开放式教研判断,实际可观察错误主要来自确定性检查。