# 课堂演示脚本(10–15 分钟) ## 演示前准备(1 分钟) 运行 `pnpm dev`,打开 `http://127.0.0.1:5173`。准备一个可用模型配置;若演示图片,确认 `supportsImages` 已开启并准备一张 JPEG、PNG 或 WebP。 先指出三栏:左侧是被发现的 Skills,中间是 assistant-ui 对话与工具卡,右侧是服务器事件时间线。强调页面不是 Agent 本体,而是 Harness 状态的投影。 ## 1. 未配置模型(1 分钟) 展示 Composer 的明确禁用提示。解释系统不会偷偷选择任意可用模型,也不会把图片悄悄丢弃。打开 Settings,填写 Provider、API、Model、可选 Base URL 和 API Key。 指出 API Key 字段刷新后不会恢复,GET 响应也只能看到末四位提示。 ## 2. Skill 渐进披露(2 分钟) 点击“填入演示任务”,不要立刻发送: > 请分析 demo-account 最近 7 天广告数据,并生成一份简短报告草稿。 先看左侧只有 `ads-analysis` 的名称、描述和 diagnostics,没有把正文放进浏览器。发送后观察 `read`、`skill.requested` 和 `skill.loaded`。说明两个 Skill 事件由 Harness 根据规范路径和 read 成功状态推导,不是模型自报。 ## 3. 只读工具与流式回复(2–3 分钟) 观察中央文字逐段增加,右侧 sequence 单调增长。`mock_ads_metrics` 工具卡展示 account、days、spend、revenue 和 ROAS。 明确数据来自仓库 fixture,不连接真实广告平台。Skill 约束模型先取工具结果再做数字结论,这体现“指令披露 + 结构化工具”的组合。 ## 4. 服务器审批(2–3 分钟) 当 `save_report_draft` 请求出现时,Dialog 显示风险、固定目标、approval ID 和剩余时间。先讲清浏览器按钮不是权限边界,Broker 的状态才是权威。 第一轮点击 Deny:工具显示未执行,Session 目录不产生 `report.md`。 第二轮重发任务并点击 Approve:只有这次会在当前 Session 临时目录写入固定 `report.md`。重复点击被 UI 锁定,冲突决策被 Server 拒绝。也可等待超时展示 expired 不写文件。 ## 5. 图片多模态(2 分钟) 附加一张广告截图,输入: > 请结合这张素材解释可能的创意问题,并用 demo-account 最近 7 天数据验证建议。不要从图片猜测账户指标。 展示上传、缩略图、预览与移除。说明浏览器/SSE 只保留 attachmentId,Server 规范化文件后才转换为 Pi `ImageContent[]`。若将模型设置为 text-only,系统会明确阻止发送图片。 ## 6. 重连与清理(1–2 分钟) 说明 SSE 使用 sequence 和 Last-Event-ID 重放,重复事件会去重,缺口会触发全量重建。点击重置或删除 Session,展示 run、审批、附件、报告与内存凭证一并清理。 最后强调:当前的 SafeWorkspace、工具策略和审批是教学用应用边界;Pi 没有内置 Sandbox,生产环境仍要用容器或 microVM 隔离。