LlamaIndexは、大規模言語モデル(LLM)アプリケーションを構築するためのオープンソースのデータ・オーケストレーション・フレームワークです。LlamaIndexはPythonとTypeScriptで利用でき、Retrieval-Augmented(RAG)パイプラインを通じて、生成AIユースケースのコンテキスト拡張プロセスを簡素化するツールと機能を活用します。
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は、コンテキスト拡張で最もよく知られ使用されている方法の1つです。RAGにより、LLMは専門的な知識ベースを活用できるようになり、質問に対してより正確な回答を提供する能力が向上します。4 一般的な検索拡張プロセスは、次の3つのステップで実行されます。
LlamaIndexなどのデータ・フレームワークは、RAGパターンのすべてのステップに対して包括的なAPI呼び出しを提供することで、データの取り込みと取得のプロセスを効率化します。このプロセスは、ユーザーがデータに対して質問できるようにするクエリー・エンジンの概念によって実現されています。外部データに対して照会し、コンテキスト知識を使用してLLMにプロンプトを出すことで、ドメイン固有のLLMアプリケーションを作成できます。
LlamaIndexはRAGを使用して、LLMがすでにアクセスできるデータ・プールに外部データを追加および接続します。クエリー・エンジン、チャットボット、エージェントなどのアプリケーションは、RAGテクニックを使用してタスクを完了します。5
LlamaIndexのワークフローはいくつかのステップに分けられます。
このワークフローの目的は、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に送信されて応答が返されることです。
データ・エージェントは、LLM駆動型のAIエージェントであり、読み取り機能と書き込み機能の両方を含む、データに対してさまざまなタスクを実行できます。10 LlamaIndexデータ・エージェントは、LLMを活用したナレッジ・ワークであり、次の機能を実行できます。
AIエージェントは、一連のAPIとツールを通じて外部環境と対話できます。LlamaIndexは、OpenAI Functionエージェント(OpenAI Function API上に構築)と ReAct エージェントをサポートしています。データ・エージェントのコア・コンポーネントは、「推論ループ」またはエージェントの推論パラダイムと、ツールそのものである「ツール抽象化」です。
ツールの抽象化は、エージェントがツールにアクセスして使用する方法を概説します。LlamaIndexは、エージェントが対話できる完全なAPI仕様を表すPythonクラスであるツールとToolSpecsを提供します。基本ツール抽象化は、一連の引数を受け取り、あらゆる応答をキャプチャできる汎用ツール出力コンテナを返す汎用インターフェースを定義します。LlamaIndexは、既存のデータ・クエリー・エンジンをラップするツール抽象化と、ツール仕様クラスで使用できる関数の抽象化を提供します。
ツール仕様により、ユーザーは特定のタスクを処理する個々のツールではなく、完全なサービスを定義できます。例えば、Gmailツールの仕様では、エージェントがメールの読み取りと下書きの両方を行うことができます。11大まかに定義すると次のようになります。
class GmailToolSpec(BaseToolSpec):各関数は、「FunctionTool」抽象化を使用してツールに変換されます。
LlamaIndexは、エージェントが操作するための15以上のツール仕様で構成されるLlamaHubのツール・リポジトリーを活用します。このリストは、エージェントがさまざまなアクションを実行する能力を強化し、充実させることを目的としたサービスで構成されています。リポジトリーに含まれるいくつかの仕様は以下のとおりです。
LlamaIndexは、次のような既存のツールの機能を拡張できるユーティリティー・ツールを提供します。
LlamaIndexは、ナレッジ・ワーカーとして機能するLLM駆動型AIエージェントの使用を含むように機能を拡張しました。ReAct(推論とアクション)行動パターンに従うLlamaIndex AIエージェント。ReActエージェントは、エージェントに計画と推論を指示しながら応答を繰り返し改善する推論パラダイムに従います。このタイプのAIエージェントは、思考連鎖プロンプトの一種として解釈できます。エージェントはツールを使用して他のLLMと統合できます。例えば、データ・コネクターとエージェント・ツールのLlamaHubコレクションなどです。
LlamaIndexは、ドキュメント内でチュートリアルへのリンクを含むいくつかのユースケース例を提供しています。13
IBM® Granite™をご紹介します。ビジネス向けに特化し、AIアプリケーションの拡張に合わせて最適化された、オープンで高性能かつ信頼性の高いAIモデル・ファミリーです。言語、コード、時系列、ガードレールのオプションをご覧ください。
ユースケースに最適なAI基盤モデルを選択する方法について説明します。
IBM Developerの記事、ブログを読み、チュートリアルで学んで、LLMに関する知識を深めましょう。
最新のAI技術とインフラストラクチャーを使用して、モデルのパフォーマンスを向上させ、競合他社に差をつけるよう、チームを継続的に後押しする方法を学びましょう。
あらゆる業界に信頼性、パフォーマンス、費用対効果の高いメリットを提供する エンタープライズ・グレードの基盤モデルの価値に関する 詳細をご覧ください。
生成AI、機械学習、基盤モデルをビジネス・オペレーションに組み込んでパフォーマンスを向上させる方法をご紹介します。
2,000の組織を対象に実施された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/。