PixelRAG 新手教程

PixelRAG 新手教程

把网页和 PDF 渲染成截图、直接在图像上做检索——表格、图表、版式不再丢失。本教程带你 5 分钟跑通两大核心能力,并把它接进 Cursor CLI,给你的 agent 装上「眼睛」。

Python 3.10+ Apache-2.0 arXiv 论文 GitHub 仓库 在线演示

01这是什么

一句话:搜索任何文档时按「它长什么样」来找,而不是只按它包含的文字。

PixelRAG(arXiv 2606.28344,Berkeley SkyLab / BAIR / Berkeley NLP)是一个视觉检索增强生成框架:它把网页、PDF、图片渲染成截图瓦片,用专门微调的视觉嵌入模型直接在图像空间做检索。传统 RAG 要把页面解析成文本块——这一步会把表格、图表、信息图的视觉结构拍平丢掉;PixelRAG 跳过这一步,让阅读模型直接从图上读数。

8.28M
托管维基页面索引 · 免 API key
~217G
自托管全量 FAISS 索引体积
2 个 CLI
pixelshot 渲染 · pixelrag 编排
Apache-2.0
论文·代码·模型·数据全开源
它不做什么,同样重要:
  • 不是文本 RAG 的全量替代——纯文字类查询走文本检索更省更准,两者互补;
  • 不做 OCR——根本不需要:模型直接看图,没有「图→文字」的有损转换;
  • 不是通用截图 SaaS——瓦片尺寸和切分方式是为「检索 + agent 阅读」设计的,不是给人肉眼浏览整页的;
  • 不托管阅读模型——检索它管,「读图作答」的 Reader 用你自己的 LLM。

02为什么需要它

想想那个经典翻车现场:答案明明在页面表格里,RAG 就是答不出来。

原因是结构性的:HTML 解析成文本块时,<table> 的行列关系、单元格合并、图表坐标轴都会被拍平。数字还在,但它依赖的视觉上下文没了。此前社区的三种 workaround,各有各的疼:

替代方案做法为什么不行
文本 RAG解析 HTML → 文本块 → 向量检索表格行列被拍平,数字失去表头与维度上下文
OCR 管道渲染成图 → OCR → 文本索引多一层有损转换;复杂版式还原差;OCR 错误会向后传播
整页塞长上下文把原始 HTML / 全文直接塞进 prompttoken 成本爆炸、噪声大,无法规模化到整个文档库
PixelRAG 的核心洞察:现代多模态模型本来就能读图——与其先把页面有损地转成文本再检索,不如让检索直接发生在图像空间。表格还是那张表格,只是检索和阅读都盯着它本来的样子。

效果有论文背书:Natural Questions 上 PixelRAG 取得 57.9(LLM judge 口径)的成绩;注意严格 exact-match 口径约 29%——论文用的是语义判分,看数字时先对齐口径。

03核心流程

五个阶段组成建索引管道,三步完成一次查询。每个阶段都可以独立安装、独立运行。

两大件让这条路走得通:(1)渲染器 pixelshot,用 headless Chrome(Playwright / CDP)把页面和 PDF 切成纵向瓦片;(2)嵌入模型 Qwen3-VL-Embedding-2B 的 LoRA 微调版,把页面图像嵌进一个「视觉内容可检索」的向量空间。模型权重和训练集都已开源,不想微调可以直接用。

04安装

一条命令装基础版;按需加装 extras,管道每个阶段独立分发。

pip install pixelrag
extras 安装装上什么什么时候需要
pip install pixelragpixelshot 渲染只截图 / 给 agent 用,最常见
'pixelrag[embed]'chunk · embed · build-index自己做向量化并建 FAISS 索引
'pixelrag[index]'全管道编排一条命令从源文档到索引
'pixelrag[serve]'FastAPI 搜索服务本地或服务器提供 /search
'pixelrag[pdf]'PDF 渲染支持渲染 PDF;还需系统装 poppler
'pixelrag[serve,qdrant]'Qdrant 后端大规模索引、量化、磁盘向量
两条易混淆的安装路,别走错:项目 venv 里 pip install pixelrag,pixelshot 只在激活 venv 时可用——agent 在别的目录调它就找不到。要给 agent 用,装成全局工具:uv tool install pixelrag 或 pipx install pixelrag,pixelshot 常驻 PATH,任何会话随时可调。官方为 Claude 插件特意强调过这一点,Cursor CLI 同理。

