学习陪伴
系统总览

德和学习陪伴 · 系统总览与验证看板

「学习过程记录 + 元认知引导」系统:公开端「学轨扫描」让家长 3 分钟看见孩子的学习方式倾向,内部端「学轨陪伴」记录每天的行为信号。核心交付物不是提分,是看见孩子怎么学。AI 只做引导与草稿、不做学科讲解;评分只用规则引擎;未获同意的学生 AI 物理关闭。

运行环境:PHP 8.4.27生产数据库:MySQL 5.7.40 原生前端 / 无重型框架合规拦截优先 本地验证已通过模块B 全流程验收

五个入口 · 两条链路

测

学习方式测评 v2.0(公开端)

分学段题库(小学 3 点 / 中学 5 点频率)、反向题与注意力检查;5 个学习过程维度 + 动机剖面。常模未校准前只报描述性频率标签,不冒充「已校准」;旧版 17 题保留在 /assess/classic/。

轨

学轨后台(配置层 + 分析层)

题目/选项/分值/维度/等级阈值/模型 Key/兜底文案/决策规则全部可视化编辑;公开漏斗与规则决策建议、测评记录、手机号授权桥接。

学

模块A 学生端 H5

签到(按门店位置做球面距离校验)→ 卡点标记 → 核查 → 一句话复盘。一次性引导卡片,无 AI 聊天窗口;小学段引导语经教练中介,不直接给学生。

练

模块A 教练端 H5

四个学习过程指标(由数据库直接统计)→ 小学段待用提示 → 离线观察草稿 → 三问题复盘 → 家长摘要草稿与人工审核发送。

两条链路物理隔离:公开测评表不含学员编号,AI 调用日志不含测评编号;唯一连接点是「手机号匹配 + 家长授权」,授权后教练也只能看到描述文本与维度等级,看不到原始作答与精确分数。家长端不登录,教练确认后由服务号模板消息推送家长摘要定稿。

本地验证实测

76
合规 + 规则引擎单元测试
55
端到端 HTTP 冒烟检查通过
54
PHP 文件语法检查零错误
5/5
规格验收标准实测通过

验收标准 · 实时自检

以下结果直接查询运行中的数据库与前端源码,不是静态清单。
加载中…

模块B「学轨扫描」实测(B1–B6)

B1 种子 17 题 / 68 选项 入库;B3 全 4 分 → 等级 1、全 1 分 → 等级 4(规则引擎确定性);B4 AI 描述双重校验实测 通过 / 负面词拦截 / 正面词拦截 三条路径均命中兜底文案;B5 免责声明逐字渲染;B6 后台新增题目后前台立即可见、改选项分值后下一次评分立即变化。
决策2:小学段 AI 引导语不直接给学生,只进教练端「待用提示」。决策3:评分纯规则引擎,AI 只做翻译。决策5:公开表无学员编号,桥接必须家长授权且只返回描述与等级。决策6:题目/分值/阈值/模型/密钥/兜底/规则全部后台可编辑。决策7:切换模型后下一次调用即生效,仍只经统一 AI 网关。

三条硬拦截(代码层,不是注释)

① 监护人同意检查

统一 AI 网关的第一次业务检查会读取学员的监护人同意时间:年级低于阈值且未同意时直接返回「需要监护人同意」,零外部请求、零审计写入。实测:未同意学生提交卡点只收到「暂时无法生成提示,请稍后再试」;每日离线草稿中该学生被阻断。

② 脱敏阻断

姓名 / 学校词库 / 手机号 / 身份证 / 分数全部替换为占位符;疑似学校全称但不在词库时直接阻断、不发出请求,阻断时不回传原文。实测样本文本入库后为「[学生]在[学校]考了[分数],联系电话[手机]」。

③ 家长摘要人工审核

发送时间非空前强制校验:定稿非空,且存在「草稿与定稿不一致」的编辑记录或「完全采纳」记录,否则拒绝发送。实测:未审核直接发送被「摘要尚未完成人工审核」阻断,编辑定稿后才放行。

④ 学生端无自由对话链

引导语以一次性卡片展示,关闭后不保留入口;AI 输出只写入卡点记录与调用日志,不存在任何对话记录表。

架构与目录

单体应用 · 五个主目录

技术目录(供开发查看)
/public
  /assess    模块B 学轨扫描(公开测评 H5)
  /student   模块A 学生端 H5(签到/卡点/核查/复盘)
  /coach     模块A 教练端 H5(指标/待用提示/审核发送)
  /admin     管理后台 + assess.php 学轨后台
  /api       统一入口 index.php?action=xxx
  /assets    原生 CSS / JS / 陪伴组件
/lib
  /Ai        Gateway · Desensitizer · Drivers
             PromptRegistry · AuditSink · RateLimiter
  /Srl       Metrics.php(4 指标纯 SQL 聚合)
  /Assess    Scoring.php(规则引擎,不调 AI)· Seed.php
  /Ai        PublicAi.php(AI 翻译 + 双重校验 + 兜底)
  /Auth      Session.php(OpenID 会话 / 权限)
  /Db        Database.php · StudentLookup.php
/config
  ai_routes.json   模型主/降级路由
  prompts.php      四个 Prompt(硬编码,无编辑入口)
  compliance.php   合规开关与脱敏词库
  app.php          环境配置(密钥走环境变量)
/cron
  daily_summary.php  每日离线生成教练草稿
/api
  routes.php       action 枚举表(web root 之外)
/migrations
  001_init.sql     7 张核心表(MySQL 5.7.40)
  002_support.sql  草稿缓存 / 审核证据表
  003_assess.sql   模块B 13 张表(公开端物理隔离)
  004_assess_seed.sql  B1 逐字种子:17 题 / 68 选项
  005_staff_auth.sql  员工身份 / 家长授权 / 结构版本
/tests            合规 + 规则引擎单元测试
/scripts          lint / 冒烟测试

模型与合规链路

所有前端请求只打到统一入口 /api/index.php?action=xxx;任何接口不得直接调用外部模型,必须经统一 AI 网关。

同意检查 → 限流 → 脱敏 → 主模型/重试/降级 → 输出守卫 → 写调用日志(日志中保存的是实际外发内容)

路由表一套接口对接豆包 / DeepSeek / 通义的兼容端点,切换只改配置;密钥只从环境变量读。本地验证使用离线驱动,不发出任何外部请求。

本地复现命令

# 启动(Windows,已附便携 PHP 8.4) start-dev.bat # 一键全量验证 verify-all.bat # 或手动 .runtime/php/php.exe scripts/lint.php .runtime/php/php.exe tests/run.php .runtime/php/php.exe cron/daily_summary.php python scripts/smoke_test.py

本机无 MySQL 时自动降级 SQLite 并播种演示数据,生产以 001_init.sql 建 MySQL 5.7.40 库。