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

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

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

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

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

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

LlamaIndex コンポーネント

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

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

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

ベクトルストア

この 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 インデックス ストアをご覧ください。

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

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

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

チャット ストア

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

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

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

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

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

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

ドキュメント リーダー

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

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

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

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

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

次のステップ