[T.6] 团队项目:技术规格说明书

技术规格说明书

项目 内容
这个作业属于哪个课程 2026 年北航软件工程
这个作业的要求在哪里 [T.6] 团队项目:技术规格说明书
我们在这个课程的目标是 完整参与一套成熟软件的开发过程,提升自己的工程能力和技术能力
这个作业在哪个具体方面帮助我实现目标 凝练团队对多仓库、多服务技术方案的共识;为实现阶段提供统一技术依据与质量出口标准

1. 概念和术语

1.1 术语表

术语 英文 含义
启元知微 本产品名称;面向课程学习的 Web 产品,能力包括:账户与认证、知识检索问答与笔记、题库与模拟考、学习论坛等。
前端子系统 Frontend (Vue SPA) 浏览器内 Vue 3 + Vite 单页应用,通过 REST 与 SSE 调用后端。
后端子系统 Backend (API) FastAPI 异步服务:鉴权、业务规则、MySQL 持久化,对 RAG、LLM、OSS、邮件等的编排。
RAG 子系统 RAG Service / Agent 微服务 独立 FastAPI 进程(默认端口 9000),提供检索与生成链;与 Backend 以 HTTP 契约集成。
知识库 Knowledge Base (KB) RAG 侧可检索数据集的逻辑单元,可与 course_id、目录名 kb 等映射;元数据见 RAG 侧 knowledge_bases/registry.json 等。
课程 Course 业务教学单元,与文档、对话、论坛、试卷等关联。
对话 / 会话 Conversation 用户与助手的多轮线程,落库在 Conversation / Message 等表(以 ORM 为准)。
流式回答 Streaming (SSE) 使用 Server-Sent Events 分块下发生成文本。
远程 RAG 链路 Remote RAG USE_REMOTE_RAG=true 时,Backend 通过 HTTP 调用 RAG 的 /v1/chat/v1/retrieve 等。
本地 RAG 链路 Local RAG USE_REMOTE_RAG=false 时,部分检索/生成在 Backend 与 Chroma 等路径上完成。
题库 Question Bank qb_* 等表及浏览、组卷、模拟考相关。
学习论坛 Forum 帖子、回复、点赞、举报等;FORUM_STUB=true 时为内存桩,仅开发用。
双令牌 Access / Refresh Token JWT 机制中短期 Access 与长期 Refresh 的配合;见 /auth/refresh

1.2 易混淆术语对比