05环境自检

装完先跑 30 秒冒烟,把浏览器和依赖问题拦在实战之前。

pixelshot --version                              # CLI 在不在 PATH
pixelshot https://example.com -o ./smoke         # 渲染一页试试
ls ./smoke/*/ | head                             # 有瓦片 + tiles.json 就绪
依赖用途缺了会怎样
Python 3.10+运行时pip 装不上
Chrome / Chromium网页渲染渲染报错;设 CHROME_PATH 指路
poppler(系统级)PDF 渲染PDF 瓦片失败;brew install poppler
faiss-cpu本地索引检索建索引 / serve 需要;GPU 版仅 Linux
浏览器前置说明:项目自带的加速版 headless_shell 只在 linux-x64 自动安装;macOS / Windows 上 pixelshot 会自动探测系统 Chrome / Chromium 或 Playwright 的 Chromium。探测不到就用 CHROME_PATH=/path/to/chrome 指路。每次渲染都跑在隔离的一次性 Chrome profile 里——你正开着的 Chrome 不受影响,也不冲突。

06第一次实战:5 分钟跑通

不求全:先把「渲染任意页面」和「搜 828 万维基页面」两个能力跑起来,全程不需要自建索引。

第一步:渲染任意网页为瓦片

pixelshot https://en.wikipedia.org/wiki/Python -o ./tiles

跑完在 ./tiles/ 下能看到按纵向切好的截图瓦片和一个 tiles.json 清单(下一节细看)。

第二步:免搭建,直接搜官方托管索引

curl -X POST https://api.pixelrag.ai/search \
  -H "Content-Type: application/json" \
  -d '{"queries": [{"text": "What is the capital of France?"}], "n_docs": 5}'

返回 JSON,hits 里是按相关度排序的命中瓦片(带 score、来源 URL 等):

{
  "results": [{
    "hits": [
      { "score": 0.73, "url": "https://en.wikipedia.org/wiki/...", "article_id": 123 }
    ]
  }]
}
到这里你已经拥有 PixelRAG 的两大核心能力:把任意页面变成可检索的截图瓦片 + 在 828 万维基页面上做视觉检索。浏览器打开 pixelrag.ai 也能玩同样的东西(支持以图搜图),Colab 里有官方 quickstart 笔记本。

07产物长什么样

渲染产物就两样:一组纵向瓦片 + 一份清单。理解它们,就理解了 PixelRAG 的检索粒度。

./tiles/
└── Python.png.tiles/
    ├── tile_0000.jpg     # 页面第 1 屏
    ├── tile_0001.jpg     # 页面第 2 屏
    ├── ...
    └── tiles.json        # 清单:瓦片顺序、来源 URL、页码等
产物说明
tile_NNNN.jpg纵向切分的截图瓦片;--tile-height 可调(pixelbrowse 插件默认 1568px,对齐 Qwen-VL 视觉分辨率;离线批量场景是 875×8192)
tiles.json清单文件:agent 和索引管道靠它把瓦片顺序、来源、页码对齐
设计原则:一张瓦片 = 一个检索单元 = agent 的一次「看」。瓦片太高则单次检索噪音大,太矮则表格图表被切断——像素高度就是这个三角(检索精度、token 预算、版面完整)的折中点。PDF 渲染另可用 --dpi 控制清晰度。

08在 Cursor CLI 里用

官方插件目前只覆盖 Claude Code(pixelbrowse)和 opencode(@startrail/pixelbrowse)。Cursor CLI 没有插件市场,但没关系——插件的本质只是「教 agent 何时调 pixelshot、然后读返回的图」,这两件事 Cursor CLI 原生都做得到。

原理一句话:pixelshot 是个普通 CLI,Cursor CLI 的 agent 既能执行 shell 命令,又能把生成的瓦片图片读进上下文(多模态读图)——这正是 pixelbrowse 在 Claude Code 里做的事,机制完全一致。缺的只是「教它」,而这恰好是 Cursor 项目规则 .cursor/rules/*.mdc 的本职。三条路径按投入从低到高:

路径 A · 零配置指挥

装好 CLI 后用自然语言点名 pixelshot,临时用一次最合适。

路径 B · 项目规则(推荐)

写一份 .cursor/rules/pixelshot.mdc,一次配置,之后所有会话自动带「眼睛」。

路径 C · 自建库检索

自己的文档建索引、本地 serve,agent 在会话里 curl 查询,私有知识不出网。

第 0 步(一次性):让 Cursor 能摸到 pixelshot

uv tool install pixelrag      # 或 pipx install pixelrag,pixelshot 常驻 PATH
pixelshot --version           # 确认装好了

路径 A:零配置,自然语言直接指挥

cursor-agent "用 pixelshot 把 https://arxiv.org/abs/2606.28344 渲染到 ./tiles,然后读图总结这篇论文的架构图"

agent 会执行 pixelshot <url> -o ./tiles,再把瓦片读进来作答。不想敲命令行,直接在 cursor-agent 交互会话里说同样的话也行。适合偶尔用一次;用得频繁就升级到路径 B。

路径 B:写一份项目规则(一次配置,长期生效)

在项目里新建 .cursor/rules/pixelshot.mdc,内容直接抄(改写自官方 skill 提示词 skill/pixelrag.md,去掉了内部路径、并入 pixelbrowse 的默认参数):

---
description: 用 pixelshot 截图网页/PDF 并读图回答,而不是抓原始 HTML
globs:
alwaysApply: true
---

# pixelshot — 给你装上"眼睛"

回答以下问题时,优先用 pixelshot 渲染后读图,而不是获取原始 HTML:
- 表格里的数字、合并单元格、行列关系
- 图表、架构图、流程图、信息图的内容
- PDF(论文、财报、文档)的版面与插图
- 页面的实际渲染效果(HTML 源码看不出布局时)

## 常用命令
- 网页:  pixelshot <url> -o ./tiles --tile-height 1568 --wait-network-idle
- PDF:   pixelshot paper.pdf -o ./tiles --dpi 200
- 混合:  URL 和本地文件可以混在一条命令里

## 渲染之后必须做
1. 读 ./tiles/ 下的 tiles.json,弄清瓦片顺序和来源
2. 按顺序读取 tile_*.jpg 图片,不要只看第一张
3. 引用答案时注明来自哪张瓦片

## 视觉检索(可选)
- 托管索引: curl -X POST https://api.pixelrag.ai/search \
    -H "Content-Type: application/json" \
    -d '{"queries":[{"text":"..."}],"n_docs":5}'
- 本地索引: 先 pixelrag serve --index-dir ./my_index --port 30001,
  再 curl http://localhost:30001/search(格式同上)

为什么这么写:alwaysApply: true 让所有会话都带上这条规则(放项目 .cursor/rules/ 即项目级生效;想全局生效可把同款文字填进 Cursor 设置的 User Rules);--tile-height 1568 是官方 pixelbrowse 插件的默认值;而「渲染之后必须做」三步是最容易漏的——不写明,agent 可能 ls 一下就凭文件名猜答案。

配置完的会话体验:

你   : 帮我看看 arxiv.org/abs/2606.28344 这篇论文的 Figure 2 画的是什么
agent: ① pixelshot https://arxiv.org/abs/2606.28344 -o ./tiles \
         --tile-height 1568 --wait-network-idle
       ② 读 ./tiles/<页面名>.png.tiles/tiles.json → 共 N 张瓦片
       ③ 逐张读图,在 tile_0003.jpg 找到 Figure 2 ……
       答 : Figure 2 是文本 RAG 与 PixelRAG 的管道对比图:文本 RAG
            把表格拍平丢失结构,PixelRAG 保留截图瓦片……

路径 C:自建知识库 + 本地检索

把私有文档建成索引并本地起服务(建索引的完整步骤见下一节),之后在 Cursor 会话里让 agent 查询本地端口即可——命中瓦片由 agent 读图作答,私有知识全程不出本机(渲染公网页面除外)。

要不要在 .cursor/mcp.json 里配 MCP?不需要。官方明确 pixelbrowse 「No MCP server, no backend」——它就是个调本地 CLI 的技能,没有任何服务端。目前也没有官方 PixelRAG MCP server 可配;CLI + 规则就是官方等价姿势。哪天官方出了 MCP server,再往 ~/.cursor/mcp.json(全局)或项目 .cursor/mcp.json 里加即可。
顺手一提:如果你同时用 Claude Code,官方两行命令装好插件后体验同款能力——claude plugin marketplace add StarTrail-org/PixelRAG + claude plugin install pixelbrowse@pixelrag-plugins。规则文件的思路两边通用。

09进阶用法

PDF 渲染、自建索引、编程调用、大规模后端——按需取用。

渲染 PDF(论文、财报)——需要 pdf extra 和系统 poppler,URL 与本地文件可混着传:

pip install 'pixelrag[pdf]' && brew install poppler   # Debian/Ubuntu: apt-get install poppler-utils
curl -sL -o paper.pdf https://arxiv.org/pdf/2503.09516
pixelshot paper.pdf -o ./tiles --dpi 200
pixelshot https://github.com/StarTrail-org/PixelRAG paper.pdf -o ./tiles

给自己的文档建索引——写一份 pixelrag.yaml,一条命令建完,Linux 走 CUDA、macOS 走 MPS(device: auto 自动选):

pip install 'pixelrag[index]'

cat > pixelrag.yaml << 'EOF'
source:
  type: local          # 支持 local / web / pdf 等来源
  path: ./my_docs

embed:
  model: Qwen/Qwen3-VL-Embedding-2B
  device: auto         # Linux→cuda · macOS→mps · 兜底 cpu

output: ./my_index
EOF

pixelrag index build                                          # M 系列芯片约 3 分钟(35 页论文量级)
pixelrag serve --index-dir ./my_index --port 30001            # 起本地搜索服务

编程式渲染——在 Python 里直接调,适合自己写 agent 循环:

from pixelrag_render import render_url

tiles = render_url("https://en.wikipedia.org/wiki/Python", "./tiles")

大规模与省内存——FAISS 是默认后端;索引大了换 Qdrant(支持 int8 量化、磁盘向量、多服务共享一个 collection),加载大索引用 mmap 模式近即时启动:

PIXELRAG_INDEX_MMAP=1 pixelrag serve --index-dir ./big_index --port 30001

视觉搜索——托管 API 还接受图像作为查询(以图搜页):把截图丢给它,返回视觉上最相关的维基页面。具体图像字段格式见官方 API 文档。

10不止于此

名字叫 PixelRAG,但它首先是一个「把文档变成 agent 可读图像」的渲染器——用途比 RAG 宽得多。

文献阅读

「那张架构图在哪篇论文里」直接命中瓦片;读 PDF 论文先渲染再读,图表公式不丢失。

财报与数据表格

HTML 表格被拍平是文本 RAG 的老大难;截图检索保留行列关系,Reader 从图上直接读数。

给自动化 agent 装眼睛

网页自动化别只依赖 DOM 选择器——渲染成图让 agent 像人一样「看」页面实际效果。

私有文档库视觉检索

本地 PDF / 网页存档一键建索引,检索与阅读全程可离线,敏感知识不出网。

11性能与规模

官方给了从单机到全维基的真实数字——注意每一行的条件,脱离条件比数字没意义。

场景数字条件
单页渲染~1.6 秒 / 瓦片每次冷启动 Chrome
持久 Chrome 渲染~0.47 秒 / 瓦片(约 3 倍提速)CDP 复用已启动进程
批量吞吐109–130 瓦片 / 秒EPYC 7763 · 48 Chrome worker · 纯截图口径
全维基渲染1870 万页 · 约 3000 万瓦片 · 8.5 TB875×8192 JPEG;单机 77 小时,4 台 <1 天
托管索引规模8.28M 页 · 约 217G 下载 · 约 220G 内存自托管基线;PIXELRAG_INDEX_MMAP=1 近即时启动
查询延迟向量化约 1–2 秒 / queryCPU;GPU 可加速

批量渲染那 109–130 瓦片/秒不是白来的:官方从 Playwright 基线的 20 瓦片/秒一路优化(直连 CDP、fonts.ready 事件驱动、Chromium 补丁绕过编码互斥锁、48 worker 工作窃取队列),累计 5.5 倍,而且每一步都做过 100% 像素级正确性校验——细节在 docs/screenshot-throughput-optimization.md。

一句话结论:个人和小团队——托管 API 零成本起步,自己的文档在 M 系列芯片上几分钟建完索引;217G 级全量索引是数据中心量级的活,别在自己笔记本上硬扛。

12FAQ / 踩坑

每条都给可执行的解法,不做无用的道歉。

pixelshot: command not found
多半是装进了项目 venv——只有激活该 venv 时 pixelshot 才在 PATH 上。装成全局工具:uv tool install pixelrag 或 pipx install pixelrag,然后 pixelshot --version 验证。
macOS 上渲染报错、找不到浏览器
自带的加速版 headless_shell 只在 linux-x64 自动安装。macOS 上装一个 Chrome(或 Playwright 的 Chromium)即可被自动探测;探测不到就 CHROME_PATH=/path/to/chrome pixelshot ... 显式指路。
渲染 PDF 失败
两件事缺一不可:pip install 'pixelrag[pdf]' 加 Python 侧支持;系统装 poppler(brew install poppler / apt-get install poppler-utils)。
faiss-gpu 装不上
GPU 版 wheel 仅提供 Linux(CUDA);macOS 没有。macOS 用 faiss-cpu 即可,向量化由 device: auto 走 MPS,不依赖 faiss 的 GPU。
下载 217G 索引 / 内存爆了
全量自托管基线约需 220G RAM。个人用直接调托管 API(零搭建);一定要自托管就留够内存,或加 PIXELRAG_INDEX_MMAP=1 用 mmap 分页加载,启动近即时。
n_docs 调大就报错 / OOM
接口把 n_docs 限制在 1–1000:FAISS 实际取回 n_docs × 10 条候选,无上限会被恶意请求打成 OOM。普通查询 5–10 足够。
搜索比想象中慢
主要延迟在查询向量化:CPU 上约 1–2 秒 / query。要快就上 GPU,或接受这个延迟——它换来的是直接搜图的能力。
Cursor agent 不主动用 pixelshot
检查三处:.cursor/rules/pixelshot.mdc 是否在正确位置(项目根的 .cursor/rules/);frontmatter 是否完整(description、alwaysApply: true);还不行就在 prompt 里直接点名「用 pixelshot」,路径 A 永远可用。
agent 好像读不了瓦片图片
个别环境或旧版本对读图支持有差异。退路:把瓦片直接拖进对话窗口人工 + 模型一起看,或换官方插件完整支持读图的宿主(Claude Code 装 pixelbrowse 插件)。

13合规与引用

代码 Apache-2.0,商用友好;模型权重与训练数据同样开源。

  • 许可证:Apache-2.0,可自由使用、修改、商用(保留许可声明即可)。
  • 渲染第三方网页的注意:个人研究、给自己或 agent 阅读一般没问题;但把截图公开再分发、或对外提供检索服务时,注意目标站点的服务条款与版权。
  • 全开源全家桶:LoRA 权重(Chrisyichuan/wiki-screenshot-embedding-lora)与完整训练集(Chrisyichuan/screenshot-training-natural-filtered-v2)都在 Hugging Face,可换骨干模型自行微调。

论文引用:

@misc{wang2026pixelragwebscreenshotsbeat,
      title={PIXELRAG: Web Screenshots Beat Text for Retrieval-Augmented Generation},
      author={Yichuan Wang and Zhifei Li and Zirui Wang and Paul Teiletche and Lesheng Jin and Matei Zaharia and Joseph E. Gonzalez and Sewon Min},
      year={2026},
      eprint={2606.28344},
      archivePrefix={arXiv},
      primaryClass={cs.IR},
      url={https://arxiv.org/abs/2606.28344}
}

PixelRAG 新手教程 · 基于 StarTrail-org/PixelRAG(Apache-2.0)· 2026-09-10