Один PDF, два читателя: люди видят страницы, машины получают чистый Markdown

Большинство PDF — это координатный суп, который LLM приходится реверс-инжинирить в заголовки и таблицы. Трюк Сартака Гауда прячет Markdown внутри 20-летней возможности PDF: страница выглядит для вас идентично, но экстрактор вытаскивает чистую структуру. Тред сразу спросил, что туда же может спрятать злоумышленник.

Вкратце

Адаптивные PDF прикрепляют замещающий текст в формате Markdown к содержимому PDF через последовательности marked-content — возможность в спецификации с PDF 1.4. Рендереры её игнорируют и показывают обычную страницу; экстракторы вроде PyMuPDF вместо этого получают чистые заголовки, списки и таблицы при накладных расходах размера ~до 10%.

Один Rust-разработчик мгновенно перевернул это: тот же слой, что кормит LLM чистой структурой, может скормить ей вредоносную инструкцию, которую человек никогда не увидит, — невидимый prompt injection в PDF вашего счёта за электричество.

PDF, который читается одним способом для вас и другим для машины

Адаптивные PDF
Адаптивные PDF

Пост Сартака Гауда исходит из знакомой боли: стандартные PDF не несут структуры. Экстрактору приходится реконструировать иерархию из сырых координат и размеров шрифта, а LLM, которой скармливают этот суп, угадывают, что заголовок, что таблица, что список. Лекарство Гауда — перестать заставлять их угадывать.

Трюк: замещающий текст из уголка спецификации 2001 года

Метод опирается на недоиспользуемую возможность PDF, доступную с PDF 1.4, — замещающий текст для маркированного содержимого. Гауд прикрепляет замещающий текст в формате Markdown к потоку содержимого через последовательности marked-content. Стандартные читалки этот слой игнорируют и рендерят страницу ровно как раньше; совместимый экстрактор (в посте демонстрируется PyMuPDF) вместо этого вытаскивает структурированную Markdown-версию. Один файл, два вывода, с накладными расходами размера обычно до 10%. Код — на github.com/iminoaru/adaptivepdf.

Местный завсегдатай-педант предложил поправку, которая на деле заостряет идею:

«PDF не будет выглядеть для меня иначе, чем для любого другого, кто на него смотрит… Просто извлечение текста… теперь вернёт структурированный (Markdown) текст. (Можно сказать, PDF меняется в зависимости от того, как вы его читаете.)» — комментатор, переосмысливший, что здесь значит „адаптивный“

Очевидное злоупотребление, найденное тредом за минуты

Где есть невидимый слой, там есть вектор инъекции. Rust-разработчик провёл черту прямо к нему:

«разве это также не значит, что в PDF легко вложить вредоносные инструкции специально для ИИ, которые обычный человек никогда не заметит?… Просто подумайте о PDF счёта за электричество, который вы даёте как подтверждение адреса компании, использующей LLM для извлечения этого адреса». — Rust-разработчик о риске скрытой инструкции

Читатели оспорили и посылку, что это новая земля. Тегированные PDF уже существуют и юридически обязательны для документов на госфинансировании в США по разделу 508 — просто соблюдение хромает. И одна поправка попала в фактическое утверждение:

«LaTeX — на самом деле один из лучших способов создавать тегированные PDF». — комментатор со ссылкой на проект тегирования в LaTeX

«Это имело значение и до ИИ»

Рамка, будто PDF понадобилось делать машиночитаемыми только сейчас, вызвала колкий отпор:

«это имело значение, и сильно. Формат PDF изначально был проприетарным и проектировался… чтобы препятствовать обычному извлечению текста». — fsckboy

Идея по-настоящему остроумна — обратно совместимый слой структуры, едущий на 20-летней возможности спецификации. Два открытых вопроса, всплывших в треде: будут ли экстракторы соблюдать её стабильно (Гауд признаёт, что поддержка неровная) и невидимый канал только-для-машины — это возможность или свежая поверхность атаки.

Получайте такие разборы каждый день

Главные истории Hacker News — на email, в Telegram или RSS.

Следующая новость · 9 из 20 Читать дальше
🚀Tech

Однострочный промпт, очищающий интерфейс от ИИ-шлака: „сделай как приложение на Qt“

Разработчик, называющий собственный вкус никаким, нашёл приём: попроси модель оформить страницу как десктопное приложение на Qt — и шлак почти испаряется. Тред объяснил, почему это работает, и поспорил, что Qt — просто шлак постарше.

★ 199 · 💬 122 · envs.net · 4 мин