ワンクリックで
pdf-parsing
当需要用 structai.read_pdf 将 PDF 文档解析成本地 Markdown、抽取图片资源,并处理 MinerU 解析缓存或代理重试问题时使用。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
当需要用 structai.read_pdf 将 PDF 文档解析成本地 Markdown、抽取图片资源,并处理 MinerU 解析缓存或代理重试问题时使用。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
将 arXiv、旧会议、旧期刊或自定义 LaTeX 论文工程迁移到目标会议/期刊投稿模板;用于模板 A 到模板 B 的 LaTeX class/style/bibliography/单双栏转换、全匿名投稿检查、页数约束、图表公式排版、PDF 可视化检查、文本/图片/表格/公式守恒、模板标准文件守恒和最终压页。
当需要部署或训练 LLM/VLM 时使用;覆盖 vLLM OpenAI-compatible 服务、多模态输入限制、Qwen3.5 工具调用、thinking/reasoning 控制、CUDA Graph 策略,以及 ms-swift SFT/DPO/GRPO full training、Megatron 长序列训练、messages loss/loss_scale、数据校验、显存排错和训练检查。
当需要在 lab cluster 1 / PJLAB 上使用开发机、rlaunch worker 或 rjob 任务时使用;覆盖交互 SSH、安全边界、路径规范、代理、CPU/GPU 分区、训练/部署、服务访问和排错,并要求使用原始 rlaunch/rjob 命令。
Use when installing, configuring, running, embedding, deploying, or debugging InternScience ResearchHarness as a lightweight tool-using LLM agent runtime, including CLI runs, local frontend UI, OpenAI-compatible API server, Python API, tool selection, workspaces, traces, compaction, tests, and read-only source inspection.
Use when configuring or debugging the context-overlay OpenAI-compatible proxy for deterministic prompt/context injection, prompt patching, rule matching, request routing, rejection rules, skill_dir retrieval, streaming forwarding, and local or tunneled proxy validation.
Use when building, testing, or debugging LLM applications with the StructAI Python toolkit, including LLMAgent calls, structured outputs, LLM judging, batch concurrency, file/PDF utilities, text parsing, private-IP no_proxy handling, and timeout wrappers.
SOC 職業分類に基づく
| name | pdf-parsing |
| description | 当需要用 structai.read_pdf 将 PDF 文档解析成本地 Markdown、抽取图片资源,并处理 MinerU 解析缓存或代理重试问题时使用。 |
把 PDF 文档解析成本地可读取、可搜索、可复制的 Markdown,并抽取 PDF 中的图片资源。解析完成后,后续阅读应优先使用本地 Markdown 文件;重复调用 structai.read_pdf 也会优先复用本地解析结果,不会在本地结果已存在时重复上传同一个 PDF。
当前 skill 对照的关键解析依赖:
structai package version:0.1.24。structai GitHub HEAD:d20df602578bee124a9c93b293493e63212d0aab。structai.read_pdf 行为是否变化;如果上游版本或 HEAD 变化,必须重新阅读 read_pdf 源码和 structai_skill() 输出。pip install structai
如果包索引中找不到 structai,或需要使用 GitHub 仓库中的最新代码:
pip install "git+https://github.com/black-yt/structai.git"
校验:
python3 -c "from structai import read_pdf; import inspect; print(inspect.signature(read_pdf))"
如果当前环境同时有多个 Python,请确认 pip 和 python3 指向同一个环境:
python3 -m pip show structai
python3 -c "import structai; print(structai.__file__)"
read_pdf 源码追溯read_pdf 行为以当前安装版本源码为准;如果缓存、上传、下载、图片路径或返回值和预期不一致,先读源码再判断。inspect.signature(read_pdf) 用于看函数参数。inspect.getsource(read_pdf) 用于看 read_pdf 入口逻辑。structai.__file__ 和 structai.pdf.__file__ 用于定位安装包源码文件。site-packages 或共享环境;需要改库时,先 clone https://github.com/black-yt/structai,在用户确认后用 editable install。python3 - <<'PY'
import inspect
import structai
import structai.pdf as pdf_mod
from structai import read_pdf
print("structai:", structai.__file__)
print("structai.pdf:", pdf_mod.__file__)
print("signature:", inspect.signature(read_pdf))
print(inspect.getsource(read_pdf))
PY
如果要继续追 read_pdf 调用的内部函数,先查看 structai.pdf 模块源码路径,再按函数名读取:
python3 - <<'PY'
import inspect
import structai.pdf as pdf_mod
print(pdf_mod.__file__)
for name in ["get_headers"]:
obj = getattr(pdf_mod, name, None)
if obj is not None:
print(f"\n===== {name} =====")
print(inspect.getsource(obj))
PY
structai.read_pdf 会调用 MinerU 精准解析 API。该 API 需要 Token,且请求头格式为 Authorization: Bearer <Token>。
获取方式:
MINERU_TOKEN。Linux / macOS / WSL:
export MINERU_TOKEN="your_mineru_token"
Windows PowerShell:
$env:MINERU_TOKEN = "your_mineru_token"
验证环境变量是否已设置:
python3 -c "import os; print('MINERU_TOKEN set:', bool(os.environ.get('MINERU_TOKEN')))"
验证 structai 能读到 Token:
python3 -c "from structai.pdf import get_headers; h=get_headers(); print(h['Authorization'][:16] + '...')"
不要把真实 Token 写进代码、文档、Git 仓库或聊天记录。需要长期生效时,把 export MINERU_TOKEN=... 放到自己的 shell 配置文件或系统环境变量中。
如果未设置 Token,structai.read_pdf 会报类似错误:
MINERU_TOKEN not found. Please register a free account at https://mineru.net/ and set the environment variable.
为了避免解析时生成 __pycache__,建议运行命令时加上:
PYTHONDONTWRITEBYTECODE=1
当前 structai.read_pdf 封装使用 MinerU 批量本地文件上传接口 /api/v4/file-urls/batch,适合解析本地 PDF 文件。MinerU 官方文档说明:精准解析 API 需要 Token,支持表格和公式识别,单个文件大小上限为 200 MB,页数上限为 200 页;批量上传接口单次申请上传链接不能超过 50 个文件。
如果 PDF 超过接口限制,先按页拆分或压缩,再分别解析。
Python 调用:
from structai import read_pdf
result = read_pdf("paper.pdf")
命令行解析:
env PYTHONDONTWRITEBYTECODE=1 python3 -c "from structai import read_pdf; read_pdf('paper.pdf')"
带摘要输出:
env PYTHONDONTWRITEBYTECODE=1 python3 -c "from structai import read_pdf
p='paper.pdf'
r=read_pdf(p)
print('success', bool(r))
if r:
print('path', r['path'])
print('text_length', len(r['text']))
print('image_count', len(r['img_paths']))
print(r['text'][:1200])"
对 paper.pdf 调用 read_pdf 后,通常会在 PDF 同级位置生成同名目录:
paper/
full.md
layout.json
*_content_list.json
图片资源子目录
常用文件:
full.md:解析后的全文 Markdown。layout.json:版面结构信息,可用于排查版面解析问题。*_content_list.json:内容块列表,可辅助定位段落、标题、表格和图片。如果同名目录下已经存在 full.md,read_pdf 会优先复用本地解析结果,并直接读取本地 Markdown 和图片路径;这种情况下重复调用不会再次把同一个 PDF 上传到 MinerU。因此不用担心为了获取返回值而重复调用 read_pdf("paper.pdf") 会产生重复上传。只有删除本地解析目录、缺失 full.md、更换 PDF 路径或替换原始 PDF 后,才需要重新上传解析。
实际阅读时仍建议直接打开 full.md,这样最快,也方便手工检查解析质量。
成功时通常返回:
{
"path": "paper.pdf",
"text": "...",
"img_paths": [...],
"imgs": [...]
}
字段含义:
path:原始 PDF 路径。text:full.md 的全文内容。img_paths:Markdown 正文实际引用到的图片路径。imgs:对应的 PIL 图片对象。读取开头:
sed -n '1,120p' paper/full.md
查看标题结构:
rg -n "^#|^##|^###" paper/full.md
查看图片引用:
rg -n "!\\[" paper/full.md
至少确认:
full.md 存在且非空。MINERU_TOKEN not found:先到 https://mineru.net/ 申请 Token,再设置 MINERU_TOKEN 环境变量。
401、403 或 Authorization 相关错误:检查 Token 是否复制完整、是否过期、当前 shell 是否能读取 MINERU_TOKEN。
解析返回 None:确认 Token 已设置;关闭代理重试;检查是否已有可读 full.md;如果仍失败,记录错误信息。
Markdown 局部乱码或断词:用 full.md 快速定位章节,对关键段落、公式和表格回到 PDF 原文或抽取图片核对。
图片目录文件很多:优先看 Markdown 中实际引用的图片,再按后续任务需要浏览其他图片。
网络问题与代理处理:MinerU 处理和结果下载需要网络。如果遇到 SSLError、UNEXPECTED_EOF_WHILE_READING、Max retries exceeded、Connection reset、上传成功但结果压缩包下载失败等问题,优先关闭代理后重试。关闭代理时仍要保留 MINERU_TOKEN:
env -u HTTP_PROXY -u HTTPS_PROXY -u ALL_PROXY -u http_proxy -u https_proxy -u all_proxy -u NO_PROXY -u no_proxy MINERU_TOKEN="$MINERU_TOKEN" PYTHONDONTWRITEBYTECODE=1 python3 -c "from structai import read_pdf; read_pdf('paper.pdf')"
处理顺序:
MINERU_TOKEN 已设置。full.md。full.md,直接使用本地 Markdown。full.md,记录完整错误信息,稍后重试或更换网络环境。