0. 上下文衔接Day 12 把第五章 RAG 问答 Agent 完整收尾了。今天进入第六章——试卷批改智能体。这是第二个完整 Agent 项目,技术上复用了前面积累的所有能力(LangGraph、RAG、大模型调用、记忆管理),但业务逻辑完全不同,而且引入了一个新的核心模式:Human-in-the-Loop(人机协同)。第六章 试卷批改Agent第五章 RAG问答Agent三轨并行批改 gather并发LangGraph 经验复用RAG 能力复用记忆管理 经验复用QA智能体多轮对话 流式输出 记忆管理解析试卷加载试题库客观题规则引擎简答题大模型RAG批改代码题大模型RAG批改结果聚合 按题号排序薄弱点分析大模型生成复习建议通知教师审核教师审核 Human-in-the-Loopinterrupt暂停机制应用教师决策发布结果 写入数据库和简历审查 Agent(线性流程)、QA Agent(分支路由)不同,试卷批改 Agent 有两个显著特点:并行执行:三种题型同时批改,gather 并发人机协同:AI 批改完不直接发布,教师审核通过才发布,用到了 LangGraph 的 interrupt 机制1. 整体架构与三轨并行批改1.1 九节点线性流程整个 Agent 是线性的 9 个节点,逻辑清晰,难点在每个节点内部:节点职责技术要点parse_exam解析学生答卷(Word)文件解析、题号-答案映射load_questions加载试题库标准答案SQL查询、题目类型分组grade_objective客观题批改规则引擎、精确匹配grade_subjective简答题批改大模型RAG、参考答案对比grade_code代码题批改大模型RAG、代码理解analyze_weak_points薄弱点分析错题聚合、大模型生成建议notify_teacher通知教师审核状态更新、触发通知teacher_review教师审核节点(中断)interrupt机制、人机交互apply_decision应用教师决策分数合并、评语合并publish_results发布结果双表写入、幂等性保障1.2 三轨并行:gather 并发客观题、简答题、代码题三者之间没有依赖,可以并行执行,用asyncio.gather同时跑,节省时间。asyncdefgrade_all_questions(state:ExamState)-dict:""" 三轨并行批改节点 gather同时启动三个批改任务,最后合并结果 """questions=state["all_questions"]# 按题型分组objective_qs=[qforqinquestionsifq["type"]=="objective"]subjective_qs=[qforqinquestionsifq["type"]=="subjective"]code_qs=[qforqinquestionsifq["type"]=="code"]# 并行执行obj_results,sub_results,code_results=awaitasyncio.gather(grade_objective_questions(objective_qs,state["student_answers"]),grade_subjective_questions(subjective_qs,state["student_answers"]),grade_code_questions(code_qs,state["student_answers"]),)# 合并 + 按题号排序all_results=obj_results+sub_results+code_results all_results.sort(key