Files
ai-learning-platform/docs/progress.md
T
yuzhiran-dev 417fb266d4 feat: AI沙箱流式对话+引导学习+静态服务优化
- 后端: AI沙箱流式对话(SSE), reasoning_content 回退支持
- 前端: 沙箱页流式渲染, 引导学习面板, 默认场景/Starter兜底
- 优化: 前端改用静态文件服务器(node server.js)替代next dev, CSS永不丢失
- 修复: 通用模型默认改为可用模型, predev不再删.next缓存
2026-05-27 18:26:30 +08:00

110 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 项目进度追踪
## 当前阶段:P3 — 体验增强
### Phase 1-3 — 全部完成 ✅
### P0 — 全局优化(全部完成 ✅)
| 子项 | 说明 | 状态 |
|------|------|------|
| **P0a** | i18n 基础设施 + 翻译文件 + LanguageProvider + useT hook | ✅ |
| **P0b** | UI 统一 — Design Token + 共享组件库 | ✅ |
| **P0c** | 逐页翻译 + 语言切换 — 沙盒页面 useT 化 | ✅ |
| **P0d** | 会员定价页重构(用量可视化) | ✅ |
| **P0e** | 模型选择器升级(卡片式 + 能力标签) | ✅ |
| **P0f** | 会话分享链接 — HMAC 签名 + 分享查看页 | ✅ |
### P1 — 学习技能包(全部完成 ✅)
| 子项 | 说明 | 状态 |
|------|------|------|
| **后端** | SkillsModule + 8 技能定义 + 过滤/详情 API | ✅ |
| **前端** | /skills 市场 + /skills/[id] 详情 + header 入口 | ✅ |
| **沙盒集成** | 替代硬编码 SCENES,从 API 动态加载,?skill=xxx 支持 | ✅ |
### P2 — CSS 统一(全部完成 ✅)
| 子项 | 说明 | 状态 |
|------|------|------|
| **Mobile variables.css** | Design Token 变量定义(Web/Mobile 统一) | ✅ |
| **Mobile 全站 18 页** | 批量替换 hardcoded color → CSS vars | ✅ |
| **PC 响应式** | header/compare/sandbox/member/workshop 移动端修复 | ✅ |
### P3 — 体验增强(全部完成 ✅)
| 优先级 | 项目 | 说明 | 状态 |
|--------|------|------|------|
| **P4a** | 多模态 — 图片上传 + 沙盒 Vision | ✅ 完成 |
| **P4b** | 代码语法高亮 | highlight.js + CodeBlock 组件 | ✅ |
| **P3c** | 会话重命名 | PATCH endpoint + 双击编辑 | ✅ |
| — | SDK / 共享 UI 包 | 远期规划 | 📋 |
### 参考来源
- opencode 源码克隆到 `/tmp/opencode-source/`21 packages, 147MB
### P4 — 支付闭环(进行中 🔄)
| 子项 | 说明 | 状态 |
|------|------|------|
| **P4a** | Mock 支付自动完成 — `PaymentService.completeMockPayment()` + `OrdersService` 检测 mock 结果后自动调用 | ✅ |
| **P4b** | 会员页面 mock 提示优化 — 显示"订阅成功"而非"请扫码支付" | ✅ |
| **P4c** | 真实微信支付证书部署 — 商户证书/密钥已安装到 `backend/cert/key/`,参数与 `.env` 一致 | ✅ |
| **P4d** | 下单切 NATIVE 扫码支付 — 默认 `tradeType: 'NATIVE'`,前端展示二维码 Modal + 轮询支付状态 | ✅ |
| **P4e** | JSAPI 支付集成 — 检测微信环境 + openid,在 Mini Program web-view 内自动调起 `WeixinJSBridge`;其他场景 NATIVE 兜底 | ✅ |
| — | 订阅到期提醒 / 自动续费 | 📋 远期 |
| — | 获取公众号 appid 后补充 Web OAuth 流程 | 📋 待定 |
### P5 — 运营助手(已完成 ✅)
| 子项 | 说明 | 状态 |
|------|------|------|
| **P5a** | 新增 `POST /admin/ai-assistant/chat` 端点 — 管理员专用 AI 聊天,使用 AdminGuard | ✅ |
| **P5b** | 新增 `AdminAiAssistantService` — 19 个可执行工具定义(查看数据/用户管理/评论审核/状态切换等) | ✅ |
| **P5c** | 新增 `POST /admin/ai-assistant/action` 端点 — 工具执行 + AI 自然语言总结 | ✅ |
| **P5d** | 前端运营助手改造 — Tool Calling 架构,AI 自动识别用户意图→调用工具→解释结果→展示 | ✅ |
| **P5e** | system prompt 动态注入可用工具列表,覆盖仪表盘/用户/订单/评论/Banner/通知/配置/角色/企业版等 | ✅ |
### 关键决策
- `frontend/src/lib/models.ts` 作为模型列表单数据源
- 所有颜色使用 CSS 变量(`text-foreground`/`text-muted-foreground`/`bg-card`/`bg-muted`/`border-border`
- `nest build` 正常产出(`--tsc` 遗漏 prisma 模块)
- 沙盒 JWT 认证保留
- Mock 支付自动完成闭环,无需手动触发回调;真实微信支付上线后自动切换
- 运营助手采用 Tool Calling 架构:system prompt 描述工具 → AI 返回 JSON 工具调用 → 后端执行 → 结果喂回 AI 总结 → 展示给用户
## 2026-05-27 Session
### Changes Made
- **Fixed OpenAI default model**: Changed `OPENAI_MODEL` in `.env` from `meituan/longcat-flash-lite` (invalid, returned 400) to `deepseek/deepseek-v4-flash` (confirmed working on qnaigc API). The "通用模式" (general model) now returns real AI responses instead of mock fallback.
- **Fixed empty content handling**: Updated `OpenAICompatibleProvider.chat()` to fall back to `reasoning_content` when `content` is empty (SenseNova models return content in `reasoning_content`). Same fix applied in `chatStream()` for delta content.
### Verification
- Backend successfully registers: `OpenAI 兼容接口已注册: deepseek/deepseek-v4-flash`
- 5 test chat requests to `POST /api/v1/sandbox/chat` with `model:"general"` all returned 201 in 1.3-12.7s (vs. previous mock/fallback)
- No more `AIGatewayService` "调用失败" errors in logs for OpenAI provider
- Backend runs under PM2 (v7.0.1), managed via `pm2 restart backend --update-env`
### Known Issues
- SenseNova API (`token.sensenova.cn`) still returns 404 "model is not found" for `deepseek-v4-flash` et al — models might need different naming on that endpoint
- Server: backend `node dist/main.js` on port 4000, frontend Next.js on port 3000, both managed by PM2
### 2026-05-27 后续优化
**彻底修复 CSS 丢失问题**
根本原因:PM2 用 `npm run dev``next dev`)运行前端,每次重启都会重新编译,`.next` 缓存被销毁导致 CSS 丢失。
解决方案:改用 `output: 'export'` 静态导出 + 独立 HTTP 服务器。
| 文件 | 变更 |
|------|------|
| `frontend/server.js` | **新增** — Node.js 静态文件服务器,支持 Next.js 静态导出 URL 模式(`/about``about.html`),CSS/JS 缓存一年,HTML 不缓存 |
| `ecosystem.config.js` | 前端从 `npm run dev` 改为 `node server.js`NODE_ENV=production |
| `frontend/package.json` | `predev` 改为仅删 `out/`,不再删 `.next/` |
部署流程:
1. `npm run build` → 生成 `out/` 静态目录
2. PM2 运行 `node server.js` → 直接提供静态文件
3. 重启后 CSS 不变,无需重新编译
当前状态:
- 前端 `localhost:3000` (static server, 无编译延迟)
- 后端 `localhost:4000` (NestJS)
- 所有路由正常 (/, /about, /sandbox 均为 200)
- CSS 持久化,重启后不丢失