1. 背景とシステム概要
行政窓口における業務処理は、大量の紙媒体書類の核对や、複雑な政策規定に基づく説明対応など、人的コストがかかる作業が多く存在します。職員が書類を手作業で確認し、市民の質問に答えるプロセスは時間がかかり、かつ政策の更新漏れや認識ミスによるリスクも伴います。
この課題を解決するため、マルチモーダル AI 模型を活用した自動化システムの構築が有効です。本稿では、MiniCPM-o-4.5-nvidia-FlagOS を基盤とし、提出書類の画像理解と政策に関する質疑応答を実現するスマートアシスタントの構築手順および実装パターンについて解説します。
本システムが提供する主要な機能は以下の 2 点です:
- 文書画像の構造化理解:身分証、許可証、申請書などの画像からテキスト情報を抽出し、表構造や印鑑の認識を行います。
- 政策知識に基づく質疑応答:最新の政策データベースを参照し、手続きフロー、必要書類、資格要件などの質問に対して自然言語で回答を生成します。
2. 環境構築とデプロイ手順
2.1 基盤技術:FlagOS の役割
本システムの中核となるFlagOSは、AI 模型の推論効率を最適化するためのソフトウェアスタックです。従来の環境では、模型とハードウェア(GPU)の間の互換性調整に多くの工数を要していましたが、FlagOS を利用することで、MiniCPM-o-4.5 といったオープンソース模型を NVIDIA 製 GPU 上で効率的に動作させることが可能になります。開発者はハードウェア层面的な最適化を意識せず、アプリケーションロジックの実装に集中できます。
2.2 サービスの起動フロー
NVIDIA GPU(例:RTX 4090 相当)を搭載し、CUDA ドライバ(バージョン 12.8 以上)が導入済みのサーバー環境を前提とします。
手順 1:模型およびコードの配置
模型ファイルとアプリケーションコードを所定のディレクトリに配置します。
- 模型パス:
/opt/ai/models/FlagRelease/MiniCPM-o-4___5-nvidia-FlagOS/ - エントリーポイント:
/opt/ai/apps/MiniCPM-o-4.5-nvidia-FlagOS/main.py
手順 2:依存ライブラリのインストール
ターミナルにて、必要な Python パッケージをインストールします。互換性を確保するため、特定のバージョンを指定します。
# 核心ライブラリのインストール
pip install torch transformers gradio pillow moviepy accelerate
# 版本の固定による安定性確保
pip install transformers==4.51.0
手順 3:Web サーバーの起動
依存関係の解決後、以下のコマンドでサービスを開始します。
python3 /opt/ai/apps/MiniCPM-o-4.5-nvidia-FlagOS/main.py
コンソールに Running on local URL: http://0.0.0.0:7860 といったログが表示されれば起動成功です。
手順 4:インターフェースへのアクセス
ブラウザから http://[サーバー IP]:7860 にアクセスすると、画像アップロードおよびテキストチャット用の UI が表示されます。これで画像理解と質疑応答機能を備えたバックエンドサービスが稼働します。
3. 主要ユースケースと実装逻辑
3.1 申請書類の自動審査と情報抽出
企業補助金の申請などにおいて、複数の書類(身分証、登記簿、通帳など)の整合性確認が必要です。従来は職員が目視で確認していましたが、AI を活用することで自動化が可能です。
処理フロー:
- ユーザーが「登記簿」の画像をアップロードします。
- システムが模型に対し、「会社名、統一社会信用コード、代表者名、資本金、設立日を抽出してください」と指示を送ります。
- 模型は数秒以内に構造化されたデータを返却します。
- システムは抽出データとユーザー入力内容を照合し、不一致があればフラグを立てます。
技術ポイント: 専用の OCR 模型を訓練するのではなく、マルチモーダル大模型の VQA(Visual Question Answering)機能を利用します。これにより、フォーマットが異なる非定型書類にも柔軟に対応できます。
3.2 24 時間対応の政策質疑応答
市民が手続きに必要な書類や場所、所要時間を尋ねるケースに対応します。窓口時間外でも AI が正確な情報を提供できます。
対話例:
- ユーザー:「新生児の医保加入に必要な書類は?」
- AI:「戸籍謄本、保護者の身分証、出生証明書などが必要です。地域により異なる場合があるため、最新の管轄窓口情報をご確認ください。」
- ユーザー:「コピーでも構いませんか?」
- AI:「原則として原件の確認が必要なため、原本のご持参をお願いします。」
実装機制:
- 知識ベース構築: 政策文書や FAQ を構造化テキストとしてベクトルデータベースに格納します。
- 検索強化生成(RAG): ユーザーの質問意図を解析し、関連する政策条文を検索した上で、模型が回答を生成します。
- 多輪対話: 文脈を保持し、追加質問に対して精度の高い回答を提供します。
3.3 複雑な申請書填寫ガイド
申請書の項目含义が分かりにくい場合、空欄の画像をアップロードして質問することで、具体的な填寫方法のガイダンスを受けられます。
例えば、「世帯年収」の欄について「税前か税后か」「含める成員の範囲」などを質問すると、関連する管理条例に基づき正確な定義を回答します。これにより、填寫ミスによる再提出を防ぎ、市民の負担を軽減します。
4. 工程最適化と運用プラクティス
プロトタイプから実運用システムへ移行するためには、性能、セキュリティ、維持保守性の観点での最適化が必要です。
4.1 API 化とパフォーマンスチューニング
Gradio などのデモ界面ではなく、標準的な API として機能させることで、既存の行政システムとの連携が容易になります。
from fastapi import FastAPI, File, UploadFile, Form, HTTPException
from PIL import Image
from io import BytesIO
app = FastAPI()
# 画像解析エンドポイント
@app.post("/vision/inquire")
async def process_visual_request(
uploaded_doc: UploadFile = File(...),
inquiry_text: str = Form(default="画像の内容を説明してください")
):
# コンテンツタイプの検証
if not uploaded_doc.content_type.startswith("image/"):
raise HTTPException(status_code=400, detail="Invalid file type")
# 画像データの読み込み
content = await uploaded_doc.read()
img_obj = Image.open(BytesIO(content))
# 推論エンジンの呼び出し
result_text = inference_engine.process(img_obj, inquiry_text)
return {"query": inquiry_text, "response": result_text}
さらに、処理時間の長いタスクについては、非同期キューを導入し、タスク ID を発行して後から結果を取得する方式を採用することで、タイムアウトを防ぎます。頻繁な質問に対してはキャッシュ機制を導入し、模型推論コストを削減します。
4.2 セキュリティとコンプライアンス
行政データは機密性が高いため、以下の対策が不可欠です。
- 個人情報マスキング: 模型への入力前に、画像内の身分証番号や電話番号などを規則ベースまたは CV 模型で検出し、隠蔽処理を行います。
- 出力コンテンツ審査: 生成された回答が政策と矛盾しないよう、キーワードフィルターや小型の審査模型通过后にユーザーへ返却します。
- クローズド環境運用: データが外部ネットワークに流出しないよう、政务クラウドまたはローカルネットワーク内での完全私有化デプロイを実施します。
4.3 精度向上のための継続的改善
- プロンプトエンジニアリング: 系統の役割(例:「あなたは専門的な行政職員です」)や回答制約をプロンプトに明示し、出力品質を安定させます。
- 知識ベースの更新: 新政策公布に伴い、ベクトルデータベースを随時更新し、検索アルゴリズム(混合検索など)を改良して関連性を高めます。
- フィードバックループ: ユーザーによる「役に立った/立たなかった」評価データを収集し、誤回答ケースを分析して知識ベースやプロンプトの修正に活用します。