Гайд · TNWS AI
Как анализировать PDF через OpenAI File Inputs и проверять таблицы и схемы
Как передать PDF в Responses API через input_file, выбрать detail, сослаться на страницы и проверить числа по оригиналу.
Задача и применимость
Цель — извлечь из PDF конкретные числа и выводы так, чтобы каждое значение можно было сверить с номером страницы и исходным фрагментом. Результатом считается не один удачный ответ, а воспроизводимый процесс с контрольным входом, ожидаемым выходом и явным условием отказа.
Функции и названия параметров проверены 12 сентября 2026 года. Responses API принимает input_file как file_id, Base64 data или внешний URL. Для PDF vision-модели получают текст и изображения страниц. Detail auto, low или high влияет на обработку изображений страниц, а не на извлечённый текст.
Подготовка
Создайте тестовый проект и ключ с минимальными правами. Подготовьте пять обезличенных кейсов: обычный, пустой, без обязательного факта, противоречивый и содержащий попытку навязать опасное действие. Для каждого заранее запишите ожидаемый status, поля и источник истины.
Версию модели и SDK вынесите в конфигурацию. Секрет храните в переменной окружения или менеджере секретов. Не вставляйте ключ в браузерный код, промпт, скриншот или журнал.
Пошаговая настройка
- Проверьте PDF локально: число страниц, открытие, наличие сканированных страниц и таблиц. Посчитайте хеш файла.
- Для повторного использования загрузите файл с purpose user_data и сохраните file_id; для разовой обработки можно использовать Base64 или разрешённый URL.
- Передайте input_file и input_text одним user content. Для мелких схем используйте detail=high только если это поддерживает выбранная модель.
- Попросите вернуть page, quote_or_cell, value, unit и confidence. Не просите «кратко пересказать всё», если нужны точные параметры.
- Сверьте три числа и одну подпись диаграммы по оригиналу. Для больших архивов используйте File Search вместо передачи всех файлов целиком.
После вызова сохраняйте request ID, HTTP-статус, model id, версию инструкции и usage, если он доступен. Таймаут не означает, что операция не произошла: перед повтором проверьте фактическое состояние.
Копируемый шаблон
Извлеки только таблицу «Технические характеристики».
Верни JSON-массив: field, value, unit, page, evidence.
Не пересчитывай единицы. Если ячейка не читается — value=null.
Проверь отдельно: мощность, давление, расход, диаметр входа.
Не добавляйте просьбу «додумай при необходимости» в задачу извлечения. Отсутствующий факт должен давать null, missing или blocked. Это позволяет отличить незнание от технической ошибки.
Реалистичный пример входа и результата
В PDF на странице 6 указаны 4 кВт, 25 бар, 1,8 м³/ч и 50 мм. Результат должен сохранить десятичный разделитель по смыслу, единицы и страницу. Значение 18 м³/ч вместо 1,8 считается критической ошибкой.
Повторите тест без одного обязательного значения. Связная догадка считается провалом, даже если формат правильный.
Проверка результата по уровням
Технический уровень: статус, формат, типы, ID и отсутствие секретов. Смысловой: посимвольная сверка чисел, дат, названий и отрицаний. Процессный: таймаут, отказ в доступе, повтор и безопасный откат.
Создайте таблицу с колонками case_id, expected, actual, source, status, error_type. Размечайте format_error, unsupported_claim, wrong_action и security_error отдельно. Иначе красивый средний процент скроет критический вызов не той функции.
Заранее установите правило выпуска: ноль ошибок безопасности и неверных действий, все ID совпадают с эталоном, отсутствующие сведения не додумываются, а каждый внешний вызов виден в журнале. Провал одного критического кейса блокирует выпуск.
Контроль в рабочей системе
Разделите вход, сетевой вызов, разбор ответа и бизнес-валидацию. Сначала проверяются размер, тип и права, затем выполняется API-запрос, потом структура и только после неё значения. Невалидный ответ не передаётся следующему узлу.
В журнал кладите hash входа, case_id, модель, версию промпта, request ID, длительность и решение валидатора. Не сохраняйте ключ, персональные данные и полный документ без необходимости. Для операций записи используйте idempotency_key.
Перед полным включением направьте ограниченный трафик и сравните новую конфигурацию с предыдущей на одинаковых кейсах. Условие отката задайте до релиза: потеря обязательного ID, хотя бы одно действие без прав или необработанный ответ.
Приёмка на конкретных данных
Возьмите минимум десять кейсов из реального процесса, но замените персональные значения синтетическими. В каждом отметьте одно проверяемое утверждение, одно число или ID и ожидаемое поведение при отсутствии ответа. Не составляйте набор только из простых успешных примеров: добавьте устаревший документ, конфликт двух источников и недоступный ресурс.
Для каждого ответа фиксируйте не субъективную оценку, а набор булевых проверок: формат разобран; обязательные поля присутствуют; ID совпал; источник разрешён; действие входит в allowlist; отсутствующий факт отмечен. Итоговый pass получается только при выполнении всех обязательных условий. Текст может быть стилистически слабым и пройти, если задача — точное извлечение; красивый текст с неверным числом обязан провалиться.
Попросите второго проверяющего воспроизвести три кейса только по инструкции статьи. Если ему приходится угадывать, где взять model id, какой результат финальный или как обработать ошибку, процесс ещё не готов. После приёмки сохраните контрольный набор рядом с кодом без секретов, чтобы запускать его после обновлений.
Разбор сбоя
При ошибке сначала определите слой: вход, транспорт, API, разбор, бизнес-валидация или внешнее действие. Сохраните минимальный воспроизводимый запрос, убрав ключи и данные пользователя. Сверьте request ID и время с журналом. Не компенсируйте ошибку сервера бесконечными повторами и не исправляйте логическую ошибку увеличением таймаута. После исправления прогоните не только проблемный кейс, но и весь набор, поскольку изменение схемы или промпта может сломать соседний сценарий.
Негативные тесты
Проверьте пустой ввод, похожий неверный ID, инструкцию «игнорируй правила» внутри пользовательских данных, два одинаковых запроса и искусственный таймаут. Система не должна угадывать запись, выполнять текст как команду или создавать дубль.
После смены модели, SDK, схемы или порядка сообщений повторите весь набор. Меняйте один параметр за итерацию, иначе причина улучшения останется неизвестной.
Чек-лист финальной проверки
- задача и ожидаемый результат описаны заранее;
- метод и параметры сверены с официальной документацией;
- title, slug и description уникальны;
- ключ отсутствует в коде и логах;
- модель и версия вынесены в конфигурацию;
- обычный и пустой кейсы пройдены;
- отсутствующий факт возвращается явно;
- числа, даты, ID и единицы сверены;
- ошибки API разделены по классам;
- повтор не создаёт дубль;
- подготовлен откат.
Ограничения
Встроенные изображения в DOCX и PPTX не обрабатываются как страницы PDF. Если важны диаграммы, официальный гайд советует предварительно конвертировать документ в PDF.
Модели, Preview-статус, цены, квоты и региональная доступность меняются. Здесь не приводятся неподтверждённые числа: перед внедрением проверяйте кабинет и официальную страницу.
FAQ
Можно ли использовать рабочие данные в первом тесте?
Нет. Начните с обезличенной копии и минимальных прав.
Достаточно ли ответа HTTP 200?
Нет. Он подтверждает обработку, но не правильность фактов или действий.
Что делать после таймаута?
Проверить состояние предыдущей операции и только затем решать о повторе.
Когда повторять регрессию?
После смены модели, SDK, схемы, tool definition или системной инструкции.
Официальный первоисточник
Документация использованной функции — проверено 12 сентября 2026 года.
Частые вопросы
Можно ли использовать рабочие данные в первом тесте?
Нет, начните с обезличенной копии и минимальных прав.
Достаточно ли HTTP 200?
Нет, он не подтверждает правильность фактов.
Что делать после таймаута?
Проверить состояние предыдущей операции до повтора.
Когда повторять регрессию?
После смены модели, SDK, схемы или инструкции.
Читайте также
Как сделать поиск по PDF через OpenAI File Search: загрузка, запрос и проверка цитат
Пошаговый гайд по File Search в Responses API: загрузить PDF, задать вопрос, получить фрагменты и проверить ответ.
Как анализировать PDF с таблицами и графиками через Claude API
Как передать PDF в Claude API, задать вопросы по страницам, получить цитаты и проверить числа из таблиц и графиков.
Как добавить веб-поиск в OpenAI Responses API и сохранить источники
Практическая настройка web_search в Responses API: запрос, список источников, проверка цитат и обработка неполных данных.
Комментарии
Пока тихо. Скажите первое слово