LlamaIndexとは

2021年8月21日

共同執筆者

Vanna Winland

AI Advocate & Technology Writer

Erika Russi

Data Scientist, IBM

LlamaIndexは、大規模言語モデル(LLM)アプリケーションを構築するためのオープンソースのデータ・オーケストレーション・フレームワークです。LlamaIndexはPythonとTypeScriptで利用でき、Retrieval-Augmented(RAG)パイプラインを通じて、生成AIユースケースのコンテキスト拡張プロセスを簡素化するツールと機能を活用します。

ニュースレターを表示しているスマホの画面

The DX Leaders

「The DX Leaders」は日本語でお届けするニュースレターです。AI活用のグローバル・トレンドや日本の市場動向を踏まえたDX、生成AIの最新情報を毎月お届けします。

LlamaIndexの仕組み

LlamaIndexを使用すると、ユーザーはデータ統合とコンテキスト拡張を通じて非公開データやカスタム・データをキュレートし、整理できます。

コンテキスト拡張

コンテキスト拡張とは、データが LLMコンテキスト・ウィンドウに表示され、基本的に非公開データまたは外部データでLLMが拡張されることを指します。

広く使用されているオープンソースLLMは、大量の公開データで事前トレーニングされています。これらの大規模なLLMは、多くの現実世界の問題を解決するのに役立ちます。ただし、特定のユースケースに合わせてトレーニングするには、かなりの時間とリソースがかかります。さらに、モデルの内部データは、事前トレーニングされた期間を通じてのみ最新のものになります。モデルによっては、現在のイベントのリアルタイム認識をモデルに反映させるためにコンテキスト拡張が必要になります。

基盤モデルは、ほぼすべてのドメインやタスクに適用できる柔軟で再利用可能なAIモデルであるため、人気が高まっています。IBM Graniteシリーズ に類似した基盤モデルは、キュレートされたデータでトレーニングされますが、モデルが大規模なデータ・セットでトレーニングされるか、事前トレーニング済みの基盤モデルでトレーニングされるかにかかわらず、ドメイン固有のデータの外部ソースでトレーニングする必要がある可能性が高くなります。このプロセスは、LLMを非公開データに接続して、アプリケーションのユース・ケースまたは全体的な目標に合わせて調整するシステム・フレームワークによって促進されます。LLMをカスタム・データ・ソースに接続しやすくするアプリケーション・スタックの部分は、LlamaIndexなどのデータ・フレームワークです。

データ統合

データはさまざまなソースからさまざまな形式で取得されます。LLMが使用できるようにデータを取り込み、変換し、整理するのはデータ・フレームワークの役割です。多くの場合、データはサイロ化され、構造化されていません。これを取得して構造化するには、LlamaIndex などのデータ・フレームワークが、一般に取り込みパイプラインと呼ばれるプロセスを通じてデータを実行する必要があります。

データが取り込まれ、LLMが使用できる形式に変換されると、次のステップでは、情報をインデックス作成用のデータ構造に変換します。一般的な手順は、非構造化データを ベクトル埋め込みに変換することです。このプロセスは、自然言語処理(NLP)用語では「埋め込み作成」と呼ばれますが、データ用語では「インデックス作成」と呼ばれます。1インデックス作成が必要なのは、LLMがベクター・インデックスによって取り込まれたデータを照会および取得できるようにするためです。データは、選択した照会戦略に従ってインデックス化できます。

データ統合により、非公開データをLLMのコンテキスト・ウィンドウまたは「知識ベース」に統合することで、コンテキスト拡張が容易になります。IBMのGranite 3Bおよび8Bモデルのコンテキスト・ウィンドウの長さは最近128,000トークンに拡張されました。2コンテキスト・ウィンドウを大きくすると、モデルは作業メモリーにより多くのテキストを保持できるようになり、拡張された会話、長いコードベース全体で重要な詳細を追跡する能力が向上します。この機能により、LLMチャットボットは短期的にも長期的コンテキストでも一貫した応答を生成できます。

ただし、コンテキスト・ウィンドウを拡張した場合でも、微調整されたモデルではトレーニングと推論の両方でかなりのコストが発生する可能性があります。特定のデータまたは非公開データを使用してモデルを微調整するには、LLMプロンプト用の効率的なデータ取得方法を促進するデータ変換とシステムが必要です。RAG方法論は、長いコンテキストの言語モデリングを促進するための有望な選択肢とみなされています。3

