LlamaIndexのための永続的なベクトル・ストレージ
パーシステント・ベクター・ストレージの利点を発見し、データ・ストレージ戦略を最適化しましょう。
この記事はToward AIに掲載されたもので、許可を得てここに再掲載する。
ChatGPT](https://zilliz.com/learn/ChatGPT-Vector-Database-Prompt-as-code)が何であるかは、岩の下で暮らしていない限り、ご存じだろう。ChatGPTは、OpenAIによって作られた大規模言語モデル(LLM)であるGPTによって動いています。ChatGPTの人気は、LLMとその活用方法に多くの関心を集めています。LlamaIndexは、LLMアプリケーションを構築するための強力な新しいツールです。
LLMアプリケーションを構築する上で、最も重要な3つの課題があります:
膨大なコスト
最新情報の不足
ドメイン固有の知識の必要性
これらの問題に対処するために、主に2つのフレームワークが提案されている:ファインチューニングとキャッシュ+インジェクション。
ファインチューニングは、正しい情報の欠如にまつわる最後の2つの課題に対しては良い解決策となる。しかし、コストを扱う場合、ファインチューニングは逆に役に立ちません。そこで、キャッシュ+インジェクションを使うのだ。そのためのフレームワークのひとつが、"CVP" or ChatGPT + Vector Database + Prompt-as-Codeと呼ばれています。LlamaIndexはこのフレームワークの多くを抽象化することができます。
この作品では
- LlamaIndexの紹介
- LlamaIndex ベクトルインデックスの作成と保存
- ローカルでベクターデータベースを使用する
- クラウドベクターデータベースの使用
- LlamaIndexで永続ベクターストアを使用する方法のまとめ
LlamaIndex入門
LlamaIndexは、あなたのデータとLLMを囲むブラックボックスと考えることができます。
LlamaIndexは、あなたとあなたのデータ、そしてChatGPTのようなLLMの相互作用を促進します。まず、あなたのデータを複数の "ノード "に "インデックス "する方法を提供します。そして、インデックス化されたデータを使ってChatGPTと対話します。LlamaIndexには4つの主なインデックスパターンがあります: リストインデックス、ベクトルストアインデックス、ツリーインデックス、キーワードインデックスです。
それぞれのインデックスには利点と使用例があります。例えば、リスト・インデックスは、全体像が必要な場合に大きなドキュメントを扱うのに適しています。ベクトル・インデックスは意味的な類似性が必要な場合に最適です。ツリー・インデックスは疎な情報が必要な場合に適している。最後に、キーワード・インデックスは特定のキーワードを探すのに適している。
インデックスはセッション管理のために保存したり読み込んだりすることができます。デフォルトでは、インデックスのコンテキストをローカルに保存できます。しかし、実際のユースケースでは、インデックスのための永続的なストレージエンジンが必要です。このチュートリアルでは、永続的なベクターインデックスを作成する方法を見ていきます。
LlamaIndex ベクターインデックスの作成と保存
このチュートリアルのコードに従うには、いくつかのデータを取得する必要があります。このチュートリアルでは、LlamaIndexリポジトリのexamplesフォルダから直接データを使います。リポジトリをローカルにクローンし、paul_graham_essay
フォルダにノートブックを作成するか、そのフォルダからデータをダウンロードし、あなたのフォルダにローカルにコードを使用することができます。
ローカルでベクトルデータベースを使う
この例では、オープンソースのベクトルデータベースMilvusを使用します。特に、Milvus Liteを使うことで、余計な作業をすることなく、ノートブックで直接実行することができます。必要なのは pip install
だけである。以下のコードを実行する前に、pip install Milvus llama-index python-dotenv.
また、GPTで動作させるにはOpenAI API keyが必要です。Python-dotenvライブラリは OpenAI API キーを
.env` ファイルに保存する場合にのみ必要です。
llama_indexから必要なインポートは
vector_storesモジュールの
GPTVectorStoreIndex、 StorageContext、
と MilvusVectorStore
である。また、API キーをロードするために os
と load_dotenv
もインポートする。
インポートが完了し、APIキーがロードされたら、vector database をスピンアップする。次に、default_server
で start()
を呼び出してローカルにMilvus Liteインスタンスを起動する。そして、 MilvusVectorStore
を使用してベクターストアに接続し、適切なホストとポートを渡す。
python from llama_index import GPTVectorStoreIndex, StorageContext from llama_index.vector_stores import MilvusVectorStore from milvus import default_server from dotenv import load_dotenv インポート os load_dotenv() open_api_key = os.getenv("OPENAI_API_KEY")
default_server.start() vector_store = MilvusVectorStore( host = "127.0.0.1"、 ポート = default_server.listen_port )
ベクターデータベースを接続した状態で、ストレージコンテキストを設定します。ストレージコンテキストは LlamaIndex にインデックスを格納する場所を指示する。すべての設定が終わったので、`GPTVectorStoreIndex` でインデックスを作成する。インデックスを作成するドキュメントとストレージコンテキストの両方を渡します。
ここからは通常通りインデックスにクエリを発行します。この例では、"What did the author do growing up? "とベクトル・インデックスに問い合わせます。この質問には、"作者 "と "成長期 "の意味的抽象化が必要なので、ベクトル・インデックスが必要です。例えば、"幼少期、著者は短編小説を書き、IBM1401でプログラミングをし、父親にTRS-80マイクロコンピュータを買ってくれるよう口うるさく言った。..."
python
storage_context = StorageContext.from_defaults(vector_store=vector_store)
index = GPTVectorStoreIndex.from_documents(
documents, storage_context=storage_context
)
query_engine = index.as_query_engine()
response = query_engine.query("What did the author do growing up?")
クラウドベクターデータベースを使う
十分なデータがあれば、LlamaIndexベクトルストア・インデックスにクラウド・ベクター・データベースを使うのは、ローカル・ストレージよりもクラウド・ストレージを使う方が理にかなっています。Milvusのクラウド版であるZillizを使うには、2つのことをするだけでよい。まず、Zillizのアカウント(100ドルの無料クレジット付き)を取得し、アカウントにコレクションを作成します。そして、以下のコードを変更してください。
代わりに
パイソン vector_store = MilvusVectorStore( host = "127.0.0.1"、 ポート = default_server.listen_port )
使用する
パイソン
vector_store = MilvusVectorStore(
ホスト = HOST
port = PORT、
ユーザー = USER、
パスワード = PASSWORD、
use_secure = True、
上書き = True
)
HOST、PORT、USER、PASSWORDはZillizアカウントで設定したホスト、ポート、ユーザー名、パスワードに対応します。
LlamaIndexで永続的なベクターストアを使用する方法のまとめ
このチュートリアルでは、データを扱うためのフレームワークである LlamaIndex と LLM について簡単に説明しました。次に、LlamaIndex でベクターストアのインデックスを作成し、ベクターストアを永続化する 2 つの方法を説明しました。まず、Milvus Liteを使用して、永続的なベクターストアを作成する方法について説明しました。次に、Zillizを使ってクラウドベクターデータベースを使う方法を紹介しました。
読み続けて

LlamaIndexを始める
プライベートでカスタマイズされたデータソースを大規模言語モデル(LLM)に接続する柔軟なデータフレームワーク、LlamaIndexについてご紹介します。

LlamaIndex、LangChain、Milvusを使った複数ドキュメントのクエリ
LLMのパワーを解き放つ: LlamaIndex、LangChain、Milvus Vector Databaseで複数の文書を結合し、クエリする

LlamaIndexを使ったデータサイエンスに向けたチャット
データ・サイエンスに向けたチャット」ブログ・シリーズ(全4回)の2回目となる今回は、なぜLlamaIndexがオープンソースのデータ検索フレームワークのトップランナーなのかをご紹介します。