# ReAct 大模型演示项目
教学用 React 项目,演示 **ReAct(Reasoning + Acting)** 模式:大模型如何通过「思考 → 调用工具 → 观察结果」解决需要实时数据的问题。
- **模型接口**:阿里云百炼 DashScope(`qwen-plus`,OpenAI 兼容模式)
- **对比演示**:普通对话(无工具)vs ReAct(Function Calling)
- **真实工具**:时间查询、数学计算、天气(Open-Meteo)、汇率(Frankfurter)
## 学生学习文档(推荐阅读)
完整讲义、工具原链接、开发思路、运行流程见:
**[docs/README.md](./docs/README.md)**
| 文档 | 内容 |
|------|------|
| [01-ReAct概念讲解](./docs/01-ReAct概念讲解.md) | 什么是 ReAct |
| [06-工具选型与使用说明](./docs/06-工具选型与使用说明.md) | **工具是否真实、怎么选的、怎么用** |
| [02-工具清单与官方链接](./docs/02-工具清单与官方链接.md) | 工具 API 原链接与技术细节 |
| [03-开发思路与项目架构](./docs/03-开发思路与项目架构.md) | **为什么这样开发、代码结构** |
| [04-运行流程详解](./docs/04-运行流程详解.md) | **从启动到出结果的完整流程** |
| [05-课堂演示与自学指南](./docs/05-课堂演示与自学指南.md) | 讲课/练习/排错 |
## 快速开始
### 1. 安装依赖
```bash
cd 06_代码/Day_02/react-demo
npm install
```
### 2. 启动开发服务器
```bash
npm run dev
```
浏览器打开 http://localhost:5173
### 3. 配置 API Key
任选其一:
- 在页面右上角输入 **DashScope API Key**(`sk-xxx`)
- 或设置系统环境变量 `DASHSCOPE_API_KEY`
> 页面输入的 Key 仅保存在浏览器 `sessionStorage`,关闭标签页后清除。
API Key 获取:[阿里云百炼控制台](https://bailian.console.aliyun.com/)
## 自测脚本
```bash
npm run dev # 必须先启动(工具 API 走本地代理)
node scripts/test-tools-proxy.mjs # 测天气/汇率代理(推荐)
node scripts/test-tools.mjs # 直连外部 API
node scripts/test-react.mjs # 测完整 ReAct(需 DASHSCOPE_API_KEY)
```
> **注意**:天气、汇率工具在浏览器中通过 `/api/frankfurter`、`/api/open-meteo` 等**本地代理**访问,直接打开 `dist/index.html` 或绕过 Vite 会导致 `Failed to fetch`。
## 项目结构
```
src/
├── lib/
│ ├── dashscope.ts # DashScope API 封装
│ ├── react-loop.ts # ReAct 推理循环
│ ├── thought.ts # 思考步骤补全
│ ├── rounds.ts # 轮次分组
│ └── tools.ts # 工具定义与真实执行逻辑
├── components/ # UI 组件
├── data/questions.ts # 预设示例问题
└── App.tsx # 主界面
```
## 构建部署
```bash
npm run build
npm run preview
```
生产部署时需配置反向代理,将 `/api/dashscope` 转发到 `https://dashscope.aliyuncs.com`。