Skip to content

c-a-x/SmartPaperAi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 

Repository files navigation

SmartPaperAI - 智能学术论文分析系统

Version Vue TypeScript Element Plus License

一个基于 RAG(检索增强生成)技术的智能学术论文分析与知识管理系统

功能特性技术栈快速开始项目结构核心功能API 文档


📋 目录


🎯 项目简介

SmartPaperAI 是一个现代化的学术论文智能分析与知识管理系统,采用前后端分离架构开发。系统集成了 RAG(Retrieval-Augmented Generation)检索增强生成技术,为用户提供智能化的论文阅读、分析、管理和知识问答服务。

适用场景

  • 📚 学术研究者:快速分析海量论文,提取关键信息
  • 🎓 研究生/博士生:文献综述、论文写作辅助
  • 👨‍🏫 高校教师:教学案例管理、知识库构建
  • 🏢 科研团队:知识共享、团队协作
  • 📖 文献管理:个人/团队文献库管理

✨ 核心亮点

🚀 创新技术

  • RAG 检索增强生成:结合向量检索与 LLM 生成,提供精准的知识问答
  • 知识图谱可视化:基于 ECharts 的交互式知识图谱,展示文档、概念、作者等关系
  • 流式响应:实时流式输出 AI 对话内容,提升用户体验
  • 智能分析:多维度论文分析(摘要、对比、创新点、文献综述)

💎 用户体验

  • 现代化 UI:基于 Element Plus 的精美界面设计
  • 响应式布局:完美适配桌面、平板、移动端
  • Markdown 渲染:支持富文本、代码高亮、数学公式
  • 实时反馈:加载状态、进度条、错误提示

🔒 安全可靠

  • Token 认证:JWT 令牌机制保护 API 安全
  • 请求拦截:统一的请求/响应拦截处理
  • 错误处理:完善的异常捕获与用户提示

🎨 功能特性

📄 文档管理

  • 多格式支持:PDF、DOCX、TXT 等学术文档上传
  • 智能解析:自动提取文档标题、作者、摘要等元信息
  • 批量操作:批量上传、批量删除、批量分类
  • 状态追踪:解析中、已完成、失败等状态实时显示
  • 文档预览:在线预览文档内容
  • 标签分类:自定义标签管理文档

📚 知识库管理

  • 知识库创建:构建主题化知识库
  • 文档关联:将文档关联到知识库
  • 权限管理:公开/私有知识库设置
  • 统计信息:文档数量、创建时间等统计
  • 搜索过滤:快速定位目标知识库

🤖 智能对话

普通 AI 对话

  • 上下文记忆:多轮对话保持上下文
  • 会话管理:创建、删除、清空历史
  • 流式输出:逐字显示 AI 回复
  • 快速提问:预设问题快速开始对话
  • RAG 增强:可选启用检索增强生成
  • 参数调节:温度、Token 数、相似度阈值自定义

RAG 文档问答

  • 文档级问答:针对单个文档提问
  • 知识库问答:跨文档检索回答
  • 引用来源:答案附带原文引用片段
  • 相关度评分:显示引用来源的相关度
  • 知识图谱增强:利用图谱关系提升答案质量

📊 智能分析

1. 论文总结 (Paper Summary)

  • 核心内容提取:研究背景、方法、结论
  • 关键词识别:自动提取论文关键词
  • 创新点分析:识别论文创新点
  • 进度显示:实时分析进度条
  • Markdown 导出:一键导出分析报告

2. 论文对比 (Paper Comparison)

  • 多维度对比:研究方法、实验设计、结果对比
  • 差异分析:识别论文间的异同点
  • 优劣势评估:对比各论文的优缺点
  • 对比矩阵:结构化展示对比结果

3. 创新点聚类 (Innovation Cluster)

  • 创新点提取:批量提取多篇论文创新点
  • 主题聚类:相似创新点自动分组
  • 趋势分析:识别研究领域热点
  • 可视化展示:图表形式呈现聚类结果

4. 文献综述 (Literature Review)

  • 综合分析:跨论文综合分析
  • 研究脉络:梳理研究发展脉络
  • 研究空白:发现未被充分研究的领域
  • 综述生成:自动生成文献综述报告

🕸️ 知识图谱

  • 全局知识图谱:展示所有文档的知识关系
  • 文档知识图谱:单个文档的内部关系
  • 知识库图谱:知识库内文档间关系
  • 交互式探索:节点拖拽、缩放、高亮
  • 多类型节点:概念、文档、作者等
  • 关系权重:边的粗细表示关系强度
  • 统计信息:节点数、关系数、孤立节点数

📖 教学案例管理

  • 案例创建:创建教学案例
  • 案例编辑:富文本编辑器
  • 分类管理:按学科、类型分类
  • 关联文档:案例关联相关文档
  • 搜索检索:快速查找案例

🛠️ 技术栈