検索拡張生成(RAG)

RAGは、コンテキスト拡張で最もよく知られ使用されている方法の1つです。RAGにより、LLMは専門的な知識ベースを活用できるようになり、質問に対してより正確な回答を提供する能力が向上します。4 一般的な検索拡張プロセスは、次の3つのステップで実行されます。

  1. チャンク化:長いシーケンスの入力はチャンクに分割されます。
  2. 埋め込み:各チャンクは、LLMで処理できる埋め込みにエンコードされます。
  3. 検索:クエリーに基づいて、最も有用な埋め込みチャンクが取得されます。

LlamaIndexなどのデータ・フレームワークは、RAGパターンのすべてのステップに対して包括的なAPI呼び出しを提供することで、データの取り込みと取得のプロセスを効率化します。このプロセスは、ユーザーがデータに対して質問できるようにするクエリー・エンジンの概念によって実現されています。外部データに対して照会し、コンテキスト知識を使用してLLMにプロンプトを出すことで、ドメイン固有のLLMアプリケーションを作成できます。

AI Academy

基盤モデルがAIのパラダイム・シフトとなる理由

新たな収入源の獲得、コスト削減、生産性の向上を実現する、柔軟で再利用可能な新しいAIモデルについて学びます。その後、ガイドブックを使ってさらに理解を深めてください。

LlamaIndexデータ・ワークフロー

LlamaIndexはRAGを使用して、LLMがすでにアクセスできるデータ・プールに外部データを追加および接続します。クエリー・エンジン、チャットボット、エージェントなどのアプリケーションは、RAGテクニックを使用してタスクを完了します。5

LlamaIndexのワークフローはいくつかのステップに分けられます。

  1. データ取り込み(ロード)
  2. インデックス作成と保管
  3. 照会

このワークフローの目的は、LLMが非公開データまたはドメイン固有のデータにアクセスできるように取り込み、構造化できるようにすることです。より関連性の高いデータにアクセスできるようになると、LLMはチャットボットやクエリー・エンジンの構築など、プロンプトに対してより正確に応答できるようになります。

データ取り込み(ロード)

データの取り込みまたは「ロード」は、外部データ・ソースをLLMに接続するための最初のステップです。LlamaIndexでは、データ取り込みとは、アプリケーションが使用するためにデータをロードすることを指します。ほとんどの非公開データまたはカスタム・データは、アプリケーション・プログラミング・インターフェース(API)、PDF、画像、構造化クエリー言語データベース(SQL)などの形式でサイロ化できます。LlamaIndexは、構造化、半構造化、非構造化データセットを含む160を超えるさまざまなデータ形式でロードすることができます。

データ・コネクタ(データ「ローダー」とも呼ばれます)は、ネイティブ・ソースからデータを取得して取り込みます。収集されたデータは、データとメタデータのコレクションに変換されます。これらのコレクションは、LlamaIndexでは「ドキュメント」と呼ばれます。データ・コネクター(LlamaIndexでは「リーダー」と呼ばれます)は、さまざまなデータ形式を取り込んでロードします。LlamaIndexには、各ディレクトリー内のすべてのファイルをMarkdown、PDF、Word文書、PowerPointプレゼンテーション、画像、オーディオ・ファイル、動画などのドキュメントに変換する統合リーダーが搭載されています。6組み込み機能に含まれていない他のデータ形式に対応するために、オープン・ソース・データ・ローダーのレジストリーであるLlamaHubを通じてデータ・コネクターが利用できます。ワークフローのこのステップでは、データにインデックスを形成する知識ベースを構築し、LLMが照会して使用できるようにします。

インデックス作成と保管

データが取り込まれたら、データ・フレームワークはデータをLLMが取得できる構造に変換して整理する必要があります。データ・インデックスは、データをLLMが使用できる表現に構造化します。LlamaIndexは、ベクター・ストア・インデックス、サマリー・インデックス、ナレッジ・グラフ・インデックスなど、アプリケーションの照会戦略を補完するさまざまなインデックス・タイプを提供します。

