发布时间:2026/8/27 10:07:02
AI 家教状态机详解:从 INIT 到 DONE,每一轮 Turn 如何被「管住」 AI 家教状态机详解从 INIT 到 DONE每一轮 Turn 如何被「管住」标签状态机LLM应用架构Spring Boot教育科技Agent系列接《别再「套个大模型」了》技术深挖可控讲题的编排实现。写在前面接上大模型不等于接上「会教的老师」。模型会写话术却管不住「审题 → 分步 → 复述 → 收尾」的课堂节奏。本文讲 AI 家教里的状态机编排INIT→DONE各状态职责、一轮Turn的前后端契约、幂等与后处理闸门、多问误拆怎么防。一句话——状态机控权模型负责怎么说后处理防止说崩。适合已接 LLM、却被跳步 / 卡死 / 串学科折磨过的同学对照落地。1. 为什么必须上状态机大模型擅长「写得像老师」不擅长「严格服从课堂流程」。如果完全交给模型决定「讲到哪了」常见后果是一步讲完整题破坏分步 Reveal语文题突然教列方程只有一题却不断「下一问」收尾轮没有出口学生无法结束所以我们把状态推进权放在后端编排器把话术生成权交给模型再用后处理校正 Turn 的 UI/选项/下一状态。一句话状态机控权模型负责怎么说后处理防止说崩。2. 状态一览VIP 主路径状态职责学生常见动作典型下一状态INIT审题 考查点 第一步提问打字回答THINKUNDERSTAND对齐理解 / 情绪与卡点处理选项或文本THINKTHINK题目解构、进入第一步选项或文本STEPSTEP一步一问可多轮选项 / 文本 / 下一步STEP或CHECKCHECK复述自检按学科换话术打字复述SUMMARY/ 补讲SUMMARY结构化总结看解析 / 结束 / 下一问EXTENDEXTEND收尾选择区同上DONE或下一问重开DONE终态无互动DONE说明会话创建时会固化flow_typeVIP / Legacy后续turns:next只按该值路由。状态在实现里多为字符串常量读代码时先确认链路再进 Handler。3. Turn 协议前后端的「一轮课」每一轮后端返回结构化 JSON示意{state:CHECK,message:做个复述自检……语文设问→依据→收束,question:请用自己的话复述这题的赏析思路,options:[],ui:{allowTextInput:true,showNextButton:false},next_state:CHECK}字段含义字段含义message老师说的话气泡主文question本轮向学生提的问题options可点选项空数组表示不靠选项推进ui.allowTextInput是否开放底部输入ui.showNextButton是否显示「下一步」next_state本轮结束后会话应落到的状态三条铁律建议写进单测 / 后处理有question且无options→ 必须allowTextInputtrue并关闭孤立的「下一步」。进入 SUMMARY / 收尾→ 必须有可点出口查看解析 / 结束练习 / 多问时的下一问。禁止死锁轮无选项 不可输入 无下一步且非 DONE。这三条比「把 Prompt 写得更长」可靠得多。4. 编排主流程伪代码以下为 VIP「下一轮」的骨架逻辑示意非某一文件逐行拷贝function nextTurn(userId, explanationId, req): e loadOwnedExplanation(userId, explanationId) // —— 守卫 —— if turn : findByClientTurnId(req.clientTurnId): return replay(turn) // 幂等弱网连点不重复计分/不重复生成 if e.currentState DONE: return terminalDoneTurn() // 已结束不再写库 if req.currentState ! e.currentState and not isExitAction(req): // 结束/下一问等收口动作可放行 return softResyncTurn(e) // 并发提示带回服务端当前态 // —— 多问误拆纠正 / 懒加载拆分示意—— reconcileMisSplitIfStatementEnum(e) // ①②③「以上说法正确个数」→ 单问 // —— 按状态分发 —— switch e.currentState: case CHECK: turn runCheck(req, e) // 空输入→按学科发复述题有输入→掌握判定 case SUMMARY: turn handleSummaryOption(req, e) // 仅处理选项类事件更稳 case EXTEND: turn handleExtend(req, e) case THINK: turn llmGenerate(buildCtx(e, req)) case STEP: maybeStepPaceNudge(e, req) // 轮次偏多催促而非硬砍死 turn llmGenerate(buildCtx(e, req)) default: turn llmGenerate(buildCtx(e, req)) // —— 后处理闸门比 Prompt 更硬—— postProcess(e, turn) // —— 落库并推进 —— saveExplanationTurn(...) e.currentState turn.nextState updateExplanation(e) return turn4.1 CHECK掌握检测学科感知function runCheck(req, e): if blank(req.userInput): return checkAskTurn(e.subject) // 语文设问→意象/词句→收束 // 数学已知所求→关系/列式→代回核对 // 英语/史地政各自话术 if not masteryPass(req.userInput, e.question, e.subject): return masteryFailSummary(...) // 标准答案方向 薄弱点 收尾选项 return masteryPassSummary(...) // 同一轮给总结选项禁止「空桥接轮」空桥接轮是典型事故只说「接下来给你结构化总结」却不给内容、不给选项、不给输入——前端必卡死。正确做法是通过后同一轮交付总结与出口。4.2 postProcess最后一道闸function postProcess(e, turn): if turn.state INIT: turn.options [] ensureFirstStepAsk(turn) // 去掉全科通用卡点问卷 if hasQuestion(turn): allowInput(turn); hideNext(turn) if turn.state SUMMARY or turn.nextState SUMMARY: turn.nextState EXTEND ensureExitOptions(turn) // 查看解析 / 结束 / 下一问 injectNextSubQuestionIfNeeded(e, turn) if turn.state EXTEND: sanitizeExtendOptions(turn) forbidInteractiveDeadEnd(turn) // 非 DONE 不得死锁5. 多问大题怎么推进又如何防误拆5.1 数据模型sub_questions_json子问列表sub_question_index/sub_question_total当前问与总数Prompt 侧优先喂「当前子问」附带原题片段避免多问混讲。5.2 下一问if user picks NEXT_SUB_Q and hasNext(e): advanceIndex(e) reset stepIndex return buildFirstTurnAsInit() // 下一问重新开场5.3 误拆防护实战结论中文试卷编号语义不统一形态常见含义(1)(2)(3)/第1问真·多问设问①②③④ 「以上说法正确的个数」说法枚举 单题选择规则上要强信号才拆说法枚举强制单问历史误拆可 reconcile。6. 与 LLM 层如何协作简图编排器 buildCtx(状态/题干/历史摘要/学科/学段) │ ▼ TutorEngineRouter │ ├─ LangChainTutorEngine ──► LlmGateway │ ├─ TEXT │ └─ NATIVE FC多轮 tool loop硬上限 ├─ DeepSeek 降级路径 ────────► LlmGateway.chatText └─ RuleBased 兜底 ───────────► 无外网也能走完主路径工具侧建议白名单 服务端执行如当前子问、步骤摘要、KB 检索、错因模式。定量验算如鸡兔更适合后置校验流水线不一定要做成 Function Calling以免打乱引导式教学。Prompt 运行时读库可热更新仓库 Markdown 用于规范与引导入库——改文件后记得同步库表否则线上仍是旧约束。7. 客户端只需做好三件事每轮带上explanationId、currentState、eventType、clientTurnId严格按options/allowTextInput/showNextButton渲染不在前端「猜」业务连点防护稳定的clientTurnId服务端幂等不要用前端补丁修复后端死锁。死锁是编排/后处理的责任前端兜底只会掩盖问题。8. 落地检查清单可当 Code Review 列表INIT 是否还在甩全科通用「卡点问卷」有提问无选项时是否强制开放输入CHECK 话术是否按subject分支掌握通过是否同一轮给出总结出口SUMMARY/EXTEND 是否必定能结束会话说法枚举题是否不会被拆成多问clientTurnId是否真正幂等大模型失败时 Rule/兜底是否仍能讲完9. 小结AI 家教的状态机本质是在回答一个问题开放生成与封闭流程之间如何做出稳定、可测、可运营的教学体验我们的实践答案是用状态机定义「课怎么上」用 Turn 协议定义「这一分钟师生怎么互动」用后处理定义「模型越界时系统怎么拉回来」用学科分支定义「同一流程下话术如何不同」下一篇AI 家教实战Function Calling RAG增强讲题却不抢教学节奏。欢迎评论区交流你们的状态划分方式或「死锁 / 串台 / 误拆」的真实案例。

