Milvus
Zilliz
  • Home
  • Blog
  • تقديم وظيفة التضمين: كيف يعمل ميلفوس 2.6 على تبسيط عملية التضمين والبحث الدلالي

تقديم وظيفة التضمين: كيف يعمل ميلفوس 2.6 على تبسيط عملية التضمين والبحث الدلالي

  • Engineering
December 03, 2025
Xuqi Yang

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

تتخذ الآنMilvus، قاعدة البيانات المتجهة مفتوحة المصدر عالية الأداء، خطوة كبيرة نحو تبسيط كل ذلك. يقدم الإصدار 2.6 من Milvus ميزة إدخال البيانات وإخراجها (المعروفة أيضًا باسم وظيفة التضمين)، وهي قدرة تضمين مدمجة تتصل مباشرةً بمزودي النماذج الرئيسيين مثل OpenAI و AWS Bedrock و Google Vertex AI و Hugging Face. بدلاً من إدارة البنية التحتية للتضمين الخاصة بك، يمكن لـ Milvus الآن استدعاء هذه النماذج نيابةً عنك. يمكنك أيضًا الإدراج والاستعلام باستخدام نص أولي - وقريبًا أنواع البيانات الأخرى - بينما يتعامل Milvus تلقائيًا مع التوجيه في وقت الكتابة والاستعلام.

في بقية هذا المنشور، سنلقي نظرة فاحصة على كيفية عمل Data-in، Data-out تحت الغطاء، وكيفية تكوين الموفرين ووظائف التضمين، وكيف يمكنك استخدامها لتبسيط سير عمل البحث المتجه من البداية إلى النهاية.

ما هو إدخال البيانات وإخراج البيانات؟

تم بناء Data-in، Data-out في Milvus 2.6 على وحدة الدالة الجديدة - وهو إطار عمل يمكّن Milvus من التعامل مع تحويل البيانات وتوليد التضمين داخليًا، دون أي خدمات خارجية للمعالجة المسبقة. (يمكنك متابعة اقتراح التصميم في إصدار GitHub رقم 35856.) باستخدام هذه الوحدة، يمكن ل Milvus أخذ بيانات المدخلات الخام، واستدعاء موفر التضمين مباشرة، وكتابة المتجهات الناتجة تلقائيًا في مجموعتك.

على مستوى عالٍ، تحوّل الوحدة النمطية الدالة توليد التضمين إلى قدرة قاعدة بيانات أصلية. فبدلاً من تشغيل خطوط أنابيب تضمين منفصلة، أو عمال في الخلفية، أو خدمات إعادة التضمين، ترسل Milvus الآن الطلبات إلى الموفر الذي تم تكوينه، وتسترجع التضمينات، وتخزنها إلى جانب بياناتك - كل ذلك داخل مسار الاستيعاب. هذا يزيل النفقات التشغيلية لإدارة البنية التحتية للتضمين الخاصة بك.

إدخال البيانات وإخراج البيانات يقدم ثلاثة تحسينات رئيسية لسير عمل Milvus:

  • إدراج البيانات الخام مباشرةً - يمكنك الآن إدراج نصوص أو صور أو أنواع بيانات أخرى غير معالجة مباشرةً في Milvus. لا حاجة لتحويلها إلى متجهات مسبقًا.

  • تكوين وظيفة تضمين واحدة - بمجرد تكوين نموذج التضمين في Milvus، فإنه يدير تلقائيًا عملية التضمين بأكملها. يتكامل Milvus بسلاسة مع مجموعة من موفري النماذج، بما في ذلك OpenAI و AWS Bedrock و Google Vertex AI و Cohere و Hugging Face.

  • الاستعلام باستخدام مدخلات أولية - يمكنك الآن إجراء بحث دلالي باستخدام نص أولي أو استعلامات أخرى قائمة على المحتوى. يستخدم Milvus نفس النموذج الذي تم تكوينه لتوليد التضمينات أثناء التنقل، وإجراء بحث التشابه، وإرجاع النتائج ذات الصلة.

باختصار، يقوم ميلفوس الآن بتضمين بياناتك تلقائيًا - وإعادة ترتيبها اختياريًا -. يصبح التضمين وظيفة مدمجة في قاعدة البيانات، مما يلغي الحاجة إلى خدمات التضمين الخارجية أو منطق المعالجة المسبقة المخصصة.

كيف يعمل إدخال البيانات وإخراج البيانات

يوضح الرسم البياني أدناه كيفية عمل Data-in، Data-out داخل Milvus.

