LlamaIndexのための永続的なベクトル・ストレージ
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を使ってクラウドベクターデータベースを使う方法を紹介しました。
Yujian TangDeveloper Advocate at ZillizYujian Tang is a Developer Advocate at Zilliz. He has a background as a software engineer working on AutoML at Amazon. Yujian studied Computer Science, Statistics, and Neuroscience with research papers published to conferences including IEEE Big Data. He enjoys drinking bubble tea, spending time with family, and being near water.





