はじめに
見積業務では、仕入先ごとの単価表、過去の見積PDF、案件ごとの条件メモを見ながら、前回いくらで回答したかを確認することがよくあります。
ただ、情報がPDFのままだと再利用しづらく、結局その都度探し直すことになりがちです。
そこで今回は、見積PDFを指定フォルダに置くだけで、回答した金額や品番情報をCSVに蓄積していく仕組みを作りました。
PowerShell でPDFを処理し、OpenAI API で明細情報を構造化し、まずは確認用CSVに追記する流れです。
ポイントは、単にPDFを読めるようにしたことではなく、あとで見積判断に使える「履歴」として残る形にしたことです。
やりたかったこと
今回やりたかったのは次の3つです。
- 見積PDFから明細情報を自動抽出する
- 抽出結果を人が確認しやすいCSVに残す
- 問題ないものだけ価格履歴に反映できるようにする
いきなり本番の履歴CSVを更新するのではなく、必ず確認用の中間データを挟むようにしました。
全体の流れ
全体の流れはシンプルです。
- 見積PDFを指定フォルダに置く
- PowerShell スクリプトでPDF一覧を取得する
- OpenAI API に PDF を渡して明細ごとに構造化する
- 確認用CSVに追記する
- 処理ログCSVに成功/失敗を残す
- 内容を確認してから履歴CSVに反映する
つまり、
PDF -> 構造化 -> 確認用CSV -> 人確認 -> 履歴CSV
という形です。
構成
今回の構成はざっくりこんな感じです。
- 入力: 見積PDFを置くフォルダ
- 実行: PowerShell スクリプト
- 抽出: OpenAI Responses API
- 中間データ: 確認用CSV
- ログ: processed_files.csv
- 本反映先: sales_price_history.csv
見積PDFを保管するだけで終わらせず、「新しいPDFが増えるたびに履歴候補も増える」状態にしたかったので、この構成にしています。
OpenAI API でやっていること
PDFは PowerShell で読み込み、base64 化して input_file として API に渡しています。
出力は自由文ではなく、JSON Schema で固定しています。
これによって、モデルの返答をそのままCSVに落としやすくなります。
抽出対象はたとえば次のような項目です。
- 客先名
- 客先品番
- 自社品番
- メーカー名
- 数量
- 単価
- 金額
- 日付
- 案件番号
- 備考
- 抽出ステータス
- 信頼度
業務で使うなら、ここはかなり重要でした。
自由形式の要約だと便利そうに見えても、後で履歴化しづらいからです。
実装で意識したこと
1. いきなり履歴に入れない
いちばん大事なのはここです。
見積書には、品番、材質、仕様番号、硬度など、似た見え方の情報が並びます。
AIが抽出できたとしても、そのまま本番データに入れるのは少し怖いです。
そのため、まずは確認用CSVに落として、人が見てから履歴へ反映する流れにしました。
2. 品番の解釈ルールを先に決める
今回いちばんハマったのは、客先品番と自社品番の切り分けでした。
見積書に書かれた品番は、自社品番ではなく客先向け表記のことがあります。
なので今回は、次のようなルールにしています。
- 見積書上の品番は、まず客先品番として扱う
- 自社品番は、明示されている場合だけ入れる
- 材質や硬度、仕様番号は備考に寄せる
LLM の精度だけに期待するのではなく、業務ルールをプロンプトに落とすことが大事でした。
3. 同じPDFを何度も処理しない
処理済み判定はファイル名ではなくハッシュで持っています。
これで、同じPDFを何度も取り込むのを避けやすくなります。
4. 成功と失敗をログに残す
成功したPDFも失敗したPDFも、別CSVに記録するようにしました。
失敗時はエラー内容も残すようにしておくと、再試行や見直しがしやすいです。
実際に便利だったこと
この仕組みを作ってから、見積PDFの扱いが変わりました。
- PDFをただ保存するだけで終わらなくなった
- 回答金額の履歴がCSVにたまるようになった
- 前回条件を探しやすくなった
- 手入力で履歴化する負担を減らせた
- ただし最後は人が確認するので運用しやすい
「全部自動化した」わけではありません。
でも、見積PDFを置くだけで履歴候補が増えていくので、次の見積対応に活かしやすくなりました。
最小構成で始めるなら
同じようなことを試すなら、最初はここまでで十分だと思います。
- PDFを1件ずつ読む
- JSON Schema で出力を固定する
- 確認用CSVを作る
- 人手確認を前提にする
最初から本番マスタへの自動反映までやらない方が、実務には乗せやすいです。
まとめ
見積PDFの活用で本当に価値が出たのは、PDFを読めたことそのものではなく、
「見積PDFをフォルダに置くだけで、あとで使える回答履歴がCSVにたまっていく形にしたこと」でした。
見積のたびに単価表や過去PDFを探しているなら、まずは
PDF -> 構造化 -> 確認用CSV -> 人確認 -> 履歴CSV
という流れを作るだけでも、かなり楽になると思います。