يمكن تقسيم سير عمل إدخال البيانات وإخراج البيانات إلى ست خطوات رئيسية:

  1. بيانات الإدخال - يقوم المستخدم بإدخال البيانات الأولية - مثل النصوص أو الصور أو أنواع المحتوى الأخرى - مباشرةً في ملفوس دون إجراء أي معالجة مسبقة خارجية.

  2. توليد الت ضمينات - تستدعي وحدة الدالة تلقائيًا نموذج التضمين المكوّن من خلال واجهة برمجة التطبيقات الخارجية الخاصة بها، مما يحول المدخلات الأولية إلى تضمينات متجهة في الوقت الفعلي.

  3. تخزين التضمينات - تقوم Milvus بكتابة التضمينات التي تم إنشاؤها في حقل المتجه المخصص ضمن مجموعتك، حيث تصبح متاحة لعمليات البحث عن التشابه.

  4. إرسال استعلام - يقوم المستخدم بإصدار استعلام نصي خام أو استعلام قائم على المحتوى إلى Milvus، تمامًا كما هو الحال مع مرحلة الإدخال.

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

  6. إرجاع النتائج - تقوم Milvus بإرجاع النتائج الأكثر تشابهًا - المعينة إلى بياناتها الأصلية - مباشرةً إلى التطبيق.

كيفية تكوين إدخال البيانات وإخراج البيانات

المتطلبات الأساسية

  • تثبيت أحدث إصدار من ميلفوس 2.6.

  • قم بإعداد مفتاح واجهة برمجة تطبيقات التضمين من موفر مدعوم (مثل OpenAI أو AWS Bedrock أو Cohere). في هذا المثال، سنستخدم Cohere كموفر التضمين.

تعديل التكوين milvus.yaml

إذا كنت تقوم بتشغيل Milvus مع Docker Compose، فستحتاج إلى تعديل الملف milvus.yaml لتمكين الوحدة النمطية Function. يمكنك الرجوع إلى الوثائق الرسمية للحصول على إرشادات: تكوين ملف Milvus مع Docker Compose (يمكن أيضًا العثور على إرشادات لطرق النشر الأخرى هنا).

في ملف التكوين، حدد موقع القسمين credential و function.

ثم قم بتحديث الحقلين apikey1.apikey و providers.cohere.

...
credential:
  aksk1:
    access_key_id:  # Your access_key_id
    secret_access_key:  # Your secret_access_key
  apikey1:
    apikey: "***********************" # Edit this section
  gcp1:
    credential_json:  # base64 based gcp credential data
# Any configuration related to functions
function:
  textEmbedding:
    providers:
                        ...
      cohere: # Edit the section below
        credential:  apikey1 # The name in the crendential configuration item
        enable: true # Whether to enable cohere model service
        url:  "https://api.cohere.com/v2/embed" # Your cohere embedding url, Default is the official embedding url
      ...
...

بمجرد إجراء هذه التغييرات، أعد تشغيل ميلفوس لتطبيق التكوين المحدث.

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

1. تحديد المخطط الخاص بالمجموعة

لتمكين ميزة التضمين، يجب أن يتضمن مخطط مجموع تك ثلاثة حقول على الأقل:

  • حقل المفتاح الأساسي (id ) - يحدد بشكل فريد كل كيان في المجموعة.

  • الحقل القياسي (document ) - يخزن البيانات الأولية الأصلية.

  • حقل المتجه (dense ) - يخزن التضمينات المتجهة التي تم إنشاؤها.

from pymilvus import MilvusClient, DataType, Function, FunctionType
# Initialize Milvus client
client = MilvusClient(
    uri="http://localhost:19530",
)
# Create a new schema for the collection
schema = client.create_schema()
# Add primary field "id"
schema.add_field("id", DataType.INT64, is_primary=True, auto_id=False)
# Add scalar field "document" for storing textual data
schema.add_field("document", DataType.VARCHAR, max_length=9000)
# Add vector field "dense" for storing embeddings.
# IMPORTANT: Set `dim` to match the exact output dimension of the embedding model.
# For instance, OpenAI's text-embedding-3-small model outputs 1536-dimensional vectors.
# For dense vector, data type can be FLOAT_VECTOR or INT8_VECTOR
schema.add_field("dense", DataType.FLOAT_VECTOR, dim=1536) # Set dim according to the embedding model you use.

2. تعريف دالة التضمين

