主题
T1 到校前简报(Demo 场景 PRD)
| 项 | 内容 |
|---|---|
| 文档定位 | 08_移动端AI场景设计.md §10 中反引号标记的 demo 模块的场景 PRD。本文是 T1;后续模块的写法见 公共规范.md §8 |
| 通用规范引用 | 前端形态、系统提示词边界、定时任务方式、数据与输出规范见 公共规范.md;本文只写 T1 场景本身 |
| 能力来源 | 07 课程系统(课表/教室)、天气服务 |
| 版本 | v0.6(所有主动服务进本周卡片;不做微信服务号推送) |
1. 场景定义
1.1 一句话
上课日早上 07:30,Agent 以当前教师身份执行一次定时任务,查当天课程和天气,生成一条「今天上什么、在哪上、多少人、天气如何」的简报。
1.2 用户与价值
| 项 | 内容 |
|---|---|
| 用户 | 当日有课的教师 |
| 价值 | 教师不用分别打开课表、问教室、查天气;到校前就知道今天的课 |
| 频次 | 每个上课日 1 次 |
1.3 触发方式
- 定时任务,没有用户 query。
- 时间:每天 07:30(可配置)。
- 任务内容:执行 T1 skill,带上当前教师 ID。
- 结果不弹系统通知;教师打开小程序、点悬浮球后在聊天区看到。 亦可在主页 “本周AI运行洞察”看到
- 当天无课:不推送(免打扰),任务直接结束。
1.4 边界
| 不做 | 原因 |
|---|---|
| 不推嘉宾/旁听 | 本场景不涉及;嘉宾接待是 T7/E1 |
| 不做智能整备 | 整备是独立流程(如 9 点会议前另一套任务),T1 只做信息简报 |
| 不推实时车位/车程 | 教师通常有固定车位,价值低 |
| 不推荐换教室 | 换教室影响大,且本场景没有整备失败信息 |
| 不展示学生名单 | 只给人数 |
| 不做快捷选项/按钮 | Demo 阶段单对话,用户要追问直接打字 |
| 不做完整导航页 | 只在正文教室名上挂超链接,URL 先用占位;等小程序导览模块上线再配 |
2. Demo 形态
通用形态见 公共规范.md(小程序悬浮球打开 DeerFlow 聊天区、单会话、Markdown + Mermaid)。
本场景只约定:
- 07:30 定时任务生成简报,不弹系统通知;教师打开小程序、点悬浮球后或者点击“本周AI运行洞察”,在聊天区看到完整内容。
- 简报写入该教师的常驻会话,不新建会话;教师之后追问时,Agent 能把这简报当作上下文。
- 同一份简报的摘要同时写入首页「本周 AI 运行洞察」卡片,卡片保留 7 天。
注:演示方式——在 DeerFlow「定时任务」里手动触发一次,或等到 07:30 自动执行,再打开小程序悬浮球查看。
3. Agent 输出设计
3.1 输出元素
| 元素 | 用途 |
|---|---|
| Markdown 文字 | 问候、课程结论、天气 |
| Markdown 表格 | 多门课时的课程清单 |
Mermaid pie | 单门课:已选 / 剩余 |
Mermaid xychart-beta | 多门课:各课程选课率 |
3.2 单门课
Agent(07:30 定时推送)
早上好,李老师。今天 09:00–11:30 在 A 楼 302 上《公司金融》,选课 42 人,教室容量 50 人。
项目 内容 课程 公司金融 时间 09:00–11:30 教室 A 楼 302 选课 / 容量 42 / 50 天气:多云,18–26℃。
注:导航 URL 为占位,等小程序导览模块上线后替换;表格里的教室保持纯文本。
3.3 多门课
多门课不逐门画饼图,改为「一张课程表 + 一张选课率柱状图」:
Agent(07:30 定时推送)
早上好,李老师。今天有 3 门课:
时间 课程 教室 选课 / 容量 09:00–11:30 公司金融 A 楼 302 42 / 50 13:30–15:00 投资学 A 楼 501 38 / 45 16:00–17:30 案例研讨 B 楼 201 20 / 30 天气:多云,18–26℃。
注:课程超过 3 门时同样用表格,柱状图最多画前 5 门,其余在表里列出。多门课统一为一条汇总消息:一张表 + 一张图,不逐门推送。
3.4 异常与降级
| 情况 | 输出 |
|---|---|
| 当天无课 | 不输出、不推送,任务结束 |
| 课程 MCP 失败 | 不推送,记录日志并通知运维/管理员;不把错误当简报推给教师 |
| 天气 MCP 失败 | 省略天气段,课程信息照常输出 |
| 容量缺失 | 只写选课人数,不画饼图、不算剩余 |
| 调停课/换教室 | 先写变更后信息,末尾注「以教务为准」 |
| 课程取消 | 该门课标「已取消」,不计入课程数 |
3.5 导航超链接
本期只做教室名超链接:正文首次出现的教室名带 Markdown 链接,点击跳转导航应用;URL 先用占位(如 https://example.com/nav?dest=A-3F-302),等小程序导览模块上线后替换为实际地址。完整导航页不在本期范围。
3.6 输出模板(开发参考)
本节给 Skill 组装输出用,业务评审可跳过。
单门课:
早上好,{教师姓}老师。今天 **{开始}–{结束}** 在 **[{楼} {房间号}]({导航URL})** 上《{课程名}》,选课 **{已选} 人**,教室容量 **{容量} 人**。
| 项目 | 内容 |
|---|---|
| 课程 | {课程名} |
| 时间 | {开始}–{结束} |
| 教室 | {楼} {房间号} |
| 选课 / 容量 | {已选} / {容量} |
(Mermaid 饼图:已选 / 剩余)
天气:{天气现象},{最低}–{最高}℃。4. MCP 设计
4.1 课程 MCP
Tool:query_teacher_courses
| 项 | 内容 |
|---|---|
| 作用 | 查某教师某天的课程 |
| 入参 | teacher_id(string)、date(YYYY-MM-DD) |
| 返回 | 课程数组,字段见下 |
返回字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| course_id | string | 课程 ID |
| course_name | string | 课程名称 |
| class_name | string | 班级 |
| date | string | 日期 |
| weekday | string | 星期 |
| start_time | string | HH:mm |
| end_time | string | HH:mm |
| periods | string | 节次,如「1-2 节」 |
| room_id | string | 教室 ID |
| room_name | string | 教室名称 |
| building | string | 楼,如「A 楼」 |
| floor | string | 层,如「3F」 |
| room_number | string | 房间号,如「302」 |
| enrolled_count | int | 选课人数 |
| capacity | int | 容量,可能为空 |
| remaining_count | int | 剩余 = 容量 − 选课;容量为空时为 null |
| enrollment_rate | number | 选课率(0–100);容量为空时为 null |
| status | enum | normal / changed / cancelled |
| change_note | string | 变更说明 |
注:教室信息随课程一起返回,不需要再单独查空间 MCP。剩余和选课率由课程 MCP 直接算好,避免模型做算术。
4.2 天气 MCP
Tool:get_weather
| 项 | 内容 |
|---|---|
| 作用 | 查校区当天天气 |
| 数据源 | 腾讯天气接口 GET https://wis.qq.com/weather/common |
| 服务端配置 | source=pc、weather_type=observe|forecast_24h、province/city/county(校区地址,提前配置,不暴露给模型;示例 江苏省/苏州市/吴中区,以实际校区为准) |
| 入参 | date(YYYY-MM-DD,默认今天) |
| 返回 | condition、temp_now、temp_min、temp_max、wind、humidity;接口没有的字段返回 null |
| 失败 | 超时/非 200/字段缺失 → 返回失败,由 skill 省略天气段 |
注:建议封装成 MCP,而不是让 skill 直接调 HTTP——Agent 侧统一走工具调用;省市区固定在服务端配置,模型不用也不该传地址;以后换天气服务只改 MCP。腾讯接口用 forecast_24h,直接返回当天温度区间,不需要从小时数据里推 min/max。中文参数需 URL 编码,由 MCP 处理。
5. Skill 设计
5.1 职责
Skill 把「查课 → 查天气 → 按模板输出」这套固定流程写死,保证每次 07:30 的输出格式一致。定时任务只负责触发它。
5.2 流程
5.3 Skill 提示词草稿
你是上海交通大学新院区 IBMS 的教师助手。当前是上课日早上 07:30,你要为当前教师生成一条到校前简报。
输入:
- 教师 ID:从任务指令中提取「当前教师 ID:」后面的值(demo 固定 T1001)
- 日期:今天
步骤:
1. 调用课程 MCP 的 query_teacher_courses(teacher_id=从任务指令提取的教师 ID, date=今天)。
2. 如果没有课程,直接结束,不输出任何内容。
3. 如果有课程,调用天气 MCP 的 get_weather(date=今天)。
4. 按输出模板组织回复。
输出要求:
- 只用 Markdown 和 Mermaid,不输出 JSON、不用 HTML。
- 不展示学生姓名,不展示其他教师课程。
- 单门课:一句话 + 信息表 + pie(已选/剩余)。
- 多门课:一张课程表 + 一张选课率 bar 图,不逐门画饼图;合并为一条消息,不逐门推送。
- 正文首次出现的教室名做成 Markdown 超链接,URL 用配置的占位地址;表格里的教室不加链接。
- 容量为空:只写选课人数,不画图、不算剩余。
- 调停课/换教室:先写变更后信息,末尾注「以教务为准」。
- 天气失败:省略天气段,不影响课程信息。
- 不推荐换教室,不输出快捷选项。
- Few-shot:配置时把本文 §3.2(单门课)和 §3.3(多门课)的示例原文,作为两条示例放入 skill。5.4 工具调用顺序与失败策略
| 步骤 | 调用 | 失败时 |
|---|---|---|
| 1 | 课程 MCP query_teacher_courses | 不推送,记录日志并通知运维 |
| 2 | 天气 MCP get_weather | 省略天气段,继续输出课程 |
| 3 | 按模板组装输出 | — |
注:课程是主数据,失败就不出简报;天气是附加信息,失败不影响主流程。
6. 定时任务配置
在 DeerFlow「定时任务 → 新建任务」里按实际表单配置:
| 表单字段 | 值 |
|---|---|
| 标题 | T1 教师到校前简报 |
| 任务指令 | 执行「T1 教师到校前简报」skill。当前教师 ID:T1001。 |
| 运行时间 | 重复 · 每天 · 07:30 · Etc/GMT-8(北京时间) |
| 每次运行的目标(可选) | 生成当天课程与天气简报:课程时间、教室、选课/容量、天气 |
| 保险上限:运行次数 | 留空(demo 不限制) |
| 保险上限:结束时间 | 留空 |
| 高级选项 | 不配置 |
- Demo 固定用演示教师账号
T1001。 - 任务指令里已经带了「执行哪个 skill + 教师 ID」,skill 内部再调课程/天气 MCP。
- 任务结果写入该教师的常驻会话(AI 联系人),不新建会话;首页洞察卡片取同一条结果的摘要。
- 如果 DeerFlow 的定时任务需要绑定智能体/工具集,绑定「教师助手」;当前表单未见该配置项,待确认。
- 定时任务只在这个页面配置,不允许通过对话创建(见
公共规范.md)。
6.1 用户 ID 从哪来
| 方式 | 做法 | 适用 | 状态 |
|---|---|---|---|
| A. 任务指令写死 | 任务指令写「当前教师 ID:T1001」,skill 从指令中提取 | Demo | 默认方案 |
| B. 平台注入变量 | 平台在任务/对话上下文提供当前用户变量,skill 直接引用 | 生产多用户 | 待确认 DeerFlow 是否支持 |
| C. MCP 读登录态 | MCP 从请求 token/session 解析用户 | 生产 | 成本高,demo 不用 |
注:Demo 用 A,不依赖平台能力;Skill 提示词里明确「从任务指令中提取『当前教师 ID:』后面的值」。如果 DeerFlow 本身能把登录用户注入给 Agent,再切到 B。
6.2 生产上的多用户调度(建议)
不建议在 DeerFlow 里手工建 N 个教师任务。建议做一层调度:
- 07:30 触发一个批处理任务;
- 批处理查「当天有课的教师」列表;
- 对每个教师调用一次 T1 skill(传各自的
teacher_id); - 把每个人的结果分别推送给本人。
注:关键区别是「一次性全跑」指的是一个批次遍历多个用户,不是一个对话里生成所有人的简报。如果 DeerFlow 的定时任务只支持单会话/单接收人,那么「一个任务发给多人」需要外部调度器逐个调用;如果平台后续支持多接收人任务,可以简化。demo 阶段只配一个账号,不涉及这个问题。
7. 权限与数据范围
- 定时任务以「当前教师」身份执行,课程 MCP 只按该
teacher_id查询。 - 不返回其他教师课程、学生名单、学生联系方式。
- Demo 用一个固定账号,不额外做权限界面。
8. 验收要点
| # | 验收项 | 标准 |
|---|---|---|
| 1 | 触发 | 每天 07:30 执行一次 |
| 2 | 单门课 | 问候 + 课程信息 + 饼图 + 天气,信息与课表一致 |
| 3 | 多门课 | 表格列出全部课程,柱状图为选课率,不逐门画饼图 |
| 4 | 无课 | 不推送,任务结束 |
| 5 | 容量缺失 | 不画饼图、不显示剩余,只显示选课人数 |
| 6 | 天气失败 | 课程信息正常输出,天气段省略 |
| 7 | 调停课 | 显示变更后信息并注明「以教务为准」 |
| 8 | 数据范围 | 只出现当前教师本人课程,无学生姓名 |
| 9 | 导航 | 正文教室名为可点击超链接;表格里的教室不加链接 |
9. 已确认与待确认
9.1 已确认
| # | 事项 | 结论 |
|---|---|---|
| 1 | 当天无课 | 免打扰,不推送 |
| 2 | 触发时间 | 默认每天 07:30,可配置 |
| 3 | 多门课 | 一条汇总(一张表 + 一张图),不逐门推送 |
| 4 | 天气 | 腾讯天气接口(observe|forecast_24h);省/市/区提前配置为校区地址;封装成 MCP |
| 5 | 导航 | 教室名做超链接,URL 先用占位,等小程序导览模块 |
| 6 | 结果展示 | 聊天区 + 首页「本周 AI 运行洞察」卡片(保留 7 天);不做微信服务号/企微推送 |
9.2 待确认
- DeerFlow 定时任务是否支持多接收人/批量触发?不支持就用外部调度器。
- 导航超链接的最终 URL(小程序导览模块)什么时候可用?
- 洞察卡片的摘要文案长度、是否需要配图,待 UI 定。
10. 关联文档
| 文档 | 关联内容 |
|---|---|
08_移动端AI场景设计.md §4、§10 | T1 场景来源与四角色时间线 |
07_课程系统-课表同步与实时引导.md §2.2、§2.3、§3.1 | 课表字段、教室编码映射、上课提醒 |
00_总览-方案与主线.md §1、§2、§4 | 需求来源、入口定位、Skill/MCP 分层 |
公共规范.md | 前端形态、常驻会话、智能体边界、定时任务、输出规范 |
注:上述文档与本文保持一致。如有差异,以本文为准,回写更新对应文档。