用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/percywangwghz/Knowledgeapp-PercyW --skill pdf-preprocess命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
| name | pdf-preprocess |
| description | PDF 转 Markdown 的多级回滚工作流——文本层分流(有文本层本地毫秒级解析,扫描/图片页才走 VLM 且并发),本地库链保底,大 PDF 按语义切块,重要图表自动截图为 PNG。 |
| whenToUse | 需要把 PDF(研报、论文、公告、扫描件等)高保真转换为 Markdown,或需要从 PDF 中自动截取重要图表(插图/图表区域截图)时使用;尤其含表格/图表/公式/复杂版面或页数较多(>10 页)的 PDF。 |
把 PDF 转成结构化 Markdown 的自研编排层,入口为 convert.py 的 convert_pdf(),
也可 CLI 直接调用。数据只流向用户自己配置的 API 厂家(VLM 档)或哪都不去(纯本地档),
不依赖任何第三方解析服务。
切块后先看每块的文本层密度(块均字符/页,env KB_TEXT_LAYER_MIN,默认 100):
ThreadPoolExecutor
并发(env KB_VLM_WORKERS,默认 3)。config.PROVIDERS 中 vision=True 且有 API Key 时,
对无文本层的块启用。pymupdf 本地渲染页面为 PNG → OpenAI 兼容多模态请求 → 模型转录为
Markdown。扫描件、图表解读、复杂版面、公式只有这一档能覆盖。单块 429/5xx/超时
指数退避最多重试 3 次;单块最坏耗时约 10 分钟后落下一档,不会卡死。extract_tables() 转 Markdown 表格。单块全链失败时记 degraded_pages 并用 pypdf 文字层保底——哪怕是文字流也保留,不丢内容。
VLM 档要求配置的主模型具备视觉能力(如 kimi-k2.6 / qwen-vl-max / glm-4.6v / gpt-4o 等)。 不提供独立的解析模型选项:主模型不支持视觉或未配 Key 时自动落本地库链, 不静默降质——调用方应在 UI 说明当前走了哪档。 VLM 成本只花在扫描/图片块上(每块一次调用,花用户自己的 token)。
KB_VLM_CHUNK_PAGES
(默认 5 页),本地档 KB_PDF_CHUNK_PAGES(默认 10 页)。<!-- p.41-50 · engine:vlm -->,保留溯源。转换同时纯本地截取图表(不调模型、零额外成本),随结果 images 返回:
get_image_info 拿 bbox,面积占页 ≥ KB_IMG_MIN_FRAC(默认 6%)
才算重要——自动滤掉 logo/图标/页眉装饰。find_tables 检出的表格区域、以及文字覆盖率 ≥ 20% 的密集文字区
(无边框表格/正文段落)一律跳过——能提取成 Markdown 表格的内容不留图片。KB_IMG_MAX(默认 20,0 关闭)张,分辨率 KB_IMG_DPI(默认 150)。[[图:…]] 占位符实际引用的图;未被引用的(模型判为无关)
不搬运、不附录,随暂存目录清掉。python convert.py 研报.pdf > out.md # 进度与降级告警走 stderr
python convert.py 研报.pdf --imgs ./imgs > out.md # 截取的图表 PNG 写入 ./imgs
from convert import convert_pdf
out = convert_pdf("研报.pdf", data, progress_cb=lambda info: print(info))
# -> {"md": str,
# "blocks": [{"pages", "engine", "ok", "error"}],
# "degraded_pages": [1-based 页码],
# "images": [{"page", "name", "data"}]} # 截取的图表 PNG 字节
api_key / model 不传时走 llm.py 注入链解析(线程注入 → 前端 provider → env)。
| 变量 | 默认 | 说明 |
|---|---|---|
KB_PDF_CHUNK_PAGES | 10 | 本地档每块页数上限 |
KB_VLM_CHUNK_PAGES | 5 | VLM 档每块页数上限 |
KB_VLM_WORKERS | 3 | VLM 块并发数 |
KB_TEXT_LAYER_MIN | 100 | 文本层判定阈值(块均字符/页) |
KB_IMG_MAX | 20 | 单文档图表截取上限(0 = 关闭) |
KB_IMG_MIN_FRAC | 0.06 | 图区面积占页面比例下限 |
KB_IMG_DPI | 150 | 截图分辨率 |
pymupdf4llm(含 pymupdf,VLM 渲染 + 本地主力 + 图表截取)、pdfplumber(表格补强)、
pypdf(切分 + 兜底)、requests(VLM 请求)。库缺失时对应档自动跳过;
脱离仓库独立使用时注入链不可用,自动降级为纯本地解析(图表截取不受影响)。