page_type | اللغات | منتجات | urlfragment | اسم | وصف | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
عينة |
|
| Azure-search-openai-demo-csharp | ChatGPT + Enterprise Data (CSHARP) | تطبيق نموذج CSHARP الذي يتحدث مع بياناتك باستخدام Openai و AI Search. |
توضح هذه العينة بعض الأساليب لإنشاء تجارب تشبه ChatGPT على بياناتك الخاصة باستخدام نمط الجيل المعزز للاسترجاع. يستخدم خدمة Azure Openai للوصول إلى نموذج ChatGPT ( gpt-4o-mini
) ، و Azure AI البحث عن فهرسة البيانات واسترجاعها.
يتضمن repo بيانات عينة بحيث يكون جاهزًا لمحاولة نهاية إلى طرف. في هذا التطبيق ، نستخدم شركة وهمية تسمى Contoso Electronics ، وتسمح التجربة لموظفيها بطرح أسئلة حول الفوائد والسياسات الداخلية ، وكذلك الوصفات الوظيفية والأدوار.
لمزيد من التفاصيل حول كيفية بناء هذا التطبيق ، تحقق من:
نريد أن نسمع منك! هل أنت مهتم ببناء أو بناء تطبيقات ذكية حاليًا؟ يستغرق بضع دقائق لإكمال هذا الاستطلاع.
خذ المسح
من أجل نشر هذا المثال وتشغيله ، ستحتاج
Microsoft.Authorization/roleAssignments/write
Crite ، مثل مسؤول وصول المستخدم أو المالك. تحذير
بشكل افتراضي ، ستقوم هذه العينة بإنشاء تطبيق Azure Container ، ومورد بحث Azure AI الذي له تكلفة شهرية ، بالإضافة إلى مورد استخبارات Azure AI المستند الذي يكلف لكل صفحة الوثيقة. يمكنك تحويلها إلى إصدارات مجانية من كل منها إذا كنت ترغب في تجنب هذه التكلفة عن طريق تغيير ملف المعلمات ضمن مجلد Infra (على الرغم من أن هناك بعض الحدود التي يجب مراعاتها ؛ على سبيل المثال ، يمكنك الحصول على ما يصل إلى 1 مورد بحث AI AI مجاني لكل اشتراك ، ومورد ذكاء AZURE AI المجاني فقط يحلل أول صفحتين من كل وثيقة.)
يختلف التسعير لكل منطقة واستخدام ، لذلك لا يمكن التنبؤ بالتكاليف الدقيقة لاستخدامك. ومع ذلك ، يمكنك تجربة حاسبة تسعير Azure للموارد أدناه:
لتقليل التكاليف ، يمكنك التبديل إلى SKU المجاني لمختلف الخدمات ، ولكن هذه SKU لها قيود. راجع هذا الدليل حول النشر بأقل تكاليف لمزيد من التفاصيل.
azd down
.
لديك بعض الخيارات لإعداد هذا المشروع. أسهل طريقة للبدء هي مساحات GitHub CodeSpaces ، لأنها ستقوم بإعداد جميع الأدوات لك ، ولكن يمكنك أيضًا إعدادها محليًا إذا رغبت في ذلك.
يمكنك تشغيل هذا الريبو فعليًا باستخدام مساحات Github ، والتي ستفتح رمز VS المستند إلى الويب في متصفحك:
الخيار ذي الصلة هو VS Code Remote Containers ، والتي سيفتح المشروع في رمز VS المحلي باستخدام امتداد حاويات Dev:
تثبيت المتطلبات الأساسية التالية:
Azure Developer CLI
.NET 8
غيت
PowerShell 7+ (PWSH) - لمستخدمي Windows فقط.
مهم : تأكد من أنه يمكنك تشغيل
pwsh.exe
من أمر PowerShell. إذا فشل هذا ، فمن المحتمل أن تحتاج إلى ترقية PowerShell.
عامل ميناء
هام : تأكد من تشغيل Docker قبل تشغيل أي أوامر التوفير / النشر
azd
.
ثم ، قم بتشغيل الأوامر التالية للحصول على المشروع في بيئتك المحلية:
azd auth login
azd init -t azure-search-openai-demo-csharp
azd env new azure-search-openai-demo-csharp
البث المباشر: الانتشار من نقطة الصفر في CodeSpaces البث المباشر: الانتشار من نقطة الصفر في Windows 11
هام : تأكد من تشغيل Docker قبل تشغيل أي أوامر التوفير / النشر
azd
.
قم بتنفيذ الأمر التالي ، إذا لم يكن لديك أي خدمات Azure الموجودة مسبقًا وترغب في البدء من نشر جديد.
قم بتشغيل azd up
- سيؤدي ذلك إلى توفير موارد Azure ونشر هذه العينة على تلك الموارد ، بما في ذلك إنشاء فهرس البحث استنادًا إلى الملفات الموجودة في مجلد ./data
.
ملاحظة : يستخدم هذا التطبيق نموذج
gpt-4o-mini
. عند اختيار المنطقة التي يجب نشرها ، تأكد من توفرها في تلك المنطقة (أي Eastus). لمزيد من المعلومات ، راجع وثائق خدمة Azure Openai.
بعد نشر الطلب بنجاح ، سترى عنوان URL مطبوعًا على وحدة التحكم. انقر فوق عنوان URL هذا للتفاعل مع التطبيق في متصفحك.
سيبدو كما يلي:
[! ملاحظة]: قد يستغرق الأمر بضع دقائق حتى يتم نشر التطبيق بالكامل. بعد نشر التطبيق ، سيستغرق الأمر أيضًا بضع دقائق لمعالجة المستندات المراد إضافتها إلى قاعدة بيانات المتجه.
إذا كان لديك موارد موجودة في Azure ترغب في استخدامها ، فيمكنك تكوين azd
لاستخدامها عن طريق تعيين متغيرات البيئة azd
التالية:
azd env set AZURE_OPENAI_SERVICE {Name of existing OpenAI service}
azd env set AZURE_OPENAI_RESOURCE_GROUP {Name of existing resource group that OpenAI service is provisioned to}
azd env set AZURE_OPENAI_CHATGPT_DEPLOYMENT {Name of existing ChatGPT deployment}
. لا يلزم إلا إذا لم يكن نشر ChatGPT الخاص بك هو "الدردشة" الافتراضية.azd env set AZURE_OPENAI_EMBEDDING_DEPLOYMENT {Name of existing embedding model deployment}
. لا يلزم إلا إذا كان نشر نموذج التضمين الخاص بك ليس embedding
الافتراضي.azd up
ملحوظة
يمكنك أيضًا استخدام حسابات البحث والتخزين الحالية. انظر ./infra/main.parameters.json
للحصول على قائمة متغيرات البيئة لتمريرها إلى azd env set
لتكوين تلك الموارد الموجودة.
مهم
تأكد من تشغيل Docker قبل تشغيل أي أوامر التوفير / النشر azd
.
azd up
ملحوظة
تأكد من أن لديك ملفات BICEP المدعومة من AZD في مستودعك وإضافة ملف سير العمل الأولي لإجراءات GITHUB والذي يمكن إما تشغيله يدويًا (للنشر الأولي) أو على تغيير الكود (إعادة النشر تلقائيًا مع أبرز المعلمات الرئيسية للسماح بتجميع المباراة التي تتوافق معها.
"resourceGroupName" : {
"value" : " ${AZURE_RESOURCE_GROUP} "
}
"tags" : {
"value" : " ${AZURE_TAGS} "
}
param resourceGroupName string = ''
param tags string = ''
var baseTags = { 'azd-env-name' : environmentName }
var updatedTags = union ( empty ( tags ) ? {} : base64ToJson ( tags ), baseTags )
Make sure to use " updatedTags " when assigning " tags " to resource group created in your bicep file and update the other resources to use " baseTags " instead of " tags ". For example -
``` json
resource rg 'Microsoft.Resources/resourceGroups@2021-04-01' = {
name : ! empty ( resourceGroupName ) ? resourceGroupName : '${ abbrs . resourcesResourceGroups }${ environmentName }'
location : location
tags : updatedTags
}
مهم
تأكد من تشغيل Docker قبل تشغيل أي أوامر التوفير / النشر azd
.
قم بتشغيل azd auth login
بعد نشر التطبيق ، قم بتعيين متغير البيئة AZURE_KEY_VAULT_ENDPOINT
. يمكنك العثور على القيمة في ملف .azure/الخاص بك-name-name/.env أو بوابة Azure.
قم بتشغيل أمر .NET CLI لبدء تشغيل خادم API Core Core Minimal (مضيف العميل):
dotnet run --project ./app/backend/MinimalApi.csproj --urls=http://localhost:7181/
انتقل إلى http: // localhost: 7181 ، واختبار التطبيق.
تتضمن هذه العينة عميل .NET MAUI ، وتغليف التجربة كتطبيق يمكن تشغيله على سطح مكتب Windows/MacOS أو على أجهزة Android و iOS. يتم تنفيذ عميل MAUI هنا باستخدام Blazor Hybrid ، مما يتيح له مشاركة معظم التعليمات البرمجية مع الواجهة الأمامية لموقع الويب.
افتح التطبيق/App-maui.sln لفتح الحل الذي يتضمن عميل Maui
تحرير التطبيق/maui-blazor/mauiprogram.cs ، تحديث client.BaseAddress
.
إذا كانت تعمل في Azure ، فاستخدم عنوان URL للواجهة الخلفية للخدمة من الخطوات المذكورة أعلاه. إذا تم تشغيله محليًا ، فاستخدم http: // localhost: 7181.
اضبط Mauiblazor كمشروع بدء التشغيل وقم بتشغيل التطبيق
قم بتشغيل ما يلي إذا كنت ترغب في منح شخص آخر الوصول إلى البيئة المنتشرة والحالية.
azd init -t azure-search-openai-demo-csharp
azd env refresh -e {environment name}
- لاحظ أنه سيحتاج إلى اسم بيئة AZD ومعرف الاشتراك والموقع لتشغيل هذا الأمر - يمكنك العثور على هذه القيم في ملف ./azure/{env name}/.env
. سيؤدي ذلك إلى ملء ملف .env الخاص ببيئة AZD مع جميع الإعدادات اللازمة لتشغيل التطبيق محليًا.pwsh ./scripts/roles.ps1
- سيؤدي ذلك إلى تعيين جميع الأدوار اللازمة للمستخدم حتى يتمكنوا من تشغيل التطبيق محليًا. إذا لم يكن لديهم الإذن اللازم لإنشاء أدوار في الاشتراك ، فقد تحتاج إلى تشغيل هذا البرنامج النصي لهم. فقط تأكد من تعيين متغير البيئة AZURE_PRINCIPAL_ID
في ملف AZD .env أو في القشرة النشطة إلى معرف Azure ، والذي يمكنهم الحصول عليه مع az account show
. تشغيل azd down
azd
. تتم طباعة عنوان URL عند اكتمال azd
(كـ "نقطة النهاية") ، أو يمكنك العثور عليه في بوابة Azure.مرة واحدة في تطبيق الويب:
لتمكين رؤى التطبيق وتتبع كل طلب ، إلى جانب تسجيل الأخطاء ، قم بتعيين متغير AZURE_USE_APPLICATION_INSIGHTS
إلى صواب قبل تشغيل azd up
azd env set AZURE_USE_APPLICATION_INSIGHTS true
azd up
للاطلاع على بيانات الأداء ، انتقل إلى مورد Application Insights في مجموعة الموارد الخاصة بك ، انقر فوق شفرة "Investigate -> Performance" وانتقل إلى أي طلب HTTP لمعرفة بيانات التوقيت. لتفقد أداء طلبات الدردشة ، استخدم زر "الحفر في العينات" لرؤية آثار شاملة لجميع مكالمات API التي تم إجراؤها لأي طلب دردشة:
لرؤية أي استثناءات وأخطاء الخادم ، انتقل إلى شفرة "التحقيق -> الفشل" واستخدم أدوات التصفية لتحديد استثناء محدد. يمكنك رؤية آثار مكدس Python على الجانب الأيمن.
بشكل افتراضي ، لن يكون لتطبيق حاوية Azure المنشور أي قيود على المصادقة أو الوصول ، مما يعني أن أي شخص لديه الوصول إلى الشبكة القابل للتوجيه إلى تطبيق الحاوية يمكنه الدردشة مع بياناتك المفهرسة. يمكنك طلب المصادقة على Azure Active Directory من خلال اتباع برنامج Add Container Authentication Tutorial وإعداده مقابل تطبيق الحاوية المنشور.
للحد من الوصول إلى مجموعة معينة من المستخدمين أو المجموعات ، يمكنك متابعة الخطوات من تقييد تطبيق Azure AD الخاص بك إلى مجموعة من المستخدمين عن طريق تغيير "المهمة المطلوبة؟" الخيار ضمن تطبيق Enterprise ، ثم تعيين مستخدم/مجموعات الوصول. سيتلقى المستخدمون غير الممنوحين وصولًا صريحًا رسالة الخطأ -AADSTS50105: قام المسؤول الخاص بك بتكوين التطبيق <App_name> لمنع المستخدمين ما لم يتم منحهم على وجه التحديد ("مخصص") الوصول إلى التطبيق .-
مع GPT-4o-mini
، من الممكن دعم جيل معزز لإعادة التخصيب من خلال توفير النص والصورة كمحتوى مصدر. لتمكين دعم الرؤية ، تحتاج إلى تمكين USE_VISION
واستخدام نموذج GPT-4o
أو GPT-4o-mini
عند التوفير.
ملحوظة
ستحتاج إلى إعادة الفهرسة للمواد الداعمة وإعادة نشر التطبيق بعد تمكين دعم GPT-4O إذا كنت قد قمت بالفعل بنشر التطبيق من قبل. وذلك لأن تمكين دعم GPT-4O يتطلب إضافة حقول جديدة إلى فهرس البحث.
لتمكين دعم GPT-4V مع خدمة Azure Openai ، قم بتشغيل الأوامر التالية:
azd env set USE_VISION true
azd env set USE_AOAI true
azd env set AZURE_OPENAI_CHATGPT_MODEL_NAME gpt-4o-mini
azd env set AZURE_OPENAI_RESOURCE_LOCATION eastus # Please check the gpt model availability for more details.
azd up
لتمكين دعم الرؤية مع Openai ، قم بتشغيل الأوامر التالية:
azd env set USE_VISION true
azd env set USE_AOAI false
azd env set OPENAI_CHATGPT_DEPLOYMENT gpt-4o
azd up
لتنظيف الموارد التي تم نشرها مسبقًا ، قم بتشغيل الأمر التالي:
azd down --purge
azd env set AZD_PREPDOCS_RAN false # This is to ensure that the documents are re-indexed with the new fields.
إلى جانب النصائح أدناه ، يمكنك العثور على وثائق مكثفة في مجلد المستندات.
تم تصميم هذه العينة لتكون نقطة انطلاق لتطبيق الإنتاج الخاص بك ، ولكن يجب عليك إجراء مراجعة شاملة للأمان والأداء قبل الانتشار في الإنتاج. إليك بعض الأشياء التي يجب مراعاتها:
سعة Openai : تم تعيين TPM الافتراضي (الرموز في الدقيقة) على 30 ألف. أي ما يعادل حوالي 30 محادثات في الدقيقة (على افتراض 1K لكل رسالة/استجابة المستخدم). يمكنك زيادة القدرة عن طريق تغيير معلمات chatGptDeploymentCapacity
و embeddingDeploymentCapacity
في infra/main.bicep
إلى الحد الأقصى لحسابك. يمكنك أيضًا عرض علامة تبويب الحصص في Azure Openai Studio لفهم مقدار السعة التي لديك.
Azure Storage : يستخدم حساب التخزين الافتراضي SKU SKU Standard_LRS
. لتحسين مرونتك ، نوصي باستخدام Standard_ZRS
لنشرات الإنتاج ، والتي يمكنك تحديدها باستخدام خاصية sku
ضمن وحدة storage
في infra/main.bicep
.
Azure AI Search : إذا رأيت أخطاء حول سعة خدمة البحث التي يتم تجاوزها ، فقد تجد أنه من المفيد زيادة عدد النسخ المتماثلة عن طريق تغيير replicaCount
في infra/core/search/search-services.bicep
.
تطبيقات Azure Container : افتراضيًا ، ينشر هذا التطبيق حاويات مع 0.5 وحدة المعالجة المركزية و 1 جيجابايت من الذاكرة. الحد الأدنى للنسخ المتماثلة هو 1 و 10 كحد أقصى. بالنسبة لهذا التطبيق ، يمكنك تعيين قيم مثل containerCpuCoreCount
، containerMaxReplicas
، containerMemory
، containerMinReplicas
على infra/core/host/container-app.bicep
لتناسب احتياجاتك. يمكنك استخدام قواعد التقييم التلقائي أو قواعد التحجيم المجدولة ، وزيادة الحد الأقصى/الحد الأدنى بناءً على الحمل.
المصادقة : بشكل افتراضي ، يمكن الوصول إلى التطبيق المنشور للجمهور. نوصي بتقييد الوصول إلى المستخدمين المصادقين. انظر التمكين المصادقة أعلاه لكيفية تمكين المصادقة.
الشبكات : نوصي النشر داخل شبكة افتراضية. إذا كان التطبيق مخصصًا للاستخدام الداخلي للمؤسسات ، فاستخدم منطقة DNS خاصة. فكر أيضًا في استخدام Azure API Management (APIM) لجدران الحماية وأشكال الحماية الأخرى. لمزيد من التفاصيل ، اقرأ Azure Openai Landing Zone Reference.
LoadTesting : نوصي بتشغيل اختبار التحميل لعدد المستخدمين المتوقعين.
Azure.AI.OpenAI
حزمة nugetملحوظة
تحتوي مستندات PDF المستخدمة في هذا العرض التوضيحي على معلومات تم إنشاؤها باستخدام نموذج لغة (خدمة Azure Openai). المعلومات الواردة في هذه الوثائق هي فقط لأغراض التوضيح ولا تعكس آراء أو معتقدات Microsoft. لا تقدم Microsoft أي تعهدات أو ضمانات من أي نوع ، صريحة أو ضمنية ، حول الاكتمال أو الدقة أو الموثوقية أو الملاءمة أو التوفر فيما يتعلق بالمعلومات الواردة في هذا المستند. جميع الحقوق محفوظة لمايكروسوفت.
سؤال : لماذا نحتاج إلى تقسيم ملفات PDF إلى قطع عندما يدعم بحث Azure AI البحث عن مستندات كبيرة؟
الإجابة : يتيح لنا chunking الحد من كمية المعلومات التي نرسلها إلى Openai بسبب حدود الرمز المميز. من خلال تفكيك المحتوى ، يتيح لنا العثور بسهولة على أجزاء نصية محتملة يمكننا حقنها في Openai. تُستثمر طريقة الضبط التي نستخدمها نافذة نصية من النص بحيث ستبدأ الجمل التي تنتهي من قطعة واحدة. هذا يتيح لنا تقليل فرصة فقدان السياق.