1. 導入
スマホ写真からの直接データ化(JPG/PNG対応)に成功し、ツールの利便性は飛躍的に向上しました。しかし、実際に現場で使われる「POSレジ 日次精算抽出レポート」のようなデータを用いたテストにおいて、最後の課題が浮き彫りになりました。それは「複数枚に分かれた画像ファイルの一括処理」と、「表の中身だけでなく、タイトルや総売上高といったページ上部のサマリー情報の抽出」です。今回は、AIのツール呼び出し定義を根本から見直し、実務で求められる完全なExcelレポートを自動生成するための最終アップデートの軌跡をたどります。
2. 複数ファイル同時アップロードと動的タイムアウト制御
PDFとは異なり、PNGやJPG画像は「1ファイル=1ページ」の構造を持ちます。そのため、2ページにわたる帳票を撮影した場合、2つの画像ファイルとしてシステムに送信する必要があります。 まずフロントエンドの タグに multiple 属性を追加し、複数画像の同時選択とドラッグ&ドロップに対応しました。
バックエンドでは、受け取った複数のファイルをリストとして順番に処理するロジックを実装しました。ここで直面したのが「APIのレート制限」と「サーバーのタイムアウト(時間切れ)」です。複数の画像を並列で一気にAIに投げると制限に引っかかるため、あえて1ファイルずつ順番に処理(直列処理)する設計としました。さらに、ファイル数が増えるほど処理時間が延びるため、「1ファイルにつき基本90秒+追加1ファイルごとに60秒を加算する」という動的なタイムアウト延長機構を設け、途中で処理が強制終了されるのを防ぎました。
3. record_documentへの拡張とopenpyxlによる自由なレイアウト
従来のシステムは、AIに「表だけを探せ」と指示する record_tables というツール定義を使用していました。そのため、AIは指示に忠実に従い、ページ上部にある「店舗名」「日付」「当日売上高」などの重要なサマリー数値をあえて無視していました。
これを解決するため、AIへの指示を record_document というより広範なツール定義に拡張しました。これにより、表のデータに加えて、文書全体の「タイトル」や「メタ情報(キーと値のペア)」を同時に抽出できるようになりました。 また、これらの複雑な情報を1つのExcelシートに見やすく配置するため、Excel出力ライブラリを「データフレーム(表)専用」の pandas から、セル単位で自由に書き込みができる openpyxl へとリプレイスしました。結果として、最上段にタイトル、次にサマリー数値、そしてその下に明細の表が続く、理想的なExcelフォーマットの自動生成に成功しました。複数ファイルがアップロードされた場合は、すべてのデータが1つのシートに縦に結合されて出力されます。
4. まとめ
「複数ファイルの結合」「表以外のメタデータ抽出」「自由なExcelレイアウト」の実装により、単なる「PDFの表抜き出しツール」は、現場のあらゆる紙帳票を構造化データに変換する「統合ドキュメント処理システム」へと進化しました。徹底したエラーハンドリングと柔軟なAIのツール定義(Tool Use)を組み合わせることで、開発コストを最小限に抑えながら、エンタープライズ品質の業務改善アプリを構築できることが証明されました。
【編集後記】 今回の一連の開発を通じて、AIをシステムに組み込む際の「指示の出し方(プロンプトとスキーマ定義)」がいかに重要かを痛感しました。「表を抽出しろ」と言えば表しか見ない、まさにAIの融通の利かなさと素直さが現れた事例です。技術的には一区切りつきましたが、今回構築した「安全なデータ通信」「AIによる画像解析」「クラウドサーバーでの運用」という基盤は、将来的に本格的なCRM(顧客管理システム)や在庫管理システムを自社開発するための強固な土台となります。AIアプリ開発の知見は、確実に私たちの組織の大きな資産となりました。