LlamaIndex v0.10 の概要
以下の記事が面白かったので、簡単にまとめました。
1. LlamaIndex v0.10
「LlamaIndex v0.10」は、過去最大のアップデートです。
「LlamaIndex」が次世代の本番環境に対応したLLMアプリケーションフレームワークになるための大きな一歩となります。
主なアップデートは、次のとおりです。
2. llama-index-core を作成し、Integration を個別パッケージに分離
「LlamaIndex」は、何百もの「Integration」を含む広範なツールキットに進化しました。
「llama_index」および「llama-hub」全体にわたって、さらに多くの機能が含まれます。 LlamaIndexのエコシステムの急成長は目を見張るものがありますが、成長の痛みも伴います。
これに対応するため、「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」リポジトリのフォルダ構造を完全に刷新しました。
重要なフォルダは、次のとおりです。
その他のフォルダは、次のとおりです。
IntegrationとPackのサブディレクトリは個々のパッケージを表します。フォルダ名はパッケージ名に対応します。
各パッケージフォルダ内では、ソースファイルはインポートに使用するのと同じパスに配置されます。このフォルダ構造により、インポート中に最上位の「llama_index」名前空間を保持できるようになります。
2-5. Integrationの使用例
すべてのサードパーティ「Integration」は、「llama-index-integrations」の下に置かれるようになりました。 ここには19個のフォルダがあります。
主なIntegrationカテゴリは、次のとおりです。
他のすべてのカテゴリは、次のとおりです。
「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_loader 、 download_llama_pack などのダウンロード構文です。
4. ServiceContext は非推奨
「ServiceContext」を非推奨にして、「LlamaIndex」の開発者エクスペリエンスを向上させます。
「ServiceContext」は、LLM、埋め込みモデル、コールバックなどを含む一般的な構成コンテナとして存在しました。 これは、適切な LLM、埋め込み、プロンプト抽象化が行われる前に作成され、ユーザーがこれらのパラメーターを定義できるようにする中間のユーザー向けレイヤーであることを目的としていました。
しかし、時間が経つにつれて、このオブジェクトは使いにくくなりました。 service_context コンテナ全体を任意のモジュールに渡すと、どのコンポーネントが実際に使用されているかを推論するのが困難になりました。 すべてのモジュールがデフォルトで OpenAI を使用するため、ユーザーはローカルモデルを使用したい場合でも、不必要にOpenAIキーを指定するように求められていました。 インポートして入力するのも大変でした。
関連するもう 1 つの問題点は、カスタムモデル、特にカスタムコールバックがある場合、service_contextをすべてのモジュールに手動で渡す必要があることでした。これは面倒な作業であり、ユーザーが忘れやすいため、コールバックを見逃したり、モデルの使用に一貫性がなくなったりしました。
これに対応するため、次の変更を加えました。
ドキュメント内の「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つ作業が必要です。
既存のコードをv0.10に自動的にアップグレードするツールも含まれる包括的な移行ガイドも提供しています。
llamaindex-cli upgrade <source-dir>