※このブログは2024年8月18日に公開された英語ブログ「Dify.AI x TiDB: Build Scalable AI Agent with Knowledge Base」の拙訳です。
はじめに
AIエージェントの構築は複雑になりがちですが、適切なツールを使えばその必要はありません。TiDB Serverlessの新しい機能であるベクトル検索は、現在パブリックベータ版としてユーザーを受け入れており、Difyの直感的なローコードプラットフォームと組み合わせることで、スケーラブルで効率的なAIソリューションの作成を簡素化できます。本ガイドは、TiDBとDifyをシームレスに統合し、AIエージェントに堅牢なベクトル検索機能を活用するための明確な道筋を提供します。
なぜ重要なのか
- 開発の高速化:従来のコーディングの複雑さを回避し、スピードとシンプルさを追求したツールでAIエージェントの作成を高速化します。
- 最適化された検索:TiDB Serverlessのベクトル検索を活用することで、迅速かつ正確な情報検索が可能になり、AIの応答性と関連性が大幅に向上します。
- ニーズに合わせたスケーラビリティ:TiDBの柔軟なアーキテクチャにより、変動するデータ量や計算需要に容易に対応できます。
本ブログから得られるもの
- 簡単なセットアップ:TiDB Serverlessクラスタを迅速に構築する方法を紹介します。
- シームレスなデプロイメント:Docker Composeを使ってDifyをデプロイする手順を説明します。
- ナレッジベースの習得:効果的なナレッジベースの構築と管理の技術を習得します。
- AIエージェントの革新:Difyの合理化されたツールセットを使用して、AIエージェントの可能性を引き出します。
事前準備
TiDB Serverlessクラスタの作成
まず、以下の手順でTiDB Serverlessクラスタを作成しましょう:
- TiDB Cloudコンソールにログインします。
- Create Clusterページで、新しいクラスタを設定します:
Serverless
タイプのクラスタを選択します。- アプリケーションがデプロイされている場所に最も近いリージョンを選択してください。例:
Tokyo (ap-northest-1)
- クラスタ名を入力してください。
- 「Create」ボタンをクリックしてクラスタの作成を完了します。
クラスタ作成後、データベーススキーマを作成し、TiDB CloudのSQL Editor上で以下のSQL文を実行します:
CREATE SCHEMA dify;
最後に、クラスタのOverviewページの右上にある「Connect」ボタンをクリックして、データベースの接続パラメータを取得し、後続の手順で使用するために保存します。
Docker Composeを使用してDifyをデプロイする
個人がDifyを使用したい場合は、2つの導入方法があります。クラウドサービスとセルフホストのコミュニティ版です。
もしTiDB Serverlessをベクトルデータベースとして使いたいのであれば、コミュニティのセルフホストのオープンソース版を使うことになります。しかし、TiDBチームはDifyチームと緊密に連携し、協力の可能性を検討しています。
DifyのデプロイにはDocker Composeを使用することをお勧めします。具体的な操作手順はこちらをご参照ください。以下は簡単な手順です:
まず、Difyのオープンソースリポジトリをローカルにクローンします:
git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .env
vi .env
TiDB ServerlessをDifyのベクトルデータベースとして利用するには、次のように.envファイル内の環境変数を変更する必要があります:
# Will VECTOR_STORE change into tidb_vector, the default value is weaviate
VECTOR_STORE: tidb_vector
# Modify the following environment variables to the previously saved connection TiDB parameter
TIDB_VECTOR_HOST: gateway01.***.prod.aws.tidbcloud.com
TIDB_VECTOR_PORT: 4000
TIDB_VECTOR_USER: ********.root
TIDB_VECTOR_PASSWORD: ********
TIDB_VECTOR_DATABASE: dify
変更が完了したら、次の起動コマンドを実行します。
docker compose up -d
デプロイが成功すると、ブラウザで http://localhost を入力してDifyにアクセスできます。
TiDBを利用してナレッジベースを構築する
上記の準備作業で、TiDB Serverlessの設定を行いました。では、どのようにDifyを使用してドキュメントをアップロードし、ベクトルデータベースに入力するのでしょうか。そして、EmbeddingモデルとRerankerモデルをどのように利用するのでしょうか。
モデルプロバイダーの構成
まず、Difyの 「設定 ->モデルプロバイダー」で、新しいモデルを追加してToken認可の設定を行います。例えば、OpenAIを対話モデルとEmbeddingモデルとして使用し、CohereをRerankerモデルとして使用します。
ドキュメントのアップロード
その後、http://localhost/datasets/create にアクセスします。新しい空のナレッジベースを作成し、ドキュメントをナレッジベースにアップロードします。
Difyは、自動的にアップロードされたドキュメントのベクトルインデックスを構築し、TiDB Serverlessベクトルストレージに保存するのをサポートします。
検索モデルの構成
ドキュメントがアップロードされた後、ナレッジベースの設定ページでEmbeddingモデルとReranker モデルを追加で設定できます。
ナレッジベースの構成ページでは、Difyがナレッジベースに3つの検索モードを提供していることがわかります。
- ベクトル検索:ANNクエリに基づく検索であり、Rerankerモデルはオプションです。
- 全文検索:BM25に基づく検索であり、Rerankerモデルはオプションです (現在、TiDB ServerlessのVector型のデータソースはサポートしていません)。
- ハイブリッド検索 (ベクトル + 全文):ANN+BM25に基づく検索であり、Rerankerモデルは必須です。
ベクトル検索機能の実装に関しては、Difyはこの時点でTiDB Serverlessのベクトル検索インデックス機能をデフォルトで有効にしており、数十万のドキュメントに対してミリ秒単位での検索を実現しています。
DifyのチャットフローでAIチャットボットを作成する
ナレッジベースの設定を完了し、ドキュメントをアップロードした後、AIチャットボットの作成を開始できます。
「スタジオ」で空のアプリケーションを作成することを選択し、「Chatbot」タイプと「Chatflow」メソッドを選択し、ボットのアイコン、名前、説明情報を設定します。:
チャットボットのChatflowデザインページに入ると、Difyが基本的なチャットワークフローを初期化してくれていることがわかります。
「Start」ノードと「LLM」ノードの間にある「+」ボタンをクリックして「Knowledge Retrieval (知識取得)」ノードを追加し、そのノードの「KNOWLEDGE (ナレッジ)」オプションに先ほど作成したナレッジベースを追加します。
「LLM」ノードをクリックし、「Context (コンテキスト)」オプションを「Knowledge Retrieval (知識取得)」の実行結果 (result配列) に設定します。そして、「SYSTEM」のプロンプトワードを作成し、「Context」変数を挿入し、以下の応答要件を追加します。
Consider contextual information and answer questions without relying on prior knowledge.
右上隅の「Debug and Preview (デバッグとプレビュー)」ボタンをクリックすると、プレビューダイアログボックスが開きます。プレビューダイアログボックス内で、質問を通じてAIに先ほど作成した最新のChatflowを実行させ、回答を得ることができます。
上記の操作を行うことで、DIfyを使用して、ナレッジベースに基づいて質問に回答できるチャットアシスタントを作成することができました。
他のプラットフォームやウェブサイトで使用したい場合は、右上隅にある「Publish (公開する)」ボタンをクリックします。Difyは、 <script>タグまたは<iframe>タグ、およびAPIインターフェース呼び出し経由で、チャットボットをあなたのサイトに統合することをサポートしています。
TiDBのベクトル検索を選択する理由?
- ダイナミックな拡張性:TiDBは、アプリケーション開発者がAIアプリケーションにおける動的で予測不可能なデータ成長の需要に簡単に対応できるよう、柔軟なスケーラビリティを提供しています。
- 統合データベース:TiDBはハイブリッドトランザクション/分析処理 (HTAP) のサポートに加えて、ベクトルストレージとしても使用できるようになり、生成AIアプリケーションにおける文書ストレージ、グラフデータストレージ、会話メッセージストレージなど、複雑かつ多様なデータストレージとクエリ要件を満たすことができます。
- SQLの互換性:開発者は馴染みのあるSQLコマンドラインターミナル、アプリケーションドライバー、GUI ツールを使用して、ベクトルデータを管理し、セマンティック検索クエリを実行することができます。
Difyを選ぶ理由
- ローコードで高効率:Difyは、視覚的なワークフローオーケストレーションシステムを提供し、ユーザーがアイデアを迅速に実現し、カスタマイズされたAIワークフローを構築できるよう支援しています。
- 強力なエコシステムですぐに使用可能:Difyは多くのモデルプロバイダー、データソース、ツールを統合しており、ユーザーは簡単な設定だけでさまざまなサードパーティプラットフォームの連携を完了できます。
- 使いやすく連携と共同創造が可能:Difyの登場により、ユーザーがエンタープライズレベルのAIアプリケーションを構築する敷居が下がり、エージェントの構築からAIワークフローオーケストレーション、RAG、モデル管理などに至る機能が企業に提供され、生成AIネイティブアプリケーションを簡単に構築して運用できるようになります。
- オープンソース採用でモデルの中立性を確立:Difyは、モデルの中立性とオープンソースエコシステムの重要性を強調し、企業がマルチモーダルおよびマルチモデルアプリケーションを展開する際に直面するコスト、セキュリティ、オブザーバビリティの課題の解決に注力しています。
様々なシナリオの紹介
pingcap/tidb-vector-pythonを使用して、TiDB Vectorとさまざまなシナリオでやりとりする方法を示す例がいくつかあります。
- OpenAI Embedding:OpenAIの組み込みモデルを使ってテキストデータのベクトルを生成し、TiDB Vectorに格納し、類似テキストを検索します。
- Image Search:OpenAI CLIPモデルを使用して、画像とテキストのベクトルを生成し、TiDB Vectorに保存し、類似画像を検索します。
- LlamaIndex RAG with UI:LlamaIndexを使ってRAG (Retrieval-Augmented Generation) アプリケーションを構築します。
- Chat with URL:LlamaIndexを使って、URLでチャットができるRAG (Retrieval-Augmented Generation) アプリケーションを構築します。
- GraphRAG:TiDB Serverlessを使ってナレッジグラフベースのRAGアプリケーションを構築する20行のコードです。
- GraphRAG Step by Step Tutorial:Colabノートブックを使ってナレッジグラフベースのRAGアプリケーションを構築するステップバイステップのチュートリアルです。このチュートリアルでは、テキストコーパスからナレッジを抽出し、ナレッジグラフを構築し、ナレッジグラフをTiDB Serverlessに保存し、ナレッジグラフから検索する方法を学びます。
- Vector Search Notebook with SQLAlchemy:SQLAlchemy を使ってTiDB Serverlessとやりとりします。DBに接続し、インデックスとデータを保存し、ベクトルを検索します。
- Build RAG with Jina AI Embeddings:Jina AIを使ってテキストデータの埋め込みデータを生成し、埋め込みデータをTiDBベクトルストレージに保存し、類似の埋め込みデータを検索します。
- Semantic Cache:Jina AIとTiDB Vectorでセマンティックキャッシュを構築します。
参考
TiDB Cloud Dedicated
TiDB Cloudのエンタープライズ版。
専用VPC上に構築された専有DBaaSでAWSとGoogle Cloudで利用可能。
TiDB Cloud Serverless
TiDB Cloudのライト版。
TiDBの機能をフルマネージド環境で使用でき無料かつお客様の裁量で利用開始。