إنشاء استعلام متجه في Azure الذكاء الاصطناعي Search

في Azure الذكاء الاصطناعي Search، إذا كان لديك حقول متجهات في فهرس بحث، تشرح هذه المقالة كيفية:

تستخدم هذه المقالة REST للتوضيح. للحصول على نماذج التعليمات البرمجية بلغات أخرى، راجع مستودع GitHub azure-search-vector-samples للحلول الشاملة التي تتضمن استعلامات المتجهات.

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

تلميح

لتحديد ما إذا كان الفهرس يحتوي على متجهات بسرعة، ابحث عن حقول من النوع Collection(Edm.Single)، مع سمة vectorSearchProfiledimensions، وتعيين.

تحويل إدخال سلسلة استعلام إلى متجه

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

يمكنك العثور على نماذج التعليمات البرمجية التي توضح كيفية إنشاء تضمينات في مستودع azure-search-vector-samples .

فيما يلي مثال واجهة برمجة تطبيقات REST لسلسلة استعلام تم إرسالها إلى نشر نموذج تضمين Azure OpenAI:

POST https://{{openai-service-name}}.openai.azure.com/openai/deployments/{{openai-deployment-name}}/embeddings?api-version={{openai-api-version}}
Content-Type: application/json
api-key: {{admin-api-key}}
{
    "input": "what azure services support generative AI'"
}

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

تتضمن الاستجابة الفعلية لاستدعاء POST هذا إلى النموذج المنشور 1536 تضمينا، تم اقتطاعها هنا إلى المتجهات القليلة الأولى فقط لقابلية القراءة.

{
    "object": "list",
    "data": [
        {
            "object": "embedding",
            "index": 0,
            "embedding": [
                -0.009171937,
                0.018715322,
                ...
                -0.0016804502
            ]
        }
    ],
    "model": "ada",
    "usage": {
        "prompt_tokens": 7,
        "total_tokens": 7
    }
}

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

تلميح

جرب Query with integrated vectorization، حاليا في المعاينة العامة، لجعل Azure الذكاء الاصطناعي Search يعالج مدخلات ومخرجات تحويل الاستعلام.

طلب استعلام متجه

يوضح لك هذا القسم البنية الأساسية لاستعلام متجه. يمكنك استخدام مدخل Microsoft Azure أو واجهات برمجة تطبيقات REST أو Azure SDKs لصياغة استعلام متجه. إذا كنت تقوم بالترحيل من 2023-07-01-Preview، فهناك تغييرات فاصلة. راجع الترقية إلى أحدث واجهة برمجة تطبيقات REST للحصول على التفاصيل.

2023-11-01 هو إصدار REST API المستقر ل Search POST. يدعم هذا الإصدار:

  • vectorQueries هو بناء للبحث عن المتجهات.
  • kind تعيين إلى vector تحديد أن الاستعلام عبارة عن صفيف متجه.
  • vector هو الاستعلام (تمثيل متجه لنص أو صورة).
  • exhaustive (اختياري) استدعاء KNN شاملة في وقت الاستعلام، حتى إذا تمت فهرسة الحقل ل HNSW.

في المثال التالي، المتجه هو تمثيل لهذه السلسلة: "ما تدعم خدمات Azure البحث عن النص الكامل". يستهدف contentVector الاستعلام الحقل. يقوم الاستعلام بإرجاع k النتائج. يحتوي المتجه الفعلي على 1536 تضمينا، لذلك يتم اقتطاعه في هذا المثال لسهولة القراءة.

POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2023-11-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
    "count": true,
    "select": "title, content, category",
    "vectorQueries": [
        {
            "kind": "vector",
            "vector": [
                -0.009154141,
                0.018708462,
                . . . 
                -0.02178128,
                -0.00086512347
            ],
            "exhaustive": true,
            "fields": "contentVector",
            "k": 5
        }
    ]
}

استجابة استعلام المتجه

في Azure الذكاء الاصطناعي Search، تتكون استجابات الاستعلام من جميع retrievable الحقول بشكل افتراضي. ومع ذلك، من الشائع قصر نتائج البحث على مجموعة فرعية من retrievable الحقول عن طريق سردها في عبارة select .

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

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