相关新闻

2026/8/27 10:07:02

单片机毕设项目:基于 STM32/51 单片机的车间噪声实时监测报警装置设计 基于 STM32/51 单片机的噪声超标声光提醒与语音播报系统(025704)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/8/27 10:32:09

图生3d img2threejs 相机3d重建

目录 LingBot-Map 图生3d img2threejs LingBot-Map LingBot-Map 是一个面向流式三维重建的前馈式基础模型,由蚂蚁集团旗下具身智能公司"蚂蚁灵波科技"(Robbyant 团队)于 2026 年 4 月开源,采用 Apache License 2.0 协…

2026/8/27 10:32:09

火柴数字问题解析:贪心算法在C++竞赛中的实战应用

1. 问题引入:从火柴棍到数字编码 不知道大家有没有玩过用火柴棍摆数字的游戏?几根小小的火柴,通过不同的排列组合,就能表示出0到9这十个数字。这看似是一个简单的趣味游戏,但在算法竞赛中,它却能衍生出非常…

2026/8/27 10:32:09

网盘限速怎么破?从测速方法论到不限速网盘实测

这次比较特别,不是 AI 工具,而是一款新出现的网盘产品:ZZ 云盘。宣传文案直接打“永不限速”招牌,在网盘限速几乎成为普遍痛点的背景下,这个口号确实很容易吸引眼球。但口号归口号,实际用起来怎么样&#x…

2026/8/27 10:32:09

微型封装PECL/LVDS差分振荡器:高速时钟设计的选型与实战

有些朋友可能不太理解,为什么在高速数字设计里,时钟源要从“单端”走向“差分”。其实很简单,当你把时钟频率推到几百兆赫兹、甚至吉赫兹以上时,传统的单端CMOS时钟在PCB走线上就是一场噩梦:沿的缓、噪声大、容易受干扰…

2026/8/27 10:32:09

从零入门机器人:机械臂仿真与具身智能学习路线

在机器人这个方向上,很多刚入门的朋友都会遇到同一个困惑:资料到处都是,但不知道按什么顺序学,也不知道学到什么程度才算“入门”。有的教程一上来就讲 ROS2 源码分析,有的直接让你去调真实机械臂,还有的偏…

2026/8/27 10:27:08

具身智能的草根阶层:低成本机器人开发的技术路径与能力边界

很多人以为具身智能只是大厂、人形机器人公司和顶级实验室的战场,谁掌握了大模型、烧得起算力、签得下供应商,谁才能拿到入场券。但从技术社区的实际气氛来看,这个领域真正热闹的部分,反而是在金字塔底部:一群预算有限…

2026/8/26 9:13:28

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 11:48:27

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/27 7:46:21

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/27 0:01:16

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

1. 项目概述:从零构建一个企业级的AI服务网关 最近在帮一个做内容审核的团队做技术架构升级,他们原来的业务里,每天有几十万张图片和短视频需要过审,最初是接了几个开源的AI模型自己部署,但效果和性能一直不太稳定。后…

2026/8/27 0:01:16

LeetCode Hot100(51-60)算法精解与面试技巧

1. 题目背景与核心价值"hot100(51-60)"这个标题看起来像是某个编程题库或算法练习集中的一组题目编号。在技术社区中,类似命名通常指向LeetCode、牛客网等平台的热门题目集合。作为刷过300题的算法老手,我理解这类题目的核心价值在于&#xff…

2026/8/27 0:01:16

CRC校验实战:从模2除法到HJ212协议排错

1. 为什么一个“校验码”能扛住工业现场90%的数据 corruption? 你有没有遇到过这样的场景:嵌入式设备通过RS-485上传温湿度数据,上位机偶尔收到一帧乱码——温度显示成-273℃,湿度跳到999%,但串口波形看起来完全正常&a…

2026/8/26 19:34:06

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/26 19:17:08

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/26 19:34:05

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…