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

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

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

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

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

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

LlamaIndex コンポーネント

Cloud SQL for PostgreSQL には、次の LlamaIndex インターフェースがあります。

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

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

ベクトルストア

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

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

Cloud SQL for PostgreSQL でベクトルストアを使用するには、PostgresVectorStore クラスを使用します。詳細については、LlamaIndex ベクトルストアをご覧ください。

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

ベクトルストア用の Cloud SQL for PostgreSQL では、次のことを行う方法について説明します。

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

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

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

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

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

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

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

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

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

チャット ストア

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

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

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

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

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

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

ドキュメント リーダー

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

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

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

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

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

次のステップ