Zhiyuan Song
← 返回首页

AI 学习助手

将课程与教辅材料转为可检索、可生成、可测验的个性化学习流:多格式文档处理与分段、基于 pgvector 的语义检索与关联推荐、OpenAI 驱动的翻译/摘要/术语表与闪卡扩展,并规划模拟考试(多题型、评分与进度)与学术诚信侧的来源追踪、审计与权限模型。

实现细节、环境变量与接口以 GitHub 仓库 README 与 docs/ 为准;下列内容为站内策展摘要,并收录系统架构、数据流、数据模型与分阶段路线图(与 docs/ARCHITECTURE.md / ROADMAP.md 对齐,以仓库为准)。

核心特性

智能文档处理

  • 支持 PDF、PPT、TXT 等格式
  • 自动分段与内容抽取
  • OCR 识别扫描件
  • 表格与公式解析(能力随迭代增强)

AI 内容生成

  • 基于选中片段的智能翻译
  • 学习总结自动生成
  • 术语表与闪卡
  • 上下文相关的知识扩展

向量语义搜索

  • PostgreSQL pgvector 语义检索
  • 跨文档关联与个性化推荐

模拟考试(规划 / 开发中)

  • 基于学习材料出题(选择、填空、简答等)
  • 自动评分与反馈、学习进度分析

学术诚信与合规

  • 内容来源追踪
  • 诚信检查与审计日志
  • 权限与访问控制

快速开始

环境要求:Node.js 18+;PostgreSQL 15+(含 pgvector);Redis 6+;对象存储(如 MinIO,与 S3 兼容);进程管理可选 PM2。

1. 安装

git clone https://github.com/songzhiyuan98/study-assistant.git
cd study-assistant
pnpm install   # 若仓库锁定为 npm,请以 README 为准

2. 配置环境

cp packages/db/.env.example packages/db/.env
# 编辑 packages/db/.env

常用变量:DATABASE_URL(PostgreSQL)、OPENAI_API_KEYNEXTAUTH_SECRET 等;完整列表见仓库示例文件。

3. 数据库

npm run docker:up      # PostgreSQL、Redis、MinIO 等(以 package.json 脚本为准)
npm run db:migrate
npm run db:seed

4. 开发服务

npm run dev

浏览器访问 http://localhost:3000(端口以本地配置为准)。

使用流程(产品侧)

  1. 注册账户(邮箱或 Google OAuth)
  2. 创建文件夹,按课程或主题整理文档
  3. 上传 PDF / PPT / TXT
  4. 在文档中选中需要学习的段落
  5. 生成翻译、总结、闪卡等 AI 内容
  6. (路线图)基于材料创建模拟考试并查看进度

功能进度

以下「当前快照」更新节点为 2025-09-08;与仓库 ROADMAP.md 冲突时以仓库为准。

当前快照(2025-09-08)

已完成:

  • 数据库基础设施:PostgreSQL + pgvector + Prisma
  • 认证:NextAuth.js(凭证 / OAuth)与中间件保护
  • 文件夹组织:用户级文档分类与管理
  • 文件上传:MinIO 存储 + API 集成(含 Bug 修复闭环)

进行中:PDF / TXT 解析管道——文档内容提取与分段。

完成度(规划口径):第 1 阶段约 67%(4/6 项主任务);总体约 22%(4/18 项主任务)。

能力矩阵(简表)

功能 状态 说明
文件夹管理 已完成 多层级文档组织
用户认证 已完成 邮箱 / Google OAuth
PDF 处理 开发中 文本提取与分段
AI 翻译 计划中 多语言
考试系统 计划中 自动出题与评分

技术架构

前端

  • Next.js 14 + React 18
  • TypeScript
  • Tailwind CSS
  • Zustand + React Query
  • NextAuth.js

后端与数据

  • API:Fastify
  • 数据库:PostgreSQL + pgvector(向量索引如 IVFFLAT)
  • ORM:Prisma
  • 队列:BullMQ + Redis
  • 对象存储:MinIO / S3 兼容

AI

  • 模型:OpenAI GPT-3.5 / 4 系列
  • 嵌入:text-embedding-ada-002(或后续模型,以配置为准)
  • 检索:pgvector

系统架构设计

架构概述