データがロードされ、インデックスが作成されると、データを保存できます。LlamaIndexは、アーキテクチャー、複雑さ、コストが異なる多くのベクター・ストアをサポートしています。デフォルトでは、LlamaIndexはインデックス化されたすべてのデータをメモリー内にのみ保存します。

ベクトル・ストア・インデックス

ベクトル・ストア・インデックスは、自然言語でのクエリーの処理に優れているため、RAGパターンに従うLLMアプリケーションでよく使用されます。自然言語でのクエリーによる検索精度は、セマンティック検索、つまりキーワードの一致ではなく意味に基づいた検索に依存します。7 セマンティック検索は、入力データをベクトル埋め込みに変換することで有効になります。ベクトル埋め込みは、LLMが処理できるデータのセマンティクスの数値表現です。ベクトル埋め込み間の数学的関係により、LLMはクエリ用語の意味に基づいてデータを取得し、よりコンテキストが豊富な応答を得ることができます。

「VectorStoreIndex」は、データ・コレクションまたは「Document」オブジェクトを受け取り、それをソース・データ(「Document」) の「チャンク」を表すデータの原子単位である「Node」に分割します。データ・コレクションがチャンクに分割されると、各データ・チャンクのベクトル埋め込みが作成されます。統合されたデータは、LLMが紹介できる形式になりました。これらのベクトル・インデックスは、インデックスを再び行う手間を省くために保存できます。データを保存する最も簡単な方法はディスクに保存することですが、LlamaIndexは複数のベクター・データベースおよび埋め込みモデルと統合します。8

埋め込みを検索するには、まずユーザー・クエリーをベクトル埋め込みに変換します。次に、数学的プロセスを使用して、クエリーとの意味的類似性に基づいてすべての埋め込みをランク付けします。

ベクトル・ストア・インデックスは、トップkセマンティック検索を使用して、対応するテキスト・チャンクとして最も類似した埋め込みを返します。LlamaIndexは、効率的な情報検索のための大規模なインデックスの作成と管理を容易にするように設計されています。

照会

ワークフローの最後のステップは、LLMへのプロンプト呼び出しを処理するためのクエリー・エンジンの実装です。照会は、取得、後処理、応答合成という3つの異なるステップで構成されます。検索とは、最も関連性の高いドキュメントが取得され、ベクター・インデックスから返されることです。後処理とは、取得された埋め込みチャンクまたは「ノード」が、再ランク付け、変換、またはフィルタリングによってオプションで再調整されることです。応答合成とは、最も関連性の高いデータとプロンプトが結合され、LLMに送信されて応答が返されることです。

クエリー・エンジン

クエリー・エンジンを使用すると、ユーザーはデータに対して質問することができ、自然言語でのクエリーを受け取り、コンテキストが豊富な応答を返すことができます。9クエリー・エンジンは、1つまたは複数のインデックスとリトリーバーで構成されます。複数のインデックス・タイプを持つデータ・コレクションでは、複数のクエリー・エンジンを同時に使用できます。LlamaIndexは、JSONドキュメントを照会するためのJSONクエリー・エンジンなど、構造化データと半構造化データ用のさまざまなクエリー・エンジンを提供します。

データ・エージェント

データ・エージェントは、LLM駆動型のAIエージェントであり、読み取り機能と書き込み機能の両方を含む、データに対してさまざまなタスクを実行できます。10 LlamaIndexデータ・エージェントは、LLMを活用したナレッジ・ワークであり、次の機能を実行できます。

  • 非構造化、半構造化、構造化など、さまざまなデータタイプに対する自動検索と取得
  • すぐに処理、インデックス作成、キャッシュできる外部サービスへのAPI呼び出し
  • 対話履歴の保管
  • 単純なデータ・タスクと複雑なデータ・タスクの遂行

AIエージェントは、一連のAPIとツールを通じて外部環境と対話できます。LlamaIndexは、OpenAI Functionエージェント(OpenAI Function API上に構築)と ReAct エージェントをサポートしています。データ・エージェントのコア・コンポーネントは、「推論ループ」またはエージェントの推論パラダイムと、ツールそのものである「ツール抽象化」です。

推論ループ

