⚡ ハイライト数値
| 指標 | 値 |
|---|---|
| 月額コスト | ¥0(クラウドAI課金なし) |
| データ社外送信 | 0 バイト(完全ローカル) |
| 自動化機能 | 6種(PDF・議事録・日報・写真分類×2・分割) |
| 動作 VRAM | 4-5GB(GTX 1660 Ti クラスで余裕) |
| 応答時間 | 1〜3秒/チャンク(初回ロード後) |
| ライセンス | Apache 2.0 + MIT(商用利用OK・社内展開可) |
| クラウド依存 | ゼロ(別PC引っ越しも install + pull で完全再現) |
背景
製造業や受託開発の現場では、議事録・PDF・写真など 社外送信が許されない機密ドキュメント が日常的に発生する。
- ChatGPT や Claude API は便利だが、機密文書を投げるわけにはいかない
- 「探す・まとめる・書く」の単純作業に毎週何時間も溶かしている
- 各種クラウドAIツールは月額数千円〜万円が積み上がる
- 社内ポリシー的に「外部APIへのデータ送信」がそもそも禁止されているケースも多い
そこで、完全にローカルPC内で完結する業務自動化システム を構築することにした。データは1バイトも社外に出ない。
要件定義
| 区分 | 要件 |
|---|---|
| データ送信 | 完全ローカル(外部APIコール禁止) |
| 動作端末 | 一般的なノートPC(GPU 6GB VRAM クラス) |
| トリガー | フォルダにファイルを投入 → 自動処理 |
| 対象機能 | 探す・まとめる・書く・分類する を自動化 |
| ライセンス | 商用利用可(社内業務で使えること) |
| 運用コスト | 月額 ¥0(クラウド費用なし) |
技術スタック
┌──────────────────────────────────────────────┐
│ LLMランタイム Ollama(MIT・商用OK) │
├──────────────────────────────────────────────┤
│ モデル Gemma 4 E2B-it Q4量子化版 │
│ (Apache 2.0・商用OK・3-4GB) │
├──────────────────────────────────────────────┤
│ GPU GeForce GTX 1660 Ti │
│ (VRAM 6GB・CUDA自動検出) │
├──────────────────────────────────────────────┤
│ オーケストレーション Python │
│ ├ watchdog フォルダ監視 │
│ ├ pymupdf (fitz) PDF処理 │
│ └ APScheduler 週次バッチ │
├──────────────────────────────────────────────┤
│ 自動起動 Windows Task Scheduler │
└──────────────────────────────────────────────┘
モデル選定理由(Gemma 4 E2B)
| 要素 | 検討内容 | 結論 |
|---|---|---|
| ライセンス | 商用利用可・利用規約同意不要 | ✅ Apache 2.0 |
| サイズ | RAM 8GB ノートPCでも動作 | ✅ Q4量子化で 3-4GB |
| 速度 | チャンク要約に耐える応答速度 | ✅ GPU 4-5GB で快適 |
| マルチモーダル | 写真分類にVision必須 | ✅ Vision対応 |
| コンテキスト長 | 長文議事録に対応 | ✅ 256Kトークン |
| 多言語 | 日本語ネイティブ品質 | ✅ 140言語対応 |
LM Studio は GUI が魅力的だったが、業務利用は商用ライセンス必要 のため除外。Ollama 一択とした。
実装した6機能
1. PDF自動分割
処理: Pythonのみ(LLM不要・即時)
用途: 大量ページの請求書・契約書を1ページずつ分割して案件IDフォルダに自動振り分け
仕組み: pymupdf でページ抽出 → ファイル名のパターンマッチで分類
2. PDF要約
処理: チャンク 500〜800字 → Gemma 4 で要約 → 結合
用途: 100ページの仕様書・論文を5分で要約 → Slackに自動投稿(社内のみ)
精度: 重要事項の抽出はほぼ100%、表形式の解釈はやや弱い
3. 議事録 → TODO抽出
処理: 議事録テキスト → Gemma 4 で「次回までのアクション」のみ抽出
用途: 録音文字起こしから自動でアクションリスト生成
フォーマット例:
- [ ] 田中さん: 仕様書 v2.0 のレビュー(〆切:来週水曜)
- [ ] 山田さん: ベンダー A への見積依頼
- [ ] 全員: 次回アジェンダの事前共有
4. 日報 → 週報自動生成
処理: 月〜金の日報5本を集約 → Gemma 4 で週次サマリ生成
トリガー: Windows Task Scheduler(金曜18:00)
特徴: 「箇条書き」スタイル指定でフォーマットを安定化
5. 写真カテゴリ分類タグ付け
処理: Gemma 4 Vision で画像 → 事前定義カテゴリから選択
用途: 現場写真を「設備」「部品」「不良品」「成果物」などに自動仕分け
精度確保: プロンプトで「以下の8カテゴリから1つだけ選んで」と限定
6. 写真案件IDフォルダ自動整理
処理: Pythonのみ(ファイル名規則からID抽出)
用途: Dropbox 監視 → 命名規則からプロジェクトIDを抽出 → 該当フォルダに自動移動
動作フロー
ユーザー
│
▼ ファイルをフォルダに投入
┌─────────────────────┐
│ watchdog 監視 │
│ (4種フォルダ並行) │
└─────────┬───────────┘
│ ファイル作成イベント
▼
┌─────────────────────┐
│ 処理ルーター │
│ 拡張子・パスで分岐 │
└─────────┬───────────┘
│
┌────┴────┐
│ │
▼ ▼
Python処理 Ollama API
(PDF分割 (要約・抽出
フォルダ整理) 分類)
│ │
└────┬────┘
▼
結果ファイル出力
│
▼
通知(Slack任意)
すべて 同一PC内 で完結。Ollama は localhost API で Python から呼び出すだけ。
ハマりポイントと解決
1. RAM 不足で「model failed to load」500 エラー
総RAM 15.8GB / 空き 3.6GB / モデル要求 7.2GB
→ CPU実行ではメモリ不足
解決: GPU(GTX 1660 Ti / VRAM 6GB)を Ollama が自動検出し CUDA 実行に切り替え。Q4量子化版なら 4-5GB でVRAMに収まる。
nvidia-smi で確認:
VRAM 6144MB / 空き 3646MB
Q4モデル 約4-5GB → 余裕で収まる
2. ollama CLI の PATH 問題
GUI版インストール後、ollama コマンドが PATH に入らない。
# NG
ollama pull gemma4:e2b-it-q4_k_m
# OK
& "C:\Users\81804\AppData\Local\Programs\Ollama\ollama.exe" pull gemma4:e2b-it-q4_k_m
3. fitz.insert_text が日本語フォント非対応
pymupdf で日本語テキストを直接書き込むとエラー。
回避策: テキスト挿入は不要だったため、抽出(page.get_text())と分割(page.extract)のみに絞って実装。実用上の影響なし。
4. 初回 API 呼び出しのモデルロード
[1回目] 500エラー(モデルがVRAMにロード中)
[2回目] 正常応答「はい。」
初回呼び出しから10〜20秒待つだけで安定する。リトライロジックを Python 側に組み込んで解決。
モデルチューニング戦略
ローカルLLMは 「Modelfile + RAG」で8割の効果 を出せる。ファインチューニングは不要と判断。
Ollama Modelfile による業務AI専用設定例
FROM gemma4:e2b-it-q4_k_m
PARAMETER temperature 0.3
PARAMETER top_p 0.9
SYSTEM """
あなたは社内業務アシスタントです。
回答は必ず日本語の箇条書きで、3〜5項目に収めてください。
推測ではなく、入力内容に書かれている事実のみを抽出してください。
"""
これで「議事録要約」「TODO抽出」「日報生成」それぞれに 専用キャラクター を作れる。ディスク増加なし・追加学習なし。
マルチエージェント・パイプライン化
要約AI(temperature 0.2)
↓
チェックAI(temperature 0.0・事実確認)
↓
整形AI(temperature 0.5・箇条書き整形)
3段でAI同士をチェーンすることで、単体LLMの弱点(ハルシネーション・冗長性)を補完できる。
メトリクス
| 指標 | 値 |
|---|---|
| モデルサイズ | 約 3-4GB(Q4量子化) |
| 動作 VRAM | 4-5GB(GTX 1660 Ti で余裕) |
| 初回応答時間 | 10〜20秒(モデルロード込み) |
| 以降の応答時間 | 1〜3秒/チャンク |
| 対応機能 | 6種(PDF/議事録/日報/写真×2/分割) |
| 監視フォルダ数 | 4種(並行監視) |
| 月額コスト | ¥0 |
| データ社外送信 | 0 バイト |
学んだこと
1. ローカルLLMは「8割実用」で十分価値がある
GPT-4o や Claude 3.7 のような高精度は出ない。だが、「議事録から TODO を抜く」「PDF を 200字で要約する」 ような定型作業なら、Gemma 2B〜5B クラスでも実用十分。完璧を求めず「8割で」と割り切ったことが成功要因。
2. 重要なのはモデルでなくオーケストレーション
watchdog でフォルダ監視 → Python ルーター → Ollama API → 結果出力。
この「業務フロー側」の設計 が全体価値の8割を決める。LLMの精度差より「いつ・どこから・何を入力されたら・どう動くか」の設計が重要。
3. ライセンスは早期に潰す
Gemma 4 が Apache 2.0 だと判明した時点で「商用利用OK・利用規約同意不要・社内展開可能」が確定。一方で LM Studio は商用ライセンス必須が判明し、序盤で除外できた。最初にライセンス調査をした2時間 が、後の数十時間の手戻りを防いだ。
4. Q4量子化は「劣化」ではなく「実用化」
「精度が落ちる」と敬遠されがちな量子化だが、6GB VRAM で動かせる 唯一の現実解。F16フル精度版は 16GB GPU が必要で、社内ノートPCでは動かない。
「現場で動くこと」 > 「ベンチマーク精度」 を優先すべき場面の典型。
5. クラウドAI依存からの脱却は「再現可能な設計」
このシステムは別PCに引っ越しても、Ollama install → model pull → python main.py だけで再現できる。ベンダーロックインゼロ・設定ファイルのみで完全移行可能 なのが最大の強み。
拡張ロードマップ
| Phase | 内容 |
|---|---|
| 現状 | 6機能・本番稼働中 |
| 次フェーズ | RAGで社内資料を知識として注入(社内マニュアル検索AI化) |
| Phase 2 | Modelfile で複数キャラ作成(要約専門・チェック専門・整形専門) |
| Phase 3 | マルチエージェント・パイプライン化(要約→チェック→整形を3段チェーン) |
| Phase 4 | 音声入力対応(Whisper.cpp ローカル実行と組み合わせ) |
まとめ
「機密データを外に出せない」 という制約が、むしろローカルAI活用の必然性を生んだ。
- データは1バイトも社外に出ない
- 月額コスト ¥0
- 社内ポリシー完全準拠
- 業務フロー6種を自動化
- ハードウェアは一般的なノートPC GPU で十分
ChatGPT 課金前に、まず ローカルLLM で「探す・まとめる・書く」を自動化する 選択肢を検討してほしい。多くの定型業務は Gemma クラスで十分まかなえる。
「クラウドAIか、AI諦めるか」の二者択一ではなく、「機密はローカル、汎用はクラウド」 のハイブリッド運用が、これからの実用解になる。