毎月数千件の公共料金請求書を扱うカスタマーサービスチームにとって、複雑で複数ページにわたる文書を正確に解析することは永続的な課題です。形式が一貫せず、表が密集し、レイアウトも多様なため、必要な情報をすばやく取り出すのは困難です。その結果、対応の遅れや請求ミス、顧客の不満が生じます。文書量が増えるほどこの非効率はさらに大きくなり、手元にあるデータを活用できなくなります。
この課題に対して、Amazon Textract と統合した Amazon Bedrock は、検索と生成の機能を提供します。Amazon Textract が構造化・非構造化コンテンツを高精度に抽出し、Amazon Bedrock の生成 AI と組み合わせることで、担当者が文書を手作業で検索する代わりに、プログラムで文書に問い合わせられるようになります。これにより、公共料金請求書から実用的な洞察を大規模に引き出し、より迅速で正確な顧客対応が可能になります。本記事では、複雑な PDF や画像形式の請求書とチャットし、内容を解析して関連する表にタグを付け、LLM が有用な情報を抽出しやすくする方法を紹介します。コードは GitHub で公開しています。
カスタマーサービスチームには、請求、使用量、支払い、サービスなど多岐にわたる問い合わせが届きます。ファイル形式も PDF、DOCX、TXT、HTML、XLSX とさまざまです。当初は請求書をそのまま RAG モデルに読み込ませていましたが、LLM が期日、支払金額、口座番号などの重要な詳細を取りこぼしたり、幻覚により誤った情報を返したりすることがありました。さらに形式によって性能が不安定で、単純な文書読み込みでは信頼できる回答は得られないと分かりました。
本ソリューションでサポートされているファイルタイプは PDF、DOCX、TXT、HTML、XLSX、PNG です。Amazon Textract は、複雑なレイアウトや埋め込み画像を含む複数ページの PDF からテキストを抽出できます。Word 文書の表や画像、その他のオブジェクトも解析でき、HTML のタグ内の構造化データや Excel のセル内容も扱えます。プレーンテキストや PNG ファイルにも対応しています。Textract で文書を前処理し、ノイズや無関係な情報を除去したうえで、文脈を理解したラベル付けを行うことにより、LLM にとって扱いやすいデータを RAG モデルに渡せます。
デプロイ手順としては、GitHub リポジトリをクローンし、custom-knowledge-base ディレクトリで bash custom_kb_deployment_setup.sh を実行します。これにより AWS CloudFormation スタックが作成され、Lambda 実行ロール、Lambda レイヤー、2つの Lambda 関数、Amazon S3 バケット、Amazon OpenSearch Serverless クラスター、Amazon Bedrock Knowledge Bases、Bedrock 用 IAM ロールなどがプロビジョニングされます。
デプロイ後は、S3 コンソールで document-- というバケットを開き、raw_files フォルダーを作成してサンプル請求書をアップロードします。ファイルがアップロードされると document-parser Lambda 関数が起動し、Amazon Textract ジョブが生ファイルを処理して parsed_files フォルダーに保存します。続く Lambda 関数が TXT 形式に変換し、最終出力は parsed_kb_documents フォルダーに置かれます。次に Amazon Bedrock コンソールでナレッジベースを選択し、データソースの Sync を実行して同期を待ちます。テストでは Text Knowledge Base の設定で Amazon Nova Micro モデルを選び、右側のテキストボックスから請求書に関連する質問をすることができます。ソリューションを使った場合と使わない場合の出力比較図も示されています。
本番環境で RAG ソリューションを運用する際は、信頼性を高めるためのガードレールを実装することが重要です。Amazon Bedrock Guardrails は、有害なコンテンツのフィルタリング、拒否トピックのブロック、入出力の機密情報の編集などを行えます。また、グラウンディング検証を使えば、モデルの回答が取得されたソース文書に裏付けられているかを評価し、幻覚を軽減できます。大量の構造化文書を扱う組織には特に有用なソリューションであり、今後は扱える文書タイプの拡張や AWS サービスとの追加連携、ユーザーフレンドリーなフロントエンド開発も考えられます。