エージェントは推論ループ、またはパラダイムを使用して、複数ステップの問題を解決します。LlamaIndexでは、OpenAI FunctionエージェントとReActエージェントの両方が、同様のパターンに従って、使用するツールと、各ツールを呼び出すシーケンスとパラメーターを決定します。推論のパターンは、ReActまたは推論とアクションと呼ばれます。このプロセスは、単純なワンステップのツール選択プロセスの場合もあれば、各ステップで複数のツールが選択されるより複雑なプロセスの場合もあります。

エージェント・ツールの抽象化

ツールの抽象化は、エージェントがツールにアクセスして使用する方法を概説します。LlamaIndexは、エージェントが対話できる完全なAPI仕様を表すPythonクラスであるツールとToolSpecsを提供します。基本ツール抽象化は、一連の引数を受け取り、あらゆる応答をキャプチャできる汎用ツール出力コンテナを返す汎用インターフェースを定義します。LlamaIndexは、既存のデータ・クエリー・エンジンをラップするツール抽象化と、ツール仕様クラスで使用できる関数の抽象化を提供します。

  • FunctionTool:任意の関数をエージェントが使用できるツールに変換します。
  • QueryEngineTool: エージェントがクエリー・エンジンの検索と取得を使用できるようにします。

ツール仕様により、ユーザーは特定のタスクを処理する個々のツールではなく、完全なサービスを定義できます。例えば、Gmailツールの仕様では、エージェントがメールの読み取りと下書きの両方を行うことができます11大まかに定義すると次のようになります。

class GmailToolSpec(BaseToolSpec):
    “””Load emails from the user’s account”””
    spec_functions = [“load_data”,“create_draft”, “send_email”]
    def load_data(self) -> List[Document]:
...

def create_draft(
    self,
    to: List[str],
    subject: [str],
    message: [str],
) -> str: “Create and insert a draft email”
...

def send_draft(
    self,
    draft_id: str = None
) -> str: “Send a draft email.”
...

各関数は、「FunctionTool」抽象化を使用してツールに変換されます。

LlamaIndexは、エージェントが操作するための15以上のツール仕様で構成されるLlamaHubのツール・リポジトリーを活用します。このリストは、エージェントがさまざまなアクションを実行する能力を強化し、充実させることを目的としたサービスで構成されています。リポジトリーに含まれるいくつかの仕様は以下のとおりです。

  • SQL + ベクトル・データベース仕様
  • Gmail仕様
  • Ollama
  • LangChainLLM

ユーティリティー・ツール

LlamaIndexは、次のような既存のツールの機能を拡張できるユーティリティー・ツールを提供します。

  • OnDemandLoaderTool: 既存の LlamaIndex データ・ローダーをエージェントが利用できるツールに変換します。
  • LoadAndSearchToolSpec:既存のツールを入力として受け入れ、ロード・ツールと検索ツールの両方を出力として生成します。

LLMとの統合

LlamaIndexは、IBM Graniteシリーズ、Llama2、OpenAI などのオープンソース基盤モデルや、LangChainやOllamaなどのその他の LLMフレームワークと連携します。LLMは、スタンドアロン・モジュールとして、または他のコアLlamaIndexモジュールにプラグインして、さまざまな方法で使用できます。12 LLMは、AIエージェントを駆動して、自律的なワークフローに従うナレッジ・ワーカーとして機能させるためにも使用できます。

AIエージェント

LlamaIndexは、ナレッジ・ワーカーとして機能するLLM駆動型AIエージェントの使用を含むように機能を拡張しました。ReAct(推論とアクション)行動パターンに従うLlamaIndex AIエージェント。ReActエージェントは、エージェントに計画と推論を指示しながら応答を繰り返し改善する推論パラダイムに従います。このタイプのAIエージェントは、思考連鎖プロンプトの一種として解釈できます。エージェントはツールを使用して他のLLMと統合できます。例えば、データ・コネクターとエージェント・ツールのLlamaHubコレクションなどです。

ユースケース

LlamaIndexは、ドキュメント内でチュートリアルへのリンクを含むいくつかのユースケース例を提供しています。13

  • チャットボット: LlamaIndexは、チャット・エンジンと呼ばれるクエリー・エンジンに現状を維持する類似性を提供します。チャット・エンジンは、対話(単一の質問と回答ではなく、双方向のやり取り)のための高レベルのインターフェースを提供します。チャット・エンジンは、ChatGPTアプリケーションのよりパーソナライズされたバージョンと考えることができます。チャット・エンジンの実装には、ReActエージェントを利用するモードが含まれています。LlamaIndexには、Data Agentを使用するチャットボットの構築方法に関するチュートリアルがあります。
  • プロンプト: LlamaIndexは、LLM 統合とワークフローをイベント駆動型の抽象化として使用し、プロンプト呼び出しを連鎖させます。プロンプトは、あらゆるLLMアプリケーションの基本です。
  • 質問応答(RAG): LlamaIndexは、自然言語でのクエリーを使用して非構造化ドキュメントに対してRAGを実行する機能を提供します。LlamaIndexは、テキストからSQLやテキストからPandasを使用して構造化データを照会する方法も提供します。14
  • 構造化データ抽出: LLM は自然言語を処理し、名前、日付、住所、数字などの意味的に重要な詳細を抽出し、元のソースに関係なく、一貫した構造化された形式で提示します。データが構造化されると、データベースに送信したり、LlamaParseなどのツールを使用してさらに分析したりできます。
  • 自律エージェント:AIエージェントは、さまざまなLLMアプリケーションに使用できます。例えば、ユーザーは、データに基づいてコンテキスト拡張型リサーチ・アシスタントを作成し、複雑なリサーチ・タスクだけでなく簡単な質問にも答えることで、エージェントRAGアプリケーションを構築できます。15
関連ソリューション
基盤モデル

watsonxプラットフォームにある基盤モデルのIBMライブラリーを探索し、ビジネスに合わせて自信を持って生成AIを拡張します。

watsonx.aiをご覧ください。
人工知能ソリューション

業界をリードするIBMのAI専門知識とソリューション製品群を使用すれば、ビジネスにAIを活用できます。

AIソリューションはこちら
AIコンサルティングとサービス

AIの導入で重要なワークフローと業務を再構築し、エクスペリエンス、リアルタイムの意思決定とビジネス価値を最大化します。

AIサービスはこちら
次のステップ

ビジネスに合わせて生成AIを確実に拡張できるように、IBM watsonxプラットフォームにあるIBMライブラリーの基盤モデルの詳細を学びましょう。

watsonx.aiの詳細はこちら AIソリューションはこちら
脚注

1 Elena Lowery、「Use Watsonx.Ai with LlamaIndex to Build Rag Applications」、2024年5月28日、 https://community.ibm.com/community/user/watsonx/blogs/elena-lowery/2024/05/28/use-watsonxai-with-llamaindex-to-build-rag-applica

2 Matt Stalloneら、「Scaling Granite Code Models to 128K Context」、arXiv.org、2024年7月18日、 https://arxiv.org/abs/2407.13739

3 Matt Stalloneら、「Scaling Granite Code Models to 128K Context」。

4 Kim Martineau、「What Is Retrieval-Augmented Generation (Rag)?」、IBM Research、2024年5月1日、 https://research.ibm.com/blog/retrieval-augmented-generation-RAG

5 「High-Level Concepts」、LlamaIndex、https://docs.llamaindex.ai/en/stable/getting_started/concepts/

6 「Loading Data (Ingestion)」、LlamaIndex、https://docs.llamaindex.ai/en/stable/understanding/loading/loading/

7 Elena Lowy、「Watsonx.Ai with LlamaIndex to Build Rag Applications」

8 Elena Lowy、「Watsonx.Ai with LlamaIndex to Build Rag Applications」

9 「Query Engine」、LlamaIndex、 https://docs.llamaindex.ai/en/latest/module_guides/deploying/query_engine/

10 Jerry Liu、「Data Agents」、Medium社、2023年7月13日、 https://medium.com/llamaindex-blog/data-agents-eed797d7972f

11 「Google」、LlamaIndex、 https://docs.llamaindex.ai/en/stable/api_reference/tools/google/

12 「Using LLMs」、LlamaIndex、 https://docs.llamaindex.ai/en/latest/module_guides/models/llms/

13「Use Cases」、LlamaIndex、 https://docs.llamaindex.ai/en/latest/use_cases/

14 「Question-Answering (RAG)」、LlamaIndex、 https://docs.llamaindex.ai/en/stable/use_cases/q_and_a/

15「Agents」、LlamaIndex、 https://docs.llamaindex.ai/en/stable/use_cases/agents/