Skip to content

独立评审、局部修订与人工处理 ​

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))==1

6. 实际实现 ​

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应用Patchdiff只包含目标块,原对象保持不变
追问一目标块内被写入无关长文防止形式正确的坏修订重新校验并独立复审字段合规仍可被业务评审拒绝
追问二审核期间其他章节获批缩小事实过期窗口批准前重新读canonical facts记录新冲突;不宣称跨任务事务已串行化

这些是设计讨论的参考表达,实际执行前不能改写为已取得的历史成果。

12. 官方资料与版本 ​

LangGraph Interrupts、Pydantic Models。项目 LangGraph 1.0.10 / Pydantic 2.14.2;核验日期 2026-11-03。演示评审模板本身不具备开放式教研判断,实际可观察错误主要来自确定性检查。

学习复现系统 · 事实、实验与假设分开记录