Skip to content

Repository files navigation

Auto Paper - AI论文阅读辅助平台

一个基于Next.js和AI的智能论文阅读、分析和对话平台。支持PDF上传、arXiv自动获取、智能摘要、深度分析和基于论文内容的AI对话。

主要特性

  • 📄 PDF上传 - 支持拖拽上传PDF论文,自动解析内容和元数据
  • 🔗 arXiv集成 - 通过arXiv ID自动下载论文和元数据
  • 🤖 多模型支持 - 支持Claude、GPT-4等多种AI模型
  • 📝 智能摘要 - 自动生成论文核心要点、方法和结论
  • 🔬 深度分析 - AI深度解读研究方法、贡献和局限性
  • 💬 AI对话 - 基于论文内容的智能问答对话
  • 🔍 搜索与筛选 - 关键词搜索、分类筛选
  • 🏷️ 分类管理 - 自定义标签,系统化管理论文库
  • 📦 批量处理 - 支持批量上传和处理(开发中)
  • 🎯 向量搜索 - 语义搜索功能(开发中)

技术栈

前端

  • Next.js 14 - React框架(App Router)
  • TypeScript - 类型安全
  • Tailwind CSS - 样式
  • React Query - 数据获取和缓存
  • React Dropzone - 文件上传
  • React Markdown - Markdown渲染

后端

  • Next.js API Routes - API服务
  • Prisma - ORM数据库工具
  • SQLite / PostgreSQL - 灵活的数据库选择(可无缝切换)
  • pdf-parse - PDF解析
  • Anthropic SDK - Claude AI集成
  • OpenAI SDK - GPT模型集成
  • ArXiv API - 论文获取

数据库

  • 🗃️ 双数据库支持 - SQLite(开发)和 PostgreSQL(生产)可无缝切换
  • 🔄 智能适配器 - 自动处理不同数据库的差异
  • 📖 详细文档 - 查看 DATABASE.md 了解切换方法

可选功能

  • ChromaDB/Pinecone - 向量数据库(语义搜索)
  • AWS S3 - 云存储(可选)

快速开始

环境要求

  • Node.js 18+
  • 数据库:SQLite(自动)或 PostgreSQL 14+
  • npm 或 yarn 或 pnpm

1. 克隆项目

cd auto_paper

2. 安装依赖

npm install
# 或
yarn install
# 或
pnpm install

3. 配置环境变量

复制环境变量模板:

cp .env.example .env

编辑 .env 文件,填入必要配置:

# 数据库连接 - SQLite(开发,零配置)
DATABASE_URL="file:./dev.db"

# 或使用 PostgreSQL(生产)
# DATABASE_URL="postgresql://user:password@localhost:5432/autopaper"

# AI模型API密钥(至少配置一个)
ANTHROPIC_API_KEY="sk-ant-..."
OPENAI_API_KEY="sk-..."

# 应用配置
NEXT_PUBLIC_APP_URL="http://localhost:3000"
DEFAULT_AI_MODEL="claude-3-5-sonnet-20241022"

💡 数据库选择:

  • SQLite: 默认配置,零依赖,适合开发和个人使用
  • PostgreSQL: 生产推荐,查看 DATABASE.md 了解如何切换

4. 初始化数据库

# 生成Prisma客户端
npm run db:generate

# 推送数据库Schema(开发环境)
npm run db:push

# 或创建migration(生产环境)
npm run db:migrate

5. 创建数据目录

mkdir -p data/papers data/vector_store

6. 启动开发服务器

npm run dev

访问 http://localhost:3000

项目结构

auto_paper/
├── prisma/
│   └── schema.prisma          # 数据库Schema
├── src/
│   ├── app/
│   │   ├── api/               # API路由
│   │   │   └── papers/
│   │   │       ├── route.ts   # 论文列表
│   │   │       ├── upload/    # 上传
│   │   │       ├── arxiv/     # arXiv导入
│   │   │       └── [id]/      # 单篇论文操作
│   │   ├── upload/            # 上传页面
│   │   ├── search/            # 搜索页面
│   │   ├── chat/              # 对话页面
│   │   ├── library/           # 论文库页面
│   │   ├── layout.tsx         # 根布局
│   │   └── page.tsx           # 首页
│   ├── components/
│   │   └── ui/                # UI组件
│   └── lib/
│       ├── db.ts              # Prisma客户端
│       ├── ai-service.ts      # AI服务
│       ├── pdf-parser.ts      # PDF解析
│       ├── arxiv-service.ts   # arXiv集成
│       └── utils.ts           # 工具函数
├── data/
│   ├── papers/                # PDF文件存储
│   └── vector_store/          # 向量数据库
├── .env.example               # 环境变量模板
├── next.config.mjs            # Next.js配置
├── tailwind.config.ts         # Tailwind配置
├── tsconfig.json              # TypeScript配置
└── package.json               # 项目依赖

API文档

上传论文

POST /api/papers/upload
Content-Type: multipart/form-data

file: PDF文件
categories: ["AI", "ML"]

从arXiv导入

POST /api/papers/arxiv
Content-Type: application/json

{
  "arxivId": "2301.00001",
  "categories": ["AI"]
}

获取论文列表

GET /api/papers?query=机器学习&category=AI&limit=50

获取单篇论文

GET /api/papers/{id}

生成摘要

POST /api/papers/{id}
Content-Type: application/json

{
  "action": "summarize",
  "model": "claude-3-5-sonnet-20241022"
}

深度分析

POST /api/papers/{id}
Content-Type: application/json

{
  "action": "analyze",
  "model": "claude-3-5-sonnet-20241022"
}

AI对话

POST /api/papers/{id}/chat
Content-Type: application/json

{
  "message": "这篇论文的主要贡献是什么?",
  "model": "claude-3-5-sonnet-20241022"
}

数据库Schema

Paper(论文)

  • id - 唯一标识
  • title - 标题
  • authors - 作者列表
  • abstract - 摘要
  • arxivId - arXiv ID(可选)
  • pdfPath - PDF文件路径
  • categories - 分类标签
  • summary - AI生成摘要
  • deepAnalysis - AI深度分析
  • status - 状态(UPLOADED/PROCESSING/ANALYZED/ERROR)

ChatMessage(对话消息)

  • id - 唯一标识
  • paperId - 关联论文
  • role - 角色(USER/ASSISTANT/SYSTEM)
  • content - 消息内容
  • model - 使用的AI模型

Embedding(向量嵌入)

  • id - 唯一标识
  • paperId - 关联论文
  • chunkIndex - 文本块索引
  • content - 文本内容
  • vectorId - 向量数据库ID

使用指南

1. 上传论文

  1. 访问"上传论文"页面
  2. 拖拽PDF文件或点击选择文件
  3. 或输入arXiv ID自动导入
  4. 系统自动解析PDF并生成摘要

2. 搜索论文

  1. 访问"搜索论文"页面
  2. 输入关键词搜索标题、作者、摘要
  3. 使用分类筛选器精确查找
  4. 点击论文卡片查看详情

3. AI对话

  1. 访问"AI对话"页面
  2. 从左侧列表选择论文
  3. 输入问题或使用快速提问模板
  4. AI基于论文内容回答问题

4. 管理论文库

  1. 访问"论文库"页面
  2. 查看所有论文列表和统计
  3. 查看论文状态(已上传/处理中/已分析)
  4. 删除不需要的论文

配置选项

AI模型选择

支持以下模型(需配置对应API密钥):

  • claude-3-5-sonnet-20241022 - Claude 3.5 Sonnet(推荐)
  • claude-3-opus-20240229 - Claude 3 Opus
  • gpt-4-turbo - GPT-4 Turbo
  • gpt-4o - GPT-4o
  • gpt-4o-mini - GPT-4o Mini

数据库选择

SQLite(开发)

DATABASE_URL="file:./dev.db"

PostgreSQL(生产)

DATABASE_URL="postgresql://user:password@localhost:5432/autopaper"

文件存储

本地存储(默认)

文件保存在 data/papers/ 目录

S3存储(可选)

STORAGE_TYPE="s3"
AWS_ACCESS_KEY_ID="..."
AWS_SECRET_ACCESS_KEY="..."
AWS_REGION="us-east-1"
AWS_S3_BUCKET="autopaper-files"

开发命令

# 启动开发服务器
npm run dev

# 构建生产版本
npm run build

# 启动生产服务器
npm run start

# 代码检查
npm run lint

# Prisma Studio(数据库GUI)
npm run db:studio

# 生成Prisma客户端
npm run db:generate

# 推送Schema到数据库
npm run db:push

# 创建数据库迁移
npm run db:migrate

部署

Vercel部署

  1. 推送代码到GitHub
  2. 在Vercel导入项目
  3. 配置环境变量
  4. 选择PostgreSQL数据库(Vercel Postgres或外部)
  5. 部署

Docker部署

# 构建镜像
docker build -t auto-paper .

# 运行容器
docker run -p 3000:3000 \
  -e DATABASE_URL="..." \
  -e ANTHROPIC_API_KEY="..." \
  -v $(pwd)/data:/app/data \
  auto-paper

常见问题

Q: 上传PDF失败?

A: 检查文件大小是否超过50MB限制,确保文件格式为PDF。

Q: arXiv导入失败?

A: 验证arXiv ID格式(如2301.00001),检查网络连接。

Q: AI摘要生成失败?

A: 确认API密钥配置正确,检查API余额。

Q: 数据库连接失败?

A: 检查DATABASE_URL配置,确保数据库服务运行中。

路线图

  • PDF上传和解析
  • arXiv集成
  • 多模型AI支持
  • 智能摘要和分析
  • AI对话功能
  • 搜索和筛选
  • 向量语义搜索
  • 批量导入功能
  • 用户认证系统
  • 导出Markdown/PDF报告
  • 论文引用分析
  • 协作和分享功能

贡献

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

许可证

MIT License

联系方式

有问题或建议?请提交Issue或PR。


Auto Paper - 让AI帮你高效阅读论文 📚

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages