claim-ocr: бандлы извлечения полей страховых документов
Это репозиторий бандлов claim-ocr версий v1, v2 и v3 из учебного проекта «После удара»
(капстоун курса «AI - Attractor», трек B). Автор: Akana92. Код и стенд проекта лежат в
репозитории https://github.com/Akana92/after-impact.
Что это такое
claim-ocr не содержит дообученных весов. Бандл описывает, как извлекать поля из страховых
документов с помощью готовой модели Qwen3-VL, которая запускается через Ollama: в него входят
спецификация, семь файлов промпта, пять JSON-схем ответа и параметры вызова. Документы:
полис, отчёт оценщика, акт о заливе, документ на квартиру, а также фото повреждений.
Параметры вызова фиксированы: температура 0, зерно 42, структурный вывод через
принудительный инструмент или json_schema.
Состав каждой версии:
bundle.yaml: спецификация бандла;prompt/: каталог промптаclaim-extract(семь файлов);schemas/: пять схемclaim-ocr-schema@2;run_passport.json: версия,bundle_sha256, базовые модели;gate.json: результат гейта качества стенда;metrics.json: сводка оценки (метрики и счётчики по категориям, без текстов кейсов).
bundle_sha256 считается как sha256 от отсортированных строк «sha256 файла и относительный
путь» по файлам bundle.yaml, prompt/ и schemas/. Файлы сведений (run_passport.json,
gate.json, metrics.json) в него не входят.
| Версия | Промпт | Длинная сторона документа, px | bundle_sha256 |
|---|---|---|---|
| v1 | claim-extract@v12 |
1024 | f9fb381a1ed15d800b972a0303f9a615cfcf6393bbd84f714636f05228a8db88 |
| v2 | claim-extract@v13 |
1024 | e8cc964619bdd651902eaeb7afabd94bac5aae680fb372440c61cdf4e0e66763 |
| v3 | claim-extract@v13 |
768 | 1a0fbdb86be087be337f9e48999dcb123c8eef8c57088c8344edc2fc549ff60d |
v1 отличается от v2 только промптом (claim-extract@v12 вместо @v13), v3 повторяет v2, но
уменьшает документ до 768 px по длинной стороне. Теги ревизий v1, v2, v3 указывают на
состояние репозитория, в котором версия появилась впервые.
Базовые модели и лицензия
Бандл использует модели Qwen3-VL-8B-Instruct (зрение, локально через Ollama
qwen3-vl:8b-instruct) и Qwen3Guard-Gen-4B (страж входа и выхода). Веса в репозиторий не
включены, они остаются в публичных репозиториях Qwen. Обе модели распространяются под
лицензией Apache-2.0 (поле license в карточках Qwen/Qwen3-VL-8B-Instruct и
Qwen/Qwen3Guard-Gen-4B на Hugging Face), поэтому бандл, состоящий из промптов, схем и
спецификации, выложен под той же лицензией Apache-2.0. Облачный запасной вариант в
спецификации (gpt-4o-mini) в репозиторий не входит и подчиняется условиям его поставщика.
Как использовать
Бандлы рассчитаны на проект https://github.com/Akana92/after-impact. Скачайте нужную версию и соберите стенд проекта
по инструкции из его README. Спецификация загружается сервисом worker без перезапуска, а
промоут и откат версий выполняются в реестре MLflow стенда. Отдельно от проекта бандл
полезен как набор готовых промптов и схем: схемы ответа лежат в schemas/, промпты в
prompt/.
Метрики гейта
Прогон выполнен на стенде проекта по записанным ответам модели (кассеты), на 58 вымышленных
кейсах золотого набора. Пороги заданы в eval/thresholds.yaml проекта; для метрик акта о
заливе и документа на квартиру кейсов меньше десяти, поэтому порог ужесточён до 1.00 и
допустимая регрессия не применяется. Задержки (e2e_p95_s, ttft_p95_s) на кассетах не
измеряются.
Гейт красный у всех трёх версий, и это показано честно: пороги не менялись.
| Метрика | Порог | v1 | v2 | v3 |
|---|---|---|---|---|
schema_valid_rate |
>= 1.00 | 1.00 | 1.00 | 1.00 |
recall_policy_id |
>= 0.95 | 1.00 | 1.00 | 1.00 |
recall_amount |
>= 0.90 | 1.00 | 1.00 | 1.00 |
voice_amount_accuracy |
>= 0.90 | 1.00 | 1.00 | 1.00 |
redteam_blocked |
>= 10 из 10 | 10.00 | 10.00 | 10.00 |
payout_leak |
<= 0 | 0.00 | 0.00 | 0.00 |
injection_flag_recall |
>= 1.00 | 0.67 КРАСНЫЙ | 0.83 КРАСНЫЙ | 0.67 КРАСНЫЙ |
recall_act_date |
>= 1.00 | 1.00 | 1.00 | 1.00 |
recall_act_address |
>= 1.00 | 0.80 КРАСНЫЙ | 0.80 КРАСНЫЙ | 0.80 КРАСНЫЙ |
recall_act_source |
>= 1.00 | 0.20 КРАСНЫЙ | 1.00 | 1.00 |
recall_ownership_address |
>= 1.00 | 1.00 | 1.00 | 1.00 |
golden_cases_min |
>= 20 | 58.00 | 58.00 | 58.00 |
multimodal_cases_min |
>= 5 | 58.00 | 58.00 | 58.00 |
e2e_p95_s |
<= 20.00 | не измерялось | не измерялось | не измерялось |
ttft_p95_s |
<= 3.00 | не измерялось | не измерялось | не измерялось |
Причины красных строк у v2 записаны в проекте. Адрес в акте о заливе (recall_act_address
0.80) расходится в одном кейсе из пяти: модель читает «Мангылик» вместо «Мангилик». Флаг
посторонней надписи в документе (injection_flag_recall 0.83) не срабатывает на кейсе с
надписью шрифтом 6 pt, повёрнутой внутри печати. У v1 и v3 флаг пропускается чаще (0.67), а
у v1 дополнительно красный источник залива (recall_act_source 0.20), который v2 и v3
исправляют новым промптом. Версия v3 хуже v2 по своим метрикам из-за уменьшения документа.
Ограничения
- Оценка идёт по кассетам и на малом наборе: акт о заливе содержит 6 кейсов, документ на квартиру 3. Выводы о качестве на реальных документах из неё делать нельзя.
- Задержки и стоимость на этом прогоне не измерены.
- Язык документов: русский.
- Бандл не принимает решений о выплате: он только извлекает поля. Решение остаётся за юристом проекта.
- Красный гейт v2 принят осознанно; повышение длинной стороны документа до 1280 px и отдельный кадр печати отложены на время после защиты.
Данные
Все документы, фото и дела проекта вымышленные, это демонстрационные данные. Персональных
данных и данных реальных клиентов в репозитории нет: сводка metrics.json содержит только
числа и счётчики.
Model tree for AkanaYB/after-impact-claim-ocr
Base model
Qwen/Qwen3-VL-8B-Instruct