{
    "@odata.count": 3,
    "value": [
        {
            "@search.score": 0.80025613,
            "title": "Azure Search",
            "category": "AI + Machine Learning",
            "contentVector": [
                -0.0018343845,
                0.017952163,
                0.0025753193,
                ...
            ]
        },
        {
            "@search.score": 0.78856903,
            "title": "Azure Application Insights",
            "category": "Management + Governance",
            "contentVector": [
                -0.016821077,
                0.0037742127,
                0.016136652,
                ...
            ]
        },
        {
            "@search.score": 0.78650564,
            "title": "Azure Media Services",
            "category": "Media",
            "contentVector": [
                -0.025449317,
                0.0038463024,
                -0.02488436,
                ...
            ]
        }
    ]
}

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

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

  • @search.score يتم تحديد بواسطة خوارزمية البحث المتجه.

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

استعلام متجه مع عامل تصفية

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

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

تلميح

إذا لم يكن لديك حقول مصدر ذات قيم نصية أو رقمية، فتحقق من بيانات تعريف المستند، مثل خصائص LastModified أو CreatedBy، التي قد تكون مفيدة في عامل تصفية بيانات التعريف.

2023-11-01 هو الإصدار الثابت لواجهة برمجة التطبيقات هذه. يحتوي على:

في المثال التالي، المتجه هو تمثيل لسلسلة الاستعلام هذه: "ما تدعم خدمات Azure البحث عن النص الكامل". يستهدف contentVector الاستعلام الحقل. يحتوي المتجه الفعلي على 1536 تضمينا، لذلك يتم اقتطاعه في هذا المثال لسهولة القراءة.

يتم تطبيق معايير التصفية على حقل نصي قابل للتصفية (category في هذا المثال) قبل أن ينفذ محرك البحث استعلام المتجه.

POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2023-11-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
    "count": true,
    "select": "title, content, category",
    "filter": "category eq 'Databases'",
    "vectorFilterMode": "preFilter",
    "vectorQueries": [
        {
            "kind": "vector",
            "vector": [
                -0.009154141,
                0.018708462,
                . . . 
                -0.02178128,
                -0.00086512347
            ],
            "exhaustive": true,
            "fields": "contentVector",
            "k": 5
        }
    ]
}

حقول متجهات متعددة

يمكنك تعيين الخاصية "vectorQueries.fields" إلى حقول متجهات متعددة. يتم تنفيذ استعلام المتجه مقابل كل حقل متجه توفره في fields القائمة. عند الاستعلام عن حقول متجهات متعددة، تأكد من أن كل حقل يحتوي على تضمينات من نفس نموذج التضمين، وأن الاستعلام يتم إنشاؤه أيضا من نفس نموذج التضمين.

POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2023-11-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
    "count": true,
    "select": "title, content, category",
    "vectorQueries": [
        {
            "kind": "vector",
            "vector": [
                -0.009154141,
                0.018708462,
                . . . 
                -0.02178128,
                -0.00086512347
            ],
            "exhaustive": true,
            "fields": "contentVector, titleVector",
            "k": 5
        }
    ]
}

استعلامات متجهات متعددة

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

يبحث مثال الاستعلام التالي عن التشابه في كل من myImageVector و myTextVector، ولكنه يرسل في تضمينين مختلفين للاستعلام على التوالي، كل منهما يتم تنفيذه بالتوازي. ينتج عن هذا الاستعلام نتيجة تم تسجيلها باستخدام Fusion Rank Fusion (RRF).

  • vectorQueries يوفر صفيفا من استعلامات المتجهات.
  • vector يحتوي على متجهات الصور ومتجهات النص في فهرس البحث. كل مثيل هو استعلام منفصل.
  • fields يحدد حقل المتجه المراد استهدافه.
  • k هو عدد أقرب تطابقات جار لتضمينها في النتائج.
{
    "count": true,
    "select": "title, content, category",
    "vectorQueries": [
        {
            "kind": "vector",
            "vector": [
                -0.009154141,
                0.018708462,
                . . . 
                -0.02178128,
                -0.00086512347
            ],
            "fields": "myimagevector",
            "k": 5
        },
        {
            "kind": "vector"
            "vector": [
                -0.002222222,
                0.018708462,
                -0.013770515,
            . . .
            ],
            "fields": "mytextvector",
            "k": 5
        }
    ]
}

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

