290 lines
10 KiB
Markdown
290 lines
10 KiB
Markdown
# AIwelink 项目交接说明
|
||
|
||
这份文档帮助新成员快速了解 AIwelink 要解决的问题。
|
||
文档也说明第一阶段要做什么,以及当前已经确定的工程规则。
|
||
|
||
当前状态:产品方向和主要技术选型已经确定。
|
||
代码目录处于初始化前阶段。
|
||
商业、市场和运营安排仍以飞书中的文件为准。
|
||
|
||
## 1. AIwelink 是什么
|
||
|
||
AIwelink 帮助大学生认识自己的能力,找到合适的学习或项目机会。
|
||
用户在真实合作中积累经验。
|
||
|
||
第一阶段从大学生竞赛和技术项目开始。平台长期要做的事情是:
|
||
|
||
```text
|
||
了解自己
|
||
-> 找到合适的机会
|
||
-> 参加真实项目
|
||
-> 和合适的人合作
|
||
-> 得到项目结果和队友反馈
|
||
-> 更新对自己的认识
|
||
```
|
||
|
||
这里的「个人画像」指对用户能力、偏好、目标和合作方式的结构化描述。
|
||
画像会随着项目反馈持续更新。
|
||
|
||
## 2. 产品要解决什么问题
|
||
|
||
### 2.1 把信息变成行动
|
||
|
||
校园墙擅长让信息被看见。
|
||
AIwelink 进一步把信息整理成可执行的项目机会,帮助合适的人开始合作并完成项目。
|
||
|
||
项目或竞赛机会应尽量写清楚:
|
||
|
||
- 要做什么,以及何时截止;
|
||
- 需要哪些角色和能力;
|
||
- 每个角色要投入多少时间;
|
||
- 用户下一步可以做什么;
|
||
- 最后能留下什么作品或结果。
|
||
|
||
平台重点关注有效申请、成功组队、持续合作和完成项目的队伍数量。
|
||
|
||
### 2.2 让画像随着实践更新
|
||
|
||
AI 自我认知助手(Agent)先给出阶段性判断。
|
||
用户参加项目后的行为、队友反馈和项目复盘,会帮助平台持续更新这份判断。
|
||
|
||
平台要帮助用户回答:
|
||
|
||
- 我擅长哪类任务?
|
||
- 我适合在项目中承担什么角色?
|
||
- 什么工作环境更适合我?
|
||
- 哪些环节可能让我的合作变困难?
|
||
- 下一步应该尝试什么,或补哪项能力?
|
||
|
||
### 2.3 社交从一起做事开始
|
||
|
||
平台的社交功能围绕共同目标展开。
|
||
第一阶段优先服务用户已经认识的朋友、同学和队友。
|
||
恋爱交友放到后续产品规划中。
|
||
|
||
推荐的合作过程是:
|
||
|
||
```text
|
||
查看个人画像
|
||
-> 邀请认识的人
|
||
-> 双方明确同意共享内容
|
||
-> 生成双方的合作建议
|
||
-> 一起参加项目或挑战
|
||
-> 根据结果建立长期合作关系
|
||
```
|
||
|
||
双方合作报告重点说明优势互补、分工建议和可能的冲突。
|
||
报告还会给出沟通方式和适合一起尝试的项目。
|
||
|
||
### 2.4 推荐要让用户知道原因
|
||
|
||
平台可以推荐竞赛、项目、学习内容、项目角色、合作对象、课程、导师和 AI 工具。
|
||
每条推荐都应说明原因,并同时提供三类选择:
|
||
|
||
1. 当前能力可以完成的机会;
|
||
2. 能补足短板的机会;
|
||
3. 有一定挑战、适合探索的机会。
|
||
|
||
这样的推荐会帮助用户理解自己,并保留尝试不同方向的空间。
|
||
|
||
### 2.5 首页先告诉用户下一步做什么
|
||
|
||
首页把机会和下一步行动放在最前面,首先展示:
|
||
|
||
1. 适合用户的机会和项目;
|
||
2. 用户正在参与的项目;
|
||
3. 自我认知和成长任务;
|
||
4. 已完成的作品和项目经验;
|
||
5. 用户遇到具体问题后再推荐课程、API 或导师服务。
|
||
|
||
首页要回答一个简单问题:「现在最值得做的下一件事是什么?」
|
||
|
||
## 3. 第一阶段要验证的完整流程
|
||
|
||
第一阶段先验证下面这条流程能否真正帮助用户完成项目:
|
||
|
||
```text
|
||
自我认知助手
|
||
-> 生成个人画像
|
||
-> 推荐竞赛、项目和学习方向
|
||
-> 邀请朋友并取得共享许可
|
||
-> 生成双方合作建议
|
||
-> 参加一次真实项目或挑战
|
||
-> 记录项目行为和队友反馈
|
||
-> 复盘并更新个人画像
|
||
```
|
||
|
||
免费自我认知助手可以作为推广入口。
|
||
用户完成报告后,可以分享由自己选择的安全摘要。
|
||
邀请朋友并完成有效合作行为后,可以获得积分。
|
||
积分可兑换深度报告、API 额度、课程优惠或挑战资格。
|
||
|
||
积分奖励绑定报告完成、授权共享、生成合作报告、参加项目和完成复盘等真实行为。
|
||
|
||
## 4. 商业方向
|
||
|
||
平台先提供免费的机会和自我认知服务。
|
||
用户进入项目并遇到真实需求后,再提供付费服务:
|
||
|
||
```text
|
||
赛事和项目机会
|
||
-> 组队并开始合作
|
||
-> 产生 AI 工具和能力需求
|
||
-> 使用 API、课程、训练营或导师服务
|
||
-> 为学校、赛事方和企业提供组织服务
|
||
```
|
||
|
||
可能的收入来源包括:
|
||
|
||
- 面向竞赛团队的模型 API 和工具包;
|
||
- 赛事课程、训练营、作品评审和答辩辅导;
|
||
- 导师、作品评审和项目启动服务;
|
||
- 学校、社团和赛事方的报名、组队与活动管理;
|
||
- 企业命题赛、品牌合作和人才发现。
|
||
|
||
API 和课程在用户进入项目或明确遇到问题后出现,与当前任务直接相关。
|
||
|
||
## 5. 已确定的技术方案
|
||
|
||
| 领域 | 当前选择 |
|
||
| --- | --- |
|
||
| Web | Next.js、React、TypeScript |
|
||
| 业务 API | NestJS + Fastify Adapter |
|
||
| API 形式 | REST API,路径统一以 `/api/v1` 开头 |
|
||
| 数据访问 | Drizzle ORM;复杂查询使用参数化原生 SQL |
|
||
| 主数据库 | PostgreSQL |
|
||
| 向量检索 | PostgreSQL 的 `pgvector` 扩展 |
|
||
| 缓存和任务队列 | Redis |
|
||
| 文件存储 | 阿里云 OSS |
|
||
| 第一阶段部署 | 自有 ECS + Docker Compose |
|
||
| 后续部署 | Kubernetes |
|
||
| 身份系统 | API 内部的 `Identity` 模块 |
|
||
| 初期可用性监控 | Uptime Kuma |
|
||
|
||
AI 助手使用哪家模型、怎样编排对话、是否拆成独立服务,列为后续技术决定。
|
||
当前实现先保留清晰的接口,模型和框架确定后再接入。
|
||
|
||
### 5.1 Web 和 API 如何访问
|
||
|
||
Web 和 API 是两个独立应用,但第一阶段共用一个公网域名:
|
||
|
||
```text
|
||
https://aiwelink.com/ -> Next.js Web
|
||
https://aiwelink.com/api/v1/* -> NestJS REST API
|
||
```
|
||
|
||
入口代理(例如 Nginx)根据路径把请求转给不同容器。
|
||
第一阶段沿用同一个域名,核心业务统一放在 NestJS API 中。
|
||
|
||
### 5.2 API 规则
|
||
|
||
- URL 使用小写短横线,JSON 字段使用 `camelCase`;
|
||
- 使用资源名词和复数路径,例如 `/projects`;
|
||
- 使用标准 HTTP 方法和状态码;
|
||
- 列表优先使用游标分页;
|
||
- 订单、积分发放等容易重复提交的写操作按需支持 `Idempotency-Key`;
|
||
- 错误返回统一格式,并带 `requestId`;
|
||
- 权限由服务端统一检查,前端按钮只负责展示状态;
|
||
- 长时间任务建成任务资源,客户端可以查询任务进度和结果。
|
||
|
||
### 5.3 数据访问规则
|
||
|
||
代码按下面的顺序访问数据库:
|
||
|
||
```text
|
||
Controller
|
||
-> Application Service
|
||
-> Repository Interface
|
||
-> Drizzle Repository 或 SQL Repository
|
||
-> PostgreSQL
|
||
```
|
||
|
||
普通增删改查和事务使用 Drizzle。
|
||
向量相似度、全文搜索、复杂推荐和报表使用参数化 SQL。
|
||
Controller 通过 Repository 访问数据库。
|
||
|
||
### 5.4 数据和文件怎么放
|
||
|
||
用户身份、测评原始回答、AI 生成的画像和项目行为,按敏感程度分开保存。
|
||
公开内容、授权记录也分别管理。
|
||
大表先用索引、归档和 PostgreSQL 分区处理。
|
||
跨数据库分片等数据规模明确后再安排。
|
||
|
||
简历、作品、报告和项目附件放在阿里云 OSS。
|
||
浏览器直接上传,API 负责签发临时凭证、记录文件信息和检查权限。
|
||
私有文件用短期签名 URL 访问,应用容器只负责传输和权限控制。
|
||
|
||
## 6. 代码仓库和文档放在哪里
|
||
|
||
项目使用一个 Git 仓库(Monorepo),计划采用下面的目录:
|
||
|
||
```text
|
||
AIwelink/
|
||
├─ apps/
|
||
│ ├─ web/ # Next.js Web
|
||
│ ├─ api/ # NestJS REST API
|
||
│ ├─ worker/ # 异步任务,AI 助手方案待决定
|
||
│ └─ admin/ # 后续运营后台
|
||
├─ packages/
|
||
│ ├─ contracts/ # OpenAPI、DTO、共享接口
|
||
│ ├─ db/ # Drizzle Schema、迁移、种子数据
|
||
│ ├─ validation/ # 共享数据校验
|
||
│ ├─ ui/ # 跨应用 UI
|
||
│ ├─ config/ # 共享配置
|
||
│ └─ tooling/ # 工程工具配置
|
||
├─ infra/ # Docker、ECS、备份和后续 Kubernetes 配置
|
||
├─ scripts/ # 根目录脚本
|
||
├─ docs/ # 进入 Git 的工程文档
|
||
├─ docs-local/ # 本地临时文档,Git 忽略
|
||
└─ .github/ # 后续 CI/CD 配置
|
||
```
|
||
|
||
文档放置规则:
|
||
|
||
| 内容 | 位置 |
|
||
| --- | --- |
|
||
| 总体架构、技术栈、工程规范 | 根目录 `docs/`,提交到 Git |
|
||
| API 接口和模块实现 | `apps/api/docs/`,提交到 Git |
|
||
| 数据库结构和迁移规范 | `packages/db/docs/`,提交到 Git |
|
||
| Docker、ECS、备份等运维说明 | `infra/docs/`,提交到 Git |
|
||
| 临时需求、草稿和未确认讨论 | `docs-local/`,不提交到 Git |
|
||
| 商业、市场、运营和合作 | 飞书,不复制到 Git |
|
||
|
||
如果商业或运营决定会影响代码,只在 `docs/decisions/` 记录脱敏后的技术结论。
|
||
|
||
## 7. 新成员开始开发前要做什么
|
||
|
||
1. 先阅读本文件和[当前知识与安排](./current-knowledge-and-plan.md)。
|
||
再阅读 `docs/architecture/` 下的技术文档。
|
||
2. 新 API 遵循 `/api/v1` 和资源式 REST 设计。
|
||
3. 新业务模块放在 `apps/api/src/modules/` 对应目录。
|
||
4. 数据库访问统一经过 Repository。
|
||
5. 新的跨模块技术决定写进 `docs/decisions/`。
|
||
6. 商业和运营内容回到飞书维护。
|
||
7. AI 助手方案列为待决定事项。先保留接口和任务范围,模型和框架确定后再接入。
|
||
|
||
## 8. 后续再安排的能力
|
||
|
||
下面这些能力等真实用户和数据出现后再安排:
|
||
|
||
- 微服务拆分;
|
||
- Kubernetes 生产部署;
|
||
- 独立向量数据库;
|
||
- Elasticsearch 或 OpenSearch;
|
||
- ClickHouse;
|
||
- MongoDB;
|
||
- 复杂的机器学习推荐服务;
|
||
- 已经定型的 AI 助手编排框架;
|
||
- 跨数据库分片。
|
||
|
||
当前先验证用户能找到机会、组队并完成项目。
|
||
基础设施的复杂度根据真实数据再增加。
|
||
|
||
## 9. 一句话总结
|
||
|
||
AIwelink 通过真实项目帮助年轻人认识自己、找到合适的机会,并和合适的人把事情做完。
|
||
|
||
技术上先使用模块清楚的单仓库、独立 Web 和 REST API。
|
||
数据使用 PostgreSQL、Redis 和 OSS,第一阶段部署在 ECS + Docker Compose。
|
||
待决定的部分先保留接口,等真实需求出现后再选择。
|