论文导入
Source: server/catgo/routers/paper.py, server/catgo/models/paper.py
论文导入模块会把科研论文纳入 CatGo 的会话存储,使 CatBot 在构建工作流时可以引用论文内容。支持两种导入路径:直接上传 PDF,以及通过 CrossRef 元数据解析 DOI。
本模块是数据导入层。后续“告诉 CatBot 这篇论文内容并让它构建工作流”的流程通过普通 CatBot 聊天轮次完成;这里没有自动的论文到工作流提取器。
本模块的作用
- PDF 上传 — 接收 PDF,提取文本内容,并存入带 TTL 管理的会话
- DOI 解析 — 通过 CrossRef 解析 DOI,获取标题、作者、摘要和元数据
- 会话存储 — 以 session ID 为键在内存中保存论文文本和元数据,并在 TTL 到期后自动清理
- 文本检索 — 返回提取出的文本,用于增强聊天上下文
本模块不做什么
- 不会从论文 PDF 中自动提取参数(泛函、k 点、截断能等);这是由 CatBot prompt 驱动的任务,不是后端功能
- 不会根据论文方法部分自动生成工作流;用户需要在聊天中描述论文方法,再让 CatBot 构建工作流
服务器 API
所有端点都位于 /paper 前缀下:
| 端点 | 方法 | 说明 |
|---|---|---|
/paper/upload | POST | 上传 PDF;返回 session_id 和解析出的元数据 |
/paper/{session_id} | GET | 获取会话信息(标题、作者、页数、过期时间) |
/paper/{session_id}/text | GET | 获取论文正文的提取文本 |
/paper/resolve-doi | POST | 通过 CrossRef 解析 DOI;返回元数据但不存储 |
/paper/{session_id} | DELETE | 在 TTL 到期前手动清理会话 |
数据模型
PaperSessionInfo
session_id— 内存会话的 UUIDtitle— 论文标题(来自 PDF 元数据或第一个标题)authors— 作者列表(可提取时)created_at— 会话创建时间戳expires_at— TTL 过期时间戳
DOIResolveResponse
返回 CrossRef 元数据:标题、作者、期刊、发表年份、摘要,以及解析后的 DOI URL。
典型流程
- 用户将 PDF 拖入 CatBot,或粘贴 DOI
- 前端请求
/paper/upload或/paper/resolve-doi,并接收session_id - 后续 LLM 调用的聊天上下文会包含论文文本/元数据(见
context.ts) - 用户要求 CatBot 基于论文方法构建工作流;CatBot 通过工作流工具起草工作流
- 会话在 TTL 后过期,或被手动删除