🎓 レベル:標準 | 重要度:A(必須) 📎 前提:ローカルRAGの構成 | 原理:検索拡張生成(機械学習)
要点(結論先出し)
- 完全オフラインアプリ=生成モデル・埋め込みモデル・ベクトルDB・APIを全部手元に置く構成。ネット遮断(エアギャップ)でも動く。
- 利点は明快:データが一切外に出ない。規制業種・社内文書・個人ノートで本領を発揮。
- ただし「ローカル=完全に安全」ではない。プロンプトインジェクション・権限・ローカルAPIの露出は別途守る必要がある。
概念 ── 全部入りをローカルで閉じる
これまでの部品を1台(または社内LAN)に閉じます:
- 生成:Ollama / llama.cpp(→ 第3章)
- API:OpenAI互換エンドポイント(→ OpenAI互換API)
- 埋め込み:ローカル埋め込みモデル(→ 埋め込みモデルのローカル運用)
- 検索:組み込みベクトルDB(→ ローカルベクトルDB)
- UI:ローカルのチャット/アプリ
一度モデルと依存を揃えれば、ネットを切っても動くのが完全ローカルの強みです。
仕組み ── 閉じた構成図
flowchart LR UI["ローカルUI・アプリ"] --> API["OpenAI互換API(手元)"] API --> GEN["生成モデル(Ollama・llama.cpp)"] UI --> RAG["RAG層"] RAG --> EMB["埋め込みモデル(手元)"] RAG --> DB["ベクトルDB(手元・永続化)"] DB --> API
すべての矢印が手元の中で閉じる。外向きの通信が無いので、エアギャップでも成立します。
構築の段取り
- モデル・埋め込み・依存パッケージをオンラインで先に揃える(エアギャップ前に)
- ベクトルDBに文書をインデックス(→ ローカルRAGの構成)
- OpenAI互換APIでアプリと接続(→ OpenAI互換API)
- ネットを遮断して動作確認(本当に外部依存が無いか)
なぜそうするか
クラウドAPIは便利でも「データが外に出る」のが本質的制約。機密・個人情報・規制データを扱うなら、その制約自体が採用不可の理由になります。完全ローカルは**「速いから」ではなく「出せないから」選ぶ**構成。要件が”データを外に出さない”なら、これが唯一解になり得ます。
⚠️ よくある落とし穴(残るリスク)
- 「ローカルだから安全」と過信:データ流出は防げても、プロンプトインジェクション(取り込んだ文書中の悪意ある指示)は残る。信頼できない文書の扱いに注意。
- ローカルAPIをLANに生で晒す:認証なしのエンドポイントを共有しない。プロキシ+認証 → OpenAI互換API
- 依存の入れ忘れでエアギャップ後に動かない:遮断前に全依存とモデルを揃え、遮断後にテスト。
- 更新が止まる:オフラインだとモデル/脆弱性修正が入らない。更新運用を計画に入れる。
対応lab
- 構成要素の各 lab を組み合わせる:
openai_compat_api.md(接続)+rag_local.py(検索)+ollama_quickstart.md(生成)。
関連
- RAG構成 → ローカルRAGの構成
- ツール使用へ → ローカルエージェントとツール使用
- なぜローカルか → なぜローカルでLLMを動かすか