0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PowerShell + OpenAI APIで、見積PDFをフォルダに置くだけで回答履歴をCSV化する

0
Posted at

はじめに

見積業務では、仕入先ごとの単価表、過去の見積PDF、案件ごとの条件メモを見ながら、前回いくらで回答したかを確認することがよくあります。

ただ、情報がPDFのままだと再利用しづらく、結局その都度探し直すことになりがちです。

そこで今回は、見積PDFを指定フォルダに置くだけで、回答した金額や品番情報をCSVに蓄積していく仕組みを作りました。
PowerShell でPDFを処理し、OpenAI API で明細情報を構造化し、まずは確認用CSVに追記する流れです。

ポイントは、単にPDFを読めるようにしたことではなく、あとで見積判断に使える「履歴」として残る形にしたことです。

やりたかったこと

今回やりたかったのは次の3つです。

  • 見積PDFから明細情報を自動抽出する
  • 抽出結果を人が確認しやすいCSVに残す
  • 問題ないものだけ価格履歴に反映できるようにする

いきなり本番の履歴CSVを更新するのではなく、必ず確認用の中間データを挟むようにしました。

全体の流れ

全体の流れはシンプルです。

  1. 見積PDFを指定フォルダに置く
  2. PowerShell スクリプトでPDF一覧を取得する
  3. OpenAI API に PDF を渡して明細ごとに構造化する
  4. 確認用CSVに追記する
  5. 処理ログCSVに成功/失敗を残す
  6. 内容を確認してから履歴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

という流れを作るだけでも、かなり楽になると思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?