# 05 · 课堂演示与自学指南
本文面向**教师讲课**和**学生自学**,提供推荐流程、演示话术与练习任务。
---
## 一、推荐课堂流程(约 30–40 分钟)
| 环节 | 时间 | 做什么 | 对应文档 |
|------|------|--------|----------|
| 导入 | 5 min | 提问:「AI 怎么知道今天深圳天气?」 | [01-ReAct概念讲解.md](./01-ReAct概念讲解.md) |
| 概念 | 8 min | 讲解 T→A→O→A,对照左侧概念面板 | 同上 |
| 工具 | 5 min | 介绍四个工具及官方链接 | [02-工具清单与官方链接.md](./02-工具清单与官方链接.md) |
| 演示 | 10 min | 计算题 + 天气题,开启对比模式 | 下文「演示脚本」 |
| 代码导览 | 8 min | 看 `react-loop.ts`、`tools.ts` | [03-开发思路与项目架构.md](./03-开发思路与项目架构.md) |
| 小结 | 4 min | 随堂检查 + 布置练习 | 下文「课后练习」 |
---
## 二、演示脚本(教师可参考)
### 演示 1:大数计算(对比最明显)
1. 启动项目,填入 API Key
2. 选择:「请计算 12345 × 6789 等于多少?」
3. 开启「对比模式」,点击「运行演示」
4. **指左侧**:无 Thought/Action/Observation,直接给答案,可能算错
5. **指右侧**:
- 第 1 轮 Thought:为什么要调 calculate
- Action:调用参数
- Observation:`83810205`
- Answer:引用真实结果
6. **强调**:ReAct 不是让模型更聪明,而是让它**敢用工具、会用工具、用结果说话**
### 演示 2:实时天气(幻觉对比)
1. 选择:「深圳现在的天气怎么样?」
2. 观察左侧可能「编造」温度/天气
3. 观察右侧调用 `get_weather`,数据来自 Open-Meteo
4. 打开 [02-工具清单与官方链接.md](./02-工具清单与官方链接.md) 给学生看原 API 链接
### 演示 3:纯知识题(不需要工具)
1. 选择:「用一句话解释什么是 ReAct?」
2. 右侧也应出现 Thought,但**无 Action**
3. 说明:不是什么问题都要调工具,模型会先判断
---
## 三、API Key 配置方式
### 方式 A:页面输入(适合课堂)
在右上角输入 `sk-xxx`,保存在浏览器 `sessionStorage`。
### 方式 B:环境变量(适合开发/自测)
**Windows PowerShell:**
```powershell
$env:DASHSCOPE_API_KEY = "sk-你的key"
npm run dev
```
**Windows 永久设置:** 系统属性 → 环境变量 → 新建 `DASHSCOPE_API_KEY`
**验证:**
```powershell
echo $env:DASHSCOPE_API_KEY.Length # 应为 35 左右
node scripts/test-react.mjs
```
### 获取 Key
登录 [百炼控制台](https://bailian.console.aliyun.com/) 创建 API Key。
---
## 四、学生自学路径
```mermaid
flowchart LR
A[读 01 概念] --> B[读 02 工具链接]
B --> C[跑 npm run dev]
C --> D[自己点三个示例题]
D --> E[读 04 运行流程]
E --> F[打开 src 对照代码]
F --> G[做课后练习]
```
### 建议学习时间
| 阶段 | 时间 |
|------|------|
| 阅读文档 + 跑通 demo | 1 小时 |
| 对照源码理解 | 1–2 小时 |
| 完成练习 1–3 | 1 小时 |
---
## 五、课后练习
### 练习 1:观察记录(基础)
任选两道「需工具」示例题,填写表格:
| 项目 | 题 1 | 题 2 |
|------|------|------|
| 问题 | | |
| 调用了什么工具 | | |
| Observation 关键数据 | | |
| 普通模式是否可靠 | | |
### 练习 2:链接溯源(基础)
在 [02-工具清单与官方链接.md](./02-工具清单与官方链接.md) 中找到:
1. DashScope Function Calling 文档 URL
2. Open-Meteo 地理编码 API 的完整示例 URL
3. Frankfurter 汇率 API 文档 URL
### 练习 3:读代码(进阶)
阅读 `src/lib/react-loop.ts`,回答:
1. 循环最多几轮?在哪里定义?
2. 工具结果如何写回 `messages`?
3. `onStep` 在什么时候被调用?
### 练习 4:小改动(挑战)
1. 在 `questions.ts` 增加一题:「东京现在天气如何?」
2. 在 `TOOL_LABELS` 中为工具增加更中文的显示名
3. (可选)增加第五个工具,如「BMI 计算器」
---
## 六、评分参考(自查清单)
| 能力 | 达标标准 |
|------|----------|
| 概念 | 能口述 ReAct 四步及与普通对话的区别 |
| 工具 | 能说出四个工具用途及数据来源 |
| 流程 | 能画出一次完整 tool_calls 循环 |
| 实践 | 能本地跑通 demo 并完成一次对比演示 |
| 拓展 | 能指出模型何时不应调用工具 |
---
## 七、网络与环境注意事项
1. **关闭 VPN**:访问 `dashscope.aliyuncs.com` 时 VPN 可能导致 TLS 失败
2. **Node 版本**:建议 18 或以上
3. **端口占用**:5173 被占用时可改 `vite.config.ts` 的 `server.port`
4. **防火墙**:确保可访问 `dashscope.aliyuncs.com`、`open-meteo.com`、`frankfurter.app`
---
## 八、教师常见问题
**Q:学生问「Thought 是模型想的还是程序写的?」**
A:优先展示模型返回的推理内容;若模型未返回,程序会根据问题和工具类型**自动生成**教学用思考文案,保证链条完整可见。见 `thought.ts`。
**Q:为什么不用 Coze / Dify?**
A:本课重点是理解 ReAct 原理和 Function Calling 机制,手写循环更透明。
**Q:工具能不能换成自己的业务 API?**
A:可以。在 `tools.ts` 增加 `TOOL_DEFINITIONS` 条目和 `executeTool` 分支即可。
---
返回目录:[README.md](./README.md)