إنشاء مخزن متجهات

في Azure الذكاء الاصطناعي Search، يحتوي مخزن المتجهات على مخطط فهرس يحدد الحقول المتجهة وغير الوسيطة، وتكوين متجه للخوارزميات التي تنشئ مساحة التضمين، وإعدادات على تعريفات حقول المتجهات المستخدمة في طلبات الاستعلام. تنشئ واجهة برمجة تطبيقات Create Index مخزن المتجهات.

اتبع هذه الخطوات لفهرسة بيانات المتجهات:

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

إشعار

هل تبحث عن إرشادات الترحيل من 2023-07-01-preview؟ راجع ترقية واجهات برمجة تطبيقات REST.

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

  • Azure الذكاء الاصطناعي Search، في أي منطقة وعلى أي مستوى. تدعم معظم الخدمات الموجودة البحث عن المتجهات. بالنسبة للخدمات التي تم إنشاؤها قبل يناير 2019، هناك مجموعة فرعية صغيرة لا يمكنها دعم البحث في المتجهات. إذا فشل إنشاء فهرس يحتوي على حقول متجهات أو تحديثه، فهذا مؤشر. في هذه الحالة، يجب إنشاء خدمة جديدة.

  • تضمينات المتجهات الموجودة مسبقا في مستندات المصدر. لا ينشئ Azure الذكاء الاصطناعي Search متجهات في الإصدار المتوفر بشكل عام من Azure SDKs وواجهات برمجة تطبيقات REST. نوصي بتضمين نماذج Azure OpenAI ولكن يمكنك استخدام أي نموذج للتوجهات. لمزيد من المعلومات، راجع إنشاء عمليات تضمين.

  • يجب أن تعرف حد أبعاد النموذج المستخدم لإنشاء التضمينات وكيفية حساب التشابه. في Azure OpenAI، بالنسبة إلى text-embedding-ada-002، يبلغ طول المتجه الرقمي 1536. يتم حساب التشابه باستخدام cosine. تتراوح القيم الصالحة من 2 إلى 3072 بعدا.

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

إعداد المستندات للفهرسة

قبل الفهرسة، قم بتجميع حمولة مستند تتضمن حقولا من البيانات المتجهة والبيانات غير الخاصة بالعوامل. يجب أن تتوافق بنية المستند مع مخطط الفهرس.

تأكد من مستنداتك:

  1. توفير حقل أو خاصية بيانات تعريف تعرف كل مستند بشكل فريد. تتطلب جميع فهارس البحث مفتاح مستند. لتلبية متطلبات مفتاح المستند، يجب أن يحتوي المستند المصدر على حقل أو خاصية واحدة يمكنها تعريفه بشكل فريد في الفهرس. يجب تعيين حقل المصدر هذا إلى حقل فهرس من النوع Edm.String وفي key=true فهرس البحث.

  2. توفير بيانات المتجهات (صفيف من أرقام النقاط العائمة أحادية الدقة) في حقول المصدر.

    تحتوي حقول المتجهات على بيانات رقمية تم إنشاؤها عن طريق تضمين النماذج، وتضمين واحد لكل حقل. نوصي بتضمين النماذج في Azure OpenAI، مثل text-embedding-ada-002 للمستندات النصية أو واجهة برمجة تطبيقات REST لاسترداد الصور للصور. يتم دعم حقول المتجهات ذات المستوى الأعلى للفهرس فقط: الحقول الفرعية المتجهة غير مدعومة حاليا.

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

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

يوجد مثال قصير لحمولة المستندات التي تتضمن الحقول المتجهة وغير الخاصة في قسم بيانات متجه التحميل في هذه المقالة.

إضافة تكوين بحث متجه

يحدد تكوين المتجه خوارزمية البحث عن المتجهات والمعلمات المستخدمة أثناء الفهرسة لإنشاء معلومات "أقرب جار" بين العقد المتجهة:

  • عالم صغير قابل للتنقل الهرمي (HNSW)
  • اسم الشبكة KNN الشاملة

