958 lines
21 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.

---
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
iOSSwiftUI
iOS 架构MVVM + Service + Repository
设计规范Apple Human Interface Guidelines
UI 风格Apple 原生感、安静、克制、学习感
动效策略:轻量、有意义、服务学习体验
官网Astro
官网域名longde.cloud
后端NestJS + TypeScript
数据库MySQL
缓存Redis先预留可延后
AIProvider 抽象 + 一个真实模型 + 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.1MySQL + 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 基础配置
### 技术里程碑 5TestFlight 前准备
- Sign in with Apple
- 后端用户身份记录
- 基础错误处理
- 数据隐私检查
- 反馈入口
- 内测版本构建
---
## 17. 当前技术不做清单
- Spring Boot
- 微服务
- Kubernetes
- 多云部署
- 完整后台管理系统
- 完整 CMS
- 完整 RAG
- 向量数据库
- 多模型自动路由
- AI Agent 工具调用系统
- 文件上传解析
- Web 学习端
- Android
- Mac 正式版
- 支付系统
- 复杂数据分析平台