LlamaIndex を使用して LLM を活用したアプリケーションを構築する

このページでは、AlloyDB for PostgreSQL と統合された LlamaIndex を使用して LLM を活用したアプリケーションを構築するユースケースについて説明します。アプローチの検討やアプリケーションの開発に役立つように、GitHub のノートブックへのリンクが用意されています。

LlamaIndex は、データソースを大規模言語モデル(LLM)に接続して統合できる生成 AI オーケストレーション フレームワークです。LlamaIndex を使用すると、自然言語クエリを使用して限定公開データまたはドメイン固有のデータにアクセスしてクエリを実行するアプリケーションを構築できます。

LlamaIndex は、カスタムデータと LLM の間のブリッジとして機能し、検索拡張生成(RAG)機能を使用してナレッジ アシスタント アプリケーションを開発することを容易にします。

LlamaIndex は、構造化ドキュメント管理を重視しているため、インデックス作成と取得を簡素化し、ドキュメント中心のアプリケーションに適しています。このフレームワークには、情報アクセスの速度と関連性を高める最適化されたクエリ メカニズムと、詳細なフィルタリングを可能にする堅牢なメタデータ処理が組み込まれています。

LlamaIndex フレームワークの詳細については、LlamaIndex プロダクトのドキュメントをご覧ください。

LlamaIndex コンポーネント

AlloyDB には、次のような LlamaIndex インターフェースがあります。

  • ベクトルストア
  • ドキュメント ストア
  • インデックス ストア
  • チャットストア
  • ドキュメント リーダー

LlamaIndex の使用方法については、AlloyDB Omni のクイックスタートをご覧ください。

ベクトルストア

この LlamaIndex との統合により、AlloyDB の堅牢でスケーラブルな性質を利用して LlamaIndex データを保存、管理できます。LlamaIndex のインデックス作成機能とクエリ機能に、AlloyDB の高パフォーマンスと信頼性を組み合わせることで、より効率的でスケーラブルな LLM 活用型アプリケーションを構築できます。

LlamaIndex は、ドキュメント(ドキュメント、テキスト、PDF)をノードと呼ばれるドキュメント コンポーネントに分割します。VectorStore に格納できるのは、取り込まれたノード コンテンツのエンベディング ベクトルとノードのテキストのみです。ノードはファースト クラス コンセプトであり、テキスト コンテンツ、ベクトル エンベディング、メタデータが含まれます。これらのメタデータ フィールドにフィルタを適用すると、指定したメタデータ条件に一致するノードの取得を制限できます。

AlloyDB でベクトルストアを扱うには、AlloyDBVectorStore クラスを使用します。詳細については、LlamaIndex ベクトルストアをご覧ください。

AlloyDBVectorStore クラスを使用してベクトル エンベディングを保存する

ベクトルストア用の AlloyDB ノートブックでは、次の方法について説明します。

  • ベクトル エンベディングを格納するテーブルを初期化する
  • 任意の Llama Index エンベディング モデルを使用して、エンベディング クラス インスタンスを作成する。
  • デフォルトの AlloyDBVectorStore ベクトルストアを初期化する。
  • VectorStoreIndex を使用して、ベクトルストアからインデックスを作成し、クエリを実行する。
  • カスタム ベクトルストアを作成して、メタデータを効果的に保存、フィルタする。
  • ANN インデックスを追加して検索レイテンシを改善する。

ドキュメント ストアとインデックス ストア

LlamaIndex ドキュメント ストアとのインテグレーションにより、構造化ドキュメントの保存と取得を管理し、LlamaIndex のドキュメント中心の機能を最適化します。ドキュメント ストアは、ベクトルに関連するコンテンツをベクトルストアに保存します。

詳細については、LlamaIndex ドキュメント ストアのプロダクト ドキュメントをご覧ください。

インデックス ストアは、インデックスの管理を容易にし、サマリー、キーワード、ツリー インデックスなどのクエリとデータの取得を迅速に行うことができます。LlamaIndex の Index は、ノード メタデータ専用の軽量ストレージです。ノードのメタデータを更新する場合、ドキュメント内のノード全体またはすべてのノードの再インデックス化(読み取りエンベディングの生成)は必要ありません。

詳細については、LlamaIndex インデックス ストアをご覧ください。

ドキュメントとインデックスを保存する

ドキュメント ストア用の AlloyDB ノートブックでは、AlloyDB を使用して AlloyDBDocumentStore クラスと AlloyDBIndexStore クラスを使用しドキュメントとインデックスを保存する方法について説明します。次の操作の実行方法について学びます。

  • AlloyDBEngine.from_instance() を使用して AlloyDBEngine を作成する。
  • DocumentStore と IndexStore のテーブルを作成する。
  • デフォルトの AlloyDBDocumentStore を初期化する。
  • AlloyDBIndexStore を設定する。
  • Docstore にドキュメントを追加する。
  • 複数のインデックスでドキュメント ストアを使用する。
  • 既存のインデックスを読み込む。

チャットストア

チャットストアは、チャットベースのアプリケーションの会話履歴とコンテキストを保持し、パーソナライズされたインタラクションを可能にします。チャットストアは、会話内のチャット メッセージを保存して取得する中央リポジトリを提供します。これにより、LLM はコンテキストを維持し、進行中の会話に基づいてより関連性の高いレスポンスを提供できます。

大規模言語モデルはデフォルトでステートレスです。つまり、入力が毎回明示的に指定されない限り、以前の入力は保持されません。チャットストアを使用すると、会話のコンテキストを保持できるため、モデルは時間の経過とともにより関連性の高い一貫したレスポンスを生成できます。

LlamaIndex のメモリ モジュールにより、会話コンテキストを効率的に保存および取得できるため、チャット アプリケーションでよりパーソナライズされたコンテキスト対応のインタラクションを実現できます。LlamaIndex のメモリ モジュールは、ChatStoreChatMemoryBuffer と統合できます。
詳細については、LlamaIndex チャットストアをご覧ください。

チャットの履歴を保存する

チャットストア用の AlloyDB ノートブックでは、AlloyDB for PostgreSQLAlloyDBChatStore クラスを使用してチャット履歴を保存する方法について説明します。次の操作の実行方法について学びます。

  • AlloyDBEngine.from_instance() を使用して AlloyDBEngine を作成する。
  • デフォルトの AlloyDBChatStore を初期化する。
  • ChatMemoryBuffer を作成する。
  • LLM クラス インスタンスを作成する。
  • ストレージ コンテキストなしで AlloyDBChatStore を使用する。
  • ストレージ コンテキストで AlloyDBChatStore を使用する。
  • Chat Engine を作成して使用する。

ドキュメント リーダー

ドキュメント リーダーは、AlloyDB からデータを効率的に取得し、LlamaIndex 互換の形式に変換してインデックスに登録します。ドキュメント リーダーのインターフェースには、ソースから Documents としてデータを読み込むメソッドが用意されています。Document は、テキストと関連するメタデータを保存するクラスです。ドキュメント リーダーを使用すると、ドキュメント ストアに保存するドキュメントや、インデックスの作成に使用するドキュメントを読み込むことができます。

詳細については、LlamaIndex ドキュメント リーダーをご覧ください。

データをドキュメントとして取得する

ドキュメント リーダー用の AlloyDB ノートブックでは、AlloyDB を使用して AlloyDBReader クラスを使用し、データをドキュメントとして取得する方法について説明します。次の操作の実行方法について学びます。

  • AlloyDBEngine.from_instance() を使用して AlloyDBEngine を作成する。
  • AlloyDBReader を作成する。
  • table_name 引数を使用してドキュメントを読み込む。
  • SQL クエリを使用してドキュメントを読み込む。
  • ページ コンテンツの形式を設定する。
  • ドキュメントを読み込む。

次のステップ