إذا اخترت HNSW في حقل، يمكنك الاشتراك في KNN شاملة في وقت الاستعلام. ولكن الاتجاه الآخر لن يعمل: إذا اخترت شامل، فلا يمكنك طلب بحث HNSW لاحقا لأن بنيات البيانات الإضافية التي تمكن البحث التقريبي غير موجودة.

هل تبحث عن إرشادات ترحيل الإصدار من معاينة إلى مستقرة؟ راجع ترقية واجهات برمجة تطبيقات REST للحصول على الخطوات.

يدعم إصدار REST API 2023-11-01 تكوين متجه يحتوي على:

  • vectorSearch الخوارزميات وأقرب hnswexhaustiveKnn الجيران، مع معلمات للفهرسة وتسجيل النقاط.
  • vectorProfiles لمجموعات متعددة من تكوينات الخوارزمية.

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

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

  2. أضف مقطعا vectorSearch في الفهرس يحدد خوارزميات البحث المستخدمة لإنشاء مساحة التضمين.

     "vectorSearch": {
         "algorithms": [
             {
                 "name": "my-hnsw-config-1",
                 "kind": "hnsw",
                 "hnswParameters": {
                     "m": 4,
                     "efConstruction": 400,
                     "efSearch": 500,
                     "metric": "cosine"
                 }
             },
             {
                 "name": "my-hnsw-config-2",
                 "kind": "hnsw",
                 "hnswParameters": {
                     "m": 8,
                     "efConstruction": 800,
                     "efSearch": 800,
                     "metric": "cosine"
                 }
             },
             {
                 "name": "my-eknn-config",
                 "kind": "exhaustiveKnn",
                 "exhaustiveKnnParameters": {
                     "metric": "cosine"
                 }
             }
    
         ],
         "profiles": [
           {
             "name": "my-default-vector-profile",
             "algorithm": "my-hnsw-config-2"
           }
         ]
     }
    

    النقاط الرئيسية:

    • اسم التكوين. يجب أن يكون الاسم فريدا داخل الفهرس.
    • profiles إضافة طبقة من التجريد لاستيعاب تعريفات أكثر ثراء. يتم تعريف ملف تعريف في vectorSearch، ثم تتم الإشارة إليه بالاسم في كل حقل متجه.
    • "hnsw" وهي "exhaustiveKnn" خوارزميات أقرب الجيران (ANN) التقريبية المستخدمة لتنظيم محتوى المتجهات أثناء الفهرسة.
    • "m" (عدد الارتباطات ثنائية الاتجاه) الافتراضي هو 4. النطاق من 4 إلى 10. يجب أن ترجع القيم الأقل ضوضاء أقل في النتائج.
    • "efConstruction" الافتراضي هو 400. النطاق من 100 إلى 1000. إنه عدد أقرب الجيران المستخدمين أثناء الفهرسة.
    • "efSearch" الافتراضي هو 500. النطاق من 100 إلى 1000. إنه عدد أقرب الجيران المستخدمة أثناء البحث.
    • "metric" يجب أن يكون "جيب التمام" إذا كنت تستخدم Azure OpenAI، وإلا فاستخدم مقياس التشابه المقترن بنموذج التضمين الذي تستخدمه. القيم المدعومة هي cosine، ، dotProduct. euclidean

إضافة حقل متجه إلى مجموعة الحقول

يجب أن تتضمن مجموعة الحقول حقلا لمفتاح المستند وحقول المتجهات وأي حقول أخرى تحتاجها لسيناريوهات البحث المختلط.