术语 A 术语 B 区别
RAG 仓库的全功能 CLI(app.py 等) RAG HTTP 微服务(src.rag_service.main 前者含图谱、组卷、魔鬼训练等脚本能力;与启元知微 Web 联调的主要是 /v1/* HTTP 契约;二者同仓库、可不同部署单元。
Chroma(Backend 或部署中的向量客户端) RAG 侧内置向量与索引目录 随远程/本地与部署方式而变,本文档不假设唯一物理路径。
知识库(RAG 检索集) 课程(业务实体) 多对多/映射关系;请求里可同时出现 course_idkb_names;见 docs/rag_integration.md
会话(持久化 Conversation RAG 请求中的 history / conversation_id 前者为业务与审计主数据;后者为单次调用上下文,契约字段以后端与 RAG 协商为准。

2. 技术栈

2.1 程序设计语言

子系统 语言与约束 选择理由(概要)
Backend Python 3.12(与 CI 一致;本地可略低但建议对齐) 生态成熟;与 FastAPI、异步 ORM、AI SDK 配合好。
Frontend TypeScript(tsconfig 与 Vue 工程约定) 与 Vue 3 + Vite 配套;提升协作与可维护性。
RAG Python 3.10+(建议与 CI 3.12 对齐) 与 PyTorch/Transformers、Chroma 等库一致。

强约束(建议):Backend 中业务路径保持 async/await 一致;Pydantic v2 模型与 OpenAPI 同步;前端在 CI 中通过 vue-tscvite build

2.2 应用开发框架

类别 选型 版本(以各仓依赖为准) 作用
Web 框架(Backend) FastAPI ^0.115 异步 API、自动 OpenAPI
ORM(Backend) SQLAlchemy 2 异步 + aiomysql ^2.0 / ^0.2 访问 MySQL
迁移(Backend) Alembic ^1.13 表结构版本化
前端框架 Vue 3 + Vite + Vue Router + Pinia Frontend/package.json SPA、构建、状态
RAG 服务 FastAPI + 自研链 RAG/requirements.txt 检索、重排、对话编排
测试 pytest ≥8.0 Backend、RAG 单元/接口测

基础设施依赖:MySQL、Redis、Chroma(视部署);LLM/Embedding 为 OpenAI 兼容 HTTP API(后续可能会更换为本地模型)。

2.3 运行环境

2.3.1 开发环境

要求
Python 3.10+,推荐 3.12 与 CI 一致
Node.js Frontend/package.jsonengines(^20.19.0 或 >=22.12.0;CI 使用 22)
包管理(前端) pnpm
操作系统 Windows / macOS / Linux(团队已用 Windows 开发)
推荐编辑器 VS Code + Python / Vue 插件

2.3.2 用户运行环境

形态 最低要求
浏览器 现代 Chromium / Firefox / Safari;无独立移动端 App 要求
网络 可访问已部署的前端静态资源与后端 HTTPS;RAG/LLM 在服务器侧调用,不强制对用户暴露

2.3.3 测试 / CI 环境

仓库 运行器与步骤(概要)
Backend ubuntu-latest;Python 3.12;pip install -r requirements.txtpytest tests/ -q
RAG 同上;pytest tests/ -q
Frontend ubuntu-latest;pnpm 9 + Node 22;pnpm install --frozen-lockfilepnpm run build(含 type-check

2.4 核心命令

命令(目录) 作用
uvicorn app.main:app --reload(Backend) 启动 API(默认与 README 中端口一致,常见 8080)
alembic upgrade head(Backend) 应用数据库迁移
pnpm dev(Frontend) Vite 开发服务器(常见 5173)
pnpm run build(Frontend) 类型检查 + 生产构建
uvicorn src.rag_service.main:app --port 9000(RAG) 启动 RAG 微服务

3. 软件架构

启元知微是 B/S + 多服务架构:浏览器只访问 Backend 暴露的 HTTPS API 与 SSE;RAG 与 LLM 在服务端侧,不对终端用户直接开放端口;MySQL、Redis 为共享基础设施。

3.1 子系统划分

3.1.1 总体架构图

flowchart LR subgraph client [用户浏览器] FE[Vue SPA] end subgraph server [服务器侧] API[Backend FastAPI] RAG[RAG FastAPI] DB[(MySQL)] RD[(Redis)] end subgraph external [外部] LLM[LLM / Embedding API] end FE -->|HTTPS REST / SSE| API API --> DB API --> RD API -->|HTTP 契约| RAG RAG --> LLM

文字化分层(自顶向下:用户可见 → 基础依赖):

层次 说明
展示层 Vue 页面、组件、Pinia、路由
应用 API 层 Backend app/api/v1/endpoints
业务与编排 Backend app/services;RAG 侧链路与路由
数据与状态 ORM 模型、MySQL;Redis 缓存/预留
智能与检索 RAG 检索器、重排、Prompt;外部 LLM

3.1.2 各子系统的功能任务

# 子系统 代码路径 / 说明 功能任务
1 前端子系统 Frontend/src 路由、鉴权前 UI、SSE 消费、论坛与题库、静态资源构建
2 后端子系统 Backend/app 用户/课程/对话/论坛/题库等业务;JWT;调用 RAG;OpenAPI
3 RAG 子系统 RAG/src/rag_service + src/* 链路基座 healthretrieve、chat 与流式;索引构建 CLI 可独立运行
4 基础设施 运维 MySQL、Redis、(可选)对象存储、反向代理/网关

3.1.3 子系统间的关系与工作模式

  • 前端仅与 Backend 的 API_V1_PREFIX(默认 /api/v1)通信。
  • Backend 按 USE_REMOTE_RAG 选择 HTTP 调 RAG 或本地检索路径;RAG 再调用 LLM。
  • 契约见 docs/rag_integration.md;可选请求头 X-RAG-API-KEYRAG_SERVICE_API_KEY 对齐。

分层依赖原则(与 Backend README 一致):

  • Endpoint 薄、Service 厚:业务规则在 services,不在 endpoints 堆叠。
  • 前端不直连 RAG、不直连 MySQL。
  • RAG 的 HTTP 面 与 CLI/批处理 解耦,避免把运维脚本与线上请求路径混为一谈。

3.2 各子系统内部模块

3.2.1 模块清单与功能任务

Backend

层次 主要路径 功能任务
API app/api/v1/endpoints 参数校验、鉴权、响应组装
业务 app/services 用例、事务、RAG/邮件/OSS 编排
模型 app/models ORM 与表
数据访问 app/db 引擎、Session、迁移入口配合
横切 app/core 配置、安全、Redis、日志配置
RAG 适配 app/rag 与远程 RAG 或本地管线的对接

RAG

层次 说明 功能任务
HTTP src/rag_service/api/routes/v1 版本化 API:health、kb、retrieve、chat / stream
编排与链 rag_chainservices Prompt、流式封装、与检索器组合
算法与数据 hybrid_retrievervector_store、embeddings 等 可独立单元测试
CLI/工具 build_index.pyapp.py 建索引、交互学习;不与 Web 产品一一对应

Frontend

区域 功能任务
src/views 首页、知识问答、论坛、题库、认证等页面
src/components 布局、论坛、题库等可复用块
src/api Axios 封装
src/stores Pinia(如 auth
src/router 导航守卫、登录弹窗等

3.2.2 设计原则在代码中的体现

原则 落地方式(概要)
抽象 Pydantic / TS 类型描述 API 与 DTO;RAG 契约在 rag_integration.md 固化。
内聚/耦合/模块化 按域划分 servicesendpoints;RAG 链路与路由分离。
信息隐藏 通过 Settings 与环境变量隐藏密钥;OSS 等可选能力用开关。
界面与业务分离 Vue 不直连 DB/RAG;Backend endpoint 不写复杂规则。
系统错误记录 Python logging;不向日志写密钥与全文密码。
应对需求变化 ENABLE_*FORUM_STUB 等 feature flag;API /v1 版本前缀。

4. 软件设计和实现

4.1 功能点与代码编写任务

按优先级 P0(发布 MVP 必做或已为核心路径)→ P1(增强与工程化)→ P2(后续)排序,与当前代码状态对齐,随迭代在 PR 中更新本表。

优先级 功能 涉及位置(参考)
P0 全栈 用户注册/登录/刷新 Token、个人资料 auth endpoints & services;Frontend 登录注册
P0 全栈 知识问答:非流式/流式、历史会话、删除 knowledge + RAG 客户端;KnowledgeQA.vue
P0 工程 三仓 CI 绿(Backend/RAG pytest;Frontend build 各仓 .github/workflows/ci.yml
P0 运维 可复现的部署说明:.env、迁移、RAG 端口、LLM README、本说明书 §7
P1 全栈 学习论坛真库联调(关闭 Stub、迁移 forum_* forumFORUM_* 配置
P1 全栈 题库浏览与模拟考路径稳定 question_bankviews/bank/*
P1 工程 集成测试或 docker compose 一键起全栈 待补充脚本 / tests/
P1 工程 契约测试(RAG/ OpenAPI 漂移防护) CI 或独立任务
P2 前端 E2E(Playwright 等)关键路径 待引入
P2 产品 课程/文档全链路、笔记生成增强、运营工具 ENABLE_* 与需求

4.2 系统文档编写清单

文档 详细程度
本《技术规格说明书》 子系统、技术栈、架构、测试与出口、风险、部署
docs/功能文档.md 功能与页面级需求(非本说明书重复展开)
各仓 README.md 安装、环境变量、核心命令
docs/rag_integration.md Backend 与 RAG 之间请求/响应与错误约定
docs/database.md、Alembic 版本 表结构说明与变更历史
OpenAPI / *.openapi.json HTTP 契约;线上 /api/v1/docs 可交互
实现后补充 详细逻辑说明可落在 PR 说明 + 关键函数 docstring;不强制与代码重复的独立长篇文档

4.3 功能的详细逻辑设计

按课程要求,本节在规格阶段不做细表化,将在实现阶段以源码、docs/功能文档.md 更新、PR 描述共同固化。建议形式:关键算法以函数 + 注释;多轮/流式状态机在 service 中注明;RAG 与后端的字段映射在 rag_integration.md 同步。

4.4 数据库和 API 接口设计

本节在规格阶段不做逐字段展开。权威来源:

  • 表结构:alembic/versions + docs/database.md
  • REST 契约:OpenAPI 与 rag_integration.md(RAG 子域)

特殊情况说明:启元知微有中心数据库 MySQL 与对外 API(Backend /api/v1);RAG 为内网/服务间 HTTP,不面向浏览器公网直调。

4.5 输入假设与异常处理

输入来源 假设 不满足时的处理
浏览器请求 符合 OpenAPI 与大小/类型 约束 4xx + 明确 message
鉴权 合法 JWT;权限与角色与 endpoint 要求一致 401/403
下游 RAG/LLM 可连、在超时内返回;密钥有效 记录日志;504/502 或业务降级文案;慎对 POST 自动重试
邮件 SMTP 配置正确、网络可达 注册验证码失败时提示,不在响应中暴露 SMTP 原文错误
论坛 Stub 与真库 FORUM_STUB 与迁移状态一致 避免生产误开 Stub 导致数据不持久;文档与 checklist 标红

业务流程层面:LLM 输出可能幻觉,产品侧在 功能文档 或界面承担非绝对事实提示;UGC 论坛需举报与封禁等流程与人工策略配合。


5. 软件测试和性能量度

5.1 测试计划

5.1.1 测试设计总览

层级 目的 执行者
单元测试 隔离模块:工具、RAG 客户端、校验逻辑等 CI 自动
集成测试 Backend + MySQL + Redis + RAG + LLM 替身或沙箱 CI 或定时(待加强)
压力测试 只读 API 与并发;RAG+LLM 全链路的容量与限流 预生产,k6 / Locust 等
真实/探索性测试 注册、问答、论坛、题库手测 每迭代/发布前
安全与健壮性 鉴权绕越、RAG 密钥、SQL 注入面(由 ORM 减轻)等 发布前检查清单

5.1.2 单元测试

模块/方向 重点内容 目标(可随项目提高)
Backend RAG HTTP 客户端错误与超时、鉴权辅助 核心路径覆盖逐步提升
RAG /v1/health、请求体验证 tests/ 现状一致并扩展
Frontend 组件/组合式函数 待引入 Vitest 等后设阈值;当前以 type-check + build 为闸

整体覆盖率:建议在 Beta 前设定团队阈值(如行覆盖 ≥50% 起步,随迭代提高);以不降低 CI 绿为前提。

5.1.3 压力测试

启元知微为在线多用户系统,压力测试包含:

场景 测量指标 具体压力指标(初定通过线,须环境标定后更新)
无 LLM 的只读 API P95 延迟、错误率 例:P95 ≤ 500 ms、并发 ≥ 50(内网、SSD、局域 DB,无重负载 LLM)
SSE / 长连接 同时在线连接数、首字延迟 受 RAG/LLM 与反向代理超时限制,以不大量 504 为底线
RAG+LLM 全链路 吞吐、429/5xx 比例 以供应商限额为硬顶,不虚构「本机 QPS=模型能力」

说明:终版数字写在压测报告(可放 docs/ 或 Wiki),本说明书只保留维度与方法。

5.1.4 真实测试

类型 具体细节 频率
功能走查 注册→登录→问答(流式/非流式)→论坛或题库至少一条 每里程碑 / 发版前
多浏览器 Chrome / Edge / Firefox 各一 大版本发版前
兼容性 新迁移部署后,旧数据可读与回滚演练 有 DB 大改时

5.2 软件性能

5.2.1 性能量度方式

指标 目标/关注点 测量方式
API 可用性 探活、5xx 比例 /health、网关统计
延迟 P50 / P95 APM 或 Nginx/网关日志
对话体验 首包、整答完成时间 前端与(可选)后端 timing
资源 CPU/内存、MySQL 连接数、RAG GPU/显存 系统监控、容器指标

环境声明:低于基准配的环境「能跑」即可,不与教学服务器 SLA 强绑定,但须在说明书中诚实写清。

5.2.2 能力边界

维度 边界 依据
并发与延迟 瓶颈常在 LLM/嵌入 API 限额与网络 非仅 CPU
单节点 RAG(本地大模型) 显存/内存为硬顶;并发排队 可水平加 RAG 副本(需无状态与负载均衡)
多轮长上下文 Token 成本与超时风险上升 限轮数、截断、摘要(产品策略)
论坛 UGC 需举报、审计扩展;不替代内容审核政策 合规与运营

5.3 出口条件

阶段 发布条件
Alpha 三仓 CI 通过;Backend + RAG 健康检查可用;核心路径手测(注册/登录+至少一种问答方式);.env 无默认秘钥检查清单;迁移 Alembic 已应用或文档说明
Beta 论坛/题库等本版本范围内功能在真数据上可用(非 Stub 则已关 Stub);RAG 契约与 rag_integration.md 一致;压测初稿或至少并发冒烟通过;已知 P0 缺陷已修复或书面豁免
Release 回归与多浏览器手测;回滚演练;依赖安全扫描与修复计划;监控/日志可达;文档与版本号同步

说明:压力指标终版可作为 Release 强化条件,由团队自行决定是否绑死。


6. 技术风险识别和评估

概率:高 / 中 / 低(未来可能发生);已发生 = 已观察到的现状。
严重度:高 = 阻塞发布或重大体验问题;中 = 部分功能或返工;低 = 可接受或易缓解。

风险 严重度 概率 应对
外部 LLM/Embedding 不可用或涨价 多 Key/多供应商、限流、缓存检索结果、降级提示
Backend 与 RAG 契约漂移 契约测试;PR 同时改代码与 rag_integration.md;保留 /v1
向量维/模型更换导致检索质量崩 BM25 回退、重建索引流程、文档化
MySQL 单点/连接池耗尽 连接池、限流、读写分离(后期)
自动化测试偏少 已发生 扩展 pytest、集成测、E2E 路线图见 §4.1 P2
密钥进入仓库或日志 秘钥管理、.gitignore、日志脱敏、PR 检查
论坛垃圾/攻击 限流、验证码、举报、WAF/网关(运维)

7. 软件部署和维护

7.1 部署环境

目标单元 运行环境 产物 / 说明
前端 静态 HTTP(S) 托管;Nginx / OSS+CDN / 任意静态站 pnpm run build 产出 dist/
Backend Linux 服务器 / 容器;前置 Nginx/网关 终止 TLS uvicorn 或 gunicorn+uvicorn workers;镜像见团队 ACR
RAG 与 Backend 同网段或内网可路由;算力独立为佳 容器或裸机;端口 9000(可配置)
MySQL / Redis 云 RDS 或自建 与 Backend 同区降延迟
配置 环境变量、.env 不提交 SECRET_KEYDATABASE_URLRAG_SERVICE_API_KEY

7.2 部署流程

git push
    → 触发 GitHub Actions(各仓 test / build)
    → 通过后可由 deploy workflow 构建/推送镜像(以各仓 `deploy.yml` 为准)
    → 服务器上 docker pull + compose 或等效
    → 健康检查 + Alembic migrate
    → 对外灰度/全量

启元知微三服务(前端静态 + Backend + RAG + DB)的实际 compose 与 .env 以服务器目录为真源(参见 Backend/deploy.example 等说明)。

7.3 运行与维护

  • 日志:应用 stdout/结构化日志;生产级别以 ERROR/WARN 为主定位故障;不含秘钥。
  • 用户反馈与缺陷:Issue/项目管理工具由团队定。
  • 可复现:RAG/对话问题可记录时间、用户、conversation_id、请求 ID(若引入)协助排查。
  • 文档同步:本技术设计文档与代码同步更新;修改按课程要求通知全员(见文首说明)。
  • 备份与迁移:MySQL 定期全量+增量;RAG 索引可由文档与 build_index 重建时,在运维手册写明。

修订记录

日期 版本 作者 变更摘要
2026-04-07 0.1 团队 初稿(三仓架构、工程与质量)
2026-04-22 0.2 团队 按课程模板重排;产品名启元知微
posted @ 2026-04-22 20:39  HakimiSN  阅读(11)  评论(0)    收藏  举报