社内のExcel・PDF帳票から生成AIで項目を読み取り、業務システムに入力する仕組み。OCRとLLMの分担、人の確認画面、誤読の扱い
Excel・PDFの
この
この
帳票の読み取りは4段に分け、AIに任せるのは1段だけにする
帳票の
| 段 | やること | 担い手 | 残すもの |
|---|---|---|---|
| 文字にする | ファイルから |
ファイルの |
取り出した |
| 項目に |
「請求日」 |
生成AI |
項目ごとの |
| 確かめる | 合計や |
自前の |
通った |
| 人が |
元の |
担当者 | 直す前の |
生成AIが
Excelと文字のあるPDFは、OCRを通さずにファイルから直接取り出す
帳票の
| 届く形 | 文字の |
誤りやすい |
|---|---|---|
| Excelの |
セルの |
結合した |
| 文字の |
PDFの |
表の |
| スキャンや |
OCR、 |
かすれ、 |
Excelや、
スキャンした
もう
生成AIには決まった形で返させ、値と一緒に根拠の文字列を返させる
項目に
請求書を
{
"type": "object",
"properties": {
"issuer_name": { "type": "string" },
"registration_no":{ "type": ["string", "null"] },
"issue_date": { "type": "string", "format": "date" },
"total_amount": { "type": "integer" },
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"description": { "type": "string" },
"amount": { "type": "integer" }
},
"required": ["description", "amount"],
"additionalProperties": false
}
},
"evidence": {
"type": "object",
"properties": {
"issuer_name": { "type": "string" },
"issue_date": { "type": "string" },
"total_amount": { "type": "string" }
},
"required": ["issuer_name", "issue_date", "total_amount"],
"additionalProperties": false
}
},
"required": ["issuer_name", "registration_no", "issue_date", "total_amount", "lines", "evidence"],
"additionalProperties": false
}ポイントは
構造化出力が
誤読は、機械の検算で見つけるものと人が見るものに分ける
機械で
| 検算 | 見つかる |
引っかかった |
|---|---|---|
| 明細の |
桁の |
その |
| 根拠の |
帳票に |
その |
| 登録番号が |
番号の |
取引先の |
| 取引先が、 |
社名の |
候補を |
| 同じ |
同じ |
取り込みを |
| OCRの |
かすれ・手 |
その |
OCRの
登録番号の
人の確認画面は、元の帳票と読み取った値を並べ、直した記録を残す
人が
確認画面に
- 元の
帳票の 拡大と画像。 回転が できる もの - 項目ごとの
値と、 OCRのどこから 読んだか。 位置が あれば 帳票の 上に 枠を 出す - 検算の
結果。 引っかかった項目を 目立たせ、 引っかかった 理由を 書く - 直す欄と、
確定の 確定するまでボタン。 業務システムには 書き込まない - 差し戻しの
手段。 帳票その ものが 読めない 場合に、 取引先へ 出し直しを 頼む 流れに 回す
記録には、
この
帳票の中の文字を、AIへの指示として扱わせない
帳票は
この
- 生成AIに
できる 業務システムへのことを、 値を 返す ことだけに する。 書き込みや メールの 送信を AIから 直接させない。 書き込むのは、 人が 確定した 後の 自前の プログラムだけに する - 帳票の
中身と 指示文の指示を 分けて 渡す。 中で、 帳票の 部分は 読み取りの 対象であって 指示ではない ことを 明記する - ファイル名を
そのまま Bedrock の渡さない。 DocumentBlock の 説明には、 文書の name の 欄は モデルが 指示と して 解釈する おそれが あるので、 中立な 名前を 付けるよう 書かれている。 届いた ファイル名ではなく、 受付番号のような 名前に 置き換えて 渡す
1つ目が
帳票には
株式会社bundlyzeでは
小さく始めて、帳票の種類と項目を1つずつ広げる
最初の
- 帳票を
1種類選ぶ。 同じ取引先から 届く 注文書のように、 形が 毎回 そろう ものに する - 届く
形を Excel・文字の確かめる。 ある PDF・スキャンの どれで 届くかを 数え、 文字の 取り出し方を 決める - 業務システムの
項目に 合わせて スキーマを 書く。 見つからない 項目に null を 許し、 根拠の 文字列を 返させる - 検算を
書く。 合計の突き合わせ、 根拠の 文字列の 照合、 マスタの 照合、 二重の 取り込みの 検知から 始める - 確認画面を
作る。 確定するまで業務システムに 書き込まない 作りにし、 AIの 値と 確定の 値を 両方残す - 今の
手入力と しばらくは並べて回す。 人の 手入力も 続け、 両方の 結果を 突き合わせて、 誤読の 多い 項目を 洗い出す
6つ目の
出典にした各社のドキュメント(2026-10-03 確認)
対応する
- AWS
「Amazon Textract の :対応言語、ベストプラクティス」 信頼度の 下限の 考え方 - AWS「Analyzing Documents」:フォーム・表・クエリの
抽出と、 位置の 情報 - Google Cloud
「Document AI の :Enterprise Document OCR の言語サポート」 対応言語と 手書きの 対応 - AWS「Get validated JSON results from models」:Bedrock の
構造化出力、 Converse API での 指定、 対応しない スキーマの 制約 - AWS「DocumentBlock」:Converse API に
渡せる 文書の 形式と、 name の 欄の 注意 - 国税庁
「適格請求書発行事業者公表サイト Web-API」 :登録番号での照会と、 アプリケーションIDの 発行 - OWASP
(LLMアプリの :取り込んだ10大リスク・2025年版)の LLM01 文書に 紛れた 指示に よる 攻撃
よくある質問
生成AIに帳票を読ませれば、OCRは要らなくなりますか?
帳票の
読み取りの精度が十分に高ければ、人の確認を省いてもよいですか?
金額や
誤読を直した記録は、何に使えますか?
AIが