返回 Skill 列表
extension
分类: 其它无需 API Key

student-growth-ops

记录少儿英语学习情况与家长反馈(本地档案)。适用于学情记录、家长沟通、学员建档、咨询留档等场景。

person作者: user_a9993e49hubcommunity

少儿英语学员成长档案

使用场景

当用户提出以下任务时使用本 Skill:

  • 咨询学生建档
  • 试听测评
  • 在读课后记录
  • 每周跟进
  • 月度学情文字总结(写入 student-record.json03
  • 家长诉求与反馈(对话优先;必要时落档到 02

每个学生都必须在本地拥有独立文件夹,统一存放在 ~/StudentGrowthOps/ 下。

本 Skill 依赖的文件

以下路径均相对于仓库根目录(包含 student-growth-ops/ 的那一层),不要使用本机仓库的绝对路径去读取或打开文件。

执行前先读取这些项目内文件:

  • student-growth-ops/question-bank.json
  • student-growth-ops/student-file-schema.json
  • student-growth-ops/web/student-form.html
  • student-growth-ops/server/index.js
  • student-growth-ops/scripts/open_student_form.js

如果需要初始化学生目录,在仓库根目录下执行(使用相对路径):

python "student-growth-ops/scripts/scaffold_student.py" --student-name "学生名" --grade "G3" --status "leads" --start-date "2026-04-15"

若本机中学员服务所在目录与仓库布局不一致,可在启动服务前设置环境变量 STUDENT_GROWTH_OPS_ROOT 指向包含 web/student-form.htmlstudent-growth-ops 目录根路径。

强制规则

  • 第一问必须先确认学生名称。
  • 在进入任何阶段前,必须先根据学生名称检查是否已有学生档案。
  • 如果已有学生档案,优先进入“跟踪/更新”流程,而不是重复建档。
  • 如果没有学生档案,再进入“新建档案”流程。
  • 先从用户自然语言里提取已经明确的学生信息和家长诉求。
  • 已经明确的信息不要重复问。
  • 先问一次填写方式,不要一开始就连续提问。
  • 如果走对话填写,每轮只能问 1-2 个问题。
  • 对话问题必须来自 student-growth-ops/question-bank.json
  • 提问时既要给选项,也允许用户自然语言回答。
  • 每确认一轮信息后就立即写入对应文件,不要等到最后一次性写入。
  • 对话建档和网页建档,最终写入的学生档案文件必须完全使用同一套文件结构和字段语义。
  • 不要创建额外的 Markdown 总结文档。
  • 业务记录:系统数据为单个文件 _data/student-record.json(结构见 student-file-schema.json);老师可读层02-家长需求.txt03-课后跟进记录.txt
  • 给家长的沟通话术:当用户要的是「发给家长的一段话 / 微信 / 短信 / 课堂后简短反馈」等,在对话里直接输出完整文本即可,语气礼貌、温柔、有共情;除非用户明确要求落档,否则不要为此覆盖 02 等文件。
  • 回复用户时的展示规则
    • 不要在对话里贴出 student-record.json 全文;用一句「系统数据已同步更新」即可。
    • 若更新了 0203,在收尾用本机绝对路径(纯文本)标出即可,不要用 Markdown 超链接或 file://

项目集成约束

这是当前项目 abcclaw 的集成版本,所有路径都以项目根目录下的 student-growth-ops/ 为准。

  • 网页实现必须放在 student-growth-ops/ 目录内
  • 页面启动、表单提交、生成文本文件的逻辑,已经在项目内实现
  • 实际运行时,只需要启动已有页面服务并打开页面,不要重新生成网页代码

学生目录规则

学生根目录:

  • ~/StudentGrowthOps/Leads/
  • ~/StudentGrowthOps/Active/
  • ~/StudentGrowthOps/RenewalWatch/
  • ~/StudentGrowthOps/Archived/

学生目录命名:

  • {grade}-{studentName}-{startDate}
  • 示例:G3-Luna-2026-04-15

正式档案:双层保存(老师可读层 + 系统数据层)

老师可读(学员文件夹根目录):

  • 02-家长需求.txt:家长诉求与跟进摘要(纯文本);即时发家长的话术默认只在对话里输出。
  • 03-课后跟进记录.txt:学习情况与课后跟进要点(纯文本,按日期追加)

系统数据(_data/student-record.json):

  • 唯一结构化存档,字段分区见 student-growth-ops/student-file-schema.json。课次在 lessonLog.rows 中追加对象。

网页中间采集:

  • ~/.openclaw/Workspace/student-growth-ops/form-submissions/*.txt 为网页提交后的中间文件(逐行 字段名:内容),需再合并进学员目录中的 student-record.json / 02 / 03

工作流

1. 识别当前阶段

把用户需求映射到以下阶段之一:

  • intake:咨询、报名、家长需求、回访优先级
  • assessment:试听、测评、首诊反馈
  • lesson-log:单次课后记录
  • weekly-followup:一周汇总、提醒、纠正
  • monthly-report:月度学情文字总结
  • renewal-watch:续费相关沟通(写入 student-record.jsonparentNeedstags

2. 先提取,再提问

在提问前,先从用户原话中提取已知信息,优先提取:

  • studentName
  • grade
  • status
  • currentLevel
  • primaryGoals
  • painPoints
  • sourceChannel
  • parentNeeds

不要对这些已知字段重复追问。

3. 先确认学生名称,再检查是否已有档案

不管用户要做建档、学情更新还是跟踪记录,第一步都先确认学生名称。

执行顺序:

  1. 先从自然语言中提取学生名称。
  2. 如果学生名称还不明确,先只问一个问题:
    • 请先告诉我学生姓名。
  3. 拿到学生姓名后,先去 ~/StudentGrowthOps/ 下查找是否已有对应学生目录。
  4. 如果查到已有学生目录:
    • 视为已有档案
    • 后续默认进入跟踪/更新流程
    • 不要重复新建同名档案
  5. 如果没有查到学生目录:
    • 视为新学生
    • 后续进入建档流程
    • 必要时先运行脚手架创建学生目录

判断原则:

  • 已有目录 = 跟踪记录 / 更新资料 / 继续补充
  • 没有目录 = 新建档案 / 首次采集

4. 再问填写方式

正式采集前,先只问这一个问题(问的时候要把两种方式各自的优势说清楚,方便用户选):

  • 你想通过网页填写信息,还是通过对话一步步填写?

选项说明(给用户看的优势):

  • 网页填写:更快、更精准(选项与阶段题目集中展示,一次填完、预览清晰,适合在电脑前集中录入)。
  • 对话填写:更方便(不用开浏览器,按轮回答即可;在微信等聊天场景里也能完成,适合碎片化时间)。

建议使用 AskQuestion 提供两个选项,标签或说明里可带上上述优势,例如:

  • web:网页填写(更快、更精准)
  • chat:对话填写(方便,微信也可以完成)

5. 如果用户选择网页填写

网页已经写在项目里的 student-growth-ops/ 目录下。

运行时要求:

  1. 只负责启动已有页面服务。
  2. 优先使用一键启动脚本:
    • node "student-growth-ops/scripts/open_student_form.js"
  3. 如果需要带参数启动,可以使用:
    • node "student-growth-ops/scripts/open_student_form.js" --studentName=张三 --grade=G3 --status=active --stage=monthly-report
  4. 如需单独启动服务,也可使用:
    • node "student-growth-ops/server/index.js"
  5. 启动后页面地址:
    • http://127.0.0.1:8766/student-form
  6. 若启动失败或页面异常,先确认本机 8766 是否已被其他进程占用,在终端执行:
    • lsof -nP -iTCP:8766 -sTCP:LISTEN 再根据结果结束旧进程或改用环境变量 STUDENT_GROWTH_PORT 指定其他端口。
  7. 不要在此时重新生成网页代码。

网页必须满足这些要求: 0. 输入学生姓名后,页面应调用 GET /api/lookup-student?name=...(由 student-growth-ops/server/index.js 提供),在 ~/StudentGrowthOps/ 下扫描各状态子目录中的学生文件夹,仅识别存在 _data/student-record.json 且其中 studentProfile.studentName 与输入一致的目录,并在页面顶部明确提示当前是「新建档案」还是「已找到档案 · 跟踪更新」,与「先问姓名、先查档」的流程一致。

  1. 页面字段覆盖当前阶段所需内容。
  2. 页面支持下拉选项和自由输入。
  3. 页面有明确的 完成填写 按钮。
  4. 点击 完成填写 后立即进入 loading 状态:
    • 按钮禁用
    • 展示 提交中...生成中...
    • 防止重复点击
  5. 页面应优先保证用户体验:
    • 自动保存草稿
    • 重新打开后恢复草稿
    • 展示“将要生成的文本预览”
    • 提交成功后展示完整输出路径
    • 支持一键打开提交目录
  6. 提交成功后,在 OpenClaw 工作空间生成一个文本文件:
    • ~/.openclaw/Workspace/student-growth-ops/form-submissions/
  7. 文件名格式:
    • {studentName}-{timestamp}.txt
  8. 文件内容必须是逐行文本,格式示例:
    • 名字:小明
    • 年级:G3
    • 学校:育才小学
    • 当前英语基础:能跟读
    • 家长诉求:提分, 口语表达
  9. 文件中不要输出 Markdown、JSON、额外解释或无关标题。
  10. 每一行都使用 字段名:内容 格式,供后续 AI 直接读取并合并进正式学生档案;不要把该 txt 当作最终存档。
  11. 网页填写最终落地到学生档案时,必须和对话填写使用完全相同的文件集合:
  • 老师可读层:02-家长需求.txt03-课后跟进记录.txt
  • 系统数据层:_data/student-record.json
  1. 不允许网页填写走一套文件结构、对话填写走另一套文件结构。

网页模式下的交互规则:

  1. 启动页面并告知用户页面已打开。
  2. 告知用户点击 完成填写 后会在 OpenClaw 工作空间生成文本文件。
  3. 等用户回复 填写完成
  4. 用户回复后,明确告诉他去这个路径找:
    • ~/.openclaw/Workspace/student-growth-ops/form-submissions/
  5. 然后读取该文本文件,再回写到学生档案文件中。

6. 如果用户选择对话填写

student-growth-ops/question-bank.json 作为唯一题库来源。

对话规则:

  1. 每轮只问 1-2 个未完成字段。
  2. 优先问当前阶段最关键、最缺失的字段。
  3. 有稳定选项的问题优先用 AskQuestion
  4. 如果用户直接自然语言回答,要自动解析并映射到最接近的字段值。
  5. 只有选项无法覆盖时,才补一个简短自由输入问题。
  6. 每轮结束后先写入,再继续下一轮。
  7. 对话填写最终落地的学生档案文件,必须和网页填写保持完全一致。

好的方式:

  • 先识别出“G3、口语弱、家长想提分”
  • 再只问一次填写方式
  • 进入对话后每轮只问 1-2 个题库问题

错误方式:

  • 一上来连续问完整一套问卷
  • 用户已经说过的信息又被重复问一遍

7. 确保学生文件夹存在

如果学生文件夹不存在:

  1. 根据状态选择正确的根目录。
  2. 运行 scaffold_student.py 初始化。
  3. 确认路径后再写入内容。

如果学生文件夹已存在:

  1. 直接复用现有目录。
  2. 原地更新文件。
  3. 除非用户明确要求,不要为同一个学生重复创建新目录。

8. 按阶段写入正确文件

文件映射规则(系统数据均写入 _data/student-record.json 内对应键;老师可读层为根目录 0203):

  • intake -> 更新 studentProfileparentNeedstags;需要维护建档摘要时再更新 02-家长需求.txt不是「发给家长的即时话术」的默认落点)
  • assessment -> 更新 learningBaselinetags
  • lesson-log -> 向 lessonLog.rows 追加一行(对象字段与 lessonLog.columns 一致),并在 03-课后跟进记录.txt 记一条可读摘要
  • weekly-followup -> 更新 weeklyFollowuptags,必要时更新 03-课后跟进记录.txt
  • monthly-report -> 更新 weeklyFollowuptags,并在 03-课后跟进记录.txt 记可读摘要
  • renewal-watch -> 更新 parentNeedstags;必要时将目录转入 RenewalWatch

写入规则:

  • 旧值只有在新信息明确覆盖时才替换
  • 数组字段去重
  • 标签字段保持简短、可搜索
  • 日期统一用 YYYY-MM-DD
  • 小步确认,小步写入
  • 网页填写和对话填写最终都必须写入同一批文件,不允许产生分叉结构
  • 如果是已有学生目录,则本次操作默认是更新已有文件,而不是重新初始化整套文件

对用户的反馈方式

结束时只需要简洁说明:

  • 学生目录用一句话给出本机绝对路径即可。
  • 结构化数据:不要贴出 student-record.json 全文;用「系统数据已更新」之类概括即可。
  • 0203:若本次有更新,直接写出本机绝对路径(纯文本),不要用 Markdown 超链接或 file://
  • 如果是网页填写,中间采集目录写出 ~/.openclaw/Workspace/student-growth-ops/form-submissions/ 展开后的本机绝对路径(纯文本)。
  • 若本次交付主要是家长沟通话术,说明话术已在对话中给出即可,不必强调写入了某个 txt 文件。