オープンソース LLM プラットフォームである Dify のリレーショナルデータベースおよびベクトルストアとして ApsaraDB RDS for PostgreSQL を使用し、インテリジェント Q&A アプリケーションを構築します。
ステップ 1: ApsaraDB RDS for PostgreSQL インスタンスの作成
-
ApsaraDB RDS for PostgreSQL インスタンスのアカウントとデータベースの作成を行います。
次の点に注意してください:
-
アカウントを作成する際、[アカウントタイプ] を [特権アカウント] に設定します。
-
データベースの作成時に、[承認済みアカウント] を作成した特権アカウントに設定します。
-
-
ApsaraDB RDS for PostgreSQL インスタンスのパブリックエンドポイントを有効にします。パブリックエンドポイントの有効化または無効化をご参照ください。
ECS インスタンスのパブリック IP アドレスを、ApsaraDB RDS for PostgreSQL インスタンスのホワイトリストに追加します。IP アドレスホワイトリストの設定をご参照ください。
-
対象データベースのベクトル拡張機能を有効にします。拡張機能の管理をご参照ください。
ステップ 2: Dify のデプロイ
-
Elastic Compute Service (ECS) インスタンスを作成します。ウィザードを使用したインスタンスの作成をご参照ください。
-
CPU ベースの ECS インスタンスは、オンライン LLM をサポートします。
-
GPU アクセラレーションを備えた ECS インスタンスは、オンラインおよびローカルにデプロイされた LLM の両方をサポートします。
重要-
この記事では、Alibaba Cloud Linux 3 を例として使用します。
-
GPU アクセラレーションを備えた ECS インスタンスを使用する場合、イメージの設定時に GPU ドライバーをインストールしてください。これにより、Ollama を使用して LLM をデプロイできます。
-
-
ECS インスタンスに Docker をインストールします。
-
(オプション) GPU アクセラレーションを備えた ECS インスタンスを使用している場合、次のコマンドを実行して container-toolkit コンポーネントをインストールします。
-
Dify のソースコードをクローンします。
git clone https://github.com/langgenius/dify.git特定のバージョンをインストールするには、
branchパラメータを使用します。利用可能なバージョン:dify。v1.0.0 の例:git clone https://github.com/langgenius/dify.git --branch 1.0.0説明Git がインストールされていない場合は、
sudo yum install git -yを実行してインストールしてください。 -
ApsaraDB RDS for PostgreSQL をデフォルトのデータベースおよびベクトルストアとして設定するため、環境変数を設定します。
-
ApsaraDB RDS for PostgreSQL をデフォルトのデータベースとして設定します。
export DB_USERNAME=testdbuser export DB_PASSWORD=dbPassword export DB_HOST=pgm-****.pg.rds.aliyuncs.com export DB_PORT=5432 export DB_DATABASE=testdb01これらの値を実際の設定に置き換えてください。
パラメータ
説明
DB_USERNAME
ApsaraDB RDS for PostgreSQL インスタンスの特権アカウント。
DB_PASSWORD
ApsaraDB RDS for PostgreSQL インスタンスの特権アカウントのパスワード。
DB_HOST
ApsaraDB RDS for PostgreSQL インスタンスのパブリックエンドポイント。
DB_PORT
ApsaraDB RDS for PostgreSQL インスタンスのパブリックポート。デフォルト値は 5432 です。
DB_DATABASE
ApsaraDB RDS for PostgreSQL インスタンス内のデータベース名。
-
ApsaraDB RDS for PostgreSQL をデフォルトのベクトルデータベースとして設定します。
export VECTOR_STORE=pgvector export PGVECTOR_HOST=pgm-****.pg.rds.aliyuncs.com export PGVECTOR_PORT=5432 export PGVECTOR_USERNAME=testdbuser export PGVECTOR_PASSWORD=dbPassword export PGVECTOR_DATABASE=testdb01これらの値を実際の設定に置き換えてください。
パラメータ
説明
VECTOR_STORE
ベクトルストアを指定します。PostgreSQL 拡張機能には
pgvectorを使用します。PGVECTOR_USERNAME
ApsaraDB RDS for PostgreSQL インスタンスの特権アカウント。
PGVECTOR_PASSWORD
ApsaraDB RDS for PostgreSQL インスタンスの特権アカウントのパスワード。
PGVECTOR_HOST
ApsaraDB RDS for PostgreSQL インスタンスのパブリックエンドポイント。
PGVECTOR_PORT
ApsaraDB RDS for PostgreSQL インスタンスのパブリックポート。デフォルト値は 5432 です。
PGVECTOR_DATABASE
ApsaraDB RDS for PostgreSQL インスタンス内のデータベース名。
または、
.envファイルでこれらの設定を行うこともできます。 -
-
(オプション) リソースを節約するため、
.envとdocker-compose.yamlファイルを編集して、デフォルトのデータベースおよび Weaviate コンテナを無効にします。 -
-
Dify を起動します。
cd /root/dify/docker docker compose -f docker-compose.yaml up -d
ステップ 3: Dify サービスへのアクセス
-
ブラウザで
http://<ECS インスタンスのパブリック IP アドレス>/installを開き、Dify のインストールを開始します。説明ページの読み込みに失敗した場合は、ページを更新してください。Dify がまだ初期化中の可能性があります。
-
指示に従って、[管理者アカウントの設定] を行ってください (メールアドレス、ユーザー名、パスワード)。
ステップ 4: AI モデルの追加と設定
この例では Qwen を使用します。
-
Dify にログインします。
-
[ユーザー名] > [設定] をクリックします。
-
[設定] ページで、[モデルプロバイダー] > [Qwen] > [設定] を選択します。
-
Qwen の [設定] ページで、リンクをクリックして Alibaba Cloud Model Studio から API キーを取得します。
-
API キーを貼り付け、[保存] をクリックします。
GPU アクセラレーションを備えた ECS インスタンスでは、Qwen LLM をローカルにデプロイできます。
ステップ 5: ナレッジベースの作成
ナレッジベースにより、Q&A アプリケーションがドメイン固有の質問に正確に回答できるようになります。
前提条件
ナレッジベース用のコーパスファイルを準備します。サポートされる形式:TXT、MARKDOWN、MDX、PDF、HTML、XLSX、XLS、DOCX、CSV、MD、HTM。最大ファイルサイズ:15 MB。
操作手順
-
[ナレッジ] > [ナレッジの作成] > [テキストからインポート] > [ファイルの選択] > [次へ] の順にクリックして、ファイルをアップロードします。
サポートされる形式:TXT、MARKDOWN、MDX、PDF、HTML、XLSX、XLS、DOCX、CSV、MD、HTM。最大ファイルサイズ:15 MB。
-
[次へ] をクリックし、画面の指示に従って [テキストのチャンク化とクリーニング] を行ってください。
デフォルト設定のままにします。ナレッジベースは自動的にドキュメントをチャンク化、クリーニング、インデックス化します。
ナレッジベースとインデックスの確認
ApsaraDB RDS for PostgreSQL でナレッジベースの内容とインデックスを確認します。
-
Dify が使用する ApsaraDB RDS for PostgreSQL インスタンスに接続します。
-
ナレッジベース ID をクエリします。
SELECT * FROM datasets; -
データセット ID からテーブル名を導出します:ハイフン (
-) をアンダースコア (_) に置き換え、プレフィックスembedding_vector_index_とサフィックス_nodを追加します。クエリ例:SELECT * FROM embedding_vector_index_6b169753_****_****_be66_9bddc44a4848_nod; -
ナレッジベースのインデックスを確認します。
Dify はデフォルトで HNSW インデックスを作成し、pgvector の類似性検索を高速化します。検索クエリは次のようになります:
SELECT meta, text, embedding <=> $1 AS distance FROM embedding_vector_index_6b169753_****_****_be66_9bddc44a4848_nod ORDER BY distance LIMIT $2;インデックスパラメータが再現率の要件を満たしていることを確認します。
m、ef_construction、再現率の関係については、pgvector パフォーマンステスト (HNSW インデックスベース) に記載されています。SELECT * FROM pg_indexes WHERE tablename = 'embedding_vector_index_6b169753_****_****_be66_9bddc44a4848_nod';インデックスが存在しない場合、またはデフォルトパラメータが再現率の要件を満たさない場合は、手動で作成します。
-
(オプション) 既存のインデックスを削除します。
DROP INDEX IF EXISTS embedding_vector_index_6b169753_****_****_be66_9bddc44a4848_nod; -
インデックスを作成します。
CREATE INDEX ON embedding_vector_index_6b169753_****_****_be66_9bddc44a4848_nod USING hnsw (embedding vector_cosine_ops) WITH (m = '16', ef_construction = '100');
説明embedding_vector_index_6b169753_****_****_be66_9bddc44a4848_nodは例です。実際のテーブル名に置き換えてください。 -
ステップ 6: インテリジェント Q&A アプリケーションの作成
この例では、Question Classifier + Knowledge + Chatbot テンプレートを使用します。
-
[スタジオ] > [テンプレートから作成] をクリックします。
-
「質問クラシファイア + ナレッジ + チャットボット」テンプレートを見つけ、[このテンプレートを使用] をクリックします。
-
アプリケーション名とアイコンを設定して、[作成]をクリックします。
-
[Studio] ページで、新規アプリケーションのカードをクリックしてアプリケーションオーケストレーションページを開きます。
-
アプリケーションワークフローを設定します:Answer モジュールを削除し、ナレッジ検索モジュールを 1 つだけ残し、Question Classifier と LLM モジュールの AI モデルを Qwen に変更します。
Qwen モデルを設定する際、Top P 値を 1 未満に設定します。
[qwen-vl-max-0809] モデルを選択した後、モデル名の横にある設定アイコンをクリックしてパラメータ設定パネルを開き、[Top P] を
0.8に設定します。 -
Question Classifier モジュールを編集して、質問カテゴリを定義します。PostgreSQL ナレッジベースの場合:
-
PostgreSQL 関連の質問:ナレッジベースと Qwen にルーティングして、要約された回答を得ます。
-
その他の質問:Qwen に直接ルーティングします。
-
-
ナレッジ検索モジュールに PostgreSQL ナレッジベースを追加します。
[ナレッジ検索] ノードで、[クエリ変数] を
sys.queryに設定し、[ナレッジベース] に [pg] を選択し、検索モードを [高品質・ベクトル検索] に設定します。 -
[プレビュー] をクリックしてアプリケーションをテストし、次に [公開] をクリックしてデプロイします。