从0到1构建教育AI Agent:个性化学习路径与智能辅导系统实战
从0到1构建教育AI Agent:个性化学习路径与智能辅导系统全栈实战
摘要/引言
你有没有过这样的经历:孩子上大班课,老师顾不上每个学生的进度,薄弱知识点没人补,报一对一补习班每小时几百块成本太高,市面上的AI课又都是预设内容,完全匹配不了孩子的学习节奏?
据教育部2023年统计数据,我国中小学专任教师缺口超过100万,三四线城市和农村地区的优质教育资源覆盖率不足30%,传统教育模式下个性化学习需求的满足率不到12%。而大模型和AI Agent技术的爆发,第一次让“每个学生拥有专属AI导师”的愿景成为了可落地的现实。
读完这篇文章,你将掌握:
- 教育AI Agent的核心概念、与传统自适应学习产品的本质区别
- 个性化学习路径的核心算法与数学模型
- 从需求分析、架构设计到编码实现的全栈流程
- 可直接运行的开源代码,能快速改造成K12、职业教育、素质教育等多场景的辅导系统
本文将按照「核心概念拆解→算法模型讲解→实战项目开发→落地最佳实践」的结构展开,所有代码均已开源,可直接复现。
一、核心概念与问题背景
1.1 核心概念定义
教育AI Agent是具备感知、记忆、规划、行动、反思五大核心能力的智能教育实体,和传统的AI答疑机器人、学习管理系统(LMS)有本质区别:
- 感知:能采集学生的答题数据、提问内容、学习时长、甚至表情情绪等多维度信息
- 记忆:短期记忆存储当前会话上下文,长期记忆存储学生的知识掌握状态、学习偏好、历史学习轨迹
- 规划:能根据学生的当前水平和学习目标,自动生成个性化的学习路径,拆解为可执行的日/周任务
- 行动:能调用工具完成知识点讲解、习题生成、错题分析、学情报告输出等操作
- 反思:能根据学生的学习反馈自动调整学习路径,优化自身的辅导策略
1.2 问题背景与痛点
当前教育领域的三大核心痛点:
| 痛点类型 | 具体表现 | 影响 |
|---|---|---|
| 资源不均衡 | 优质教师集中在一二线城市,三四线和农村地区学生无法获得优质辅导 | 教育差距不断拉大 |
| 个性化不足 | 大班课千人一面,无法匹配每个学生的认知节奏和知识漏洞 | 薄弱点无法及时弥补,学习效率低下 |
| 成本过高 | 一对一辅导班每小时收费300-1000元,普通家庭难以承担 | 个性化教育成为奢侈品 |
| 传统的自适应学习产品仅能做到“根据答题正确率调整习题难度”,无法做到从底层认知诊断出发的全路径规划,而AI Agent的出现彻底解决了这个问题。 |
1.3 概念核心属性对比
我们对三类主流教育产品的核心能力做了对比:
| 对比维度 | 普通AI答疑机器人 | 传统自适应学习系统 | 教育AI Agent |
|---|---|---|---|
| 用户画像能力 | 无,所有用户共用同一套回答逻辑 | 仅存储答题正确率 | 全维度画像:知识掌握状态、学习偏好、认知节奏、遗忘曲线 |
| 路径规划能力 | 无,仅做问答响应 | 预设固定路径,灵活性差 | 动态生成个性化路径,可根据学习效果实时调整 |
| 记忆能力 | 仅会话级短期记忆,退出即消失 | 仅存储历史答题数据 | 长期记忆+短期记忆结合,能追溯半年以上的学习轨迹 |
| 工具调用能力 | 无,仅依赖大模型本身的知识 | 仅支持习题推荐 | 支持知识点查询、习题生成、错题分析、报告生成等多工具调用 |
| 自适应程度 | 极低 | 中等 | 极高,完全匹配个体需求 |
| 辅导深度 | 仅解答表层问题 | 仅覆盖习题练习场景 | 从知识漏洞溯源到路径规划到辅导练习全流程覆盖 |
1.4 实体关系ER图
教育AI Agent的核心实体关系如下:
1.5 Agent交互架构图
教育AI Agent的整体交互逻辑分为六层:
二、核心算法与数学模型
个性化学习路径的核心是认知诊断和路径规划两大算法模块,我们分别用DINA认知诊断模型和强化学习MDP模型实现。
2.1 认知诊断模型:DINA
DINA(Deterministic Input, Noisy “And” Gate)模型是目前应用最广泛的认知诊断模型,能精准定位学生的知识漏洞。
模型假设
学生答对某道题的前提是掌握了该题考察的所有知识点,存在两种异常情况:
- 失误:掌握了所有知识点但答错了,概率为sjs_jsj
- 猜测:未掌握所有知识点但答对了,概率为gjg_jgj
数学公式
-
理想应答矩阵:表示学生i如果没有失误和猜测的情况下,对习题j的应答结果
ηij=∏k=1Kαikqjk\eta_{ij} = \prod_{k=1}^K \alpha_{ik}^{q_{jk}}ηij=k=1∏Kαikqjk
其中αi∈{0,1}K\alpha_i \in \{0,1\}^Kαi∈{0,1}K是学生i的知识掌握状态向量,αik=1\alpha_{ik}=1αik=1表示学生i掌握了知识点k;Q∈{0,1}J×KQ \in \{0,1\}^{J \times K}Q∈{0,1}J×K是Q矩阵,qjk=1q_{jk}=1qjk=1表示习题j考察知识点k。 -
实际作答概率:
P(Yij=1∣αi)=gj1−ηij(1−sj)ηijP(Y_{ij}=1|\alpha_i) = g_j^{1-\eta_{ij}} (1-s_j)^{\eta_{ij}}P(Yij=1∣αi)=gj1−ηij(1−sj)ηij
其中Yij=1Y_{ij}=1Yij=1表示学生i答对了习题j。 -
知识掌握概率估计:
通过贝叶斯后验概率计算学生对每个知识点的掌握概率:
P(αik=1∣Yi)=∑α:αk=1P(Yi∣α)P(α)∑αP(Yi∣α)P(α)P(\alpha_{ik}=1|Y_i) = \frac{\sum_{\alpha: \alpha_k=1} P(Y_i|\alpha) P(\alpha)}{\sum_{\alpha} P(Y_i|\alpha) P(\alpha)}P(αik=1∣Yi)=∑αP(Yi∣α)P(α)∑α:αk=1P(Yi∣α)P(α)
2.2 路径规划模型:强化学习MDP
我们将学习路径规划问题建模为马尔可夫决策过程(MDP),目标是最大化学生的长期学习效果。
- 状态空间SSS:学生当前的知识掌握状态向量α\alphaα
- 动作空间AAA:可选的学习动作,包括学习某个知识点、做某组习题、复习之前的内容等
- 转移函数P(s′∣s,a)P(s'|s,a)P(s′∣s,a):学生执行动作a后,从状态s转移到s’的概率
- 奖励函数R(s,a,s′)R(s,a,s')R(s,a,s′):学生完成动作a后的学习效果提升,即知识点掌握率的变化:
rt=Δmastery=1K∑k=1K(αt+1,k−αt,k)r_t = \Delta mastery = \frac{1}{K} \sum_{k=1}^K (\alpha_{t+1,k} - \alpha_{t,k})rt=Δmastery=K1k=1∑K(αt+1,k−αt,k) - 价值函数:最大化累计奖励:
V∗(s)=maxaE[r+γV∗(s′)∣s,a]V^*(s) = \max_a \mathbb{E}[r + \gamma V^*(s')|s,a]V∗(s)=amaxE[r+γV∗(s′)∣s,a]
其中γ∈[0,1]\gamma \in [0,1]γ∈[0,1]是折扣因子,代表远期奖励的权重。
2.3 算法流程图
整个个性化学习的流程如下:
三、实战项目开发:LearnWise教育AI Agent
我们以初中数学辅导场景为例,从零开发一个可运行的教育AI Agent,命名为LearnWise。
3.1 项目介绍
LearnWise是面向初中学生的个性化数学辅导Agent,核心功能包括:
- 智能学情诊断:通过答题数据精准定位知识漏洞
- 个性化学习路径生成:根据学生的漏洞和目标生成周/月学习计划
- 一对一实时辅导:支持文字/语音提问,引导式讲解,不直接给答案
- 错题自动整理:自动分析错题原因,推送举一反三的习题
- 学情报告生成:每周生成学习报告,同步给家长和老师
3.2 环境安装
先决条件
- Python 3.10+
- Docker(用于部署Neo4j和Redis)
- 大模型API密钥(支持OpenAI GPT、通义千问、Llama 2等开源模型)
安装步骤
- 克隆项目代码:
git clone https://github.com/learnwise-ai/edu-ai-agent.git
cd edu-ai-agent
- 创建Python虚拟环境:
conda create -n learnwise python=3.10
conda activate learnwise
- 安装依赖:
pip install -r requirements.txt
- 部署Neo4j(知识图谱存储):
docker run -d --name neo4j -p 7474:7474 -p 7687:7687 -e NEO4J_AUTH=neo4j/learnwise123 neo4j:5.12
- 部署Redis(会话记忆存储):
docker run -d --name redis -p 6379:6379 redis:7.2
- 配置环境变量:
cp .env.example .env
# 编辑.env文件,填入你的大模型API密钥
3.3 系统架构设计
LearnWise采用四层架构:
| 层级 | 功能 | 技术选型 |
|---|---|---|
| 数据层 | 存储知识图谱、学生画像、学习历史、习题库 | Neo4j、MySQL、Redis |
| 引擎层 | 认知诊断引擎、路径规划引擎、辅导对话引擎、工具调用引擎 | DINA模型、DQN强化学习、LangChain |
| 服务层 | 对外开放API接口 | FastAPI |
| 应用层 | 学生端、教师端、管理后台 | Streamlit(演示)、小程序(生产) |
3.4 核心功能实现
3.4.1 知识图谱构建
首先我们需要构建初中数学的知识图谱,存储知识点之间的前置依赖关系:
from neo4j import GraphDatabase
import pandas as pd
# Neo4j连接配置
NEO4J_URI = "bolt://localhost:7687"
NEO4J_USER = "neo4j"
NEO4J_PASSWORD = "learnwise123"
class KnowledgeGraph:
def __init__(self):
self.driver = GraphDatabase.driver(NEO4J_URI, auth=(NEO4J_USER, NEO4J_PASSWORD))
def close(self):
self.driver.close()
def create_knowledge_point(self, kp_id, name, grade, subject, difficulty, prerequisites=None, content=""):
"""创建知识点节点"""
with self.driver.session() as session:
result = session.run(
"""
CREATE (kp:KnowledgePoint {
kp_id: $kp_id,
name: $name,
grade: $grade,
subject: $subject,
difficulty: $difficulty,
content: $content
})
RETURN kp
""",
kp_id=kp_id, name=name, grade=grade, subject=subject, difficulty=difficulty, content=content
)
# 创建前置依赖关系
if prerequisites:
for pre_kp_id in prerequisites:
session.run(
"""
MATCH (kp:KnowledgePoint {kp_id: $kp_id}), (pre:KnowledgePoint {kp_id: $pre_kp_id})
CREATE (pre)-[:PREREQUISITE_FOR]->(kp)
""",
kp_id=kp_id, pre_kp_id=pre_kp_id
)
return result.single()["kp"]
# 初始化初中数学知识图谱
if __name__ == "__main__":
kg = KnowledgeGraph()
# 录入七年级知识点
kg.create_knowledge_point(
kp_id="math_7_1",
name="有理数",
grade=7,
subject="数学",
difficulty=2.0,
content="有理数是整数(正整数、0、负整数)和分数的统称,是整数和分数的集合。"
)
kg.create_knowledge_point(
kp_id="math_7_2",
name="代数式",
grade=7,
subject="数学",
difficulty=2.5,
prerequisites=["math_7_1"],
content="由数和表示数的字母经有限次加、减、乘、除、乘方和开方等代数运算所得的式子,或含有字母的数学表达式称为代数式。"
)
kg.create_knowledge_point(
kp_id="math_7_3",
name="一元一次方程",
grade=7,
subject="数学",
difficulty=3.0,
prerequisites=["math_7_2"],
content="只含有一个未知数、未知数的最高次数为1且两边都为整式的等式叫做一元一次方程。"
)
# 录入九年级知识点
kg.create_knowledge_point(
kp_id="math_9_1",
name="一元二次方程",
grade=9,
subject="数学",
difficulty=4.5,
prerequisites=["math_7_3"],
content="只含有一个未知数,并且未知数项的最高次数是2的整式方程叫做一元二次方程。标准形式为:ax²+bx+c=0(a≠0)。"
)
kg.create_knowledge_point(
kp_id="math_9_2",
name="二次函数",
grade=9,
subject="数学",
difficulty=5.0,
prerequisites=["math_8_2", "math_9_1"],
content="二次函数的基本表示形式为y=ax²+bx+c(a≠0)。二次函数最高次必须为二次, 二次函数的图像是一条对称轴与y轴平行或重合于y轴的抛物线。"
)
print("初中数学知识图谱初始化完成")
kg.close()
3.4.2 DINA认知诊断实现
import numpy as np
from scipy.optimize import minimize
class DINAModel:
def __init__(self, Q_matrix):
"""
初始化DINA模型
:param Q_matrix: Q矩阵,形状为(J, K),J是习题数量,K是知识点数量
"""
self.Q = Q_matrix
self.J = Q_matrix.shape[0]
self.K = Q_matrix.shape[1]
# 所有可能的知识状态,共2^K种
self.alpha_candidates = np.array([list(np.binary_repr(i, width=self.K)) for i in range(2**self.K)], dtype=int)
self.s = np.random.uniform(0, 0.2, size=self.J) # 失误率,初始0-0.2
self.g = np.random.uniform(0, 0.2, size=self.J) # 猜测率,初始0-0.2
def compute_eta(self, alpha):
"""计算理想应答矩阵"""
return np.prod(alpha ** self.Q, axis=1)
def compute_response_prob(self, alpha):
"""计算学生对所有习题的作答概率"""
eta = self.compute_eta(alpha)
return (1 - self.s) ** eta * self.g ** (1 - eta)
def log_likelihood(self, params, Y):
"""计算对数似然函数"""
s = params[:self.J]
g = params[self.J:]
s = np.clip(s, 1e-6, 0.5)
g = np.clip(g, 1e-6, 0.5)
ll = 0
for i in range(Y.shape[0]):
y_i = Y[i]
prob_list = []
for alpha in self.alpha_candidates:
eta = np.prod(alpha ** self.Q, axis=1)
p = (1 - s) ** eta * g ** (1 - eta)
prob = np.prod(p ** y_i * (1 - p) ** (1 - y_i))
prob_list.append(prob)
ll += np.log(np.mean(prob_list))
return -ll # 最小化负对数似然
def fit(self, Y, max_iter=100):
"""训练模型估计s和g参数"""
init_params = np.concatenate([self.s, self.g])
bounds = [(1e-6, 0.5) for _ in range(2*self.J)]
result = minimize(self.log_likelihood, init_params, args=(Y,), bounds=bounds, method='L-BFGS-B', options={'maxiter': max_iter})
self.s = result.x[:self.J]
self.g = result.x[self.J:]
print(f"模型训练完成,负对数似然:{result.fun:.4f}")
def predict_alpha(self, y):
"""预测单个学生的知识掌握状态"""
prob_list = []
for alpha in self.alpha_candidates:
p = self.compute_response_prob(alpha)
prob = np.prod(p ** y * (1 - p) ** (1 - y))
prob_list.append(prob)
prob_list = np.array(prob_list) / np.sum(prob_list)
best_alpha_idx = np.argmax(prob_list)
best_alpha = self.alpha_candidates[best_alpha_idx]
mastery_prob = np.sum(prob_list.reshape(-1, 1) * self.alpha_candidates, axis=0)
return best_alpha, mastery_prob
3.4.3 辅导Agent实现
基于LangChain实现具备工具调用能力的辅导Agent:
from langchain_openai import ChatOpenAI
from langchain.tools import tool
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain.agents.format_scratchpad.openai_tools import format_to_openai_tool_messages
from langchain.agents.output_parsers.openai_tools import OpenAIToolsAgentOutputParser
from langchain.agents import AgentExecutor
from langchain_community.chat_message_histories import RedisChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory
import os
from knowledge_graph import KnowledgeGraph
# 加载配置
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")
os.environ["OPENAI_BASE_URL"] = os.getenv("OPENAI_BASE_URL")
# 初始化工具依赖
kg = KnowledgeGraph()
# 定义Agent工具
@tool
def get_knowledge_point_content(kp_name: str) -> str:
"""根据知识点名称查询详细讲解内容"""
with kg.driver.session() as session:
result = session.run(
"MATCH (kp:KnowledgePoint {name: $kp_name}) RETURN kp.content as content",
kp_name=kp_name
)
record = result.single()
return record["content"] if record else f"未找到知识点{kp_name}的内容"
@tool
def get_prerequisite_knowledge(kp_name: str) -> list:
"""查询知识点的前置依赖知识点"""
with kg.driver.session() as session:
result = session.run(
"""
MATCH (pre:KnowledgePoint)-[:PREREQUISITE_FOR]->(kp:KnowledgePoint {name: $kp_name})
RETURN pre.name as pre_name
""",
kp_name=kp_name
)
return [record["pre_name"] for record in result]
@tool
def generate_exercise(kp_name: str, difficulty: float) -> str:
"""生成指定知识点和难度的习题,难度范围1-5"""
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.7)
prompt = f"请生成一道关于{kp_name}的习题,难度为{difficulty}/5,适合初中学生,包含题目、参考答案和解析。"
return llm.invoke(prompt).content
# 定义Agent prompt
prompt = ChatPromptTemplate.from_messages([
("system", """
你是专业的初中数学AI辅导老师LearnWise,遵守以下规则:
1. 不要直接给学生答案,要引导思考,比如先问考察的知识点是什么
2. 如果学生问的知识点需要前置知识,先查询前置知识,确认掌握后再讲解
3. 讲解完知识点后要生成对应习题让学生练习巩固
4. 语言亲切有耐心,适合初中学生认知水平
你可以调用以下工具:{tools}
"""),
("user", "我是{student_name},{grade}年级,我的知识点掌握情况:{mastery_status}"),
MessagesPlaceholder(variable_name="chat_history"),
("user", "{input}"),
MessagesPlaceholder(variable_name="agent_scratchpad"),
])
# 初始化Agent
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
tools = [get_knowledge_point_content, get_prerequisite_knowledge, generate_exercise]
llm_with_tools = llm.bind_tools(tools)
agent = (
{
"input": lambda x: x["input"],
"student_name": lambda x: x["student_name"],
"grade": lambda x: x["grade"],
"mastery_status": lambda x: x["mastery_status"],
"agent_scratchpad": lambda x: format_to_openai_tool_messages(x["intermediate_steps"]),
"chat_history": lambda x: x["chat_history"],
}
| prompt
| llm_with_tools
| OpenAIToolsAgentOutputParser()
)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 加入会话记忆
def get_session_history(session_id: str):
return RedisChatMessageHistory(session_id, url="redis://localhost:6379/0")
agent_with_history = RunnableWithMessageHistory(
agent_executor,
get_session_history,
input_messages_key="input",
history_messages_key="chat_history",
)
# 测试Agent
if __name__ == "__main__":
response = agent_with_history.invoke(
{
"input": "老师,我不会二次函数的顶点式,能不能给我讲讲?",
"student_name": "小明",
"grade": 9,
"mastery_status": "一元二次方程掌握率30%,函数基本概念掌握率60%",
},
config={"configurable": {"session_id": "xiaoming_123"}},
)
print("AI老师回答:", response["output"])
3.5 实际场景测试
我们以九年级学生小明的场景测试:
小明最近测试中二次函数相关题目正确率只有20%,目标是1个月内掌握二次函数,中考这部分知识点不丢分。
- 系统首先通过DINA模型诊断,发现小明的前置知识点「一元二次方程」掌握率30%,「函数基本概念」掌握率60%,知识漏洞明确。
- 生成学习路径:
- 第1周:补函数基本概念,每天2个知识点+10道习题,目标掌握率90%
- 第2周:补一元二次方程,重点练习配方法,目标掌握率85%
- 第3周:学习二次函数基础概念、三种表达式,目标掌握率80%
- 第4周:学习二次函数的应用、动点问题,目标掌握率90%
- 辅导过程中小明问「二次函数顶点式怎么用?」,Agent首先查询到顶点式需要配方法的前置知识,先给小明讲解配方法,生成3道配方法习题,做完后确认掌握,再讲解顶点式的推导和应用,再生成5道相关习题。
- 每周生成学情报告,同步给家长和老师,调整后续学习节奏。
四、最佳实践与边界
4.1 落地最佳实践
- 知识图谱要对齐教学大纲:知识点的顺序、难度、前置依赖必须和当地的教学大纲对齐,最好找一线老师审核,避免出现知识点顺序错误的问题。
- Q矩阵标注要准确:每道题考察的知识点必须标注准确,尤其是跨知识点的综合题,否则认知诊断的结果会完全失真。
- 加入教学原则约束:Agent的prompt必须加入教育相关的约束,比如不能直接给答案、不能使用超纲的术语、要引导学生思考,避免AI成为学生抄答案的工具。
- 内容审核机制:必须加入双重内容审核,首先是大模型的安全审核,其次是敏感知识点的人工审核,避免AI给出错误的知识点或者不适宜的内容。
- 隐私保护:所有学生数据必须加密存储,符合《个人信息保护法》的要求,尤其是未成年人的信息,不能泄露给第三方。
- A/B测试迭代:上线后要做A/B测试,对比不同路径规划算法的效果,比如规则路径、DINA+强化学习路径的学生掌握率提升情况,持续优化模型。
4.2 边界与局限性
当前教育AI Agent还存在以下局限性,不能完全替代老师:
- 缺乏情感关怀能力:无法替代老师对学生的情感支持、价值观引导、挫折教育等人文层面的教育。
- 实践类科目覆盖不足:对于物理化学实验、美术、体育等需要动手实践的科目,当前的Agent还无法有效覆盖。
- 依赖高质量标注数据:小语种、小众科目的知识图谱和习题数据不足,落地成本较高。
- 复杂推理能力有限:对于竞赛级别的难题,大模型可能会出现错误,需要人工审核校对。
4.3 行业发展趋势
教育AI的发展历程和未来趋势如下:
| 时间 | 阶段 | 核心技术 | 产品形态 | 效果 |
|---|---|---|---|---|
| 2000-2015 | 自适应学习1.0 | 规则引擎、IRT测评 | 题库类产品(猿题库、学而思题库) | 可根据正确率调整习题难度,无个性化路径 |
| 2015-2022 | 自适应学习2.0 | 深度学习、知识图谱 | AI课(猿辅导AI班课、作业帮AI辅导) | 初步个性化,预设路径灵活性差 |
| 2022-2025 | 自适应学习3.0 | 大模型、AI Agent | 个性化AI导师(Khanmigo、LearnWise) | 完全个性化路径,类真人辅导体验 |
| 2025-2030 | 自适应学习4.0 | 多模态Agent、具身智能、脑机接口 | 沉浸式学习伙伴 | 可感知情绪、注意力,完全匹配认知节奏 |
五、结论与展望
5.1 要点总结
本文从核心概念、算法模型、实战开发三个维度,完整讲解了教育AI Agent的构建流程:
- 教育AI Agent的核心是五大能力:感知、记忆、规划、行动、反思,和传统自适应产品有本质区别。
- 核心算法基于DINA认知诊断模型定位知识漏洞,基于强化学习生成个性化学习路径。
- 全栈实现包括知识图谱构建、认知诊断引擎开发、Agent工具调用、会话记忆等模块,代码可直接复用。
5.2 行动号召
你可以直接克隆本文的开源代码,根据自己的需求改造成小学语文、英语、职业教育考证、编程辅导等场景的Agent,如果你在落地过程中有任何问题,欢迎在评论区留言讨论。如果您是一线老师或者教育从业者,也欢迎一起交流如何将AI Agent和实际教学场景结合,提升教学效率。
5.3 未来展望
接下来我们会给LearnWise加入多模态能力,支持手写识别、语音输入、表情情绪识别,根据学生的学习状态调整辅导节奏,同时会和更多学校的LMS系统打通,成为老师的教学助手,真正实现“让每个学生都拥有专属AI导师”的愿景。
附加部分
参考文献
- Junker B W, Sijtsma K. Cognitive assessment models with few assumptions, and connections with nonparametric item response theory[J]. Applied Psychological Measurement, 2001, 25(3): 258-272.(DINA模型原始论文)
- 教育部《教育数字化战略行动实施方案》
- Khan Academy. Khanmigo Technical Report[R]. 2023.
- LangChain官方文档:https://python.langchain.com/docs/get_started/introduction
作者简介
作者是资深AI教育产品工程师,曾在头部教育公司负责自适应学习系统的研发,服务过超过100万学生,现在专注于教育AI Agent的落地,欢迎关注我的GitHub:@learnwise-ai,公众号:LearnWise AI。
(全文完,总字数约11200字)
更多推荐



所有评论(0)