🚀 جرب Zilliz Cloud، الـ Milvus المدارة بالكامل، مجاناً — تجربة أداء أسرع بـ 10 أضعاف! جرب الآن>>

milvus-logo
LFAI
الصفحة الرئيسية
  • عمليات الدمج
  • Home
  • Docs
  • عمليات الدمج

  • التنسيق

  • لانجتشين

  • الاستخدام الأساسي

استخدام ميلفوس كمخزن متجهات لانغ تشين

يوضح هذا الدفتر كيفية استخدام الوظائف المتعلقة بميلفوس كمخزن متجهات لانغشين.

الإعداد

ستحتاج إلى تثبيت langchain-milvus مع pip install -qU langchain-milvus لاستخدام هذا التكامل.

$ pip install -qU  langchain_milvus

يأتي الإصدار الأخير من pymilvus مع قاعدة بيانات متجهات محلية Milvus Lite، وهي جيدة للنماذج الأولية. إذا كان لديك حجم كبير من البيانات مثل أكثر من مليون مستند، نوصي بإعداد خادم Milvus أكثر أداءً على docker أو kubernetes.

التهيئة

from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
from langchain_milvus import Milvus

# The easiest way is to use Milvus Lite where everything is stored in a local file.
# If you have a Milvus server you can use the server URI such as "http://localhost:19530".
URI = "./milvus_example.db"

vector_store = Milvus(
    embedding_function=embeddings,
    connection_args={"uri": URI},
)

تجزئة البيانات باستخدام مجموعات ميلفوس

يمكنك تخزين مستندات مختلفة غير ذات صلة في مجموعات مختلفة داخل نفس مثيل ميلفوس للحفاظ على السياق

إليك كيفية إنشاء مجموعة مخزن متجهات جديدة من المستندات:

from langchain_core.documents import Document

vector_store_saved = Milvus.from_documents(
    [Document(page_content="foo!")],
    embeddings,
    collection_name="langchain_example",
    connection_args={"uri": URI},
)

وإليك كيفية استرداد تلك المجموعة المخزنة

vector_store_loaded = Milvus(
    embeddings,
    connection_args={"uri": URI},
    collection_name="langchain_example",
)

إدارة مخزن المتجهات

بمجرد إنشاء مخزن المتجهات الخاص بك، يمكننا التفاعل معه عن طريق إضافة عناصر مختلفة وحذفها.

إضافة عناصر إلى مخزن المتجهات

يمكننا إضافة عناصر إلى مخزن المتجهات باستخدام الدالة add_documents.

from uuid import uuid4

from langchain_core.documents import Document

document_1 = Document(
    page_content="I had chocalate chip pancakes and scrambled eggs for breakfast this morning.",
    metadata={"source": "tweet"},
)

document_2 = Document(
    page_content="The weather forecast for tomorrow is cloudy and overcast, with a high of 62 degrees.",
    metadata={"source": "news"},
)

document_3 = Document(
    page_content="Building an exciting new project with LangChain - come check it out!",
    metadata={"source": "tweet"},
)

document_4 = Document(
    page_content="Robbers broke into the city bank and stole $1 million in cash.",
    metadata={"source": "news"},
)

document_5 = Document(
    page_content="Wow! That was an amazing movie. I can't wait to see it again.",
    metadata={"source": "tweet"},
)

document_6 = Document(
    page_content="Is the new iPhone worth the price? Read this review to find out.",
    metadata={"source": "website"},
)

document_7 = Document(
    page_content="The top 10 soccer players in the world right now.",
    metadata={"source": "website"},
)

document_8 = Document(
    page_content="LangGraph is the best framework for building stateful, agentic applications!",
    metadata={"source": "tweet"},
)

document_9 = Document(
    page_content="The stock market is down 500 points today due to fears of a recession.",
    metadata={"source": "news"},
)

document_10 = Document(
    page_content="I have a bad feeling I am going to get deleted :(",
    metadata={"source": "tweet"},
)

documents = [
    document_1,
    document_2,
    document_3,
    document_4,
    document_5,
    document_6,
    document_7,
    document_8,
    document_9,
    document_10,
]
uuids = [str(uuid4()) for _ in range(len(documents))]

vector_store.add_documents(documents=documents, ids=uuids)
['b0248595-2a41-4f6b-9c25-3a24c1278bb3',
 'fa642726-5329-4495-a072-187e948dd71f',
 '9905001c-a4a3-455e-ab94-72d0ed11b476',
 'eacc7256-d7fa-4036-b1f7-83d7a4bee0c5',
 '7508f7ff-c0c9-49ea-8189-634f8a0244d8',
 '2e179609-3ff7-4c6a-9e05-08978903fe26',
 'fab1f2ac-43e1-45f9-b81b-fc5d334c6508',
 '1206d237-ee3a-484f-baf2-b5ac38eeb314',
 'd43cbf9a-a772-4c40-993b-9439065fec01',
 '25e667bb-6f09-4574-a368-661069301906']

حذف عناصر من مخزن المتجهات

vector_store.delete(ids=[uuids[-1]])
(insert count: 0, delete count: 1, upsert count: 0, timestamp: 0, success count: 0, err count: 0, cost: 0)

الاستعلام عن مخزن المتجهات

