LangChainとLlamaIndexを使ってMilvus Liteに接続する方法

ちょうど1週間前の5月31日にリリースされたMilvus Liteは、LangChainやLlamaIndexのようなサードパーティのコネクターが、人気のあるオープンソースのベクトル・データベースであるMilvusに接続するためのデフォルトの方法となった。
| --------------- | --------------------------------------- | ------------------ | | 方法** | 検索処理の制御レベル | 時間(秒) | | LlamaIndex|制御なし|2156|LangChain|フル制御 | LangChain|フルコントロール|8 | Milvus Lite API|フルコントロール|28
表 同じHuggingFace埋め込みモデル(BAAI/bge-large-en-v1.5)と同じHTMLデータファイルを使用したタイミング。
結果は? **Milvusの設定に対する高度なコントロールと高速セットアップのベストバランスを求めるなら、Milvus Lite APIを直接使用するのが最適な選択です。
以下のセクションでは、以下の内容を説明します:
1.LlamaIndex**を使ったMilvus Liteへの接続
2.LangChain**を使用してMilvus Liteに接続する。
3.Milvus API**を利用したMilvus Liteへの接続
LlamaIndexを用いたMilvus Liteへの接続
LlamaIndex](https://milvus.io/docs/integrate_with_llamaindex.md)を利用するのは簡単です。 接続とコレクションの作成には約2000秒かかります。
from pymilvus import MilvusClient
from llama_index.core import (
設定
ServiceContext、
StorageContext、
VectorStoreIndex、
)
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.vector_stores.milvus import MilvusVectorStore
# 1.埋め込みモデルを定義する。
service_context = ServiceContext.from_defaults(
# LlamaIndex local: デフォルトのHFキャッシュと同じ場所に変換されます。
embed_model="local:BAAI/bge-large-en-v1.5")
# LlamaIndexはこれを隠しますが、ベクターストアを作成するために必要です!
embedding_dim = 1024
# 2.ドキュメントと埋め込みからMilvusコレクションを作成する。
milvus_client = MilvusClient()
vector_store = MilvusVectorStore(
client=milvus_client、
dim=EMBEDDING_DIM、
上書き=True
)
storage_context = StorageContext.from_defaults(
vector_store=vector_store
)
llamaindex = VectorStoreIndex.from_documents(
# Chunk, embed, insert は遅すぎる! 1つのドキュメントを使う。
docs[:1]、
storage_context=storage_context、
service_context=service_context
)
LangChainを使ったMilvus Liteへの接続
LangChain](https://milvus.io/docs/integrate_with_langchain.md)を使い始めるのは簡単です。 接続からコレクションの作成まで約8秒です。
from langchain_milvus import Milvus
from langchain_huggingface import HuggingFaceEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
# 1.埋め込みモデルを定義する。
model_name = "BAAI/bge-large-en-v1.5"
model_kwargs = {'device': 'cpu'}.
encode_kwargs = {'normalize_embeddings':True}とする。
embed_model = HuggingFaceEmbeddings(
model_name=model_name、
model_kwargs=model_kwargs、
encode_kwargs=encode_kwargs)
EMBEDDING_DIM = embed_model.dict()['client'].get_sentence_embedding_dimension()
# 2.ドキュメントとエンベッディングからMilvusコレクションを作成します。
start_time = time.time()
vectorstore = Milvus.from_documents(
documents=docs、
embedding=embed_model、
connection_args={
"uri":"./milvus_demo.db",}、
# LangChainのデフォルト値をMilvus用にオーバーライドします。
consistency_level="Eventually"、
drop_old=True、
index_params = {
"metric_type":"COSINE"、
「index_type":"AUTOINDEX"、
「params":{}}
)
Milvus Lite APIを使ったMilvus Liteへの接続
しかし、裏側では何が起こっているのだろうか?実際の手順を分解し、デフォルト値をより明確にしてみよう:
1.Milvus Liteサーバを起動し、接続する。
2.エンベッディングモデルを選択します。
3.Milvusデータベースコレクションを作成する。
1.スキーマを定義する。
2.インデックス(近似最近傍探索のためのデータ構造)を選択する。
3.距離メトリックの選択(ベクトル空間における "近い "の定義)。
4.データを挿入する際の一貫性レベルを選択する。
4.チャンキング戦略を選択する。
5.埋め込みモデルの推論を使って、データのチャンクをベクトルに変換する。
6.ベクトルデータをMilvusに挿入する。
以下はMilvus Lite APIを直接利用したPythonコードです。 接続からコレクションの作成まで約28秒かかります。
インポート pymilvus
# ステップ1. light milvus pythonサーバにクライアントを接続する。
from pymilvus import MilvusClient
mc = MilvusClient("milvus_demo.db")
# ステップ 2.オープンソースの埋め込みモデルをダウンロードする。
from sentence_transformers import SentenceTransformer
model_name = "BAAI/bge-large-en-v1.5"
encoder = SentenceTransformer(model_name, device='cpu')
# ステップ3. milvusコレクションを作成し、データベースインデックスを定義する。
# デフォルトはHNSWです。
COLLECTION_NAME = "MilvusDocs"
mc.create_collection(COLLECTION_NAME、
EMBEDDING_DIM、
consistency_level="Eventually"、
auto_id=True、
上書き=True,)
# ステップ4.データをベクトルにチャンクする。
from langchain_community.document_transformers import BeautifulSoupTransformer。
from langchain.text_splitter import RecursiveCharacterTextSplitter.
# チャンクサイズとオーバーラップを定義します。
chunk_size = 512
chunk_overlap = np.round(chunk_size * 0.10, 0)
# 文書を再帰的に重複するチャンクに分割します。
child_splitter = RecursiveCharacterTextSplitter(
chunk_size = chunk_size、
chunk_overlap = chunk_overlap、
length_function = len, # Python組み込みのlen関数を使う)
chunks = child_splitter.split_documents(docs)
# 埋め込みモデルの推論を使ってチャンクをベクトルに変換する。
list_of_strings = [doc.page_content for doc in chunks if hasattr(doc, 'page_content')] # ステップ5.
embeddings = torch.tensor(encoder.encode(list_of_strings))
# チャンクリストをmilvusに挿入する。
# まず、chunk_listとdict_listを作成します。
dict_list = [].
for chunk, sparse, dense in zip(chunks, embeddings["sparse"], embeddings["dense"]):
chunk_dict = {
'chunk': chunk.page_content、
'source': chunk.metadata.get('source', "")、
'vector': dense
}
dict_list.append(chunk_dict)
mc.insert(
コレクション名
data=dict_list、
progress_bar=True)
正しいミルバスライトの選び方
様々なMilvus Lite APIは便利である反面、検索やチャンキング方法の制御や速度の点でトレードオフの関係にあります。
**Milvus Lite APIを直接使用することで、Milvusの検索設定を最も自由に制御することができ、コレクション作成速度も最も速くなります。
リソースと参考文献
読み続けて

Creating Collections in Zilliz Cloud Just Got Way Easier
We've enhanced the entire collection creation experience to bring advanced capabilities directly into the interface, making it faster and easier to build production-ready schemas without switching tools.

Milvus WebUI: A Visual Management Tool for Your Vector Database
Milvus WebUI is a built-in GUI introduced in Milvus v2.5 for system observability. WebUI comes pre-installed with your Milvus instance and offers immediate access to critical system metrics and management features.

Vector Databases vs. In-Memory Databases
Use a vector database for AI-powered similarity search; use an in-memory database for ultra-low latency and high-throughput data access.
