見出し画像

LlamaIndex v0.10 の概要

以下の記事が面白かったので、簡単にまとめました。

LlamaIndex v0.10

1. LlamaIndex v0.10

LlamaIndex v0.10」は、過去最大のアップデートです。
「LlamaIndex」が次世代の本番環境に対応したLLMアプリケーションフレームワークになるための大きな一歩となります。

主なアップデートは、次のとおりです。

・llama-index-coreを作成し、Integrationを個別パッケージに分離
・全IntegrationをLlamaHubで管理 (移行作業中)
・ServiceContext は非推奨

2. llama-index-core を作成し、Integration を個別パッケージに分離

LlamaIndex」は、何百もの「Integration」を含む広範なツールキットに進化しました。

・150以上の データローダー
・35以上の エージェントツール
・50以上の LlamaPackテンプレート
・50以上の LLM
・25個以上の 埋め込み
・40以上の ベクトル ストア

llama_index」および「llama-hub」全体にわたって、さらに多くの機能が含まれます。 LlamaIndexのエコシステムの急成長は目を見張るものがありますが、成長の痛みも伴います。

・多くのIntegrationには適切なテストが不足している
・ユーザーは依存関係を理解する責任がある
・Integrationが更新される場合、ユーザーは llama-indexパッケージ全体を更新する必要がある。

これに対応するため、「llama-index-core」を作成し、「Integration」を個別パッケージに分離しました。

2-1. llama-index-core の作成

コアLlamaIndex抽象化とコンポーネントを含む、スリム化されたパッケージを作成しました。

2-2. Integration を個別パッケージに分離

すべての「Integration」が個別のパッケージとして利用できるようになりました。 これには、「LlamaHub」上のものを含むすべての「Integration」が含まれます。全パッケージの完全なリストについては、Notionレジストリページを参照してください。

2-3. llama-index

llama-index」パッケージはまだ存在しており、「llama-index-core」と最小限の統合セットをインポートしています。 デフォルトでOpenAI を使用するため、これにはOpenAI パッケージと、SimpleDirectoryReaderが含まれています。 

v0.10 に移行せず、現在の「LlamaIndex」を引き続き使用したい人のために、当面は「llama-index-legacy」 (最新リリース 0.9.48 に固定) を提供します。

2-4. フォルダ構造の刷新

「llama_index」リポジトリのフォルダ構造を完全に刷新しました。

重要なフォルダは、次のとおりです。

・llama-index-core : すべてのコアLlamaIndex 抽象化が含まれている。
・llama-index-integrations : 19個のLlamaIndex抽象化のサードパーティIntegrationが含まれている。これには、データ ローダー、LLM、埋め込み、ベクトルストアなどが含まれる。
・llama-index-packs : ユーザーアプリケーションを起動するために設計されたテンプレートである50以上のLlamaPackが含まれている。

その他のフォルダは、次のとおりです。

・llama-index-legacy : 従来のLlamaIndexのコードが含まれている。
・llama-index-experimental : 実験的な機能が含まれている (現在はほとんど使用されていません) 。
・llama-index-finetuning : LlamaIndexファインチューニング抽象化が含まれている。これらはまだ比較的実験的なもの。

IntegrationとPackのサブディレクトリは個々のパッケージを表します。フォルダ名はパッケージ名に対応します。

各パッケージフォルダ内では、ソースファイルはインポートに使用するのと同じパスに配置されます。このフォルダ構造により、インポート中に最上位の「llama_index」名前空間を保持できるようになります。

2-5. Integrationの使用例

すべてのサードパーティ「Integration」は、「llama-index-integrations」の下に置かれるようになりました。 ここには19個のフォルダがあります。

主なIntegrationカテゴリは、次のとおりです。

・llms
・embeddings
・multi_modal_llms
・readers
・tools
・vector_stores

他のすべてのカテゴリは、次のとおりです。

agent, callbacks, evaluation, extractors, graph_stores, indices, output_parsers, postprocessor, program, question_gen, response_synthesizers, retrievers, storage

「Integration」の使用例は、次のとおりです。

・Anthropic LLM の使用例

pip install llama-index-llms-anthropic
from llama_index.llms.anthropic import Anthropic
llm = Anthropic(api_key="<api_key>")


・データローダーの使用例

