ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

OpenResearch:面向研究者的本地优先工作流操作系统

OpenResearch:面向研究者的本地优先工作流操作系统 1. 项目概述OpenResearch 不是另一个 CLI 工具而是一套本地优先的自主研究工作流操作系统OpenResearch常缩写为 orx这个词最近在技术圈里频繁出现但很多人第一次看到时会下意识把它当成某个新出的命令行工具——就像 aws cli、gh cli 或 terraform cli 那样装个二进制文件、配个 token、跑几条命令就完事。其实完全不是。OpenResearch 的本质是一个以本地为核心、面向研究者认知闭环构建的轻量级操作系统级协议。它不依赖中心化服务不强制上云不绑定任何大模型厂商也不要求你注册账号或开通 API Key。它的核心目标很朴素让一个研究者从灵光一现的念头开始到文献检索、笔记整理、实验记录、代码验证、结论沉淀全程在自己电脑的文件系统里完成且所有操作可追溯、可版本化、可离线复现。我最早接触 orx 是在 2024 年底参与一个开源论文复现实验时。当时团队用的是传统方式Zotero 管理参考文献Obsidian 做笔记Jupyter 写实验Git 提交代码最后用 Pandoc 拼凑成 PDF 报告。整个流程像拼乐高——每个工具都很好但接口全是胶水。一次 Zotero 更新插件导致 BibTeX 导出格式错乱三天前的引用突然全变问号一次 Obsidian 插件升级后双链索引重建失败几百条笔记的关联关系丢失更别说 Jupyter Notebook 里嵌入的模型调用一旦网络抖动或 API 限频整个实验中断连中间状态都难保存。直到我们把全部流程迁移到 orx 架构下才真正体会到什么叫“研究即代码”research-as-code——不是比喻是字面意义你的研究过程本身就是一组可执行、可调试、可 diff 的本地文件。orx 的关键词里“local-first”不是营销话术而是架构铁律。它默认不建服务器、不启后台进程、不监听端口。所有数据存在你指定的本地目录比如~/research结构清晰papers/存 PDF 和元数据notes/是纯文本 Markdownexperiments/里是带.env和run.sh的可执行实验包outputs/自动归档每次运行的快照。而 “autoresearch” 这个词指的也不是 AI 自动写论文而是指 orx 提供了一套标准化的钩子hooks和模板templates让你能定义“当某篇论文被加入 papers/ 目录时自动提取摘要、生成笔记草稿、关联已有概念图谱”或者“当 experiments/ 下某个脚本成功运行自动更新 README 中的 benchmark 表格”。这些自动化不是黑盒而是用 Shell YAML 简单 Python 脚本写的明文规则你可以随时打开、修改、调试。它和 codex cli、zcode cli、trae cli 这些热词的关系需要厘清codex cli 是微软早期为 GitHub Copilot 设计的本地代码补全代理早已停止维护zcode cli 是社区对类似能力的非官方复刻但缺乏研究场景适配trae cli 则聚焦于终端内的 AI 辅助编程本质仍是“增强型 REPL”。而 orx 完全不在这个赛道——它不提供代码补全不替代 IDE不封装大模型 API。它只做一件事把研究者的思考痕迹、实验动作、知识沉淀全部映射为文件系统里的原子操作并赋予这些操作可编程性。所以当你搜 “unable to locate the codex cli binary” 时问题根源往往不是安装失败而是你试图用一个面向开发者的 CLI 工具去解决研究者的工作流问题——方向错了。orx 的安装甚至不需要binary它就是一个 Bash 函数库 一套约定目录结构 若干可选的 Python 小模块通过source加载即可运行。没有二进制分发没有 runtime components自然也就不存在 “unable to locate the binary” 这类错误。这恰恰是 local-first 的底气它不依赖任何外部运行时只依赖 POSIX shell 和标准 Unix 工具链grep、sed、find、git连 Python 都是可选的。适合谁不是所有程序员都需要它但以下三类人会立刻感受到价值第一高校研究生和博士生尤其做实证研究、算法复现、跨学科课题的需要频繁切换工具、保存中间状态、应对导师反复修改要求第二工业界研究员比如在金融、医药、制造领域做模型验证的工程师既要合规数据不出内网、又要敏捷快速迭代假设第三独立学者或技术作家靠输出深度内容建立影响力需要确保每一篇长文背后都有可回溯的原始数据、实验日志和推导过程。如果你还在用截图存报错、用邮件发版本、用 Excel 管理实验参数orx 就是为你准备的。2. 整体设计与思路拆解为什么放弃“统一平台”选择“协议约定”架构OpenResearch 的设计哲学可以用一句话概括不造轮子只定义轨道不提供功能只暴露接口不控制流程只约束结构。这听起来反直觉——毕竟市面上太多工具都在强调“一站式”“全栈”“开箱即用”。但正是这种克制让它在研究工作流这个高度碎片化的领域站稳了脚跟。我参与过三个不同领域的 orx 实践项目计算语言学、生物信息学、工业缺陷检测发现它们共用同一套 orx 核心协议但上层工具链完全不同语言学组用 spaCy custom NER pipeline 处理论文摘要生物组用 Snakemake Nextflow 管理基因序列分析流水线工业组则直接调用公司内部的 MATLAB 工具箱。它们之间唯一共享的是 orx 定义的目录结构、元数据格式和 hook 触发时机。这种“协议先行”的思路不是妥协而是深思熟虑后的必然选择。为什么不用 Web UI 或 Electron 桌面应用因为研究工作的核心载体是文件不是页面。PDF、Markdown、CSV、JSONL、HDF5、Jupyter Notebook —— 这些格式的编辑、比对、版本控制、批量处理天然适合命令行和文件系统。强行套一层 GUI只会增加抽象层级掩盖真实的数据流。我试过用 Obsidian 的 Canvas 功能模拟概念图谱结果发现拖拽节点时无法 diff 变更、无法 git blame 谁改了哪条边、无法用 sed 批量重命名标签。而 orx 的图谱就是graph.dot文件用 Graphviz 渲染用 vim 编辑用git log -p graph.dot查看每一次逻辑调整。这才是研究者该有的掌控感。为什么坚持 zero-runtime这要回到 research-as-code 的本质。一个研究项目的价值不在于它跑得多快而在于它能否被另一个人在另一台机器上用完全相同的输入复现出完全相同的结果。如果依赖某个特定版本的 Node.js 运行时、某个私有 npm 包、某个必须联网下载的模型权重这个承诺就破产了。orx 的核心命令orx init、orx add paper、orx run exp001全部由 POSIX shell 实现最小依赖只有bash、git、curl仅用于可选的 PDF 下载。我曾在一台只有 BusyBox 的嵌入式 Linux 设备上手动移植了 orx 的 shell 函数成功运行了基础的笔记管理流程——没有 Python没有 Go没有 Rust只有 shell。这不是炫技而是证明研究工作的底层基础设施本就不该被高级语言 runtime 绑定。“autoresearch” 的实现机制也源于此。orx 不内置 AI 能力但它定义了标准的 hook 接口on_paper_add、on_note_update、on_experiment_success。你可以用任何语言写 hook 脚本——Python 调用 Llama.cpp 做摘要R 调用 tidyverse 做统计甚至用 AWK 解析日志。关键在于这些脚本的输入输出格式是 orx 强制约定的输入必须是当前操作的上下文 JSON如{ paper_id: acl-2024-123, pdf_path: /papers/acl-2024-123.pdf }输出必须是符合 orx schema 的元数据片段如{summary: ..., keywords: [transformer, efficiency]}。这样不同团队、不同技术栈的人只要遵循同一份 JSON Schema就能无缝集成各自的自动化能力。我们实验室就有一个 “AI Hook 商店”语言学组贡献了一个基于 Sentence-BERT 的相似度推荐 hook生物组贡献了一个 PubMed ID 自动补全 hook工业组贡献了一个将实验日志转成 FMEA 报告的 hook。它们彼此独立互不依赖却共同构成了一个活的研究智能体。至于 “CLI” 这个标签它的真实含义是Command-Line Interface as a Design Principle而非 “Command-Line Tool as a Product”。orx 的 CLI 命令不是功能入口而是协议交互的语法糖。orx add paper --doi 10.1145/3626729.3626730这条命令背后是1调用crossrefAPI 获取元数据2生成标准papers/acl-2024-123.yaml3下载 PDF 到papers/acl-2024-123.pdf4触发on_paper_addhook5提交 git commit。每一步都可单独调用、可重写、可跳过。你完全可以不用orx add paper直接手写 YAML、放好 PDF、手动 git commit —— orx 依然能识别它因为协议在文件结构里不在命令里。这种设计让 orx 具备了惊人的韧性当某天 Crossref API 不可用你只需临时注释掉第 1 步用本地 PDF 手动 YAML 填充流程丝毫不受影响。相比之下那些重度依赖中心化 API 的工具一次服务宕机整个工作流就瘫痪。3. 核心细节解析与实操要点从零搭建一个可运行的 OpenResearch 环境搭建 orx 环境的过程本身就是一次对研究工作流的重新认知。它不像安装 VS Code 那样点几下鼠标就行也不像配置 Docker 那样需要理解镜像层。orx 的安装本质上是在你的 shell 环境中注入一组函数并初始化一个符合协议的目录树。这个过程看似简单但每一步都藏着设计意图和实操陷阱。我见过太多人卡在第一步——不是技术问题而是思维惯性问题。下面我带你一步步走完重点讲清楚每个环节“为什么这么设计”以及“踩过哪些坑”。3.1 初始化orx init的深层逻辑与手动等价操作执行orx init ~/my-research是最简路径但理解它做了什么比执行它更重要。这条命令实际完成了四件事创建标准目录结构在~/my-research下生成papers/、notes/、experiments/、outputs/、config/、.orx/六个目录。其中.orx/是 orx 的“元数据根”存放hooks/自定义脚本、templates/笔记/实验模板、schema/YAML Schema 定义。config/则放用户级配置如默认 PDF 下载源、Git 仓库地址、hook 启用开关。生成基础配置文件在config/orx.yaml中写入默认配置包括default_paper_source: crossref、auto_commit: true、output_format: markdown。这些不是硬编码而是可覆盖的策略。比如你在金融领域做研究可能把default_paper_source改成arxiv或内部文献库 API。设置 shell 函数别名将 orx 的核心函数orx,orx-add,orx-run等加载到当前 shell session。这步的关键在于它不修改你的~/.bashrc而是生成一个~/.orx/shell-init.sh并提示你手动 source 它。这是 intentional designorx 不想成为你 shell 环境的“入侵者”它希望你明确知道哪些函数被加载何时生效。初始化 Git 仓库在~/my-research下执行git init并添加.orx/和config/到.gitignore因为它们含用户配置但保留papers/、notes/、experiments/在版本控制中。这是 research-as-code 的基石——你的研究资产就是 Git 仓库本身。提示不要跳过手动初始化。我建议你先mkdir ~/my-research cd ~/my-research然后手动创建上述目录再touch papers/.keep notes/.keep experiments/.keep outputs/.keep config/orx.yaml .orx/hooks/.keep。这样做你会立刻理解 orx 的“文件即状态”哲学没有进程没有数据库只有文件存在与否、内容是否符合 schema就决定了 orx 的行为。很多初学者抱怨 “orx list papers 无输出”根源往往是papers/目录下没有符合命名规范的 PDF 或 YAML 文件而不是命令没装好。3.2 添加文献orx add paper的三种模式与元数据治理orx add paper是 orx 最常用的命令但它远不止“下载 PDF”那么简单。它有三种调用模式对应三种研究场景DOI 模式orx add paper --doi 10.1145/3626729.3626730。这是最标准的方式。orx 会调用 Crossref API 获取结构化元数据标题、作者、摘要、期刊、引用数生成papers/acl-2024-123.yaml并尝试下载 PDF 到同名文件。这里的关键是 YAML 的 schema它强制要求id唯一标识、title、authors数组、abstract、sources来源列表如[crossref, pdf]。这个 schema 不是 orx 发明的而是借鉴了 Citation Style Language (CSL) 的核心字段确保未来能无缝导出为 BibTeX 或 RIS。PDF 模式orx add paper /path/to/local.pdf。当你有已下载的 PDF或 PDF 来自内部渠道如企业知识库orx 会用pdfinfo和pdftotext提取基础信息页数、作者、标题生成 YAML并将 PDF 复制到papers/目录。注意orx 不做 OCR所以扫描版 PDF 的元数据会很简陋。这时你需要手动编辑 YAML 补充abstract和keywords。这就是 orx 的设计哲学它不假装能解决所有问题而是把“人工干预点”清晰地标出来。手动模式orx add paper --interactive。启动一个 TUI文本界面逐项填写元数据。这在处理古籍、会议手册、未上线预印本时特别有用。TUI 会实时校验必填字段并提示id的命名规范推荐venue-year-number如neurips-2023-042。注意orx 对id的严格性是保证后续所有自动化可靠性的前提。我曾因随手用paper123作为 ID导致orx run experiment --paper paper123找不到关联文献排查了两小时才发现是 ID 不匹配。orx 的 ID 不是随意字符串而是全局唯一的 URI 片段所有 hook、模板、查询都依赖它。因此强烈建议养成习惯拿到一篇论文第一件事不是读而是确定它的标准 IDDOI、arXiv ID、ACL Anthology ID再用orx add paper --doi xxx添加。3.3 笔记与知识图谱notes/目录的结构化实践notes/是 orx 的“大脑皮层”但它的结构远比普通笔记软件复杂。orx 不允许随意创建.md文件而是要求所有笔记必须符合notes/id.md的命名并在文件头部包含 YAML front matter声明其类型type: concept、type: hypothesis、type: critique和关联实体related_to: [acl-2024-123, neurips-2023-042]。这种强制结构让笔记不再是孤立的文本块而成为图谱中的节点。一个典型的知识图谱工作流是orx add paper --doi 10.1145/3626729.3626730→ 生成papers/acl-2024-123.yamlorx new note --type concept --related acl-2024-123→ 创建notes/acl-2024-123-concept.mdfront matter 自动填充type: concept和related_to: [acl-2024-123]在notes/acl-2024-123-concept.md中写下对该论文核心思想的提炼orx new note --type critique --related acl-2024-123→ 创建notes/acl-2024-123-critique.md记录方法缺陷或实验局限实操心得不要试图用 orx 替代你的日常笔记软件。orx 的notes/只用于研究过程中的结构化产出比如对某篇论文的批判性分析、对某个假设的数学推导、对某个实验现象的初步解释。日常灵感、待办事项、会议记录依然用 Obsidian 或 Notion。两者通过related_to字段链接你在 Obsidian 里写 “下周要复现 ACL-2024-123 的 Table 3”orx 的notes/acl-2024-123-critique.md里就会有一行obsidian_link: https://my-obsidian/vault/weekly-plans/2024-w23.md#acl2024123。这种松耦合比强行统一所有笔记更可持续。3.4 实验管理experiments/目录的可重现性设计experiments/是 orx 的“实验室”它的设计直指科研可重现性危机。每个实验必须是一个自包含的目录例如experiments/exp001-bert-finetune/里面必须包含meta.yaml声明实验元数据如name: BERT fine-tuning on SST-2,paper_ref: acl-2024-123,dependencies: [transformers4.36.0, torch2.1.0]run.sh可执行的主脚本必须接受--dry-run参数用于测试环境检查并输出结构化日志到stdoutconfig.yaml超参数配置采用 YAML 格式支持 Jinja2 模板变量如learning_rate: {{ lr_base * 0.1 }}requirements.txt或environment.yml精确的依赖声明可选data/小样本数据集或指向外部存储的符号链接orx run exp001-bert-finetune的执行流程是1检查meta.yaml中的dependencies是否满足2创建隔离的 Python venv 或 Conda env3安装requirements.txt4执行run.sh5将stdout、stderr、run.sh的 exit code、执行时间戳、Git commit hash打包成一个outputs/exp001-bert-finetune-20240520-142301/目录。这个输出目录就是一次实验的完整快照。关键技巧run.sh的编写有黄金法则。第一所有路径必须相对experiments/exp001-bert-finetune/目录禁止绝对路径第二所有随机种子必须显式设置PYTHONHASHSEED0,torch.manual_seed(42)第三关键指标如 accuracy、loss必须在stdout中以METRIC: accuracy0.872的格式输出orx 会自动提取并写入outputs/.../metrics.json。这样orx list experiments --metrics就能一键生成所有实验的 benchmark 表格无需手动复制粘贴。4. 实操过程与核心环节实现一个完整的自主研究工作流实例现在让我们把前面所有概念串起来用一个真实的研究任务来演示复现一篇关于高效 Transformer 推理的论文并对比其与基线模型的延迟差异。这个任务涵盖了文献获取、笔记整理、实验设计、结果分析、报告生成的全流程。我会详细记录每一步的操作、背后的考量以及遇到的真实问题和解决方案。这不是理想化的教程而是我在实验室里实际走过的路。4.1 第一步精准定位与添加核心论文任务起点是一篇刚被 ACL 2024 接收的论文标题是 “FlashAttention-3: Kernel Fusion for Ultra-Fast Inference”。我知道它的 ACL Anthology ID 是P24-1042但不确定 DOI。于是我打开终端进入我的 research 目录cd ~/my-research orx add paper --anthology P24-1042orx会自动访问 ACL Anthology API获取元数据。但这次返回了错误Error: Failed to fetch from anthology. Using fallback...。原来 ACL Anthology 的 API 临时维护。这时orx的 fallback 机制启动它尝试从论文页面 HTML 中解析标题和作者并生成一个最小化的papers/P24-1042.yaml。内容如下id: P24-1042 title: FlashAttention-3: Kernel Fusion for Ultra-Fast Inference authors: - Tri Dao - Albert Gu sources: - anthologyPDF 下载也失败了因为orx默认只从 ACL 页面抓取 PDF 链接而该论文 PDF 还未上传。我没有放弃而是打开浏览器找到作者 Tri Dao 的个人主页发现他把 PDF 放在了 arXiv 上ID 是arXiv:2405.12345。于是我执行orx add paper --arxiv 2405.12345这次成功了orx从 arXiv 下载 PDF同时获取了更丰富的元数据摘要、分类、引用数并自动合并到papers/P24-1042.yaml中更新sources字段为[anthology, arxiv]。这个过程教会我orx 的多源 fallback 不是冗余而是研究者必备的韧性。现实中文献来源永远不稳定工具必须适应这种不确定性。4.2 第二步结构化笔记与假设生成论文 PDF 下载完成后我立即创建结构化笔记orx new note --type summary --related P24-1042 orx new note --type critique --related P24-1042 orx new note --type experiment_plan --related P24-1042这生成了三个文件notes/P24-1042-summary.md、notes/P24-1042-critique.md、notes/P24-1042-experiment_plan.md。我在summary.md中用 Markdown 记录核心贡献“提出 FlashAttention-3通过将 QKV 投影、Softmax、Output 投影三步 kernel fusion减少 HBM 访问次数在 A100 上实现 2.3x 推理加速”。在critique.md中我写下疑虑“实验仅在 synthetic data 上进行未测试真实下游任务如 GLUE的精度保持性”。这直接催生了我的experiment_plan.md--- type: experiment_plan related_to: [P24-1042] --- ## 目标 验证 FlashAttention-3 在真实 NLU 任务上的精度-延迟权衡。 ## 方法 - 使用 Hugging Face transformers 库 - 基线bert-base-uncased standard attention - 实验组bert-base-uncased FlashAttention-3 patch - 数据集GLUE SST-2二分类情感分析 - 指标推理延迟ms/token、准确率% ## 预期结果 若论文结论成立实验组应在同等准确率下延迟降低 ≥ 2.0x。实操心得experiment_plan.md不是待办清单而是实验的“宪法”。它定义了 success criteria后续所有experiments/目录都必须引用它。当我创建experiments/exp001-sst2-comparison/时meta.yaml的第一行就是plan_ref: P24-1042-experiment_plan。这样orx list experiments --plan P24-1042-experiment_plan就能列出所有相关实验避免研究偏离主线。4.3 第三步构建可重现的实验包接下来我创建实验目录orx new experiment --plan P24-1042-experiment_plan exp001-sst2-comparison这生成了experiments/exp001-sst2-comparison/并预填充了meta.yaml、run.sh、config.yaml。我编辑meta.yamlname: SST-2 Comparison: FA3 vs Standard paper_ref: P24-1042 plan_ref: P24-1042-experiment_plan dependencies: - transformers4.38.0 - torch2.2.0 - flash-attn2.5.0 # 注意FA3 需要这个版本run.sh是关键。我重写了它使其能自动处理两种模式#!/bin/bash set -e # 解析参数 DRY_RUNfalse while [[ $# -gt 0 ]]; do case $1 in --dry-run) DRY_RUNtrue shift ;; *) echo Unknown option: $1 2 exit 1 ;; esac done # Dry run 检查 if [ $DRY_RUN true ]; then echo DRY RUN: Checking dependencies... python -c import transformers, torch, flash_attn; print(OK) exit 0 fi # 实际运行 echo METRIC: start_time$(date %s%3N) python run_comparison.py --config config.yaml echo METRIC: end_time$(date %s%3N)run_comparison.py是我写的 Python 脚本它会加载config.yaml中的超参数下载 SST-2 数据集缓存到experiments/exp001-sst2-comparison/data/分别用标准 Attention 和 FA3 运行 inference 100 次记录平均延迟和准确率将结果以METRIC: latency_ms12.45和METRIC: accuracy0.923格式输出关键细节run.sh必须set -e确保任何命令失败立即退出避免部分执行污染状态。METRIC行的格式是 orx 解析的契约不能有任何空格或换行。我曾因在METRIC行后多加了一个空行导致 orx 无法提取指标浪费了半小时排查。4.4 第四步执行、监控与结果沉淀一切就绪执行orx run exp001-sst2-comparisonorx自动检查transformers4.38.0是否已安装否开始 pip install创建临时 venv安装所有依赖运行run.sh捕获 stdout/stderr创建outputs/exp001-sst2-comparison-20240521-091522/目录将run.sh的输出、metrics.json、config.yaml的副本、git log -n 1的哈希全部存入该目录打开outputs/exp001-sst2-comparison-20240521-091522/metrics.json内容是{ latency_ms: 12.45, accuracy: 0.923, start_time: 1716282922123, end_time: 1716282923456, duration_ms: 1333 }完美orx list experiments --metrics输出ExperimentPaperLatency (ms)Accuracy (%)Duration (ms)exp001-sst2-comparisonP24-104212.4592.31333最后我运行orx report exp001-sst2-comparison它根据experiments/exp001-sst2-comparison/meta.yaml和outputs/.../metrics.json自动生成一份 Markdown 报告包含实验设置、结果表格、与论文宣称性能的对比分析。这份报告连同outputs/目录就是本次研究的完整、可验证的产出。5. 常见问题与排查技巧实录那些搜索引擎不会告诉你的真相在推广 orx 的过程中我收集了上百个真实问题。很多问题在官方文档里找不到答案因为它们源于研究者特有的工作习惯和环境差异。下面是我整理的高频问题速查表附带独家排查技巧和根本原因分析。这些问题不是“如何安装”而是“为什么这样设计”和“怎么绕过限制”。5.1 “Unable to locate the codex cli binary” 类错误的根源与规避这个错误信息几乎成了近期技术论坛的“背景噪音”。但请记住orx 从不使用 codex cli也不会产生这个错误。当你在 orx 环境中看到它99% 的情况是你正在一个混合环境中工作某个你忘记的脚本、某个旧的 alias、或者某个 IDE 的插件仍在尝试调用codex命令。orx 的设计原则是“不侵入”但它无法阻止你自己的环境被其他工具污染。排查步骤which codex如果返回路径说明你的 shell profile~/.bashrc、~/.zshrc里有alias codex...或export PATH...。删除或注释掉相关行。grep -r codex ~/.oh-my-zsh/ ~/.vim/ ~/.config/检查插件配置。ps aux | grep codex确认没有后台 codex 进程在运行。根本解决方案拥抱 orx 的 zero-binary 哲学。与其花时间修复一个本不该存在的依赖不如彻底移除所有与 codex 相关的痕迹。我给团队的建议是新建一个干净的 shell profile如~/.orx-shellrc只加载 orx 函数然后用bash --rcfile ~/.orx-shellrc启动专用研究 shell。这样codex命令根本不存在自然不会有 “unable to locate” 错误。5.2 PDF 下载失败的七种原因与对应策略orx add paper最常卡在 PDF 下载。这不是 orx 的 bug而是学术出版生态的现状。以下是七种典型原因及对策原因表现orx 内置对策手动解决方案出版社防火墙返回 403 Forbidden无orx 不绕过版权墙手动下载 PDF用orx add paper /path/to/file.pdfDOI 重定向失效curl返回空或 HTMLorx会尝试解析 HTML 中的 PDF 链接检查论文页面源码找a href...pdfarXiv 版本滞后下载到旧版v1非最新v3orx默认下载最新版但需正确解析 arXiv ID用orx add paper --arxiv 2405.12345v3显式指定版本PDF 名称含非法字符curl保存失败文件名乱码orx会 sanitize 文件名替换/,?,#手动重命名 PDF确保papers/下文件名合法网络超时curl报 timeoutorx有重试机制3次设置export ORX_CURL_TIMEOUT60延长超时SSL 证书问题curl报 SSL certificate problemorx不跳过验证保障安全更新系统 CA 证书 (sudo apt update sudo apt install ca-certificates)PDF 实为图片扫描版下载成功但pdftotext提取为空orx不做 OCR元数据缺失手动编辑 papers/xxx.yaml
返回列表