# Suanming Web Gateway 统一的算命网页入口:后端调用 suanming API 获取原始命理数据,再调用 DeepSeek LLM 输出自然语言解读,前端只需请求 `/api/fortune`。 ## 功能概览 - `POST /api/fortune`:校验参数 → 调用 `suanming` → 调用 `DeepSeek` → 返回 `ai_text + raw_suanming`。 - Express 静态站点:单页表单,包含示例填充、请求状态、AI 文本展示、原始 JSON 展开、免责声明等。 - Token 自动管理:启动时自动登录获取 Token,过期后自动刷新,无需人工干预。 - `.env` 控制 suanming、DeepSeek、端口与超时。 ## 文件结构 ``` Suanming-Web/ ├── public/ # 静态前端资源(index.html / styles.css / app.js) ├── server.js # Express 网关及 API 实现 ├── package.json # 项目依赖 └── .env # 环境变量配置 ``` ## 快速开始 1. **安装依赖** ```bash cd Suanming-Web npm install ``` 2. **配置环境变量** ```bash # 创建 .env 文件,填入以下配置 ``` ```env # HTTP 监听端口 PORT=4173 # suanming API 配置 SUANMING_API_BASE=http://localhost:3001/api SUANMING_EMAIL=your-email@example.com SUANMING_PASSWORD=your-password SUANMING_TIMEOUT_MS=12000 # DeepSeek API 配置 DEEPSEEK_API_KEY=your-deepseek-api-key DEEPSEEK_API_URL=https://api.deepseek.com DEEPSEEK_MODEL=deepseek-chat DEEPSEEK_TIMEOUT_MS=20000 ``` 3. **启动服务** ```bash npm run dev # 浏览器访问 http://localhost:4173 ``` 4. **PM2 生产部署** ```bash pm2 start server.js --name suanming-web pm2 save ``` ## API 说明 ``` POST /api/fortune Content-Type: application/json ``` 请求示例: ```json { "type": "bazi", "name": "张三", "birth_date": "1990-01-01", "birth_time": "12:00", "gender": "male", "is_lunar": false, "question": "想了解近期事业与财运", "extra_options": { "focus": "career" } } ``` 返回示例: ```json { "success": true, "data": { "ai_text": "DeepSeek 的自然语言解读", "raw_suanming": { "...": "原始 suanming JSON" }, "meta": { "type": "bazi", "model": "deepseek-chat", "elapsed_ms": 2143, "warnings": [] } } } ``` ## Token 自动管理 - **启动预热**:服务启动时自动登录获取 Token - **自动刷新**:请求遇到 401 错误时自动刷新 Token 并重试 - **并发安全**:多个并发请求共用同一个登录 Promise,避免重复登录 ## 自定义 - DeepSeek 调用通过 `openai` SDK 完成,`.env` 中的 `DEEPSEEK_API_URL` 只需设置到根域名(默认 `https://api.deepseek.com`)。 - 若暂未配置 DeepSeek Key,会返回提示并保留 `raw_suanming`,方便调试。 - 如需拓展 `name`、`fortune` 等类型,可在 `server.js` 的 `buildSuanmingRequest` 中补充对应 endpoint/payload。 - 前端使用原生 JS,便于在任何环境下部署,若后续需要组件化框架,可直接复用当前 API。 ## 免责声明 页面底部及 DeepSeek Prompt 均包含"仅供娱乐参考"的提示,请在生产部署时继续保留。