استعلام مع متجهات متكاملة (معاينة)

يعرض هذا القسم استعلام متجه يستدعي ميزة معاينة المتجهات المتكاملة الجديدة التي تحول استعلام نص إلى متجه. استخدم واجهة برمجة تطبيقات REST 2023-10-01-Preview أو حزمة Azure SDK بيتا محدثة.

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

توفر الاستعلامات سلاسل نصية بدلا من المتجهات:

  • kind يجب تعيين إلى text .
  • text يجب أن يكون لديك سلسلة نصية. يتم تمريره إلى المتجه المعين لحقل المتجه.
  • fields هو حقل المتجه للبحث.

فيما يلي مثال بسيط على استعلام تم تحويله في وقت الاستعلام. يتم تحويل السلسلة النصية ثم استخدامها للاستعلام عن حقل descriptionVector.

POST https://{{search-service}}.search.windows.net/indexes/{{index}}/docs/search?api-version=2023-10-01-preview
{
    "select": "title, genre, description",
    "vectorQueries": [
        {
            "kind": "text",
            "text": "mystery novel set in London",
            "fields": "descriptionVector",
            "k": 5
        }
    ]
}

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

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

POST https://{{search-service}}.search.windows.net/indexes/{{index}}/docs/search?api-version=2023-10-01-preview
Content-Type: application/json
api-key: {{admin-api-key}}
{
    "search":"mystery novel set in London", 
    "searchFields":"description, synopsis", 
    "semanticConfiguration":"my-semantic-config", 
    "queryType":"semantic",
    "select": "title, author, synopsis",
    "filter": "genre eq 'mystery'",
    "vectorFilterMode": "postFilter",
    "vectorQueries": [
        {
            "kind": "text",
            "text": "mystery novel set in London",
            "fields": "descriptionVector, synopsisVector",
            "k": 5
        },
        {
            "kind": "text"
            "text": "living english author",
            "fields": "authorBioVector",
            "k": 5
        }
    ]
}

يتم دمج النتائج المسجلة من جميع الاستعلامات الأربعة باستخدام ترتيب RRF. يتم استدعاء الترتيب الدلالي الثانوي على نتائج البحث المدمجة، ولكن على searchFields فقط، تعزيز النتائج التي هي الأكثر محاذاة دلالية إلى "search":"mystery novel set in London".

إشعار

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

كمية النتائج المصنفة في استجابة استعلام متجه

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

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

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

تتضمن معلمات الاستعلام التي تؤثر على عدد النتائج ما يلي:

  • "k": n نتائج استعلامات المتجهات فقط
  • "top": n نتائج الاستعلامات المختلطة التي تتضمن معلمة "بحث"

كل من "k" و"top" اختيارية. غير محدد، العدد الافتراضي للنتائج في الاستجابة هو 50. يمكنك تعيين "أعلى" و"تخطي" إلى صفحة من خلال المزيد من النتائج أو تغيير الافتراضي.

خوارزميات الترتيب المستخدمة في استعلام متجه

يتم حساب ترتيب النتائج إما من خلال:

  • مقياس التشابه
  • دمج الرتبة المتبادلة (RRF) إذا كانت هناك مجموعات متعددة من نتائج البحث.

مقياس التشابه

مقياس التشابه المحدد في قسم الفهرس vectorSearch لاستعلام متجه فقط. القيم الصالحة هي cosine و euclidean و dotProduct.

تستخدم نماذج تضمين Azure OpenAI التشابه التمام، لذلك إذا كنت تستخدم نماذج تضمين Azure OpenAI، cosine فهو المقياس الموصى به. تتضمن euclidean مقاييس الترتيب المدعومة الأخرى و dotProduct.

استخدام RRF

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

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

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

كخطوة تالية، راجع أمثلة التعليمات البرمجية لاستعلام المتجهات في Python أو C#‎ أو JavaScript.