Medrec RAG 知识库问答平台的前端:AI 智能体管理、知识库与文档管理、流式对话、引用溯源定位 PDF 原文。
后端仓库与完整技术文档:medrec-sys/medrec (RAG 全链路、文档解析、多向量库检索、接口清单等均在后端 README 中说明)
| 分类 | 技术 |
|---|---|
| 框架 | Vue 3.5(<script setup>)、TypeScript 6、Vite 7 |
| 路由 / 状态 | Vue Router 4、Pinia 3 |
| UI | Element Plus 2.9(unplugin-auto-import + unplugin-vue-components 按需自动导入)、Sass |
| 请求 | Axios(常规接口)、原生 fetch + ReadableStream(SSE 流式对话) |
| 内容渲染 | markdown-it + KaTeX(@mdit/plugin-katex) |
| 文档预览 | pdfjs-dist + vue-pdf-embed(按 page / bbox 定位高亮) |
| 其他 | anime.js(登录页动画)、loglevel |
| 菜单 | 路由 | 功能 |
|---|---|---|
| 开始 | /Start |
首页入口 |
| Ai智能体 | /Agent |
智能体增删改查、提示词与检索参数配置、挂载知识库 |
| 知识库 | /Vector |
知识库管理、上传 PDF、文档列表与删除 |
| 对话窗口 | /chat |
与智能体流式对话、检索文档列表、PDF 原文定位 |
| 知识库检索 | /search |
直接进行向量相似度检索并查看命中片段 |
| — | /login、未匹配路径 |
登录页(含动画装饰组件)、404 兜底页 |
- Node.js ≥ 22.12(Vite 7 要求,Dockerfile 使用
node:22.22-alpine) - npm
# 1. 安装依赖(使用 lock 文件精确还原)
npm ci
# 2. 启动开发服务器(默认 http://localhost:5173)
npm run dev前端请求地址目前直接写在代码里,默认指向 http://localhost:9016(与后端 compose 中 9016:8080 的端口映射一致)。若你的后端跑在其他地址,请修改这两处:
| 文件 | 用途 |
|---|---|
src/utils/axios.ts |
Axios 实例的 baseURL(常规接口) |
src/utils/fetch.ts |
原生 fetch 的 http 前缀(SSE 流式对话走这条) |
注意:流式对话用的是原生
fetch,只改axios.ts不会影响对话接口。
登录成功后 JWT 存在 localStorage 的 medrec_token,请求拦截器会自动写入 Authorization 头;路由守卫会在无 token 时跳转登录页。
# 类型检查 + 打包,产物在 dist/
npm run build
# 本地预览打包结果
npm run previewdocker build -t medrec-web:latest .Dockerfile 为多阶段构建:node:22.22-alpine 中 npm ci && npm run build → 产物复制进 nginx:alpine,并使用仓库内的 nginx.conf:
- SPA 路由回退(
try_files ... /index.html); - 带 hash 的静态资源 30 天强缓存与 gzip;
- 附带了可选的同域反向代理配置(已注释):若希望由 Nginx 统一转发
/api/到后端,放开注释并把前端请求地址改为相对路径即可,其中已为流式对话关闭proxy_buffering。
后端仓库的 md-com.yml 中已包含前端服务 md-nginx(使用镜像 medrec-web:latest,端口 9050:80),构建好镜像后与后端一起启动即可:
docker compose -f md-com.yml up -d- 后端(Spring Boot 4 + Spring AI + Qdrant):https://github.com/medrec-sys/medrec