حقول المتجهات من النوع Collection(Edm.Single) وقيم الفاصلة العائمة أحادية الدقة. يحتوي حقل من هذا النوع أيضا على dimensions خاصية ويحدد تكوين متجه.

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

  1. استخدم فهرس إنشاء أو تحديث لإنشاء الفهرس.

  2. تعريف حقل متجه بالسمات التالية. يمكنك تخزين تضمين واحد تم إنشاؤه لكل حقل. لكل حقل متجه:

    • typeيجب أن يكونCollection(Edm.Single).
    • dimensions هو عدد الأبعاد التي تم إنشاؤها بواسطة نموذج التضمين. بالنسبة إلى text-embedding-ada-002، إنها 1536.
    • vectorSearchProfile هو اسم ملف تعريف معرف في مكان آخر في الفهرس.
    • searchable يجب أن يكون صحيحا.
    • retrievable يمكن أن يكون صحيحا أو خاطئا. ترجع True المتجهات الأولية (1536 منها) كنص عادي وتستهلك مساحة التخزين. اضبط على true إذا كنت تمرر نتيجة متجه إلى تطبيق انتقال البيانات من الخادم.
    • filterablesortable، facetableيجب أن تكون خاطئة.
  3. أضف حقولا غير قابلة للتصفية إلى المجموعة، مثل "العنوان" مع filterable تعيين إلى صحيح، إذا كنت تريد استدعاء التصفية المسبقة أو التصفية اللاحقةعلى استعلام المتجه.

  4. أضف حقولا أخرى تحدد جوهر المحتوى النصي الذي تقوم بفهرسته وبنيته. كحد أدنى، تحتاج إلى مفتاح مستند.

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

    يوضح المثال التالي مجموعة الحقول:

    PUT https://my-search-service.search.windows.net/indexes/my-index?api-version=2023-11-01&allowIndexDowntime=true
    Content-Type: application/json
    api-key: {{admin-api-key}}
    {
        "name": "{{index-name}}",
        "fields": [
            {
                "name": "id",
                "type": "Edm.String",
                "key": true,
                "filterable": true
            },
            {
                "name": "title",
                "type": "Edm.String",
                "searchable": true,
                "filterable": true,
                "sortable": true,
                "retrievable": true
            },
            {
                "name": "titleVector",
                "type": "Collection(Edm.Single)",
                "searchable": true,
                "retrievable": true,
                "dimensions": 1536,
                "vectorSearchProfile": "my-default-vector-profile"
            },
            {
                "name": "content",
                "type": "Edm.String",
                "searchable": true,
                "retrievable": true
            },
            {
                "name": "contentVector",
                "type": "Collection(Edm.Single)",
                "searchable": true,
                "retrievable": true,
                "dimensions": 1536,
                "vectorSearchProfile": "my-default-vector-profile"
            }
        ],
        "vectorSearch": {
            "algorithms": [
                {
                    "name": "my-hnsw-config-1",
                    "kind": "hnsw",
                    "hnswParameters": {
                        "m": 4,
                        "efConstruction": 400,
                        "efSearch": 500,
                        "metric": "cosine"
                    }
                }
            ],
            "profiles": [
                {
                    "name": "my-default-vector-profile",
                    "algorithm": "my-hnsw-config-1"
                }
            ]
        }
    }
    

تحميل بيانات المتجهات للفهرسة

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

يمكنك استخدام منهجيات الدفع أو السحب لاستيعاب البيانات.

استخدم مستندات الفهرس (2023-11-01) أو مستندات الفهرس (2023-10-01-Preview) أو إضافة مستندات أو تحديثها أو حذفها (2023-07-01-Preview) لدفع المستندات التي تحتوي على بيانات المتجهات.

POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/index?api-version=2023-11-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
    "value": [
        {
            "id": "1",
            "title": "Azure App Service",
            "content": "Azure App Service is a fully managed platform for building, deploying, and scaling web apps. You can host web apps, mobile app backends, and RESTful APIs. It supports a variety of programming languages and frameworks, such as .NET, Java, Node.js, Python, and PHP. The service offers built-in auto-scaling and load balancing capabilities. It also provides integration with other Azure services, such as Azure DevOps, GitHub, and Bitbucket.",
            "category": "Web",
            "titleVector": [
                -0.02250031754374504,
                 . . . 
                        ],
            "contentVector": [
                -0.024740582332015038,
                 . . .
            ],
            "@search.action": "upload"
        },
        {
            "id": "2",
            "title": "Azure Functions",
            "content": "Azure Functions is a serverless compute service that enables you to run code on-demand without having to manage infrastructure. It allows you to build and deploy event-driven applications that automatically scale with your workload. Functions support various languages, including C#, F#, Node.js, Python, and Java. It offers a variety of triggers and bindings to integrate with other Azure services and external services. You only pay for the compute time you consume.",
            "category": "Compute",
            "titleVector": [
                -0.020159931853413582,
                . . .
            ],
            "contentVector": [
                -0.02780858241021633,
                 . . .
            ],
            "@search.action": "upload"
        }
        . . .
    ]
}