前端核心

技术 版本 说明
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 状态管理库

UI 框架

技术 版本 说明
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 快速代码检查

HTTP 客户端

技术 版本 说明
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+

安装步骤

1. 克隆项目

git clone https://github.com/yourusername/smartPaperAi.git
cd smartPaperAi

2. 安装依赖

npm install

3. 配置环境

编辑 src/config/index.ts 配置后端 API 地址:

export const config = {
  // API 基础地址
  apiBaseUrl: 'http://localhost:8080', // 修改为你的后端地址
  
  // Token 存储键
  tokenKey: 'smart-paper-token',
  
  // 用户信息存储键
  userInfoKey: 'smart-paper-user',
  
  // 请求超时时间(毫秒)
  timeout: 30000
}

4. 启动开发服务器

npm run dev

浏览器访问:http://localhost:5173

5. 生产环境构建

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 配置

🔧 核心功能详解

1. RAG 检索增强生成

RAG(Retrieval-Augmented Generation)是系统的核心技术之一:

工作流程

用户提问 → 向量检索 → 相关文档片段 → LLM 生成 → 附带引用的答案

特性

  • 精准检索:基于语义相似度的向量检索
  • 上下文增强:将检索到的文档作为上下文输入 LLM
  • 可追溯性:答案附带原文引用,可验证信息来源
  • 参数可调:检索数量、相似度阈值、温度等参数可自定义

2. 知识图谱可视化

基于 ECharts 实现的交互式知识图谱:

节点类型

  • 文档节点:代表学术论文
  • 概念节点:论文中的核心概念
  • 作者节点:论文作者

关系类型

  • 引用关系:论文间的引用
  • 相似关系:内容相似的论文
  • 共现关系:概念共现

交互功能

  • 节点拖拽:自由移动节点位置
  • 缩放平移:查看图谱细节
  • 节点高亮:点击节点高亮相关关系
  • 力导向布局:自动优化节点位置

3. 流式对话

实时流式输出 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
}

特性

  • 实时反馈:逐字显示,无需等待完整响应
  • 性能优化:防抖渲染,避免频繁更新
  • 错误处理:流中断时的优雅降级

4. Markdown 渲染

支持丰富的 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

组件开发

创建新页面

  1. src/views/ 创建 Vue 组件
  2. src/router/index.ts 添加路由
  3. src/layouts/MainLayout.vue 添加导航菜单

创建新 API

  1. src/api/ 创建 API 文件
  2. src/types/index.ts 定义类型
  3. 使用 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;
    }
  }
}

📖 API 文档

基础配置

  • 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} - 更新知识库

AI 对话

  • 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} - 知识库图谱

🚢 部署说明

Nginx 配置示例

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;
}

Docker 部署

# 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;"]

❓ 常见问题

1. 开发服务器启动失败

问题:运行 npm run dev 报错

解决方案

  • 检查 Node.js 版本是否符合要求
  • 删除 node_modules 重新安装:rm -rf node_modules && npm install
  • 检查端口 5173 是否被占用

2. API 请求失败

问题:前端无法连接后端 API

解决方案

  • 检查 src/config/index.ts 中的 apiBaseUrl 配置
  • 确认后端服务已启动
  • 检查浏览器控制台的网络请求错误信息
  • 确认 Token 是否有效

3. 构建失败

问题:运行 npm run build 报错

解决方案

  • 运行 npm run type-check 检查类型错误
  • 运行 npm run lint 检查代码规范
  • 查看构建日志定位具体错误

4. 样式显示异常

问题:页面样式混乱

解决方案

  • 清除浏览器缓存
  • 检查 Element Plus 是否正确引入
  • 确认 CSS 文件路径正确

📝 更新日志

v1.0.0 (2025-01-27)

新增功能

  • ✨ RAG 检索增强生成功能
  • ✨ 知识图谱可视化
  • ✨ 流式对话支持
  • ✨ 四大智能分析模块
  • ✨ 文档管理系统
  • ✨ 知识库管理
  • ✨ 教学案例管理

技术优化

  • 🚀 使用 Vue 3 Composition API 重构
  • 🚀 全面采用 TypeScript
  • 🚀 集成 Element Plus UI 框架
  • 🚀 优化 Markdown 渲染性能
  • 🚀 改进错误处理机制

🤝 贡献指南

欢迎贡献代码、报告问题或提出建议!

贡献流程

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 提交 Pull Request

开发约定

  • 遵循项目代码规范
  • 为新功能添加单元测试
  • 更新相关文档
  • 提交信息清晰明确

📄 许可证

本项目采用 MIT 许可证 - 详见 LICENSE 文件


👥 团队


🙏 致谢

感谢以下开源项目:


📮 联系方式


如果这个项目对你有帮助,请给一个 ⭐️ Star!

Made with ❤️ by SmartPaperAI Team

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors