把论文 PDF 变成可解析、可翻译、可对话、可批注的研究工作台。
乖积 PDF 是一个面向研究阅读与知识整理场景的桌面式 Web 工作台,
工程仓库名为 Doti。
它把 MinerU、多模型翻译、术语库、批注、AI 辅助和
@chenglou/pretext 流式布局优化串成一条完整工作流。
快速开始 · 功能亮点 · 核心工作流 · 技术栈 · 项目状态 · 提交反馈
PDF Parsing · Streaming Translation · Notes & Glossary · AI Assist · Print / Export
目标不是再做一个“把 PDF 丢给模型翻一下”的工具,而是把论文处理成一个可持续阅读、持续追问、持续沉淀知识的研究工作台。
| 解析底座 | 翻译能力 | 阅读工作台 |
|---|---|---|
MinerU 保留 Markdown / HTML / LaTeX / layout 等结构化结果 |
支持 Gemini / OpenAI / Claude / DeepSeek / GLM / Ollama / DeepLX |
原文对照、批注、术语库、AI 连续追问、历史恢复、打印导出 |
首页工作台截图
乖积 PDF 是一个面向论文阅读与知识整理场景的 PDF 工作台。
它不只是把 PDF 丢给模型翻一下,而是把整条链路串起来:
MinerU负责把 PDF 拆成结构化 Markdown / HTML / LaTeX / layout 结果- 多模型翻译负责把论文内容按块流式翻出来
- 批注、术语库、AI 辅助让你边读边问、边改边记
@chenglou/pretext负责优化流式正文阶段的布局稳定性
一句话说,这个项目的目标是把“论文翻译工具”做成“研究阅读工作台”。
- PDF 上传与
arXiv导入 MinerU解析,保留 Markdown / HTML / LaTeX 等结果- 原文 / 译文双工作区阅读
- 多模型翻译:
Gemini / OpenAI / Claude / DeepSeek / GLM / Ollama - 自定义
OpenAI-compatibleProvider Profile DeepLX翻译引擎接入- 流式翻译、断点续传、重新翻译
- 笔记、批注、术语库、历史记录、本地持久化
- AI 辅助会话:选区继承、上下文锁定、连续追问
- 打印 / 导出视图
- 基于
pretext的流式正文布局优化
- 上传 PDF,或通过
arXiv导入论文。 - 服务端调用
MinerU解析,落盘到uploads/<hash>/。 - 前端读取
full.md / layout.json / images等资源进入阅读工作区。 - 选择翻译模型,开始流式翻译。
- 在译文工作区中继续做批注、术语修正、AI 问答和导出。
Next.js 16React 19TypeScriptTailwind CSS 4ZustandDexiereact-pdfreact-markdown + remark/rehype + KaTeX@chenglou/pretext
- 安装依赖
npm install- 创建环境变量文件
cp .env.example .env.localWindows PowerShell 下可以直接手动新建 .env.local。
- 启动开发环境
npm run dev- 打开
http://localhost:3000
最少需要:
MINERU_API_KEY=your_mineru_key常用可选项:
# LLM providers
GEMINI_API_KEY=
OPENAI_API_KEY=
ANTHROPIC_API_KEY=
DEEPSEEK_API_KEY=
GLM_API_KEY=
# Compatible gateways / local inference
OLLAMA_BASE_URL=http://localhost:11434/v1
ANTHROPIC_BASE_URL=
ANTHROPIC_MAX_OUTPUT_TOKENS=8192
# Translation runtime
TRANSLATION_CONCURRENCY=2
# MinerU extraction options
MINERU_ENABLE_FORMULA=true
MINERU_ENABLE_TABLE=true
MINERU_LANGUAGE=
MINERU_EXTRA_FORMATS=html,latex
MINERU_MODEL_VERSION=vlm
MINERU_IS_OCR=
MINERU_PAGE_RANGES=
# Optional build output override
NEXT_DIST_DIR=.next-build-check说明:
MINERU_API_KEY必填,没有它无法解析 PDF。DeepLX当前通过 UI 中的自定义 Provider Profile 配置,不依赖固定环境变量。- 自定义 Provider Profile、术语库、批注、AI 会话等数据默认保存在浏览器
IndexedDB。
项目已经不再把 pretext 仅仅当成“统计行数工具”。
当前正文流式链路采用的是“主线程 authoritative layout + block projection + virtualization”的思路,主要目标是:
- 避免流式输出时正文列宽异常变窄
- 避免 token 级更新拖着整页频繁重排
- 让纯文本 draft 态切到 Markdown 终态时更平滑
src/app/ # 页面与 API 路由
src/components/ # 工作台 UI、阅读器、对话面板、模型配置
src/hooks/ # 布局、交互 hooks
src/lib/ # 翻译、MinerU、Pretext、缓存、数据库、Provider 抽象
public/ # 静态资源、图标、打印样式
terms/ # 内置术语 CSV
themes/ # 主题样式
uploads/ # 本地解析产物(默认忽略)
.cache/ # 本地缓存(默认忽略)
npm run dev
npm run build
npm run start
npm run lint
npx tsc --noEmit如果 npm run build 出现:
EPERM: operation not permitted, scandir '.next-build-check/types'
通常不是代码错误,而是本地还有 next dev 进程占用了构建目录。先关闭开发服务器,再重新执行构建即可。
项目仍在高频迭代中,当前更偏研究型原型 / 工作台阶段,但主链路已经可用:
- 能解析 PDF
- 能流式翻译
- 能做批注和 AI 辅助
- 能恢复历史与部分本地状态
