智能 tutoring 系统¶
项目背景与目标¶
个性化辅导是提升学习效果的关键,但传统一对一辅导成本高昂,难以规模化。班级授课制难以照顾个体差异,"学困生跟不上、学优生吃不饱"现象普遍。智能 tutoring 系统(Intelligent Tutoring System, ITS)通过 AI Agent 模拟人类教师,实现学情诊断、内容推荐、互动教学、即时反馈的个性化学习闭环,让每个学生都能获得专属辅导。
本项目目标是构建一个智能 tutoring Agent,覆盖 K12 主要学科,核心能力包括学情画像构建、知识图谱诊断、个性化内容推荐、苏格拉底式互动教学、学习路径动态调整。
需求分析¶
核心能力: 1. 学情诊断:通过测试与互动行为刻画学生知识掌握状态 2. 知识图谱:构建学科知识图谱,定位薄弱知识点与前置依赖 3. 内容推荐:根据学情推荐合适难度的题目与讲解 4. 互动教学:苏格拉底式提问引导思考,而非直接给答案 5. 即时反馈:答题过程实时提示错误与思路纠正 6. 学情报告:定期生成学习报告供学生与家长查看
用户角色:学生(学习主体)、教师(查看班级学情)、家长(监督进度)。
技术选型说明¶
| 模块 | 技术方案 | 选型理由 |
|---|---|---|
| Agent 框架 | LangGraph | 教学流程状态机 |
| 知识图谱 | Neo4j | 学科知识点关系建模 |
| 学情模型 | 贝叶斯知识追踪 BKT | 经典学情建模 |
| LLM | Qwen-Max | 互动教学与讲解生成 |
| 题库 | 结构化题库 + 向量检索 | 题目按知识点标注 |
| 推荐算法 | 协同过滤 + 规则 | 个性化题目推荐 |
| 后端 | FastAPI + WebSocket | 实时互动 |
| 数据库 | PostgreSQL + Redis | 学情数据 + 会话状态 |
架构设计¶
flowchart TD
S[学生] --> CHAT[互动界面 WebSocket]
CHAT --> AGENT[Tutoring Agent]
AGENT --> DIAG[学情诊断]
DIAG --> KG[(知识图谱)]
DIAG --> BKT[知识追踪模型]
AGENT --> REC[内容推荐]
REC --> QB[(题库)]
AGENT --> TEACH[互动教学]
TEACH --> LLM[LLM 推理]
AGENT --> FB[反馈生成]
BKT --> PROFILE[学情画像]
PROFILE --> REP[学情报告]
AGENT --> PATH[学习路径]
PATH --> KG
关键模块实现思路¶
模块1:知识图谱与学情建模¶
构建学科知识图谱:节点为知识点(如"一元二次方程"),边为前置依赖("因式分解"→"一元二次方程")、包含关系。每个知识点关联若干题目,标注难度。
学情建模采用贝叶斯知识追踪(BKT):维护每个知识点的掌握概率,每次答题后用贝叶斯更新。四参数 BKT 考虑猜测(瞎蒙答对)与失误(会但答错),更贴近实际。
def update_mastery(prior, correct, p_slip=0.1, p_guess=0.2):
if correct:
post = prior * (1 - p_slip) / (prior * (1 - p_slip) + (1 - prior) * p_guess)
else:
post = prior * p_slip / (prior * p_slip + (1 - prior) * (1 - p_guess))
return post # 后验掌握概率
模块2:苏格拉底式互动教学¶
教学策略遵循"不直接给答案,引导思考"原则。LLM 在学生卡住时分层提示:先提示思路方向,再给部分线索,最后才讲解完整步骤。提示词工程约束 LLM 行为:
TEACH_PROMPT = """你是苏格拉底式辅导老师。
规则:
1. 不直接给出答案
2. 用提问引导学生思考
3. 学生卡住时给思路提示,分 3 级递进
4. 鼓励学生表达思路
当前知识点:{topic}
学生掌握度:{mastery}
学生回答:{answer}"""
互动过程记录学生思路轨迹,用于诊断错误根因而非仅判对错。
模块3:内容推荐¶
推荐策略平衡"巩固"与"拓展":掌握度 < 0.6 推荐基础题巩固;0.6-0.8 推荐中等题强化;> 0.8 推荐挑战题拓展。同时考虑前置依赖:当前知识点掌握不足时,回溯推荐前置知识点题目。
题目难度匹配用 Item Response Theory(IRT)模型,根据学生能力 θ 与题目难度 b 匹配,保证答对率在 60-80%(最近发展区)。
模块4:学习路径规划¶
基于知识图谱拓扑与学情画像生成个性化学习路径:薄弱知识点优先补,前置依赖先解决,相关知识点串联学习。路径动态调整:掌握一个知识点后解锁后继,未掌握则插入巩固练习。
def plan_path(student, target_topic):
weak = [k for k in prereqs(target_topic) if student.mastery[k] < 0.6]
path = topological_sort(weak) # 按依赖排序
path.append(target_topic)
return path
核心流程详解¶
首次学习流程: 1. 学生选择学科与目标 → 入学测试(10-15 题) 2. 初始化学情画像 → 生成学习路径 3. 进入知识点学习:讲解 → 练习 → 反馈 4. 答题过程 BKT 实时更新掌握度 5. 掌握度达标 → 解锁下一知识点 6. 定期生成学情报告
互动教学流程: 1. 推荐题目 → 学生作答 2. 答对:正向反馈 + 同类强化 1 题 3. 答错:不直接给答案,启动苏格拉底引导 4. 引导后仍不会:分层提示 → 最终讲解 5. 错题归因:概念错/计算错/审题错,针对性补练
部署与优化建议¶
- 学科覆盖:先从数学等结构化强的学科切入,再扩展文综理综
- 题库建设:与教材出版社合作,题目标注知识点与难度
- 多模态:支持公式渲染(KaTeX)、几何作图、化学方程式
- 防作弊:互动过程分析答题模式,识别抄答案行为
- 教师协同:教师查看班级学情热力图,聚焦共性难点
- 家长沟通:周报推送学习时长、掌握度、薄弱点
常见问题与解决方案¶
| 问题 | 原因 | 解决方案 |
|---|---|---|
| LLM 讲解出错 | 学科知识不足 | 题库附标准解析 + LLM 仅做引导 |
| 学生依赖提示 | 引导过频 | 提示冷却 + 先尝试再求助 |
| 学情画像漂移 | BKT 参数固化 | 定期校准参数 + 冷启动测试 |
| 文科难诊断 | 答案非对错 | 引入开放式评分 + 多维诊断 |
扩展方向¶
- 语音互动:低龄学生口语对话教学
- 编程教学:代码执行沙箱 + 实时反馈
- 实验仿真:物理化学虚拟实验
- 情感识别:摄像头分析学习情绪,调整节奏