功能与入口
学习画像页的「我的日语画像」进入完整分区:概览、语言背景、目标、考试、兴趣与领域、阅读设置、自评、系统观察、知识、证据、洞察、修改记录、数据与隐私。桌面显示分区导航,手机显示分区选择器。原画像页继续提供假名、翻译、解释深度和挑战偏好等设置。 所有资料允许缺省。自评可修改,系统观察不可直接编辑。界面不显示未经校准的概率,也不把资料填写程度当成能力可信度。本期没有新增测验、推荐排序或理解概率算法。数据字典
单值设置继续使用learner_profiles。新增记录通常包含 record_id、user_id、source、version、created_at、updated_at;用户身份来自 JWT。
| 表 | 数据与身份 |
|---|---|
learner_language_backgrounds | 用户与语言唯一;母语标志、自报水平、汉字熟悉度、学习开始日期与经历 |
learner_goals | 每个目标独立 ID;名称、用途、类型、顺序、期限、进行/暂停/完成状态 |
learner_exam_records | 每次考试独立 ID;级别、日期或仅年份、状态、总分、分项成绩和自报来源 |
profile_taxonomy_terms / profile_taxonomy_aliases | 主题、体裁、领域、场景、优先方向;标准化名称、语言标签、别名与合并重定向。owner 0 为共享,其余为用户私有 |
learner_preferences | 用户、条目、偏好类型唯一;兴趣、排除与领域熟悉度分别记录 |
learner_self_assessments | 用户、对象、能力维度、条件唯一;判断文本和补充说明 |
learner_reading_settings | 每用户一条;单次/每日分钟数、每周天数、长度偏好、音频速度、字幕 |
learner_insights | 有来源的系统提案,用户仅确认、拒绝、撤销;本期不自动生成提案 |
learner_profile_changes | 修改前后、请求指纹、幂等响应及操作时间;与事实写入在同一事务 |
skill_senses | 词条下的词义;词条、词典来源、来源词义键唯一;未知词义不生成记录 |
skill_aliases / skill_relations | 表记别名、活用和其他知识关系;不替换现有 Skill ID |
ability_dimensions | 识义、读音、听辨、回忆、运用、阅读、写作、口语、互动、Can-do |
learner_ability_states | 用户、对象、维度、条件唯一;可空估计、证据数、可空可靠性、版本及时间 |
learning_event_targets / learning_event_contexts | 一个事件的多个目标及辅助条件、任务、尝试、材料修订和评价版本 |
learning_event_retractions | 本人的显式反馈撤销;原事件仍可解释,不参与后续投影 |
material_profiles | 文章修订与分析版本唯一;已知体裁、长度、句数、词法修订及是否当前有效 |
material_skill_features | 材料分析、词条、词义唯一;出现频次、位置及解析来源 |
learner_material_feedback | 文章主旨、细节、词汇难度、兴趣及辅助使用的显式反馈 |
comprehension_estimates | 未来估计缓存;本期不填充、不提供预测 API |
接口
公开前缀/api/adaptive/me/foundation,内部前缀 /v1/data/adaptive/foundation。
GET /{resource}?offset=0&limit=50&q=...:SQL 分页和搜索,返回schema_version、items、total、next_offset。知识页还支持kind、state筛选。- 可编辑资源:
languages、goals、exams、preferences、self-assessments、reading-settings、material-feedback。 - 只读资源:
dimensions、observations、knowledge、evidence、history、senses;senses的q为 Skill ID。 taxonomy提供查询与私有条目创建;insights提供查询与状态决策,用户不能伪造系统提案。POST /{resource}/{record_id}:{request_id, expected_version, values}。创建版本为 0,修改携带当前版本;values 使用该资源的完整字段合同。POST /{resource}/{record_id}?delete=true:同一请求结构,values 为空对象,删除当前资料,保留修改历史。POST /retractions/{event_id}:撤销本人的显式反馈;系统评价不能由这个入口撤销。POST /clear-profile/all:expected_version 为当前 Profile 版本;清空显式资料、相关反馈和历史,保留复习与训练记录、隐私开关。前端明确确认后才发送。
payload.foundation,包含有界的 targets、support、attempt_id、task_type、article_revision、source_record_id、first_independent_attempt、evaluator_version。辅助条件未知时保持空值;不能将缺省等价于无辅助。旧事件保持原合同。
更新、迁移和兼容
schema.sql 为唯一 DDL;启动初始化和独立 bootstrap 均调用 migrate_profile_foundation。迁移标记确保历史回填只执行一次,不重建用户数据库。历史考试只有年份时保留年份;历史词条不复制成多个词义。
显式认识反馈进入自评。observed-production-recall.v4 只延续复习/表达观察的启发式更新;原算法概率不是校准结果。规范能力读取使用 learner_ability_states,投影事务通过触发器同时维护规范状态与旧 SkillState 兼容缓存。旧版本快照在下一次投影读取时重放。
旧 Profile 写入仅对变动集合做兼容同步,保留未变动条目的详细资料。新集合修改更新旧客户端字段与 Profile 版本。未来估计缓存在资料和学习事件变化时失效。
材料特征由迁移及既有词法更新生成;按句子哈希筛除过期跨度,去重不同用户对同一材料的跨度副本。语法难度、主旨理解等未知特征不推断为零。文章或句子修改立即使旧分析过期;下一次词法处理重新生成特征。
验证边界
自动化回归覆盖资料 CRUD、用户隔离、乐观并发、幂等、历史、反馈撤销、迁移重入和旧客户端编辑兼容;Flutter 检查覆盖异步分区切换。完整服务及客户端结果记录在合并 PR 中。不宣称已完成水平测验、生产数据库升级或真实模型语法准确率评测。 规范观察从learner_ability_states 读取;旧 SkillState 接口保留兼容缓存,避免丢失既有历史、计数和启发式可信度。旧分数不代表经过校准的概率。