بمجرد إنشاء مخزن المتجهات الخاص بك وإضافة المستندات ذات الصلة، سترغب على الأرجح في الاستعلام عنه أثناء تشغيل السلسلة أو الوكيل.

الاستعلام مباشرة

يمكن إجراء بحث تشابه بسيط مع تصفية البيانات الوصفية على النحو التالي:

results = vector_store.similarity_search(
    "LangChain provides abstractions to make working with LLMs easy",
    k=2,
    expr='source == "tweet"',
)
for res in results:
    print(f"* {res.page_content} [{res.metadata}]")
* Building an exciting new project with LangChain - come check it out! [{'pk': '9905001c-a4a3-455e-ab94-72d0ed11b476', 'source': 'tweet'}]
* LangGraph is the best framework for building stateful, agentic applications! [{'pk': '1206d237-ee3a-484f-baf2-b5ac38eeb314', 'source': 'tweet'}]

البحث عن التشابه مع الدرجة

يمكنك أيضًا البحث بالنتيجة:

results = vector_store.similarity_search_with_score(
    "Will it be hot tomorrow?", k=1, expr='source == "news"'
)
for res, score in results:
    print(f"* [SIM={score:3f}] {res.page_content} [{res.metadata}]")
* [SIM=21192.628906] bar [{'pk': '2', 'source': 'https://example.com'}]

للاطلاع على قائمة كاملة بجميع خيارات البحث المتاحة عند استخدام مخزن المتجهات Milvus ، يمكنك زيارة مرجع واجهة برمجة التطبيقات.

الاستعلام عن طريق التحويل إلى مسترجع

يمكنك أيضًا تحويل مخزن المتجهات إلى مسترجع لسهولة الاستخدام في سلاسل البيانات الخاصة بك.

retriever = vector_store.as_retriever(search_type="mmr", search_kwargs={"k": 1})
retriever.invoke("Stealing from the bank is a crime", filter={"source": "news"})
[Document(metadata={'pk': 'eacc7256-d7fa-4036-b1f7-83d7a4bee0c5', 'source': 'news'}, page_content='Robbers broke into the city bank and stole $1 million in cash.')]

الاستخدام لتوليد المسترجع المعزز للاسترجاع

للحصول على إرشادات حول كيفية استخدام مخزن المتجهات هذا للتوليد المعزز للاسترجاع (RAG)، راجع دليل RAG هذا.

الاسترجاع لكل مستخدم

عند إنشاء تطبيق استرجاع، غالبًا ما يتعين عليك إنشاؤه مع وضع عدة مستخدمين في الاعتبار. هذا يعني أنك قد تقوم بتخزين البيانات ليس لمستخدم واحد فقط، ولكن للعديد من المستخدمين المختلفين، ويجب ألا يتمكنوا من رؤية بيانات بعضهم البعض.

يوصي ميلفوس باستخدام partition_key لتنفيذ الإيجار المتعدد، وإليك مثال على ذلك.

خاصية مفتاح التقسيم غير متوفرة الآن في Milvus Lite، إذا كنت ترغب في استخدامها، فأنت بحاجة إلى بدء تشغيل خادم Milvus من docker أو kubernetes.

from langchain_core.documents import Document

docs = [
    Document(page_content="i worked at kensho", metadata={"namespace": "harrison"}),
    Document(page_content="i worked at facebook", metadata={"namespace": "ankush"}),
]
vectorstore = Milvus.from_documents(
    docs,
    embeddings,
    connection_args={"uri": URI},
    drop_old=True,
    partition_key_field="namespace",  # Use the "namespace" field as the partition key
)

لإجراء بحث باستخدام مفتاح التقسيم، يجب عليك تضمين أي مما يلي في التعبير المنطقي لطلب البحث

search_kwargs={"expr": '<partition_key> == "xxxx"'}

search_kwargs={"expr": '<partition_key> == in ["xxx", "xxx"]'}

قم باستبدال <partition_key> باسم الحقل الذي تم تعيينه كمفتاح القسم.

يتغير Milvus إلى قسم بناءً على مفتاح القسم المحدد، ويقوم بتصفية الكيانات وفقًا لمفتاح القسم، ويبحث بين الكيانات التي تمت تصفيتها.

# This will only get documents for Ankush
vectorstore.as_retriever(search_kwargs={"expr": 'namespace == "ankush"'}).invoke(
    "where did i work?"
)
[Document(page_content='i worked at facebook', metadata={'namespace': 'ankush'})]
# This will only get documents for Harrison
vectorstore.as_retriever(search_kwargs={"expr": 'namespace == "harrison"'}).invoke(
    "where did i work?"
)
[Document(page_content='i worked at kensho', metadata={'namespace': 'harrison'})]

مرجع واجهة برمجة التطبيقات

للحصول على توثيق مفصل لجميع ميزات وتكوينات __ModuleName___VectorStore توجه إلى مرجع واجهة برمجة التطبيقات: https://python.langchain.com/api_reference/milvus/vectorstores/langchain_milvus.vectorstores.milvus.Milvus.html

جرب Managed Milvus مجاناً

Zilliz Cloud خالي من المتاعب، ويعمل بواسطة Milvus ويعمل بسرعة 10 أضعاف.

ابدأ
التعليقات

هل كانت هذه الصفحة مفيدة؟