pip install llama-index-readers-notion
from llama_index.readers.notion import NotionPageReader
integration_token = os.getenv("NOTION_INTEGRATION_TOKEN")
page_ids = ["<page_id>"]
reader = NotionPageReader(integration_token=integration_token)
documents = reader.load_data(page_ids=page_ids)


・LlamaPack の使用例

pip install llama-index-packs-sentence-window-retriever
from llama_index.packs.sentence_window_retriever import SentenceWindowRetrieverPack
sentence_window_retriever_pack = SentenceWindowRetrieverPack(
  documents
)
response = sentence_window_retriever_pack.run("Tell me a bout a Music celebritiy.")

3. すべての Integration を LlamaHub で管理

3-1. LlamaHubの拡張

既存の「LlamaHub」では、「ローダー」「ツール」「パック」「データセット」を提供してきましたが、「LLM」「埋め込み」「ベクトルストア」「コールバック」など全てのIntegrationを提供するようになります。

この取り組みはまだ作業中です。 数週間以内にサイトを更新します。それまでの間は、Notionパッケージレジストリをチェックしてください。

「LlamaHub」は存続しますが、「llama-hub」リポジトリは廃止になります。

3-2. LlamaHubからのIntegrationの取得

「LlamaHub」を通じてIntegrationを取得するための一般的なUXは、 download_loaderdownload_llama_pack などのダウンロード構文です。

・download_llama_pack
llama-index-packs の下のパックをディスク上のローカル ファイルにダウンロード。 これにより、テンプレートのソースコードを直接使用および変更できるようになる。
・download_loader 、 download_tool
関連するIntegrationパッケージに対して「pip install」を直接実行。

4. ServiceContext は非推奨

「ServiceContext」を非推奨にして、「LlamaIndex」の開発者エクスペリエンスを向上させます。

「ServiceContext」は、LLM、埋め込みモデル、コールバックなどを含む一般的な構成コンテナとして存在しました。 これは、適切な LLM、埋め込み、プロンプト抽象化が行われる前に作成され、ユーザーがこれらのパラメーターを定義できるようにする中間のユーザー向けレイヤーであることを目的としていました。

しかし、時間が経つにつれて、このオブジェクトは使いにくくなりました。 service_context コンテナ全体を任意のモジュールに渡すと、どのコンポーネントが実際に使用されているかを推論するのが困難になりました。 すべてのモジュールがデフォルトで OpenAI を使用するため、ユーザーはローカルモデルを使用したい場合でも、不必要にOpenAIキーを指定するように求められていました。 インポートして入力するのも大変でした。

関連するもう 1 つの問題点は、カスタムモデル、特にカスタムコールバックがある場合、service_contextをすべてのモジュールに手動で渡す必要があることでした。これは面倒な作業であり、ユーザーが忘れやすいため、コールバックを見逃したり、モデルの使用に一貫性がなくなったりしました。

これに対応するため、次の変更を加えました。

(1) ServiceContext は非推奨
インデックス作成用の埋め込みモデルやクエリ/応答合成用の LLM など、関連するパラメータをモジュールに直接渡す必要があります。

(2) グローバル設定の定義を推奨
これを一度定義すれば、ダウンストリームコードでカスタムパラメータを指定する必要はありません。これはコールバックの場合に特に便利です。

ドキュメント内の「ServiceContext」への参照はすべて削除され、直接モジュールまたはグローバル設定オブジェクトのいずれかを使用するように変更されました。


ServiceContextの代わりとなる使用例は、次のとおりです。

・LLMと埋め込みモデルを直接渡す

from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.llms.openai import OpenAI
from llama_index.core.callbacks import CallbackManager

embed_model = OpenAIEmbedding()
llm = OpenAI()
callback_manager = CallbackManager()
index = VectorStoreIndex.from_documents(
 documents, embed_model=embed_model, callback_manager=callback_manager
)
query_engine = index.as_query_engine(llm=llm)

・グローバル設定を定義

from llama_index.core.settings import Settings
Settings.llm = llm
Settings.embed_model = embed_model
Settings.callback_manager = callback_manager
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()

5. v0.10への移行

「LlamaIndex v0.10」への以降には、主に次の2つ作業が必要です。

・新しいパッケージ構造に合わせてインポートを調整
・ServiceContextの廃止

既存のコードをv0.10に自動的にアップグレードするツールも含まれる包括的な移行ガイドも提供しています。

llamaindex-cli upgrade <source-dir>



いいなと思ったら応援しよう!