こんにちは。AILabの中橋哉斗です。
今回は microSaaS 開発シリーズとして、「契約書などの長文書類を業界ごとに要約・整理するAIツール」をご紹介します。
ビジネスの現場では、契約書・業務委託書・同意書など、内容が長く、読むのに時間がかかる書類を取り扱う場面が多くあります。とくに以下のような「条文がずらりと並んだ契約書」を前に、読むのが大変だと感じた経験がある方も多いのではないでしょうか?
このような書類は、確認や説明に時間がかかるだけでなく、重要なポイントの見落としにもつながるリスクがあります。
今回開発したツールには以下のような特徴があります:
- 書類のOCR(文字読み取り)から内容を抽出
- 業界を自動判定し、それに合わせたチェックリストを生成
- 書類全体を業界ごとの観点で簡潔に要約
- 最後に、契約時に口頭で伝えるべき要点を5つに絞って提示
これにより、専門知識のない方でも内容を把握しやすくなり、契約プロセスの効率化が実現しています。
本記事では、開発の背景や工夫した点、そしてツールの具体的な使い方について紹介していきます。
開発環境
本アプリケーションで使用した技術スタックと構成は以下の通りです。
Azure Document Intelligence
契約書などのPDF書類から、文字情報を正確に抽出するために、Microsoftが提供するOCRサービス「Azure Document Intelligence」を利用しました。 従来のOCRと異なり段組や表などの構造をある程度保持した形でJSON出力されるため、後続の処理に活かしやすいという利点があります。 本ツールでは、このOCRで得られた文字列を基に、プロンプト内の「確認すべき項目」と照らし合わせて内容を要約・抽出しています。
Azure OpenAI
抽出した文書データを分析し業界に応じたチェックリストや要点を生成するために、Azure OpenAI(GPTモデル)を利用しました。 具体的には:
- 文書の特徴から どの業界に属するかを推定
- 業界ごとに定めた「確認すべき項目」をプロンプトに埋め込んで、要点を整理・要約
- 最終的に口頭で説明すべき5項目の抽出もOpenAIに任せています
このように、GPTモデルを情報処理の中心に据えることで、業界特化型の柔軟な文書要約が可能になりました。
Python
OCRとAI分析をつなぐ制御部分はすべてPythonで実装しています。主な役割は以下の通りです:
- Document IntelligenceやOpenAI APIとの連携
- OCR結果の整形や業界分類用のプロンプト生成
- Markdownファイルへの要約出力やファイル保存処理
- .envファイルによるセキュアなAPIキー管理
Pythonのシンプルさと豊富なライブラリのおかげで、プロトタイピングから業務活用レベルの仕組みまで、スムーズに実装を進めることができました。
システム構成
PDF ↓ [1] OCR(Document Intelligence) └ 書類内のテキスト情報を抽出 ↓ [2] 業界判定(Azure OpenAI) └ 文書の内容から、対応すべき業界を特定 ↓ [3] チェックリスト生成(Azure OpenAI) └ 業界に応じた確認すべき項目を生成 ↓ [4] 要約生成(Azure OpenAI) └ 抽出された項目に沿って書類全体を要約 ↓ [5] 要点抽出(Azure OpenAI) └ 最終的に確認すべき重要5項目を抽出 ↓ Markdown保存 └ 要約と要点をマークダウン形式で保存
開発プロセス
今回の実装では、PDFからのテキスト抽出から、業界ごとのチェックポイントに基づいた要約、そしてドキュメント出力までを一貫して自動化しました。特に、プロンプト設計や抽出精度の工夫が重要なポイントでした。以下では、それぞれのステップと実装上の工夫について紹介します。
① 入力ファイルの準備
まず、契約書などのPDFファイルを用意します。今回は以下のような書類を例に進めています。
② OCRによるテキスト抽出(document_reader.py)
Azure Document Intelligence の REST API を使って、PDFファイルを構造化JSONとして取得します。その中の lines セクションからテキストを抽出し、段落ごとの整形や改行処理を行います。工夫点としては、OCR結果のテキストは位置や順序が乱れることがあるため、抽出後に並び替えや不要な空白の除去処理を行っています。
③ 業界判定とチェックリスト生成(ai_analyzer.py)
抽出された契約書本文から、OpenAI API を使って業界カテゴリ(例:介護、人材、ITなど)を推定します。その後、業界ごとに異なる「チェックすべき項目リスト」を自動生成します。工夫点は、曖昧な業界分類になるケースを避けるため判断根拠を引き出すような指示文を追加しています。
④ 業界特化プロンプトによる要約生成
業界に応じたプロンプトテンプレートを用意し、契約書の全文とチェックリストを挿入したうえで、Markdown形式の読みやすい要約を生成します。
プロンプト例
if industry == "介護福祉": return ( "以下は契約書の全文です。この内容をもとに、指定されたチェックリストに沿って、" "該当する内容を簡潔に読み取り、わかりやすく整理してください。\n\n" "重要なポイントを日本語で箇条書きにして簡潔にまとめてください。\n" "同意を求める内容など、契約時に重点的にみておくべき項目は必ず入れるようにしてください。\n" "料金や時間など、契約者の行動に関係する情報も必ず説明するようにしてください。\n" "【出力形式】\n" "# 要約レポート\n" "## 1. 項目名\n" "- 内容\n" "...\n" "【契約書全文】\n{contract_text}\n\n" "【チェックリスト】\n{checklist_prompt}" )
⑤ 要点抽出とドキュメント出力
最後に、生成された要約から「口頭で必ず説明すべき5項目」を追加で抽出し、全体の要約とともにMarkdown形式で保存します。 Markdown形式にすることで、他の社員と共有しやすく、またテンプレート化して他プロジェクトにも応用しやすくなっています。
今後の展望
今回のプロトタイプでは、介護業界と不動産業界の2分野に対応しましたが、今後は他業界への対応拡張が重要な課題となります。 また、現場の職員や非エンジニアの方でも手軽に利用できるよう、Streamlit や Bubble といったノーコード/ローコードツールによるUI実装も、今後の展望として挙げられます。