التحقق من الفهرس بحثا عن محتوى متجه

لأغراض التحقق من الصحة، يمكنك الاستعلام عن الفهرس باستخدام Search Explorer في مدخل Microsoft Azure أو استدعاء REST API. نظرا لأن Azure الذكاء الاصطناعي Search لا يمكنه تحويل خط متجه إلى نص قابل للقراءة من قبل الإنسان، فحاول إرجاع الحقول من المستند نفسه الذي يوفر دليلا على المطابقة. على سبيل المثال، إذا كان استعلام المتجه يستهدف حقل "titleVector"، يمكنك تحديد "العنوان" لنتائج البحث.

يجب أن تعزى الحقول على أنها "قابلة للاسترداد" ليتم تضمينها في النتائج.

يمكنك استخدام "مستكشف البحث" للاستعلام عن فهرس. يحتوي مستكشف البحث على عرضين: طريقة عرض الاستعلام (افتراضي) وطريقة عرض JSON.

  • استخدم طريقة عرض JSON لاستعلامات المتجهات، والصق تعريف JSON لاستعلام المتجه الذي تريد تنفيذه.

  • استخدم طريقة عرض الاستعلام الافتراضية للتأكيد السريع على أن الفهرس يحتوي على متجهات. طريقة عرض الاستعلام هي للبحث عن النص الكامل. على الرغم من أنه لا يمكنك استخدامه لاستعلامات المتجهات، يمكنك إرسال بحث فارغ (search=*) للتحقق من وجود محتوى. يتم إرجاع محتوى كافة الحقول، بما في ذلك حقول المتجهات، كنص عادي.

تحديث مخزن متجهات

لتحديث مخزن متجهات، قم بتعديل المخطط، وإذا لزم الأمر، أعد تحميل المستندات لملء حقول جديدة. تتضمن واجهات برمجة التطبيقات لتحديثات المخطط إنشاء أو تحديث الفهرس (REST)، وCreateOrUpdateIndex في Azure SDK ل .NET، create_or_update_index في Azure SDK ل Python، وأساليب مشابهة في Azure SDKs الأخرى.

يتم تغطية الإرشادات القياسية لتحديث فهرس في Drop وإعادة إنشاء فهرس.

وتشمل النقاط الرئيسية ما يلي:

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

  • ومع ذلك، يمكنك تحديث مخطط موجود بالتعديلات التالية، دون الحاجة إلى إعادة إنشاء:

    • إضافة حقول جديدة إلى مجموعة حقول.
    • إضافة تكوينات متجهات جديدة، تم تعيينها إلى حقول جديدة ولكن ليس الحقول الموجودة التي تم تحويلها بالفعل.
    • تغيير "قابل للاسترداد" (القيم صحيحة أو خاطئة) في حقل موجود. يجب أن تكون حقول المتجهات قابلة للبحث والاسترداد، ولكن إذا كنت تريد تعطيل الوصول إلى حقل متجه في الحالات التي لا يكون فيها الإفلات وإعادة البناء ممكنا، يمكنك تعيين قابل للاسترداد إلى خطأ.

الخطوات التالية

كخطوة تالية، نوصي باستخدام بيانات متجه الاستعلام في فهرس البحث.

توضح نماذج التعليمات البرمجية في مستودع azure-search-vector مهام سير العمل الشاملة التي تتضمن تعريف المخطط، والتحزيم المتجه، والفهرسة، والاستعلامات.

هناك تعليمة برمجية تجريبية ل Python وC# وJavaScript.