بعد ذلك، قم بتعريف دالة التضمين في المخطط.

  • name - معرف فريد للدالة.

  • function_type - يتم تعيينه على FunctionType.TEXTEMBEDDING لتضمينات النص. يدعم ميلفوس أيضًا أنواع الدوال الأخرى مثل FunctionType.BM25 و FunctionType.RERANK. راجع نظرة عامة على البحث عن النص الكامل وتضاؤل التصنيف لمزيد من التفاصيل.

  • input_field_names - يحدد حقل الإدخال للبيانات الأولية (document).

  • output_field_names - يحدد حقل الإخراج حيث سيتم تخزين التضمينات المتجهة (dense).

  • params - يحتوي على معلمات التكوين لدالة التضمين. يجب أن تتطابق قيم provider و model_name مع الإدخالات المقابلة في ملف التكوين milvus.yaml الخاص بك.

ملاحظة: يجب أن تحتوي كل دالة على name و output_field_names فريدة من نوعها للتمييز بين منطق التحويلات المختلفة ومنع التضارب.

# Define embedding function (example: OpenAI provider)
text_embedding_function = Function(
    name="cohere_embedding",                  # Unique identifier for this embedding function
    function_type=FunctionType.TEXTEMBEDDING, # Type of embedding function
    input_field_names=["document"],           # Scalar field to embed
    output_field_names=["dense"],             # Vector field to store embeddings
    params={                                  # Provider-specific configuration (highest priority)
        "provider": "cohere",                 # Embedding model provider
        "model_name": "embed-v4.0",     # Embedding model
        # "credential": "apikey1",            # Optional: Credential label
        # Optional parameters:
        # "dim": "1536",       # Optionally shorten the vector dimension
        # "user": "user123"    # Optional: identifier for API tracking
    }
)
# Add the embedding function to your schema
schema.add_function(text_embedding_function)

3. تكوين الفهرس

بمجرد تحديد الحقول والدوال، قم بإنشاء فهرس للمجموعة. للتبسيط، نستخدم نوع AUTOINDEX هنا كمثال.

# Prepare index parameters
index_params = client.prepare_index_params()
# Add AUTOINDEX to automatically select optimal indexing method
index_params.add_index(
    field_name="dense",
    index_type="AUTOINDEX",
    metric_type="COSINE" 
)

4. إنشاء المجموعة

استخدم المخطط والفهرس المحددين لإنشاء مجموعة جديدة. في هذا المثال، سننشئ مجموعة باسم Demo.

# Create collection named "demo"
client.create_collection(
    collection_name='demo', 
    schema=schema, 
    index_params=index_params
)

5. إدراج البيانات

يمكنك الآن إدراج البيانات الأولية مباشرةً في Milvus - لا حاجة لإنشاء تضمينات يدويًا.

# Insert sample documents
client.insert('demo', [
    {'id': 1, 'document': 'Milvus simplifies semantic search through embeddings.'},
    {'id': 2, 'document': 'Vector embeddings convert text into searchable numeric data.'},
    {'id': 3, 'document': 'Semantic search helps users find relevant information quickly.'},
])

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

# Perform semantic search
results = client.search(
    collection_name='demo', 
    data=['How does Milvus handle semantic search?'], # Use text query rather than query vector
    anns_field='dense',   # Use the vector field that stores embeddings
    limit=1,
    output_fields=['document'],
)
print(results)
# Example output:
# data: ["[{'id': 1, 'distance': 0.8821347951889038, 'entity': {'document': 'Milvus simplifies semantic search through embeddings.'}}]"]

لمزيد من التفاصيل حول البحث المتجه، انظر: البحث الأساسي عن المتجهات وواجهة برمجة تطبيقات الاستعلام.

ابدأ مع ميلفوس 2.6

من خلال إدخال البيانات وإخراج البيانات، يرتقي ميلفوس 2.6 ببساطة البحث المتجه إلى المستوى التالي. من خلال دمج وظائف التضمين وإعادة الترتيب مباشرةً داخل Milvus، لم تعد بحاجة إلى إدارة المعالجة المسبقة الخارجية أو الاحتفاظ بخدمات تضمين منفصلة.

هل أنت مستعد لتجربتها؟ قم بتثبيت Milvus 2.6 اليوم وجرّب بنفسك قوة تضمين البيانات وإخراجها.

هل لديك أسئلة أو تريد التعمق في أي ميزة؟ انضم إلى قناة Discord الخاصة بنا أو قم بتسجيل المشكلات على GitHub. يمكنك أيضًا حجز جلسة فردية مدتها 20 دقيقة للحصول على رؤى وإرشادات وإجابات لأسئلتك من خلال ساعات عمل Milvus المكتبية.

تعرف على المزيد حول ميزات Milvus 2.6

    Try Managed Milvus for Free

    Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

    Get Started

    Like the article? Spread the word

    استمر في القراءة