主题
Demo 公共规范
| 项 | 内容 |
|---|---|
| 适用范围 | 本目录下的场景 PRD(T1-到校前简报.md 及后续) |
| 目的 | 把前端形态、智能体边界、定时任务方式、数据与输出规范这些「每个场景都一样」的内容抽出来;场景 PRD 只写场景本身 |
| 选型假设 | DeerFlow(高可能) |
1. 总体形态
Demo 不重做 AI 能力,只做小程序壳:
- 小程序提供首页、日程、资讯、洞察、我的五个 tab;
- 首页右下角「AI」悬浮球是唯一的对话入口,点击打开嵌入的 DeerFlow 聊天区;
- 首页「本周 AI 运行洞察」卡片区展示最近 7 天的 L4 主动服务摘要;
- 聊天区、智能体、定时任务、能力中心仍用 DeerFlow 自带能力。
每个场景 = 一个智能体 + 若干 Skill + 若干 MCP + 一个定时任务(如需要)。
2. 前端形态
2.1 嵌入方式
- 小程序底部 tab:首页 / 日程 / 资讯 / 洞察 / 我的。
- 首页右下角「AI」悬浮球:唯一对话入口,不设第二个聊天入口。
- 点击悬浮球 → 打开小程序内的聊天页 → 用 web-view 加载 DeerFlow 聊天页。
- 首页「本周 AI 运行洞察」卡片区展示最近 7 天的 L4 主动服务摘要,见 §2.7。
- 只保留聊天区;隐藏左侧导航(新对话、对话、智能体、定时任务、能力中心、渠道、项目、设置和更多)、顶部工作区面包屑、网关状态、退出登录、会话列表。
- 顶部保留当前智能体名称,让用户知道现在是教师助手还是学生助手。
- 聊天区不新增业务卡片、不新增接口传数据;Agent 输出即聊天区内容;首页洞察卡片属于小程序壳,见 §2.7。
- 隐藏这些元素需要改 DeerFlow 前端(组件开关或 CSS);如果是跨域 iframe,无法注入样式,必须同源部署或改源码。
2.2 单会话(AI 联系人)
- 一个用户一条常驻会话:登录后始终进入同一条会话,用户看到的就是一条连续的聊天记录,不感知 session。
- 不做会话管理:不展示会话列表、不提供「新对话」入口;退出再进入,看到的还是这条会话的历史。
- 定时任务不新建会话:触发消息直接写入该用户的常驻会话,Agent 在同一条会话里回复;触发消息和回复都成为后续对话的上下文,用户追问时 Agent 能看到。
- 用户正在聊天时触发:消息追加到当前时间轴,不打断、不切换会话;用户下一条输入仍属于同一条会话。
- 多条任务同时触发:排队执行,避免消息交错。
- 触发消息的展示:建议显示一条轻量系统消息(如「系统:生成今日简报」);也可以隐藏,只保留 AI 回复。
- 上下文长度:单会话会越来越长,demo 不处理;生产需要摘要/裁剪。
- 技术前提:调度器能把触发消息写入指定会话(DeerFlow 原生支持,或通过聊天 API 实现)。
2.3 移动端适配
- 宽度自适应;输入框贴底;软键盘不遮挡输入区。
- Mermaid 容器宽度 100%,图表不横向溢出。
2.4 渲染能力
| 元素 | 要求 |
|---|---|
| Markdown | 标题、列表、表格、加粗、代码块 |
| Mermaid | pie、xychart-beta、flowchart、sequenceDiagram |
- Mermaid 图表保留缩放/全屏;下载/复制在移动端隐藏。
xychart-beta需要 Mermaid ≥ 10.3;如果显示成代码块,说明版本不够或渲染未开,demo 前必须解决。
2.5 不做什么
- 聊天区内不做业务卡片、按钮组件、独立页面;首页「本周 AI 运行洞察」卡片是小程序壳的一部分,不属于聊天区渲染。
- 需要用户确认时,用文字或编号选项,不依赖前端组件。
2.6 页面元素清单
| 区域 | 元素 | 移动端 |
|---|---|---|
| 左侧栏 | 新对话、对话、智能体、定时任务、能力中心、渠道、项目、设置和更多 | 隐藏 |
| 顶部 | 网关状态、退出登录 | 隐藏 |
| 顶部 | 当前智能体名称 | 保留 |
| 首页 | 欢迎语、六个快捷入口(小惊喜/写作/研究/收集/学习/创建) | 隐藏 |
| 消息区 | Markdown、Mermaid、缩放/全屏 | 保留 |
| 消息区 | 图表下载/复制 | 隐藏 |
| 底部 | “内容由 AI 生成”提示 | 保留小字 |
输入框:
| 元素 | 移动端 | 说明 |
|---|---|---|
| @ 技能/文件引用 | 隐藏 | 由 Agent 自动选择 Skill,不需要用户手动引用 |
| 附件上传 | 保留,仅图片 | T8/S10 拍照报修用;限制 image/*,不支持其他附件 |
| 语音输入(ASR) | 保留 | 需在目标 WebView 实测语音识别是否可用 |
| 优化输入 | 隐藏 | 用处不大 |
| 文本输入 + 发送 | 保留 | 核心 |
2.7 首页「本周 AI 运行洞察」
- 位置:首页「待办事项」下方,卡片列表,右上角「更多」。
- 内容:所有 L4 主动服务的摘要,一卡一条,如「T1 到校前简报」「空间利用率偏低」「能耗异常」「外包能效波动」。
- 展示范围:最近 7 天,超过 7 天的卡片自动移出。
- 与聊天区的关系:每条主动服务同时进两个地方——聊天区(完整内容)+ 洞察卡片(摘要);卡片是入口,详细内容和追问在聊天区完成。
- 按角色/权限过滤:用户只看到自己有权看到的卡片。
- 点击:进入聊天区,看到该条主动服务的完整内容;「更多」进入完整列表。
- Demo 阶段卡片可用预置示例数据;后续再接智能体输出。

3. 智能体配置与系统提示词边界
3.1 智能体划分
按角色建智能体,每个只挂本角色需要的 Skill 和 MCP:
| 智能体 | 绑定能力 |
|---|---|
| 教师助手 | 教师相关 Skill(T1–T9)+ 课程/设备/天气/地图 MCP |
| 学生助手 | 学生相关 Skill(S1–S11)+ 课程/空间/工单/充电 MCP |
| 运维助手 | 运维相关 Skill(O1–O9)+ 巡检/告警/工单/能耗 MCP |
| 管理者助手 | 管理相关 Skill(M1–M11)+ 指标/能耗/人流/巡检统计 MCP |
| 访客助手(预留) | 访客/企业嘉宾相关 Skill(E1,待设计)+ 访客/门禁/导航 MCP |
| 校友助手(预留) | 校友/返校相关 Skill(E2,待设计)+ 校友活动/预约/导航 MCP |
注:访客/企业嘉宾、校友/返校生两类外部角色对应 08 §8,尚未详细设计;先预留智能体位,Skill/MCP 待 E1/E2 的 PRD 确定,不进入本期 demo 范围。
3.2 能力边界(写进系统提示词)
- 对话入口只做已配置 Skill / MCP 范围内的问答与查询。
- 禁止通过对话创建、修改、删除、暂停定时任务;定时任务只在「定时任务」页面由实施人员配置。
- 禁止调用与场景无关的能力:联网搜索、网页抓取、生成幻灯片/图片/视频、执行代码、写文件。
- 工具无返回时说「暂无」,不按 0 或「正常」处理;不编造数据。
- 越权请求(他人数据、跨范围)直接拒绝并说明原因。
3.3 系统提示词追加段(草稿)
你是上海交通大学新院区 IBMS 的{角色}助手。你只能在已配置的技能和工具范围内回答。
禁止:
- 通过对话创建、修改、删除、暂停任何定时任务;
- 联网搜索、抓取网页、生成幻灯片/图片/视频、执行代码、写文件;
- 回答配置范围之外的问题;越权请求直接拒绝并说明原因。
无数据时回答「暂无」,不要编造,不要把空值当作 0 或「正常」。3.4 实现方式与风险
- DeerFlow 默认系统提示词可能允许创建定时任务、联网搜索等;需要确认能否覆盖或追加。
- 如果系统提示词不可改,用工具白名单兜底:只挂载本场景 MCP,不挂通用工具(任务管理、搜索、代码执行等)。
- 这条是通用配置,场景 PRD 不重复。
3.5 角色 → 智能体加载
角色互斥时,一个用户对应一个智能体;同一个对话里不需要同时跑两个智能体。
推荐:一角色一智能体,登录后自动加载。
| 角色 | 智能体 |
|---|---|
| 教师 | 教师助手 |
| MBA 学生 | 学生助手 |
| 运维 | 运维助手 |
| 管理者 | 管理者助手 |
| 访客 / 企业嘉宾 | 访客助手(预留) |
| 校友 / 返校生 | 校友助手(预留) |
- 登录后从 IAM 取角色,移动端壳直接打开对应智能体的聊天页。
- 同一角色的不同用户共用同一个智能体;数据范围靠用户 ID + MCP 权限控制,不靠智能体区分。
- 需要确认:DeerFlow 智能体是否支持 URL/参数直接打开、是否支持默认智能体、登录角色能否传给 DeerFlow。
- 不支持自动加载时,demo 兜底为「登录后手工选一次智能体」。
- 若一个用户有多个角色,入口做角色切换,不同时加载两个智能体。
4. 定时任务规范
- 统一在 DeerFlow「定时任务 → 新建任务」页面配置,不由对话创建。
- 表单字段对应:
| 表单字段 | 填法 |
|---|---|
| 标题 | 场景编号 + 名称,如「T1 教师到校前简报」 |
| 任务指令 | 执行「<场景>」skill。当前用户 ID:<id>。 |
| 运行时间 | 重复 / 每天 / 具体时间 / Etc/GMT-8(北京时间) |
| 每次运行的目标(可选) | 一句话描述本次要产出的结果 |
| 保险上限:运行次数 | Demo 一般留空 |
| 保险上限:结束时间 | Demo 一般留空 |
| 高级选项 | 默认不配置 |
- 任务指令已经包含「执行哪个 Skill + 用户 ID」,Skill 内部再调 MCP。
- 如果定时任务能绑定智能体,绑定对应角色的智能体(如 T1 → 教师助手);不能绑定就用默认智能体,并在任务指令里写清角色。
- Demo 固定演示账号;生产上按「当天有课/有任务的用户」逐个触发。
- 每个场景最多 1 个定时任务,每天最多 1 条,避免打扰。
- Demo 不做微信服务号/订阅消息/企微推送:微信服务号推送限制多、配置麻烦,本期不做。定时任务结果写入该用户的常驻会话 + 「本周 AI 运行洞察」卡片,用户打开小程序后可见;熄屏收不到推送的问题本期不解决。
- 所有 L4 主动服务都同时进入常驻会话和「本周 AI 运行洞察」卡片:常驻会话放完整内容,卡片放摘要;卡片只展示最近 7 天(见 §2.7)。
5. 数据与演示规范
- 只用真实数据或明确标注的模拟数据,不编造。
- 空值 ≠ 0;无数据写「暂无」。
- 手机号、车牌、身份证等个人信息脱敏。
- 演示账号固定,不展示他人数据。
- 演示前检查:MCP 可用、外部服务(天气/地图)可用、课表等数据已同步。
6. 通用输出规范
- 结论先行:第一段给结论,细节在后。
- 元素:Markdown 文字 + 表格 + Mermaid;不输出 JSON、不用 HTML。
- 图表选择:
| 目的 | 图表 |
|---|---|
| 占比 | pie |
| 趋势 / 对比 | xychart-beta(line / bar) |
| 流程 | flowchart |
| 交互时序 | sequenceDiagram |
- 一次回复最多 1–2 张图,避免刷屏。
- 口径有变化要说明,如「以教务为准」。
6.1 图表配色
所有场景的数据图(折线、柱状、饼图)用同一套色板,不各画一套。流程图、时序图、状态图不涉及配色,保持默认。
| 用途 | 颜色 |
|---|---|
| 主色(单序列折线 / 柱状、饼图首项) | #5B8FF9 |
| 次要 / 未占用(饼图的「剩余」「空闲」) | #C9CDD4 |
| 多序列扩展顺序 | #5B8FF9 → #5AD8A6 → #F6BD16 → #E8684A |
写法是在 mermaid 代码块开头加 frontmatter,只设 themeVariables、不设 theme——图表底色跟随读者编辑器的明暗主题,不会出现深色文档里嵌一块白底。
折线图(xychart-beta + line):
markdown
```mermaid
---
config:
themeVariables:
xyChart:
plotColorPalette: '#5B8FF9'
---
xychart-beta
title "302 近 14 天日用电(kWh)"
x-axis ["10-19","10-21","10-23"]
y-axis "kWh" 0 --> 80
line [42,68,39]
```柱状图(xychart-beta + bar)。多根柱子代表不同对象时仍用同一主色,靠 x 轴标签区分:
markdown
```mermaid
---
config:
themeVariables:
xyChart:
plotColorPalette: '#5B8FF9'
---
xychart-beta
title "各课程选课率(%)"
x-axis ["公司金融","投资学","案例研讨"]
y-axis "选课率 %" 0 --> 100
bar [84,84,67]
```同一张图里有两条以上 line / bar(如"本周 vs 上周")时,按色板顺序给多个颜色:
markdown
plotColorPalette: '#5B8FF9, #5AD8A6'饼图(pie)。两类(已用 / 剩余)用主色 + 浅灰:
markdown
```mermaid
---
config:
themeVariables:
pie1: '#5B8FF9'
pie2: '#C9CDD4'
---
pie title "302 选课情况"
"已选 42 人" : 42
"剩余 8 人" : 8
```分项占比(≥3 项)按色板顺序取色:
markdown
```mermaid
---
config:
themeVariables:
pie1: '#5B8FF9'
pie2: '#5AD8A6'
pie3: '#F6BD16'
pie4: '#E8684A'
---
pie title "302 近 30 天分项用电"
"空调" : 58
"照明" : 22
"插座" : 14
"动力" : 6
```注:plotColorPalette 需要 Mermaid ≥ 10.9(Typora 新版、GitHub、mermaid@11 均支持);版本过低时不生效但也不会报错。多图同页时每张图各自写 frontmatter。
7. 与场景 PRD 的分工
| 文档 | 写什么 |
|---|---|
| 本文 | 所有场景共用的前端形态、智能体边界、定时任务方式、数据与输出规范 |
场景 PRD(如 T1-到校前简报.md) | 场景定义、输出模板、MCP、Skill、定时任务参数、权限、验收、待确认 |
注:场景 PRD 不重复本文内容,只引用。
8. 场景 PRD 模板(后续模块用)
新场景先读 08_移动端AI场景设计.md §10 的模块定义,再按下面骨架写:
- 场景定义(一句话、用户、触发、边界)
- Demo 形态(只写本场景特有,通用部分引用本文)
- Agent 输出设计(模板 + 示例 + 异常降级)
- MCP 设计(工具、入参、返回字段)
- Skill 设计(流程、提示词、few-shot、失败策略)
- 定时任务配置(只写本场景的表单值)
- 权限与数据范围
- 验收要点
- 已确认与待确认
- 关联文档(只列引用,不写内容)
写作原则:
- 场景 PRD 是最终设计:和 00/07/08 不一致时,以场景 PRD 为准,回写更新前面文档。
- 不写前端数据结构、接口字段、可行性分级、报价/分期。
- 不重复本文的前端形态、系统提示词边界、定时任务方式、输出规范。
- 只写本场景的:输出长什么样、要哪些 MCP、Skill 怎么编排、定时任务参数、权限、验收。
- 关联文档只写「文档 + 章节 + 一句话」,不复制内容。
8.1 对话示例的排版约定
示例统一写成「用户 / Agent」两段式对话,读者扫一眼就知道哪句是人说的、哪句是 Agent 回的。
markdown
**用户**
> 我的车充得怎么样了?
**Agent**
> 你的车(苏A·1\*\*89)正在 B2 东区 03 号桩充电,当前电量 **68%**。
>
> | 项目 | 内容 |
> |---|---|
> | 车牌 | 苏A·1\*\*89 |
>
> 1. 充满后提醒我
> 2. 查 B2 其他空位
**注**:文档自己的口径说明写在这里,不进引用块。| 项 | 约定 |
|---|---|
| 用户消息 | **用户** 独立一行 → 空行 → 原话放在引用块里;原话直接写正文,不再加「」包裹 |
| Agent 消息 | **Agent** 独立一行 → 空行 → 整条回复(文字 + 表格 + 编号选项 + Mermaid)放在同一个引用块里,块内空行也要带 > |
| 主动推送 | 没有用户提问时只出一个引用块,标签写清触发方式,如 **Agent(07:30 定时推送)**、**Agent(事件触发)** |
| Mermaid | 放进引用块:> ```mermaid … > ``` 。Typora / 飞书可正常渲染;GitHub 不支持引用块内的 Mermaid,以 Typora 预览为准 |
| 模板 | 代码块模板与「结构固定:…」这类组装说明,统一放在第 3 章末尾的 ### 3.x 输出模板(开发参考) 一节,开头写明「本节给 Skill 组装输出用,业务评审可跳过」;绝不能插在 **用户** 和 **Agent** 之间,也不要放在示例之前挡住阅读路径 |
| 文档说明 | 不用引用块,写成 **注**:…。引用块只表示一条对话消息,口径、边界、补充说明一律用「注」 |
| 文首元信息 | 统一用两列表格 ` |
这样定的原因:原先用户问题和 Agent 回复都用引用块,和文档里的注释性引用块混在一起,扫读时要先判断上下文;分开之后「引用块 = 有人说过的话」是一条稳定的视觉规则。