All Stories
2026-09-093 min read

Document RAG · PDF · TableModel · Embeddings · Multimodal AI · Pixeltable Cloud · Retrieval

DocuVision: PDF Q&A Without LangChain Plus a Vector DB

Ingest prospectuses, chunk with page position, retrieve, then cite. Pixeltable is the document type, the splitter view, and the index — not Unstructured plus Chroma.

Pierre Brunelle

Pierre Brunelle

Pixeltable Team

Summary: DocuVision is the analyst tool: a 50-page prospectus becomes searchable passages with page position, then an LLM answers with those passages as context. You do not stitch LangChain, PyPDF, Unstructured, and Chroma. You declare Docs and a Chunks view. The index follows the insert. pip install pixeltable.

The Product#

  • Ingest PDFs
  • Chunk with position attached
  • Ask “What was the Q3 revenue breakdown across regions?” and retrieve the passages
  • Synthesize a cited answer from those rows

The longer procedural tutorial is production document RAG. This post is the class-based receipt. Text chunks are the searchable surface. Page images — charts as pixels — are a later column, not a second product we pretend to OCR here.

The Stitch You Delete#

A loader, a splitter, an embedding job, a vector collection, a retriever class, a chain. Delete a PDF and the chunks in Chroma are your problem. In a catalog, delete the document; the view and the index follow. That is the same lineage claim as zombie vectors.

The Receipt#

python

text and pos come from the splitter. Retrieval is the index. Generation is one Gemini call over those strings — not a second vector database, and not chart OCR. Page images are a later column if you need vision on figures. Same app.py on Cloud: pxt db updatepxt schema updatepxt service update.

What This Is Not#

Not “we read the bar chart as numbers.” That needs page images and a vision column you add later. Not a warehouse. Not LangChain as a religion — you can keep an agent; the document graph does not live in a chain.

People Also Ask#

Why token_limit 300? It is the docs default for passage RAG. Change the iterator kwargs; do not change the table.

Do I need Chroma? No.

How do I go to Cloud? Same file. PIXELTABLE_API_KEY, pxt://org:db, then pxt db updatepxt schema updatepxt service update.

Chunk the File, Not the Stack#

Declare the document. Split it. Index the text. Ask the question. Keep the analyst loop. Delete the loader zoo.

Declarative. Multimodal. Incremental.

Focus on innovation, not infrastructure.

10-minute tutorial · Join community