EXERCISE 90分

ストーリー

田中VPoE
Document AI、請求書/契約書処理、表抽出、IDPパイプラインを学んだ。ここで実際のNetShop社の業務に対してDocument AIパイプラインを設計・構築してもらう
あなた
実際の業務シナリオに対する設計演習ですね
田中VPoE
3つのミッションを用意した。経理部の請求書処理、人事部の履歴書処理、そして部門横断のIDPプラットフォーム設計だ
あなた
最終的には全社で使えるプラットフォームまで設計するんですね。やりがいがあります

ミッション概要

項目内容
目標Document AIパイプラインの設計書を作成する
所要時間90分
ミッション数3つ
使用知識Document AI / 請求書処理 / 表抽出 / IDP
評価観点パイプライン設計、バリデーション、運用設計、拡張性

ミッション1: 経理部の請求書自動処理システム(35分)

シナリオ

【経理部 鈴木マネージャーからの最終要件】

Step 1で議論した請求書処理について、詳細な設計を進めてほしい。
追加で以下の要件が出ている:

1. 請求書の受付チャネル
   - メール添付(60%): 受信メールから自動取得
   - 郵送スキャン(30%): 複合機スキャンからフォルダ監視
   - Webアップロード(10%): 取引先ポータル経由

2. 処理後の連携先
   - 会計システム(freee)にAPI経由で仕訳データを登録
   - 承認ワークフロー(10万円以上は部長承認、100万円以上は役員承認)
   - 支払日カレンダーに登録

3. 定型取引先のテンプレート管理
   - 上位30社のテンプレートは事前登録
   - 新規テンプレートの自動学習機能

4. 月次レポート
   - 処理件数、自動処理率、エラー率
   - 取引先別の精度統計
   - コスト削減効果の可視化

タスク

以下を設計してください。

1. 全体アーキテクチャ図
   - 受付チャネル → 処理パイプライン → 連携先
   - 使用するAWSサービスまたは技術スタック

2. 処理パイプライン詳細
   - 各ステージの処理内容とAPI呼び出し
   - 定型/準定型/非定型の分岐ロジック
   - バリデーションルールの一覧

3. 承認ワークフロー
   - 金額に基づく承認フロー
   - 自動承認の条件

4. テンプレート管理
   - テンプレートの構造
   - 自動学習の仕組み

5. コスト試算とKPI
解答例を見る
1. 全体アーキテクチャ

[メール] → SES → S3 → EventBridge
[スキャン] → フォルダ監視 → S3 → EventBridge     → Lambda(分類)
[ポータル] → API Gateway → S3 → EventBridge        ↓
                                              Lambda(抽出)

                                              Lambda(検証)

                                              [承認判定]
                                              ├→ 自動承認 → freee API
                                              └→ 要承認 → Slack通知 → 承認後 → freee API

技術スタック:
- 受付: SES, S3, EventBridge
- 処理: Lambda, Claude Vision API
- テンプレートDB: DynamoDB
- 承認: Step Functions
- 連携: freee API
- モニタリング: CloudWatch + Grafana

2. 処理パイプライン

Stage 1 - 前処理:
  PDF → 画像変換 → 傾き補正 → 解像度調整

Stage 2 - 分類:
  画像 → Claude Vision → 文書種別判定
  → 請求書以外ならリジェクト

Stage 3 - 取引先識別:
  → DynamoDBのテンプレートDBと照合
  → マッチ: 定型処理、不マッチ: VLM処理

Stage 4 - 抽出:
  定型: テンプレート領域OCR → フィールド抽出
  準定型/非定型: Claude Vision → JSON抽出

Stage 5 - バリデーション:
  - 明細合計 = 小計
  - 小計 + 税 = 合計
  - 税率: 8% or 10%
  - 日付: 過去1年以内
  - 取引先: マスタDB存在チェック
  - 重複チェック: 請求書番号 + 取引先で重複検知

3. 承認ワークフロー

金額別:
  10万円未満 → 自動承認(信頼度95%以上かつバリデーション合格)
  10万〜100万円 → 部長承認(Slack通知 + ワンクリック承認)
  100万円以上 → 部長承認 → 役員承認

4. テンプレート管理

テンプレート構造:
{
  vendor_id: "V001",
  vendor_name: "株式会社ABC",
  template_version: 3,
  field_regions: {...},  // 座標ベース
  sample_images: ["s3://..."],
  accuracy_stats: {total: 500, correct: 490, rate: 0.98}
}

自動学習:
- VLMで処理した準定型請求書の結果を人間が確認・修正
- 同一取引先から10件以上の確認済みデータが溜まったら
  テンプレートを自動生成(フィールド位置の統計的推定)

5. コスト試算

月間3,000件:
- Claude Vision API: 3,000 × $0.02 = $60
- Lambda: 微少
- S3/DynamoDB: $10
- freee API: 既存契約内
合計: 約$70/月 ≒ 10,500円/月

削減効果: 400時間 × 3,000円 = 120万円/月
ROI: 120万 - 1万 = 119万円/月

ミッション2: 人事部の採用書類処理システム(30分)

シナリオ

【人事部 木村マネージャーからの依頼】

採用活動で大量の書類を処理する必要がある。

書類の種類:
1. 履歴書(PDF/画像): 月200件
2. 職務経歴書(PDF): 月200件
3. 資格証明書(画像): 月100件

現在の課題:
- 1応募者あたり3〜4種類の書類を目視確認
- 書類情報の手入力に1件あたり15分
- スクリーニング基準の適用が属人的
- 書類の保管・検索が紙ベース

希望:
- 書類の自動データ化
- スクリーニング条件に基づく自動フィルタリング
- 応募者プロフィールの自動構築
- 個人情報の適切な取り扱い(匿名化レビュー対応)

タスク

1. 書類処理パイプラインの設計
2. 各書類タイプの抽出フィールド定義
3. スクリーニングロジックの設計
4. 個人情報保護の対策
5. 匿名化レビュー機能の設計
解答例を見る
1. 書類処理パイプライン

応募フォーム / メール受信


[S3アップロード] → [文書分類(履歴書/職歴書/資格証明)]

    ├── 履歴書 → [VLM: 基本情報抽出]
    │     → 氏名、生年月日、学歴、職歴サマリー、写真有無

    ├── 職務経歴書 → [VLM: 詳細経歴抽出]
    │     → 各社の期間、役職、プロジェクト詳細、スキル

    └── 資格証明書 → [OCR + VLM: 資格情報抽出]
          → 資格名、取得日、発行機関、有効期限


[応募者プロフィール統合] → DB登録


[自動スクリーニング] → 合格/不合格/要確認


[匿名化レビュー画面] → 採用担当者

2. 抽出フィールド

履歴書: {name, date_of_birth, address, education[{school, degree, year}],
         work_history[{company, period, position}], certifications, photo_exists}

職務経歴書: {summary, experiences[{company, period, role, projects[{name, description,
             technologies, achievements}]}], skills[{name, level}]}

資格証明書: {certification_name, issue_date, issuer, expiration_date, id_number}

3. スクリーニングロジック

条件ベースのスコアリング:
| 条件 | 配点 |
|------|------|
| 必須資格保有 | 30点 |
| 関連業務経験3年以上 | 25点 |
| 求めるスキル保有数 | 最大20点 |
| 学歴要件合致 | 15点 |
| 転職回数(少ないほど高得点) | 10点 |
合計60点以上: 合格、40-59: 要確認、39以下: 不合格

4. 個人情報保護

- 処理時: 暗号化通信(TLS)、一時ファイルの即時削除
- 保管時: AES-256暗号化、アクセスログ記録
- API利用: 機密設定の場合はオンプレLLMに切り替え
- データ保持: 不採用者データは6ヶ月で自動削除
- アクセス制御: 人事部+面接担当のみ、最小権限

5. 匿名化レビュー

第一次スクリーニングでは以下を匿名化:
- 氏名 → 「応募者A001」
- 年齢/生年月日 → 非表示
- 性別 → 非表示
- 写真 → 非表示
- 住所 → 都道府県のみ
- 大学名 → 「四年制大学」等に一般化(オプション)