学习助手采用现代模块化 Monorepo:Web 与 API 解耦,重任务走队列 + Worker,文件走对象存储,结构化与向量数据进 PostgreSQL,长耗时推理与嵌入调用外部 AI。形态上接近微服务协作,部署上可按进程/容器水平扩展。

用户 → Web 前端 → API 服务(Fastify) → PostgreSQL(业务 + 向量)
                    │
                    ├→ Redis 队列(BullMQ)→ 后台 Worker(ingest / generate / export)
                    │
                    ├→ MinIO / S3(原始文件与导出物)
                    │
                    └→ OpenAI 等(嵌入与生成)

数据流设计

1. 文件上传与处理

  1. 用户上传 → Web 前端
  2. 前端调用 API → 对象存储写入 MinIO / S3
  3. API 写入业务记录 → 投递摄取任务到队列
  4. Worker:解析 / 分段 → 生成向量嵌入 → 写回数据库
  5. 更新讲义 / 段落处理状态,供前端轮询或推送展示

2. 内容生成与学习

  1. 用户在阅读器中选中段落 → 创建 Selection 记录
  2. 请求生成 → 投递 AI 任务(带上下文与来源引用)
  3. Worker 调用 OpenAI → 生成翻译 / 摘要 / 闪卡等
  4. 结果落库(含 payloadJsonsourceRefs)→ 通知或拉取展示

数据模型设计

核心实体关系(概念)

USER(用户)
├── FOLDER(文件夹)
│   └── LECTURE(讲义 / 文档)
│       └── SEGMENT(段落,含向量嵌入)
├── SELECTION(用户对段落的选择)
│   └── ITEM(生成内容:翻译、总结等)
└── EXAM(考试,路线图中)
    └── EXAM_ATTEMPT(作答记录)

关键字段(摘要)

实体 要点
User id、邮箱、姓名、密码(可选)、角色(RBAC)
Folder id、名称、描述、userId
Lecture idfolderId、标题、fileUrl、类型、处理 status
Segment idlectureId、正文、embedding(向量)、页码 / 锚点
Selection iduserIdlectureIdsegmentIds[]
Item idselectionId、类型、payloadJsonsourceRefs

组件边界

前端(Next.js App Router)

app/web/src/
├── app/
│   ├── (auth)/           # 登录注册等
│   ├── dashboard/        # 控制台
│   ├── upload/           # 上传
│   ├── library/          # 文档库
│   └── api/              # Next.js Route Handlers(若存在)
├── components/
│   ├── ui/               # 基础 UI
│   ├── forms/
│   └── layout/
├── lib/
└── providers/

后端与 Worker

app/
├── api/                  # Fastify:routes、plugins、middleware
├── workers/              # BullMQ:ingest、generate、export 等
└── sidecar/              # 可选:Python OCR 等独立服务

向量检索链路

语义搜索流程

  1. 查询:用户输入 → 文本嵌入(如 OpenAI ada-002 系列)
  2. 检索:pgvector + IVFFlat(或其它索引策略)做近似最近邻
  3. 排序:余弦相似度 → 取 Top-K 段落
  4. 后处理:去重、过滤、权限校验 → 返回片段列表

参数与策略(目标口径)

  • 索引:IVFFlat;距离:余弦
  • 维度:1536(与 ada-002 一致;若换模型需同步维度)
  • 相似度阈值:例如 ≥ 0.8(可调)
  • 默认 Top:约 10 条相关段落

权限与审计设计

RBAC 角色(目标)

  • ADMIN:系统与用户管理、审计日志
  • INSTRUCTOR:课程内容管理、学生进度查看
  • STUDENT:个人文档与生成内容访问

审计与合规

  • 记录关键 CRUD 与 AI 调用(可检索、可导出)
  • 保留策略:例如活跃期 6 个月 + 归档 2 年(以最终实现为准)
  • 学术诚信报告、个人数据访问日志(隐私侧)

异步处理队列(BullMQ)

任务类型(示例命名)

  • document:ingest — 文档摄取与解析
  • content:generate — AI 内容生成
  • export:data — 导出
  • cleanup:files — 清理
  • vector:index — 向量索引更新

优先级与并发

  • 高:用户交互触发的生成
  • 中:文件摄取与分段
  • 低:清理与维护
  • 各任务类型独立并发上限,避免互相挤占

