Impact-Site-Verification: 578d421e-1081-463d-918b-ec5e29c5b9db
<戻る

業務分析テーブル自動生成AIパイプライン

グローバルコンサルティングファーム

概要

コンサルタントによるクライアント業務分析を効率化するため,PDF / Word / Excel / PowerPoint 等の多様な業務マニュアルを横断的に解析し,3階層構造の「業務分析テーブル」をCSVで自動生成するAIパイプラインを設計・開発.プロンプト試行錯誤を1コマンドで回せる実験基盤と,業務視点(グループ)と技術視点(詳細分類)を同時に出力する二軸設計により,上流のビジネスレビューと下流の技術検討を一体化した.

アーキテクチャ

`src/core/` 配下をConverter → Extractor → Classifier → Grouperの4段階に分離.各段は単体で実行・差替できるよう薄く独立させ,LLMで曖昧性が混入しやすい抽出・分類と,決定的に回したい変換・集約とを意図的に切り分けた.各段の入出力はPydantic v2モデル(`WorkProcedureList` / `ClassificationTaskList` / `TaskGroupList`)で型検証し,Geminiの出力ゆらぎをスキーマ境界で吸収している.

大規模PDF処理は独自のチャンク戦略を採用.PyMuPDFで15ページ単位に分割→各チャンクを並列にMarkdown変換→ページ順序を保ったままマージする.Gemini API呼び出しは`asyncio.Semaphore(50)`でレート制限しつつ同時50本まで並走させ,スループットと安定性を両立させた.

フロントエンドは重量SPAを避けてFastAPI + Jinja2 + htmx + Tailwind + Alpine.js + Mermaid.jsの軽量構成を選択.実行状況はServer-Sent Eventsで段階的にPushし,長時間のパイプライン処理中もUIが固まらない.中央設定は`src/config.py`一箇所に集約しており,モデル・プロンプトパス・出力ディレクトリを差し替えるだけで複数実験を並行運用できる.

  1. Converter: PDF / Word / Excel / PowerPoint → Markdown変換(LibreOffice soffice + PyMuPDF)
  2. Extractor: Markdownから業務手順を抽出し構造化テーブルを生成
  3. Classifier: 技術的視点での詳細分類(Two-Stage分類の前段)
  4. Grouper: ユーザー視点での行動グルーピング(Two-Stage分類の後段)
  5. Runner: `src/web/services/pipeline_runner.py` が非同期に各段を駆動しSSEで進捗配信

主要機能

Two-Stage Classification: 「技術分類」と「業務グルーピング」を別段階に分け,中間結果を人が検証してから次段に進める設計.1プロンプトで両方を同時に出すと起きがちな精度劣化と責任境界の曖昧化を防いでいる.

実験管理: 中央`config.py`とプロンプトテンプレート群をバージョン分けし,複数プロンプト×複数モデルの組合せを一括実行.中間ファイル・最終CSVは実験ID単位のディレクトリに隔離され,あとから手元で並べて比較できる.

ドキュメント品質保証: LibreOffice経由でOfficeファイルを忠実度高くPDF化し,日本語フォントを明示指定して文字化けを抑止.CSVにはソースファイルパスとページIDを付与し,出力から原文への追跡を常に可能にしている.

クラウド連携: Azure Blob Storageとの入出力スクリプトを整備し,ローカル開発とクラウド実行を同じインタフェースで扱える.

開発環境・品質管理

Python 3.12 + uvで依存を固定.Google Python Style Guide準拠のdocstringを全ファイルに適用し,Ruffで静的解析とフォーマットを統一.Docker Composeでホットリロード開発環境を定義し,ローカル起動から本番コンテナへそのまま展開できる.

使用技術

Python 3.12FastAPIGoogle GeminiLangGraphPydantic v2PyMuPDFLibreOfficeasyncio.SemaphoreServer-Sent EventsJinja2htmxTailwind CSSAlpine.jsMermaid.jsAzure Blob StorageDocker ComposeuvRuff