表示する情報:
- 職務経験(年数、分野、スキル)
- 資格
- スクリーニングスコア

ミッション3: 全社IDPプラットフォーム設計(25分)

シナリオ

【CTO 佐藤からの依頼】

ミッション1(経理)とミッション2(人事)の成果を踏まえ、
全社で使えるIDPプラットフォームを設計してほしい。

対象部門と文書タイプ:
- 経理: 請求書、領収書、経費精算書
- 人事: 履歴書、職務経歴書、資格証明書、勤怠表
- 法務: 契約書、NDA、覚書
- 営業: 見積書、注文書、納品書
- 総務: 社内申請書、届出書

設計要件:
- 新しい文書タイプの追加が容易(プラグイン方式)
- マルチテナント対応(将来のSaaS化を視野)
- 処理量: 月間10,000〜50,000件

タスク

1. プラットフォームアーキテクチャ
   - プラグインシステムの設計
   - マルチテナント対応の方針

2. 共通コンポーネントの設計
   - 文書取り込み / 分類 / 抽出 / 検証 / 登録
   - 各コンポーネントの共通インターフェース

3. スケーラビリティ設計
   - 月間50,000件を処理するインフラ設計
解答例を見る
1. プラットフォームアーキテクチャ

[文書取り込み層]
  メール / API / スキャン / Webアップロード


[共通処理層]
  前処理 → 分類 → ルーティング


[プラグイン層(文書タイプ別)]
  ├── InvoicePlugin: 請求書抽出 + 会計連携
  ├── ContractPlugin: 契約書分析 + リスク評価
  ├── ResumePlugin: 履歴書抽出 + スクリーニング
  └── GenericPlugin: 汎用OCR + 構造化


[共通後処理層]
  バリデーション → Human-in-the-Loop → 登録 → 通知


[データ層]
  文書DB / メタデータDB / 検索インデックス / 監査ログ

プラグインインターフェース:
class DocumentPlugin(ABC):
    @abstractmethod
    def get_document_types(self) -> list[str]
    @abstractmethod
    def extract(self, image: bytes, doc_type: str) -> dict
    @abstractmethod
    def validate(self, data: dict) -> ValidationResult
    @abstractmethod
    def get_output_schema(self) -> dict  # JSONスキーマ
    @abstractmethod
    def register(self, data: dict) -> bool  # 業務システム連携

マルチテナント:
- テナントID付きデータ分離
- テナントごとのプラグイン設定・テンプレートDB
- APIキーベースの認証
- テナント別の利用量制限・課金

2. 共通コンポーネント

取り込み: S3トリガー → SQSキュー → 処理ワーカー
分類: 共通VLMベース分類器(テナント別カスタムタイプ対応)
抽出: プラグインに委譲
検証: 共通バリデーション + プラグイン固有バリデーション
登録: プラグインの register() を呼び出し + 共通監査ログ

3. スケーラビリティ

月50,000件 ≒ 日2,300件 ≒ 時間280件(8時間稼働)

インフラ:
- SQSキュー: バッファリング + 処理平準化
- ECS Fargate: オートスケーリング(1タスクあたり10件/分 → 最大30タスク)
- DynamoDB: オンデマンドキャパシティ
- S3: ライフサイクルポリシーで古いデータをGlacierに移行

コスト(月50,000件):
- VLM API: 50,000 × $0.02 = $1,000
- ECS Fargate: $200
- DynamoDB + S3: $100
合計: 約$1,300/月 ≒ 195,000円/月

振り返り

評価基準

評価項目A(優秀)B(合格)C(要改善)
パイプライン設計全ステージ網羅 + エラーハンドリング基本的な処理フローステージの欠落あり
バリデーション複数ルール + クロスチェック基本的な検証バリデーション不十分
運用・拡張性プラグイン方式 + スケーラビリティ基本的な運用設計拡張性の考慮なし
セキュリティ暗号化 + アクセス制御 + 匿名化基本的なセキュリティセキュリティ未考慮

推定所要時間: 90分