可观测性、SLO 与 API

目标 KPI(设计口径)

  • API 响应:P95 级 < 200 ms(轻接口);首屏 < 3 s
  • 文档摄取:目标 < 30 s / 文档(体量相关)
  • AI:GPT 类交互 < 5 s 量级;嵌入 < 2 s 量级
  • 并发:100+ 同时在线用户(水平扩展后)
  • 可用性目标:99.9% SLA(生产阶段)

监控技术栈(规划)

  • 链路 / 指标:OpenTelemetry
  • 时序:Prometheus;看板:Grafana
  • 日志:ELK 或等价托管方案
  • 告警:PagerDuty 或团队现有 On-call 工具

API 原则

  • RESTful;版本路径如 /api/v1/
  • 统一 JSON 响应与错误码;认证:JWT Bearer

关键端点(摘要)

POST /api/auth/register
POST /api/auth/login
GET  /api/auth/session

POST /api/lectures
GET  /api/lectures/:id
GET  /api/folders

POST /api/selections
POST /api/items/generate
GET  /api/items/:id

仓库目录结构(摘要)

study-assistant/
├── app/
│   ├── web/          # Next.js 前端
│   ├── api/          # Fastify API
│   └── workers/      # 后台 Worker
├── packages/
│   ├── db/           # Prisma 与迁移
│   ├── shared/
│   └── ui/
├── docs/             # ROADMAP、ARCHITECTURE、OPERATIONS 等
└── CLAUDE.md         # AI 协作说明(若保留)

开发路线图

周次为规划节奏;勾选状态以仓库最新提交与 ROADMAP 为准。

第 1 阶段:基础建设(约第 1–2 周)

目标:核心文档处理管道 + 基础内容生成闭环。

第 1 周(基础设施)

  • Monorepo 环境(已完成)
  • PostgreSQL + pgvector(已完成,2025-09-08)
  • NextAuth 基础认证(已完成,2025-09-08)
  • 文件上传与 MinIO / S3(已完成,2025-09-08)
  • 当前焦点:PDF / TXT 解析管道(Node.js)
  • 文档分段与锚点

第 2 周(选择与生成)

  • PDF.js 阅读器与文本选择、段落管理
  • BullMQ 队列落地
  • 基础 AI 翻译与总结
  • 向量嵌入与相似检索、生成结果审阅 UI
  • 文件夹组织(已完成,2025-09-08)

第 2 阶段:功能增强(约第 3–4 周)

目标:高级文档能力与考试系统 MVP。

第 3 周:PPTX、OCR(Python sidecar)、双栏论文布局、表格 / 公式、向量侧边栏、导出(Markdown、CSV、Anki 等)。

第 4 周:考试蓝图、基于证据的出题、考试播放器与计时、自动评分与 rubric、性能分析与错题改进建议。

第 3 阶段:生产就绪(约第 5–6 周)

目标:安全、性能与部署。

第 5 周:学术诚信策略、全链路审计、RBAC、成本与 token 预算、加密与隐私、合规报告。

第 6 周:OpenTelemetry、缓存与性能、Docker / K8s 清单、CI/CD、错误追踪与告警、生产部署模板。

下一步行动(摘录)

  • 实现 PDF 文本提取(PDF.js 或 pdf-parse 等选型)
  • PPTX 解析方案(如专用库 / 服务端转换)
  • TXT 编码检测与读取
  • 分段策略与锚点模型设计
  • 内容预处理管道编排(与队列任务类型对齐)

本文档与站内策展在每次主要功能交付后应同步更新进度与时间表调整。

常用命令

npm run dev          # 本地开发
npm run build        # 生产构建
npm run test         # 测试

npm run db:migrate   # 迁移
npm run db:seed      # 种子数据
npm run db:studio    # Prisma Studio

npm run lint
npm run type-check
npm run format

脚本名以仓库根目录 package.json 为准。

贡献与许可

Fork 本仓库 → 功能分支 → 提交 → Push → 发起 Pull Request;规范见 CONTRIBUTING.md

文档索引:docs/ROADMAP.mddocs/ARCHITECTURE.mddocs/OPERATIONS.md、API 说明、CHANGELOG、CLAUDE 协作指南等。

License:MIT。

致谢:Next.js、Prisma、pgvector、OpenAI 等开源与服务商。