958 lines
21 KiB
Markdown
958 lines
21 KiB
Markdown
|
|
---
|
|||
|
|
version: v0.1
|
|||
|
|
status: draft
|
|||
|
|
updated: 2026-05-03
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 官网与技术基础
|
|||
|
|
|
|||
|
|
## 1. 当前技术目标
|
|||
|
|
|
|||
|
|
v0.1 阶段的技术目标不是做完整大系统,而是搭建一个可持续迭代的最小技术底座。
|
|||
|
|
|
|||
|
|
**当前需要支持:**
|
|||
|
|
|
|||
|
|
1. iPhone App Demo / MVP
|
|||
|
|
2. Sign in with Apple 登录
|
|||
|
|
3. AI API 调用
|
|||
|
|
4. 用户学习记录保存
|
|||
|
|
5. AI 分析结果保存
|
|||
|
|
6. 学习状态模型
|
|||
|
|
7. 官网基础页面
|
|||
|
|
8. 等待名单和反馈入口
|
|||
|
|
9. 后续可扩展到 TestFlight、App Store、iPad、Mac、Android
|
|||
|
|
|
|||
|
|
**当前不追求:**
|
|||
|
|
|
|||
|
|
- 高并发
|
|||
|
|
- 完整后台管理系统
|
|||
|
|
- 完整支付系统
|
|||
|
|
- 完整内容管理系统
|
|||
|
|
- 复杂微服务
|
|||
|
|
- 复杂云原生架构
|
|||
|
|
- 多端同步
|
|||
|
|
- 企业级权限系统
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. 技术总原则
|
|||
|
|
|
|||
|
|
### 2.1 用熟悉技术优先
|
|||
|
|
|
|||
|
|
当前是个人开发者阶段,技术选型优先考虑:
|
|||
|
|
|
|||
|
|
- 自己能理解
|
|||
|
|
- AI Agent 容易生成
|
|||
|
|
- 出问题容易排查
|
|||
|
|
- 部署简单
|
|||
|
|
- 成本低
|
|||
|
|
- 后续能扩展
|
|||
|
|
|
|||
|
|
### 2.2 架构要清晰,但不能过度设计
|
|||
|
|
|
|||
|
|
原则:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
代码结构清晰 > 技术炫技
|
|||
|
|
可维护 > 复杂
|
|||
|
|
能上线 > 完美
|
|||
|
|
能验证 > 大而全
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.3 前后端职责分离
|
|||
|
|
|
|||
|
|
| 端 | 职责 |
|
|||
|
|
|---|------|
|
|||
|
|
| iOS 客户端 | 页面展示、用户交互、本地状态、登录入口、学习流程体验 |
|
|||
|
|
| 后端 | 用户身份记录、AI API 代理、学习记录保存、AI 分析结果保存、学习画像更新、反馈收集、等待名单 |
|
|||
|
|
| AI 模型 | 分析用户输入、生成学习反馈、识别薄弱点、生成复习建议、辅助学习对话 |
|
|||
|
|
| 官网 | 产品介绍、SEO、隐私政策、用户协议、支持页面、等待名单、TestFlight 招募、未来 Mac DMG 下载 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. 当前推荐最终选型
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
iOS:SwiftUI
|
|||
|
|
iOS 架构:MVVM + Service + Repository
|
|||
|
|
设计规范:Apple Human Interface Guidelines
|
|||
|
|
UI 风格:Apple 原生感、安静、克制、学习感
|
|||
|
|
动效策略:轻量、有意义、服务学习体验
|
|||
|
|
官网:Astro
|
|||
|
|
官网域名:longde.cloud
|
|||
|
|
后端:NestJS + TypeScript
|
|||
|
|
数据库:MySQL
|
|||
|
|
缓存:Redis,先预留,可延后
|
|||
|
|
AI:Provider 抽象 + 一个真实模型 + MockProvider
|
|||
|
|
AI 记忆:结构化学习画像,不急着做复杂 Agent Memory
|
|||
|
|
部署:现有 4 核 4G 轻量云
|
|||
|
|
反向代理:Nginx
|
|||
|
|
进程/容器:Docker Compose 或 PM2
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
当前不买新服务器,不做复杂架构,先把最小闭环跑通。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. 整体技术架构
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
iPhone App
|
|||
|
|
├── SwiftUI
|
|||
|
|
├── Sign in with Apple
|
|||
|
|
├── 本地缓存
|
|||
|
|
└── API Client
|
|||
|
|
↓
|
|||
|
|
后端 API
|
|||
|
|
├── 用户模块
|
|||
|
|
├── 学习记录模块
|
|||
|
|
├── AI 代理模块
|
|||
|
|
├── 学习画像模块
|
|||
|
|
├── 反馈模块
|
|||
|
|
└── 等待名单模块
|
|||
|
|
↓
|
|||
|
|
数据库
|
|||
|
|
├── MySQL
|
|||
|
|
└── Redis(可选)
|
|||
|
|
↓
|
|||
|
|
AI 服务
|
|||
|
|
├── MiniMax / DeepSeek / 通义 / OpenAI / Claude / Gemini
|
|||
|
|
└── 后续可替换
|
|||
|
|
↓
|
|||
|
|
官网
|
|||
|
|
├── Astro
|
|||
|
|
├── SEO 页面
|
|||
|
|
├── 隐私政策
|
|||
|
|
├── 用户协议
|
|||
|
|
└── 等待名单
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. iOS 客户端技术选型
|
|||
|
|
|
|||
|
|
### 5.1 技术选择
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
Swift
|
|||
|
|
SwiftUI
|
|||
|
|
Xcode
|
|||
|
|
MVVM
|
|||
|
|
Service 层
|
|||
|
|
Repository 层
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**选择原因:**
|
|||
|
|
|
|||
|
|
1. 当前第一阶段只做 Apple 平台
|
|||
|
|
2. SwiftUI 适合快速做原型和 MVP
|
|||
|
|
3. 原生体验更适合长期做 iPhone、iPad、Mac
|
|||
|
|
4. Apple 生态的动画、交互、系统组件体验好
|
|||
|
|
5. 后续可以逐步学习和沉淀原生开发能力
|
|||
|
|
|
|||
|
|
### 5.2 SwiftUI 学习策略
|
|||
|
|
|
|||
|
|
学习顺序:
|
|||
|
|
|
|||
|
|
1. Swift 基础语法
|
|||
|
|
2. SwiftUI 页面布局
|
|||
|
|
3. NavigationStack 页面跳转
|
|||
|
|
4. TabView 底部导航
|
|||
|
|
5. Form / List / ScrollView
|
|||
|
|
6. ObservableObject / State / Binding
|
|||
|
|
7. 网络请求
|
|||
|
|
8. 本地存储
|
|||
|
|
9. Sign in with Apple
|
|||
|
|
10. 简单动画和转场
|
|||
|
|
|
|||
|
|
第一版 UI 优先使用系统组件,尽量做出 Apple 原生感。
|
|||
|
|
|
|||
|
|
### 5.3 iOS 目录结构
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
AIStudyApp/
|
|||
|
|
├── App/
|
|||
|
|
│ ├── AIStudyApp.swift
|
|||
|
|
│ ├── AppConfig.swift
|
|||
|
|
│ └── AppRouter.swift
|
|||
|
|
│
|
|||
|
|
├── Core/
|
|||
|
|
│ ├── Network/
|
|||
|
|
│ │ ├── APIClient.swift
|
|||
|
|
│ │ ├── APIEndpoint.swift
|
|||
|
|
│ │ └── APIError.swift
|
|||
|
|
│ │
|
|||
|
|
│ ├── Auth/
|
|||
|
|
│ │ ├── AppleSignInService.swift
|
|||
|
|
│ │ └── AuthSession.swift
|
|||
|
|
│ │
|
|||
|
|
│ ├── Storage/
|
|||
|
|
│ │ ├── LocalStorage.swift
|
|||
|
|
│ │ └── KeychainService.swift
|
|||
|
|
│ │
|
|||
|
|
│ ├── Localization/
|
|||
|
|
│ │ └── LocalizationManager.swift
|
|||
|
|
│ │
|
|||
|
|
│ └── DesignSystem/
|
|||
|
|
│ ├── AppColors.swift
|
|||
|
|
│ ├── AppTypography.swift
|
|||
|
|
│ ├── AppSpacing.swift
|
|||
|
|
│ └── Components/
|
|||
|
|
│
|
|||
|
|
├── Features/
|
|||
|
|
│ ├── Onboarding/
|
|||
|
|
│ │ ├── Views/
|
|||
|
|
│ │ ├── ViewModels/
|
|||
|
|
│ │ └── Models/
|
|||
|
|
│ │
|
|||
|
|
│ ├── Auth/
|
|||
|
|
│ │ ├── Views/
|
|||
|
|
│ │ └── ViewModels/
|
|||
|
|
│ │
|
|||
|
|
│ ├── Learning/
|
|||
|
|
│ │ ├── Views/
|
|||
|
|
│ │ ├── ViewModels/
|
|||
|
|
│ │ └── Models/
|
|||
|
|
│ │
|
|||
|
|
│ ├── KnowledgeBase/
|
|||
|
|
│ │ ├── Views/
|
|||
|
|
│ │ ├── ViewModels/
|
|||
|
|
│ │ └── Models/
|
|||
|
|
│ │
|
|||
|
|
│ ├── AIAssistant/
|
|||
|
|
│ │ ├── Views/
|
|||
|
|
│ │ ├── ViewModels/
|
|||
|
|
│ │ └── Models/
|
|||
|
|
│ │
|
|||
|
|
│ ├── Review/
|
|||
|
|
│ │ ├── Views/
|
|||
|
|
│ │ ├── ViewModels/
|
|||
|
|
│ │ └── Models/
|
|||
|
|
│ │
|
|||
|
|
│ └── Profile/
|
|||
|
|
│ ├── Views/
|
|||
|
|
│ ├── ViewModels/
|
|||
|
|
│ └── Models/
|
|||
|
|
│
|
|||
|
|
├── Shared/
|
|||
|
|
│ ├── Components/
|
|||
|
|
│ ├── Extensions/
|
|||
|
|
│ ├── Utils/
|
|||
|
|
│ └── Constants/
|
|||
|
|
│
|
|||
|
|
└── Resources/
|
|||
|
|
├── Localizable.xcstrings
|
|||
|
|
├── Assets.xcassets
|
|||
|
|
└── PreviewData/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 5.4 iOS 模块说明
|
|||
|
|
|
|||
|
|
| 模块 | 说明 |
|
|||
|
|
|------|------|
|
|||
|
|
| App | 负责 App 入口、全局配置、路由 |
|
|||
|
|
| Core | 负责底层能力:网络请求、登录、本地存储、Keychain、多语言、设计系统 |
|
|||
|
|
| Features | 按业务模块拆分:Onboarding、Auth、Learning、KnowledgeBase、AIAssistant、Review、Profile |
|
|||
|
|
| Shared | 存放通用组件、工具函数、扩展 |
|
|||
|
|
| Resources | 存放资源文件、多语言、图片、测试数据 |
|
|||
|
|
|
|||
|
|
### 5.5 iOS 第一版不做
|
|||
|
|
|
|||
|
|
- 复杂动画系统
|
|||
|
|
- 自定义复杂控件
|
|||
|
|
- iPad 专门布局
|
|||
|
|
- Mac Catalyst
|
|||
|
|
- Watch App
|
|||
|
|
- Widget
|
|||
|
|
- 离线完整知识库
|
|||
|
|
- 复杂搜索
|
|||
|
|
- 文件导入
|
|||
|
|
- 推送通知
|
|||
|
|
- 支付订阅
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6. Apple 设计规范与动效原则
|
|||
|
|
|
|||
|
|
### 6.1 设计基准
|
|||
|
|
|
|||
|
|
本产品第一阶段优先做 Apple 平台,因此 UI/UX 设计需要参考 Apple Human Interface Guidelines。
|
|||
|
|
|
|||
|
|
第一版设计目标不是做复杂视觉,而是做出:
|
|||
|
|
|
|||
|
|
- 原生感
|
|||
|
|
- 安静感
|
|||
|
|
- 学习感
|
|||
|
|
- 清晰的层级
|
|||
|
|
- 流畅的交互
|
|||
|
|
- 适度高级感
|
|||
|
|
- 符合 Apple 用户习惯的体验
|
|||
|
|
|
|||
|
|
### 6.2 HIG 设计原则
|
|||
|
|
|
|||
|
|
1. **内容优先** — 学习内容、任务和 AI 分析结果应该是页面中心
|
|||
|
|
2. **层级清晰** — 用户应该很清楚当前在哪、今天要做什么、下一步做什么
|
|||
|
|
3. **交互克制** — 不做过多按钮,不堆功能,不制造干扰
|
|||
|
|
4. **系统一致** — 尽量使用 Apple 原生组件、系统字体、系统导航、系统交互
|
|||
|
|
5. **可访问性** — 字体大小、颜色对比、动态效果都要考虑不同用户
|
|||
|
|
6. **动效有意义** — 动效用于反馈、状态变化、页面过渡和学习进度表达,不做无意义炫技
|
|||
|
|
|
|||
|
|
### 6.3 动效优先级
|
|||
|
|
|
|||
|
|
**P0 必须做:**
|
|||
|
|
- 页面进入 / 返回的自然过渡
|
|||
|
|
- 按钮点击反馈
|
|||
|
|
- 加载状态
|
|||
|
|
- AI 分析中状态
|
|||
|
|
- 学习完成反馈
|
|||
|
|
|
|||
|
|
**P1 建议做:**
|
|||
|
|
- 今日任务卡片动效
|
|||
|
|
- 进度条更新动效
|
|||
|
|
- AI 分析结果分块出现
|
|||
|
|
- 复习建议卡片出现
|
|||
|
|
|
|||
|
|
**P2 延后做:**
|
|||
|
|
- 启动页品牌动画
|
|||
|
|
- 高级图表动效
|
|||
|
|
- 大范围转场动画
|
|||
|
|
- 自定义复杂动画
|
|||
|
|
|
|||
|
|
### 6.4 SwiftUI 动效实现策略
|
|||
|
|
|
|||
|
|
第一版优先使用 SwiftUI 原生能力:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
withAnimation
|
|||
|
|
transition
|
|||
|
|
opacity
|
|||
|
|
scaleEffect
|
|||
|
|
ProgressView
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
谨慎使用:
|
|||
|
|
```text
|
|||
|
|
matchedGeometryEffect
|
|||
|
|
PhaseAnimator
|
|||
|
|
SymbolEffect
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
第一版不追求复杂自定义动画系统。目标是让 App 看起来顺滑、有质感,而不是炫技。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 7. SwiftUI + AI Agent 开发策略
|
|||
|
|
|
|||
|
|
### 7.1 基本判断
|
|||
|
|
|
|||
|
|
创始人当前没有 SwiftUI 实战经验,但可以借助 AI Agent 完成开发。
|
|||
|
|
|
|||
|
|
这不影响第一版使用 SwiftUI。原因:
|
|||
|
|
|
|||
|
|
1. SwiftUI 适合快速构建 Apple 原生界面
|
|||
|
|
2. AI Agent 对 SwiftUI 页面、组件、ViewModel 的生成能力较强
|
|||
|
|
3. 只要目录结构清晰、任务拆分明确,AI 可以辅助完成大量开发
|
|||
|
|
4. 创始人需要掌握的是架构、产品逻辑、代码审查和调试能力
|
|||
|
|
|
|||
|
|
### 7.2 AI 开发原则
|
|||
|
|
|
|||
|
|
使用 AI 开发 SwiftUI 时,必须遵守:
|
|||
|
|
|
|||
|
|
1. 每次只让 AI 修改一个模块
|
|||
|
|
2. 每次生成前先说明目录和目标文件
|
|||
|
|
3. 不允许 AI 随意改全局架构
|
|||
|
|
4. 不允许 AI 把所有代码写进一个 View
|
|||
|
|
5. 页面、ViewModel、Model、Service 分开
|
|||
|
|
6. 复杂逻辑放到 Service,不堆在 View 里
|
|||
|
|
7. UI 组件尽量复用
|
|||
|
|
8. 每完成一个页面就真机预览或模拟器运行
|
|||
|
|
|
|||
|
|
### 7.3 推荐开发顺序
|
|||
|
|
|
|||
|
|
1. 创建项目骨架
|
|||
|
|
2. 建立 DesignSystem
|
|||
|
|
3. 建立 Tab 结构
|
|||
|
|
4. 建立 Onboarding 页面
|
|||
|
|
5. 建立 Apple 登录页面
|
|||
|
|
6. 建立学习路径页面
|
|||
|
|
7. 建立今日任务页面
|
|||
|
|
8. 建立内容阅读页面
|
|||
|
|
9. 建立主动回忆输入页面
|
|||
|
|
10. 建立 AI 分析结果页面
|
|||
|
|
11. 建立 AI 助手页面
|
|||
|
|
12. 建立我的 / 设置 / 反馈页面
|
|||
|
|
|
|||
|
|
### 7.4 AI 生成代码时的提示原则
|
|||
|
|
|
|||
|
|
每次让 AI 写代码时,要明确:
|
|||
|
|
|
|||
|
|
- 当前模块
|
|||
|
|
- 目标文件
|
|||
|
|
- 不要修改哪些文件
|
|||
|
|
- 使用 SwiftUI
|
|||
|
|
- 使用 MVVM
|
|||
|
|
- 使用已有 DesignSystem
|
|||
|
|
- 不写死颜色和字体
|
|||
|
|
- 支持多语言 key
|
|||
|
|
- 页面要支持深色模式
|
|||
|
|
- 页面要适配不同 iPhone 尺寸
|
|||
|
|
|
|||
|
|
### 7.5 第一版代码质量底线
|
|||
|
|
|
|||
|
|
底线:
|
|||
|
|
|
|||
|
|
- 不把业务逻辑写在 View 里
|
|||
|
|
- 不把 API Key 写在客户端
|
|||
|
|
- 不写大量重复 UI
|
|||
|
|
- 不写死所有文案
|
|||
|
|
- 不把 AI Prompt 写死在 iOS 端
|
|||
|
|
- 不让一个文件超过过大规模
|
|||
|
|
- 不做无法维护的一次性 Demo
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 8. 官网技术选型
|
|||
|
|
|
|||
|
|
### 8.1 官网定位
|
|||
|
|
|
|||
|
|
官网不是 Web 学习系统,而是产品基础设施。
|
|||
|
|
|
|||
|
|
官网第一阶段承担:
|
|||
|
|
|
|||
|
|
- 产品介绍
|
|||
|
|
- SEO 收录
|
|||
|
|
- 等待名单
|
|||
|
|
- TestFlight 招募
|
|||
|
|
- 隐私政策
|
|||
|
|
- 用户协议
|
|||
|
|
- 支持页面
|
|||
|
|
- 更新日志
|
|||
|
|
- 未来 Mac DMG 下载
|
|||
|
|
|
|||
|
|
### 8.2 框架选择
|
|||
|
|
|
|||
|
|
| 框架 | 优点 | 缺点 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| Astro | 适合内容型网站、SEO 友好、静态页面性能好、适合官网博客文档、比 Nuxt/Next 更轻 | 未来做 Web App 需要另起项目 |
|
|||
|
|
| Nuxt | Vue 生态、适合 SSR/SSG | 对纯官网来说稍重 |
|
|||
|
|
| Next.js | React 生态强、SSR/SSG 成熟 | 对当前阶段偏重 |
|
|||
|
|
| VitePress | 文档站很快 | 视觉自由度不如 Astro |
|
|||
|
|
|
|||
|
|
**推荐:Astro**
|
|||
|
|
|
|||
|
|
### 8.3 官网页面结构
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
website/
|
|||
|
|
├── src/
|
|||
|
|
│ ├── pages/
|
|||
|
|
│ │ ├── index.astro
|
|||
|
|
│ │ ├── privacy.astro
|
|||
|
|
│ │ ├── terms.astro
|
|||
|
|
│ │ ├── support.astro
|
|||
|
|
│ │ ├── waitlist.astro
|
|||
|
|
│ │ ├── download.astro
|
|||
|
|
│ │ └── changelog.astro
|
|||
|
|
│ │
|
|||
|
|
│ ├── layouts/
|
|||
|
|
│ │ └── BaseLayout.astro
|
|||
|
|
│ │
|
|||
|
|
│ ├── components/
|
|||
|
|
│ │ ├── Hero.astro
|
|||
|
|
│ │ ├── FeatureCard.astro
|
|||
|
|
│ │ ├── CTA.astro
|
|||
|
|
│ │ └── Footer.astro
|
|||
|
|
│ │
|
|||
|
|
│ ├── content/
|
|||
|
|
│ │ └── posts/
|
|||
|
|
│ │
|
|||
|
|
│ └── styles/
|
|||
|
|
│ └── global.css
|
|||
|
|
│
|
|||
|
|
├── public/
|
|||
|
|
│ ├── images/
|
|||
|
|
│ └── favicon.svg
|
|||
|
|
│
|
|||
|
|
└── package.json
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 8.4 SEO 规划
|
|||
|
|
|
|||
|
|
**第一版 SEO 重点:**
|
|||
|
|
|
|||
|
|
- 首页标题、描述、关键词
|
|||
|
|
- Open Graph 分享图
|
|||
|
|
- sitemap.xml
|
|||
|
|
- robots.txt
|
|||
|
|
- 清晰 URL 结构
|
|||
|
|
- 更新日志内容
|
|||
|
|
- 长尾关键词页面
|
|||
|
|
|
|||
|
|
**当前不做:**
|
|||
|
|
- 复杂 SEO 工具链
|
|||
|
|
- 大量采集文章
|
|||
|
|
- 自动生成垃圾内容
|
|||
|
|
- 过度关键词堆砌
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 9. 后端技术选型
|
|||
|
|
|
|||
|
|
### 9.1 是否需要后端
|
|||
|
|
|
|||
|
|
v0.1 需要最小后端,原因:
|
|||
|
|
|
|||
|
|
1. AI API Key 不能放在 iOS 客户端
|
|||
|
|
2. 用户登录后需要保存用户身份
|
|||
|
|
3. 学习记录需要保存
|
|||
|
|
4. AI 分析结果需要保存
|
|||
|
|
5. 学习状态模型需要后端维护
|
|||
|
|
6. 等待名单和反馈需要收集
|
|||
|
|
7. 后续订阅权益需要后端基础
|
|||
|
|
|
|||
|
|
### 9.2 技术对比
|
|||
|
|
|
|||
|
|
| 技术 | 优点 | 缺点 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| NestJS | 模块清晰、适合长期、TypeScript 生态好、AI Agent 容易按模块生成代码 | 学习成本稍高 |
|
|||
|
|
| Express | 简单、学习成本低、快速启动 | 大项目容易混乱、AI Agent 写多了容易堆代码 |
|
|||
|
|
| FastAPI | Python 生态适合 AI、写 API 很快、后续接 AI/RAG 方便 | 两个语言栈分散注意力 |
|
|||
|
|
| Spring Boot | 企业级成熟 | 太重、不擅长 |
|
|||
|
|
|
|||
|
|
**推荐:Node.js + NestJS + TypeScript**
|
|||
|
|
|
|||
|
|
### 9.3 后端目录结构
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
server/
|
|||
|
|
├── src/
|
|||
|
|
│ ├── main.ts
|
|||
|
|
│ ├── app.module.ts
|
|||
|
|
│ │
|
|||
|
|
│ ├── common/
|
|||
|
|
│ │ ├── filters/
|
|||
|
|
│ │ ├── guards/
|
|||
|
|
│ │ ├── interceptors/
|
|||
|
|
│ │ ├── decorators/
|
|||
|
|
│ │ └── utils/
|
|||
|
|
│ │
|
|||
|
|
│ ├── config/
|
|||
|
|
│ │ ├── app.config.ts
|
|||
|
|
│ │ ├── database.config.ts
|
|||
|
|
│ │ └── ai.config.ts
|
|||
|
|
│ │
|
|||
|
|
│ ├── modules/
|
|||
|
|
│ │ ├── auth/
|
|||
|
|
│ │ ├── users/
|
|||
|
|
│ │ ├── knowledge/
|
|||
|
|
│ │ ├── learning/
|
|||
|
|
│ │ ├── ai/
|
|||
|
|
│ │ │ ├── prompts/
|
|||
|
|
│ │ │ └── providers/
|
|||
|
|
│ │ ├── review/
|
|||
|
|
│ │ ├── feedback/
|
|||
|
|
│ │ └── waitlist/
|
|||
|
|
│ │
|
|||
|
|
│ └── database/
|
|||
|
|
│ ├── migrations/
|
|||
|
|
│ └── seeds/
|
|||
|
|
│
|
|||
|
|
├── .env
|
|||
|
|
├── package.json
|
|||
|
|
└── docker-compose.yml
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 9.4 后端第一版模块
|
|||
|
|
|
|||
|
|
**P0 模块:**
|
|||
|
|
- Auth 模块
|
|||
|
|
- User 模块
|
|||
|
|
- Knowledge 模块
|
|||
|
|
- Learning 模块
|
|||
|
|
- AI 模块
|
|||
|
|
- Review 模块
|
|||
|
|
- Feedback 模块
|
|||
|
|
- Waitlist 模块
|
|||
|
|
|
|||
|
|
**P1 模块:**
|
|||
|
|
- Admin 简单管理
|
|||
|
|
- Analytics 简单日志
|
|||
|
|
- Subscription 订阅预留
|
|||
|
|
|
|||
|
|
**P2 暂不做:**
|
|||
|
|
- 支付、完整后台、多租户、企业账号、复杂权限
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 10. 数据库设计
|
|||
|
|
|
|||
|
|
### 10.1 数据库选型
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
v0.1:MySQL + Redis(预留)
|
|||
|
|
后续:向量数据库(PostgreSQL pgvector / Milvus / Qdrant)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 10.2 为什么用 MySQL
|
|||
|
|
|
|||
|
|
MySQL 适合保存结构化业务数据:
|
|||
|
|
- 用户、登录信息
|
|||
|
|
- 知识库、学习路径
|
|||
|
|
- 学习记录、AI 分析结果
|
|||
|
|
- 复习任务、反馈、等待名单
|
|||
|
|
|
|||
|
|
### 10.3 为什么用 Redis
|
|||
|
|
|
|||
|
|
Redis 第一版可以先不急着重度使用,但可以预留:
|
|||
|
|
|
|||
|
|
- 缓存
|
|||
|
|
- 限流
|
|||
|
|
- AI 请求频控
|
|||
|
|
- 短期会话
|
|||
|
|
- 验证码(未来如果有)
|
|||
|
|
- 队列(后续如果需要)
|
|||
|
|
|
|||
|
|
### 10.4 是否需要向量数据库
|
|||
|
|
|
|||
|
|
**第一版暂不急着上向量数据库。**
|
|||
|
|
|
|||
|
|
原因:
|
|||
|
|
1. 第一版知识库内容很小
|
|||
|
|
2. 可以先用结构化课程上下文传给 AI
|
|||
|
|
3. RAG 系统会增加复杂度
|
|||
|
|
4. 当前重点是验证学习闭环,而不是做大规模知识检索
|
|||
|
|
|
|||
|
|
**后续再考虑:** PostgreSQL + pgvector、Qdrant、Milvus
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 11. AI 长期记忆与知识库能力
|
|||
|
|
|
|||
|
|
### 11.1 名词澄清
|
|||
|
|
|
|||
|
|
| 概念 | 说明 |
|
|||
|
|
|------|------|
|
|||
|
|
| 长期记忆 Long-term Memory | 记录用户长期偏好、历史行为、薄弱点 |
|
|||
|
|
| 学习画像 Learning Profile | 记录用户在具体学习领域里的状态 |
|
|||
|
|
| 知识库 Knowledge Base | 产品提供的结构化内容(课程小节、知识点、示例、练习、复习问题) |
|
|||
|
|
| RAG | 当知识库内容变多后,通过检索相关内容,再交给 AI 回答 |
|
|||
|
|
| 向量数据库 | 用于存储文本向量,实现语义检索 |
|
|||
|
|
| Agent Memory | Agent 为了长期协作,保存用户目标、偏好、任务历史等 |
|
|||
|
|
|
|||
|
|
### 11.2 v0.1 推荐做法
|
|||
|
|
|
|||
|
|
第一版不要急着做复杂 Agent Memory。
|
|||
|
|
|
|||
|
|
v0.1 只做:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
结构化学习画像
|
|||
|
|
+
|
|||
|
|
学习记录
|
|||
|
|
+
|
|||
|
|
AI 分析结果
|
|||
|
|
+
|
|||
|
|
复习队列
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
也就是:
|
|||
|
|
- UserLearningProfile
|
|||
|
|
- LearningSession
|
|||
|
|
- AIAnalysis
|
|||
|
|
- ReviewTask
|
|||
|
|
|
|||
|
|
### 11.3 AI 对话上下文
|
|||
|
|
|
|||
|
|
第一版 AI 对话上下文包括:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
当前用户
|
|||
|
|
当前知识库
|
|||
|
|
当前学习路径
|
|||
|
|
当前小节
|
|||
|
|
用户最近一次输入
|
|||
|
|
最近一次 AI 分析
|
|||
|
|
用户薄弱点
|
|||
|
|
当前复习任务
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
暂不做全局长期聊天记忆。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 12. AI 模型与 API 选型
|
|||
|
|
|
|||
|
|
### 12.1 模型选择原则
|
|||
|
|
|
|||
|
|
1. 中文能力好
|
|||
|
|
2. 成本可控
|
|||
|
|
3. API 稳定
|
|||
|
|
4. 支持结构化输出
|
|||
|
|
5. 速度可以接受
|
|||
|
|
6. 容易接入
|
|||
|
|
7. 可替换
|
|||
|
|
|
|||
|
|
### 12.2 候选模型
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
MiniMax
|
|||
|
|
DeepSeek
|
|||
|
|
通义千问
|
|||
|
|
OpenAI
|
|||
|
|
Claude
|
|||
|
|
Gemini
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 12.3 AI Provider 层设计
|
|||
|
|
|
|||
|
|
后端需要设计 AI Provider 层:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
AIService
|
|||
|
|
├── MiniMaxProvider
|
|||
|
|
├── DeepSeekProvider
|
|||
|
|
├── OpenAIProvider
|
|||
|
|
└── MockProvider
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 12.4 MockProvider
|
|||
|
|
|
|||
|
|
v0.1 强烈建议做一个 MockProvider。
|
|||
|
|
|
|||
|
|
作用:
|
|||
|
|
- 没有 API Key 时也能开发
|
|||
|
|
- AI 服务出问题时能测试流程
|
|||
|
|
- 降低开发成本
|
|||
|
|
- 方便录 Demo
|
|||
|
|
|
|||
|
|
### 12.5 核心 AI 接口
|
|||
|
|
|
|||
|
|
**POST /ai/analyze-learning-input**
|
|||
|
|
|
|||
|
|
输入:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"userId": "user_001",
|
|||
|
|
"lessonId": "lesson_001",
|
|||
|
|
"userInput": "用户写下的答案或笔记",
|
|||
|
|
"context": {
|
|||
|
|
"lessonTitle": "材料阅读方法",
|
|||
|
|
"objectives": ["理解材料结构", "提取关键要点"],
|
|||
|
|
"keyPoints": ["问题", "原因", "影响", "对策"]
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
输出:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"masteryScore": 3,
|
|||
|
|
"understandingLevel": "基本理解",
|
|||
|
|
"summary": "用户能理解主要内容,但要点不完整。",
|
|||
|
|
"strengths": ["表达清楚"],
|
|||
|
|
"weakPoints": ["遗漏关键要点", "逻辑层次不足"],
|
|||
|
|
"suggestions": ["补充第二个要点", "先概括再展开"],
|
|||
|
|
"reviewNeeded": true,
|
|||
|
|
"nextAction": "明天重新回答本节主动回忆问题。"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**POST /ai/chat**
|
|||
|
|
|
|||
|
|
输入:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"userId": "user_001",
|
|||
|
|
"lessonId": "lesson_001",
|
|||
|
|
"message": "这节内容能不能举个例子?"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
输出:
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"reply": "可以。你可以这样理解……",
|
|||
|
|
"suggestedActions": ["生成复习问题", "重新解释", "给我一个例子"]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 13. 域名规划
|
|||
|
|
|
|||
|
|
### 13.1 当前已有域名
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
longde.cloud
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
v0.1 阶段使用该域名作为产品基础设施域名。
|
|||
|
|
|
|||
|
|
### 13.2 子域名规划
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
longde.cloud 官网首页
|
|||
|
|
www.longde.cloud 官网首页(可跳转)
|
|||
|
|
api.longde.cloud 后端 API
|
|||
|
|
git.longde.cloud Gitea 代码仓库
|
|||
|
|
download.longde.cloud 未来 Mac DMG 下载(可选)
|
|||
|
|
status.longde.cloud 未来服务状态页(可选)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 13.3 官网 URL 规划
|
|||
|
|
|
|||
|
|
| 路径 | 说明 |
|
|||
|
|
|------|------|
|
|||
|
|
| / | 首页 |
|
|||
|
|
| /privacy | 隐私政策 |
|
|||
|
|
| /terms | 用户协议 |
|
|||
|
|
| /support | 支持与反馈 |
|
|||
|
|
| /waitlist | 等待名单 / 内测申请 |
|
|||
|
|
| /changelog | 更新日志 |
|
|||
|
|
| /download | 未来 Mac DMG 下载页 |
|
|||
|
|
| /blog | 后续 SEO 内容文章 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 14. 部署方案
|
|||
|
|
|
|||
|
|
### 14.1 当前服务器情况
|
|||
|
|
|
|||
|
|
- 4 核 4G 轻量云服务器
|
|||
|
|
- 当前运行 Gitea
|
|||
|
|
|
|||
|
|
### 14.2 是否需要新买服务器
|
|||
|
|
|
|||
|
|
**v0.1 阶段不建议立刻买新 ECS。**
|
|||
|
|
|
|||
|
|
原因:
|
|||
|
|
1. 当前没有真实用户
|
|||
|
|
2. v0.1 请求量很低
|
|||
|
|
3. 官网、后端、数据库可以先小规模部署
|
|||
|
|
4. 先验证产品,不增加固定成本
|
|||
|
|
|
|||
|
|
### 14.3 当前推荐部署方式
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
Nginx
|
|||
|
|
Docker Compose 或 PM2
|
|||
|
|
MySQL
|
|||
|
|
Redis(可选)
|
|||
|
|
NestJS 后端
|
|||
|
|
Astro 静态官网
|
|||
|
|
Gitea 继续保留
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 14.4 什么时候买新服务器
|
|||
|
|
|
|||
|
|
满足以下情况再考虑新服务器:
|
|||
|
|
|
|||
|
|
1. Gitea 和产品服务互相影响
|
|||
|
|
2. 官网访问开始明显增加
|
|||
|
|
3. 后端 AI 请求明显增多
|
|||
|
|
4. MySQL 占用资源明显
|
|||
|
|
5. 需要更稳定的生产环境
|
|||
|
|
6. App Store 正式上线前想隔离开发服务
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 15. 开发环境与仓库规划
|
|||
|
|
|
|||
|
|
### 15.1 仓库策略
|
|||
|
|
|
|||
|
|
**推荐 monorepo:**
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
ai-study-product/
|
|||
|
|
├── apps/
|
|||
|
|
│ ├── ios/
|
|||
|
|
│ └── website/
|
|||
|
|
│
|
|||
|
|
├── services/
|
|||
|
|
│ └── api/
|
|||
|
|
│
|
|||
|
|
├── packages/
|
|||
|
|
│ ├── shared-types/
|
|||
|
|
│ └── prompts/
|
|||
|
|
│
|
|||
|
|
├── docs/
|
|||
|
|
│ └── planning/
|
|||
|
|
│
|
|||
|
|
└── README.md
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**原因:**
|
|||
|
|
1. 早期项目小,放一起方便管理
|
|||
|
|
2. AI Agent 更容易读取完整上下文
|
|||
|
|
3. Prompt、类型定义、文档可以共享
|
|||
|
|
4. 后续大了再拆仓库
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 16. 技术里程碑
|
|||
|
|
|
|||
|
|
### 技术里程碑 1:可点击 iOS Demo
|
|||
|
|
|
|||
|
|
- SwiftUI 项目
|
|||
|
|
- 基础页面
|
|||
|
|
- Tab 导航
|
|||
|
|
- 学习路径页面
|
|||
|
|
- 内容阅读页面
|
|||
|
|
- AI 分析结果假数据
|
|||
|
|
|
|||
|
|
### 技术里程碑 2:最小后端
|
|||
|
|
|
|||
|
|
- NestJS 项目
|
|||
|
|
- MySQL 连接
|
|||
|
|
- 用户表
|
|||
|
|
- 学习记录表
|
|||
|
|
- AI MockProvider
|
|||
|
|
- 反馈接口
|
|||
|
|
|
|||
|
|
### 技术里程碑 3:真实 AI 接入
|
|||
|
|
|
|||
|
|
- AI Provider 抽象
|
|||
|
|
- 接入一个真实模型
|
|||
|
|
- AI 分析接口
|
|||
|
|
- AI 对话接口
|
|||
|
|
- 结构化输出保存
|
|||
|
|
|
|||
|
|
### 技术里程碑 4:官网上线
|
|||
|
|
|
|||
|
|
- Astro 官网
|
|||
|
|
- 首页
|
|||
|
|
- 隐私政策
|
|||
|
|
- 用户协议
|
|||
|
|
- 支持页
|
|||
|
|
- 等待名单
|
|||
|
|
- SEO 基础配置
|
|||
|
|
|
|||
|
|
### 技术里程碑 5:TestFlight 前准备
|
|||
|
|
|
|||
|
|
- Sign in with Apple
|
|||
|
|
- 后端用户身份记录
|
|||
|
|
- 基础错误处理
|
|||
|
|
- 数据隐私检查
|
|||
|
|
- 反馈入口
|
|||
|
|
- 内测版本构建
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 17. 当前技术不做清单
|
|||
|
|
|
|||
|
|
- Spring Boot
|
|||
|
|
- 微服务
|
|||
|
|
- Kubernetes
|
|||
|
|
- 多云部署
|
|||
|
|
- 完整后台管理系统
|
|||
|
|
- 完整 CMS
|
|||
|
|
- 完整 RAG
|
|||
|
|
- 向量数据库
|
|||
|
|
- 多模型自动路由
|
|||
|
|
- AI Agent 工具调用系统
|
|||
|
|
- 文件上传解析
|
|||
|
|
- Web 学习端
|
|||
|
|
- Android
|
|||
|
|
- Mac 正式版
|
|||
|
|
- 支付系统
|
|||
|
|
- 复杂数据分析平台
|