SmartPaperAI 是一个现代化的学术论文智能分析与知识管理系统,采用前后端分离架构开发。系统集成了 RAG(Retrieval-Augmented Generation)检索增强生成技术,为用户提供智能化的论文阅读、分析、管理和知识问答服务。
- 📚 学术研究者:快速分析海量论文,提取关键信息
- 🎓 研究生/博士生:文献综述、论文写作辅助
- 👨🏫 高校教师:教学案例管理、知识库构建
- 🏢 科研团队:知识共享、团队协作
- 📖 文献管理:个人/团队文献库管理
- RAG 检索增强生成:结合向量检索与 LLM 生成,提供精准的知识问答
- 知识图谱可视化:基于 ECharts 的交互式知识图谱,展示文档、概念、作者等关系
- 流式响应:实时流式输出 AI 对话内容,提升用户体验
- 智能分析:多维度论文分析(摘要、对比、创新点、文献综述)
- 现代化 UI:基于 Element Plus 的精美界面设计
- 响应式布局:完美适配桌面、平板、移动端
- Markdown 渲染:支持富文本、代码高亮、数学公式
- 实时反馈:加载状态、进度条、错误提示
- Token 认证:JWT 令牌机制保护 API 安全
- 请求拦截:统一的请求/响应拦截处理
- 错误处理:完善的异常捕获与用户提示
- ✅ 多格式支持:PDF、DOCX、TXT 等学术文档上传
- ✅ 智能解析:自动提取文档标题、作者、摘要等元信息
- ✅ 批量操作:批量上传、批量删除、批量分类
- ✅ 状态追踪:解析中、已完成、失败等状态实时显示
- ✅ 文档预览:在线预览文档内容
- ✅ 标签分类:自定义标签管理文档
- ✅ 知识库创建:构建主题化知识库
- ✅ 文档关联:将文档关联到知识库
- ✅ 权限管理:公开/私有知识库设置
- ✅ 统计信息:文档数量、创建时间等统计
- ✅ 搜索过滤:快速定位目标知识库
- ✅ 上下文记忆:多轮对话保持上下文
- ✅ 会话管理:创建、删除、清空历史
- ✅ 流式输出:逐字显示 AI 回复
- ✅ 快速提问:预设问题快速开始对话
- ✅ RAG 增强:可选启用检索增强生成
- ✅ 参数调节:温度、Token 数、相似度阈值自定义
- ✅ 文档级问答:针对单个文档提问
- ✅ 知识库问答:跨文档检索回答
- ✅ 引用来源:答案附带原文引用片段
- ✅ 相关度评分:显示引用来源的相关度
- ✅ 知识图谱增强:利用图谱关系提升答案质量
- 核心内容提取:研究背景、方法、结论
- 关键词识别:自动提取论文关键词
- 创新点分析:识别论文创新点
- 进度显示:实时分析进度条
- Markdown 导出:一键导出分析报告
- 多维度对比:研究方法、实验设计、结果对比
- 差异分析:识别论文间的异同点
- 优劣势评估:对比各论文的优缺点
- 对比矩阵:结构化展示对比结果
- 创新点提取:批量提取多篇论文创新点
- 主题聚类:相似创新点自动分组
- 趋势分析:识别研究领域热点
- 可视化展示:图表形式呈现聚类结果
- 综合分析:跨论文综合分析
- 研究脉络:梳理研究发展脉络
- 研究空白:发现未被充分研究的领域
- 综述生成:自动生成文献综述报告
- ✅ 全局知识图谱:展示所有文档的知识关系
- ✅ 文档知识图谱:单个文档的内部关系
- ✅ 知识库图谱:知识库内文档间关系
- ✅ 交互式探索:节点拖拽、缩放、高亮
- ✅ 多类型节点:概念、文档、作者等
- ✅ 关系权重:边的粗细表示关系强度
- ✅ 统计信息:节点数、关系数、孤立节点数
- ✅ 案例创建:创建教学案例
- ✅ 案例编辑:富文本编辑器
- ✅ 分类管理:按学科、类型分类
- ✅ 关联文档:案例关联相关文档
- ✅ 搜索检索:快速查找案例
| 技术 | 版本 | 说明 |
|---|---|---|
| Vue 3 | ^3.5.22 | 渐进式 JavaScript 框架 |
| TypeScript | ^5.x | 类型安全的 JavaScript 超集 |
| Vite | ^6.0.1 | 下一代前端构建工具 |
| Vue Router | ^4.5.1 | Vue.js 官方路由管理器 |
| Pinia | ^3.0.3 | Vue 3 状态管理库 |
| 技术 | 版本 | 说明 |
|---|---|---|
| Element Plus | ^2.11.5 | 基于 Vue 3 的组件库 |
| ECharts | ^6.0.0 | 数据可视化图表库 |
| Sass | ^1.x | CSS 预处理器 |
| 技术 | 版本 | 说明 |
|---|---|---|
| Marked | ^16.4.1 | Markdown 解析器 |
| Highlight.js | ^11.11.1 | 代码语法高亮 |
| Mammoth | ^1.11.0 | DOCX 文档解析 |
| 技术 | 版本 | 说明 |
|---|---|---|
| ESLint | ^9.33.0 | 代码质量检查 |
| Prettier | ^3.x | 代码格式化 |
| Vue TSC | ^2.x | Vue 3 TypeScript 支持 |
| OXLint | latest | 快速代码检查 |
| 技术 | 版本 | 说明 |
|---|---|---|
| Axios | ^1.12.2 | 基于 Promise 的 HTTP 客户端 |
┌─────────────────────────────────────────────────────────────┐
│ 前端应用层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 文档管理 │ │ 知识库 │ │ 智能对话 │ │ 智能分析 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 知识图谱 │ │ 教学案例 │ │ 用户中心 │ │ 系统设置 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
↕ HTTP/REST API
┌─────────────────────────────────────────────────────────────┐
│ API 网关层 │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ 请求拦截 │ │ 响应拦截 │ │
│ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
↕
┌─────────────────────────────────────────────────────────────┐
│ 后端服务层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 文档服务 │ │ RAG 服务 │ │ AI 对话 │ │ 分析服务 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
↕
┌─────────────────────────────────────────────────────────────┐
│ 数据层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ MySQL │ │ 向量数据库│ │ Redis │ │ MinIO │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
- Node.js: ^20.19.0 或 >=22.12.0
- npm: 8.x 或以上
- 现代浏览器: Chrome 90+, Firefox 88+, Safari 14+
git clone https://github.com/yourusername/smartPaperAi.git
cd smartPaperAinpm install编辑 src/config/index.ts 配置后端 API 地址:
export const config = {
// API 基础地址
apiBaseUrl: 'http://localhost:8080', // 修改为你的后端地址
// Token 存储键
tokenKey: 'smart-paper-token',
// 用户信息存储键
userInfoKey: 'smart-paper-user',
// 请求超时时间(毫秒)
timeout: 30000
}npm run dev浏览器访问:http://localhost:5173
npm run build构建产物位于 dist 目录。
smartPaperAi/
├── public/ # 静态资源
├── src/
│ ├── api/ # API 接口定义
│ │ ├── analysis.ts # 分析相关 API
│ │ ├── chat.ts # 对话相关 API
│ │ ├── document.ts # 文档相关 API
│ │ ├── knowledge.ts # 知识库相关 API
│ │ ├── knowledgeGraph.ts # 知识图谱 API
│ │ └── teaching.ts # 教学案例 API
│ │
│ ├── assets/ # 资源文件
│ │ ├── base.css # 基础样式
│ │ └── main.css # 主样式
│ │
│ ├── components/ # 公共组件
│ │ ├── HelloWorld.vue
│ │ └── icons/ # SVG 图标组件
│ │
│ ├── config/ # 配置文件
│ │ └── index.ts # 全局配置
│ │
│ ├── layouts/ # 布局组件
│ │ └── MainLayout.vue # 主布局
│ │
│ ├── router/ # 路由配置
│ │ └── index.ts # 路由定义
│ │
│ ├── stores/ # 状态管理
│ │ └── counter.ts # 示例 Store
│ │
│ ├── types/ # TypeScript 类型定义
│ │ └── index.ts # 全局类型
│ │
│ ├── utils/ # 工具函数
│ │ ├── format.ts # 格式化工具
│ │ └── request.ts # HTTP 请求封装
│ │
│ ├── views/ # 页面组件
│ │ ├── analysis/ # 智能分析模块
│ │ │ ├── InnovationClusterView.vue
│ │ │ ├── LiteratureReviewView.vue
│ │ │ ├── PaperComparisonView.vue
│ │ │ └── PaperSummaryView.vue
│ │ │
│ │ ├── chat/ # 对话模块
│ │ │ └── ChatView.vue
│ │ │
│ │ ├── document/ # 文档管理模块
│ │ │ └── DocumentView.vue
│ │ │
│ │ ├── knowledge/ # 知识库模块
│ │ │ └── KnowledgeBaseView.vue
│ │ │
│ │ ├── knowledge-graph/ # 知识图谱模块
│ │ │ └── KnowledgeGraphView.vue
│ │ │
│ │ ├── rag/ # RAG 问答模块
│ │ │ └── RagChatView.vue
│ │ │
│ │ ├── teaching/ # 教学案例模块
│ │ │ └── TeachingPlanView.vue
│ │ │
│ │ ├── AboutView.vue # 关于页面
│ │ ├── HomeView.vue # 首页
│ │ ├── LoginView.vue # 登录页
│ │ └── NotFoundView.vue # 404 页面
│ │
│ ├── App.vue # 根组件
│ └── main.ts # 应用入口
│
├── .gitignore # Git 忽略配置
├── env.d.ts # 环境变量类型定义
├── eslint.config.ts # ESLint 配置
├── index.html # HTML 模板
├── package.json # 项目依赖
├── README.md # 项目说明
├── tsconfig.json # TypeScript 配置
├── tsconfig.app.json # 应用 TS 配置
├── tsconfig.node.json # Node TS 配置
└── vite.config.ts # Vite 配置
RAG(Retrieval-Augmented Generation)是系统的核心技术之一:
用户提问 → 向量检索 → 相关文档片段 → LLM 生成 → 附带引用的答案
- 精准检索:基于语义相似度的向量检索
- 上下文增强:将检索到的文档作为上下文输入 LLM
- 可追溯性:答案附带原文引用,可验证信息来源
- 参数可调:检索数量、相似度阈值、温度等参数可自定义
基于 ECharts 实现的交互式知识图谱:
- 文档节点:代表学术论文
- 概念节点:论文中的核心概念
- 作者节点:论文作者
- 引用关系:论文间的引用
- 相似关系:内容相似的论文
- 共现关系:概念共现
- 节点拖拽:自由移动节点位置
- 缩放平移:查看图谱细节
- 节点高亮:点击节点高亮相关关系
- 力导向布局:自动优化节点位置
实时流式输出 AI 回复,提升用户体验:
// 使用 Fetch API 的流式响应
const response = await fetch('/ai/chat/stream', {
method: 'POST',
body: JSON.stringify({ message: '...' })
})
const reader = response.body.getReader()
const decoder = new TextDecoder()
while (true) {
const { done, value } = await reader.read()
if (done) break
const chunk = decoder.decode(value)
// 逐字更新 UI
}- 实时反馈:逐字显示,无需等待完整响应
- 性能优化:防抖渲染,避免频繁更新
- 错误处理:流中断时的优雅降级
支持丰富的 Markdown 语法和代码高亮:
- ✅ 标题、列表、引用
- ✅ 代码块高亮(支持多种语言)
- ✅ 表格
- ✅ 链接、图片
- ✅ 数学公式(KaTeX)
- ✅ 任务列表
// 使用缓存避免重复解析
const markdownCache = new Map<string, string>()
function formatMessage(content: string) {
if (markdownCache.has(content)) {
return markdownCache.get(content)!
}
const html = marked.parse(content)
markdownCache.set(content, html)
return html
}项目采用 ESLint + Prettier 统一代码风格:
# 代码检查
npm run lint
# 代码格式化
npm run format- 在
src/views/创建 Vue 组件 - 在
src/router/index.ts添加路由 - 在
src/layouts/MainLayout.vue添加导航菜单
- 在
src/api/创建 API 文件 - 在
src/types/index.ts定义类型 - 使用
request工具发起请求
示例:
// src/api/example.ts
import { request } from '@/utils/request'
import type { ApiResponse, ExampleVO } from '@/types'
export function getExampleList() {
return request.get<ApiResponse<ExampleVO[]>>('/api/examples')
}使用 Pinia 进行状态管理:
// src/stores/example.ts
import { defineStore } from 'pinia'
import { ref } from 'vue'
export const useExampleStore = defineStore('example', () => {
const count = ref(0)
function increment() {
count.value++
}
return { count, increment }
})使用 Sass 编写样式,支持嵌套、变量、混合等特性:
.container {
padding: 20px;
.title {
font-size: 24px;
color: #333;
&:hover {
color: #1890ff;
}
}
}- Base URL: 配置在
src/config/index.ts - 认证方式: Bearer Token (存储在 localStorage)
- 响应格式: JSON
interface ApiResponse<T> {
code: string // 状态码
msg: string // 状态信息
success: boolean // 是否成功
timestamp: number // 时间戳
data: T // 响应数据
}详细的 API 文档请参考 接口文档.md。
POST /api/documents/upload- 上传文档GET /api/documents- 获取文档列表DELETE /api/documents/{id}- 删除文档
POST /api/knowledge-bases- 创建知识库GET /api/knowledge-bases- 获取知识库列表PUT /api/knowledge-bases/{id}- 更新知识库
POST /ai/chat- 普通对话POST /ai/chat/stream- 流式对话POST /api/rag/document-chat- 文档问答POST /api/rag/knowledge-base-chat- 知识库问答
POST /api/analysis/paper-summary- 论文总结POST /api/analysis/paper-comparison- 论文对比POST /api/analysis/innovation-cluster- 创新点聚类POST /api/analysis/literature-review- 文献综述
GET /api/knowledge-graph/global- 全局知识图谱GET /api/knowledge-graph/document/{id}- 文档知识图谱GET /api/knowledge-graph/knowledge-base/{id}- 知识库图谱
server {
listen 80;
server_name your-domain.com;
root /path/to/dist;
index index.html;
# SPA 路由配置
location / {
try_files $uri $uri/ /index.html;
}
# API 代理
location /api/ {
proxy_pass http://backend:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# Gzip 压缩
gzip on;
gzip_types text/plain text/css application/json application/javascript;
}# Dockerfile
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]问题:运行 npm run dev 报错
解决方案:
- 检查 Node.js 版本是否符合要求
- 删除
node_modules重新安装:rm -rf node_modules && npm install - 检查端口 5173 是否被占用
问题:前端无法连接后端 API
解决方案:
- 检查
src/config/index.ts中的apiBaseUrl配置 - 确认后端服务已启动
- 检查浏览器控制台的网络请求错误信息
- 确认 Token 是否有效
问题:运行 npm run build 报错
解决方案:
- 运行
npm run type-check检查类型错误 - 运行
npm run lint检查代码规范 - 查看构建日志定位具体错误
问题:页面样式混乱
解决方案:
- 清除浏览器缓存
- 检查 Element Plus 是否正确引入
- 确认 CSS 文件路径正确
- ✨ RAG 检索增强生成功能
- ✨ 知识图谱可视化
- ✨ 流式对话支持
- ✨ 四大智能分析模块
- ✨ 文档管理系统
- ✨ 知识库管理
- ✨ 教学案例管理
- 🚀 使用 Vue 3 Composition API 重构
- 🚀 全面采用 TypeScript
- 🚀 集成 Element Plus UI 框架
- 🚀 优化 Markdown 渲染性能
- 🚀 改进错误处理机制
欢迎贡献代码、报告问题或提出建议!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 提交 Pull Request
- 遵循项目代码规范
- 为新功能添加单元测试
- 更新相关文档
- 提交信息清晰明确
本项目采用 MIT 许可证 - 详见 LICENSE 文件
- 项目负责人: @yourusername
- 技术支持: issues
感谢以下开源项目:
- GitHub: https://github.com/yourusername/smartPaperAi
- Email: your.email@example.com
- 文档: https://your-docs-site.com
如果这个项目对你有帮助,请给一个 ⭐️ Star!
Made with ❤️ by SmartPaperAI Team