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の検索設定を最も自由に制御することができ、コレクション作成速度も最も速くなります。
リソースと参考文献
読み続けて

DeepSeek vs. OpenAI: A Battle of Innovation in Modern AI
Compare OpenAI's o1 and o3-mini with DeepSeek R1's open-source alternative. Discover which AI model offers the best balance of reasoning capabilities and cost efficiency.

Knowledge Injection in LLMs: Fine-Tuning and RAG
Explore knowledge injection techniques like fine-tuning and RAG. Compare their effectiveness in improving accuracy, knowledge retention, and task performance.

Introducing Milvus 2.5: Built-in Full-Text Search, Advanced Query Optimization, and More 🚀
We're thrilled to announce the release of Milvus 2.5, a significant step in our journey to build the world's most complete solution for all search workloads.