OceanBaseのベクトル検索技術を活用して、あなた専用のOceanBaseドキュメントインテリジェントアシスタントを構築しましょう。
説明
このチュートリアルは、OB Cloudコンソールでもインタラクティブチュートリアルとして公開されています。実際のOB Cloud環境で操作しながら体験することも可能です。OB Cloudコンソールにログインし、左側のナビゲーションバーから実践チュートリアルをクリックすると、公開されているすべてのインタラクティブチュートリアルをご覧いただけます。
概念の紹介
RAG(Retrieval Augmented Generation):検索拡張生成。RAGは、外部ナレッジベースから事実を検索し、大規模言語モデル(LLM)に最も正確で最新の情報を提供するためのAIフレームワークです。また、ユーザーがLLMの生成プロセスを深く理解できるようにし、インテリジェントQ&Aやナレッジベースなどに応用されています。
LLM(Large Language Model):大規模言語モデル。大量のテキストデータを用いて訓練された深層学習モデルであり、自然言語テキストの生成や言語テキストの意味理解が可能です。大規模言語モデルは、テキスト分類、Q&A、対話など、多様な自然言語タスクを処理でき、AIへの重要なアプローチです。
アーキテクチャ
ドキュメントインテリジェントアシスタントは、ドキュメントをベクトル形式でOceanBaseデータベースに一括保存します。ユーザーはUIインターフェースを通じて質問し、プログラムはBGE-M3モデルを使用して質問内容をベクトルに埋め込み、データベース内で類似ベクトルを検索します。類似ベクトルに対応するドキュメント内容を取得した後、アプリケーションはそれらをユーザーの質問と共にLLMに送信し、LLMは提供されたドキュメントに基づいてより正確な回答を生成します。
前提条件
- ご利用の環境に、利用可能なトランザクション型(MySQL)クラスタインスタンスが存在します。
テナントの作成を参照してテナントの作成を完了した後、以下の手順を実行してください。
ご利用の環境に、使用可能なMySQL互換モードのテナント、MySQLデータベース、およびアカウントが既に存在し、データベースアカウントに読み書き権限が付与されていること。作成が必要な場合は、詳細についてはアカウントの作成およびデータベースの作成(MySQLのみ)に関するドキュメントをご参照ください。
プロジェクト管理者またはインスタンス管理者として、プロジェクト内のインスタンスに対する読み書き操作権限、および
ALTER SYSTEM権限を保有していること。権限がない場合は、組織管理者に連絡して権限の追加を依頼してください。Python 3.11以降のバージョンおよび対応するpipをインストールしていること。マシン上のPythonバージョンが古い場合は、Minicondaを使用して新しいPython 3.9以降の環境を作成できます。詳細についてはMinicondaインストールガイドをご参照ください。
Poetryをインストールしてください。コマンドを参照してください:
python3 -m pip install poetryマシン上のコードが最新の状態であることを確認してください。
ai-workshop-2024リポジトリディレクトリに移動してgit pullを実行することを推奨します。インスタンスのワークベンチで
ob_vector_memory_limit_percentageパラメータを設定し、ベクトル検索機能を有効にしていることを確認してください。推奨設定値は30です。このパラメータをより正確に設定する必要がある場合は、ob_vector_memory_limit_percentageに関するドキュメントを参照してこの値を計算してください。
ステップ1:データベース接続情報を取得する
ドロップダウンリストから、ID でクラスタインスタンスを選択します。
**インスタンスワークベンチ**ページに移動します。
接続をクリックし、**接続文字列を取得**を選択します。
ポップアップウィンドウで、**パブリックネットワークを使用する**を選択します。
アクセスアドレスを取得し、**現在のブラウザのIPアドレスを追加**を選択します。
データベース関連情報を入力し、**接続文字列をコピー**します。
ステップ2:LLMプラットフォームアカウントの登録
Alibaba Cloud Model Studioアカウントに登録し、モデルサービスを有効化してAPIキーを取得します。
注意
Alibaba Cloud Model Studioの大規模言語モデルサービスを有効化するには、第三者プラットフォームに移動して手続きを完了する必要があります。この操作は第三者プラットフォームの料金規則に従い、該当する料金が発生する場合があります。続行する前に、その公式ウェブサイトにアクセスするか、関連ドキュメントを確認し、料金体系を確認して同意してください。同意しない場合は、操作を続けないでください。
注意
このチュートリアルでは、Qwen LLMを例にQ&Aボットの構築方法を紹介しますが、他のLLMを使用して構築することもできます。他のLLMを使用する場合は、.envファイル内のAPI_KEY、LLM_BASE_URL、LLM_MODELを更新する必要があります。
ステップ3:AIアシスタントを構築する
コードリポジトリのクローン
git clone https://gitee.com/oceanbase-devhub/ai-workshop-2024
cd ai-workshop-2024
依存関係のインストール
poetry install
環境変数の設定
cp .env.example .env
# Qwenが提供するLLM機能を使用する場合は、API_KEYとOPENAI_EMBEDDING_API_KEYをAlibaba Cloud Bailianコンソールから取得したAPI_KEY値に更新し、DB_で始まる変数をご自身のデータベース接続情報に更新してファイルを保存してください。
vi .env
データベースへの接続
データベース関連の環境変数の設定が正しく行われているか確認するため、用意されたスクリプトを使用してデータベースへの接続を試すことができます。
bash utils/connect_db.sh
# MySQL接続に無事入ることができれば、環境変数の設定が成功したことを検証できます。
ドキュメントコーパスの準備
このステップでは、OceanBase関連コンポーネントのオープンソースドキュメントリポジトリをクローンし、処理してドキュメントのベクトルデータやその他の構造化データを生成した後、OceanBaseデータベースにデータを挿入します。
ドキュメントリポジトリのクローンと処理
注意
このステップでは、大量のOceanBaseドキュメントをダウンロードおよび処理するため、時間がかかります。
git clone --single-branch --branch V4.3.3 https://github.com/oceanbase/oceanbase-doc.git doc_repos/oceanbase-doc # GitHubリポジトリへのアクセスが遅い場合は、以下のコマンドを使用してGiteeのミラーコピーをクローンできます。 git clone --single-branch --branch V4.3.4 https://gitee.com/oceanbase-devhub/oceanbase-doc.git doc_repos/oceanbase-docドキュメント形式の標準化
OceanBaseのオープンソースドキュメントには、一部のファイルで
====と----が1次見出しと2次見出しを表すために使用されています。このステップでは、これらを標準の#と##に変換します。# タイトルを標準的なMarkdown形式に変換する poetry run python convert_headings.py \ doc_repos/oceanbase-doc/zh-CN \ドキュメントをベクトルに変換してOceanBaseデータベースに挿入する
embed_docs.pyスクリプトを提供しています。ドキュメントディレクトリと対応するコンポーネントを指定すると、このスクリプトはディレクトリ内のすべてのMarkdown形式のドキュメントを走査し、長文ドキュメントをスライシングした後、埋め込みモデルを使用してベクトルに変換します。最終的に、ドキュメントのスライス内容、埋め込まれたベクトル、およびスライスのメタ情報(JSON形式で、ドキュメントのタイトル、相対パス、コンポーネント名、スライスのタイトル、カスケードタイトルを含む)を一緒にOceanBaseの同一テーブルに挿入し、検索用の予備データとして保存します。時間を節約するため、OceanBaseの多数のドキュメントのうち、ベクトル検索に関連する数件のドキュメントのみを処理します。第6ステップでチャットインターフェースを開いた後、OceanBaseのベクトル検索機能に関する質問に対して、より正確な回答が得られます。
# ドキュメントのベクトルとメタデータを生成する poetry run python embed_docs.py --doc_base doc_repos/oceanbase-doc/zh-CN/640.ob-vector-search
UIチャットインターフェースの起動
以下のコマンドを実行してチャットインターフェースを起動します:
poetry run streamlit run --server.runOnSave false chat_ui.py
端末に表示されたURLにアクセスして、チャットボットアプリケーションのインターフェースを開きます。
You can now view your Streamlit app in your browser.
Local URL: http://localhost:8501
Network URL: http://172.xxx.xxx.xxx:8501
External URL: http://xxx.xxx.xxx.xxx:8501 # これはブラウザからアクセスできるURLです
アプリケーションの表示
注意
このアプリケーションはOceanBaseドキュメントコーパスに基づいて構築されています。OceanBaseに関する質問は、アシスタントにお聞きください。