توضح هذه العينة بعض الأساليب لإنشاء تجارب تشبه ChatGPT على بياناتك الخاصة باستخدام نمط الجيل المعزز للاسترجاع. يستخدم خدمة Azure Openai للوصول إلى نموذج ChatGPT (GPT-35-TURBO) ، و Azure AI البحث عن فهرسة البيانات واسترجاعها.
يتضمن repo بيانات عينة بحيث يكون جاهزًا لمحاولة النهاية إلى النهاية. في هذا التطبيق ، نستخدم شركة وهمية تسمى Contoso Real Estate ، وتسمح التجربة لعملائها بطرح أسئلة الدعم حول استخدام منتجاتها. تتضمن بيانات العينة مجموعة من المستندات التي تصف شروط الخدمة وسياسة الخصوصية ودعم الدعم.
التطبيق مصنوع من مكونات متعددة ، بما في ذلك:
شاهد نظرة عامة على الفيديو للتطبيق
هام: من أجل نشر هذه العينة وتشغيلها ، ستحتاج إلى:
Microsoft.Authorization/roleAssignments/write
أذونات ، مثل مسؤول التحكم في الوصول القائم على الأدوار ، أو مسؤول وصول المستخدم ، أو المالك. إذا لم يكن لديك أذونات على مستوى الاشتراك ، فيجب منحها لك مع RBAC لمجموعة موارد موجودة ونشرها على تلك المجموعة الحالية.Microsoft.Resources/deployments/write
على مستوى الاشتراك. قد يختلف التسعير لكل منطقة واستخدام. لا يمكن تقدير التكاليف الدقيقة. يمكنك تجربة حاسبة تسعير Azure للموارد أدناه.
azd down --purge
.
هناك طرق متعددة لإعداد هذا المشروع بنجاح.
أسهل طريقة للبدء هي مع Github CodeSpaces التي توفر عمليات تكوين مسبقة لإعداد جميع الأدوات لك. اقرأ المزيد أدناه. بدلاً من ذلك ، يمكنك إعداد بيئتك المحلية في تعليمات أدناه.
يمكنك تشغيل هذا الريبو فعليًا باستخدام مساحات Github ، والتي ستفتح رمز VS المستند إلى الويب في متصفحك:
هناك خيار مماثل لأماكن الترميز هو VS Code Remote Containers ، والتي ستفتح المشروع في مثيل Code المحلي VS باستخدام ملحق حاويات Dev:
pwsh.exe
من أمر PowerShell. إذا فشل هذا ، فمن المحتمل أن تحتاج إلى ترقية PowerShell.ثم احصل على رمز المشروع:
azd auth login
azd init -t azure-search-openai-javascript
قم بتنفيذ الأمر التالي ، إذا لم يكن لديك أي خدمات Azure الموجودة مسبقًا وترغب في البدء من نشر جديد.
azd up
- سيؤدي ذلك إلى توفير موارد Azure ونشر هذه العينة على تلك الموارد ، بما في ذلك إنشاء فهرس البحث استنادًا إلى الملفات الموجودة في مجلد ./data
.eastus2
. يمكنك تعيين موقع مختلف مع azd env set AZURE_OPENAI_RESOURCE_GROUP_LOCATION {location}
. حاليا يتم قبول قائمة قصيرة فقط من المواقع. تعتمد قائمة الموقع هذه على جدول توافر طراز Openai وقد تصبح قديمة مع تغييرات التوفر.eastus2
. يمكنك تعيين موقع مختلف مع azd env set AZURE_WEBAPP_LOCATION {location}
. حاليا يتم قبول قائمة قصيرة فقط من المواقع. لاحظ أن تطبيق الويب الثابت هو خدمة عالمية ، والموقع الذي تختاره سيؤثر فقط على تطبيق الوظائف المدارة غير المستخدم في هذه العينة.سيبدو كما يلي:
ملاحظة: قد يستغرق الأمر أكثر من 15 دقيقة حتى يتم نشر التطبيق بالكامل.
إذا كان لديك بالفعل موارد Azure الموجودة ، فيمكنك إعادة استخدامها عن طريق تعيين قيم البيئة azd
.
azd env set AZURE_RESOURCE_GROUP {Name of existing resource group}
azd env set AZURE_LOCATION {Location of existing resource group}
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 GPT embedding deployment}
. لا يلزم إلا إذا لم يكن نشر التضمين الخاص بك هو "التضمين" الافتراضي. azd env set AZURE_SEARCH_SERVICE {Name of existing Azure AI Search service}
azd env set AZURE_SEARCH_SERVICE_RESOURCE_GROUP {Name of existing resource group with ACS service}
azd up
، فتشغيل azd env set AZURE_SEARCH_SERVICE_LOCATION {Location of existing service}
azd env set AZURE_SEARCH_SERVICE_SKU {Name of SKU}
. لن تعمل الطبقة المجانية لأنها لا تدعم الهوية المدارة. (انظر القيم الأخرى المحتملة) يمكنك أيضًا استخدام حساب تخزين موجود. انظر ./infra/main.parameters.json
للحصول على قائمة متغيرات البيئة لتمريرها إلى azd env set
لتكوين تلك الموارد الموجودة.
يمكنك الآن تشغيل azd up
، باتباع الخطوات في النشر من الصفر أعلاه. سيؤدي ذلك إلى توفير الموارد ونشر الرمز.
إذا قمت فقط بتغيير رمز الواجهة الخلفية/الواجهة الأمامية في مجلد app
، فلن تحتاج إلى إعادة تقديم موارد Azure. يمكنك فقط الجري:
azd deploy
إذا قمت بتغيير ملفات البنية التحتية (مجلد infra
أو azure.yaml
) ، فستحتاج إلى إعادة تقديم موارد Azure. يمكنك القيام بذلك عن طريق الجري:
azd up
لمنح شخص آخر إمكانية الوصول إلى بيئة تم نشرها بالكامل وحالية ، إما أن تتبع هذه الخطوات:
azd init -t azure-search-openai-javascript
أو استنساخ هذا المستودع.azd env refresh -e {environment name}
سيحتاجون إلى اسم بيئة AZD ومعرف الاشتراك والموقع لتشغيل هذا الأمر. يمكنك العثور على هذه القيم في ملف .azure/{env name}/.env
. سيؤدي ذلك إلى ملء ملف .env
الخاص ببيئة AZD مع جميع الإعدادات اللازمة لتشغيل التطبيق محليًا.AZURE_PRINCIPAL_ID
إما في ملف .env
أو في القشرة النشطة إلى معرف Azure الخاص بهم ، والذي يمكنهم الحصول عليه مع az ad signed-in-user show
../scripts/roles.ps1
أو ./scripts/roles.sh
لتعيين جميع الأدوار اللازمة للمستخدم. إذا لم يكن لديهم الإذن اللازم لإنشاء أدوار في الاشتراك ، فقد تحتاج إلى تشغيل هذا البرنامج النصي لهم. بمجرد تشغيل البرنامج النصي ، يجب أن يكونوا قادرين على تشغيل التطبيق محليًا. لتنظيف جميع الموارد التي أنشأتها هذه العينة:
azd down --purge
y
y
سيتم حذف مجموعة الموارد وجميع الموارد.
بشكل افتراضي ، لن يكون لتمكين تطبيق Azure Web الذي تم نشره أي قيود على المصادقة أو الوصول إلى الوصول ، مما يعني أن أي شخص لديه وصول شبكة قابل للتوجيه إلى تطبيق الويب يمكنه الدردشة مع بياناتك المفهرسة. يمكنك طلب المصادقة على معرف Azure Entra من خلال اتباع برنامج Add App Application Tutorial وإعداده مقابل تطبيق الويب الذي تم نشره.
للحد من الوصول إلى مجموعة محددة من المستخدمين أو المجموعات ، يمكنك متابعة الخطوات من تقييد تطبيق Azure Entra الخاص بك إلى مجموعة من المستخدمين عن طريق تغيير "المهمة المطلوبة؟" الخيار ضمن تطبيق Enterprise ، ثم تعيين مستخدم/مجموعات الوصول. سيتلقى المستخدمون غير الممنوحين وصولًا صريحًا رسالة الخطأ -AADSTS50105: قام المسؤول الخاص بك بتكوين التطبيق <App_name> لمنع المستخدمين ما لم يتم منحهم على وجه التحديد ("مخصص") الوصول إلى التطبيق .-
نوصي بنشر آليات أمنية إضافية. عند الاقتضاء ، فكر في إعداد VNET أو إعداد سياسة الوكيل.
بشكل افتراضي ، لن تسمح واجهة برمجة تطبيقات البحث المنتشرة إلا بطلبات من نفس الأصل مثل أصل تطبيق الويب المنشور. لتمكين الكورس للواجهة الأمامية المستضافة على أصل مختلف ، قم بتشغيل:
azd env set ALLOWED_ORIGIN https://<your-domain.com>
azd up
لا يمكنك التشغيل محليًا إلا بعد تشغيل أمر azd up
بنجاح.
azd auth login
azd env get-values > .env
للحصول على متغيرات البيئة للتطبيقaz login
npm start
أو قم بتشغيل "VS Code Task: START APP" لبدء المشروع محليًا. مرة واحدة في تطبيق الويب:
تقوم خدمة Search API بتنفيذ بروتوكول HTTP لتطبيقات الدردشة AI. يمكن تبديله بأي خدمة تنفذ نفس البروتوكول ، مثل عميل Python الخلفي في هذا المستودع بدلاً من تطبيق Node.js الواردة في هذا الريبو.
للقيام بذلك ، اتبع هذه الخطوات:
azd env get-values | grep WEBAPP_URI
للحصول على عنوان URL.http://localhost:5173
.https://<your_codespace_base_url>-5173.app.github.dev
.azd env set ALLOWED_ORIGIN <your_frontend_url>
.azd env get-values | grep BACKEND_URI
.azd env set BACKEND_URI <your_backend_url>
. إذا كنت ترغب في استخدام تطبيق الويب الذي تم نشره ، فقم بتشغيل azd up
لإعادة النشر.
إذا كنت ترغب في استخدام تطبيق الويب المحلي على جهازك أو في مساحات الترميز ، قم بتشغيله:
# Export the environment variable.
# The syntax may be different depending on your shell or if you're using Windows.
export BACKEND_URI= < your_backend_url >
# Start the app
npm start --workspace=webapp
تتكون هذه العينة من اثنين من التطبيقات: خدمة الخلفية وواجهة برمجة التطبيقات ، التي يتم نشرها في تطبيقات حاوية Azure ، وتطبيق الواجهة الأمامية ، تم نشرها في تطبيقات الويب الثابتة Azure. بشكل افتراضي ، لن يكون لتطبيق حاوية Azure المنشور أي قيود على المصادقة أو الوصول ، مما يعني أن أي شخص لديه الوصول إلى الشبكة القابل للتوجيه إلى تطبيق الحاوية يمكنه الدردشة مع بياناتك المفهرسة. يمكنك طلب المصادقة لمعرف Azure Entra من خلال اتباع البرنامج التعليمي لمصادقة تطبيق الحاوية وإعداده مقابل تطبيق Azure Container المنشور.
للحد من الوصول إلى مجموعة معينة من المستخدمين أو المجموعات ، يمكنك متابعة الخطوات من تقييد تطبيق Azure Entra الخاص بك إلى مجموعة من المستخدمين عن طريق تغيير "المهمة المطلوبة؟" الخيار ضمن تطبيق Enterprise ، ثم تعيين مستخدم/مجموعات الوصول. سيتلقى المستخدمون غير الممنوحين وصولًا صريحًا رسالة الخطأ -AADSTS50105: قام المسؤول الخاص بك بتكوين التطبيق <App_name> لمنع المستخدمين ما لم يتم منحهم على وجه التحديد ("مخصص") الوصول إلى التطبيق .-
تم تصميم هذه العينة لتكون نقطة انطلاق لتطبيق الإنتاج الخاص بك ، ولكن يجب عليك إجراء مراجعة شاملة للأمان والأداء قبل الانتشار في الإنتاج. إليك بعض الأشياء التي يجب مراعاتها:
chatGptDeploymentCapacity
و embeddingDeploymentCapacity
في infra/main.bicep
إلى الحد الأقصى لحسابك. يمكنك أيضًا عرض علامة تبويب الحصص في Azure Openai Studio لفهم مقدار السعة التي لديك.Standard_LRS
. لتحسين مرونتك ، نوصي باستخدام Standard_ZRS
لنشرات الإنتاج ، والتي يمكنك تحديدها باستخدام خاصية sku
ضمن وحدة storage
في infra/main.bicep
.Standard
مع خيار البحث الدلالي المجاني ، والذي يمنحك 1000 استعلامات مجانية في الشهر. على افتراض أن تطبيقك سيختبر أكثر من 1000 سؤال ، يجب عليك إما تغيير semanticSearch
إلى "قياسي" أو تعطيل البحث الدلالي بالكامل في خيارات الطلب. إذا رأيت أخطاء حول سعة خدمة البحث التي يتم تجاوزها ، فقد تجد أنه من المفيد زيادة عدد النسخ المتماثلة عن طريق تغيير replicaCount
في infra/core/search/search-services.bicep
.يتيح لنا Chunking الحد من كمية المعلومات التي نرسلها إلى Openai بسبب حدود الرمز المميز. من خلال تفكيك المحتوى ، يتيح لنا العثور بسهولة على أجزاء نصية محتملة يمكننا حقنها في Openai. تُستثمر طريقة الضبط التي نستخدمها نافذة نصية من النص بحيث ستبدأ الجمل التي تنتهي من قطعة واحدة. هذا يتيح لنا تقليل فرصة فقدان السياق.
لتحميل المزيد من المستندات ، ضعها في البيانات/المجلد وتشغيلها ./scripts/index-data.sh
أو ./scripts/index-data.ps1
.
مستودع شائع آخر لحالة الاستخدام هذه هنا: https://github.com/microsoft/sample-app-aoai-chatgpt/
تم تصميم هذا المستودع للاستخدام من قبل العملاء باستخدام Azure Openai Studio و Azure Portal للإعداد. ويشمل أيضًا دعم azd
للأشخاص الذين يرغبون في نشره تمامًا من الصفر.
الاختلافات الأساسية:
مقارنة الميزة:
ميزة | Azure-Search-Openai-JavaScript | عينة-APP-AOAI-CHATGPT |
---|---|---|
نهج خرقة | مقاربات متعددة | فقط عبر chatcompletion API Data_sources |
دعم المتجهات | ✅ نعم | ✅ نعم |
ابتلاع البيانات | ✅ نعم (MD) | ✅ نعم (PDF ، TXT ، MD ، HTML) |
تاريخ الدردشة المستمر | لا (علامة التبويب المتصفح فقط) | ✅ نعم ، في cosmosdb |
مقارنة التكنولوجيا:
التكنولوجيا | Azure-Search-Openai-JavaScript | عينة-APP-AOAI-CHATGPT |
---|---|---|
الواجهة | رد فعل/مضاءة | رد فعل |
الخلفية | node.js (fastify) | بيثون (قارورة) |
ناقل DB | Azure AI Search | Azure AI Search |
النشر | مطور Azure CLI (AZD) | Azure Portal ، AZ ، AZD |
تشغيل هذه الأوامر:
azd env set AZURE_OPENAI_CHATGPT_MODEL gpt-4
قد تحتاج أيضًا إلى ضبط السعة في ملف infra/main.bicep
، اعتمادًا على مقدار TPM المسموح به.
تستخدم علامة تبويب الدردشة النهج المبرمج في قراءة القراءة. تستخدم علامة التبويب ASK النهج المبرمج في Ask-Retrive-then-read.ts. هناك أيضًا نهج آخر/أسأل متاح ، [باستخدام وكيل] (https://github.com/azure-samples/azure-search-openai-javascript/blob/main/packages/search/src/lib/approachs/ask-read-read-read.ts.
يأتي أمر azd up
من مطور Azure CLI ، ويعتني بتوفير موارد Azure ونشر الرمز إلى مضيفي Azure المحددين.
يستخدم أمر azd up
ملف azure.yaml
مع ملفات .bicep
في infra/
. يعلن ملف azure.yaml
لهذا المشروع عدة "خطافات" لخطوات Prep -Bired و PostProvision. يقوم الأمر up
أولاً بتشغيل خطاف prepackage
الذي يقوم بتثبيت تبعيات العقدة وإنشاء ملفات JavaScript المستندة إلى React.js. ثم يقوم بتعبئة جميع الكود (كل من خدمات الواجهة الأمامية والخلفية) في ملف zip الذي سيتم نشره لاحقًا.
بعد ذلك ، يحدد تكنولوجيا المعلومات الموارد القائمة على main.bicep
و main.parameters.json
. عند هذه النقطة ، نظرًا لعدم وجود قيمة افتراضية لموقع Openai Resource ، يطلب منك اختيار موقع من قائمة قصيرة من المناطق المتاحة. ثم سترسل طلبات إلى Azure لتوفير جميع الموارد المطلوبة. مع كل شيء يتم توفيره ، يقوم بتشغيل خطاف postprovision
لمعالجة البيانات المحلية وإضافته إلى مؤشر بحث Azure AI.
أخيرًا ، ينظر إلى azure.yaml
لتحديد مضيف Azure (تطبيقات الحاويات وتطبيقات الويب الثابتة ، في هذه الحالة) وتحميل Zip إلى Azure App Service. اكتمل الآن أمر azd up
، ولكن قد يستغرق الأمر بضع دقائق حتى يتوفر التطبيق بالكامل والعمل بعد النشر الأولي.
الأوامر ذات الصلة هي azd provision
لتوفير فقط (إذا تغيرت ملفات INFRA) azd deploy
لنشر رمز التطبيق المحدث فقط.
فيما يلي سيناريوهات وحلول الفشل الأكثر شيوعًا:
لا يمكن للاشتراك ( AZURE_SUBSCRIPTION_ID
) الوصول إلى خدمة Azure Openai. يرجى التأكد من مطابقة AZURE_SUBSCRIPTION_ID
معرف المعرف المحدد في عملية طلب الوصول إلى Openai.
أنت تحاول إنشاء موارد في المناطق التي لم يتم تمكينها من Azure Openai (على سبيل المثال East US 2 بدلاً من شرق الولايات المتحدة) ، أو حيث لم يتم تمكين النموذج الذي تحاول استخدامه. انظر هذه المصفوفة من توافر النموذج.
لقد تجاوزت الحصة ، وغالبًا ما تكون عدد الموارد لكل منطقة. انظر هذا المقال عن الحصص والحدود.
أنت تحصل على "نفس اسم المورد غير مسموح به". هذا على الأرجح لأنك قمت بتشغيل العينة عدة مرات وحذفت الموارد التي قمت بإنشائها في كل مرة ، لكنك تنسى تطهيرها. Azure يحتفظ بالموارد لمدة 48 ساعة إلا إذا قمت بتطهيرها من الحذف الناعم. انظر هذا المقال عن تطهير الموارد.
بعد تشغيل azd up
وزيارة الموقع ، ترى "404 غير موجود" في المتصفح. انتظر 10 دقائق وحاول مرة أخرى ، لأنه قد لا يزال يبدأ. ثم حاول تشغيل azd deploy
وانتظر مرة أخرى. إذا كنت لا تزال تواجه أخطاء في التطبيق المنشور ، فاستشر هذه النصائح لنشر تطبيقات تطبيقات تطبيقات تطبيق الأخطاء وقم بتقديم مشكلة إذا كانت سجلات الأخطاء لا تساعدك في حل المشكلة.
ستحصل على خطأ 401 Principal does not have access to API/Operation
أثناء تشغيل المشروع محليًا أو محاولة النشر. هذا على الأرجح لأن متغيرات البيئة الخاصة بك تشمل AZURE_TENANT_ID
، AZURE_CLIENT_ID
و AZURE_CLIENT_SECRET
. يجب عليك إما منح أذونات إلى مدير الخدمة ذات الصلة أو إزالة هذه المتغيرات من بيئتك لضمان الوصول الطبيعي. لمزيد من التفاصيل ، يرجى الرجوع إلى Azure Identity SDK.
ملاحظة: تحتوي المستندات المستخدمة في هذا العرض على معلومات تم إنشاؤها باستخدام نموذج لغة (خدمة Azure Openai). المعلومات الواردة في هذه الوثائق هي فقط لأغراض التوضيح ولا تعكس آراء أو معتقدات Microsoft. لا تقدم Microsoft أي تعهدات أو ضمانات من أي نوع ، صريحة أو ضمنية ، حول الاكتمال أو الدقة أو الموثوقية أو الملاءمة أو التوفر فيما يتعلق بالمعلومات الواردة في هذا المستند. جميع الحقوق محفوظة لمايكروسوفت.