البرنامج التعليمي: استخدام جلسات مترجم التعليمات البرمجية في LangChain مع Azure Container Apps
LangChain هو إطار عمل مصمم لتبسيط إنشاء التطبيقات باستخدام نماذج اللغة الكبيرة (LLMs). عند إنشاء عامل الذكاء الاصطناعي باستخدام LangChain، تقوم LLM بتفسير إدخال المستخدم وإنشاء استجابة. غالبا ما يكافح عامل الذكاء الاصطناعي عندما يحتاج إلى إجراء المنطق الرياضي والرمزي لإنتاج استجابة. من خلال دمج جلسات عمل Azure Container Apps الديناميكية مع LangChain، فإنك تمنح العامل مترجم تعليمة برمجية لاستخدامه لأداء مهام متخصصة.
في هذا البرنامج التعليمي، ستتعلم كيفية تشغيل عامل الذكاء الاصطناعي LangChain في واجهة برمجة تطبيقات الويب. تقبل واجهة برمجة التطبيقات إدخال المستخدم وتعيد استجابة تم إنشاؤها بواسطة عامل الذكاء الاصطناعي. يستخدم العامل مترجم التعليمات البرمجية في جلسات عمل ديناميكية لإجراء العمليات الحسابية.
المتطلبات الأساسية
- حساب Azure مع اشتراك نشط.
- إذا لم يكن لديك مثل هذا الحساب، فيمكنك إنشاء واحد مجانًا.
- قم بتثبيت Azure CLI.
- Git.
- Python 3.10 أو أحدث.
إنشاء موارد Azure
يستخدم نموذج التطبيق في هذا التشغيل السريع LLM من Azure OpenAI. كما يستخدم جلسات عمل Azure Container Apps لتشغيل التعليمات البرمجية التي تم إنشاؤها بواسطة LLM.
تحديث Azure CLI إلى أحدث إصدار.
az upgrade
قم بإزالة ملحق Azure Container Apps إذا كان مثبتا بالفعل وقم بتثبيت إصدار معاينة ملحق Azure Container Apps الذي يحتوي على أوامر للجلسات:
az extension remove --name containerapp az extension add \ --name containerapp \ --allow-preview true -y
تسجيل الدخول إلى Azure:
az login
تعيين المتغيرات المستخدمة في هذا التشغيل السريع:
RESOURCE_GROUP_NAME=aca-sessions-tutorial AZURE_OPENAI_LOCATION=swedencentral AZURE_OPENAI_NAME=<UNIQUE_OPEN_AI_NAME> SESSION_POOL_LOCATION=eastasia SESSION_POOL_NAME=code-interpreter-pool
استبدل
<UNIQUE_OPEN_AI_NAME>
باسم فريد لإنشاء حساب Azure OpenAI الخاص بك.أنشئ مجموعة موارد:
az group create --name $RESOURCE_GROUP_NAME --location $SESSION_POOL_LOCATION
إنشاء حساب Azure OpenAI:
az cognitiveservices account create \ --name $AZURE_OPENAI_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --location $AZURE_OPENAI_LOCATION \ --kind OpenAI \ --sku s0 \ --custom-domain $AZURE_OPENAI_NAME
إنشاء نشر نموذج GPT 3.5 Turbo المسمى
gpt-35-turbo
في حساب Azure OpenAI:az cognitiveservices account deployment create \ --resource-group $RESOURCE_GROUP_NAME \ --name $AZURE_OPENAI_NAME \ --deployment-name gpt-35-turbo \ --model-name gpt-35-turbo \ --model-version "1106" \ --model-format OpenAI \ --sku-capacity "100" \ --sku-name "Standard"
إنشاء تجمع جلسة مترجم التعليمات البرمجية:
az containerapp sessionpool create \ --name $SESSION_POOL_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --location $SESSION_POOL_LOCATION \ --max-sessions 100 \ --container-type PythonLTS \ --cooldown-period 300
تشغيل نموذج التطبيق محليًا
قبل نشر التطبيق إلى Azure Container Apps، يمكنك تشغيله محليا لاختباره.
استنساخ التطبيق
استنساخ مستودع نماذج جلسات عمل Azure Container Apps.
git clone https://github.com/Azure-Samples/container-apps-dynamic-sessions-samples.git
قم بالتغيير إلى الدليل الذي يحتوي على نموذج التطبيق:
cd container-apps-dynamic-sessions-samples/langchain-python-webapi
تكوين التطبيق
إنشاء بيئة Python الظاهرية وتنشيطها:
python3.11 -m venv .venv source .venv/bin/activate
قم بتغيير إصدار Python في الأمر إذا كنت تستخدم إصدارا مختلفا. يوصى باستخدام Python 3.10 أو أحدث.
إشعار
إذا كنت تستخدم Windows، فاستبدل
.venv/bin/activate
ب.venv\Scripts\activate
.تثبيت حزم Python المطلوبة:
python -m pip install -r requirements.txt
لتشغيل التطبيق، تحتاج إلى تكوين متغيرات البيئة.
استرداد نقطة نهاية حساب Azure OpenAI:
az cognitiveservices account show \ --name $AZURE_OPENAI_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --query properties.endpoint \ --output tsv
استرداد نقطة نهاية إدارة تجمع جلسة عمل Azure Container Apps:
az containerapp sessionpool show \ --name $SESSION_POOL_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --query properties.poolManagementEndpoint \ --output tsv
.env
إنشاء ملف في جذر نموذج دليل التطبيق (نفس موقعmain.py
). أضف المحتوى التالي إلى الملف:AZURE_OPENAI_ENDPOINT=<AZURE_OPENAI_ENDPOINT> POOL_MANAGEMENT_ENDPOINT=<SESSION_POOL_MANAGEMENT_ENDPOINT>
استبدل
<AZURE_OPENAI_ENDPOINT>
بنقطة نهاية حساب Azure OpenAI ونقطة<SESSION_POOL_MANAGEMENT_ENDPOINT>
نهاية إدارة تجمع الجلسة.
يستخدم
DefaultAzureCredential
التطبيق للمصادقة مع خدمات Azure. على جهازك المحلي، يستخدم بيانات اعتماد تسجيل الدخول الحالية ل Azure CLI. يجب أن تمنح نفسك دور مستخدم OpenAI للخدمات المعرفية على حساب Azure OpenAI للتطبيق للوصول إلى نقاط نهاية النموذج، ودور Azure ContainerApps Session Executor في تجمع الجلسة للتطبيق للوصول إلى تجمع الجلسة.استرداد اسم مستخدم Azure CLI الخاص بك:
az account show --query user.name --output tsv
قم بتشغيل الأوامر التالية لاسترداد معرف مورد حساب Azure OpenAI:
az cognitiveservices account show --name $AZURE_OPENAI_NAME --resource-group $RESOURCE_GROUP_NAME --query id --output tsv
تعيين دور مستخدم OpenAI للخدمات المعرفية لمستخدم Azure CLI الخاص بك على حساب Azure OpenAI:
az role assignment create --role "Cognitive Services OpenAI User" --assignee <CLI_USERNAME> --scope <AZURE_OPENAI_RESOURCE_ID>
استبدل
<CLI_USERNAME>
باسم مستخدم Azure CLI ومعرف<AZURE_OPENAI_RESOURCE_ID>
مورد حساب Azure OpenAI.قم بتشغيل الأوامر التالية لاسترداد معرف مورد تجمع جلسة العمل:
az containerapp sessionpool show --name $SESSION_POOL_NAME --resource-group $RESOURCE_GROUP_NAME --query id --output tsv
تعيين دور منفذ جلسة عمل Azure ContainerApps باستخدام معرفه لمستخدم Azure CLI في تجمع الجلسة:
az role assignment create \ --role "Azure ContainerApps Session Executor" \ --assignee <CLI_USERNAME> \ --scope <SESSION_POOL_RESOURCE_ID>
استبدل
<CLI_USERNAME>
باسم مستخدم Azure CLI الخاص بك و<SESSION_POOL_RESOURCE_ID>
بمعرف مورد تجمع جلسة العمل.
تشغيل التطبيق
قبل تشغيل نموذج التطبيق، افتح main.py في محرر وراجع التعليمات البرمجية. يستخدم التطبيق FastAPI لإنشاء واجهة برمجة تطبيقات ويب تقبل رسالة مستخدم في سلسلة الاستعلام.
تنشئ الأسطر التالية من التعليمات البرمجية مثيل SessionPythonREPLTool وتوفرها إلى عامل LangChain:
repl = SessionsPythonREPLTool(pool_management_endpoint=pool_management_endpoint)
tools = [repl]
prompt = hub.pull("hwchase17/openai-functions-agent")
agent = agents.create_tool_calling_agent(llm, tools, prompt)
عندما يحتاج إلى إجراء عمليات حسابية، يستخدم العامل SessionPythonREPLTool لتشغيل التعليمات البرمجية. يتم تنفيذ التعليمات البرمجية في جلسة عمل في تجمع جلسة العمل. بشكل افتراضي، يتم إنشاء معرف جلسة عمل عشوائي عند إنشاء مثيل للأداة. إذا كان العامل يستخدم الأداة لتشغيل عدة قصاصات برمجية ل Python، فإنه يستخدم نفس جلسة العمل. للتأكد من أن كل مستخدم لديه جلسة عمل فريدة، استخدم وكيلا وأداة منفصلة لكل مستخدم.
SessionPythonREPLTool متوفر في الحزمة langchain-azure-dynamic-sessions
.
تشغيل نموذج التطبيق:
fastapi dev main.py
افتح مستعرض ويب وانتقل إلى
http://localhost:8000/docs
. ترى واجهة مستخدم Swagger لنموذج التطبيق.قم بتوسيع
/chat
نقطة النهاية وحدد Try it out.أدخل
What time is it right now?
فيmessage
الحقل وحدد Execute.يستجيب العامل بالوقت الحالي. في المحطة الطرفية، ترى السجلات التي تعرض تعليمة Python البرمجية التي أنشأها العامل للحصول على الوقت الحالي وتشغيله في جلسة مترجم التعليمات البرمجية.
لإيقاف التطبيق، أدخل
Ctrl+C
في المحطة الطرفية.
اختياري: نشر نموذج التطبيق إلى Azure Container Apps
لنشر تطبيق FastAPI إلى Azure Container Apps، تحتاج إلى إنشاء صورة حاوية ودفعها إلى سجل حاوية. ثم يمكنك نشر الصورة إلى Azure Container Apps. يجمع az containerapp up
الأمر بين هذه الخطوات في أمر واحد.
ثم تحتاج إلى تكوين الهوية المدارة للتطبيق وتعيين الأدوار المناسبة له للوصول إلى Azure OpenAI وتجمع الجلسة.
تعيين المتغيرات لبيئة تطبيقات الحاوية واسم التطبيق:
ENVIRONMENT_NAME=aca-sessions-tutorial-env CONTAINER_APP_NAME=chat-api
إنشاء التطبيق ونشره في Azure Container Apps:
az containerapp up \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --location $SESSION_POOL_LOCATION \ --environment $ENVIRONMENT_NAME \ --env-vars "AZURE_OPENAI_ENDPOINT=<OPEN_AI_ENDPOINT>" "POOL_MANAGEMENT_ENDPOINT=<SESSION_POOL_MANAGEMENT_ENDPOINT>" \ --source .
استبدل
<OPEN_AI_ENDPOINT>
بنقطة نهاية حساب Azure OpenAI ونقطة<SESSION_POOL_MANAGEMENT_ENDPOINT>
نهاية إدارة تجمع الجلسة.تمكين الهوية المدارة المعينة من قبل النظام للتطبيق:
az containerapp identity assign \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --system-assigned
لكي يتمكن التطبيق من الوصول إلى Azure OpenAI وتجمع الجلسة، تحتاج إلى تعيين الأدوار المناسبة للهوية المدارة.
استرداد المعرف الأساسي للهوية المدارة:
az containerapp show \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --query identity.principalId \ --output tsv
استرداد معرف مورد تجمع جلسة العمل:
az containerapp sessionpool show \ --name $SESSION_POOL_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --query id \ --output tsv
تعيين الهوية المدارة
Azure ContainerApps Session Executor
للأدوار وContributor
في تجمع الجلسة:قبل تشغيل الأمر التالي، استبدل
<PRINCIPAL_ID>
و<SESSION_POOL_RESOURCE_ID>
بالقيم التي قمت باستردادها في الخطوات السابقة.az role assignment create \ --role "Azure ContainerApps Session Executor" \ --assignee <PRINCIPAL_ID> \ --scope <SESSION_POOL_RESOURCE_ID> az role assignment create \ --role "Contributor" \ --assignee <PRINCIPAL_ID> \ --scope <SESSION_POOL_RESOURCE_ID>
استرداد معرف مورد حساب Azure OpenAI:
az cognitiveservices account show \ --name $AZURE_OPENAI_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --query id \ --output tsv
تعيين الهوية المدارة
Cognitive Services OpenAI User
الدور على حساب Azure OpenAI:قبل تشغيل الأمر التالي، استبدل
<PRINCIPAL_ID>
و<AZURE_OPENAI_RESOURCE_ID>
بالقيم التي قمت باستردادها في الخطوات السابقة.az role assignment create \ --role "Cognitive Services OpenAI User" \ --assignee <PRINCIPAL_ID> \ --scope <AZURE_OPENAI_RESOURCE_ID>
استرداد اسم المجال المؤهل بالكامل للتطبيق (FQDN):
az containerapp show \ --name $CONTAINER_APP_NAME \ --resource-group $RESOURCE_GROUP_NAME \ --query properties.configuration.ingress.fqdn \ --output tsv
افتح المستعرض
https://<FQDN>/docs
لاختبار التطبيق المنشور.
تنظيف الموارد
عند الانتهاء من الموارد، يمكنك حذفها لتجنب تكبد رسوم:
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait