請求書や経費精算PDF、申請書をAIに読ませたら、表の数字がぐちゃぐちゃに崩れて返ってきた——文書AIを一度でも触ったことがあるなら、覚えのある場面だろう。犯人は長年使われてきたテンプレート型のOCR(光学的文字認識)で、レイアウトが少し崩れるだけで表が壊れる。
この層を、VLM(視覚言語モデル)で何度も読み直すAgentic OCRで置き換えようとするのが、米国の文書AI基盤Reductoだ。本稿が追うのは製品紹介ではなく、テンプレOCRがなぜ表で壊れ、Agentic OCRが公式の明言する範囲でどう読み直すのか、という仕組みだ。文書をAIに読ませる仕事なら、明日の設計に効くはずだ。
表が真っ先に壊れる——テンプレOCRの出力はこう崩れる
従来のテンプレート型OCRは、「この罫線の内側が表だ」とページのレイアウトを事前の決め打ちで読む。想定どおりなら高速で安いが、手書きの追記や入れ子のセルなど、現実の文書は揃わない。
最初に壊れるのが表だ。「品目・数量・金額」の3列なら、本来「ノートPC / 2 / 198,000」と1行で読めるべきところが、レイアウト検出を外すと値だけが一列に流れ込み、「どの金額がどの品目か」が分からなくなる。わずかな検出ミスが下流へ次々に伝わり(error cascade、誤りの連鎖)、表の多い財務・医療・法務の文書ほど崩れ方が露骨になる。
読んで、見直して、直す——Agentic OCRの「多パス」
テンプレOCRが「一度読んで終わり」なのに対し、Agentic OCRは出した結果をAI自身がレビューし、直して検証するループを回す。
文書AIは3層に分けると見通しがよい。文字を起こすOCR、ページの構造や意味まで読むVLM、「次に何をすべきか」まで踏み込むAgentic OCR——Reductoはこの3層目だ。公式ドキュメントによれば、自社モデルと最先端のVLMの専門モデル群をパイプライン化し、複数のパスで誤りを反復的に自己訂正する(agentic multipass)。大づかみには「レイアウト検出 → VLMのレビュー/修正 → 検証」を何度か繰り返す流れだ。
ただしReductoは商用クローズドで、各パスの中身や内部構成は非公開だ。だから仕組みの説明は、公式が明言する大枠にとどめる。
欲しい構造を「注文票」で渡し、出所まで返してもらう
開発者には何が嬉しいのか。ポイントは2つだ。
1つ目は、出力が最初から構造化JSONである点。抽出(Extract)では、欲しいフィールドの名前・型・説明を JSON Schema で宣言するだけで、それに合う値が返る——例を見せずに済む、スキーマ駆動の抽出だ。テンプレートを作る代わりに注文票(スキーマ)を1枚渡せば、VLMが該当値を探して返す。
2つ目はvisual grounding(視覚的な裏づけ)。抽出した各値に「何ページ目の、どの矩形(バウンディングボックス)から来たか」が紐づいて返る。請求書の合計金額なら 23278.62 という値に「3ページ目・その矩形の座標」が付く。だから「この金額はこのセルから来た」と人が原本と突き合わせて監査できる。VLMはもっともらしい誤り(hallucination)を起こしうるからこそ、怪しい値だけ原本で確かめられるこの裏づけが効く。
下は、請求書から合計金額と明細をスキーマ駆動で抽出し、各値の出所も取り出す概念コードだ(Reducto公式のPython SDK。正確なAPI名・型は文末の公式ドキュメントを参照)。
from pathlib import Path
from reducto import Reducto
# クライアントは環境変数 REDUCTO_API_KEY を自動で読む
client = Reducto()
# (1) 文書をアップロードしてファイル参照を得る
upload = client.upload(file=Path("invoice.pdf"))
# (2) 取り出したい構造を JSON Schema で宣言する = スキーマ駆動のゼロショット抽出
# フィールド名と description が、VLM が値を探す手がかりになる
schema = dict(
type="object",
properties=dict(
invoice_total=dict(type="number", description="請求書の合計金額(通常は末尾)"),
line_items=dict(type="array", items=dict(type="string"), description="明細行の品目名"),
),
)
# (3) instructions=「何を取り出すか」/ settings=「どう動かすか」で引数を分ける
# settings.citations を有効にすると各値の出所(ページ・版面座標)が返る = visual grounding
result = client.extract.run(
input=upload.file_id,
instructions=dict(schema=schema, system_prompt="これは請求書です。金額は正確に。"),
settings=dict(citations=dict(enabled=True)),
)
# result.result はフィールド名をキーにした辞書。各値は .value / .citations を持つオブジェクト
field = result.result["invoice_total"]
print(field.value) # 例: 23278.62
print(field.citations[0].bbox.page) # 値が見つかったページ番号
引数は instructions(何を取り出すか)と settings(どう動かすか)に分かれ、戻り値は辞書アクセスと属性アクセスが混ざる——いずれもコード内のコメントの通りだ。テンプレートを書く代わりにスキーマを1枚書くだけで、出力に監査証跡が付く。
規制の厳しい現場が選ぶ理由——医療Anteriorの導入事例
分かりやすいのが医療のAnteriorだ。保険給付の可否を事前に審査する「事前承認(prior authorization)」を自動化するこの会社は、99%超の精度と1分未満のSLA(応答時間の保証)で医療文書を構造化していると公表する。事前承認では給付要件と患者記録を突き合わせるため、表が崩れて要件を1つ読み違えるだけで判断が狂う。多パスで取りこぼしを減らし、visual groundingで「この要件は記録のここにある」と出所をたどれることが、審査の信頼性に直結する。
法務AIのHarvey(1,300以上の組織)、運用資産1兆ドル超のBenchmarkも採用を公開している。第三者の事例では、サーバーレスGPU基盤のModalが推論移行でP90レイテンシ(応答が遅い方から1割の値)を3分の1に削減したと報告する(出所はReducto創業者の発言)。これらは海外企業の事例だが、あなたが扱う申請書のような「表が崩れると困る文書」でも刺さりどころは同じだ。
過信しないための補助線——どこまでが「確かめられた話」か
数値の確からしさには注意がいる。Harveyの1,300組織もAnteriorの99%超も、Reductoと顧客側の公表値で、第三者検証はModalの事例にほぼ限られる。累計処理ページ数も出典で10億〜30億ページ超と揺れる。これらは「実測された業界標準」ではなく「提供側が示す到達点」として読みたい。仕組みの新しさと、その裏づけの確からしさは、分けて受け止めたい。
最後に——「宣言して、裏づけを取る」文書処理へ
Agentic OCRは、文書を多パスで読み直し、結果をスキーマ駆動の構造化JSONで返し、各値にページ上の座標の裏づけ(visual grounding)を付ける。テンプレートを作る代わりに「欲しい構造を宣言し、出所の裏づけを取る」——これが、表を真っ先に壊していた従来手法との分かれ目だ。崩れた表に泣かされた経験があるなら、手元のどの文書から、まず任せてみたいだろうか。
参考文献
- Reducto 公式ドキュメント(Parse/Extract・citations の仕様) - https://docs.reducto.ai/
- Reducto API Quickstart(Parse のSDK 例・レスポンス構造) - https://docs.reducto.ai/quickstart
- Reducto Extract(スキーマ駆動抽出・citations の有効化) - https://docs.reducto.ai/extract
- Reducto 顧客事例(Harvey/Anterior/Benchmark 等の実名と引用) - https://reducto.ai/customers
- Reducto Series B 発表(公式ブログ・調達と規模) - https://reducto.ai/blog/reducto-series-b-funding
- Reducto Raises $75M Series B(PR Newswire) - https://www.prnewswire.com/news-releases/reducto-raises-75m-series-b-to-define-the-future-of-ai-document-intelligence-302581462.html
- Modal: Reducto case study(レイテンシ3x・コールドブート短縮・スケール) - https://modal.com/blog/reducto-case-study
- LandingAI: OCR to Agentic Document Extraction(ADE の三本柱・進化) - https://landing.ai/blog/ocr-to-agentic-document-extraction-a-look-into-the-evolution-of-document-intelligence
- Firecrawl: Best PDF parsers(no-OCR/VLM 潮流・テンプレOCR の限界) - https://www.firecrawl.dev/blog/best-pdf-parsers
- LlamaIndex: Best Vision Language Models(OCR/VLM/Agentic OCR の3層整理) - https://www.llamaindex.ai/insights/best-vision-language-models