このトピックでは、検索拡張生成 (RAG) サービスをデプロイする際に RDS for PostgreSQL インスタンスを使用する方法について説明します。また、RAG チャットボットの基本機能と RDS for PostgreSQL 固有の機能についても解説します。
背景情報
EAS
Elastic Algorithm Service (EAS) は、PAI のモデルオンラインサービスプラットフォームであり、モデルをオンライン推論サービスや AI 搭載の Web アプリとしてデプロイすることをサポートします。EAS は、Auto Scaling やブルーグリーンデプロイメントなどの機能を提供し、低リソースコストで高同時実行数の安定したオンラインサービスを実現します。EAS はまた、リソースグループ管理、バージョン管理、および包括的な運用保守・モニタリングシステムも提供します。詳細については、「EAS の概要」をご参照ください。
RAG
大規模言語モデル (LLM) は目覚ましい成功を収めていますが、その広範な応用により、いくつかの固有の制限が明らかになっています:
限定的なドメイン知識:LLM は通常、大規模で汎用的なデータセットでトレーニングされており、専門的な垂直ドメインに対して詳細で的を絞った処理を行うことが困難です。
古い情報:訓練データセットが静的であるため、LLM は最新の情報や知識をリアルタイムでアクセスして学習することができません。
誤解を招く出力:データのバイアスやモデル固有の欠陥により、LLM はもっともらしく見えても事実とは異なる出力を生成することがあります。この現象は「モデルのハルシネーション」として知られています。
検索拡張生成 (RAG) は、これらの課題に対処し、大規模モデルの精度を向上させるために開発されました。外部のナレッジベースを統合することで、RAG はモデルの作り話を大幅に削減し、モデルが最新の知識にアクセスして適用する能力を向上させ、よりパーソナライズされた正確な LLM のカスタマイズを可能にします。
RDS for PostgreSQL の概要
Alibaba Cloud の Relational Database Service (RDS) は、PostgreSQL エンジンをサポートしています。PostgreSQL の主な利点は、SQL 標準の完全な実装と、JSON、IP、地理空間データなど、多種多様なデータ型をサポートしていることです。トランザクション、サブクエリ、多版型同時実行制御 (MVCC)、データ整合性などの機能を完全にサポートすることに加えて、RDS for PostgreSQL は高可用性やバックアップと復元などの重要な機能も統合しています。この統合により、運用保守のワークロードが削減されます。RDS for PostgreSQL の高度な機能の詳細については、「RDS for PostgreSQL」をご参照ください。
ワークフロー
EAS は、柔軟なパラメーター設定を備えた包括的な RAG ソリューションを提供します。WebUI または API 呼び出しを通じて RAG サービスを使用することで、独自の対話システムをカスタマイズできます。RAG のコアアーキテクチャは、取得と生成で構成されています:
取得:EAS は、オープンソースの Faiss、Elasticsearch、Hologres、OpenSearch、RDS for PostgreSQL など、複数のベクトルデータベースをサポートしています。
生成:EAS は、Qwen、Llama、Mistral、Baichuan などの豊富なオープンソースモデル、および ChatGPT の API 呼び出しをサポートしています。
このソリューションでは、RDS for PostgreSQL を例として、EAS と RDS for PostgreSQL を使用して LLM ベースの RAG チャットボットを構築する方法を説明します。プロセスは次のとおりです:
-
RDS for PostgreSQL ベクトルデータベースの準備
まず、RDS for PostgreSQL インスタンスを作成し、RAG サービスをデプロイする際にインスタンスを関連付けるために必要な設定項目を準備します。
-
RAG サービスのデプロイと RDS for PostgreSQL インスタンスの関連付け
EAS プラットフォームに RAG サービスをデプロイし、RDS for PostgreSQL インスタンスを関連付けます。
-
RAG チャットボットでは、RDS for PostgreSQL に接続し、自社のナレッジベースファイルをアップロードして、ナレッジベースの Q&A を実行できます。
前提条件
VPC、vSwitch、およびセキュリティグループが作成済みであること。詳細については、「IPv4 CIDR ブロックを持つ VPC の作成」および「セキュリティグループの作成」をご参照ください。
注意事項
このソリューションは、サーバーリソースのサイズと LLM サービスのデフォルトのトークン制限によって制約され、会話の長さに制限があります。その目的は、rag ベースの llm チャットボットの基本的な取得機能を体験していただくことです。
RDS for PostgreSQL ベクトルデータベースの準備
ステップ 1:RDS for PostgreSQL インスタンスとデータベースの作成
-
RDS for PostgreSQL インスタンスを作成します。
-
ApsaraDB RDS インスタンス作成ページに移動します。
-
購入ページで、次の主要なパラメーターを設定します。その他のパラメーターの詳細については、「RDS for PostgreSQL インスタンスの作成」をご参照ください。
-
エンジン:PostgreSQL を選択します。
-
VPC:作成した VPC を選択します。
-
特権アカウント:[詳細設定] セクションで [今すぐ設定] を選択し、データベースアカウントとパスワードを設定します。
-
-
画面の指示に従って、支払いを完了し、アクティベーションを行います。
-
-
データベースを作成します。
-
作成したインスタンスの名前をクリックします。左側のナビゲーションウィンドウで [データベース管理] をクリックし、次に [データベースの作成] をクリックします。
-
[データベースの作成] パネルで、[データベース (DB) 名] を設定します。[権限付与済みアカウント] で、作成した特権アカウントを選択します。その他のパラメーターの詳細については、「アカウントとデータベースの作成」をご参照ください。
-
パラメーターを設定した後、[作成] をクリックします。
-
ステップ 2:設定項目の準備
-
データベースエンドポイントを取得します。
RDS for PostgreSQL インスタンスのインスタンス詳細ページで、左側のナビゲーションウィンドウから [データベース接続] を選択します。その後、内部エンドポイントとパブリックエンドポイント、およびそれらに対応するポート番号を表示できます。
-
内部エンドポイントを使用する場合:RAG サービスは、データベースインスタンスと同じ VPC 内にある必要があります。
-
パブリックエンドポイントを使用する場合:EAS がパブリックネットワーク経由で RDS for PostgreSQL にアクセスする場合、EAS にはパブリックネットワークアクセスが必要です。PostgreSQL インスタンスが EAS インスタンスからのパブリックリクエストを受信できるようにするには、PostgreSQL インスタンスのパブリックエンドポイントを申請する必要があります。また、関連する Elastic IP Address (EIP) または 0.0.0.0/0 をホワイトリストに追加する必要もあります。手順は次のとおりです:
-
RDS for PostgreSQL インスタンスのパブリックエンドポイントを申請します。詳細については、「パブリックエンドポイントの申請または解放」をご参照ください。
-
EAS のパブリックネットワークアクセスを有効にします。RAG サービスをデプロイする際に使用する VPC に NAT Gateway と EIP をアタッチする必要があります。詳細については、「インターネット NAT ゲートウェイの SNAT 機能を使用してインターネットにアクセスする」をご参照ください。
説明RAG サービスは、RDS for PostgreSQL インスタンスと同じ VPC または異なる VPC を使用できます。
-
RDS for PostgreSQL インスタンスのパブリックアクセスホワイトリストに 0.0.0.0/0 または EIP を追加します。詳細については、「ホワイトリストの設定」をご参照ください。
-
-
-
特権アカウントとパスワードを取得します。
RDS for PostgreSQL インスタンスのインスタンス詳細ページで、左側のナビゲーションウィンドウから [アカウント管理] を選択します。このページで、作成した特権アカウントを表示できます。パスワードはインスタンス作成時に設定しました。パスワードを忘れた場合は、[パスワードのリセット] をクリックして変更できます。
RAG サービスのデプロイと RDS for PostgreSQL インスタンスの関連付け
-
PAI コンソールにログインし、ワークスペースを選択してから [EAS に移動] をクリックします。
Inference Service タブで、Deploy Service をクリックします。Scenario-based Model Deployment セクションで、RAG-based Smart Dialogue Deployment をクリックします。
-
次の主要なパラメーターを設定します。その他のパラメーターの詳細については、「ステップ 1:RAG サービスのデプロイ」をご参照ください。
パラメーター
説明
Basic Information
Version
LLM-Integrated Deployment を選択します。
RAG Version
pai-rag:0.3.4 を選択します。
Model Type
qwen1.5-1.8b を選択します。
Resource Information
Deployment
システムは、選択されたモデルカテゴリに基づいて適切なリソース仕様を自動的に推奨します。別のリソース仕様に切り替えると、モデルサービスが起動に失敗する可能性があります。
Vector Database Settings
Vector Database Type
RDS PostgreSQL を選択します。
Host address
これを RDS for PostgreSQL インスタンスの内部またはパブリックエンドポイントに設定します。
Port
これを RDS for PostgreSQL インスタンスのポート番号 (例:5432) に設定します。
Database
作成したデータベースの名前を入力します。
Table Name
新しいテーブル名または既存のテーブル名を入力します。テーブルが存在する場合、そのスキーマは PAI-RAG の要件を満たす必要があります。たとえば、以前に EAS を使用して RAG サービスをデプロイしたときに自動的に作成されたテーブルの名前を入力できます。
Account
作成した特権アカウントを入力します。
Password
特権アカウントのパスワードを入力します。
OSS Path
現在のリージョンにある既存の OSS ストレージフォルダを選択します。ナレッジベース管理は、OSS パスをマウントすることで実装されます。
VPC
VPC
-
ホストに内部エンドポイントを使用する場合、RAG サービスは RDS for PostgreSQL インスタンスと同じ VPC で設定する必要があります。
-
ホストにパブリックエンドポイントを使用する場合、RAG サービスに VPC を設定する必要があります。VPC がパブリックネットワークアクセスを持っていることを確認してください。詳細については、「インターネット NAT ゲートウェイの SNAT 機能を使用してインターネットにアクセスする」をご参照ください。また、アタッチされた EIP または
0.0.0.0/0を RDS for PostgreSQL インスタンスのパブリックアクセスホワイトリストに追加する必要もあります。詳細については、「ホワイトリストの設定」をご参照ください。
vSwitch
Security Group Name
-
-
パラメーターを設定した後、Deploy をクリックします。
RAG チャットボットの使用
1. ベクトルデータベース設定の確認
RAG 対話システムの基本的な使用方法は次のとおりです。詳細については、「大規模モデル RAG 対話システム (v0.3.x)」をご参照ください。
-
対象の RAG サービスの名前をクリックし、ページの右上隅にある View Web App をクリックします。
-
PostgreSQL ベクトルデータベースの設定が正しいかどうかを確認します。
システムは自動的に `default` ナレッジベースを設定し、RAG サービスのデプロイ時に設定したベクトルデータベース設定を適用します。[ベクトルデータベース設定] セクションで、PostgreSQL の設定が正しいことを確認します。必要に応じて設定項目を変更し、[ナレッジベースの更新] をクリックできます。
2. 自社ナレッジベースファイルのアップロード
[ナレッジベース] タブで、[ファイル管理] タブをクリックしてナレッジベースファイルをアップロードします。
ナレッジベースをアップロードすると、システムは自動的にファイルを PAI-RAG 形式でベクトルデータベースに保存します。既存のファイルと同じ名前のナレッジベースファイルをアップロードすると、Faiss を除くすべてのベクトルデータベースで元のファイルが上書きされます。サポートされているファイルタイプには、.html、.htm、.txt、.pdf、.pptx、.md、Excel (.xlsx または .xls)、.jsonl、.jpeg、.jpg、.png、.csv、および Word (.docx) が含まれます。例:rag_chatbot_test_doc.txt。
3. ナレッジベースの Q&A の実行
[チャット] タブで、ナレッジベースと意図を選択します。より多くのツールを使用するには、[ナレッジベースのクエリ] を選択します。その後、ナレッジベースの Q&A を実行できます。
RDS for PostgreSQL 固有の機能のサポート
-
RDS インスタンスリストに移動し、インスタンスが配置されているリージョンに切り替えて、インスタンス名をクリックしてインスタンス詳細ページに移動します。
-
左側のナビゲーションウィンドウで [データベース管理] を選択します。次に、対象のデータベースの [操作] 列で、[SQL クエリ] をクリックします。
-
データベースアカウントとデータベースパスワードを入力します。これらは、RDS for PostgreSQL インスタンスを作成したときに設定した特権アカウントとパスワードです。次に、[ログイン] をクリックします。
-
ログイン後、データベースインスタンスにインポートされたナレッジベースのリストをクエリできます。左側のデータベースツリーで、testdb データベースの public スキーマを展開します。SQL エディターで、ベクトルストレージテーブルに対して SELECT クエリを実行します。クエリ結果には、id、text、metadata_、node_id などの列が含まれます。metadata_ 列には、ファイルパス、ファイル名、ファイルタイプ、ファイルサイズ、作成日などのメタデータが JSON 形式で保存されます。