建設コンサル向けに「ローカルAIナレッジ検索・報告書支援」の設計書作成をAIにお願いしたら - その2-
はじめに
前回の建設コンサル向けに「ローカルAIナレッジ検索・報告書支援」の構想を練ってみた -その1-を基本として、どうせなら生成AIに設計書もお願いしたら、いいんじゃねとお願いした。
良い世の中なのか?今までやってきたことは何だったのか?
今後は、我々はプログラムを作る必要が無く、どんな物を作るのかで決まってしまうような気もします。
知識量ではとてもかないませんね。
そこで実際にどのような設計書を書いてくるのかを試してみました。
また出力されたスクリプトについては、これから実際に検証していきます。
まずは、設計書作成のための条件設定からですね。
Chatgptに設計書の作成依頼する。
Chatgpt plusのプロンプトに以下のテキストを入力します。
Ubuntu Server 24.04 に、ローカルRAG+報告書支援デモ環境を構築します。
構成:
- Ollama
- Open WebUI
- Qdrant
- FastAPI RAG API
- Docker Compose
- NVIDIA GPU対応
- 社内LAN内のみで利用
- 外部APIは使わない
まず、実装前の設計書を作成してください。
出力してほしいもの:
- 全体構成
- 導入手順
- 必要なパッケージ
- ディレクトリ構成
- ポート設計
- セキュリティ上の注意点
- Ansible化する場合のロール構成
作成された設計書
ChatGPT Plusを使った設計書です。(概要版)
詳細設計書は結構な量ですので、こちらのZIPをダウンロードして確認してください。
ローカルRAG+報告書支援デモ環境 設計概要
1. 目的
Ubuntu Server 24.04 上に、社内LAN内のみで利用するローカルRAG+報告書支援デモ環境を構築する。
外部APIは使用せず、LLM推論・Embedding・文書検索・報告書支援をすべてローカル環境で実行する。
2. 全体構成
構成要素は以下のとおり。
- Ubuntu Server 24.04
- Docker Engine
- Docker Compose
- NVIDIA Driver
- NVIDIA Container Toolkit
- Ollama
- Open WebUI
- Qdrant
- FastAPI RAG API
3. 役割
| コンポーネント | 役割 |
|---|---|
| Ollama | ローカルLLM・Embeddingモデルの実行 |
| Open WebUI | 利用者向けチャットUI |
| Qdrant | ベクトルDB |
| FastAPI RAG API | 文書投入、検索、回答生成、報告書支援 |
| Docker Compose | 各サービスの起動・管理 |
| NVIDIA Container Toolkit | DockerコンテナからGPUを利用 |
4. 導入手順概要
- Ubuntu Server 24.04 を準備する
- NVIDIA Driver と
nvidia-smiの動作を確認する - 基本パッケージを導入する
- Docker Engine を公式手順で導入する
- NVIDIA Container Toolkit を導入する
- Docker Compose 構成を配置する
- Ollama / Open WebUI / Qdrant / FastAPI RAG API を起動する
- Ollama モデルを取得する
- RAG対象文書を投入する
- Open WebUI から動作確認する
5. 必要な主なパッケージ
OS側
- curl
- ca-certificates
- gnupg
- jq
- git
- unzip
- python3
- python3-venv
- python3-pip
- build-essential
- docker-ce
- docker-ce-cli
- containerd.io
- docker-compose-plugin
- nvidia-container-toolkit
Dockerコンテナ
ollama/ollamaghcr.io/open-webui/open-webuiqdrant/qdrant- 自作 FastAPI RAG API イメージ
6. ディレクトリ構成
/opt/local-rag-demo/
├── docker-compose.yml
├── .env
├── README.md
├── scripts/
├── rag-api/
│ ├── Dockerfile
│ ├── requirements.txt
│ └── app/
├── data/
│ ├── documents/
│ ├── qdrant/
│ ├── ollama/
│ └── open-webui/
├── logs/
└── backups/
7. ポート設計
| サービス | ポート | 公開範囲 |
|---|---|---|
| Open WebUI | 3000 | 社内LAN |
| FastAPI RAG API | 8000 | 管理者または社内LAN限定 |
| Ollama | 11434 | Docker内部のみ |
| Qdrant HTTP | 6333 | Docker内部のみ |
| Qdrant gRPC | 6334 | Docker内部のみ |
| SSH | 22 | 管理端末のみ |
基本方針として、利用者の入口は Open WebUI に集約する。
8. セキュリティ方針
- 外部LLM APIは使用しない
- OpenAI / Claude / Gemini 等のAPIキーは設定しない
- Open WebUI のみ社内LANに公開する
- Ollama と Qdrant は外部公開しない
- FastAPI RAG API は必要時のみLAN公開する
-
.envはGit管理しない - Qdrantには本文断片やメタデータが保存されるため直接公開しない
- Dockerグループに追加するユーザーは最小限にする
- 本番機密資料は検証環境にそのまま投入しない
9. RAG処理の流れ
10. 報告書支援機能
FastAPI RAG API に以下の機能を持たせる。
| 機能 | 内容 |
|---|---|
| 文書検索 | 社内資料から関連情報を検索 |
| 質問応答 | 検索結果に基づいて回答 |
| 要約 | 長文資料や報告書を要約 |
| 報告書ドラフト | メモや検索結果から報告書案を作成 |
| リライト | 業務向け・行政向け表現に修正 |
11. Ansible化する場合のロール構成
ansible/
├── inventory/
├── playbooks/
└── roles/
├── common/
├── docker/
├── nvidia_container_toolkit/
├── rag_dirs/
├── compose_stack/
├── ollama_models/
├── firewall/
├── backup/
└── healthcheck/
| ロール | 役割 |
|---|---|
| common | 基本パッケージ導入 |
| docker | Docker Engine導入 |
| nvidia_container_toolkit | GPUコンテナ対応 |
| rag_dirs | ディレクトリ作成 |
| compose_stack | Docker Compose配置 |
| ollama_models | モデル取得 |
| firewall | LAN限定公開設定 |
| backup | 設定・データバックアップ |
| healthcheck | 動作確認 |
12. 設計のポイント
- 外部APIを使わず、完全ローカルで動かす
- 利用者入口は Open WebUI に集約する
- Ollama と Qdrant は Docker内部ネットワークに閉じる
- GPUは Ollama に割り当てる
- FastAPI RAG API を分離し、将来のGIS連携や報告書支援に拡張しやすくする
- Ansible化を前提に、構成ファイルとデータを整理する
13. 次に作成するもの
docker-compose.yml.env.examplerag-api/Dockerfilerag-api/requirements.txtrag-api/app/main.py- セットアップ用シェルスクリプト
- Ansibleロール雛形
設計書の吟味
多分、同じように考えて作成する事になりますが、たった10分ほどでChaGPT Plusで作成されました。
フロー図まで書いてくれるんですね。もうちょっとイメージがわく図にしてほしいところですね。
全体的に、同じような設計書を作るとしたら2~3日程度の時間は必要だと思います。
この設計書を元にAnsible化していくのですが、いきなりな難しいので、まずは、bashで導入手順を固定化し、実機で動作確認できた手順だけをAnsible化するのが安全と考えます。
したがって以下の手順で進めていきます。
手 順
- bash スクリプトで手順を作る
- 検証用 Ubuntu Server 24.04 で順番に実行する
- エラー箇所を修正する
- 最終的に全手順が通ることを確認する
- 動作確認済み bash を Ansible role に分解する
なんとここまで約2時間程度です。恐ろしや。。。
うまく使いこなせれば、すごいこともできそうですね。
次回は設計書の導入順でスクリプトを検証します。
さてさて、うまく行くのでしょうか?
導入手順
- A[OS確認]
- B[基本パッケージ導入]
- C[NVIDIA Driver確認]
- D[Docker導入]
- E[NVIDIA Container Toolkit導入]
- F[Docker GPU確認]
- G[Compose構成配置]
- H[Ollamaモデル取得]
- I[Qdrant起動]
- J[FastAPI RAG API起動]
- K[Open WebUI起動]
- L[ヘルスチェック]