SuperAPI AI 工具集

paper-corpus-rag

写作与研究

查看项目

更新于 10-21 16:18

技能介绍

用途

paper-corpus-rag 用于在研究者自己收集的论文语料库上构建有依据的问答与检索增强生成(RAG)。其核心目标是产出研究者可以核查的答案:每一条论断都能追溯到某篇论文的具体段落。该技能明确指出,检索质量与引用规范比向量数据库的选择更重要。

在构建本地语料库之前,若需发现新的候选论文,可使用 firecrawl-research-index 进行托管式论文搜索与段落阅读。该技能只索引用户自己的文件;Firecrawl 的托管索引并非本地语料库下载。保存论文时应仅保存自己拥有合法副本的论文,并记录其 DOI 或来源 ID。

主要能力

Tier 0:一分钟内可引用的全文检索(无依赖)

先将 PDF 转换为 Markdown(布局感知的转换器优于原始 PDF 文本提取):可使用 markitdown 或 liteparse 技能,或使用 pip install pypdf 作为内置回退方案。

索引与查询命令:

python scripts/paper_index.py index papers_md/ --db corpus.sqlite      # incremental: re-run after adding papers
python scripts/paper_index.py query "effect of batch size on calibration" --db corpus.sqlite -k 8
python scripts/paper_index.py query '"label smoothing" calibration' --db corpus.sqlite --json --full

每个命中结果包含 file#chunk、章节标题与 BM25 分数。用引号包裹短语可进行精确匹配。BM25 对充满精确术语(基因名、方法名、数据集名)的科学文本表现强劲,因此建议在加入嵌入之前先从此处开始。

Tier 1:语义与混合检索

当查询是概念性的(例如“避免使用标注数据的方法”)时,加入稠密嵌入。使用混合评分:BM25 与向量排名通过 Reciprocal Rank Fusion(RRF)融合,score = Σ 1/(60 + rank)。该方法稳健且无需调参。

嵌入模型选择:使用 sentence-transformers 中的科学领域模型或强通用模型(参见该技能)。嵌入的是分块(chunk),而非整篇论文。索引中需存储模型名称与维度,因为更换模型意味着需要重新嵌入。

pgvector(Postgres)方案:当你已经运行 Postgres 或需要 SQL 过滤(年份、会议/期刊、作者)时最佳。

CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE chunks (id bigserial PRIMARY KEY, paper_id text, chunk int, section text,
                     body text, tsv tsvector GENERATED ALWAYS AS (to_tsvector('english', body)) STORED,
                     embedding vector(768));
CREATE INDEX ON chunks USING hnsw (embedding vector_cosine_ops);
CREATE INDEX ON chunks USING gin (tsv);
-- hybrid: fetch top-k from each, fuse with RRF in the application
SELECT id FROM chunks ORDER BY embedding <=> $1 LIMIT 50;
SELECT id FROM chunks WHERE tsv @@ websearch_to_tsquery('english', $2)
  ORDER BY ts_rank(tsv, websearch_to_tsquery('english', $2)) DESC LIMIT 50;

Chroma / Qdrant / FAISS 方案:本地优先原型(Chroma)、生产级过滤与载荷(Qdrant)、大规模内存检索(FAISS)。API 参见 chroma、qdrant-vector-search 与 faiss 技能。每个向量上都要保留 paper_id、chunk、section、year 作为元数据。

使用方式

论文分块规则

  • 800-1500 字符,10-20% 重叠。按段落边界切分,绝不从句子中间切开。
  • 每个分块保留章节标题(如“Methods > Training details”),因为它能消除歧义。
  • 将图/表标题作为独立分块索引。从主索引中剔除参考文献列表(它们会污染 BM25),但保留在单独表中用于引用查找。
  • 每篇论文存储书目元数据(DOI、标题、作者、年份),通过 DOI 查找,而非猜测。

答案生成协议(依据性)

  • 检索 8-20 个分块。若有交叉编码器(cross-encoder),进行重排序。
  • 仅依据检索到的文本作答。每一条事实性句子都引用为 [file#chunk](或映射到参考文献后的作者-年份)。
  • 如果语料库中不包含答案,就明确说明。不要凭记忆填补空白。
  • 当论文之间存在分歧时,同时呈现双方并附引用,而不是默默选择一方。
  • 对于定量论断,逐字引用数字及其上下文(数据集、指标、划分)。

完整性规则

  • 绝不伪造引用句柄或引文。每个被引用的 file#chunk 都必须存在于索引输出中。
  • 在报告数字之前,对照源段落核实。

评估

在信任一条流水线之前,从语料库中编写 20-50 个“问题→期望段落”对,并测量检索的 recall@k。论文问答中的大多数“幻觉”实际上是检索遗漏。在更改分块、嵌入模型或语料库后需重新检查。

适用场景

  • 研究者需要在自有论文集合上进行可追溯、可核查的问答。
  • 需要精确术语匹配(基因名、方法名、数据集名)的科学文本检索。
  • 需要概念性语义检索,并希望结合 BM25 与向量检索的混合方案。
  • 已有 Postgres 并希望用 SQL 过滤(年份、会议/期刊、作者)的场景。
  • 需要本地优先原型、生产级过滤或大规模内存检索的不同部署需求。

限制

  • 该技能只索引用户自己的文件,不提供托管索引的本地语料库下载。
  • 保存论文需拥有合法副本,并记录 DOI 或来源 ID。
  • 更换嵌入模型意味着需要重新嵌入。
  • 关于收费、价格、平台支持等具体信息,资料中暂未提供。

相关技能

research-knowledge-graph(同一语料库的引用/概念图)、markitdown、liteparse、sentence-transformers、chroma、qdrant-vector-search、faiss、open-notebook、literature-review、firecrawl-research-index。