federicodeponte/opendraft · 上手攻略
- 仓库:federicodeponte/opendraft
- 链接:https://github.com/federicodeponte/opendraft
- 分类:agent / 学术写作与文献综述
- 作者:spark
- 更新:2026-11-04
版本说明:本文基于 2026-11-04 抓取的 README(master 分支)、
docs/PIPELINE.md、docs/citation-verification.md、docs/opendraft-vs-storm.md。文中下载量与引用数据均为 README 自述数字(截至 2026 年 11 月),未独立核验;PyPI 版本号本文未锁定(⚠️ 待核,见文末)。
一、这是什么
OpenDraft 是 MIT 许可的开源 agent 系统,输入一个主题,输出带已核验引用的学术论文、文献综述或论文章节。README 自述定位为「Jenni 和 ThesisAI 的开源替代品」——区别在于不需要订阅闭源 SaaS,而是用你自己的模型 key。
核心技术特征是引用的两段式验证,作者明确把「能证明什么」和「不能证明什么」分开写:
- 文献是否存在:默认只保留在 Crossref、OpenAlex、Semantic Scholar 三者中至少两家持有其 DOI 的来源,单来源直接丢弃并记日志。
- 文献是否支撑所引论断:
CitationClaimVerifier逐条判断来源与论断的关系,返回RELEVANT/IRRELEVANT/UNCERTAIN。
作者强调第一段只证明「这篇工作存在且被索引」,不证明它支持挂在它身上的那句话。这种自我设限在同类项目里少见。
二、解决什么问题
学术写作自动化的核心痛点从来不是「生成得像不像论文」,而是「引用是不是真的」。传统 LLM 写作工具的通病是引用幻觉——DOI 格式正确、作者名合理、期刊也存在,唯独这篇论文压根没说过你引它说的那句话。OpenDraft 针对的是:
- 引用幻觉:用多库交叉确认把「不存在的文献」挡在门外。
- 凑数引用:论点与文献错配由 claim verifier 单独抓。
- 长文结构崩坏:19 个专职 agent 分 6 阶段流水线,避免一段话写到底。
- 格式转换:直接导出 PDF / Word / LaTeX。
三、快速安装
要求 Python 3.10+ 与一个模型 key(Gemini 默认,Claude 与 OpenAI 也支持)。
pip install opendraft
opendraft setup # 交互式录入你的 Gemini API key
opendraft "Remote work and team productivity"
从源码装:
git clone https://github.com/federicodeponte/opendraft.git
cd opendraft
pip install -e ./engine
cp .env.example engine/.env # 填入你的 key
opendraft "Your topic"
环境变量(README 表格 + .env.example):
| 变量 | 必需 | 用途 |
|---|---|---|
GOOGLE_API_KEY |
是(其一) | Gemini,默认 provider |
ANTHROPIC_API_KEY / OPENAI_API_KEY |
可选 | 配合 AI_PROVIDER=claude 或 openai |
ENABLE_SEMANTIC_SCHOLAR |
可选 | 被 Semantic Scholar 限流时设为 false |
成本:README 自述「约 $0.35 到 $3 每份草稿」,费用只来自你自己的模型 provider。README 说其余设置都在 .env.example 里。
四、核心用法
4.1 命令行
opendraft # 交互模式
opendraft "Topic" --level phd --lang de # 级别:research_paper / bachelor / master / phd;语言
opendraft "Topic" --expose # 只出提纲与来源,更快
opendraft revise ./output "make the intro longer" # 修改已有草稿
opendraft tldr paper.pdf # 任意论文的 5 条要点摘要
--expose 很实用:先看提纲与检索到的来源,确认选题没跑偏再让引擎写全文,省 token。
4.2 作为 agent skill 使用
在 Claude、ChatGPT 等会读 skill 的 agent 里使用:
npx skills add federicodeponte/opendraft --skill autonomous-research
然后对 agent 说「Write a paper on 」。重要说明:skill 位于 skills/autonomous-research/,跑在你自己的 agent 里,并不调用这个 Python engine——skill 路径是提示词与流程的复用,不是引擎的调用。
4.3 流水线结构(19 agents / 6 阶段)
docs/PIPELINE.md 的完整架构:
INPUT: Topic + Academic Level + Citation Style + Language
│
├─ PHASE 1 RESEARCH Scout + Deep Research → Scribe → Signal
│ 找 50+ 篇论文 / 逐篇摘要 / 找缺口与趋势
├─ PHASE 2 STRUCTURE Architect → Formatter(APA/IEEE 风格)
├─ PHASE 2.5 CITATION MANAGEMENT(确定性,无 LLM)
│ 去重 → 抓标题 → 抓元数据 → 生成 {cite_XXX} ID
├─ PHASE 3 COMPOSE Crafter 被调用 6-7 次,逐节写
│ Intro / 2.1 Lit Review / 2.2 Methods /
│ 2.3 Results / 2.4 Discussion / 3 Conclusion / 4 Appendices
├─ PHASE 3.5 QA Thread(跨节连贯、矛盾、引用) + Narrator(语气、时态、对冲)
│ ← 咨询性报告,不阻断
├─ PHASE 4 COMPILE 组装 → Citation Compiler({cite_001} → "(Smith et al., 2023)")
│ → Abstract Generator → 后处理(修表、去重复附录、
│ 清理 AI 语言、标题本地化)
└─ PHASE 5 EXPORT(无 LLM)Markdown → PDF(Pandoc + LaTeX)/ DOCX(Pandoc)
OUTPUT: paper.pdf + paper.docx
13 个 agent 在自动化流水线中实际被调用,另 6 个(Skeptic、Verifier、Referee、Citation Verifier、Voice、Entropy、Polish、Enhancer 中的一部分)有 prompt 文件但当前不在自动流水线里调用,是为 Cursor/Claude Code 人工迭代流程准备的。
一个容易被忽略的设计:Phase 2.5、3.5 与 Phase 5 完全不用 LLM。去重、占位符替换、格式导出是确定性代码——这正是「引用编译」这类环节不该交给模型的原因。每个小节写作时收到提纲 + citation_summary + 之前已写的小节,这让跨节连贯有上下文基础,也让 Thread agent 的跨节矛盾检查有意义。
4.4 引用发现与确认(两阶段)
CitationResearcher 分两阶段:
STAGE 1 — DISCOVERY(任一来源命中即可进入候选)
Crossref / OpenAlex / Semantic Scholar (学术主题,并行查询)
↓ 若无结果
Serper / Gemini Grounded Search (URL 结果,通常无 DOI)
↓ 若全部失败
LLM Fallback (默认禁用;产出标记 llm_unverified)
QueryRouter 智能路由:已知条目查询(DOI、精确标题)→ 先查 Crossref;宽泛主题 → 先查 Semantic Scholar;近期/冷门主题 → 先走 Gemini Grounded / Serper。
STAGE 2 — CONFIRMATION(默认 3 选 2)
对每个带 DOI 的候选,直接按 DOI 逐库查询:
- ≥
min_confirming_sources持有 → 保留,标记multi_source_confirmed - 恰好一家持有 → 丢弃,标记
single_source - 完全没有 DOI(网络结果)→ 默认丢弃,除非
allow_unconfirmed_web_sources=True,保留则标记web_search_unconfirmed
四个相关设置(来自 docs/citation-verification.md):
| 设置 | 默认 | 效果 |
|---|---|---|
require_multi_source |
True |
丢弃低于 min_confirming_sources 库的引用 |
min_confirming_sources |
2 |
三库中至少几家必须持有该 DOI |
allow_unconfirmed_web_sources |
False |
保留无 DOI 的网络搜索结果 |
enable_llm_fallback |
False |
全部查询失败时允许 LLM 断言引用 |
4.5 论断级验证
CitationClaimVerifier 返回 RELEVANT / IRRELEVANT / UNCERTAIN。注意执行时机:在引用阶段(Phase 2.5)运行时草稿文本尚不存在,因此只能针对「论文主题」验证。句子级验证需要草稿,通过 run_citation_claim_verification() 调用。
| 环境变量 | 默认 | 效果 |
|---|---|---|
ENABLE_CLAIM_VERIFICATION |
true |
是否运行论断级验证 |
CLAIM_VERIFICATION_DROP_IRRELEVANT |
true |
移除不相关引用而非仅报告 |
CLAIM_VERIFICATION_MIN_CONFIDENCE |
0.7 |
触发移除所需的置信度 |
报告写到研究目录的 citation_claim_verification.md 与 .json。作者特别说明:引擎拒绝把参考文献清空。
4.6 字数与引用量目标
| 级别 | 总字数 | 最少引用 | 深研来源数 | 章节数 |
|---|---|---|---|---|
| Research Paper | 3,000-5,000 | 10 | 20 | 3-4 |
| Bachelor | 10,000-15,000 | 15 | 40 | 5-7 |
| Master | 25,000-30,000 | 25 | 50 | 7-10 |
| PhD | 50,000-80,000 | 50 | 100 | 10-15 |
配置在 engine/draft_generator.py 的 get_word_count_targets()。
4.7 导出
PDF 走 Pandoc + LaTeX,DOCX 走 Pandoc——Pandoc(PDF 另需 LaTeX 工具链)需自行安装,这是安装环节最容易漏掉的一步。README 说可导出 PDF、Word 与 LaTeX,耗时「通常 10 到 20 分钟」。
五、典型适用场景
- 文献综述初稿:手头 50+ 篇文献要整合成结构化综述,最直接的场景。
- 学位论文章节:PhD 目标 50,000-80,000 字、50+ 引用,量级匹配。
- 教学材料起草:
--level bachelor与多语言支持(--lang de)适合非英语场景。 - 引用错配体检:拿它生成的草稿当参照物,检查自己手写的综述有没有引用错配。
- 快速文献侦察:
--expose模式只出提纲与来源,成本极低。 - agent 内嵌:
npx skills add后在自己 agent 里跑,接受「不调用 Python engine」的前提。
六、坑与注意
- 现象:三库并非真正独立。 影响:
citation-verification.md明确指出 OpenAlex 和 Semantic Scholar 都摄取 Crossref 的元数据,所以「2 家确认」不等于两份彼此独立的证词——尤其当 Crossref 本身是候选来源时,确认方之一往往就是它自己。做法:把 2/3 当作去重下限而非强证据;关键引用自己再核一遍。 - 现象:确认方之一可能被「照单全收」。 影响:文档坦承「两家持有」中,一家可能正是最初返回候选的那个库,引擎对其「以它自己的说法为准而不重新查询」,真正被直接按 DOI 查的只有其余的。做法:需要严格时自己逐库查 DOI;引擎内部用
confirming_sources与independently_confirmed_by区分,但 README 未说明二者如何暴露给用户。 - 现象:
UNCERTAIN不是通过。 影响:CitationClaimVerifier读的是标题与摘要,不是全文;作者原文说「UNCERTAINmeans unchecked, not passing」。做法:把输出的 verdict 当作给人审的证据,不要当结论;尤其是具体数字类论断。 - 现象:论断级验证在流水线中只对着「主题」跑。 影响:Phase 2.5 时还没有正文,可用的唯一论断是论文主题本身,因此「这句话配这篇文献」的检查在默认流程里并未真正发生,需要草稿存在后调
run_citation_claim_verification()。做法:对最终稿单独跑一次句子级验证。 - 现象:严格过滤会让运行失败。 影响:多源确认、严格质量过滤与论断级移除都在缩小文献库,若引用阶段无引用存活,流水线抛
PipelineValidationError。做法:这是「以前能出草稿、现在报错」的根因;应主动放宽检索或显式调require_multi_source=False,而非随手改配置碰运气。 - 现象:README 里引用的引用条数已过时。 影响:文档明确说旧版 README 与
EVALUATION.md中的引用计数是在多源确认成为默认之前测的、此后未重测,必须当作历史数据看。做法:别拿「它能找出 40+ 篇」当现在的预期;且用require_multi_source=False时引用会带verification_status: not_checked,而不是被标成已确认。 - 现象:arXiv 不作为引用库被查询。 影响:
arxiv.org可能作为网络搜索结果出现、Semantic Scholar 也暴露 arXiv ID,但引擎里没有 arXiv API 客户端,纯 arXiv 预印本默认拿不到 2/3 确认,容易被丢。做法:预印本为主的题目需预期更多丢弃,可考虑allow_unconfirmed_web_sources=True(但会被标记)。 - 现象:导出依赖 Pandoc(PDF 另需 LaTeX)。 影响:pip 装完直接跑
opendraft写稿没问题,但最后一步导出会因缺 Pandoc 失败。做法:先装 Pandoc;PDF 另备 TeX 发行版(如 TeX Live 的最小集合)。 - 现象:LLM fallback 存在但默认关闭。 影响:若打开
enable_llm_fallback=True,LLM 会「从训练数据里断言」引用,这类产出全标llm_unverified,外部没有任何东西检查过它是否存在。做法:保持默认关闭;若为覆盖率打开,成稿后必须逐条人工核查该标记。 - 现象:skill 路径不调用 Python 引擎。 影响:
npx skills add装到 agent 里的是skills/autonomous-research/提示词与流程,行为质量取决于你的 agent 与模型,与 CLI 的 19-agent 流水线不是一回事。做法:想要完整引用验证流水线,用 CLI 或pip install路径;skill 路径用于「在自己 agent 里复用这套流程」。 - 现象:作者自述「草稿不是可直接投稿的成品」。 影响:README FAQ 明说产物是 starting point,需审阅编辑并遵守所在机构对 AI 使用披露的政策。做法:把它当初稿生成器而非投稿机器人;披露政策自己查,别指望工具替你判断。
- 现象:QA 阶段是咨询性的、不阻断。 影响:Phase 3.5 的 Thread / Narrator 只产出报告,
Crafter写出的矛盾与语气问题不会自动拦下。做法:成稿后必读thread_report/narrator_report,别假定引擎已替你把关。
七、与同类对比
仓库自带 docs/opendraft-vs-storm.md,对照表很实用:
| OpenDraft | STORM | Co-STORM | |
|---|---|---|---|
| 产出 | 研究论文、文献综述、论文章节(1 万-2 万字+) | 类维基百科条目 | 条目 + 共享思维导图 |
| 驱动方式 | 全自动:一个主题进,完整草稿出 | 全自动 | 协作:用户观察或引导讨论 |
| 研究方式 | 19 个专职 agent | 视角引导提问 + 模拟写作者/专家对话 | LLM 专家与 moderator 与用户轮次对话 |
| 来源 | Crossref、OpenAlex、Semantic Scholar | 网络检索(You.com、Bing、Serper、Brave、SearXNG、DuckDuckGo、Tavily、Google、Azure)或自有文档 | 同 STORM |
| 引用校验 | DOI 须被 ≥2/3 库持有,逐条记录哪几家确认 | 指向检索到的网络来源 | 同 STORM |
| 导出 | PDF、Word、LaTeX | 文章文本 | 文章文本 |
| 模型 | 自带 key 的 Gemini / OpenAI / Claude | LiteLLM 支持的任意模型 | 同 STORM |
| 安装 | pip install opendraft |
pip install knowledge-storm |
同 STORM |
| 许可 | MIT | MIT | MIT |
选择建议(作者原文):要带学术引用的论文/综述/学位论文草稿 → OpenDraft;要有来自网络的百科式主题概览 → STORM;要交互式探索自己掌舵 → Co-STORM。
再往外看:vs 纯 LLM 手写——差别不在文笔而在引用可验证性;vs Jenni / ThesisAI——卖点是开源 + 自带 key + 引用验证算法写进文档;vs 纯检索工具(Semantic Scholar API + Zotero)——后者保证检索质量但不自动成文,前者自动成文但引用判断带 LLM 成分。
外部背书方面,README 提到自己被两篇工作引用:NIH/NIEHS 的 Talukder 等(2026),Discourse2Draft,Frontiers in Artificial Intelligence,doi:10.3389/frai.2026.1945655;以及 NUS 的 Kong 等(2026),AI for Auto-Research,arXiv:2605.18661。README 还自述下载量「PyPI 20,289 + npm 4,200,截至 2026 年 11 月」。
八、一句话推荐结论
做文献综述或学位论文初稿、且最怕引用被编造或错配的人,值得用 OpenDraft——多源 DOI 确认 + 论断级验证是同类开源项目里少见的工程化尝试,作者也诚实写明了这两道检查「证明不了什么」;但务必把它当初稿生成器:结论自己核,句子级验证单独跑,Pandoc/LaTeX 先装好,arXiv 预印本多的题目预期更多引用被丢。
来源
- https://github.com/federicodeponte/opendraft(README,2026-11-04 抓取)
- https://raw.githubusercontent.com/federicodeponte/opendraft/master/docs/PIPELINE.md
- https://raw.githubusercontent.com/federicodeponte/opendraft/master/docs/citation-verification.md
- https://raw.githubusercontent.com/federicodeponte/opendraft/master/docs/opendraft-vs-storm.md
- web_search 命中同仓库 README 页面(另一份缓存快照,措辞略有差异,用于交叉比对)
不确定与待核
- ⚠️ PyPI / npm 上的确切版本号本文未锁定(README 只给
pip install opendraft)。需要精确版本请查 pypi.org/project/opendraft/。 - ⚠️ 下载量「PyPI 20,289、npm 4,200,截至 2026 年 11 月」与「$0.35-$3 每份草稿」「10-20 分钟」均为 README 自述,作者未提供独立来源;本次未独立核验。
- ⚠️ 引用计数类数字(README 的「60 页、40+ 引用」示例、字数目标表)来自 README 与
PIPELINE.md;文档已声明部分旧计数未在多源确认成为默认后重测。 - ⚠️
docs/MAINTAINER_PUSH_RUNBOOK.md、.env.example全文、CHANGELOG.md未抓取,.env.example中的其余变量名未逐条列出。 - ⚠️ README 提到 npm 包名
opendraft(npx opendraft)与 PyPI 同名,但本次未在 npm 页面核实其发布时间与版本。 - ⚠️ web_search 返回的第三方条目「Opendraft / opendraft.io, Los Angeles, SEO 博客工具」与本仓库并非同一实体,已排除,未采信。