
K12 AI 教育系统与成人教育产品最大的区别,不是内容难度,而是合规约束前置。这意味着系统设计的第一优先级不是功能,而是边界。
三类必须前置考虑的约束:
约束 | 具体要求 |
|---|---|
数据最小化 | 只收集教学必需字段,默认不收集生物识别、精确定位 |
监护人同意 | 不满 14 周岁用户,须取得监护人明示同意 |
内容安全 | 输出必须适合未成年人,禁止暴力、焦虑营销、排名羞辱 |
定位边界 | 不替代学校教学,不组织学科类违规培训 |
留存限制 | 学习数据设定保存期限,到期删除或匿名化 |
这些约束不是"上线前补一下",而是架构设计的前提。本文从数据模型、知识追踪、推荐和合规层四个部分展开。
接入层 学生端、教师端、家长端(权限分离)
服务层 学情分析、推荐、作业、报告
模型层 知识追踪、难度估计、内容标签
数据层 学习记录、知识点图谱、题库
合规层 同意管理、脱敏、留存、审核关键设计原则:三个角色看到的数据范围不同。 学生看不到排名对比,家长看不到其他学生数据,教师看到班级聚合而非个别隐私细节。
自适应学习的基础是知识点图谱和掌握度估计。这里用简化的贝叶斯知识追踪(BKT)演示。
from dataclasses import dataclass, field
from enum import Enum
class Mastery(str, Enum):
unknown = "unknown"
weak = "weak"
medium = "medium"
strong = "strong"
@dataclass
class KnowledgeNode:
node_id: str
name: str
prerequisites: list[str] = field(default_factory=list)
@dataclass
class BKTParams:
learn: float = 0.15 # 未掌握到掌握的概率
forget: float = 0.05 # 掌握到遗忘的概率
guess: float = 0.20 # 未掌握但答对的概率
slip: float = 0.10 # 掌握但答错的概率
def update_mastery(p_mastery: float, correct: bool,
p: BKTParams) -> float:
if correct:
num = p_mastery * (1 - p.slip)
den = num + (1 - p_mastery) * p.guess
else:
num = p_mastery * p.slip
den = num + (1 - p_mastery) * (1 - p.guess)
posterior = num / den if den else p_mastery
return posterior + (1 - posterior) * p.learn
def to_level(p: float) -> Mastery:
if p >= 0.85:
return Mastery.strong
if p >= 0.6:
return Mastery.medium
if p >= 0.3:
return Mastery.weak
return Mastery.unknown关键点:guess 和 slip 两个参数的存在,是为了防止"答对就认为掌握"。 猜对和失误都是真实存在的,模型必须容忍噪声。
推荐的目标不是"推最难的题",而是推最近发展区内的题——太难会挫败,太简单无收益。
from dataclasses import dataclass
@dataclass
class Exercise:
ex_id: str
node_id: str
difficulty: float # 0-1
est_minutes: float
def recommend(nodes: dict[str, KnowledgeNode],
mastery: dict[str, float],
exercises: list[Exercise],
target: float = 0.65,
limit: int = 5) -> list[Exercise]:
candidates = []
for ex in exercises:
p = mastery.get(ex.node_id, 0.0)
# 只推荐前置知识已掌握的知识点
node = nodes.get(ex.node_id)
if node and any(mastery.get(pre, 0) < 0.6
for pre in node.prerequisites):
continue
# 难度贴近当前掌握度 + 适度挑战
gap = abs(ex.difficulty - min(p + 0.15, 1.0))
if gap > 0.35:
continue
candidates.append((gap, ex))
candidates.sort(key=lambda x: x[0])
return [ex for _, ex in candidates[:limit]]两个设计原则:
需要强调:推荐只是建议,学生和教师可以选择忽略。 系统不应强制学习路径。
这是 K12 系统区别于其他 AI 应用的核心部分。
import re
import time
import hashlib
from dataclasses import dataclass
from enum import Enum
class AgeGroup(str, Enum):
under_14 = "under_14" # 需监护人同意
teen = "teen" # 14-18
adult = "adult"
@dataclass
class ConsentRecord:
user_id_hash: str
age_group: AgeGroup
guardian_consent: bool
consented_at: float
purpose: str
PII = re.compile(r"(\d{11}|\d{17}[\dXx]|[\w.+-]+@[\w-]+\.[\w.]+)")
def pseudonymize(user_id: str, salt: str) -> str:
raw = f"{salt}:{user_id}"
return hashlib.sha256(raw.encode()).hexdigest()[:16]
def mask_pii(text: str) -> str:
return PII.sub("[REDACTED]", text)
def can_collect(consent: ConsentRecord, field: str) -> bool:
"""最小必要原则:字段必须在授权目的范围内"""
allowed = {
"answer_record": {"教学分析"},
"study_time": {"教学分析"},
"error_type": {"教学分析"},
}
if field not in allowed:
return False
if consent.age_group == AgeGroup.under_14 \
and not consent.guardian_consent:
return False
return consent.purpose in allowed[field]
def retention_ok(created_at: float, days: int = 365) -> bool:
return (time.time() - created_at) < days * 86400三个必须落到代码的规则:
任何"先存下来以后再说"的做法,在 K12 场景都是违规风险。
import re
# 面向未成年人的额外禁止项
MINOR_BANNED = {
"排名倒数", "差生", "笨", "没救了", # 羞辱性表达
"必须", "否则", "再不学就晚了", # 焦虑营销
"暴力", "色情", "赌博", "自杀",
}
PII = re.compile(r"(\d{11}|\d{17}[\dXx]|[\w.+-]+@[\w-]+\.[\w.]+)")
def audit_for_minor(text: str) -> list[str]:
issues = []
for w in MINOR_BANNED:
if w in text:
issues.append(f"含不适宜用语:{w}")
if PII.search(text):
issues.append("含个人信息,需脱敏")
return issues
def safe_feedback(score: float, text: str) -> str:
"""反馈必须正向、具体、不比较"""
issues = audit_for_minor(text)
if issues:
return "本次练习已完成,我们来看看哪些地方可以再巩固。"
return text面向未成年人的内容审核比一般场景更严格:禁止羞辱、禁止焦虑营销、禁止横向比较。 反馈应聚焦"哪一步可以改进",而不是"你比别人差"。
维度 | 做法 | 缺失后果 |
|---|---|---|
同意管理 | 监护人明示同意 + 记录留档 | 合规违规 |
数据最小化 | 字段白名单 + 超范围拒绝 | 过度收集 |
假名化 | 哈希 ID 关联学习记录 | 隐私泄露 |
留存限制 | 到期清理或匿名化 | 长期风险 |
内容审核 | 未成年专用禁止词表 | 心理伤害 |
角色隔离 | 学生/教师/家长权限分离 | 数据越权 |
可解释 | 推荐理由对教师可见 | 无法监督 |
K12 AI 智能教育系统的工程核心,是合规前置、数据最小、推荐克制、反馈正向:
代码可以简单,但同意管理、字段白名单、假名化和内容审核不能省。系统定位始终是辅助工具,教师和家长是决策主体,AI 不应替代教育判断。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。