一个基于 Next.js App Router 的可部署 MVP Web App,面向准备报考医学相关研究生的用户,帮助其完成院校筛选、培养模式调研和可解释推荐输出。
.
├── AGENTS.md
├── README.md
├── app
│ ├── admin
│ │ └── page.tsx
│ ├── api
│ │ ├── admin
│ │ │ ├── import
│ │ │ │ └── route.ts
│ │ │ └── weights
│ │ │ └── route.ts
│ │ └── recommendations
│ │ └── route.ts
│ ├── intake
│ │ └── page.tsx
│ ├── results
│ │ └── page.tsx
│ ├── schools
│ │ └── [slug]
│ │ └── page.tsx
│ ├── globals.css
│ ├── layout.tsx
│ └── page.tsx
├── components
│ ├── admin
│ │ └── admin-console.tsx
│ ├── home
│ │ └── feature-grid.tsx
│ ├── intake
│ │ └── intake-wizard.tsx
│ ├── layout
│ │ └── site-shell.tsx
│ ├── results
│ │ ├── comparison-table.tsx
│ │ └── result-card.tsx
│ └── ui
│ ├── badge.tsx
│ └── section-card.tsx
├── database
│ └── schema.sql
├── lib
│ ├── data
│ │ ├── mock-data.ts
│ │ ├── repository.ts
│ │ └── runtime-store.ts
│ ├── recommendation
│ │ └── engine.ts
│ ├── types.ts
│ └── utils.ts
├── next.config.ts
├── package.json
├── postcss.config.js
├── tailwind.config.ts
└── tsconfig.json
Schema 位于 database/schema.sql。
核心表:
users/sessions:为后续登录、收藏、报告历史留接口schools:学校、城市、附属医院、培养模式、平台资源等基础画像programs:具体专业方向、学硕/专硕、招生人数、历史分数范围faculty_groups:科研组 / 团队画像、课题与培养风格mentors:导师画像,不做攻击性评价student_feedback:学生反馈摘要,保留反馈类型、来源与可信度sources:所有信息来源抽象层,标记来源类别与可信度recommendation_runs:推荐输入 / 输出快照weight_rules:推荐权重配置
设计原则:
- 避免把所有信息堆进单表,便于后续扩展采集器、管理后台和 RAG。
- 与 PostgreSQL / Supabase 兼容,数组类字段暂用
jsonb存储。 - 保留
sources表以支持“事实 / 判断 / 个体反馈”分层展示。
/:首页,包含产品简介、功能说明、免责声明和入口/intake:多步骤顾问式问卷/results:冲 / 稳 / 保结果页,支持解释、比较和复制摘要/schools/[slug]:院校详情页,展示画像、科研组、反馈摘要和来源列表/admin:管理后台雏形,支持 JSON 导入和权重调节/api/recommendations:服务端推荐接口/api/admin/import:后台导入接口/api/admin/weights:后台权重查询 / 更新接口
推荐引擎位于 lib/recommendation/engine.ts。
- 硬条件筛选
- 分数不低于历史最低线太多
- 专业方向至少达到基础匹配
- 地区偏好不过度冲突
- 软条件打分
- 分数匹配度
- 科室 / 专业方向匹配度
- 地区偏好匹配度
- 培养模式匹配度
- 科研压力匹配度
- 导师 / 科研组质量
- 学生反馈质量
- 平台资源与附属医院实力
- 录取风险
- 长期发展适配度
- 结果输出
- 综合匹配度
- 冲 / 稳 / 保分类
- 推荐原因
- 为什么不是更高优先级
- 主要风险
- 信息充分度
- 录取概率估算与解释依据
录取概率不是写死值,而是由以下因素共同修正:
- 用户分数在历史区间中的位置
- 招生人数
- 综合匹配度
- 信息完整度
页面明确显示:
录取概率为估算结果,仅供参考,不构成保证。
当前版本使用 lib/data/mock-data.ts 中的种子数据。
- 内置 10 所示例院校
- 覆盖不同城市、区域、平台层级、培养模式和强度
- 提供基础 program / faculty group / mentor / feedback / source 数据
这保证应用开箱即跑,不依赖外部 API 或实时爬虫。
npm installnpm run devnpm run build
npm run start- 导入仓库
- Framework 选择 Next.js
- 配置环境变量
- 首版无需真实数据库也可直接部署
当需要持久化时:
- 在 PostgreSQL / Supabase 中执行 database/schema.sql
- 将
DATABASE_URL写入环境变量 - 把
lib/data/repository.ts逐步替换成数据库查询实现 - 将后台导入和权重配置改为持久化存储
建议按以下顺序扩展:
- 接入 PostgreSQL 持久化
schools / programs / sources / recommendation_runs - 增加后台的数据审核与来源管理工作流
- 增加官方信息采集任务,但必须遵守 robots / 平台规则
- 增加论文 / 基金信息导入
- 增加用户登录、收藏与 PDF 报告导出
- 增加 RAG 和大模型摘要层,但只作为辅助,不替代规则引擎和来源分层
- 当前后台导入和权重更新是“运行时内存版”,重启实例后会恢复默认值。
- 当前示例链接为占位链接,接入真实来源前不要把演示数据当成正式结论。
- 本仓库故意避免实现任何违法违规抓取逻辑。