🚀 Dify+ベクトルDB連携構築講座
次世代AI開発プラットフォームで実現する
インテリジェントなRAGシステム
📋 講座の全貌と概要
この講座では、Dify(AI開発プラットフォーム)とベクトルデータベースを連携させることで、従来のチャットボットを超えた高度なAIアシスタントを構築する方法を学びます。
理論だけでなく、実際に動くシステムを構築
AWS環境で本格的なシステムをデプロイ
企業レベルで運用可能なアーキテクチャ
🎯 目的とゴール
社内文書や製品情報を理解し、文脈に応じて適切な回答ができるインテリジェントAIアシスタントを構築する
- ✅ Difyプラットフォームの基本概念と操作方法
- ✅ ベクトルデータベースの仕組みと活用法
- ✅ RAG(Retrieval-Augmented Generation)システムの構築
- ✅ AWS環境での本番運用ノウハウ
- ✅ トラブルシューティング技術
🤖 Difyとは何か
Difyは、AI開発を劇的に簡素化するオープンソースプラットフォームです。プログラミングスキルがなくても、直感的なUIでAIアプリケーションを構築できます。
ドラッグ&ドロップでAIワークフローを作成
OpenAI、Claude、Gemini等の主要LLMに対応
チャット履歴、コスト分析、パフォーマンス監視
🗄️ ベクトルDBとは何か
ベクトルデータベースは、文章や画像を数値の配列(ベクトル)として保存し、「意味の類似性」で高速検索できる特殊なデータベースです。
🔄 ベクトル化のプロセス
検索方式 | 従来のキーワード検索 | ベクトル検索 |
---|---|---|
検索方法 | 完全一致・部分一致 | 意味の類似性 |
例:「犬」で検索 | 「犬」を含む文書のみ | 「犬」「ペット」「動物」等を含む文書 |
精度 | 表記揺れに弱い | 文脈を理解 |
⚡ なぜDify+ベクトルDBが驚異的な力を発揮するのか
Difyの直感的なAI開発環境と、ベクトルDBの高精度検索が組み合わさることで、企業の知識を完全に理解するAIアシスタントが誕生します。
「先月の売上」→過去の売上データを自動検索
複数の関連文書から総合的な回答を生成
新しい情報を追加するだけで賢くなる
ミリ秒単位での高速検索・回答
- 🏢 社内ヘルプデスク:規定集・マニュアルから適切な回答を自動生成
- 🛒 ECサイト:商品説明書・レビューから購入相談に対応
- 🏥 医療機関:診療ガイドライン・過去症例から診断支援
- 📖 教育機関:教材・論文から学習サポート
🐘 pgvectorの特徴と強み
pgvectorは、PostgreSQLにベクトル検索機能を追加する拡張機能です。既存のリレーショナルデータベースの安定性と、最新のベクトル検索を両立できます。
PostgreSQLの30年の実績
既存インフラを活用
既存のDB管理ツールをそのまま利用
数百万レコードまで対応
⚔️ OpenSearch vs pgvector 徹底比較
比較項目 | 🔍 OpenSearch | 🐘 pgvector |
---|---|---|
初期導入コスト | 高い(専用クラスター必要) | 低い(既存PostgreSQL拡張) |
月額運用費用 | $200-500/月〜 | $50-150/月〜 |
学習コスト | 高い(新しい概念・API) | 低い(SQLベース) |
データ規模 | 数千万〜数億レコード | 数万〜数百万レコード |
検索速度 | 非常に高速 | 高速 |
運用難易度 | 高い(専門知識必要) | 低い(PostgreSQL管理者なら可) |
推奨用途 | 大規模・高負荷システム | 中小規模・スタートアップ |
pgvectorを選ぶべき場合:初期費用を抑えたい、既存PostgreSQL環境がある、チーム規模が小さい、データ規模が100万件未満
OpenSearchを選ぶべき場合:大規模データ(数千万件以上)、高頻度アクセス、専門チームがいる
🏗️ システムアーキテクチャ
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ 👤 ユーザー │ │ 🤖 Dify Web UI │ │ 📱 フロントエンド │ │ │◄──►│ │◄──►│ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ ▼ ┌─────────────────┐ │ 🧠 Dify API │ │ (ECS Fargate) │ └─────────────────┘ │ ┌───────────┴───────────┐ ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ │ 🗄️ pgvector │ │ 🔥 Redis Cache │ │ (RDS PostgreSQL)│ │ (ElastiCache) │ └─────────────────┘ └─────────────────┘ ▲ │ ┌─────────────────┐ │ 📚 Document │ │ Storage (S3) │ └─────────────────┘
ユーザー質問 → 類似検索 → LLM回答生成
🏆 期待される成果
📈 定量的成果⚡ 応答速度
平均2秒以内で関連情報を検索・回答
🎯 回答精度
85%以上の質問で適切な回答を提供
💰 コスト削減
問い合わせ対応工数を70%削減
📚 知識活用
社内文書の90%以上を検索対象化
- 🚀 生産性向上:社員が情報検索に費やす時間を大幅短縮
- 🎓 スキル向上:AI・機械学習技術への理解が深まる
- 🔧 運用ノウハウ:本格的なAIシステムの運用経験を獲得
- 🌐 応用展開:他部署・他プロジェクトへの展開が可能
🎉 まとめ
この講座を通じて、Difyとpgvectorを組み合わせた次世代AIシステムを構築できるようになります。理論だけでなく、AWS環境での実践的な構築・運用スキルまで身につけることで、即座に業務に活用できる実力を養成します。
AIの未来を、あなたの手で構築してみませんか?
約20-30時間で完全マスター
初心者〜中級者向け
AWS無料利用枠で開始可能
🏗️ 構築手順の全体像
AWS環境でDify+pgvectorシステムを構築する際の全体の流れを、初心者にも分かりやすく13ステップで説明します。
┌─────────────────────────────────────────────────────────────┐ │ 🚀 構築フローチャート │ └─────────────────────────────────────────────────────────────┘ START │ ├─► 📋 フェーズ1: 環境準備 (1-2時間) │ │ │ ├─► Step 1: VPC・サブネット作成 [15分] │ │ └─► VPCエンドポイント作成 (ECR, S3, Logs...) │ │ │ ├─► Step 2: RDS PostgreSQL作成 [20分] │ │ └─► pgvector拡張インストール │ │ │ ├─► Step 3: ElastiCache Redis作成 [15分] │ │ └─► レプリケーション設定 │ │ │ └─► Step 4: S3バケット作成 [5分] │ └─► バケットポリシー設定 │ ├─► 🔐 フェーズ2: セキュリティ設定 (30分) │ │ │ ├─► Step 5: Secrets Manager設定 [10分] │ │ └─► SECRET_KEY, パスワード保存 │ │ │ └─► Step 6: IAMロール作成 [20分] │ ├─► ecsTaskExecutionRole │ └─► ecsTaskRoleDify │ ├─► 🐳 フェーズ3: アプリケーションデプロイ (1-2時間) │ │ │ ├─► Step 7: ECRリポジトリ作成 [10分] │ │ └─► Difyイメージプッシュ │ │ │ ├─► Step 8: データベース初期化 [15分] │ │ ├─► difyユーザー作成 │ │ └─► 最小テーブル作成 │ │ │ ├─► Step 9: ECSタスク定義作成 [30分] │ │ ├─► dify-api設定 │ │ ├─► dify-web設定 │ │ └─► dify-worker設定 │ │ │ └─► Step 10: ECSサービス起動 [20分] │ └─► ヘルスチェック確認 │ ├─► 🌐 フェーズ4: ルーティング&検証 (30分) │ │ │ ├─► Step 11: ALBターゲットグループ作成 [10分] │ │ └─► ルーティングルール設定 │ │ │ ├─► Step 12: DNS設定 [10分] │ │ └─► SSL証明書設定 │ │ │ └─► Step 13: 動作確認 [10分] │ ├─► HTTPSアクセステスト │ ├─► 初期セットアップ実行 │ └─► 管理者アカウント作成 │ └─► ✅ COMPLETE
Step 1: ネットワーク設定
所要時間: 15分
作業内容:
- VPC作成(CIDR: 10.0.0.0/16)
- プライベートサブネット x2
- VPCエンドポイント作成(8個)
成果物: VPC ID, Subnet IDs
Step 2: データベース構築
所要時間: 20分
作業内容:
- RDS PostgreSQL作成
- pgvector拡張インストール
- セキュリティグループ設定
成果物: RDS Endpoint
Step 3: キャッシュ設定
所要時間: 15分
作業内容:
- ElastiCache Redis作成
- レプリケーション設定
- セキュリティグループ設定
成果物: Redis Endpoint
Step 4: ストレージ準備
所要時間: 5分
作業内容:
- S3バケット作成
- バケットポリシー設定
- バージョニング有効化
成果物: S3 Bucket Name
Step 5: 機密情報管理
所要時間: 10分
作業内容:
- SECRET_KEY生成
- Secrets Manager登録
- SSM Parameter設定
成果物: Secret ARNs
Step 6: アクセス権限
所要時間: 20分
作業内容:
- ecsTaskExecutionRole作成
- ecsTaskRoleDify作成
- KMS復号化権限付与
成果物: Role ARNs
Step 7: コンテナ準備
所要時間: 10分
作業内容:
- ECRリポジトリ作成
- Dockerイメージプッシュ
- イメージタグ確認
成果物: Image URIs
Step 8: DB初期化
所要時間: 15分
作業内容:
- difyユーザー作成
- difyデータベース作成
- 最小テーブル作成
成果物: DB Ready状態
Step 9: タスク定義
所要時間: 30分
作業内容:
- タスク定義JSON作成
- 環境変数設定
- メモリ・CPU配分
成果物: Task Definition ARN
Step 10: サービス起動
所要時間: 20分
作業内容:
- ECSサービス作成
- ヘルスチェック確認
- ログ確認
成果物: Running Tasks
Step 11: ロードバランサー
所要時間: 10分
作業内容:
- ターゲットグループ作成
- ALBルール設定
- ヘルスチェック設定
成果物: Target Group ARNs
Step 12: DNS設定
所要時間: 10分
作業内容:
- ACM証明書取得
- Route53レコード設定
- HTTPS リスナー設定
成果物: Domain URL
Step 13: 動作確認
所要時間: 10分
作業内容:
- HTTPSアクセステスト
- 初期セットアップ実行
- 管理者アカウント作成
成果物: 稼働中システム
📝 構築チェックリスト
フェーズ | タスク | 前提条件 | 確認項目 |
---|---|---|---|
フェーズ1 | VPC作成 | AWSアカウント | ☐ VPC ID取得済み |
RDS作成 | VPC、サブネット | ☐ RDS Endpoint取得済み | |
Redis作成 | VPC、サブネット | ☐ Redis Endpoint取得済み | |
S3作成 | なし | ☐ バケット名確認済み | |
フェーズ2 | Secrets設定 | なし | ☐ Secret ARN取得済み |
IAMロール作成 | なし | ☐ Role ARN取得済み | |
フェーズ3 | ECRプッシュ | Dockerインストール | ☐ イメージURI確認済み |
DB初期化 | RDS稼働中 | ☐ テーブル作成完了 | |
タスク定義 | 全ARN取得済み | ☐ タスク定義登録完了 | |
サービス起動 | タスク定義 | ☐ Runningタスク確認 | |
フェーズ4 | ALB設定 | ECSサービス稼働 | ☐ Healthy状態確認 |
DNS設定 | ALB稼働 | ☐ HTTPS接続成功 | |
動作確認 | DNS設定完了 | ☐ ログイン成功 |
⏱️ 所要時間の目安
合計: 約3-4時間でデプロイ完了
🎓 構築方針とベストプラクティス
1600行以上のトラブルシューティングドキュメントから抽出した、初心者が必ず押さえるべき7つの原則です。
1️⃣ VPCエンドポイントは必須
理由: NAT Gateway($32/月)を使わずに、プライベートサブネットから安全にAWSサービスにアクセス
必要なエンドポイント:
- ✅ ECR(API & DKR): Dockerイメージの取得
- ✅ S3(Gateway型): ストレージアクセス
- ✅ Secrets Manager: 機密情報取得
- ✅ CloudWatch Logs: ログ送信
- ✅ KMS: 暗号化データの復号化
2️⃣ Difyの環境変数は個別指定
誤解: DATABASE_URLだけで接続できる
正解: 以下の個別環境変数が必須
- DB_USERNAME, DB_PASSWORD, DB_HOST, DB_PORT, DB_DATABASE
- REDIS_HOST, REDIS_PORT, REDIS_PASSWORD
なぜ? Difyの公式Docker Composeがこの形式を採用しているため
3️⃣ メモリは明示的に割り当て
問題: メモリ指定なし → コンテナ間で競合 → OOM Killer(Exit Code 137)
推奨配分:
- タスク全体: 4GB(2 vCPU)
- dify-api: 2GB
- dify-web: 1GB
- dify-worker: 1GB
4️⃣ Secrets ManagerはARN形式で指定
誤り: “dify/SECRET_KEY”(相対パス)
正解: “arn:aws:secretsmanager:ap-northeast-1:ACCOUNT_ID:secret:dify/SECRET_KEY-XXXXX”
影響: 相対パスだとSSM Parameter Storeとして解釈され、取得失敗
5️⃣ データベースは手動初期化
注意: Difyは自動マイグレーションを実行しない場合がある
対策: 最小限のテーブルを手動作成
- alembic_version(マイグレーション管理)
- dify_setups(セットアップ状態)
- accounts(ユーザー管理)
- tenants(テナント管理)
補足: 残りのテーブルは初期セットアップ画面で自動生成
6️⃣ dify-webはessential: false
理由: dify-webが一時的に停止しても、APIとWorkerは継続稼働
メリット: サービス全体のダウンタイムを最小化
7️⃣ KMS復号化権限は必須
対象: SSM Parameter StoreのSecureString型を使用する場合
必要な権限: kms:Decrypt, kms:DescribeKey
付与先: ecsTaskExecutionRole
🗄️ データアーキテクチャ概要
Skillty RAGシステムでは、データを3つのレイヤーに分けて管理することで、信頼性・追跡可能性・パフォーマンスを両立しています。
レイヤー | 役割 | 技術 | 特徴 |
---|---|---|---|
Source of Truth | マスターデータ | Git管理のJSONL | バージョン管理、差分追跡、レビュー可能 |
Runtime Store | 高速検索 | PostgreSQL + pgvector | ベクトル検索、評価ログ、再構築可能 |
Operational Data | 業務データ抽出 | MySQL | 参照専用、スキーマ変更なし |
rag_document
文書本体、メタデータ、バージョン管理
rag_embedding
768次元ベクトル、類似度検索用
qa_seed
評価用QAセット、期待される文書ID
qa_eval_result
回答精度、Recall@K、LLM採点
📖 5つの評価モード
- doc: 既存ドキュメント参照 → スコア最適化
- gap: 必要だが未整備 → Anchor Doc作成が必要
- concept: 抽象概念(定義・思想) → Anchor生成
- process: 手順・運用 → Playbook Doc化
- out_of_scope: 意図的範囲外 → 適切拒否検証
KPI: gap数を週次で0に近づける
⚠️ よくある課題と解決策
実際の構築で遭遇した問題と、その解決方法を初心者向けに解説します。
❌ エラー1: CannotPullContainerError
症状: Dockerイメージをダウンロードできない
原因:
- ECRにイメージが存在しない
- VPCエンドポイント(ECR)が未設定
- IAMロールの権限不足
解決策:
- ECRにイメージをプッシュ
- ECR VPCエンドポイントを作成(API & DKR)
- ecsTaskExecutionRoleにECR読み取り権限を付与
❌ エラー2: ResourceInitializationError
症状: Secrets Managerから値を取得できない
原因:
- Secrets参照が相対パス形式(”dify/SECRET_KEY”)
- KMS復号化権限がない
解決策:
- 完全ARN形式に変更(”arn:aws:secretsmanager:…”)
- ecsTaskExecutionRoleにkms:Decrypt権限を追加
❌ エラー3: Exit Code 137 (OOM Killer)
症状: コンテナが突然終了
原因: メモリ不足
解決策:
- タスク全体のメモリを4GBに増やす
- 各コンテナにメモリを明示的に割り当て(api: 2GB、web: 1GB、worker: 1GB)
❌ エラー4: Connection Refused (PostgreSQL)
症状: データベースに接続できない
原因:
- DATABASE_URLのみで個別環境変数がない
- セキュリティグループでport 5432が許可されていない
解決策:
- DB_USERNAME, DB_PASSWORD, DB_HOST, DB_PORT, DB_DATABASEを個別設定
- RDSセキュリティグループでECSからのインバウンド(5432)を許可
❌ エラー5: relation “dify_setups” does not exist
症状: テーブルが見つからない
原因: データベースが初期化されていない
解決策:
- PostgreSQLに接続
- difyユーザーとデータベースを作成