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

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

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

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

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

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

LlamaIndex コンポーネント

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

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

AlloyDB Omni のクイックスタートで、LlamaIndex の使用方法を学習する。

ベクトルストア

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

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

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

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

ベクトルストアに関する AlloyDB Omni ノートブックでは、次のことを行う方法について説明します。

  • AlloyDBEngine.from_connection_string() を使用して AlloyDB Omni インスタンスに接続する AlloyDBEngine を作成します。
  • ベクトル エンベディングを保存するテーブルを初期化します。
  • 任意の Llama Index エンベディング モデルを使用して、エンベディング クラス インスタンスを作成します。
  • デフォルトの AlloyDBVectorStore ベクトルストアを初期化します。
  • VectorStoreIndex を使用して、ベクトルストアからインデックスを作成してクエリを実行します。
  • カスタム ベクトルストアを作成して、メタデータを保存およびフィルタリングします。
  • ANN インデックスを追加して検索レイテンシを改善する。

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

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

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

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

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

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

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

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

チャット ストア

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

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

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

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

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

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

ドキュメント リーダー

Document Reader は、AlloyDB Omni からデータを効率的に取得し、LlamaIndex 互換の形式に変換してインデックスに登録します。Document Reader インターフェースには、ソースから Documents としてデータを読み込むメソッドが用意されています。

Document は、テキストと関連するメタデータを保存するクラスです。Document Reader を使用すると、Document Store に保存するドキュメントや、インデックスの作成に使用するドキュメントを読み込むことができます。

詳細については、LlamaIndex Document Reader をご覧ください。

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

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

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

次のステップ