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

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

  • هندسة المعرفة

  • لماذا كيف

دمج Milvus مع WhyHow

يوضّح هذا الدليل كيفية استخدام Whyhow.ai وMilvus Lite لإجراء الاسترجاع القائم على القواعد.

نظرة عامة

WhyHow عبارة عن منصة توفر للمطورين اللبنات الأساسية التي يحتاجونها لتنظيم البيانات غير المهيكلة ووضعها في سياقها واسترجاعها بشكل موثوق لإجراء الاسترجاع القائم على القواعد المعقدة. حزمة الاسترجاع المستند إلى القواعد هي حزمة Python تم تطويرها بواسطة WhyHow والتي تمكّن الأشخاص من إنشاء وإدارة تطبيقات الاسترجاع المعزز (RAG) مع إمكانات تصفية متقدمة.

التثبيت

قبل البدء، يرجى تثبيت جميع حزم بايثون الضرورية لاستخدامها لاحقًا.

pip install --upgrade pymilvus, whyhow_rbr

بعد ذلك، نحتاج إلى تهيئة عميل Milvus لتنفيذ الاسترجاع القائم على القواعد باستخدام Milvus Lite.

from pymilvus import MilvusClient

# Milvus Lite local path
path="./milvus_demo.db" # random name for local milvus lite db path

# Initialize the ClientMilvus
milvus_client = ClientMilvus(path)

يمكنك أيضًا تهيئة عميل Milvus من خلال Milvus Cloud

from pymilvus import MilvusClient

# Milvus Cloud credentials
YOUR_MILVUS_CLOUD_END_POINT = "YOUR_MILVUS_CLOUD_END_POINT"
YOUR_MILVUS_CLOUD_TOKEN = "YOUR_MILVUS_CLOUD_TOKEN"

# Initialize the ClientMilvus
milvus_client = ClientMilvus(
        milvus_uri=YOUR_MILVUS_CLOUD_END_POINT, 
        milvus_token=YOUR_MILVUS_CLOUD_TOKEN,
)

إنشاء مجموعة

تحديد المتغيرات الضرورية

# Define collection name
COLLECTION_NAME="YOUR_COLLECTION_NAME" # take your own collection name

# Define vector dimension size
DIMENSION=1536 # decide by the model you use

إضافة مخطط

قبل إدراج أي بيانات في قاعدة بيانات Milvus Lite، نحتاج أولاً إلى تحديد حقل البيانات، والذي يسمى المخطط هنا. من خلال إنشاء كائن CollectionSchema وإضافة حقل بيانات من خلال add_field() ، يمكننا التحكم في نوع البيانات وخصائصها. هذه الخطوة إلزامية قبل إدراج أي بيانات في ميلفوس.

schema = milvus_client.create_schema(auto_id=True) # Enable id matching

schema = milvus_client.add_field(schema=schema, field_name="id", datatype=DataType.INT64, is_primary=True)
schema = milvus_client.add_field(schema=schema, field_name="embedding", datatype=DataType.FLOAT_VECTOR, dim=DIMENSION)

إنشاء فهرس

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

# Start to indexing data field
index_params = milvus_client.prepare_index_params()
index_params = milvus_client.add_index(
    index_params=index_params,  # pass in index_params object
    field_name="embedding",
    index_type="AUTOINDEX",  # use autoindex instead of other complex indexing method
    metric_type="COSINE",  # L2, COSINE, or IP
)

هذه الطريقة عبارة عن غلاف رفيع حول تطبيق Milvus الرسمي(المستندات الرسمية).

إنشاء مجموعة

بعد تحديد جميع حقول البيانات وفهرستها، نحتاج الآن إلى إنشاء مجموعة قاعدة البيانات الخاصة بنا حتى نتمكن من الوصول إلى بياناتنا بسرعة ودقة. ما يجب ذكره هو أننا قمنا بتهيئة enable_dynamic_field ليكون صحيحًا حتى تتمكن من تحميل أي بيانات بحرية. التكلفة هي أن الاستعلام عن البيانات قد يكون غير فعال.

# Create Collection
milvus_client.create_collection(
    collection_name=COLLECTION_NAME,
    schema=schema,
    index_params=index_params
)

تحميل المستندات

بعد إنشاء مجموعة، نكون مستعدين لتعبئتها بالمستندات. في whyhow_rbr يتم ذلك باستخدام طريقة upload_documents من MilvusClient. يقوم بتنفيذ الخطوات التالية تحت الغطاء:

  • المعالجة المسبقة: قراءة ملفات PDF المتوفرة وتقسيمها إلى أجزاء
  • التضمين: تضمين جميع الأجزاء باستخدام نموذج OpenAI
  • التضمين: تحميل كل من التضمينات والبيانات الوصفية إلى Milvus Lite
# get pdfs
pdfs = ["harry-potter.pdf", "game-of-thrones.pdf"] # replace to your pdfs path

# Uploading the PDF document
milvus_client.upload_documents(
    collection_name=COLLECTION_NAME,
    documents=pdfs
)

الإجابة عن الأسئلة

يمكننا الآن الانتقال أخيرًا إلى التوليد المعزز للاسترجاع.

# Search data and implement RAG!
res = milvus_client.search(
    question='What food does Harry Potter like to eat?',
    collection_name=COLLECTION_NAME,
    anns_field='embedding',
    output_fields='text'
)
print(res['answer'])
print(res['matches'])

القواعد

في المثال السابق، تم النظر في كل مستند في فهرسنا. ومع ذلك، قد يكون من المفيد أحيانًا استرداد المستندات التي تستوفي بعض الشروط المحددة مسبقًا فقط (على سبيل المثال filename=harry-potter.pdf). في whyhow_rbr من خلال ميلفوس لايت، يمكن القيام بذلك من خلال ضبط معلمات البحث.

يمكن أن تتحكم القاعدة في سمات البيانات الوصفية التالية

  • filename اسم الملف
  • page_numbers قائمة الأعداد الصحيحة المقابلة لأرقام الصفحات (فهرسة 0)
  • id المعرف الفريد للقطعة (هذا هو المرشح الأكثر "تطرفًا")
  • قواعد أخرى تستند إلى تعبيرات منطقية
# RULES(search on book harry-potter on page 8):
PARTITION_NAME='harry-potter' # search on books
page_number='page_number == 8'

# first create a partitions to store the book and later search on this specific partition:
milvus_client.crate_partition(
    collection_name=COLLECTION_NAME,
    partition_name=PARTITION_NAME # separate base on your pdfs type
)

# search with rules
res = milvus_client.search(
    question='Tell me about the greedy method',
    collection_name=COLLECTION_NAME,
    partition_names=PARTITION_NAME,
    filter=page_number, # append any rules follow the Boolean Expression Rule
    anns_field='embedding',
    output_fields='text'
)
print(res['answer'])
print(res['matches'])

في هذا المثال، نقوم أولاً بإنشاء قسم لتخزين ملفات PDF ذات الصلة بـ harry-potter، ومن خلال البحث داخل هذا القسم، يمكننا الحصول على المعلومات الأكثر مباشرة. أيضًا، نطبّق أرقام الصفحات كمرشح لتحديد الصفحة التي نرغب في البحث عنها بالضبط. تذكّر، يجب أن تتبع معلمة عامل التصفية القاعدة المنطقية.

التنظيف

أخيرًا، بعد تنفيذ جميع التعليمات، يمكنك تنظيف قاعدة البيانات عن طريق الاتصال بـ drop_collection().

# Clean up
milvus_client.drop_collection(
    collection_name=COLLECTION_NAME
)

جرب Managed Milvus مجاناً

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

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

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