{"id":76892,"date":"2024-09-16T07:04:35","date_gmt":"2024-09-16T03:34:35","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/"},"modified":"2024-09-16T07:04:35","modified_gmt":"2024-09-16T03:34:35","slug":"securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/","title":{"rendered":"\u0627\u062a\u0635\u0627\u0644 \u0627\u06cc\u0645\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0628\u0647 Azure OpenAI \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631"},"content":{"rendered":"<p>Summarize this content to 400 words in Persian Lang<br \/>\n            \u0627\u0645\u0631\u0648\u0632\u060c \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u0645 \u062f\u0648 \u0646\u06a9\u062a\u0647 \u06a9\u0644\u06cc\u062f\u06cc \u0631\u0627 \u0627\u0632 \u0648\u0631\u0648\u062f\u06cc \u00ab\u0627\u062a\u0635\u0627\u0644 \u0627\u06cc\u0645\u0646 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0628\u0647 Azure OpenAI \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a\u200c\u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631\u00bb \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u0628\u06af\u0630\u0627\u0631\u0645:<\/p>\n<p>\u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u062c\u0627\u0648\u0627 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0628\u062f\u0648\u0646 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u0633\u0627\u0632\u06cc<br \/>\n\u0627\u062a\u0635\u0627\u0644 \u0627\u06cc\u0645\u0646 \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0628\u0647 Azure OpenAI \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631<\/p>\n<p>\u06a9\u062f \u0645\u0646\u0628\u0639 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0634\u062f\u0647 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0631\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646 \u062f\u0631 \u0645\u062e\u0632\u0646 GitHub \u0632\u06cc\u0631 \u06cc\u0627\u0641\u062a.GitHub: Secure-OpenAI-Java-App-on-Azure-Container-Apps<\/p>\n<p>  1. \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u062c\u0627\u0648\u0627 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0628\u062f\u0648\u0646 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u0633\u0627\u0632\u06cc<\/p>\n<p>\u062f\u0631 11 \u0633\u067e\u062a\u0627\u0645\u0628\u0631 2024\u060c \u0627\u0639\u0644\u0627\u0645\u06cc\u0647 &#8220;\u0627\u0639\u0644\u0627\u0645 \u062f\u0633\u062a\u0631\u0633\u06cc \u0639\u0645\u0648\u0645\u06cc \u062a\u062c\u0631\u0628\u06cc\u0627\u062a \u062c\u0627\u0648\u0627 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure&#8221; \u0645\u0646\u062a\u0634\u0631 \u0634\u062f.<\/p>\n<p>\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u0645\u0631\u0648\u0631 \u06a9\u0644\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u062c\u0627\u0648\u0627 \u062f\u0631 Azure \u062a\u0648\u0636\u06cc\u062d \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u062c\u0627\u0648\u0627 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0627\u0641\u0632\u0627\u06cc\u0634 \u06cc\u0627\u0641\u062a\u0647 \u0627\u0633\u062a. \u0628\u0631\u0627\u06cc \u0645\u062b\u0627\u0644\u060c Azure Container Apps \u0627\u06a9\u0646\u0648\u0646 \u0627\u0632 \u0627\u062c\u0632\u0627\u06cc Spring \u0632\u06cc\u0631 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u062e\u062f\u0645\u0627\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<p>\u0633\u0631\u0648\u0631 Eureka \u0628\u0631\u0627\u06cc \u0628\u0647\u0627\u0631<br \/>\n\u0633\u0631\u0648\u0631 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0628\u0631\u0627\u06cc Spring<br \/>\n\u0627\u062f\u0645\u06cc\u0646 \u0628\u0631\u0627\u06cc \u0628\u0647\u0627\u0631<\/p>\n<p>\u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646\u060c \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 Quickstart: Launch Your First Java Application in Azure Container Apps \u062a\u0648\u0636\u06cc\u062d \u062f\u0627\u062f\u0647 \u0634\u062f\u060c Azure Container Apps \u0627\u06a9\u0646\u0648\u0646 \u0648\u06cc\u0698\u06af\u06cc \u062c\u062f\u06cc\u062f\u06cc \u0628\u0647 \u0646\u0627\u0645 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u06a9\u0646\u062f. Cloud Build Service. \u0627\u06cc\u0646 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627 \u0631\u0627 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0627\u0632 \u0645\u0635\u0646\u0648\u0639\u0627\u062a \u062c\u0627\u0648\u0627 \u0645\u0627\u0646\u0646\u062f \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc JAR \u06cc\u0627 WAR \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0645\u0633\u062a\u0642\u0631 \u06a9\u0646\u06cc\u062f. \u0627\u06cc\u0646 \u0633\u0631\u0648\u06cc\u0633 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0631\u0627 \u0627\u0632 \u0645\u0635\u0646\u0648\u0639\u0627\u062a \u062c\u0627\u0648\u0627 \u0645\u0634\u062e\u0635 \u0634\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u0648 \u0645\u0633\u062a\u0642\u0631 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u0646\u0648\u0634\u062a\u0646 \u062f\u0633\u062a\u06cc \u062a\u0639\u0627\u0631\u06cc\u0641 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Dockerfile \u06cc\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0633\u0627\u062e\u062a \u0648 \u0641\u0634\u0627\u0631 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0631\u0627 \u0627\u0632 \u0628\u06cc\u0646 \u0645\u06cc \u0628\u0631\u062f.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0631\u0633\u06cc\u062f\u0646 \u0628\u0647 \u0627\u06cc\u0646 \u0647\u062f\u0641 \u0628\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure\u060c \u0627\u0632 az containerapp up \u062f\u0633\u062a\u0648\u0631 \u062f\u0627\u062f\u0647 \u0648 \u0622\u0631\u062a\u06cc\u0641\u06a9\u062a \u062c\u0627\u0648\u0627 \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f. \u0645\u0631\u0627\u062d\u0644 \u0645\u0641\u0635\u0644 \u0628\u0639\u062f\u0627\u064b \u062f\u0631 \u0631\u0627\u0647\u0646\u0645\u0627 \u0627\u0631\u0627\u0626\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a (\u0646\u06af\u0627\u0647 \u06a9\u0646\u06cc\u062f \u0628\u0647: 2.8 Creating an Azure Container Apps Instance).<\/p>\n<p>\u0627\u06cc\u0646 \u0627\u0645\u0631 \u0628\u0647 \u0637\u0648\u0631 \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647\u06cc \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u062c\u0627\u0648\u0627 \u0631\u0627 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0633\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f. Azure Container Apps \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u062a\u0639\u062f\u0627\u062f \u0646\u0645\u0648\u0646\u0647\u200c\u0647\u0627 \u0631\u0627 \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 \u0627\u0632 \u0635\u0641\u0631 \u0645\u0642\u06cc\u0627\u0633\u200c\u0628\u0646\u062f\u06cc \u06a9\u0646\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u06cc\u06a9 \u0633\u0631\u0648\u06cc\u0633 \u0628\u0633\u06cc\u0627\u0631 \u0631\u0627\u062d\u062a \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0646\u062f. \u0645\u0627 \u0634\u0645\u0627 \u0631\u0627 \u062a\u0634\u0648\u06cc\u0642 \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0622\u0646 \u0631\u0627 \u0627\u0645\u062a\u062d\u0627\u0646 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>  2. \u0627\u062a\u0635\u0627\u0644 \u0627\u06cc\u0645\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0628\u0647 Azure OpenAI \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631<\/p>\n<p>\u062f\u0631 \u0632\u0645\u0627\u0646\u200c\u0647\u0627\u06cc \u0627\u062e\u06cc\u0631\u060c \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u0627\u0645\u0646\u06cc\u062a\u06cc \u0627\u0647\u0645\u06cc\u062a \u0641\u0632\u0627\u06cc\u0646\u062f\u0647\u200c\u0627\u06cc \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f\u0647\u200c\u0627\u0646\u062f \u0648 \u0628\u0631\u0627\u06cc \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631\u0647\u0627 \u0636\u0631\u0648\u0631\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0633\u06cc\u0633\u062a\u0645\u200c\u0647\u0627\u06cc \u0627\u0645\u0646\u200c\u062a\u0631\u06cc \u0628\u0633\u0627\u0632\u0646\u062f. \u0645\u0627\u06cc\u06a9\u0631\u0648\u0633\u0627\u0641\u062a \u062a\u0648\u0635\u06cc\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f \u0647\u0646\u06af\u0627\u0645 \u0627\u06cc\u062c\u0627\u062f \u0645\u062d\u06cc\u0637\u200c\u0647\u0627\u06cc \u0627\u0645\u0646\u060c \u0645\u0627\u0646\u0646\u062f \u0645\u062d\u06cc\u0637\u200c\u0647\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f\u060c \u0628\u0647 \u062c\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631\u060c \u0627\u0632 Managed Identity \u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644\u0627\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f. \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0627\u0632 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0645\u0627\u06cc\u06a9\u0631\u0648\u0633\u0627\u0641\u062a Entra ID \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u0631\u0648\u0634 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0645\u062c\u0648\u0632\u0647\u0627\u06cc \u062e\u0627\u0635\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u0646\u0627\u0628\u0639 \u062f\u0631 \u06cc\u06a9 \u0645\u062d\u062f\u0648\u062f\u0647 \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647 \u0627\u0639\u0637\u0627 \u06a9\u0646\u06cc\u062f \u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0627\u0645\u0646\u06cc\u062a \u0631\u0627 \u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631\u062a\u0631 \u0645\u06cc \u06a9\u0646\u062f. \u0628\u0631\u0627\u06cc \u062c\u0632\u0626\u06cc\u0627\u062a \u0628\u06cc\u0634\u062a\u0631 \u062f\u0631 \u0645\u0648\u0631\u062f \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647\u060c \u0628\u0647 \u0645\u0642\u0627\u0644\u0647 &#8220;\u0647\u0648\u06cc\u062a \u0647\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u0628\u0631\u0627\u06cc \u0645\u0646\u0627\u0628\u0639 Azure \u0686\u06cc\u0633\u062a\u061f&#8221; \u0645\u0631\u0627\u062c\u0639\u0647 \u06a9\u0646\u06cc\u062f. \u062f\u0631 \u0627\u06cc\u0646 \u0645\u062f\u062e\u0644\u060c \u0645\u0646 \u0628\u0647 \u0648\u0636\u0648\u062d \u0646\u062d\u0648\u0647 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u06af\u0627\u0645 \u0628\u0647 \u06af\u0627\u0645 \u062a\u0648\u0636\u06cc\u062d \u062e\u0648\u0627\u0647\u0645 \u062f\u0627\u062f.<\/p>\n<p>\u062f\u0646\u0628\u0627\u0644 \u06a9\u0631\u062f\u0646 \u0627\u06cc\u0646 \u0645\u0631\u0627\u062d\u0644 \u0628\u0647 \u0634\u0645\u0627 \u062f\u0631 \u062f\u0631\u06a9 \u0646\u062d\u0648\u0647 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0622\u0646 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f\u060c \u0648 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u0631\u062c\u0639\u06cc \u0628\u0631\u0627\u06cc \u062a\u0646\u0638\u06cc\u0645 \u0645\u0646\u0627\u0628\u0639 \u062f\u06cc\u06af\u0631 \u0639\u0645\u0644 \u06a9\u0646\u0646\u062f.<\/p>\n<p>  \u0645\u0631\u0627\u062d\u0644 \u062a\u0646\u0638\u06cc\u0645 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0628\u0647 Azure OpenAI \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a\u200c\u0634\u062f\u0647 \u06a9\u0627\u0631\u0628\u0631\u060c \u0627\u06cc\u0646 \u0645\u0631\u0627\u062d\u0644 \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0646\u0638\u06cc\u0645 \u0645\u062d\u06cc\u0637 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f:<\/p>\n<p>\u062a\u0646\u0638\u06cc\u0645 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc<br \/>\n\u06cc\u06a9 \u06af\u0631\u0648\u0647 \u0645\u0646\u0627\u0628\u0639 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<br \/>\n\u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 Azure OpenAI \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<br \/>\n\u06cc\u06a9 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<br \/>\n\u0646\u0642\u0634 \u0647\u0627 \u0631\u0627 \u0628\u0647 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0631\u0627\u06cc Azure OpenAI \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0647\u06cc\u062f<br \/>\n\u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<br \/>\n\u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648\u0628 Spring Boot \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u06cc\u062f<br \/>\n\u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 Azure Container \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<br \/>\n\u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0647\u06cc\u062f<br \/>\nSetup \u0631\u0627 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u06cc\u062f<\/p>\n<p>  2.1. \u062a\u0646\u0638\u06cc\u0645 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc<\/p>\n<p>\u0647\u0646\u06af\u0627\u0645 \u062a\u0646\u0638\u06cc\u0645 \u0645\u062d\u06cc\u0637\u060c \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637 \u0631\u0627 \u0628\u0631\u0627\u06cc \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u0648\u0631\u0648\u062f\u06cc \u0647\u0627\u06cc \u062a\u06a9\u0631\u0627\u0631\u06cc \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>export RESOURCE_GROUP=yoshio-OpenAI-rg<br \/>\nexport LOCATION=eastus2<br \/>\nexport AZURE_OPENAI_NAME=yt-secure-openai<br \/>\nexport OPENAI_DEPLOY_MODEL_NAME=gpt-4o<br \/>\nexport USER_MANAGED_IDENTITY_NAME=yoshio-user-managed-id<br \/>\nexport SUBSCRIPTION=$(az account show &#8211;query id &#8211;output tsv)<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062f\u0631 \u0632\u06cc\u0631 \u0646\u0627\u0645 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc \u0648 \u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0622\u0646\u0647\u0627 \u0622\u0645\u062f\u0647 \u0627\u0633\u062a. \u0627\u06af\u0631 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u062f \u0646\u0627\u0645\u200c\u0647\u0627 \u0631\u0627 \u0645\u062a\u0646\u0627\u0633\u0628 \u0628\u0627 \u0645\u062d\u06cc\u0637 \u062e\u0648\u062f \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f\u060c \u0644\u0637\u0641\u0627\u064b \u0628\u0647 \u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0632\u06cc\u0631 \u0645\u0631\u0627\u062c\u0639\u0647 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0646\u0627\u0645 \u0647\u0631 \u0645\u0646\u0628\u0639 \u0631\u0627 \u0645\u062a\u0646\u0627\u0633\u0628 \u0628\u0627 \u0622\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f.<\/p>\n<p>\u0646\u0627\u0645 \u0645\u062a\u063a\u06cc\u0631 \u0645\u062d\u06cc\u0637\u06cc<br \/>\n\u062a\u0648\u0636\u06cc\u062d\u0627\u062a<\/p>\n<p>RESOURCE_GROUP<br \/>\n\u0646\u0627\u0645 \u06af\u0631\u0648\u0647 \u0645\u0646\u0628\u0639 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f<\/p>\n<p>\u0645\u06a9\u0627\u0646<br \/>\n\u0645\u06a9\u0627\u0646\u06cc \u06a9\u0647 \u0645\u062d\u06cc\u0637 \u062f\u0631 \u0622\u0646 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u062e\u0648\u0627\u0647\u062f \u0634\u062f<\/p>\n<p>USER_MANAGED_IDENTITY_NAME<br \/>\n\u0646\u0627\u0645 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631<\/p>\n<p>AZURE_OPENAI_NAME<br \/>\n\u0646\u0627\u0645 Azure OpenAI<\/p>\n<p>OPENAI_DEPLOY_MODEL_NAME<br \/>\n\u0646\u0627\u0645 \u0645\u062f\u0644 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u06a9\u0647 \u0642\u0631\u0627\u0631 \u0627\u0633\u062a \u0628\u0647 \u06a9\u0627\u0631 \u06af\u0631\u0641\u062a\u0647 \u0634\u0648\u062f<\/p>\n<p>\u0627\u0634\u062a\u0631\u0627\u06a9<br \/>\n\u0634\u0646\u0627\u0633\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647<\/p>\n<p>  2.2. \u06cc\u06a9 \u06af\u0631\u0648\u0647 \u0645\u0646\u0627\u0628\u0639 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u0627\u0628\u062a\u062f\u0627 \u06cc\u06a9 \u06af\u0631\u0648\u0647 \u0645\u0646\u0628\u0639 \u062f\u0631 \u0645\u062d\u06cc\u0637 Azure \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f. \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f &#8211;location \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u0628\u0631\u0627\u06cc \u0645\u0634\u062e\u0635 \u06a9\u0631\u062f\u0646 \u0645\u0646\u0637\u0642\u0647 Azure \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u062f \u0634\u062f.<\/p>\n<p>az group create &#8211;name $RESOURCE_GROUP &#8211;location $LOCATION<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  2.3. \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 Azure OpenAI \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f\u060c \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 Azure OpenAI \u0628\u0627 \u0627\u062c\u0631\u0627\u06cc \u0622\u0646 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f az cognitiveservices account create \u0641\u0631\u0645\u0627\u0646 \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f &#8211;kind OpenAI \u0648 &#8211;custom-domain \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644<\/p>\n<p>az cognitiveservices account create \\<br \/>\n  &#8211;name $AZURE_OPENAI_NAME \\<br \/>\n  &#8211;resource-group $RESOURCE_GROUP \\<br \/>\n  &#8211;kind OpenAI \\<br \/>\n  &#8211;custom-domain $AZURE_OPENAI_NAME \\<br \/>\n  &#8211;sku S0 \\<br \/>\n  &#8211;location $LOCATION<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062a\u0648\u062c\u0647:\u062a\u0639\u06cc\u06cc\u0646 \u0622\u0646 \u0628\u0633\u06cc\u0627\u0631 \u0645\u0647\u0645 \u0627\u0633\u062a &#8211;custom-domain \u0647\u0646\u06af\u0627\u0645 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 Azure OpenAI.\u062f\u0631 \u0635\u0648\u0631\u062a \u062d\u0630\u0641\u060c \u0627\u0644\u0641 region endpoint \u0645\u0627\u0646\u0646\u062f https:\/\/eastus2.api.cognitive.microsoft.com\/ \u0628\u0647 \u0635\u0648\u0631\u062a \u062e\u0648\u062f\u06a9\u0627\u0631 \u062a\u0648\u0644\u06cc\u062f \u062e\u0648\u0627\u0647\u062f \u0634\u062f. \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 &#8220;Authenticate with Microsoft Entra ID&#8221; \u0630\u06a9\u0631 \u0634\u062f\u060c \u0634\u0645\u0627 \u0646\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Microsoft Entra ID\u060c \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0648\u0631\u062f Managed Identity\u060c \u0628\u062f\u0648\u0646 \u062a\u0639\u06cc\u06cc\u0646 \u0627\u06cc\u0646 \u06af\u0632\u06cc\u0646\u0647\u060c \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f. \u0628\u0631\u0627\u06cc \u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0646 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647\u060c \u0628\u0627\u06cc\u062f \u0622\u0646 \u0631\u0627 \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f. &#8211;custom-domain.<\/p>\n<p>\u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f\u060c \u0645\u062f\u0644 OpenAI \u0631\u0627 \u062f\u0631 \u0646\u0645\u0648\u0646\u0647 \u062a\u0627\u0632\u0647 \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 Azure OpenAI \u062e\u0648\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 az cognitiveservices account deployment create \u0641\u0631\u0645\u0627\u0646 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u0627\u0645 \u0645\u062f\u0644 \u0631\u0627 \u0628\u0627 \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f &#8211;model-name \u0648 \u0646\u0633\u062e\u0647 \u0645\u062f\u0644 \u0628\u0627 &#8211;model-version. \u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0627\u06cc\u062f \u0638\u0631\u0641\u06cc\u062a \u0633\u0631\u0648\u06cc\u0633 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f &#8211;sku-capacity \u0648 \u0637\u0631\u062d \u062e\u062f\u0645\u0627\u062a \u0631\u0627 \u0628\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f &#8211;sku-name.<\/p>\n<p>az cognitiveservices account deployment create \\<br \/>\n  &#8211;name $AZURE_OPENAI_NAME \\<br \/>\n  &#8211;resource-group  $RESOURCE_GROUP \\<br \/>\n  &#8211;deployment-name $OPENAI_DEPLOY_MODEL_NAME \\<br \/>\n  &#8211;model-name $OPENAI_DEPLOY_MODEL_NAME \\<br \/>\n  &#8211;model-version &#8220;2024-08-06&#8221;  \\<br \/>\n  &#8211;model-format OpenAI \\<br \/>\n  &#8211;sku-capacity &#8220;20&#8221; \\<br \/>\n  &#8211;sku-name &#8220;GlobalStandard&#8221;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c \u0627\u06cc\u062c\u0627\u062f \u0646\u0645\u0648\u0646\u0647 Azure OpenAI \u06a9\u0627\u0645\u0644 \u0634\u062f. \u067e\u0633 \u0627\u0632 \u0627\u06cc\u062c\u0627\u062f \u0646\u0645\u0648\u0646\u0647\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0644\u0627\u0632\u0645 \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0627\u0648\u0627 \u0648 \u0633\u0627\u06cc\u0631 \u0639\u0645\u0644\u06cc\u0627\u062a \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>export OPEN_AI_RESOURCE_ID=$(az cognitiveservices account list \\<br \/>\n                                -g $RESOURCE_GROUP \\<br \/>\n                                &#8211;query &#8220;[0].id&#8221; \\<br \/>\n                                &#8211;output tsv)<br \/>\nexport OPEN_AI_ENDPOINT=$(az cognitiveservices account show \\<br \/>\n                                &#8211;resource-group $RESOURCE_GROUP \\<br \/>\n                                &#8211;name $AZURE_OPENAI_NAME \\<br \/>\n                                &#8211;query &#8220;properties.endpoint&#8221; \\<br \/>\n                                &#8211;output tsv)<br \/>\nexport OPEN_AI_ACCESS_KEY=$(az cognitiveservices account keys list \\<br \/>\n                                &#8211;resource-group $RESOURCE_GROUP \\<br \/>\n                                &#8211;name $AZURE_OPENAI_NAME \\<br \/>\n                                &#8211;query key1 &#8211;output tsv)<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627\u060c \u0645\u0627 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc \u06a9\u0646\u06cc\u0645:<\/p>\n<p>\u0646\u0627\u0645 \u0645\u062a\u063a\u06cc\u0631 \u0645\u062d\u06cc\u0637\u06cc<br \/>\n\u062a\u0648\u0636\u06cc\u062d\u0627\u062a<\/p>\n<p>OPEN_AI_RESOURCE_ID<br \/>\n\u0634\u0646\u0627\u0633\u0647 \u0645\u0646\u0628\u0639 OpenAI(\u0628\u0631\u0627\u06cc \u0645\u062d\u062f\u0648\u062f\u0647 \u062a\u0639\u06cc\u06cc\u0646 \u0646\u0642\u0634 \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0627\u0633\u062a)<\/p>\n<p>OPEN_AI_ENDPOINT<br \/>\n\u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc OpenAI(\u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0627\u0648\u0627 \u0644\u0627\u0632\u0645 \u0627\u0633\u062a)<\/p>\n<p>OPEN_AI_ACCESS_KEY<br \/>\n\u06a9\u0644\u06cc\u062f \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0631\u0627\u06cc OpenAI(\u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0627\u0648\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0627\u0633\u062a)<\/p>\n<p>  2.4. \u06cc\u06a9 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u0646\u0645\u0648\u0646\u0647 Azure OpenAI \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u06af\u0627\u0645 \u0628\u0639\u062f\u06cc \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0633\u062a. \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f az identity create \u0641\u0631\u0645\u0627\u0646<\/p>\n<p>az identity create -g $RESOURCE_GROUP -n $USER_MANAGED_IDENTITY_NAME<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 User Managed Identity \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0644\u0627\u0632\u0645 \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u0628\u0639\u062f\u06cc \u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0627\u0648\u0627 \u0631\u0627 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u06a9\u0646\u06cc\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0647\u06cc\u062f.<\/p>\n<p>export USER_MANAGED_ID_CLIENT_ID=$(az identity list \\<br \/>\n                                        -g $RESOURCE_GROUP \\<br \/>\n                                        &#8211;query &#8220;[0].clientId&#8221; \\<br \/>\n                                        -o tsv)<br \/>\nexport USER_MANAGED_ID_PRINCIPAL_ID=$(az identity list \\<br \/>\n                                        -g $RESOURCE_GROUP \\<br \/>\n                                        &#8211;query &#8220;[0].principalId&#8221; \\<br \/>\n                                        -o tsv)<br \/>\nexport USER_MANAGED_ID_RESOURCE_ID=$(az identity list \\<br \/>\n                                        -g $RESOURCE_GROUP \\<br \/>\n                                        &#8211;query &#8220;[0].id&#8221; \\<br \/>\n                                        -o tsv)<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062f\u0631 \u0632\u06cc\u0631 \u062a\u0648\u0636\u06cc\u062d\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u0645\u0642\u062f\u0627\u0631 \u0647\u0631 \u0645\u062a\u063a\u06cc\u0631 \u0645\u062d\u06cc\u0637\u06cc \u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646 \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<p>\u0646\u0627\u0645 \u0645\u062a\u063a\u06cc\u0631 \u0645\u062d\u06cc\u0637\u06cc<br \/>\n\u062a\u0648\u0636\u06cc\u062d\u0627\u062a<\/p>\n<p>USER_MANAGED_ID_CLIENT_ID<br \/>\n\u0634\u0646\u0627\u0633\u0647 \u0645\u0634\u062a\u0631\u06cc \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631(\u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0627\u0648\u0627 \u0644\u0627\u0632\u0645 \u0627\u0633\u062a)<\/p>\n<p>USER_MANAGED_ID_PRINCIPAL_ID<br \/>\n\u0634\u0646\u0627\u0633\u0647 \u0627\u0635\u0644\u06cc \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631(\u0627\u0644\u0632\u0627\u0645\u06cc \u0628\u0631\u0627\u06cc \u062a\u0639\u06cc\u06cc\u0646 \u0646\u0642\u0634)<\/p>\n<p>USER_MANAGED_ID_RESOURCE_ID<br \/>\n\u0634\u0646\u0627\u0633\u0647 \u0645\u0646\u0628\u0639 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631(\u0628\u0631\u0627\u06cc \u0627\u062e\u062a\u0635\u0627\u0635 \u0634\u0646\u0627\u0633\u0647 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0644\u0627\u0632\u0645 \u0627\u0633\u062a)<\/p>\n<p>  2.5. \u0646\u0642\u0634 \u0647\u0627 \u0631\u0627 \u0628\u0647 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0631\u0627\u06cc Azure OpenAI \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0647\u06cc\u062f<\/p>\n<p>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f az role assignment create \u062f\u0633\u062a\u0648\u0631 \u0627\u062e\u062a\u0635\u0627\u0635 \u06cc\u06a9 \u0646\u0642\u0634 \u0628\u0647 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631\u060c \u0628\u0647 \u0622\u0646 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u0628\u0627 \u0645\u0646\u0628\u0639 OpenAI \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Cognitive Services OpenAI User \u0627\u062c\u0627\u0632\u0647<\/p>\n<p>\u0627\u06cc\u0646 $OPEN_AI_RESOURCE_ID \u0634\u0646\u0627\u0633\u0647 \u0645\u0646\u0628\u0639 OpenAI \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0648 \u0646\u0642\u0634 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0627\u0635 \u0628\u0647 \u0622\u0646 \u0645\u0646\u0628\u0639 \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f. \u0627\u06cc\u0646 \u0631\u0648\u0634 \u062a\u0646\u0647\u0627 \u0645\u062c\u0648\u0632\u0647\u0627\u06cc \u0644\u0627\u0632\u0645 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0639\u0637\u0627 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0628\u0627 \u0627\u062c\u062a\u0646\u0627\u0628 \u0627\u0632 \u0645\u062c\u0648\u0632\u0647\u0627\u06cc \u063a\u06cc\u0631 \u0636\u0631\u0648\u0631\u06cc\u060c \u0627\u0645\u0646\u06cc\u062a \u0631\u0627 \u0627\u0641\u0632\u0627\u06cc\u0634 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p>az role assignment create &#8211;assignee $USER_MANAGED_ID_PRINCIPAL_ID \\<br \/>\n                          &#8211;scope $OPEN_AI_RESOURCE_ID \\<br \/>\n                          &#8211;role &#8220;Cognitive Services OpenAI User&#8221; <\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0646\u0642\u0634 \u0647\u0627\u06cc \u0630\u06a9\u0631 \u0634\u062f\u0647\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0646\u0642\u0634 \u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u0646\u06cc\u0632 \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0647\u06cc\u062f.<\/p>\n<p>\u062e\u062f\u0645\u0627\u062a \u0634\u0646\u0627\u062e\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 OpenAI<br \/>\n\u0645\u0634\u0627\u0631\u06a9\u062a \u06a9\u0646\u0646\u062f\u0647 \u062e\u062f\u0645\u0627\u062a \u0634\u0646\u0627\u062e\u062a\u06cc OpenAI<br \/>\n\u0645\u0634\u0627\u0631\u06a9\u062a \u06a9\u0646\u0646\u062f\u0647 \u062e\u062f\u0645\u0627\u062a \u0634\u0646\u0627\u062e\u062a\u06cc<br \/>\n\u062e\u0648\u0627\u0646\u0646\u062f\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062e\u062f\u0645\u0627\u062a \u0634\u0646\u0627\u062e\u062a\u06cc<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0642\u06cc\u0642 \u062f\u0631 \u0645\u0648\u0631\u062f \u0642\u0627\u0628\u0644\u06cc\u062a\u200c\u0647\u0627\u06cc \u0647\u0631 \u0646\u0642\u0634\u060c \u0644\u0637\u0641\u0627\u064b \u0628\u0647 \u06a9\u0646\u062a\u0631\u0644 \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u0646\u0642\u0634 \u0628\u0631\u0627\u06cc \u0633\u0631\u0648\u06cc\u0633 Azure OpenAI \u0645\u0631\u0627\u062c\u0639\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>  2.6. \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/p>\n<p>\u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f\u060c \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f. \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Azure CLI\u060c \u0628\u0627\u06cc\u062f \u0627\u0641\u0632\u0648\u0646\u0647 \u0647\u0627 \u0648 \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0627\u0636\u0627\u0641\u06cc \u0631\u0627 \u062b\u0628\u062a \u06a9\u0646\u06cc\u062f. \u0627\u06af\u0631 \u0642\u0628\u0644\u0627\u064b \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u0646\u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f\u060c \u0644\u0637\u0641\u0627\u064b \u0647\u0645\u06cc\u0646 \u0627\u0644\u0627\u0646 \u0622\u0646\u0647\u0627 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>az upgrade<br \/>\naz extension add &#8211;name containerapp &#8211;upgrade -y<br \/>\naz provider register &#8211;namespace Microsoft.Web<br \/>\naz provider register &#8211;namespace Microsoft.App<br \/>\naz provider register &#8211;namespace Microsoft.OperationalInsights<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0633\u067e\u0633\u060c \u0646\u0627\u0645 Azure Container Apps Environment \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0645\u062a\u063a\u06cc\u0631 \u0645\u062d\u06cc\u0637\u06cc \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f. \u0646\u0627\u0645\u06cc \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0645\u0646\u0627\u0633\u0628 \u0645\u062d\u06cc\u0637 \u0634\u0645\u0627 \u0628\u0627\u0634\u062f.<\/p>\n<p>export CONTAINER_ENVIRONMENT=YTContainerEnv3<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f az containerapp env create \u062f\u0633\u062a\u0648\u0631 \u062a\u0646\u0638\u06cc\u0645 \u0645\u062d\u06cc\u0637<\/p>\n<p>az containerapp env create &#8211;name $CONTAINER_ENVIRONMENT \\<br \/>\n                           &#8211;enable-workload-profiles \\<br \/>\n                           -g $RESOURCE_GROUP \\<br \/>\n                           &#8211;location $LOCATION<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  2.7. \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0648\u0628 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 Spring Boot<\/p>\n<p>\u0628\u0627 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc Azure OpenAI \u0648 Azure Container Apps Environment\u060c \u0627\u06a9\u0646\u0648\u0646 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u062c\u0627\u0648\u0627 \u0628\u0631\u0627\u06cc \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0633\u0627\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u06cc\u06a9 \u0645\u062f\u0644 OpenAI \u0631\u0627 \u0627\u0632 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0627\u0648\u0627 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u062f. \u0645\u0627 \u0627\u0632 Spring Boot \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<\/p>\n<p>  2.7.1 \u0627\u06cc\u062c\u0627\u062f \u067e\u0631\u0648\u0698\u0647 Spring Boot<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u067e\u0631\u0648\u0698\u0647 Spring Boot \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f. \u067e\u0633 \u0627\u0632 \u0627\u06cc\u062c\u0627\u062f \u0648 \u062f\u0627\u0646\u0644\u0648\u062f \u067e\u0631\u0648\u0698\u0647\u060c \u0622\u0631\u0634\u06cc\u0648 \u0631\u0627 \u0627\u0632 \u062d\u0627\u0644\u062a \u0641\u0634\u0631\u062f\u0647 \u062e\u0627\u0631\u062c \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0645\u062d\u062a\u0648\u06cc\u0627\u062a \u0622\u0646 \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0634\u0648\u062f.<\/p>\n<p>curl https:\/\/start.spring.io\/starter.zip \\<br \/>\n  -d dependencies=web \\<br \/>\n  -d type=maven-project \\<br \/>\n  -d language=java \\<br \/>\n  -d bootVersion=3.3.3 \\<br \/>\n  -d baseDir=Yoshio-AI-App-Spring-Boot \\<br \/>\n  -d groupId=com.yoshio3 \\<br \/>\n  -d artifactId=Yoshio-AI-App \\<br \/>\n  -d name=myproject \\<br \/>\n  -d packageName=com.yoshio3 \\<br \/>\n  -o YoshioAIProject.zip<\/p>\n<p>unzip YoshioAIProject.zip<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062f\u0633\u062a\u0648\u0631 \u0628\u0627\u0644\u0627 \u067e\u0631\u0648\u0698\u0647 \u0627\u06cc \u0628\u0627 \u0633\u0627\u062e\u062a\u0627\u0631 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0632\u06cc\u0631 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u251c\u2500\u2500 HELP.md<br \/>\n\u251c\u2500\u2500 mvnw<br \/>\n\u251c\u2500\u2500 mvnw.cmd<br \/>\n\u251c\u2500\u2500 pom.xml<br \/>\n\u2514\u2500\u2500 src<br \/>\n    \u251c\u2500\u2500 main<br \/>\n    \u2502   \u251c\u2500\u2500 java<br \/>\n    \u2502   \u2502   \u2514\u2500\u2500 com<br \/>\n    \u2502   \u2502       \u2514\u2500\u2500 yoshio3<br \/>\n    \u2502   \u2502           \u2514\u2500\u2500 MyprojectApplication.java<br \/>\n    \u2502   \u2514\u2500\u2500 resources<br \/>\n    \u2502       \u251c\u2500\u2500 application.properties<br \/>\n    \u2502       \u251c\u2500\u2500 static<br \/>\n    \u2502       \u2514\u2500\u2500 templates<br \/>\n    \u2514\u2500\u2500 test<br \/>\n        \u2514\u2500\u2500 java<br \/>\n            \u2514\u2500\u2500 com<br \/>\n                \u2514\u2500\u2500 yoshio3<br \/>\n                    \u2514\u2500\u2500 MyprojectApplicationTests.java<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  2.7.2 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0641\u0627\u06cc\u0644 \u067e\u0631\u0648\u0698\u0647 pom.xml<\/p>\n<p>\u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0647 pom.xml \u0641\u0627\u06cc\u0644\u06cc \u06a9\u0647 \u062f\u0631 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0631\u06cc\u0634\u0647 \u0642\u0631\u0627\u0631 \u062f\u0627\u0631\u062f. \u0627\u06cc\u0646 \u0634\u0627\u0645\u0644 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0647\u0627\u06cc \u0644\u0627\u0632\u0645 \u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644 \u0648 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0628\u0627 OpenAI \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>       &#8230;&#8230;<\/p>\n<p>            com.azure<br \/>\n            azure-ai-openai<br \/>\n            1.0.0-beta.11<\/p>\n<p>            com.azure<br \/>\n            azure-identity<br \/>\n            1.13.2<\/p>\n<p>            org.slf4j<br \/>\n            slf4j-api<br \/>\n            2.0.16<\/p>\n<p>            ch.qos.logback<br \/>\n            logback-core<br \/>\n            1.5.8<\/p>\n<p>            ch.qos.logback<br \/>\n            logback-classic<br \/>\n            1.5.8<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  2.7.3 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc RESTful (\u0628\u062e\u0634 \u0627\u0635\u0644\u06cc)<\/p>\n<p>\u0628\u0639\u062f\u060c \u06cc\u06a9 \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f AIChatController.java \u0641\u0627\u06cc\u0644 \u062f\u0631 src\/main\/java\/com\/yoshio3 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0639\u0631\u06cc\u0641 \u06cc\u06a9 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc RESTful \u06a9\u0647 \u067e\u0633 \u0627\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u060c OpenAI \u0631\u0627 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc \u06a9\u0646\u062f\u060c \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>package com.yoshio3;<\/p>\n<p>import org.springframework.web.bind.annotation.RestController;<br \/>\nimport com.azure.ai.openai.OpenAIClient;<br \/>\nimport com.azure.ai.openai.OpenAIClientBuilder;<br \/>\nimport com.azure.ai.openai.models.ChatCompletions;<br \/>\nimport com.azure.ai.openai.models.ChatCompletionsOptions;<br \/>\nimport com.azure.ai.openai.models.ChatRequestAssistantMessage;<br \/>\nimport com.azure.ai.openai.models.ChatRequestMessage;<br \/>\nimport com.azure.ai.openai.models.ChatRequestSystemMessage;<br \/>\nimport com.azure.ai.openai.models.ChatRequestUserMessage;<br \/>\nimport com.azure.core.credential.AzureKeyCredential;<br \/>\nimport com.azure.identity.ManagedIdentityCredential;<br \/>\nimport com.azure.identity.ManagedIdentityCredentialBuilder;<br \/>\nimport com.fasterxml.jackson.core.JsonProcessingException;<br \/>\nimport com.fasterxml.jackson.databind.ObjectMapper;<br \/>\nimport java.util.ArrayList;<br \/>\nimport java.util.List;<br \/>\nimport org.slf4j.Logger;<br \/>\nimport org.slf4j.LoggerFactory;<br \/>\nimport org.springframework.beans.factory.annotation.Value;<br \/>\nimport org.springframework.web.bind.annotation.PostMapping;<br \/>\nimport org.springframework.web.bind.annotation.RequestBody;<\/p>\n<p>@RestController<br \/>\npublic class AIChatController {<\/p>\n<p>    private static final Logger LOGGER = LoggerFactory.getLogger(AIChatController.class);<\/p>\n<p>    @Value(&#8220;${USER_MANAGED_ID_CLIENT_ID}&#8221;)<br \/>\n    private String userManagedIDClientId;<\/p>\n<p>    @Value(&#8220;${OPENAI_ENDPOINT}&#8221;)<br \/>\n    private String openAIEndpoint;<\/p>\n<p>    @Value(&#8220;${OPENAI_KEY}&#8221;)<br \/>\n    private String openAIKey;<\/p>\n<p>    private static final String OPEN_AI_CHAT_MODEL = &#8220;gpt-4o&#8221;;<\/p>\n<p>    \/**<br \/>\n     * This API is used to chat with OpenAI&#8217;s GPT-4 model. And if user ask somethings, it will<br \/>\n     * return the message with Pirate language.<br \/>\n     *<br \/>\n     * Ex. You can invoke the API by using the following command: curl -X POST<br \/>\n     * http:\/\/localhost:8080\/askAI -H &#8220;Content-Type: application\/json&#8221; -d &#8216;{&#8220;message&#8221;:&#8221;Please tell<br \/>\n     * me about the appeal of Spring Boot in Japanese.&#8221;}&#8217;<br \/>\n     *<br \/>\n     * @param message RequestMessage<br \/>\n     * @return String Response from OpenAI<br \/>\n     *\/<\/p>\n<p>    @PostMapping(&#8220;\/askAI&#8221;)<br \/>\n    public String chat(@RequestBody RequestMessage message) {<br \/>\n        return getResponseFromOpenAI(message.getMessage());<br \/>\n    }<\/p>\n<p>    \/**<br \/>\n     * This method is used to get the response from OpenAI.<br \/>\n     *<br \/>\n     * For production environment, you can use Managed Identity to authenticate with OpenAI. If you<br \/>\n     * want to use Managed Identity, please use the ManagedIdentityCredentialBuilder.<br \/>\n     *<br \/>\n     * For local development, you can use AzureKeyCredential to authenticate with OpenAI.<br \/>\n     *<br \/>\n     * @param message RequestMessage<br \/>\n     * @return String Response from OpenAI<br \/>\n     *\/<\/p>\n<p>    private String getResponseFromOpenAI(String message) {<br \/>\n        try {<br \/>\n            \/\/ Create OpenAI client with User Managed Identity<br \/>\n            ManagedIdentityCredential credential =<br \/>\n                    new ManagedIdentityCredentialBuilder().clientId(userManagedIDClientId).build();<br \/>\n            OpenAIClient openAIClient = new OpenAIClientBuilder().credential(credential)<br \/>\n                    .endpoint(openAIEndpoint).buildClient();<\/p>\n<p>            \/\/ Create OpenAI client without Managed Identity (For local development)<br \/>\n            \/\/ OpenAIClient openAIClient = new OpenAIClientBuilder().endpoint(openAIEndpoint)<br \/>\n            \/\/ .credential(new AzureKeyCredential(openAIKey)).buildClient();<\/p>\n<p>            \/\/ Create Chat Request Messages<br \/>\n            ListChatRequestMessage&gt; chatMessages = new ArrayList();<br \/>\n            chatMessages.add(new ChatRequestSystemMessage(&#8220;You are a helpful assistant. You will talk like a pirate.&#8221;));<br \/>\n            chatMessages.add(new ChatRequestUserMessage(&#8220;Can you help me?&#8221;));<br \/>\n            chatMessages.add(new ChatRequestAssistantMessage(&#8220;Of course, me hearty! What can I do for ye?&#8221;));<br \/>\n            chatMessages.add(new ChatRequestUserMessage(message));<br \/>\n            ChatCompletionsOptions chatCompletionsOptions = new ChatCompletionsOptions(chatMessages);<\/p>\n<p>            \/\/ Invoke OpenAI Chat API<br \/>\n            ChatCompletions chatCompletions = openAIClient.getChatCompletions(OPEN_AI_CHAT_MODEL, chatCompletionsOptions);<br \/>\n            StringBuilder response = new StringBuilder();<br \/>\n            chatCompletions.getChoices()<br \/>\n                    .forEach(choice -&gt; response.append(choice.getMessage().getContent()));<\/p>\n<p>            return response.toString();<br \/>\n        } catch (Exception e) {<br \/>\n            StackTraceElement[] stackTrace = e.getStackTrace();<br \/>\n            LOGGER.error(e.getMessage());<br \/>\n            LOGGER.error(e.getLocalizedMessage());<br \/>\n            Throwable cause = e.getCause();<br \/>\n            if (cause != null) {<br \/>\n                LOGGER.error(e.getCause().toString());<br \/>\n            }<br \/>\n            for (StackTraceElement element : stackTrace) {<br \/>\n                LOGGER.error(element.toString());<br \/>\n            }<br \/>\n            return e.getMessage();<br \/>\n        }<br \/>\n    }<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062a\u0648\u062c\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 OpenAIClient \u0646\u0645\u0648\u0646\u0647 \u0628\u0647 \u062f\u0648 \u0635\u0648\u0631\u062a \u0645\u062e\u062a\u0644\u0641 \u062a\u0648\u0635\u06cc\u0641 \u0645\u06cc \u0634\u0648\u062f. \u06a9\u062f \u0641\u0639\u0644\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f ManagedIdentityCredential \u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644 \u0628\u0647 Azure OpenAI \u0628\u0627 \u06cc\u06a9 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631. \u0627\u06cc\u0646 \u06a9\u062f \u0641\u0642\u0637 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u062f\u0631 \u0645\u062d\u06cc\u0637 Azure \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u062f \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u062f\u0631 \u0645\u062d\u06cc\u0637 \u0645\u062d\u0644\u06cc \u06cc\u0627 \u063a\u06cc\u0631 Azure \u06a9\u0627\u0631 \u0646\u062e\u0648\u0627\u0647\u062f \u06a9\u0631\u062f.<\/p>\n<p>\u062f\u0631 \u0637\u0648\u0644 \u062a\u0648\u0633\u0639\u0647\u060c \u0628\u0627\u06cc\u062f \u0639\u0645\u0644\u06a9\u0631\u062f \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u0648 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u06cc\u062f. \u062f\u0631 \u0686\u0646\u06cc\u0646 \u0645\u0648\u0627\u0631\u062f\u06cc \u0646\u0645\u06cc \u062a\u0648\u0627\u0646 \u0627\u0632 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f. \u062f\u0631 \u0639\u0648\u0636\u060c \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u0644\u06cc\u062f \u062f\u0633\u062a\u0631\u0633\u06cc OpenAI \u0628\u0627 \u062d\u0630\u0641 \u0646\u0638\u0631 \u062e\u0637 \u0628\u0627\u060c \u0648\u0635\u0644 \u0634\u0648\u06cc\u062f AzureKeyCredential(openAIKey) \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0646\u0645\u0648\u0646\u0647 OpenAIClient.<\/p>\n<p>\u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646\u060c SLF4J \u0648 Logback \u0628\u0631\u0627\u06cc \u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645 \u062f\u0631 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f. \u0622\u0646\u0647\u0627 \u0631\u0627 \u0628\u0627 \u0627\u06cc\u062c\u0627\u062f a \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f logback-spring.xml \u0641\u0627\u06cc\u0644 \u062f\u0631 \/src\/main\/resources \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u062c\u0632\u0626\u06cc\u0627\u062a \u06af\u0632\u0627\u0631\u0634 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u067e\u0648\u0634\u0634 \u062f\u0627\u062f\u0647 \u0646\u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u06a9\u062f \u0627\u0635\u0644\u06cc \u0628\u0631\u0627\u06cc \u0645\u0631\u062c\u0639 \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 \u062f\u0631 GitHub \u0645\u0648\u062c\u0648\u062f \u0627\u0633\u062a.<\/p>\n<p>\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 \u0646\u0645\u0627\u06cc \u06a9\u0644\u06cc \u0627\u0632 \u06a9\u062f \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a: \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u06cc\u06a9 \u0633\u0648\u0627\u0644 \u06cc\u0627 \u067e\u06cc\u0627\u0645 \u0627\u0632 \u06cc\u06a9 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u0634\u0648\u062f\u060c \u0628\u0627 \u0644\u062d\u0646 \u062f\u0632\u062f\u0627\u0646 \u062f\u0631\u06cc\u0627\u06cc\u06cc \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062a\u0648\u0633\u0637 SYSTEM. \u0627\u0632 \u067e\u0627\u0633\u062e \u0647\u0627\u06cc \u0628\u0647 \u0633\u0628\u06a9 \u062f\u0632\u062f\u0627\u0646 \u062f\u0631\u06cc\u0627\u06cc\u06cc \u0644\u0630\u062a \u0628\u0628\u0631\u06cc\u062f!<\/p>\n<p>  2.7.4 \u062a\u0639\u0631\u06cc\u0641 \u0641\u0631\u0645\u062a JSON \u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc<\/p>\n<p>\u0633\u067e\u0633 \u0641\u0631\u0645\u062a \u062f\u0627\u062f\u0647 JSON \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0631\u0633\u0627\u0644 \u0628\u0647 \u0627\u06cc\u0646 \u0633\u0631\u0648\u06cc\u0633 RESTful \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f. \u0628\u0631\u0627\u06cc \u067e\u0631\u062f\u0627\u0632\u0634 \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f {&#8220;message&#8221;:&#8221;What is the benefit of Spring Boot&#8221;} \u062f\u0631 BODY \u062f\u0631\u062e\u0648\u0627\u0633\u062a HTTP\u060c \u06a9\u0644\u0627\u0633 \u0632\u06cc\u0631 \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>package com.yoshio3;<\/p>\n<p>public class RequestMessage {<br \/>\n    private String message;<\/p>\n<p>    public void setMessage(String message) {<br \/>\n        this.message = message;<br \/>\n    }<\/p>\n<p>    public String getMessage() {<br \/>\n        return message;<br \/>\n    }<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c \u062d\u062f\u0627\u0642\u0644 \u06a9\u062f \u0644\u0627\u0632\u0645 \u0628\u0631\u0627\u06cc \u062a\u0623\u06cc\u06cc\u062f \u0639\u0645\u0644\u06cc\u0627\u062a \u0631\u0627 \u062a\u06a9\u0645\u06cc\u0644 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u0645.<\/p>\n<p>  2.7.5 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0628\u0631\u0646\u0627\u0645\u0647<\/p>\n<p>\u0633\u067e\u0633 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644 \u0628\u0647 Azure OpenAI \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f. \u062f\u0631 \u0637\u0648\u0644 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0633\u06cc\u0633\u062a\u0645 \u0647\u0627 \u0627\u0632 \u0628\u062e\u0634 \u0647\u0627\u06cc 2.1 \u062a\u0627 2.6\u060c \u062a\u0645\u0627\u0645 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u062f\u0631 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637 \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f. \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0644\u0627\u0632\u0645 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0627\u0648\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>echo &#8220;USER_MANAGED_ID_CLIENT_ID&#8221; : $USER_MANAGED_ID_CLIENT_ID<br \/>\necho &#8220;OPEN_AI_ENDPOINT&#8221; : $OPEN_AI_ENDPOINT<br \/>\necho &#8220;OPEN_AI_ACCESS_KEY&#8221; : $OPEN_AI_ACCESS_KEY<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0646\u062a\u0627\u06cc\u062c \u0627\u062c\u0631\u0627 \u0631\u0627 \u062f\u0631 \u0628\u0627\u0644\u0627 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f application.properties \u0641\u0627\u06cc\u0644 \u0648\u0627\u0642\u0639 \u062f\u0631 \/src\/main\/resources\/ \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc<\/p>\n<p>spring.application.name=AI-Chatbot<br \/>\nlogging.level.root=INFO<br \/>\nlogging.level.org.springframework.web=INFO<\/p>\n<p>USER_MANAGED_ID_CLIENT_ID=********-****-****-****-************<br \/>\nOPENAI_ENDPOINT=https:\/\/********.openai.azure.com\/<br \/>\nOPENAI_KEY=********************************<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062a\u0648\u062c\u0647:OPENAI_KEY  \u06a9\u0644\u06cc\u062f \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0631\u0627\u06cc OpenAI \u0627\u0633\u062a. \u0627\u0632 \u0622\u0646 \u0641\u0642\u0637 \u062f\u0631 \u062d\u06cc\u0646 \u062a\u0648\u0633\u0639\u0647 \u062f\u0631 \u0645\u062d\u06cc\u0637 \u062a\u0648\u0633\u0639\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u0648 \u0627\u0632 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062f\u0631 \u0645\u062d\u06cc\u0637 \u062a\u0648\u0644\u06cc\u062f \u062e\u0648\u062f\u062f\u0627\u0631\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>  2.7.6 (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc): \u062a\u0623\u06cc\u06cc\u062f \u0639\u0645\u0644\u06cc\u0627\u062a \u062f\u0631 \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u0645\u062d\u0644\u06cc<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0622\u06cc\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0627\u0648\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f \u06cc\u0627 \u062e\u06cc\u0631\u060c \u0646\u0638\u0631\u0627\u062a \u0631\u0627 \u062f\u0631 \u0642\u0633\u0645\u062a \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f OpenAIClient \u0627\u06cc\u062c\u0627\u062f \u0646\u0645\u0648\u0646\u0647 \u0628\u062e\u0634\u06cc \u0627\u0632 AIChatController \u06a9\u062f \u06a9\u0644\u0627\u0633 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0631\u062f\u0647 \u0648 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\/\/ ManagedIdentityCredential credential = new ManagedIdentityCredentialBuilder().clientId(userManagedIDClientId).build();<br \/>\n\/\/ OpenAIClient openAIClient = new OpenAIClientBuilder().credential(credential)<br \/>\n\/\/                    .endpoint(openAIEndpoint).buildClient();<\/p>\n<p> OpenAIClient openAIClient = new OpenAIClientBuilder().endpoint(openAIEndpoint)<br \/>\n                   .credential(new AzureKeyCredential(openAIKey)).buildClient();<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u067e\u0633 \u0627\u0632 \u0627\u0646\u062c\u0627\u0645 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a\u060c \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>mvn spring-boot:run<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 Spring Boot \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0634\u0648\u062f\u060c \u062f\u0631 \u067e\u0648\u0631\u062a 8080 \u06af\u0648\u0634 \u0645\u06cc \u062f\u0647\u062f. \u0627\u0632 \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f curl \u0641\u0631\u0645\u0627\u0646 \u0628\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0622\u06cc\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 Azure OpenAI \u067e\u0631\u0633 \u0648 \u062c\u0648 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>curl -X POST http:\/\/localhost:8080\/askAI \\<br \/>\n     -H &#8220;Content-Type: application\/json&#8221; \\<br \/>\n     -d &#8216;{&#8220;message&#8221;:&#8221;What is the benefit of the Spring Boot?&#8221;}&#8217;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0647\u0631 \u0628\u0627\u0631 \u06a9\u0647 \u062f\u0633\u062a\u0648\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u0645\u06cc \u06a9\u0646\u06cc\u062f\u060c \u067e\u0627\u0633\u062e \u0645\u062a\u0641\u0627\u0648\u062a \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f\u060c \u0627\u0645\u0627 \u0628\u0631\u0627\u06cc \u0645\u062b\u0627\u0644\u060c \u0628\u0627 \u06cc\u06a9 \u0644\u062d\u0646 \u062f\u0632\u062f\u0627\u0646 \u062f\u0631\u06cc\u0627\u06cc\u06cc \u067e\u0627\u0633\u062e \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p>Aye, Captain! Let me explain the benefits of Spring Boot.<br \/>\nSpring Boot is a framework that aids rapid application development.<br \/>\nIt allows you to create standalone applications with minimal configuration.<\/p>\n<p>It also comes with auto-configuration, reducing manual setup. Managing dependencies is easy, and it includes commonly used libraries.<br \/>\nIt&#8217;s fast to start up, easy to deploy, and suitable for cloud operations. <\/p>\n<p>It&#8217;s a powerful tool for boosting developer productivity.<br \/>\nAnything else I can assist with?<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u067e\u0633 \u0627\u0632 \u062a\u06a9\u0645\u06cc\u0644 \u062a\u0623\u06cc\u06cc\u062f \u0645\u062d\u0644\u06cc\u060c \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0631\u0627 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u06cc\u062f \u062a\u0627 \u0627\u06cc\u062c\u0627\u062f \u0634\u0648\u062f OpenAIClient \u0646\u0645\u0648\u0646\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 ManagedIdentityCredential.<\/p>\n<p>  2.7.7 \u0633\u0627\u062e\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0648 \u0627\u06cc\u062c\u0627\u062f \u0645\u0635\u0646\u0648\u0639\u0627\u062a<\/p>\n<p>\u067e\u0633 \u0627\u0632 \u062a\u06a9\u0645\u06cc\u0644 \u0627\u06cc\u0646 \u0645\u0631\u0627\u062d\u0644\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0628\u0633\u0627\u0632\u06cc\u062f \u0648 \u0645\u0635\u0646\u0648\u0639\u0627\u062a \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f.<\/p>\n<p>mvn clean package<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u067e\u0633 \u0627\u0632 \u0633\u0627\u062e\u062a \u0627\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647\u060c \u0622\u062b\u0627\u0631 \u0628\u0627\u0633\u062a\u0627\u0646\u06cc \u062f\u0631 \u0622\u0646 \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u0646\u062f \u0634\u062f target \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627\u060c \u0628\u0631\u0646\u0627\u0645\u0647 Spring Boot \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u0634\u0648\u062f Yoshio-AI-App-0.0.1-SNAPSHOT.jar.<\/p>\n<p>&gt; ls -l target<br \/>\ntotal 40876<br \/>\n-rw-r&#8211;r&#8211; 1 teradayoshio wheel 41847613  9 14 14:52 Yoshio-AI-App-0.0.1-SNAPSHOT.jar<br \/>\n-rw-r&#8211;r&#8211; 1 teradayoshio wheel     7003  9 14 14:52 Yoshio-AI-App-0.0.1-SNAPSHOT.jar.original<br \/>\ndrwxr-xr-x 5 teradayoshio wheel      160  9 14 20:34 classes<br \/>\ndrwxr-xr-x 3 teradayoshio wheel       96  9 14 14:52 generated-sources<br \/>\ndrwxr-xr-x 3 teradayoshio wheel       96  9 14 14:52 generated-test-sources<br \/>\ndrwxr-xr-x 3 teradayoshio wheel       96  9 14 14:52 maven-archiver<br \/>\ndrwxr-xr-x 3 teradayoshio wheel       96  9 14 14:52 maven-status<br \/>\ndrwxr-xr-x 4 teradayoshio wheel      128  9 14 14:52 surefire-reports<br \/>\ndrwxr-xr-x 3 teradayoshio wheel       96  9 14 20:34 test-classes<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  2.8. \u0627\u06cc\u062c\u0627\u062f \u0646\u0645\u0648\u0646\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure<\/p>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0627\u0648\u0627 \u06a9\u0627\u0645\u0644 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u0627\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0627\u0648\u0627 \u0631\u0627 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0645\u0633\u062a\u0642\u0631 \u06a9\u0646\u06cc\u0645.<\/p>\n<p>\u0646\u0627\u0645 \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0645\u062a\u063a\u06cc\u0631 \u0645\u062d\u06cc\u0637\u06cc \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f CONTAINER_APP_NAME. \u0645\u0633\u06cc\u0631 \u0648 \u0646\u0627\u0645 \u0641\u0627\u06cc\u0644 \u0622\u0631\u062a\u06cc\u0641\u06a9\u062a Spring Boot \u0631\u0627 \u0628\u0627 \u0622\u0646 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f JAR_FILE_PATH_AND_NAME.<\/p>\n<p>export CONTAINER_APP_NAME=yoshio-ai-app<br \/>\nexport JAR_FILE_PATH_AND_NAME=.\/target\/Yoshio-AI-App-0.0.1-SNAPSHOT.jar<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 &#8220;1. \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u062c\u0627\u0648\u0627 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0628\u062f\u0648\u0646 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u0633\u0627\u0632\u06cc&#8221; \u062a\u0648\u0636\u06cc\u062d \u062f\u0627\u062f\u0647 \u0634\u062f\u060c \u062f\u06cc\u06af\u0631 \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u0627\u06cc\u062c\u0627\u062f \u0648 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u062e\u0648\u062f \u062f\u0631 \u0647\u0646\u06af\u0627\u0645 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0646\u062f\u0627\u0631\u06cc\u062f. \u0645\u0627 \u0641\u0642\u0637 \u0645\u0635\u0646\u0648\u0639 \u062c\u0627\u0648\u0627 \u0631\u0627 \u062f\u0627\u0631\u06cc\u0645 Yoshio-AI-App-0.0.1-SNAPSHOT.jar\u060c \u0648 \u0628\u0631 \u0627\u06cc\u0646 \u0627\u0633\u0627\u0633 \u0645\u0633\u062a\u0642\u0631 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c \u0627\u0632 az containerapp up \u0641\u0631\u0645\u0627\u0646 \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0627\u0632 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u0647\u0627 \u0645\u06cc \u0628\u06cc\u0646\u06cc\u062f\u060c \u0641\u0642\u0637 \u0628\u0627\u06cc\u062f \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f &#8211;artifact $JAR_FILE_PATH_AND_NAME\u060c \u0628\u062f\u0648\u0646 \u0647\u06cc\u0686 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u062a\u0635\u0648\u06cc\u0631 \u0638\u0631\u0641. \u0627\u06cc\u0646 \u062f\u0633\u062a\u0648\u0631 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0645\u062d\u06cc\u0637 \u0633\u0627\u062e\u062a \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc \u06a9\u0646\u062f\u060c \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0631\u0627 \u0645\u06cc \u0633\u0627\u0632\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0645\u0633\u062a\u0642\u0631 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0644\u0637\u0641\u0627 \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>az containerapp up \\<br \/>\n  &#8211;name $CONTAINER_APP_NAME \\<br \/>\n  &#8211;resource-group $RESOURCE_GROUP \\<br \/>\n  &#8211;subscription $SUBSCRIPTION \\<br \/>\n  &#8211;location $LOCATION \\<br \/>\n  &#8211;environment $CONTAINER_ENVIRONMENT \\<br \/>\n  &#8211;artifact $JAR_FILE_PATH_AND_NAME \\<br \/>\n  &#8211;ingress external \\<br \/>\n  &#8211;target-port 8080 \\<br \/>\n  &#8211;env-vars AZURE_LOG_LEVEL=2 \\<br \/>\n  &#8211;query properties.configuration.ingress.fqdn<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062a\u0648\u062c\u0647:\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06a9\u0645\u06cc \u0627\u06cc\u062c\u0627\u062f \u0638\u0631\u0641 \u0631\u0627 \u0633\u0641\u0627\u0631\u0634\u06cc \u06a9\u0646\u06cc\u062f. \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 \u0627\u0632 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc \u0627\u0631\u0627\u0626\u0647 \u0634\u062f\u0647 \u062f\u0631 \u0632\u06cc\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f:\u0627\u06cc\u062c\u0627\u062f \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc \u0628\u0631\u0627\u06cc \u062c\u0627\u0648\u0627 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure.<\/p>\n<p>  2.9. \u0627\u062e\u062a\u0635\u0627\u0635 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure<\/p>\n<p>\u067e\u0633 \u0627\u0632 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure\u060c \u0645\u0631\u062d\u0644\u0647 \u0622\u062e\u0631 \u0627\u0639\u0645\u0627\u0644 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a\u200c\u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631 \u0638\u0631\u0641\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u06cc\u0645. \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f az containerapp identity assign \u0641\u0631\u0645\u0627\u0646<\/p>\n<p>az containerapp identity assign &#8211;name $CONTAINER_APP_NAME \\<br \/>\n                                &#8211;resource-group $RESOURCE_GROUP \\<br \/>\n                                &#8211;user-assigned $USER_MANAGED_ID_RESOURCE_ID<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0628\u0627 \u0622\u0646\u060c \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc User Managed Identity \u06a9\u0627\u0645\u0644 \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p>  2.10. \u062a\u0627\u06cc\u06cc\u062f \u0639\u0645\u0644\u06cc\u0627\u062a<\/p>\n<p>\u062d\u0627\u0644\u0627 \u06a9\u0647 \u062a\u0645\u0627\u0645 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u06a9\u0627\u0645\u0644 \u0634\u062f\u060c \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u0639\u0645\u0644\u06cc\u0627\u062a \u0631\u0627 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u06cc\u0645. \u0627\u0628\u062a\u062f\u0627 \u0646\u0627\u0645 \u0645\u06cc\u0632\u0628\u0627\u0646 FQDN \u0631\u0627 \u06a9\u0647 \u0628\u0647 Ingress \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0628\u062f\u0633\u062a \u0622\u0648\u0631\u06cc\u062f.<\/p>\n<p>export REST_ENDPOINT=$(az containerapp show -n $CONTAINER_APP_NAME \\<br \/>\n          -g $RESOURCE_GROUP \\<br \/>\n          &#8211;query properties.configuration.ingress.fqdn &#8211;output tsv)<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0633\u067e\u0633 URL \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc RESTful \u0631\u0627 \u0628\u0647 \u0646\u0627\u0645 \u0645\u06cc\u0632\u0628\u0627\u0646 \u0628\u0647 \u062f\u0633\u062a \u0622\u0645\u062f\u0647 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f \u0648 \u0628\u0647 \u0622\u0646 \u0645\u062a\u0635\u0644 \u0634\u0648\u06cc\u062f.<\/p>\n<p>curl -X POST https:\/\/$REST_ENDPOINT\/askAI \\<br \/>\n     -H &#8220;Content-Type: application\/json&#8221; \\<br \/>\n     -d &#8216;{&#8220;message&#8221;:&#8221;What is Spring Boot? please explain around 200 words?&#8221;}&#8217;<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0647\u0631 \u0628\u0627\u0631 \u06a9\u0647 \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u062f\u060c \u067e\u0627\u0633\u062e \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0645\u062a\u0641\u0627\u0648\u062a \u0628\u0627\u0634\u062f\u060c \u0627\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0646\u062a\u0638\u0627\u0631 \u0646\u062a\u0627\u06cc\u062c\u06cc \u0645\u0627\u0646\u0646\u062f \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f.<\/p>\n<p>Arrr, Spring Boot be a powerful framework fer buildin&#8217; Java applications with minimal fuss, savvy?<br \/>\nIt sails under the banner of the larger Spring ecosystem, providin&#8217; a swift and easy approach fer creatin&#8217; scalable and stand-alone web apps.<\/p>\n<p>Ye see, it comes with embedded servers like Tomcat or Jetty, meanin&#8217; ye don&#8217;t have the hassle of deployin&#8217; to external servers.<br \/>\nSpring Boot simplifies the setup by makin&#8217; configurations automatic, allowin&#8217; developers to focus on writin&#8217; their code without worryin&#8217; about the boilerplate.<\/p>\n<p>It also hoists the flag of convention over configuration, offerin&#8217; defaults that make gettin\u2019 started as smooth as a voyage with favorable winds.<br \/>\nShould ye need to adjust yer sails, customization be available through its easy-to-use properties.<\/p>\n<p>And if ye treasure quick development, Spring Boot supports ye well with its rich assortment of pre-configured starters, integratin&#8217; smoothly with other technologies like databases and messaging systems.<\/p>\n<p>In essence, Spring Boot be a trusty vessel fer any sea-farin&#8217; coder seekin&#8217; speed, efficiency, and a treasure chest of features in their Java web applications.<br \/>\nAye, it be a boon to all developers, whether seasoned or green as a fresh landlubber!<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  2.11. \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f \u0627\u0632 \u0647\u0645\u0627\u0646 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 Azure OpenAI \u0627\u0632 \u0633\u0627\u06cc\u0631 \u0645\u0646\u0627\u0628\u0639 Azure<\/p>\n<p>\u0642\u0628\u0644\u0627\u064b \u062f\u0631 \u0645\u0648\u0631\u062f \u0646\u062d\u0648\u0647 \u0627\u0639\u0645\u0627\u0644 a User Managed Identity \u0628\u0647 Azure Container Apps \u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644 \u0628\u0647 Azure OpenAI. \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0627\u06cc\u0646 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u062a\u0648\u0633\u0637 \u0633\u0627\u06cc\u0631 \u0633\u0631\u0648\u06cc\u0633 \u0647\u0627 \u0646\u06cc\u0632 \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f \u0642\u0631\u0627\u0631 \u06af\u06cc\u0631\u062f.<\/p>\n<p>\u0628\u0647 \u0639\u0628\u0627\u0631\u062a \u062f\u06cc\u06af\u0631\u060c \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u0645\u0633\u062a\u0642\u0631 \u062f\u0631 \u062f\u06cc\u06af\u0631 \u0645\u0646\u0627\u0628\u0639 Azure \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0646\u062f \u0627\u0632 \u0647\u0645\u0627\u0646 User Managed Identity \u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644 \u0628\u0647 Azure OpenAI \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0646\u062f. <\/p>\n<p>\u0628\u0631\u062e\u06cc \u0627\u0632 \u0645\u0646\u0627\u0628\u0639 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u0646\u062f \u0627\u06cc\u0646 \u0647\u0648\u06cc\u062a \u0631\u0627 \u062f\u0631 \u062d\u06cc\u0646 \u0627\u06cc\u062c\u0627\u062f \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f\u060c \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0628\u0631\u062e\u06cc \u062f\u06cc\u06af\u0631\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0639\u062f\u0627\u064b \u0622\u0646 \u0631\u0627 \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0647\u06cc\u062f.<\/p>\n<p>\u062f\u0631 \u0632\u06cc\u0631\u060c \u0646\u062d\u0648\u0647 \u0627\u062e\u062a\u0635\u0627\u0635 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0645\u0646\u0627\u0628\u0639 \u0645\u0648\u062c\u0648\u062f Azure\u060c \u0628\u0647 \u062c\u0632 \u0646\u0645\u0648\u0646\u0647\u200c\u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u06cc\u0645.<\/p>\n<p>  \u0628\u0631\u0627\u06cc Azure VM<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0627\u062e\u062a\u0635\u0627\u0635 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0645\u0627\u0634\u06cc\u0646 \u0645\u062c\u0627\u0632\u06cc Azure\u060c \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f:<\/p>\n<p>az vm identity assign -g $RESOURCE_GROUP \\<br \/>\n                      -n $VM_NAME \\<br \/>\n                      &#8211;identities $USER_MANAGED_ID_RESOURCE_ID<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0628\u0631\u0627\u06cc \u0633\u0631\u0648\u06cc\u0633 \u0628\u0631\u0646\u0627\u0645\u0647 Azure<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0627\u062e\u062a\u0635\u0627\u0635 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u06cc\u06a9 \u0633\u0631\u0648\u06cc\u0633 \u0628\u0631\u0646\u0627\u0645\u0647 Azure\u060c \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f:<\/p>\n<p>az webapp identity assign -g $RESOURCE_GROUP \\<br \/>\n                          &#8211;name $APP_SERVICE_NAME \\<br \/>\n                          &#8211;identities $USER_MANAGED_ID_RESOURCE_ID<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0628\u0631\u0627\u06cc \u062a\u0648\u0627\u0628\u0639 Azure<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0627\u062e\u062a\u0635\u0627\u0635 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u062a\u0648\u0627\u0628\u0639 Azure\u060c \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f:<\/p>\n<p>az functionapp identity assign -g $RESOURCE_GROUP \\<br \/>\n                               -n $AZURE_FUNCTION_NAME \\<br \/>\n                               &#8211;identities $USER_MANAGED_ID_RESOURCE_ID<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0628\u0631\u0627\u06cc \u0646\u0645\u0648\u0646\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0646\u0645\u0648\u0646\u0647\u200c\u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u062f\u0631 \u0637\u0648\u0644 \u0627\u06cc\u062c\u0627\u062f \u0646\u0645\u0648\u0646\u0647\u060c \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a\u200c\u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0647\u06cc\u062f:<\/p>\n<p>az container create \\<br \/>\n                    &#8211;resource-group $RESOURCE_GROUP  \\<br \/>\n                    &#8211;name $CONTAINER_INSTANCE_NAME \\<br \/>\n                    &#8211;image $CONTAINER_IMAGE \\<br \/>\n                    &#8211;assign-identity $USER_MANAGED_ID_RESOURCE_ID <\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0628\u0631\u0627\u06cc \u0633\u0631\u0648\u06cc\u0633 Azure Kubernetes<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0627\u062e\u062a\u0635\u0627\u0635 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0633\u0631\u0648\u06cc\u0633 Azure Kubernetes\u060c \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f:<\/p>\n<p>az aks update \\<br \/>\n                -g $RESOURCE_GROUP \\<br \/>\n                &#8211;name $AKS_CLUSTER_NAME \\<br \/>\n                &#8211;enable-managed-identity \\<br \/>\n                &#8211;assign-identity $USER_MANAGED_ID_RESOURCE_ID<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0645\u0627\u0646\u0646\u062f \u0627\u06cc\u0646\u060c \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f \u0627\u0632 \u0646\u0642\u0634 \u0647\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0634\u062f\u0647\u060c \u0628\u0647 \u0637\u0648\u0631 \u0627\u06cc\u0645\u0646 \u0628\u0647 \u0645\u0646\u0627\u0628\u0639 \u0647\u062f\u0641 \u062f\u0631 \u0633\u0631\u0648\u06cc\u0633 \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 Azure \u0645\u062a\u0635\u0644 \u0634\u0648\u06cc\u062f.<\/p>\n<p>  2.12. \u0645\u0642\u0627\u06cc\u0633\u0647 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0648 \u0647\u0648\u06cc\u062a \u0647\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 \u062f\u06cc\u062f\u06af\u0627\u0647 \u0627\u0645\u0646\u06cc\u062a\u06cc<\/p>\n<p>\u0627\u06cc\u0646 \u0628\u062e\u0634 \u062a\u0641\u0627\u0648\u062a \u0647\u0627\u06cc \u0627\u0645\u0646\u06cc\u062a\u06cc \u0628\u06cc\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0648 \u0647\u0648\u06cc\u062a \u0647\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0631\u0627\u06cc Azure OpenAI \u0631\u0627 \u062a\u0648\u0636\u06cc\u062d \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p>\u0647\u0646\u06af\u0627\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631\u060c \u0634\u0645\u0627 \u0622\u0646 \u0631\u0627 \u0645\u0634\u062e\u0635 \u0645\u06cc \u06a9\u0646\u06cc\u062f client ID \u0627\u0632 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0647\u0646\u06af\u0627\u0645 \u0627\u06cc\u062c\u0627\u062f \u0646\u0645\u0648\u0646\u0647 \u0627\u06cc \u0627\u0632 ManagedIdentityCredential \u06a9\u0644\u0627\u0633 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0627\u0648\u0627 \u0634\u0645\u0627 \u0627\u06cc\u0646 client ID \u0645\u0642\u062f\u0627\u0631 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0645\u062a\u063a\u06cc\u0631 \u0645\u062d\u06cc\u0637\u06cc \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc \u0634\u0648\u062f $USER_MANAGED_ID_CLIENT_ID \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u062f\u0631 \u0646\u06af\u0627\u0647 \u0627\u0648\u0644\u060c \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0628\u0647 \u0646\u0638\u0631 \u0628\u0631\u0633\u062f \u06a9\u0647 \u0627\u06cc\u0646 \u062a\u0646\u0647\u0627 \u0628\u062e\u0634 \u0645\u0647\u0645\u06cc \u0627\u0632 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644 \u0627\u0633\u062a\u060c \u0628\u0647 \u063a\u06cc\u0631 \u0627\u0632 URL \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc.<\/p>\n<p>ManagedIdentityCredential credential =<br \/>\n        new ManagedIdentityCredentialBuilder()<br \/>\n                       .clientId(userManagedIDClientId)<br \/>\n                        .build();<br \/>\nOpenAIClient openAIClient = new OpenAIClientBuilder()<br \/>\n                                        .credential(credential)<br \/>\n                                        .endpoint(openAIEndpoint)<br \/>\n                                        .buildClient();<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u062a\u0623\u062b\u06cc\u0631 \u06cc\u06a9 \u0641\u0627\u0634 \u0634\u062f\u0647 \u0631\u0627 \u062f\u0631 \u0646\u0638\u0631 \u0628\u06af\u06cc\u0631\u06cc\u0645 client ID \u062f\u0631 \u0645\u0642\u0627\u0628\u0644 \u0644\u0648 \u0631\u0641\u062a\u0647 Access Key.<\/p>\n<p>\u06cc\u06a9 Access Key \u0634\u0628\u06cc\u0647 \u06cc\u06a9 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0645\u0639\u0645\u0648\u0644\u06cc \u0627\u0633\u062a. \u0627\u06af\u0631 \u0641\u0627\u0634 \u0634\u0648\u062f\u060c \u0647\u0631 \u06a9\u0633\u06cc \u06a9\u0647 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0631\u0627 \u0628\u062f\u0627\u0646\u062f \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0647 \u0645\u0646\u0628\u0639 \u062f\u0633\u062a\u0631\u0633\u06cc \u067e\u06cc\u062f\u0627 \u06a9\u0646\u062f. \u062f\u0631 \u0645\u0648\u0631\u062f Azure OpenAI\u060c \u0627\u06cc\u0646 \u0628\u062f\u0627\u0646 \u0645\u0639\u0646\u0627\u0633\u062a \u06a9\u0647 \u0647\u0631 \u06a9\u0633\u06cc \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0627\u0632 \u0645\u062f\u0644\u200c\u0647\u0627\u06cc \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0645\u0627\u0646\u0646\u062f GPT-4 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u062f. \u0627\u06af\u0631 \u0634\u0628\u06a9\u0647 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0639\u0645\u0648\u0645 \u0628\u0627\u0634\u062f\u060c \u062a\u0623\u062b\u06cc\u0631 \u0622\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u062d\u062a\u06cc \u0628\u06cc\u0634\u062a\u0631 \u0628\u0627\u0634\u062f.<\/p>\n<p>\u0627\u0632 \u0633\u0648\u06cc \u062f\u06cc\u06af\u0631\u060c \u0627\u06af\u0631 client ID \u0644\u0648 \u0631\u0641\u062a\u0647 \u0627\u0633\u062a\u060c \u062a\u0627\u062b\u06cc\u0631 \u0645\u062d\u062f\u0648\u062f \u0627\u0633\u062a. \u0627\u06cc\u0646 \u0628\u0647 \u0627\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u0627\u0633\u062a \u06a9\u0647 client ID \u0628\u0647 \u062a\u0646\u0647\u0627\u06cc\u06cc \u0646\u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0647 Azure OpenAI \u0645\u062a\u0635\u0644 \u0634\u0648\u062f. \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631\u060c \u0627\u06cc\u0646 \u0633\u0631\u0648\u06cc\u0633 \u0628\u0627\u06cc\u062f \u0631\u0648\u06cc Azure \u0627\u062c\u0631\u0627 \u0634\u0648\u062f. \u062d\u062a\u06cc \u0627\u06af\u0631 Azure OpenAI \u0628\u0631\u0627\u06cc \u0639\u0645\u0648\u0645 \u0642\u0627\u0628\u0644 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0627\u0634\u062f\u060c \u0646\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u0645\u062d\u0644\u06cc \u06cc\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u06cc\u06a9 \u0634\u0628\u06a9\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0627\u0648\u0627 \u0645\u062a\u0635\u0644 \u0634\u0648\u06cc\u062f.<\/p>\n<p>\u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646\u060c \u0627\u0646\u062a\u0633\u0627\u0628 \u0646\u0642\u0634 \u0632\u06cc\u0631 \u0628\u0631\u0627\u06cc \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u06a9\u0627\u0631\u0628\u0631 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<p>az role assignment create &#8211;assignee $USER_MANAGED_ID_PRINCIPAL_ID \\<br \/>\n    &#8211;scope $OPEN_AI_RESOURCE_ID \\<br \/>\n    &#8211;role &#8220;Cognitive Services OpenAI User&#8221; <\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0627\u06cc\u0646 \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0686\u0647 \u0627\u0642\u062f\u0627\u0645\u0627\u062a\u06cc \u0631\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u0634\u0646\u0627\u0633\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u062f\u0627\u062f. \u0627\u06cc\u0646\u062c\u0627\u060c Cognitive Services OpenAI User \u0627\u06cc\u0646 \u0646\u0642\u0634 \u0628\u0631\u0627\u06cc \u062e\u062f\u0645\u0627\u062a Azure OpenAI \u0627\u0639\u0637\u0627 \u0645\u06cc \u0634\u0648\u062f \u0648 \u0645\u062c\u0648\u0632\u0647\u0627 \u0631\u0627 \u0628\u0647 \u0639\u0645\u0644\u06cc\u0627\u062a \u062f\u0631 Azure OpenAI \u0645\u062d\u062f\u0648\u062f \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u0628\u062f\u0627\u0646 \u0645\u0639\u0646\u0627\u0633\u062a \u06a9\u0647 \u062d\u062a\u06cc \u0628\u0627 \u0627\u06cc\u0646 \u0634\u0646\u0627\u0633\u0647\u060c \u0646\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a\u06cc \u0645\u0627\u0646\u0646\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0645\u062f\u0644\u200c\u0647\u0627 \u0631\u0627 \u0646\u0647 \u0641\u0642\u0637 \u062f\u0631 \u0633\u0631\u0627\u0633\u0631 Azure \u0628\u0644\u06a9\u0647 \u062d\u062a\u06cc \u062f\u0631 Azure OpenAI \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f.<\/p>\n<p>\u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646\u060c \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u0634\u0646\u0627\u0633\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc\u060c \u0628\u0627\u06cc\u062f \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0633\u0631\u067e\u0631\u0633\u062a \u0628\u0647 Azure \u0648\u0627\u0631\u062f \u0634\u0648\u06cc\u062f \u0648 \u062a\u0646\u0647\u0627 \u0645\u0646\u0627\u0628\u0639\u06cc \u06a9\u0647 \u062a\u0648\u0633\u0637 \u0633\u0631\u067e\u0631\u0633\u062a \u0645\u0634\u062e\u0635 \u0634\u062f\u0647 \u0627\u0633\u062a \u062f\u0631 \u0645\u062d\u062f\u0648\u062f\u0647 \u0645\u062c\u0648\u0632\u0647\u0627\u06cc \u0627\u06cc\u0646 \u0634\u0646\u0627\u0633\u0647 \u0642\u0627\u0628\u0644 \u062f\u0633\u062a\u0631\u0633\u06cc \u0647\u0633\u062a\u0646\u062f.<\/p>\n<p>\u0628\u0647 \u0637\u0648\u0631 \u062e\u0644\u0627\u0635\u0647\u060c \u062f\u0631 \u0645\u0642\u0627\u06cc\u0633\u0647 \u0628\u0627 \u062a\u0623\u062b\u06cc\u0631 \u06cc\u06a9 \u06a9\u0644\u06cc\u062f \u062f\u0633\u062a\u0631\u0633\u06cc \u0644\u0648 \u0631\u0641\u062a\u0647\u060c \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u06a9\u0644\u0627\u06cc\u0646\u062a \u0641\u0627\u0634 \u0634\u062f\u0647 \u0628\u0647 \u0686\u0646\u062f\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u0628\u0631\u0627\u06cc \u0628\u0647\u0631\u0647 \u0628\u0631\u062f\u0627\u0631\u06cc \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0627\u06cc\u0645\u0646 \u062a\u0631 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0628\u0647 \u0627\u06cc\u0646 \u062f\u0644\u0627\u06cc\u0644\u060c \u0634\u0646\u0627\u0633\u0647\u200c\u0647\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a\u200c\u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648\u0634\u06cc \u0627\u0645\u0646\u200c\u062a\u0631 \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0639\u0645\u0644\u06cc\u0627\u062a \u0646\u0633\u0628\u062a \u0628\u0647 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f. \u0645\u0627 \u0634\u0645\u0627 \u0631\u0627 \u062a\u0634\u0648\u06cc\u0642 \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0627\u0632 \u0647\u0648\u06cc\u062a \u0647\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u0627\u0645\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>  3 \u062e\u0644\u0627\u0635\u0647<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627\u060c \u0645\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u06cc\u06a9 \u0641\u0631\u0622\u06cc\u0646\u062f \u062f\u0642\u06cc\u0642 \u0648 \u06af\u0627\u0645 \u0628\u0647 \u06af\u0627\u0645 \u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644 \u0627\u06cc\u0645\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0628\u0647 Azure OpenAI \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631\u060c \u0642\u062f\u0645 \u0628\u0631\u062f\u0627\u0634\u062a\u06cc\u0645. \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u062f\u0631 \u0627\u0628\u062a\u062f\u0627 \u062f\u0634\u0648\u0627\u0631 \u0628\u0647 \u0646\u0638\u0631 \u0628\u0631\u0633\u062f\u060c \u0627\u0645\u0627 \u0645\u0632\u06cc\u062a \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647 \u0642\u0627\u0628\u0644\u06cc\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f. \u0627\u06af\u0631 \u0633\u06cc\u0633\u062a\u0645\u200c\u0647\u0627\u06cc \u0634\u0645\u0627 \u06a9\u0645 \u0647\u0633\u062a\u0646\u062f \u06cc\u0627 \u0627\u0646\u0639\u0637\u0627\u0641\u200c\u067e\u0630\u06cc\u0631\u06cc \u06cc\u06a9 \u0646\u06af\u0631\u0627\u0646\u06cc \u0639\u0645\u062f\u0647 \u0646\u06cc\u0633\u062a\u060c \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u06cc\u06a9 \u0633\u06cc\u0633\u062a\u0645 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u0647\u0648\u06cc\u062a \u062a\u0631\u062c\u06cc\u062d \u062f\u0627\u062f\u0647 \u0634\u0648\u062f.<\/p>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0628\u0627 \u0627\u0641\u0632\u0627\u06cc\u0634 \u062a\u0639\u062f\u0627\u062f \u0633\u06cc\u0633\u062a\u0645 \u0647\u0627\u060c \u0634\u0646\u0627\u0633\u0647 \u0647\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0633\u06cc\u0627\u0631 \u0645\u0641\u06cc\u062f \u0645\u06cc \u0634\u0648\u0646\u062f. \u067e\u0633 \u0627\u0632 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0648 \u062a\u062e\u0635\u06cc\u0635 \u0646\u0642\u0634\u200c\u0647\u0627\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0647\u0645\u0627\u0646 \u0634\u0646\u0627\u0633\u0647 \u062f\u0631 \u0633\u0631\u0648\u06cc\u0633\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641\u06cc \u0645\u0627\u0646\u0646\u062f Azure App Service\u060c Azure Functions\u060c \u0648 Azure Kubernetes Services \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f. \u0647\u0631\u0686\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0647\u0627 \u06cc\u0627 \u062e\u062f\u0645\u0627\u062a \u0628\u06cc\u0634\u062a\u0631\u06cc \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u06cc\u062f\u060c \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0633\u0648\u062f\u0645\u0646\u062f\u062a\u0631 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u0644\u0637\u0641\u0627\u064b \u0633\u0639\u06cc \u06a9\u0646\u06cc\u062f \u0627\u0632 \u0647\u0648\u06cc\u062a \u0647\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u062d\u06cc\u0637 \u0647\u0627\u06cc \u0627\u0645\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<div data-article-id=\"2001965\" id=\"article-body\">\n<p>\u0627\u0645\u0631\u0648\u0632\u060c \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u0645 \u062f\u0648 \u0646\u06a9\u062a\u0647 \u06a9\u0644\u06cc\u062f\u06cc \u0631\u0627 \u0627\u0632 \u0648\u0631\u0648\u062f\u06cc \u00ab\u0627\u062a\u0635\u0627\u0644 \u0627\u06cc\u0645\u0646 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0628\u0647 Azure OpenAI \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a\u200c\u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631\u00bb \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u0628\u06af\u0630\u0627\u0631\u0645:<\/p>\n<ol>\n<li>\u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u062c\u0627\u0648\u0627 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0628\u062f\u0648\u0646 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u0633\u0627\u0632\u06cc<\/li>\n<li>\u0627\u062a\u0635\u0627\u0644 \u0627\u06cc\u0645\u0646 \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0628\u0647 Azure OpenAI \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631<\/li>\n<\/ol>\n<p>\u06a9\u062f \u0645\u0646\u0628\u0639 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0634\u062f\u0647 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0631\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646 \u062f\u0631 \u0645\u062e\u0632\u0646 GitHub \u0632\u06cc\u0631 \u06cc\u0627\u0641\u062a.<br \/>GitHub: Secure-OpenAI-Java-App-on-Azure-Container-Apps<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"\u062a\u063a\u06cc\u06cc\u0631 \u0648\u0636\u0639\u06cc\u062a \u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#1_%D8%A7%D8%B3%D8%AA%D9%82%D8%B1%D8%A7%D8%B1_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%87%D8%A7%DB%8C_%D8%AC%D8%A7%D9%88%D8%A7_%D8%AF%D8%B1_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%87%D8%A7%DB%8C_%DA%A9%D8%A7%D9%86%D8%AA%DB%8C%D9%86%D8%B1_Azure_%D8%A8%D8%AF%D9%88%D9%86_%DA%A9%D8%A7%D9%86%D8%AA%DB%8C%D9%86%D8%B1%D8%B3%D8%A7%D8%B2%DB%8C\" >1. \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u062c\u0627\u0648\u0627 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0628\u062f\u0648\u0646 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u0633\u0627\u0632\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#2_%D8%A7%D8%AA%D8%B5%D8%A7%D9%84_%D8%A7%DB%8C%D9%85%D9%86_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%87%D8%A7%DB%8C_%DA%A9%D8%A7%D9%86%D8%AA%DB%8C%D9%86%D8%B1_Azure_%D8%A8%D9%87_Azure_OpenAI_%D8%A8%D8%A7_%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%D8%A7%D8%B2_%D9%87%D9%88%DB%8C%D8%AA_%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA_%D8%B4%D8%AF%D9%87_%D8%AA%D9%88%D8%B3%D8%B7_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1\" >2. \u0627\u062a\u0635\u0627\u0644 \u0627\u06cc\u0645\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0628\u0647 Azure OpenAI \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#%D9%85%D8%B1%D8%A7%D8%AD%D9%84_%D8%AA%D9%86%D8%B8%DB%8C%D9%85_%D9%87%D9%88%DB%8C%D8%AA_%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA_%D8%B4%D8%AF%D9%87_%D8%AA%D9%88%D8%B3%D8%B7_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1\" >\u0645\u0631\u0627\u062d\u0644 \u062a\u0646\u0638\u06cc\u0645 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#21_%D8%AA%D9%86%D8%B8%DB%8C%D9%85_%D9%85%D8%AA%D8%BA%DB%8C%D8%B1%D9%87%D8%A7%DB%8C_%D9%85%D8%AD%DB%8C%D8%B7%DB%8C\" >2.1. \u062a\u0646\u0638\u06cc\u0645 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#22_%DB%8C%DA%A9_%DA%AF%D8%B1%D9%88%D9%87_%D9%85%D9%86%D8%A7%D8%A8%D8%B9_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%DA%A9%D9%86%DB%8C%D8%AF\" >2.2. \u06cc\u06a9 \u06af\u0631\u0648\u0647 \u0645\u0646\u0627\u0628\u0639 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#23_%DB%8C%DA%A9_%D9%86%D9%85%D9%88%D9%86%D9%87_Azure_OpenAI_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%DA%A9%D9%86%DB%8C%D8%AF\" >2.3. \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 Azure OpenAI \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#24_%DB%8C%DA%A9_%D9%87%D9%88%DB%8C%D8%AA_%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA_%D8%B4%D8%AF%D9%87_%D8%AA%D9%88%D8%B3%D8%B7_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%DA%A9%D9%86%DB%8C%D8%AF\" >2.4. \u06cc\u06a9 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#25_%D9%86%D9%82%D8%B4_%D9%87%D8%A7_%D8%B1%D8%A7_%D8%A8%D9%87_%D9%87%D9%88%DB%8C%D8%AA_%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA_%D8%B4%D8%AF%D9%87_%D8%AA%D9%88%D8%B3%D8%B7_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1_%D8%A8%D8%B1%D8%A7%DB%8C_Azure_OpenAI_%D8%A7%D8%AE%D8%AA%D8%B5%D8%A7%D8%B5_%D8%AF%D9%87%DB%8C%D8%AF\" >2.5. \u0646\u0642\u0634 \u0647\u0627 \u0631\u0627 \u0628\u0647 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0631\u0627\u06cc Azure OpenAI \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0647\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#26_%DB%8C%DA%A9_%D9%85%D8%AD%DB%8C%D8%B7_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%87%D8%A7%DB%8C_%DA%A9%D8%A7%D9%86%D8%AA%DB%8C%D9%86%D8%B1_Azure_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%DA%A9%D9%86%DB%8C%D8%AF\" >2.6. \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#27_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%DB%8C%DA%A9_%D9%88%D8%A8_%D8%A7%D9%BE%D9%84%DB%8C%DA%A9%DB%8C%D8%B4%D9%86_Spring_Boot\" >2.7. \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0648\u0628 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 Spring Boot<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#271_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D9%BE%D8%B1%D9%88%DA%98%D9%87_Spring_Boot\" >2.7.1 \u0627\u06cc\u062c\u0627\u062f \u067e\u0631\u0648\u0698\u0647 Spring Boot<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#272_%D9%88%DB%8C%D8%B1%D8%A7%DB%8C%D8%B4_%D9%81%D8%A7%DB%8C%D9%84_%D9%BE%D8%B1%D9%88%DA%98%D9%87_pomxml\" >2.7.2 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0641\u0627\u06cc\u0644 \u067e\u0631\u0648\u0698\u0647 pom.xml<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#273_%D9%BE%DB%8C%D8%A7%D8%AF%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%D9%86%D9%82%D8%B7%D9%87_%D9%BE%D8%A7%DB%8C%D8%A7%D9%86%DB%8C_RESTful_%D8%A8%D8%AE%D8%B4_%D8%A7%D8%B5%D9%84%DB%8C\" >2.7.3 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc RESTful (\u0628\u062e\u0634 \u0627\u0635\u0644\u06cc)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#274_%D8%AA%D8%B9%D8%B1%DB%8C%D9%81_%D9%81%D8%B1%D9%85%D8%AA_JSON_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%AF%D8%B1%DB%8C%D8%A7%D9%81%D8%AA_%D9%86%D9%82%D8%B7%D9%87_%D9%BE%D8%A7%DB%8C%D8%A7%D9%86%DB%8C\" >2.7.4 \u062a\u0639\u0631\u06cc\u0641 \u0641\u0631\u0645\u062a JSON \u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#275_%D9%BE%DB%8C%DA%A9%D8%B1%D8%A8%D9%86%D8%AF%DB%8C_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87\" >2.7.5 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0628\u0631\u0646\u0627\u0645\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#276_%D8%A7%D8%AE%D8%AA%DB%8C%D8%A7%D8%B1%DB%8C_%D8%AA%D8%A3%DB%8C%DB%8C%D8%AF_%D8%B9%D9%85%D9%84%DB%8C%D8%A7%D8%AA_%D8%AF%D8%B1_%DB%8C%DA%A9_%D9%85%D8%AD%DB%8C%D8%B7_%D9%85%D8%AD%D9%84%DB%8C\" >2.7.6 (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc): \u062a\u0623\u06cc\u06cc\u062f \u0639\u0645\u0644\u06cc\u0627\u062a \u062f\u0631 \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u0645\u062d\u0644\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#277_%D8%B3%D8%A7%D8%AE%D8%AA_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%88_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D9%85%D8%B5%D9%86%D9%88%D8%B9%D8%A7%D8%AA\" >2.7.7 \u0633\u0627\u062e\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0648 \u0627\u06cc\u062c\u0627\u062f \u0645\u0635\u0646\u0648\u0639\u0627\u062a<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#28_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D9%86%D9%85%D9%88%D9%86%D9%87_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%87%D8%A7%DB%8C_%DA%A9%D8%A7%D9%86%D8%AA%DB%8C%D9%86%D8%B1_Azure\" >2.8. \u0627\u06cc\u062c\u0627\u062f \u0646\u0645\u0648\u0646\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#29_%D8%A7%D8%AE%D8%AA%D8%B5%D8%A7%D8%B5_%D9%87%D9%88%DB%8C%D8%AA_%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA_%D8%B4%D8%AF%D9%87_%D8%AA%D9%88%D8%B3%D8%B7_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1_%D8%A8%D9%87_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%87%D8%A7%DB%8C_%DA%A9%D8%A7%D9%86%D8%AA%DB%8C%D9%86%D8%B1_Azure\" >2.9. \u0627\u062e\u062a\u0635\u0627\u0635 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#210_%D8%AA%D8%A7%DB%8C%DB%8C%D8%AF_%D8%B9%D9%85%D9%84%DB%8C%D8%A7%D8%AA\" >2.10. \u062a\u0627\u06cc\u06cc\u062f \u0639\u0645\u0644\u06cc\u0627\u062a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#211_%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%D9%85%D8%AC%D8%AF%D8%AF_%D8%A7%D8%B2_%D9%87%D9%85%D8%A7%D9%86_%D9%87%D9%88%DB%8C%D8%AA_%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA_%D8%B4%D8%AF%D9%87_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C_%D8%A8%D9%87_Azure_OpenAI_%D8%A7%D8%B2_%D8%B3%D8%A7%DB%8C%D8%B1_%D9%85%D9%86%D8%A7%D8%A8%D8%B9_Azure\" >2.11. \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f \u0627\u0632 \u0647\u0645\u0627\u0646 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 Azure OpenAI \u0627\u0632 \u0633\u0627\u06cc\u0631 \u0645\u0646\u0627\u0628\u0639 Azure<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#%D8%A8%D8%B1%D8%A7%DB%8C_Azure_VM\" >\u0628\u0631\u0627\u06cc Azure VM<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#%D8%A8%D8%B1%D8%A7%DB%8C_%D8%B3%D8%B1%D9%88%DB%8C%D8%B3_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_Azure\" >\u0628\u0631\u0627\u06cc \u0633\u0631\u0648\u06cc\u0633 \u0628\u0631\u0646\u0627\u0645\u0647 Azure<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#%D8%A8%D8%B1%D8%A7%DB%8C_%D8%AA%D9%88%D8%A7%D8%A8%D8%B9_Azure\" >\u0628\u0631\u0627\u06cc \u062a\u0648\u0627\u0628\u0639 Azure<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#%D8%A8%D8%B1%D8%A7%DB%8C_%D9%86%D9%85%D9%88%D9%86%D9%87_%D9%87%D8%A7%DB%8C_%DA%A9%D8%A7%D9%86%D8%AA%DB%8C%D9%86%D8%B1_Azure\" >\u0628\u0631\u0627\u06cc \u0646\u0645\u0648\u0646\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#%D8%A8%D8%B1%D8%A7%DB%8C_%D8%B3%D8%B1%D9%88%DB%8C%D8%B3_Azure_Kubernetes\" >\u0628\u0631\u0627\u06cc \u0633\u0631\u0648\u06cc\u0633 Azure Kubernetes<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#212_%D9%85%D9%82%D8%A7%DB%8C%D8%B3%D9%87_%DA%A9%D9%84%DB%8C%D8%AF%D9%87%D8%A7%DB%8C_%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C_%D9%88_%D9%87%D9%88%DB%8C%D8%AA_%D9%87%D8%A7%DB%8C_%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA_%D8%B4%D8%AF%D9%87_%D8%AA%D9%88%D8%B3%D8%B7_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1_%D8%A7%D8%B2_%D8%AF%DB%8C%D8%AF%DA%AF%D8%A7%D9%87_%D8%A7%D9%85%D9%86%DB%8C%D8%AA%DB%8C\" >2.12. \u0645\u0642\u0627\u06cc\u0633\u0647 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0648 \u0647\u0648\u06cc\u062a \u0647\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 \u062f\u06cc\u062f\u06af\u0627\u0647 \u0627\u0645\u0646\u06cc\u062a\u06cc<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"https:\/\/nabfollower.com\/blog\/securely-connecting-azure-container-apps-to-azure-openai-using-user-managed-identity-3369\/#3_%D8%AE%D9%84%D8%A7%D8%B5%D9%87\" >3 \u062e\u0644\u0627\u0635\u0647<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"1_%D8%A7%D8%B3%D8%AA%D9%82%D8%B1%D8%A7%D8%B1_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%87%D8%A7%DB%8C_%D8%AC%D8%A7%D9%88%D8%A7_%D8%AF%D8%B1_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%87%D8%A7%DB%8C_%DA%A9%D8%A7%D9%86%D8%AA%DB%8C%D9%86%D8%B1_Azure_%D8%A8%D8%AF%D9%88%D9%86_%DA%A9%D8%A7%D9%86%D8%AA%DB%8C%D9%86%D8%B1%D8%B3%D8%A7%D8%B2%DB%8C\"><\/span>\n<p>  1. \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u062c\u0627\u0648\u0627 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0628\u062f\u0648\u0646 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u0633\u0627\u0632\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 11 \u0633\u067e\u062a\u0627\u0645\u0628\u0631 2024\u060c \u0627\u0639\u0644\u0627\u0645\u06cc\u0647 &#8220;\u0627\u0639\u0644\u0627\u0645 \u062f\u0633\u062a\u0631\u0633\u06cc \u0639\u0645\u0648\u0645\u06cc \u062a\u062c\u0631\u0628\u06cc\u0627\u062a \u062c\u0627\u0648\u0627 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure&#8221; \u0645\u0646\u062a\u0634\u0631 \u0634\u062f.<\/p>\n<p>\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u0645\u0631\u0648\u0631 \u06a9\u0644\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u062c\u0627\u0648\u0627 \u062f\u0631 Azure \u062a\u0648\u0636\u06cc\u062d \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u062c\u0627\u0648\u0627 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0627\u0641\u0632\u0627\u06cc\u0634 \u06cc\u0627\u0641\u062a\u0647 \u0627\u0633\u062a. \u0628\u0631\u0627\u06cc \u0645\u062b\u0627\u0644\u060c Azure Container Apps \u0627\u06a9\u0646\u0648\u0646 \u0627\u0632 \u0627\u062c\u0632\u0627\u06cc Spring \u0632\u06cc\u0631 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u062e\u062f\u0645\u0627\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<ul>\n<li>\u0633\u0631\u0648\u0631 Eureka \u0628\u0631\u0627\u06cc \u0628\u0647\u0627\u0631<\/li>\n<li>\u0633\u0631\u0648\u0631 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0628\u0631\u0627\u06cc Spring<\/li>\n<li>\u0627\u062f\u0645\u06cc\u0646 \u0628\u0631\u0627\u06cc \u0628\u0647\u0627\u0631<\/li>\n<\/ul>\n<p>\u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646\u060c \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 Quickstart: Launch Your First Java Application in Azure Container Apps \u062a\u0648\u0636\u06cc\u062d \u062f\u0627\u062f\u0647 \u0634\u062f\u060c Azure Container Apps \u0627\u06a9\u0646\u0648\u0646 \u0648\u06cc\u0698\u06af\u06cc \u062c\u062f\u06cc\u062f\u06cc \u0628\u0647 \u0646\u0627\u0645 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u06a9\u0646\u062f. <code>Cloud Build Service<\/code>. \u0627\u06cc\u0646 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627 \u0631\u0627 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0627\u0632 \u0645\u0635\u0646\u0648\u0639\u0627\u062a \u062c\u0627\u0648\u0627 \u0645\u0627\u0646\u0646\u062f \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc JAR \u06cc\u0627 WAR \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0645\u0633\u062a\u0642\u0631 \u06a9\u0646\u06cc\u062f. \u0627\u06cc\u0646 \u0633\u0631\u0648\u06cc\u0633 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0631\u0627 \u0627\u0632 \u0645\u0635\u0646\u0648\u0639\u0627\u062a \u062c\u0627\u0648\u0627 \u0645\u0634\u062e\u0635 \u0634\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u0648 \u0645\u0633\u062a\u0642\u0631 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u0646\u0648\u0634\u062a\u0646 \u062f\u0633\u062a\u06cc \u062a\u0639\u0627\u0631\u06cc\u0641 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Dockerfile \u06cc\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0633\u0627\u062e\u062a \u0648 \u0641\u0634\u0627\u0631 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0631\u0627 \u0627\u0632 \u0628\u06cc\u0646 \u0645\u06cc \u0628\u0631\u062f.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0631\u0633\u06cc\u062f\u0646 \u0628\u0647 \u0627\u06cc\u0646 \u0647\u062f\u0641 \u0628\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure\u060c \u0627\u0632 <code>az containerapp up<\/code> \u062f\u0633\u062a\u0648\u0631 \u062f\u0627\u062f\u0647 \u0648 \u0622\u0631\u062a\u06cc\u0641\u06a9\u062a \u062c\u0627\u0648\u0627 \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f. \u0645\u0631\u0627\u062d\u0644 \u0645\u0641\u0635\u0644 \u0628\u0639\u062f\u0627\u064b \u062f\u0631 \u0631\u0627\u0647\u0646\u0645\u0627 \u0627\u0631\u0627\u0626\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a (\u0646\u06af\u0627\u0647 \u06a9\u0646\u06cc\u062f \u0628\u0647: <code>2.8 Creating an Azure Container Apps Instance<\/code>).<\/p>\n<p>\u0627\u06cc\u0646 \u0627\u0645\u0631 \u0628\u0647 \u0637\u0648\u0631 \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647\u06cc \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u062c\u0627\u0648\u0627 \u0631\u0627 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0633\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f. Azure Container Apps \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u062a\u0639\u062f\u0627\u062f \u0646\u0645\u0648\u0646\u0647\u200c\u0647\u0627 \u0631\u0627 \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 \u0627\u0632 \u0635\u0641\u0631 \u0645\u0642\u06cc\u0627\u0633\u200c\u0628\u0646\u062f\u06cc \u06a9\u0646\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u06cc\u06a9 \u0633\u0631\u0648\u06cc\u0633 \u0628\u0633\u06cc\u0627\u0631 \u0631\u0627\u062d\u062a \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0646\u062f. \u0645\u0627 \u0634\u0645\u0627 \u0631\u0627 \u062a\u0634\u0648\u06cc\u0642 \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0622\u0646 \u0631\u0627 \u0627\u0645\u062a\u062d\u0627\u0646 \u06a9\u0646\u06cc\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"2_%D8%A7%D8%AA%D8%B5%D8%A7%D9%84_%D8%A7%DB%8C%D9%85%D9%86_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%87%D8%A7%DB%8C_%DA%A9%D8%A7%D9%86%D8%AA%DB%8C%D9%86%D8%B1_Azure_%D8%A8%D9%87_Azure_OpenAI_%D8%A8%D8%A7_%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%D8%A7%D8%B2_%D9%87%D9%88%DB%8C%D8%AA_%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA_%D8%B4%D8%AF%D9%87_%D8%AA%D9%88%D8%B3%D8%B7_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1\"><\/span>\n<p>  2. \u0627\u062a\u0635\u0627\u0644 \u0627\u06cc\u0645\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0628\u0647 Azure OpenAI \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u0632\u0645\u0627\u0646\u200c\u0647\u0627\u06cc \u0627\u062e\u06cc\u0631\u060c \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u0627\u0645\u0646\u06cc\u062a\u06cc \u0627\u0647\u0645\u06cc\u062a \u0641\u0632\u0627\u06cc\u0646\u062f\u0647\u200c\u0627\u06cc \u067e\u06cc\u062f\u0627 \u06a9\u0631\u062f\u0647\u200c\u0627\u0646\u062f \u0648 \u0628\u0631\u0627\u06cc \u06a9\u0633\u0628\u200c\u0648\u06a9\u0627\u0631\u0647\u0627 \u0636\u0631\u0648\u0631\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0633\u06cc\u0633\u062a\u0645\u200c\u0647\u0627\u06cc \u0627\u0645\u0646\u200c\u062a\u0631\u06cc \u0628\u0633\u0627\u0632\u0646\u062f. \u0645\u0627\u06cc\u06a9\u0631\u0648\u0633\u0627\u0641\u062a \u062a\u0648\u0635\u06cc\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f \u0647\u0646\u06af\u0627\u0645 \u0627\u06cc\u062c\u0627\u062f \u0645\u062d\u06cc\u0637\u200c\u0647\u0627\u06cc \u0627\u0645\u0646\u060c \u0645\u0627\u0646\u0646\u062f \u0645\u062d\u06cc\u0637\u200c\u0647\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f\u060c \u0628\u0647 \u062c\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631\u060c \u0627\u0632 Managed Identity \u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644\u0627\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f. \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0627\u0632 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0645\u0627\u06cc\u06a9\u0631\u0648\u0633\u0627\u0641\u062a Entra ID \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u0631\u0648\u0634 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0645\u062c\u0648\u0632\u0647\u0627\u06cc \u062e\u0627\u0635\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u0646\u0627\u0628\u0639 \u062f\u0631 \u06cc\u06a9 \u0645\u062d\u062f\u0648\u062f\u0647 \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647 \u0627\u0639\u0637\u0627 \u06a9\u0646\u06cc\u062f \u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0627\u0645\u0646\u06cc\u062a \u0631\u0627 \u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631\u062a\u0631 \u0645\u06cc \u06a9\u0646\u062f. \u0628\u0631\u0627\u06cc \u062c\u0632\u0626\u06cc\u0627\u062a \u0628\u06cc\u0634\u062a\u0631 \u062f\u0631 \u0645\u0648\u0631\u062f \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647\u060c \u0628\u0647 \u0645\u0642\u0627\u0644\u0647 &#8220;\u0647\u0648\u06cc\u062a \u0647\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u0628\u0631\u0627\u06cc \u0645\u0646\u0627\u0628\u0639 Azure \u0686\u06cc\u0633\u062a\u061f&#8221; \u0645\u0631\u0627\u062c\u0639\u0647 \u06a9\u0646\u06cc\u062f. \u062f\u0631 \u0627\u06cc\u0646 \u0645\u062f\u062e\u0644\u060c \u0645\u0646 \u0628\u0647 \u0648\u0636\u0648\u062d \u0646\u062d\u0648\u0647 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u06af\u0627\u0645 \u0628\u0647 \u06af\u0627\u0645 \u062a\u0648\u0636\u06cc\u062d \u062e\u0648\u0627\u0647\u0645 \u062f\u0627\u062f.<\/p>\n<p>\u062f\u0646\u0628\u0627\u0644 \u06a9\u0631\u062f\u0646 \u0627\u06cc\u0646 \u0645\u0631\u0627\u062d\u0644 \u0628\u0647 \u0634\u0645\u0627 \u062f\u0631 \u062f\u0631\u06a9 \u0646\u062d\u0648\u0647 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0622\u0646 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f\u060c \u0648 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u0631\u062c\u0639\u06cc \u0628\u0631\u0627\u06cc \u062a\u0646\u0638\u06cc\u0645 \u0645\u0646\u0627\u0628\u0639 \u062f\u06cc\u06af\u0631 \u0639\u0645\u0644 \u06a9\u0646\u0646\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D9%85%D8%B1%D8%A7%D8%AD%D9%84_%D8%AA%D9%86%D8%B8%DB%8C%D9%85_%D9%87%D9%88%DB%8C%D8%AA_%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA_%D8%B4%D8%AF%D9%87_%D8%AA%D9%88%D8%B3%D8%B7_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1\"><\/span>\n<p>  \u0645\u0631\u0627\u062d\u0644 \u062a\u0646\u0638\u06cc\u0645 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0628\u0647 Azure OpenAI \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a\u200c\u0634\u062f\u0647 \u06a9\u0627\u0631\u0628\u0631\u060c \u0627\u06cc\u0646 \u0645\u0631\u0627\u062d\u0644 \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0646\u0638\u06cc\u0645 \u0645\u062d\u06cc\u0637 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f:<\/p>\n<ol>\n<li>\u062a\u0646\u0638\u06cc\u0645 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc<\/li>\n<li>\u06cc\u06a9 \u06af\u0631\u0648\u0647 \u0645\u0646\u0627\u0628\u0639 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 Azure OpenAI \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u06cc\u06a9 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u0646\u0642\u0634 \u0647\u0627 \u0631\u0627 \u0628\u0647 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0631\u0627\u06cc Azure OpenAI \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0647\u06cc\u062f<\/li>\n<li>\u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648\u0628 Spring Boot \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u06cc\u062f<\/li>\n<li>\u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 Azure Container \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0647\u06cc\u062f<\/li>\n<li>Setup \u0631\u0627 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u06cc\u062f<\/li>\n<\/ol>\n<h3><span class=\"ez-toc-section\" id=\"21_%D8%AA%D9%86%D8%B8%DB%8C%D9%85_%D9%85%D8%AA%D8%BA%DB%8C%D8%B1%D9%87%D8%A7%DB%8C_%D9%85%D8%AD%DB%8C%D8%B7%DB%8C\"><\/span>\n<p>  2.1. \u062a\u0646\u0638\u06cc\u0645 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0647\u0646\u06af\u0627\u0645 \u062a\u0646\u0638\u06cc\u0645 \u0645\u062d\u06cc\u0637\u060c \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637 \u0631\u0627 \u0628\u0631\u0627\u06cc \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u0648\u0631\u0648\u062f\u06cc \u0647\u0627\u06cc \u062a\u06a9\u0631\u0627\u0631\u06cc \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nb\">export <\/span><span class=\"nv\">RESOURCE_GROUP<\/span><span class=\"o\">=<\/span>yoshio-OpenAI-rg\n<span class=\"nb\">export <\/span><span class=\"nv\">LOCATION<\/span><span class=\"o\">=<\/span>eastus2\n<span class=\"nb\">export <\/span><span class=\"nv\">AZURE_OPENAI_NAME<\/span><span class=\"o\">=<\/span>yt-secure-openai\n<span class=\"nb\">export <\/span><span class=\"nv\">OPENAI_DEPLOY_MODEL_NAME<\/span><span class=\"o\">=<\/span>gpt-4o\n<span class=\"nb\">export <\/span><span class=\"nv\">USER_MANAGED_IDENTITY_NAME<\/span><span class=\"o\">=<\/span>yoshio-user-managed-id\n<span class=\"nb\">export <\/span><span class=\"nv\">SUBSCRIPTION<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span>az account show <span class=\"nt\">--query<\/span> <span class=\"nb\">id<\/span> <span class=\"nt\">--output<\/span> tsv<span class=\"si\">)<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0632\u06cc\u0631 \u0646\u0627\u0645 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc \u0648 \u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0622\u0646\u0647\u0627 \u0622\u0645\u062f\u0647 \u0627\u0633\u062a. \u0627\u06af\u0631 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u062f \u0646\u0627\u0645\u200c\u0647\u0627 \u0631\u0627 \u0645\u062a\u0646\u0627\u0633\u0628 \u0628\u0627 \u0645\u062d\u06cc\u0637 \u062e\u0648\u062f \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f\u060c \u0644\u0637\u0641\u0627\u064b \u0628\u0647 \u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0632\u06cc\u0631 \u0645\u0631\u0627\u062c\u0639\u0647 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0646\u0627\u0645 \u0647\u0631 \u0645\u0646\u0628\u0639 \u0631\u0627 \u0645\u062a\u0646\u0627\u0633\u0628 \u0628\u0627 \u0622\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f.<\/p>\n<div class=\"table-wrapper-paragraph\">\n<table>\n<thead>\n<tr>\n<th>\u0646\u0627\u0645 \u0645\u062a\u063a\u06cc\u0631 \u0645\u062d\u06cc\u0637\u06cc<\/th>\n<th>\u062a\u0648\u0636\u06cc\u062d\u0627\u062a<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>RESOURCE_GROUP<\/td>\n<td>\u0646\u0627\u0645 \u06af\u0631\u0648\u0647 \u0645\u0646\u0628\u0639 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f<\/td>\n<\/tr>\n<tr>\n<td>\u0645\u06a9\u0627\u0646<\/td>\n<td>\u0645\u06a9\u0627\u0646\u06cc \u06a9\u0647 \u0645\u062d\u06cc\u0637 \u062f\u0631 \u0622\u0646 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u062e\u0648\u0627\u0647\u062f \u0634\u062f<\/td>\n<\/tr>\n<tr>\n<td>USER_MANAGED_IDENTITY_NAME<\/td>\n<td>\u0646\u0627\u0645 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631<\/td>\n<\/tr>\n<tr>\n<td>AZURE_OPENAI_NAME<\/td>\n<td>\u0646\u0627\u0645 Azure OpenAI<\/td>\n<\/tr>\n<tr>\n<td>OPENAI_DEPLOY_MODEL_NAME<\/td>\n<td>\u0646\u0627\u0645 \u0645\u062f\u0644 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u06a9\u0647 \u0642\u0631\u0627\u0631 \u0627\u0633\u062a \u0628\u0647 \u06a9\u0627\u0631 \u06af\u0631\u0641\u062a\u0647 \u0634\u0648\u062f<\/td>\n<\/tr>\n<tr>\n<td>\u0627\u0634\u062a\u0631\u0627\u06a9<\/td>\n<td>\u0634\u0646\u0627\u0633\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"22_%DB%8C%DA%A9_%DA%AF%D8%B1%D9%88%D9%87_%D9%85%D9%86%D8%A7%D8%A8%D8%B9_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  2.2. \u06cc\u06a9 \u06af\u0631\u0648\u0647 \u0645\u0646\u0627\u0628\u0639 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u0628\u062a\u062f\u0627 \u06cc\u06a9 \u06af\u0631\u0648\u0647 \u0645\u0646\u0628\u0639 \u062f\u0631 \u0645\u062d\u06cc\u0637 Azure \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f. \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f <code>--location<\/code> \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u0628\u0631\u0627\u06cc \u0645\u0634\u062e\u0635 \u06a9\u0631\u062f\u0646 \u0645\u0646\u0637\u0642\u0647 Azure \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u062f \u0634\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>az group create --name $RESOURCE_GROUP --location $LOCATION\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"23_%DB%8C%DA%A9_%D9%86%D9%85%D9%88%D9%86%D9%87_Azure_OpenAI_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  2.3. \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 Azure OpenAI \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f\u060c \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 Azure OpenAI \u0628\u0627 \u0627\u062c\u0631\u0627\u06cc \u0622\u0646 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f <code>az cognitiveservices account create<\/code> \u0641\u0631\u0645\u0627\u0646 \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f <code>--kind OpenAI<\/code> \u0648 <code>--custom-domain<\/code> \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>az cognitiveservices account create \\\n  --name $AZURE_OPENAI_NAME \\\n  --resource-group $RESOURCE_GROUP \\\n  --kind OpenAI \\\n  --custom-domain $AZURE_OPENAI_NAME \\\n  --sku S0 \\\n  --location $LOCATION\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<blockquote>\n<p><strong>\u062a\u0648\u062c\u0647:<\/strong><\/p>\n<p>\u062a\u0639\u06cc\u06cc\u0646 \u0622\u0646 \u0628\u0633\u06cc\u0627\u0631 \u0645\u0647\u0645 \u0627\u0633\u062a <code>--custom-domain<\/code> \u0647\u0646\u06af\u0627\u0645 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 Azure OpenAI.<br \/>\u062f\u0631 \u0635\u0648\u0631\u062a \u062d\u0630\u0641\u060c \u0627\u0644\u0641 <code>region endpoint<\/code> \u0645\u0627\u0646\u0646\u062f <code>https:\/\/eastus2.api.cognitive.microsoft.com\/<\/code> \u0628\u0647 \u0635\u0648\u0631\u062a \u062e\u0648\u062f\u06a9\u0627\u0631 \u062a\u0648\u0644\u06cc\u062f \u062e\u0648\u0627\u0647\u062f \u0634\u062f. \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 &#8220;Authenticate with Microsoft Entra ID&#8221; \u0630\u06a9\u0631 \u0634\u062f\u060c \u0634\u0645\u0627 \u0646\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Microsoft Entra ID\u060c \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0648\u0631\u062f Managed Identity\u060c \u0628\u062f\u0648\u0646 \u062a\u0639\u06cc\u06cc\u0646 \u0627\u06cc\u0646 \u06af\u0632\u06cc\u0646\u0647\u060c \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f. \u0628\u0631\u0627\u06cc \u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0646 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647\u060c \u0628\u0627\u06cc\u062f \u0622\u0646 \u0631\u0627 \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f. <code>--custom-domain<\/code>.<\/p>\n<\/blockquote>\n<p>\u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f\u060c \u0645\u062f\u0644 OpenAI \u0631\u0627 \u062f\u0631 \u0646\u0645\u0648\u0646\u0647 \u062a\u0627\u0632\u0647 \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 Azure OpenAI \u062e\u0648\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>az cognitiveservices account deployment create<\/code> \u0641\u0631\u0645\u0627\u0646 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u0627\u0645 \u0645\u062f\u0644 \u0631\u0627 \u0628\u0627 \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f <code>--model-name<\/code> \u0648 \u0646\u0633\u062e\u0647 \u0645\u062f\u0644 \u0628\u0627 <code>--model-version<\/code>. \u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0627\u06cc\u062f \u0638\u0631\u0641\u06cc\u062a \u0633\u0631\u0648\u06cc\u0633 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f <code>--sku-capacity<\/code> \u0648 \u0637\u0631\u062d \u062e\u062f\u0645\u0627\u062a \u0631\u0627 \u0628\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f <code>--sku-name<\/code>.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>az cognitiveservices account deployment create \\\n  --name $AZURE_OPENAI_NAME \\\n  --resource-group  $RESOURCE_GROUP \\\n  --deployment-name $OPENAI_DEPLOY_MODEL_NAME \\\n  --model-name $OPENAI_DEPLOY_MODEL_NAME \\\n  --model-version \"2024-08-06\"  \\\n  --model-format OpenAI \\\n  --sku-capacity \"20\" \\\n  --sku-name \"GlobalStandard\"\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c \u0627\u06cc\u062c\u0627\u062f \u0646\u0645\u0648\u0646\u0647 Azure OpenAI \u06a9\u0627\u0645\u0644 \u0634\u062f. \u067e\u0633 \u0627\u0632 \u0627\u06cc\u062c\u0627\u062f \u0646\u0645\u0648\u0646\u0647\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0644\u0627\u0632\u0645 \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0627\u0648\u0627 \u0648 \u0633\u0627\u06cc\u0631 \u0639\u0645\u0644\u06cc\u0627\u062a \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637 \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nb\">export <\/span><span class=\"nv\">OPEN_AI_RESOURCE_ID<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span>az cognitiveservices account list <span class=\"se\">\\<\/span>\n                                <span class=\"nt\">-g<\/span> <span class=\"nv\">$RESOURCE_GROUP<\/span> <span class=\"se\">\\<\/span>\n                                <span class=\"nt\">--query<\/span> <span class=\"s2\">\"[0].id\"<\/span> <span class=\"se\">\\<\/span>\n                                <span class=\"nt\">--output<\/span> tsv<span class=\"si\">)<\/span>\n<span class=\"nb\">export <\/span><span class=\"nv\">OPEN_AI_ENDPOINT<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span>az cognitiveservices account show <span class=\"se\">\\<\/span>\n                                <span class=\"nt\">--resource-group<\/span> <span class=\"nv\">$RESOURCE_GROUP<\/span> <span class=\"se\">\\<\/span>\n                                <span class=\"nt\">--name<\/span> <span class=\"nv\">$AZURE_OPENAI_NAME<\/span> <span class=\"se\">\\<\/span>\n                                <span class=\"nt\">--query<\/span> <span class=\"s2\">\"properties.endpoint\"<\/span> <span class=\"se\">\\<\/span>\n                                <span class=\"nt\">--output<\/span> tsv<span class=\"si\">)<\/span>\n<span class=\"nb\">export <\/span><span class=\"nv\">OPEN_AI_ACCESS_KEY<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span>az cognitiveservices account keys list <span class=\"se\">\\<\/span>\n                                <span class=\"nt\">--resource-group<\/span> <span class=\"nv\">$RESOURCE_GROUP<\/span> <span class=\"se\">\\<\/span>\n                                <span class=\"nt\">--name<\/span> <span class=\"nv\">$AZURE_OPENAI_NAME<\/span> <span class=\"se\">\\<\/span>\n                                <span class=\"nt\">--query<\/span> key1 <span class=\"nt\">--output<\/span> tsv<span class=\"si\">)<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627\u060c \u0645\u0627 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc \u06a9\u0646\u06cc\u0645:<\/p>\n<div class=\"table-wrapper-paragraph\">\n<table>\n<thead>\n<tr>\n<th>\u0646\u0627\u0645 \u0645\u062a\u063a\u06cc\u0631 \u0645\u062d\u06cc\u0637\u06cc<\/th>\n<th>\u062a\u0648\u0636\u06cc\u062d\u0627\u062a<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>OPEN_AI_RESOURCE_ID<\/td>\n<td>\u0634\u0646\u0627\u0633\u0647 \u0645\u0646\u0628\u0639 OpenAI<br \/>(\u0628\u0631\u0627\u06cc \u0645\u062d\u062f\u0648\u062f\u0647 \u062a\u0639\u06cc\u06cc\u0646 \u0646\u0642\u0634 \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0627\u0633\u062a)<\/td>\n<\/tr>\n<tr>\n<td>OPEN_AI_ENDPOINT<\/td>\n<td>\u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc OpenAI<br \/>(\u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0627\u0648\u0627 \u0644\u0627\u0632\u0645 \u0627\u0633\u062a)<\/td>\n<\/tr>\n<tr>\n<td>OPEN_AI_ACCESS_KEY<\/td>\n<td>\u06a9\u0644\u06cc\u062f \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0631\u0627\u06cc OpenAI<br \/>(\u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0627\u0648\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0627\u0633\u062a)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"24_%DB%8C%DA%A9_%D9%87%D9%88%DB%8C%D8%AA_%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA_%D8%B4%D8%AF%D9%87_%D8%AA%D9%88%D8%B3%D8%B7_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  2.4. \u06cc\u06a9 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u0646\u0645\u0648\u0646\u0647 Azure OpenAI \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u06af\u0627\u0645 \u0628\u0639\u062f\u06cc \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0633\u062a. \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f <code>az identity create<\/code> \u0641\u0631\u0645\u0627\u0646<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>az identity create -g $RESOURCE_GROUP -n $USER_MANAGED_IDENTITY_NAME\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 User Managed Identity \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0644\u0627\u0632\u0645 \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u0628\u0639\u062f\u06cc \u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0627\u0648\u0627 \u0631\u0627 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u06a9\u0646\u06cc\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0647\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nb\">export <\/span><span class=\"nv\">USER_MANAGED_ID_CLIENT_ID<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span>az identity list <span class=\"se\">\\<\/span>\n                                        <span class=\"nt\">-g<\/span> <span class=\"nv\">$RESOURCE_GROUP<\/span> <span class=\"se\">\\<\/span>\n                                        <span class=\"nt\">--query<\/span> <span class=\"s2\">\"[0].clientId\"<\/span> <span class=\"se\">\\<\/span>\n                                        <span class=\"nt\">-o<\/span> tsv<span class=\"si\">)<\/span>\n<span class=\"nb\">export <\/span><span class=\"nv\">USER_MANAGED_ID_PRINCIPAL_ID<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span>az identity list <span class=\"se\">\\<\/span>\n                                        <span class=\"nt\">-g<\/span> <span class=\"nv\">$RESOURCE_GROUP<\/span> <span class=\"se\">\\<\/span>\n                                        <span class=\"nt\">--query<\/span> <span class=\"s2\">\"[0].principalId\"<\/span> <span class=\"se\">\\<\/span>\n                                        <span class=\"nt\">-o<\/span> tsv<span class=\"si\">)<\/span>\n<span class=\"nb\">export <\/span><span class=\"nv\">USER_MANAGED_ID_RESOURCE_ID<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span>az identity list <span class=\"se\">\\<\/span>\n                                        <span class=\"nt\">-g<\/span> <span class=\"nv\">$RESOURCE_GROUP<\/span> <span class=\"se\">\\<\/span>\n                                        <span class=\"nt\">--query<\/span> <span class=\"s2\">\"[0].id\"<\/span> <span class=\"se\">\\<\/span>\n                                        <span class=\"nt\">-o<\/span> tsv<span class=\"si\">)<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0632\u06cc\u0631 \u062a\u0648\u0636\u06cc\u062d\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u0645\u0642\u062f\u0627\u0631 \u0647\u0631 \u0645\u062a\u063a\u06cc\u0631 \u0645\u062d\u06cc\u0637\u06cc \u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646 \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<div class=\"table-wrapper-paragraph\">\n<table>\n<thead>\n<tr>\n<th>\u0646\u0627\u0645 \u0645\u062a\u063a\u06cc\u0631 \u0645\u062d\u06cc\u0637\u06cc<\/th>\n<th>\u062a\u0648\u0636\u06cc\u062d\u0627\u062a<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>USER_MANAGED_ID_CLIENT_ID<\/td>\n<td>\u0634\u0646\u0627\u0633\u0647 \u0645\u0634\u062a\u0631\u06cc \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631<br \/>(\u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0627\u0648\u0627 \u0644\u0627\u0632\u0645 \u0627\u0633\u062a)<\/td>\n<\/tr>\n<tr>\n<td>USER_MANAGED_ID_PRINCIPAL_ID<\/td>\n<td>\u0634\u0646\u0627\u0633\u0647 \u0627\u0635\u0644\u06cc \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631<br \/>(\u0627\u0644\u0632\u0627\u0645\u06cc \u0628\u0631\u0627\u06cc \u062a\u0639\u06cc\u06cc\u0646 \u0646\u0642\u0634)<\/td>\n<\/tr>\n<tr>\n<td>USER_MANAGED_ID_RESOURCE_ID<\/td>\n<td>\u0634\u0646\u0627\u0633\u0647 \u0645\u0646\u0628\u0639 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631<br \/>(\u0628\u0631\u0627\u06cc \u0627\u062e\u062a\u0635\u0627\u0635 \u0634\u0646\u0627\u0633\u0647 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0644\u0627\u0632\u0645 \u0627\u0633\u062a)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"25_%D9%86%D9%82%D8%B4_%D9%87%D8%A7_%D8%B1%D8%A7_%D8%A8%D9%87_%D9%87%D9%88%DB%8C%D8%AA_%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA_%D8%B4%D8%AF%D9%87_%D8%AA%D9%88%D8%B3%D8%B7_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1_%D8%A8%D8%B1%D8%A7%DB%8C_Azure_OpenAI_%D8%A7%D8%AE%D8%AA%D8%B5%D8%A7%D8%B5_%D8%AF%D9%87%DB%8C%D8%AF\"><\/span>\n<p>  2.5. \u0646\u0642\u0634 \u0647\u0627 \u0631\u0627 \u0628\u0647 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0631\u0627\u06cc Azure OpenAI \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0647\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f <code>az role assignment create<\/code> \u062f\u0633\u062a\u0648\u0631 \u0627\u062e\u062a\u0635\u0627\u0635 \u06cc\u06a9 \u0646\u0642\u0634 \u0628\u0647 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631\u060c \u0628\u0647 \u0622\u0646 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u0628\u0627 \u0645\u0646\u0628\u0639 OpenAI \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>Cognitive Services OpenAI User<\/code> \u0627\u062c\u0627\u0632\u0647<\/p>\n<p>\u0627\u06cc\u0646 <code>$OPEN_AI_RESOURCE_ID<\/code> \u0634\u0646\u0627\u0633\u0647 \u0645\u0646\u0628\u0639 OpenAI \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0648 \u0646\u0642\u0634 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0627\u0635 \u0628\u0647 \u0622\u0646 \u0645\u0646\u0628\u0639 \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f. \u0627\u06cc\u0646 \u0631\u0648\u0634 \u062a\u0646\u0647\u0627 \u0645\u062c\u0648\u0632\u0647\u0627\u06cc \u0644\u0627\u0632\u0645 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0639\u0637\u0627 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0628\u0627 \u0627\u062c\u062a\u0646\u0627\u0628 \u0627\u0632 \u0645\u062c\u0648\u0632\u0647\u0627\u06cc \u063a\u06cc\u0631 \u0636\u0631\u0648\u0631\u06cc\u060c \u0627\u0645\u0646\u06cc\u062a \u0631\u0627 \u0627\u0641\u0632\u0627\u06cc\u0634 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>az role assignment create --assignee $USER_MANAGED_ID_PRINCIPAL_ID \\\n                          --scope $OPEN_AI_RESOURCE_ID \\\n                          --role \"Cognitive Services OpenAI User\" \n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0646\u0642\u0634 \u0647\u0627\u06cc \u0630\u06a9\u0631 \u0634\u062f\u0647\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0646\u0642\u0634 \u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u0646\u06cc\u0632 \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0647\u06cc\u062f.<\/p>\n<ul>\n<li>\u062e\u062f\u0645\u0627\u062a \u0634\u0646\u0627\u062e\u062a\u06cc \u06a9\u0627\u0631\u0628\u0631 OpenAI<\/li>\n<li>\u0645\u0634\u0627\u0631\u06a9\u062a \u06a9\u0646\u0646\u062f\u0647 \u062e\u062f\u0645\u0627\u062a \u0634\u0646\u0627\u062e\u062a\u06cc OpenAI<\/li>\n<li>\u0645\u0634\u0627\u0631\u06a9\u062a \u06a9\u0646\u0646\u062f\u0647 \u062e\u062f\u0645\u0627\u062a \u0634\u0646\u0627\u062e\u062a\u06cc<\/li>\n<li>\u062e\u0648\u0627\u0646\u0646\u062f\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062e\u062f\u0645\u0627\u062a \u0634\u0646\u0627\u062e\u062a\u06cc<\/li>\n<\/ul>\n<p>\u0628\u0631\u0627\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0642\u06cc\u0642 \u062f\u0631 \u0645\u0648\u0631\u062f \u0642\u0627\u0628\u0644\u06cc\u062a\u200c\u0647\u0627\u06cc \u0647\u0631 \u0646\u0642\u0634\u060c \u0644\u0637\u0641\u0627\u064b \u0628\u0647 \u06a9\u0646\u062a\u0631\u0644 \u062f\u0633\u062a\u0631\u0633\u06cc \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u0646\u0642\u0634 \u0628\u0631\u0627\u06cc \u0633\u0631\u0648\u06cc\u0633 Azure OpenAI \u0645\u0631\u0627\u062c\u0639\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"26_%DB%8C%DA%A9_%D9%85%D8%AD%DB%8C%D8%B7_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%87%D8%A7%DB%8C_%DA%A9%D8%A7%D9%86%D8%AA%DB%8C%D9%86%D8%B1_Azure_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  2.6. \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f\u060c \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f. \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Azure CLI\u060c \u0628\u0627\u06cc\u062f \u0627\u0641\u0632\u0648\u0646\u0647 \u0647\u0627 \u0648 \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0627\u0636\u0627\u0641\u06cc \u0631\u0627 \u062b\u0628\u062a \u06a9\u0646\u06cc\u062f. \u0627\u06af\u0631 \u0642\u0628\u0644\u0627\u064b \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u0646\u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f\u060c \u0644\u0637\u0641\u0627\u064b \u0647\u0645\u06cc\u0646 \u0627\u0644\u0627\u0646 \u0622\u0646\u0647\u0627 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>az upgrade\naz extension add --name containerapp --upgrade -y\naz provider register --namespace Microsoft.Web\naz provider register --namespace Microsoft.App\naz provider register --namespace Microsoft.OperationalInsights\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0633\u067e\u0633\u060c \u0646\u0627\u0645 Azure Container Apps Environment \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0645\u062a\u063a\u06cc\u0631 \u0645\u062d\u06cc\u0637\u06cc \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f. \u0646\u0627\u0645\u06cc \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0645\u0646\u0627\u0633\u0628 \u0645\u062d\u06cc\u0637 \u0634\u0645\u0627 \u0628\u0627\u0634\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nb\">export <\/span><span class=\"nv\">CONTAINER_ENVIRONMENT<\/span><span class=\"o\">=<\/span>YTContainerEnv3\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f <code>az containerapp env create<\/code> \u062f\u0633\u062a\u0648\u0631 \u062a\u0646\u0638\u06cc\u0645 \u0645\u062d\u06cc\u0637<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>az containerapp env create --name $CONTAINER_ENVIRONMENT \\\n                           --enable-workload-profiles \\\n                           -g $RESOURCE_GROUP \\\n                           --location $LOCATION\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"27_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%DB%8C%DA%A9_%D9%88%D8%A8_%D8%A7%D9%BE%D9%84%DB%8C%DA%A9%DB%8C%D8%B4%D9%86_Spring_Boot\"><\/span>\n<p>  2.7. \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0648\u0628 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 Spring Boot<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0628\u0627 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc Azure OpenAI \u0648 Azure Container Apps Environment\u060c \u0627\u06a9\u0646\u0648\u0646 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u062c\u0627\u0648\u0627 \u0628\u0631\u0627\u06cc \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0633\u0627\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u06cc\u06a9 \u0645\u062f\u0644 OpenAI \u0631\u0627 \u0627\u0632 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0627\u0648\u0627 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u062f. \u0645\u0627 \u0627\u0632 Spring Boot \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"271_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D9%BE%D8%B1%D9%88%DA%98%D9%87_Spring_Boot\"><\/span>\n<p>  2.7.1 \u0627\u06cc\u062c\u0627\u062f \u067e\u0631\u0648\u0698\u0647 Spring Boot<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u067e\u0631\u0648\u0698\u0647 Spring Boot \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f. \u067e\u0633 \u0627\u0632 \u0627\u06cc\u062c\u0627\u062f \u0648 \u062f\u0627\u0646\u0644\u0648\u062f \u067e\u0631\u0648\u0698\u0647\u060c \u0622\u0631\u0634\u06cc\u0648 \u0631\u0627 \u0627\u0632 \u062d\u0627\u0644\u062a \u0641\u0634\u0631\u062f\u0647 \u062e\u0627\u0631\u062c \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0645\u062d\u062a\u0648\u06cc\u0627\u062a \u0622\u0646 \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0634\u0648\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>curl https:\/\/start.spring.io\/starter.zip <span class=\"se\">\\<\/span>\n  <span class=\"nt\">-d<\/span> <span class=\"nv\">dependencies<\/span><span class=\"o\">=<\/span>web <span class=\"se\">\\<\/span>\n  <span class=\"nt\">-d<\/span> <span class=\"nb\">type<\/span><span class=\"o\">=<\/span>maven-project <span class=\"se\">\\<\/span>\n  <span class=\"nt\">-d<\/span> <span class=\"nv\">language<\/span><span class=\"o\">=<\/span>java <span class=\"se\">\\<\/span>\n  <span class=\"nt\">-d<\/span> <span class=\"nv\">bootVersion<\/span><span class=\"o\">=<\/span>3.3.3 <span class=\"se\">\\<\/span>\n  <span class=\"nt\">-d<\/span> <span class=\"nv\">baseDir<\/span><span class=\"o\">=<\/span>Yoshio-AI-App-Spring-Boot <span class=\"se\">\\<\/span>\n  <span class=\"nt\">-d<\/span> <span class=\"nv\">groupId<\/span><span class=\"o\">=<\/span>com.yoshio3 <span class=\"se\">\\<\/span>\n  <span class=\"nt\">-d<\/span> <span class=\"nv\">artifactId<\/span><span class=\"o\">=<\/span>Yoshio-AI-App <span class=\"se\">\\<\/span>\n  <span class=\"nt\">-d<\/span> <span class=\"nv\">name<\/span><span class=\"o\">=<\/span>myproject <span class=\"se\">\\<\/span>\n  <span class=\"nt\">-d<\/span> <span class=\"nv\">packageName<\/span><span class=\"o\">=<\/span>com.yoshio3 <span class=\"se\">\\<\/span>\n  <span class=\"nt\">-o<\/span> YoshioAIProject.zip\n\nunzip YoshioAIProject.zip\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0633\u062a\u0648\u0631 \u0628\u0627\u0644\u0627 \u067e\u0631\u0648\u0698\u0647 \u0627\u06cc \u0628\u0627 \u0633\u0627\u062e\u062a\u0627\u0631 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0632\u06cc\u0631 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>\u251c\u2500\u2500 HELP.md\n\u251c\u2500\u2500 mvnw\n\u251c\u2500\u2500 mvnw.cmd\n\u251c\u2500\u2500 pom.xml\n\u2514\u2500\u2500 src\n    \u251c\u2500\u2500 main\n    \u2502   \u251c\u2500\u2500 java\n    \u2502   \u2502   \u2514\u2500\u2500 com\n    \u2502   \u2502       \u2514\u2500\u2500 yoshio3\n    \u2502   \u2502           \u2514\u2500\u2500 MyprojectApplication.java\n    \u2502   \u2514\u2500\u2500 resources\n    \u2502       \u251c\u2500\u2500 application.properties\n    \u2502       \u251c\u2500\u2500 static\n    \u2502       \u2514\u2500\u2500 templates\n    \u2514\u2500\u2500 test\n        \u2514\u2500\u2500 java\n            \u2514\u2500\u2500 com\n                \u2514\u2500\u2500 yoshio3\n                    \u2514\u2500\u2500 MyprojectApplicationTests.java\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h4><span class=\"ez-toc-section\" id=\"272_%D9%88%DB%8C%D8%B1%D8%A7%DB%8C%D8%B4_%D9%81%D8%A7%DB%8C%D9%84_%D9%BE%D8%B1%D9%88%DA%98%D9%87_pomxml\"><\/span>\n<p>  2.7.2 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0641\u0627\u06cc\u0644 \u067e\u0631\u0648\u0698\u0647 pom.xml<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0647 <code>pom.xml<\/code> \u0641\u0627\u06cc\u0644\u06cc \u06a9\u0647 \u062f\u0631 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0631\u06cc\u0634\u0647 \u0642\u0631\u0627\u0631 \u062f\u0627\u0631\u062f. \u0627\u06cc\u0646 \u0634\u0627\u0645\u0644 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0647\u0627\u06cc \u0644\u0627\u0632\u0645 \u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644 \u0648 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0628\u0627 OpenAI \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight xml\"><code>    <span class=\"nt\"><dependencies\/><\/span>\n       ......\n        <span class=\"nt\"><dependency\/><\/span>\n            <span class=\"nt\"><groupid\/><\/span>com.azure<span class=\"nt\"\/>\n            <span class=\"nt\"><artifactid\/><\/span>azure-ai-openai<span class=\"nt\"\/>\n            <span class=\"nt\"><version\/><\/span>1.0.0-beta.11<span class=\"nt\"\/>\n        <span class=\"nt\"\/>\n       <span class=\"nt\"><dependency\/><\/span>\n            <span class=\"nt\"><groupid\/><\/span>com.azure<span class=\"nt\"\/>\n            <span class=\"nt\"><artifactid\/><\/span>azure-identity<span class=\"nt\"\/>\n            <span class=\"nt\"><version\/><\/span>1.13.2<span class=\"nt\"\/>\n        <span class=\"nt\"\/>\n        <span class=\"nt\"><dependency\/><\/span>\n            <span class=\"nt\"><groupid\/><\/span>org.slf4j<span class=\"nt\"\/>\n            <span class=\"nt\"><artifactid\/><\/span>slf4j-api<span class=\"nt\"\/>\n            <span class=\"nt\"><version\/><\/span>2.0.16<span class=\"nt\"\/>\n        <span class=\"nt\"\/>\n        <span class=\"nt\"><dependency\/><\/span>\n            <span class=\"nt\"><groupid\/><\/span>ch.qos.logback<span class=\"nt\"\/>\n            <span class=\"nt\"><artifactid\/><\/span>logback-core<span class=\"nt\"\/>\n            <span class=\"nt\"><version\/><\/span>1.5.8<span class=\"nt\"\/>\n        <span class=\"nt\"\/>\n        <span class=\"nt\"><dependency\/><\/span>\n            <span class=\"nt\"><groupid\/><\/span>ch.qos.logback<span class=\"nt\"\/>\n            <span class=\"nt\"><artifactid\/><\/span>logback-classic<span class=\"nt\"\/>\n            <span class=\"nt\"><version\/><\/span>1.5.8<span class=\"nt\"\/>\n        <span class=\"nt\"\/>\n    <span class=\"nt\"\/>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h4><span class=\"ez-toc-section\" id=\"273_%D9%BE%DB%8C%D8%A7%D8%AF%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%D9%86%D9%82%D8%B7%D9%87_%D9%BE%D8%A7%DB%8C%D8%A7%D9%86%DB%8C_RESTful_%D8%A8%D8%AE%D8%B4_%D8%A7%D8%B5%D9%84%DB%8C\"><\/span>\n<p>  2.7.3 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc RESTful (\u0628\u062e\u0634 \u0627\u0635\u0644\u06cc)<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u0628\u0639\u062f\u060c \u06cc\u06a9 \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f <code>AIChatController.java<\/code> \u0641\u0627\u06cc\u0644 \u062f\u0631 <code>src\/main\/java\/com\/yoshio3<\/code> \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u06a9\u062f \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0639\u0631\u06cc\u0641 \u06cc\u06a9 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc RESTful \u06a9\u0647 \u067e\u0633 \u0627\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u060c OpenAI \u0631\u0627 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc \u06a9\u0646\u062f\u060c \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight java\"><code><span class=\"kn\">package<\/span> <span class=\"nn\">com.yoshio3<\/span><span class=\"o\">;<\/span>\n\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.web.bind.annotation.RestController<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">com.azure.ai.openai.OpenAIClient<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">com.azure.ai.openai.OpenAIClientBuilder<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">com.azure.ai.openai.models.ChatCompletions<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">com.azure.ai.openai.models.ChatCompletionsOptions<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">com.azure.ai.openai.models.ChatRequestAssistantMessage<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">com.azure.ai.openai.models.ChatRequestMessage<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">com.azure.ai.openai.models.ChatRequestSystemMessage<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">com.azure.ai.openai.models.ChatRequestUserMessage<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">com.azure.core.credential.AzureKeyCredential<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">com.azure.identity.ManagedIdentityCredential<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">com.azure.identity.ManagedIdentityCredentialBuilder<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">com.fasterxml.jackson.core.JsonProcessingException<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">com.fasterxml.jackson.databind.ObjectMapper<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.util.ArrayList<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">java.util.List<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.slf4j.Logger<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.slf4j.LoggerFactory<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.beans.factory.annotation.Value<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.web.bind.annotation.PostMapping<\/span><span class=\"o\">;<\/span>\n<span class=\"kn\">import<\/span> <span class=\"nn\">org.springframework.web.bind.annotation.RequestBody<\/span><span class=\"o\">;<\/span>\n\n\n<span class=\"nd\">@RestController<\/span>\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">AIChatController<\/span> <span class=\"o\">{<\/span>\n\n    <span class=\"kd\">private<\/span> <span class=\"kd\">static<\/span> <span class=\"kd\">final<\/span> <span class=\"nc\">Logger<\/span> <span class=\"no\">LOGGER<\/span> <span class=\"o\">=<\/span> <span class=\"nc\">LoggerFactory<\/span><span class=\"o\">.<\/span><span class=\"na\">getLogger<\/span><span class=\"o\">(<\/span><span class=\"nc\">AIChatController<\/span><span class=\"o\">.<\/span><span class=\"na\">class<\/span><span class=\"o\">);<\/span>\n\n    <span class=\"nd\">@Value<\/span><span class=\"o\">(<\/span><span class=\"s\">\"${USER_MANAGED_ID_CLIENT_ID}\"<\/span><span class=\"o\">)<\/span>\n    <span class=\"kd\">private<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">userManagedIDClientId<\/span><span class=\"o\">;<\/span>\n\n    <span class=\"nd\">@Value<\/span><span class=\"o\">(<\/span><span class=\"s\">\"${OPENAI_ENDPOINT}\"<\/span><span class=\"o\">)<\/span>\n    <span class=\"kd\">private<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">openAIEndpoint<\/span><span class=\"o\">;<\/span>\n\n    <span class=\"nd\">@Value<\/span><span class=\"o\">(<\/span><span class=\"s\">\"${OPENAI_KEY}\"<\/span><span class=\"o\">)<\/span>\n    <span class=\"kd\">private<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">openAIKey<\/span><span class=\"o\">;<\/span>\n\n    <span class=\"kd\">private<\/span> <span class=\"kd\">static<\/span> <span class=\"kd\">final<\/span> <span class=\"nc\">String<\/span> <span class=\"no\">OPEN_AI_CHAT_MODEL<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"gpt-4o\"<\/span><span class=\"o\">;<\/span>\n\n    <span class=\"cm\">\/**\n     * This API is used to chat with OpenAI's GPT-4 model. And if user ask somethings, it will\n     * return the message with Pirate language.\n     * \n     * Ex. You can invoke the API by using the following command: curl -X POST\n     * http:\/\/localhost:8080\/askAI -H \"Content-Type: application\/json\" -d '{\"message\":\"Please tell\n     * me about the appeal of Spring Boot in Japanese.\"}'\n     * \n     * @param message RequestMessage\n     * @return String Response from OpenAI\n     *\/<\/span>\n\n    <span class=\"nd\">@PostMapping<\/span><span class=\"o\">(<\/span><span class=\"s\">\"\/askAI\"<\/span><span class=\"o\">)<\/span>\n    <span class=\"kd\">public<\/span> <span class=\"nc\">String<\/span> <span class=\"nf\">chat<\/span><span class=\"o\">(<\/span><span class=\"nd\">@RequestBody<\/span> <span class=\"nc\">RequestMessage<\/span> <span class=\"n\">message<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"nf\">getResponseFromOpenAI<\/span><span class=\"o\">(<\/span><span class=\"n\">message<\/span><span class=\"o\">.<\/span><span class=\"na\">getMessage<\/span><span class=\"o\">());<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"cm\">\/**\n     * This method is used to get the response from OpenAI.\n     * \n     * For production environment, you can use Managed Identity to authenticate with OpenAI. If you\n     * want to use Managed Identity, please use the ManagedIdentityCredentialBuilder.\n     * \n     * For local development, you can use AzureKeyCredential to authenticate with OpenAI.\n     * \n     * @param message RequestMessage\n     * @return String Response from OpenAI\n     *\/<\/span>\n\n    <span class=\"kd\">private<\/span> <span class=\"nc\">String<\/span> <span class=\"nf\">getResponseFromOpenAI<\/span><span class=\"o\">(<\/span><span class=\"nc\">String<\/span> <span class=\"n\">message<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n        <span class=\"k\">try<\/span> <span class=\"o\">{<\/span>\n            <span class=\"c1\">\/\/ Create OpenAI client with User Managed Identity<\/span>\n            <span class=\"nc\">ManagedIdentityCredential<\/span> <span class=\"n\">credential<\/span> <span class=\"o\">=<\/span>\n                    <span class=\"k\">new<\/span> <span class=\"nf\">ManagedIdentityCredentialBuilder<\/span><span class=\"o\">().<\/span><span class=\"na\">clientId<\/span><span class=\"o\">(<\/span><span class=\"n\">userManagedIDClientId<\/span><span class=\"o\">).<\/span><span class=\"na\">build<\/span><span class=\"o\">();<\/span>\n            <span class=\"nc\">OpenAIClient<\/span> <span class=\"n\">openAIClient<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">OpenAIClientBuilder<\/span><span class=\"o\">().<\/span><span class=\"na\">credential<\/span><span class=\"o\">(<\/span><span class=\"n\">credential<\/span><span class=\"o\">)<\/span>\n                    <span class=\"o\">.<\/span><span class=\"na\">endpoint<\/span><span class=\"o\">(<\/span><span class=\"n\">openAIEndpoint<\/span><span class=\"o\">).<\/span><span class=\"na\">buildClient<\/span><span class=\"o\">();<\/span>\n\n            <span class=\"c1\">\/\/ Create OpenAI client without Managed Identity (For local development)<\/span>\n            <span class=\"c1\">\/\/ OpenAIClient openAIClient = new OpenAIClientBuilder().endpoint(openAIEndpoint)<\/span>\n            <span class=\"c1\">\/\/ .credential(new AzureKeyCredential(openAIKey)).buildClient();<\/span>\n\n            <span class=\"c1\">\/\/ Create Chat Request Messages<\/span>\n            <span class=\"nc\">List<\/span><span class=\"o\"><span class=\"nc\">ChatRequestMessage<\/span><span class=\"o\">&gt;<\/span> <span class=\"n\">chatMessages<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">ArrayList<\/span><span class=\"o\">();<\/span>\n            <span class=\"n\">chatMessages<\/span><span class=\"o\">.<\/span><span class=\"na\">add<\/span><span class=\"o\">(<\/span><span class=\"k\">new<\/span> <span class=\"nc\">ChatRequestSystemMessage<\/span><span class=\"o\">(<\/span><span class=\"s\">\"You are a helpful assistant. You will talk like a pirate.\"<\/span><span class=\"o\">));<\/span>\n            <span class=\"n\">chatMessages<\/span><span class=\"o\">.<\/span><span class=\"na\">add<\/span><span class=\"o\">(<\/span><span class=\"k\">new<\/span> <span class=\"nc\">ChatRequestUserMessage<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Can you help me?\"<\/span><span class=\"o\">));<\/span>\n            <span class=\"n\">chatMessages<\/span><span class=\"o\">.<\/span><span class=\"na\">add<\/span><span class=\"o\">(<\/span><span class=\"k\">new<\/span> <span class=\"nc\">ChatRequestAssistantMessage<\/span><span class=\"o\">(<\/span><span class=\"s\">\"Of course, me hearty! What can I do for ye?\"<\/span><span class=\"o\">));<\/span>\n            <span class=\"n\">chatMessages<\/span><span class=\"o\">.<\/span><span class=\"na\">add<\/span><span class=\"o\">(<\/span><span class=\"k\">new<\/span> <span class=\"nc\">ChatRequestUserMessage<\/span><span class=\"o\">(<\/span><span class=\"n\">message<\/span><span class=\"o\">));<\/span>\n            <span class=\"nc\">ChatCompletionsOptions<\/span> <span class=\"n\">chatCompletionsOptions<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">ChatCompletionsOptions<\/span><span class=\"o\">(<\/span><span class=\"n\">chatMessages<\/span><span class=\"o\">);<\/span>\n\n            <span class=\"c1\">\/\/ Invoke OpenAI Chat API<\/span>\n            <span class=\"nc\">ChatCompletions<\/span> <span class=\"n\">chatCompletions<\/span> <span class=\"o\">=<\/span> <span class=\"n\">openAIClient<\/span><span class=\"o\">.<\/span><span class=\"na\">getChatCompletions<\/span><span class=\"o\">(<\/span><span class=\"no\">OPEN_AI_CHAT_MODEL<\/span><span class=\"o\">,<\/span> <span class=\"n\">chatCompletionsOptions<\/span><span class=\"o\">);<\/span>\n            <span class=\"nc\">StringBuilder<\/span> <span class=\"n\">response<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">StringBuilder<\/span><span class=\"o\">();<\/span>\n            <span class=\"n\">chatCompletions<\/span><span class=\"o\">.<\/span><span class=\"na\">getChoices<\/span><span class=\"o\">()<\/span>\n                    <span class=\"o\">.<\/span><span class=\"na\">forEach<\/span><span class=\"o\">(<\/span><span class=\"n\">choice<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"n\">response<\/span><span class=\"o\">.<\/span><span class=\"na\">append<\/span><span class=\"o\">(<\/span><span class=\"n\">choice<\/span><span class=\"o\">.<\/span><span class=\"na\">getMessage<\/span><span class=\"o\">().<\/span><span class=\"na\">getContent<\/span><span class=\"o\">()));<\/span>\n\n            <span class=\"k\">return<\/span> <span class=\"n\">response<\/span><span class=\"o\">.<\/span><span class=\"na\">toString<\/span><span class=\"o\">();<\/span>\n        <span class=\"o\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"nc\">Exception<\/span> <span class=\"n\">e<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n            <span class=\"nc\">StackTraceElement<\/span><span class=\"o\">[]<\/span> <span class=\"n\">stackTrace<\/span> <span class=\"o\">=<\/span> <span class=\"n\">e<\/span><span class=\"o\">.<\/span><span class=\"na\">getStackTrace<\/span><span class=\"o\">();<\/span>\n            <span class=\"no\">LOGGER<\/span><span class=\"o\">.<\/span><span class=\"na\">error<\/span><span class=\"o\">(<\/span><span class=\"n\">e<\/span><span class=\"o\">.<\/span><span class=\"na\">getMessage<\/span><span class=\"o\">());<\/span>\n            <span class=\"no\">LOGGER<\/span><span class=\"o\">.<\/span><span class=\"na\">error<\/span><span class=\"o\">(<\/span><span class=\"n\">e<\/span><span class=\"o\">.<\/span><span class=\"na\">getLocalizedMessage<\/span><span class=\"o\">());<\/span>\n            <span class=\"nc\">Throwable<\/span> <span class=\"n\">cause<\/span> <span class=\"o\">=<\/span> <span class=\"n\">e<\/span><span class=\"o\">.<\/span><span class=\"na\">getCause<\/span><span class=\"o\">();<\/span>\n            <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">cause<\/span> <span class=\"o\">!=<\/span> <span class=\"kc\">null<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n                <span class=\"no\">LOGGER<\/span><span class=\"o\">.<\/span><span class=\"na\">error<\/span><span class=\"o\">(<\/span><span class=\"n\">e<\/span><span class=\"o\">.<\/span><span class=\"na\">getCause<\/span><span class=\"o\">().<\/span><span class=\"na\">toString<\/span><span class=\"o\">());<\/span>\n            <span class=\"o\">}<\/span>\n            <span class=\"k\">for<\/span> <span class=\"o\">(<\/span><span class=\"nc\">StackTraceElement<\/span> <span class=\"n\">element<\/span> <span class=\"o\">:<\/span> <span class=\"n\">stackTrace<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n                <span class=\"no\">LOGGER<\/span><span class=\"o\">.<\/span><span class=\"na\">error<\/span><span class=\"o\">(<\/span><span class=\"n\">element<\/span><span class=\"o\">.<\/span><span class=\"na\">toString<\/span><span class=\"o\">());<\/span>\n            <span class=\"o\">}<\/span>\n            <span class=\"k\">return<\/span> <span class=\"n\">e<\/span><span class=\"o\">.<\/span><span class=\"na\">getMessage<\/span><span class=\"o\">();<\/span>\n        <span class=\"o\">}<\/span>\n    <span class=\"o\">}<\/span>\n<span class=\"o\">}<\/span>\n<\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062a\u0648\u062c\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 <code>OpenAIClient<\/code> \u0646\u0645\u0648\u0646\u0647 \u0628\u0647 \u062f\u0648 \u0635\u0648\u0631\u062a \u0645\u062e\u062a\u0644\u0641 \u062a\u0648\u0635\u06cc\u0641 \u0645\u06cc \u0634\u0648\u062f. \u06a9\u062f \u0641\u0639\u0644\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f <code>ManagedIdentityCredential<\/code> \u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644 \u0628\u0647 Azure OpenAI \u0628\u0627 \u06cc\u06a9 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631. \u0627\u06cc\u0646 \u06a9\u062f \u0641\u0642\u0637 \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u062f\u0631 \u0645\u062d\u06cc\u0637 Azure \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u062f \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u062f\u0631 \u0645\u062d\u06cc\u0637 \u0645\u062d\u0644\u06cc \u06cc\u0627 \u063a\u06cc\u0631 Azure \u06a9\u0627\u0631 \u0646\u062e\u0648\u0627\u0647\u062f \u06a9\u0631\u062f.<\/p>\n<p>\u062f\u0631 \u0637\u0648\u0644 \u062a\u0648\u0633\u0639\u0647\u060c \u0628\u0627\u06cc\u062f \u0639\u0645\u0644\u06a9\u0631\u062f \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u0622\u0632\u0645\u0627\u06cc\u0634 \u0648 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u06cc\u062f. \u062f\u0631 \u0686\u0646\u06cc\u0646 \u0645\u0648\u0627\u0631\u062f\u06cc \u0646\u0645\u06cc \u062a\u0648\u0627\u0646 \u0627\u0632 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f. \u062f\u0631 \u0639\u0648\u0636\u060c \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u0644\u06cc\u062f \u062f\u0633\u062a\u0631\u0633\u06cc OpenAI \u0628\u0627 \u062d\u0630\u0641 \u0646\u0638\u0631 \u062e\u0637 \u0628\u0627\u060c \u0648\u0635\u0644 \u0634\u0648\u06cc\u062f <code>AzureKeyCredential(openAIKey)<\/code> \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0646\u0645\u0648\u0646\u0647 OpenAIClient.<\/p>\n<p>\u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646\u060c <code>SLF4J<\/code> \u0648 <code>Logback<\/code> \u0628\u0631\u0627\u06cc \u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645 \u062f\u0631 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f. \u0622\u0646\u0647\u0627 \u0631\u0627 \u0628\u0627 \u0627\u06cc\u062c\u0627\u062f a \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f <code>logback-spring.xml<\/code> \u0641\u0627\u06cc\u0644 \u062f\u0631 <code>\/src\/main\/resources<\/code> \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u062c\u0632\u0626\u06cc\u0627\u062a \u06af\u0632\u0627\u0631\u0634 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u067e\u0648\u0634\u0634 \u062f\u0627\u062f\u0647 \u0646\u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u06a9\u062f \u0627\u0635\u0644\u06cc \u0628\u0631\u0627\u06cc \u0645\u0631\u062c\u0639 \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 \u062f\u0631 GitHub \u0645\u0648\u062c\u0648\u062f \u0627\u0633\u062a.<\/p>\n<p>\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 \u0646\u0645\u0627\u06cc \u06a9\u0644\u06cc \u0627\u0632 \u06a9\u062f \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a: \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u06cc\u06a9 \u0633\u0648\u0627\u0644 \u06cc\u0627 \u067e\u06cc\u0627\u0645 \u0627\u0632 \u06cc\u06a9 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u0634\u0648\u062f\u060c \u0628\u0627 \u0644\u062d\u0646 \u062f\u0632\u062f\u0627\u0646 \u062f\u0631\u06cc\u0627\u06cc\u06cc \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062a\u0648\u0633\u0637 <code>SYSTEM<\/code>. \u0627\u0632 \u067e\u0627\u0633\u062e \u0647\u0627\u06cc \u0628\u0647 \u0633\u0628\u06a9 \u062f\u0632\u062f\u0627\u0646 \u062f\u0631\u06cc\u0627\u06cc\u06cc \u0644\u0630\u062a \u0628\u0628\u0631\u06cc\u062f!<\/p>\n<h4><span class=\"ez-toc-section\" id=\"274_%D8%AA%D8%B9%D8%B1%DB%8C%D9%81_%D9%81%D8%B1%D9%85%D8%AA_JSON_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%AF%D8%B1%DB%8C%D8%A7%D9%81%D8%AA_%D9%86%D9%82%D8%B7%D9%87_%D9%BE%D8%A7%DB%8C%D8%A7%D9%86%DB%8C\"><\/span>\n<p>  2.7.4 \u062a\u0639\u0631\u06cc\u0641 \u0641\u0631\u0645\u062a JSON \u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u0633\u067e\u0633 \u0641\u0631\u0645\u062a \u062f\u0627\u062f\u0647 JSON \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0631\u0633\u0627\u0644 \u0628\u0647 \u0627\u06cc\u0646 \u0633\u0631\u0648\u06cc\u0633 RESTful \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f. \u0628\u0631\u0627\u06cc \u067e\u0631\u062f\u0627\u0632\u0634 \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f <code>{\"message\":\"What is the benefit of Spring Boot\"}<\/code> \u062f\u0631 BODY \u062f\u0631\u062e\u0648\u0627\u0633\u062a HTTP\u060c \u06a9\u0644\u0627\u0633 \u0632\u06cc\u0631 \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight java\"><code><span class=\"kn\">package<\/span> <span class=\"nn\">com.yoshio3<\/span><span class=\"o\">;<\/span>\n\n<span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">RequestMessage<\/span> <span class=\"o\">{<\/span>\n    <span class=\"kd\">private<\/span> <span class=\"nc\">String<\/span> <span class=\"n\">message<\/span><span class=\"o\">;<\/span>\n\n    <span class=\"kd\">public<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">setMessage<\/span><span class=\"o\">(<\/span><span class=\"nc\">String<\/span> <span class=\"n\">message<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n        <span class=\"k\">this<\/span><span class=\"o\">.<\/span><span class=\"na\">message<\/span> <span class=\"o\">=<\/span> <span class=\"n\">message<\/span><span class=\"o\">;<\/span>\n    <span class=\"o\">}<\/span>\n\n    <span class=\"kd\">public<\/span> <span class=\"nc\">String<\/span> <span class=\"nf\">getMessage<\/span><span class=\"o\">()<\/span> <span class=\"o\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">message<\/span><span class=\"o\">;<\/span>\n    <span class=\"o\">}<\/span>\n<span class=\"o\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c \u062d\u062f\u0627\u0642\u0644 \u06a9\u062f \u0644\u0627\u0632\u0645 \u0628\u0631\u0627\u06cc \u062a\u0623\u06cc\u06cc\u062f \u0639\u0645\u0644\u06cc\u0627\u062a \u0631\u0627 \u062a\u06a9\u0645\u06cc\u0644 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u0645.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"275_%D9%BE%DB%8C%DA%A9%D8%B1%D8%A8%D9%86%D8%AF%DB%8C_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87\"><\/span>\n<p>  2.7.5 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0628\u0631\u0646\u0627\u0645\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u0633\u067e\u0633 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644 \u0628\u0647 Azure OpenAI \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f. \u062f\u0631 \u0637\u0648\u0644 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0633\u06cc\u0633\u062a\u0645 \u0647\u0627 \u0627\u0632 \u0628\u062e\u0634 \u0647\u0627\u06cc 2.1 \u062a\u0627 2.6\u060c \u062a\u0645\u0627\u0645 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u062f\u0631 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637 \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f. \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0644\u0627\u0632\u0645 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0627\u0648\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nb\">echo<\/span> <span class=\"s2\">\"USER_MANAGED_ID_CLIENT_ID\"<\/span> : <span class=\"nv\">$USER_MANAGED_ID_CLIENT_ID<\/span>\n<span class=\"nb\">echo<\/span> <span class=\"s2\">\"OPEN_AI_ENDPOINT\"<\/span> : <span class=\"nv\">$OPEN_AI_ENDPOINT<\/span>\n<span class=\"nb\">echo<\/span> <span class=\"s2\">\"OPEN_AI_ACCESS_KEY\"<\/span> : <span class=\"nv\">$OPEN_AI_ACCESS_KEY<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0646\u062a\u0627\u06cc\u062c \u0627\u062c\u0631\u0627 \u0631\u0627 \u062f\u0631 \u0628\u0627\u0644\u0627 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f <code>application.properties<\/code> \u0641\u0627\u06cc\u0644 \u0648\u0627\u0642\u0639 \u062f\u0631 <code>\/src\/main\/resources\/<\/code> \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>spring.application.name=AI-Chatbot\nlogging.level.root=INFO\nlogging.level.org.springframework.web=INFO\n\nUSER_MANAGED_ID_CLIENT_ID=********-****-****-****-************\nOPENAI_ENDPOINT=https:\/\/********.openai.azure.com\/\nOPENAI_KEY=********************************\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<blockquote>\n<p>\u062a\u0648\u062c\u0647:<\/p>\n<p><code>OPENAI_KEY<\/code>  \u06a9\u0644\u06cc\u062f \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0631\u0627\u06cc OpenAI \u0627\u0633\u062a. \u0627\u0632 \u0622\u0646 \u0641\u0642\u0637 \u062f\u0631 \u062d\u06cc\u0646 \u062a\u0648\u0633\u0639\u0647 \u062f\u0631 \u0645\u062d\u06cc\u0637 \u062a\u0648\u0633\u0639\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u0648 \u0627\u0632 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062f\u0631 \u0645\u062d\u06cc\u0637 \u062a\u0648\u0644\u06cc\u062f \u062e\u0648\u062f\u062f\u0627\u0631\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<\/blockquote>\n<h4><span class=\"ez-toc-section\" id=\"276_%D8%A7%D8%AE%D8%AA%DB%8C%D8%A7%D8%B1%DB%8C_%D8%AA%D8%A3%DB%8C%DB%8C%D8%AF_%D8%B9%D9%85%D9%84%DB%8C%D8%A7%D8%AA_%D8%AF%D8%B1_%DB%8C%DA%A9_%D9%85%D8%AD%DB%8C%D8%B7_%D9%85%D8%AD%D9%84%DB%8C\"><\/span>\n<p>  2.7.6 (\u0627\u062e\u062a\u06cc\u0627\u0631\u06cc): \u062a\u0623\u06cc\u06cc\u062f \u0639\u0645\u0644\u06cc\u0627\u062a \u062f\u0631 \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u0645\u062d\u0644\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u0628\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0622\u06cc\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0627\u0648\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f \u06cc\u0627 \u062e\u06cc\u0631\u060c \u0646\u0638\u0631\u0627\u062a \u0631\u0627 \u062f\u0631 \u0642\u0633\u0645\u062a \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f <code>OpenAIClient<\/code> \u0627\u06cc\u062c\u0627\u062f \u0646\u0645\u0648\u0646\u0647 \u0628\u062e\u0634\u06cc \u0627\u0632 <code>AIChatController<\/code> \u06a9\u062f \u06a9\u0644\u0627\u0633 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0631\u062f\u0647 \u0648 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight java\"><code><span class=\"c1\">\/\/ ManagedIdentityCredential credential = new ManagedIdentityCredentialBuilder().clientId(userManagedIDClientId).build();<\/span>\n<span class=\"c1\">\/\/ OpenAIClient openAIClient = new OpenAIClientBuilder().credential(credential)<\/span>\n<span class=\"c1\">\/\/                    .endpoint(openAIEndpoint).buildClient();<\/span>\n\n <span class=\"nc\">OpenAIClient<\/span> <span class=\"n\">openAIClient<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">OpenAIClientBuilder<\/span><span class=\"o\">().<\/span><span class=\"na\">endpoint<\/span><span class=\"o\">(<\/span><span class=\"n\">openAIEndpoint<\/span><span class=\"o\">)<\/span>\n                   <span class=\"o\">.<\/span><span class=\"na\">credential<\/span><span class=\"o\">(<\/span><span class=\"k\">new<\/span> <span class=\"nc\">AzureKeyCredential<\/span><span class=\"o\">(<\/span><span class=\"n\">openAIKey<\/span><span class=\"o\">)).<\/span><span class=\"na\">buildClient<\/span><span class=\"o\">();<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u067e\u0633 \u0627\u0632 \u0627\u0646\u062c\u0627\u0645 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a\u060c \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>mvn spring-boot:run\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06af\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 Spring Boot \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0634\u0648\u062f\u060c \u062f\u0631 \u067e\u0648\u0631\u062a 8080 \u06af\u0648\u0634 \u0645\u06cc \u062f\u0647\u062f. \u0627\u0632 \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f <code>curl<\/code> \u0641\u0631\u0645\u0627\u0646 \u0628\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0622\u06cc\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 Azure OpenAI \u067e\u0631\u0633 \u0648 \u062c\u0648 \u06a9\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>curl <span class=\"nt\">-X<\/span> POST http:\/\/localhost:8080\/askAI <span class=\"se\">\\<\/span>\n     <span class=\"nt\">-H<\/span> <span class=\"s2\">\"Content-Type: application\/json\"<\/span> <span class=\"se\">\\<\/span>\n     <span class=\"nt\">-d<\/span> <span class=\"s1\">'{\"message\":\"What is the benefit of the Spring Boot?\"}'<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0647\u0631 \u0628\u0627\u0631 \u06a9\u0647 \u062f\u0633\u062a\u0648\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u0645\u06cc \u06a9\u0646\u06cc\u062f\u060c \u067e\u0627\u0633\u062e \u0645\u062a\u0641\u0627\u0648\u062a \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f\u060c \u0627\u0645\u0627 \u0628\u0631\u0627\u06cc \u0645\u062b\u0627\u0644\u060c \u0628\u0627 \u06cc\u06a9 \u0644\u062d\u0646 \u062f\u0632\u062f\u0627\u0646 \u062f\u0631\u06cc\u0627\u06cc\u06cc \u067e\u0627\u0633\u062e \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>Aye, Captain! Let me explain the benefits of Spring Boot.\nSpring Boot is a framework that aids rapid application development. \nIt allows you to create standalone applications with minimal configuration.\n\nIt also comes with auto-configuration, reducing manual setup. Managing dependencies is easy, and it includes commonly used libraries.\nIt's fast to start up, easy to deploy, and suitable for cloud operations. \n\nIt's a powerful tool for boosting developer productivity.\nAnything else I can assist with?\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u067e\u0633 \u0627\u0632 \u062a\u06a9\u0645\u06cc\u0644 \u062a\u0623\u06cc\u06cc\u062f \u0645\u062d\u0644\u06cc\u060c \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0631\u0627 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u06cc\u062f \u062a\u0627 \u0627\u06cc\u062c\u0627\u062f \u0634\u0648\u062f <code>OpenAIClient<\/code> \u0646\u0645\u0648\u0646\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>ManagedIdentityCredential<\/code>.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"277_%D8%B3%D8%A7%D8%AE%D8%AA_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%88_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D9%85%D8%B5%D9%86%D9%88%D8%B9%D8%A7%D8%AA\"><\/span>\n<p>  2.7.7 \u0633\u0627\u062e\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0648 \u0627\u06cc\u062c\u0627\u062f \u0645\u0635\u0646\u0648\u0639\u0627\u062a<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u067e\u0633 \u0627\u0632 \u062a\u06a9\u0645\u06cc\u0644 \u0627\u06cc\u0646 \u0645\u0631\u0627\u062d\u0644\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0628\u0633\u0627\u0632\u06cc\u062f \u0648 \u0645\u0635\u0646\u0648\u0639\u0627\u062a \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>mvn clean package\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u067e\u0633 \u0627\u0632 \u0633\u0627\u062e\u062a \u0627\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647\u060c \u0622\u062b\u0627\u0631 \u0628\u0627\u0633\u062a\u0627\u0646\u06cc \u062f\u0631 \u0622\u0646 \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u0646\u062f \u0634\u062f <code>target<\/code> \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627\u060c \u0628\u0631\u0646\u0627\u0645\u0647 Spring Boot \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u0634\u0648\u062f <code>Yoshio-AI-App-0.0.1-SNAPSHOT.jar<\/code>.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"o\">&gt;<\/span> <span class=\"nb\">ls<\/span> <span class=\"nt\">-l<\/span> target \ntotal 40876\n<span class=\"nt\">-rw-r--r--<\/span> 1 teradayoshio wheel 41847613  9 14 14:52 Yoshio-AI-App-0.0.1-SNAPSHOT.jar\n<span class=\"nt\">-rw-r--r--<\/span> 1 teradayoshio wheel     7003  9 14 14:52 Yoshio-AI-App-0.0.1-SNAPSHOT.jar.original\ndrwxr-xr-x 5 teradayoshio wheel      160  9 14 20:34 classes\ndrwxr-xr-x 3 teradayoshio wheel       96  9 14 14:52 generated-sources\ndrwxr-xr-x 3 teradayoshio wheel       96  9 14 14:52 generated-test-sources\ndrwxr-xr-x 3 teradayoshio wheel       96  9 14 14:52 maven-archiver\ndrwxr-xr-x 3 teradayoshio wheel       96  9 14 14:52 maven-status\ndrwxr-xr-x 4 teradayoshio wheel      128  9 14 14:52 surefire-reports\ndrwxr-xr-x 3 teradayoshio wheel       96  9 14 20:34 test-classes\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"28_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%D9%86%D9%85%D9%88%D9%86%D9%87_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%87%D8%A7%DB%8C_%DA%A9%D8%A7%D9%86%D8%AA%DB%8C%D9%86%D8%B1_Azure\"><\/span>\n<p>  2.8. \u0627\u06cc\u062c\u0627\u062f \u0646\u0645\u0648\u0646\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0627\u0648\u0627 \u06a9\u0627\u0645\u0644 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u0627\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0627\u0648\u0627 \u0631\u0627 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0645\u0633\u062a\u0642\u0631 \u06a9\u0646\u06cc\u0645.<\/p>\n<p>\u0646\u0627\u0645 \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0645\u062a\u063a\u06cc\u0631 \u0645\u062d\u06cc\u0637\u06cc \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f <code>CONTAINER_APP_NAME<\/code>. \u0645\u0633\u06cc\u0631 \u0648 \u0646\u0627\u0645 \u0641\u0627\u06cc\u0644 \u0622\u0631\u062a\u06cc\u0641\u06a9\u062a Spring Boot \u0631\u0627 \u0628\u0627 \u0622\u0646 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f <code>JAR_FILE_PATH_AND_NAME<\/code>.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nb\">export <\/span><span class=\"nv\">CONTAINER_APP_NAME<\/span><span class=\"o\">=<\/span>yoshio-ai-app\n<span class=\"nb\">export <\/span><span class=\"nv\">JAR_FILE_PATH_AND_NAME<\/span><span class=\"o\">=<\/span>.\/target\/Yoshio-AI-App-0.0.1-SNAPSHOT.jar\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 &#8220;1. \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u062c\u0627\u0648\u0627 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0628\u062f\u0648\u0646 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u0633\u0627\u0632\u06cc&#8221; \u062a\u0648\u0636\u06cc\u062d \u062f\u0627\u062f\u0647 \u0634\u062f\u060c \u062f\u06cc\u06af\u0631 \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u0627\u06cc\u062c\u0627\u062f \u0648 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u062a\u0635\u0648\u06cc\u0631 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u062e\u0648\u062f \u062f\u0631 \u0647\u0646\u06af\u0627\u0645 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0646\u062f\u0627\u0631\u06cc\u062f. \u0645\u0627 \u0641\u0642\u0637 \u0645\u0635\u0646\u0648\u0639 \u062c\u0627\u0648\u0627 \u0631\u0627 \u062f\u0627\u0631\u06cc\u0645 <code>Yoshio-AI-App-0.0.1-SNAPSHOT.jar<\/code>\u060c \u0648 \u0628\u0631 \u0627\u06cc\u0646 \u0627\u0633\u0627\u0633 \u0645\u0633\u062a\u0642\u0631 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c \u0627\u0632 <code>az containerapp up<\/code> \u0641\u0631\u0645\u0627\u0646 \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0627\u0632 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u0647\u0627 \u0645\u06cc \u0628\u06cc\u0646\u06cc\u062f\u060c \u0641\u0642\u0637 \u0628\u0627\u06cc\u062f \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f <code>--artifact $JAR_FILE_PATH_AND_NAME<\/code>\u060c \u0628\u062f\u0648\u0646 \u0647\u06cc\u0686 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u062a\u0635\u0648\u06cc\u0631 \u0638\u0631\u0641. \u0627\u06cc\u0646 \u062f\u0633\u062a\u0648\u0631 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0645\u062d\u06cc\u0637 \u0633\u0627\u062e\u062a \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc \u06a9\u0646\u062f\u060c \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0631\u0627 \u0645\u06cc \u0633\u0627\u0632\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0645\u0633\u062a\u0642\u0631 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0644\u0637\u0641\u0627 \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>az containerapp up \\\n  --name $CONTAINER_APP_NAME \\\n  --resource-group $RESOURCE_GROUP \\\n  --subscription $SUBSCRIPTION \\\n  --location $LOCATION \\\n  --environment $CONTAINER_ENVIRONMENT \\\n  --artifact $JAR_FILE_PATH_AND_NAME \\\n  --ingress external \\\n  --target-port 8080 \\\n  --env-vars AZURE_LOG_LEVEL=2 \\\n  --query properties.configuration.ingress.fqdn\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<blockquote>\n<p>\u062a\u0648\u062c\u0647:<\/p>\n<p>\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06a9\u0645\u06cc \u0627\u06cc\u062c\u0627\u062f \u0638\u0631\u0641 \u0631\u0627 \u0633\u0641\u0627\u0631\u0634\u06cc \u06a9\u0646\u06cc\u062f. \u062f\u0631 \u0635\u0648\u0631\u062a \u0646\u06cc\u0627\u0632 \u0627\u0632 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc \u0627\u0631\u0627\u0626\u0647 \u0634\u062f\u0647 \u062f\u0631 \u0632\u06cc\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f:<br \/>\u0627\u06cc\u062c\u0627\u062f \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc \u0628\u0631\u0627\u06cc \u062c\u0627\u0648\u0627 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure.<\/p>\n<\/blockquote>\n<h3><span class=\"ez-toc-section\" id=\"29_%D8%A7%D8%AE%D8%AA%D8%B5%D8%A7%D8%B5_%D9%87%D9%88%DB%8C%D8%AA_%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA_%D8%B4%D8%AF%D9%87_%D8%AA%D9%88%D8%B3%D8%B7_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1_%D8%A8%D9%87_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%87%D8%A7%DB%8C_%DA%A9%D8%A7%D9%86%D8%AA%DB%8C%D9%86%D8%B1_Azure\"><\/span>\n<p>  2.9. \u0627\u062e\u062a\u0635\u0627\u0635 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u067e\u0633 \u0627\u0632 \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure\u060c \u0645\u0631\u062d\u0644\u0647 \u0622\u062e\u0631 \u0627\u0639\u0645\u0627\u0644 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a\u200c\u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631 \u0638\u0631\u0641\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u06cc\u0645. \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f <code>az containerapp identity assign<\/code> \u0641\u0631\u0645\u0627\u0646<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>az containerapp identity assign --name $CONTAINER_APP_NAME \\\n                                --resource-group $RESOURCE_GROUP \\\n                                --user-assigned $USER_MANAGED_ID_RESOURCE_ID\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0627 \u0622\u0646\u060c \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc User Managed Identity \u06a9\u0627\u0645\u0644 \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"210_%D8%AA%D8%A7%DB%8C%DB%8C%D8%AF_%D8%B9%D9%85%D9%84%DB%8C%D8%A7%D8%AA\"><\/span>\n<p>  2.10. \u062a\u0627\u06cc\u06cc\u062f \u0639\u0645\u0644\u06cc\u0627\u062a<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u062d\u0627\u0644\u0627 \u06a9\u0647 \u062a\u0645\u0627\u0645 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u06a9\u0627\u0645\u0644 \u0634\u062f\u060c \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u0639\u0645\u0644\u06cc\u0627\u062a \u0631\u0627 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u06cc\u0645. \u0627\u0628\u062a\u062f\u0627 \u0646\u0627\u0645 \u0645\u06cc\u0632\u0628\u0627\u0646 FQDN \u0631\u0627 \u06a9\u0647 \u0628\u0647 Ingress \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0628\u062f\u0633\u062a \u0622\u0648\u0631\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nb\">export <\/span><span class=\"nv\">REST_ENDPOINT<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span>az containerapp show <span class=\"nt\">-n<\/span> <span class=\"nv\">$CONTAINER_APP_NAME<\/span> <span class=\"se\">\\<\/span>\n          <span class=\"nt\">-g<\/span> <span class=\"nv\">$RESOURCE_GROUP<\/span> <span class=\"se\">\\<\/span>\n          <span class=\"nt\">--query<\/span> properties.configuration.ingress.fqdn <span class=\"nt\">--output<\/span> tsv<span class=\"si\">)<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0633\u067e\u0633 URL \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc RESTful \u0631\u0627 \u0628\u0647 \u0646\u0627\u0645 \u0645\u06cc\u0632\u0628\u0627\u0646 \u0628\u0647 \u062f\u0633\u062a \u0622\u0645\u062f\u0647 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f \u0648 \u0628\u0647 \u0622\u0646 \u0645\u062a\u0635\u0644 \u0634\u0648\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>curl <span class=\"nt\">-X<\/span> POST https:\/\/<span class=\"nv\">$REST_ENDPOINT<\/span>\/askAI <span class=\"se\">\\<\/span>\n     <span class=\"nt\">-H<\/span> <span class=\"s2\">\"Content-Type: application\/json\"<\/span> <span class=\"se\">\\<\/span>\n     <span class=\"nt\">-d<\/span> <span class=\"s1\">'{\"message\":\"What is Spring Boot? please explain around 200 words?\"}'<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0647\u0631 \u0628\u0627\u0631 \u06a9\u0647 \u0627\u062c\u0631\u0627 \u0645\u06cc \u0634\u0648\u062f\u060c \u067e\u0627\u0633\u062e \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0645\u062a\u0641\u0627\u0648\u062a \u0628\u0627\u0634\u062f\u060c \u0627\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0646\u062a\u0638\u0627\u0631 \u0646\u062a\u0627\u06cc\u062c\u06cc \u0645\u0627\u0646\u0646\u062f \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>Arrr, Spring Boot be a powerful framework fer buildin' Java applications with minimal fuss, savvy? \nIt sails under the banner of the larger Spring ecosystem, providin' a swift and easy approach fer creatin' scalable and stand-alone web apps.\n\nYe see, it comes with embedded servers like Tomcat or Jetty, meanin' ye don't have the hassle of deployin' to external servers. \nSpring Boot simplifies the setup by makin' configurations automatic, allowin' developers to focus on writin' their code without worryin' about the boilerplate.\n\nIt also hoists the flag of convention over configuration, offerin' defaults that make gettin\u2019 started as smooth as a voyage with favorable winds. \nShould ye need to adjust yer sails, customization be available through its easy-to-use properties.\n\nAnd if ye treasure quick development, Spring Boot supports ye well with its rich assortment of pre-configured starters, integratin' smoothly with other technologies like databases and messaging systems.\n\nIn essence, Spring Boot be a trusty vessel fer any sea-farin' coder seekin' speed, efficiency, and a treasure chest of features in their Java web applications. \nAye, it be a boon to all developers, whether seasoned or green as a fresh landlubber!\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"211_%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%D9%85%D8%AC%D8%AF%D8%AF_%D8%A7%D8%B2_%D9%87%D9%85%D8%A7%D9%86_%D9%87%D9%88%DB%8C%D8%AA_%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA_%D8%B4%D8%AF%D9%87_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C_%D8%A8%D9%87_Azure_OpenAI_%D8%A7%D8%B2_%D8%B3%D8%A7%DB%8C%D8%B1_%D9%85%D9%86%D8%A7%D8%A8%D8%B9_Azure\"><\/span>\n<p>  2.11. \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f \u0627\u0632 \u0647\u0645\u0627\u0646 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 Azure OpenAI \u0627\u0632 \u0633\u0627\u06cc\u0631 \u0645\u0646\u0627\u0628\u0639 Azure<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0642\u0628\u0644\u0627\u064b \u062f\u0631 \u0645\u0648\u0631\u062f \u0646\u062d\u0648\u0647 \u0627\u0639\u0645\u0627\u0644 a <code>User Managed Identity<\/code> \u0628\u0647 <code>Azure Container Apps<\/code> \u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644 \u0628\u0647 <code>Azure OpenAI<\/code>. \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0627\u06cc\u0646 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u062a\u0648\u0633\u0637 \u0633\u0627\u06cc\u0631 \u0633\u0631\u0648\u06cc\u0633 \u0647\u0627 \u0646\u06cc\u0632 \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f \u0642\u0631\u0627\u0631 \u06af\u06cc\u0631\u062f.<\/p>\n<p>\u0628\u0647 \u0639\u0628\u0627\u0631\u062a \u062f\u06cc\u06af\u0631\u060c \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u0645\u0633\u062a\u0642\u0631 \u062f\u0631 \u062f\u06cc\u06af\u0631 \u0645\u0646\u0627\u0628\u0639 Azure \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0646\u062f \u0627\u0632 \u0647\u0645\u0627\u0646 User Managed Identity \u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644 \u0628\u0647 Azure OpenAI \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0646\u062f. <\/p>\n<p>\u0628\u0631\u062e\u06cc \u0627\u0632 \u0645\u0646\u0627\u0628\u0639 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u0646\u062f \u0627\u06cc\u0646 \u0647\u0648\u06cc\u062a \u0631\u0627 \u062f\u0631 \u062d\u06cc\u0646 \u0627\u06cc\u062c\u0627\u062f \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f\u060c \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0628\u0631\u062e\u06cc \u062f\u06cc\u06af\u0631\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0639\u062f\u0627\u064b \u0622\u0646 \u0631\u0627 \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0647\u06cc\u062f.<\/p>\n<p>\u062f\u0631 \u0632\u06cc\u0631\u060c \u0646\u062d\u0648\u0647 \u0627\u062e\u062a\u0635\u0627\u0635 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0645\u0646\u0627\u0628\u0639 \u0645\u0648\u062c\u0648\u062f Azure\u060c \u0628\u0647 \u062c\u0632 \u0646\u0645\u0648\u0646\u0647\u200c\u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u06cc\u0645.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"%D8%A8%D8%B1%D8%A7%DB%8C_Azure_VM\"><\/span>\n<p>  \u0628\u0631\u0627\u06cc Azure VM<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u0628\u0631\u0627\u06cc \u0627\u062e\u062a\u0635\u0627\u0635 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0645\u0627\u0634\u06cc\u0646 \u0645\u062c\u0627\u0632\u06cc Azure\u060c \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>az vm identity assign -g $RESOURCE_GROUP \\\n                      -n $VM_NAME \\\n                      --identities $USER_MANAGED_ID_RESOURCE_ID\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h4><span class=\"ez-toc-section\" id=\"%D8%A8%D8%B1%D8%A7%DB%8C_%D8%B3%D8%B1%D9%88%DB%8C%D8%B3_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_Azure\"><\/span>\n<p>  \u0628\u0631\u0627\u06cc \u0633\u0631\u0648\u06cc\u0633 \u0628\u0631\u0646\u0627\u0645\u0647 Azure<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u0628\u0631\u0627\u06cc \u0627\u062e\u062a\u0635\u0627\u0635 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u06cc\u06a9 \u0633\u0631\u0648\u06cc\u0633 \u0628\u0631\u0646\u0627\u0645\u0647 Azure\u060c \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>az webapp identity assign -g $RESOURCE_GROUP \\\n                          --name $APP_SERVICE_NAME \\\n                          --identities $USER_MANAGED_ID_RESOURCE_ID\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h4><span class=\"ez-toc-section\" id=\"%D8%A8%D8%B1%D8%A7%DB%8C_%D8%AA%D9%88%D8%A7%D8%A8%D8%B9_Azure\"><\/span>\n<p>  \u0628\u0631\u0627\u06cc \u062a\u0648\u0627\u0628\u0639 Azure<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u0628\u0631\u0627\u06cc \u0627\u062e\u062a\u0635\u0627\u0635 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u062a\u0648\u0627\u0628\u0639 Azure\u060c \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>az functionapp identity assign -g $RESOURCE_GROUP \\\n                               -n $AZURE_FUNCTION_NAME \\\n                               --identities $USER_MANAGED_ID_RESOURCE_ID\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h4><span class=\"ez-toc-section\" id=\"%D8%A8%D8%B1%D8%A7%DB%8C_%D9%86%D9%85%D9%88%D9%86%D9%87_%D9%87%D8%A7%DB%8C_%DA%A9%D8%A7%D9%86%D8%AA%DB%8C%D9%86%D8%B1_Azure\"><\/span>\n<p>  \u0628\u0631\u0627\u06cc \u0646\u0645\u0648\u0646\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u0628\u0631\u0627\u06cc \u0646\u0645\u0648\u0646\u0647\u200c\u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u062f\u0631 \u0637\u0648\u0644 \u0627\u06cc\u062c\u0627\u062f \u0646\u0645\u0648\u0646\u0647\u060c \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a\u200c\u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0627\u062e\u062a\u0635\u0627\u0635 \u062f\u0647\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>az container create \\\n                    --resource-group $RESOURCE_GROUP  \\\n                    --name $CONTAINER_INSTANCE_NAME \\\n                    --image $CONTAINER_IMAGE \\\n                    --assign-identity $USER_MANAGED_ID_RESOURCE_ID \n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h4><span class=\"ez-toc-section\" id=\"%D8%A8%D8%B1%D8%A7%DB%8C_%D8%B3%D8%B1%D9%88%DB%8C%D8%B3_Azure_Kubernetes\"><\/span>\n<p>  \u0628\u0631\u0627\u06cc \u0633\u0631\u0648\u06cc\u0633 Azure Kubernetes<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u0628\u0631\u0627\u06cc \u0627\u062e\u062a\u0635\u0627\u0635 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0633\u0631\u0648\u06cc\u0633 Azure Kubernetes\u060c \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>az aks update \\\n                -g $RESOURCE_GROUP \\\n                --name $AKS_CLUSTER_NAME \\\n                --enable-managed-identity \\\n                --assign-identity $USER_MANAGED_ID_RESOURCE_ID\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0627\u0646\u0646\u062f \u0627\u06cc\u0646\u060c \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f \u0627\u0632 \u0646\u0642\u0634 \u0647\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0634\u062f\u0647\u060c \u0628\u0647 \u0637\u0648\u0631 \u0627\u06cc\u0645\u0646 \u0628\u0647 \u0645\u0646\u0627\u0628\u0639 \u0647\u062f\u0641 \u062f\u0631 \u0633\u0631\u0648\u06cc\u0633 \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 Azure \u0645\u062a\u0635\u0644 \u0634\u0648\u06cc\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"212_%D9%85%D9%82%D8%A7%DB%8C%D8%B3%D9%87_%DA%A9%D9%84%DB%8C%D8%AF%D9%87%D8%A7%DB%8C_%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C_%D9%88_%D9%87%D9%88%DB%8C%D8%AA_%D9%87%D8%A7%DB%8C_%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA_%D8%B4%D8%AF%D9%87_%D8%AA%D9%88%D8%B3%D8%B7_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1_%D8%A7%D8%B2_%D8%AF%DB%8C%D8%AF%DA%AF%D8%A7%D9%87_%D8%A7%D9%85%D9%86%DB%8C%D8%AA%DB%8C\"><\/span>\n<p>  2.12. \u0645\u0642\u0627\u06cc\u0633\u0647 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0648 \u0647\u0648\u06cc\u062a \u0647\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 \u062f\u06cc\u062f\u06af\u0627\u0647 \u0627\u0645\u0646\u06cc\u062a\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u06cc\u0646 \u0628\u062e\u0634 \u062a\u0641\u0627\u0648\u062a \u0647\u0627\u06cc \u0627\u0645\u0646\u06cc\u062a\u06cc \u0628\u06cc\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0648 \u0647\u0648\u06cc\u062a \u0647\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0631\u0627\u06cc Azure OpenAI \u0631\u0627 \u062a\u0648\u0636\u06cc\u062d \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p>\u0647\u0646\u06af\u0627\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631\u060c \u0634\u0645\u0627 \u0622\u0646 \u0631\u0627 \u0645\u0634\u062e\u0635 \u0645\u06cc \u06a9\u0646\u06cc\u062f <code>client ID<\/code> \u0627\u0632 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0647\u0646\u06af\u0627\u0645 \u0627\u06cc\u062c\u0627\u062f \u0646\u0645\u0648\u0646\u0647 \u0627\u06cc \u0627\u0632 <code>ManagedIdentityCredential<\/code> \u06a9\u0644\u0627\u0633 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0627\u0648\u0627 \u0634\u0645\u0627 \u0627\u06cc\u0646 <code>client ID<\/code> \u0645\u0642\u062f\u0627\u0631 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0645\u062a\u063a\u06cc\u0631 \u0645\u062d\u06cc\u0637\u06cc \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc \u0634\u0648\u062f <code>$USER_MANAGED_ID_CLIENT_ID<\/code> \u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u062f\u0631 \u0646\u06af\u0627\u0647 \u0627\u0648\u0644\u060c \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0628\u0647 \u0646\u0638\u0631 \u0628\u0631\u0633\u062f \u06a9\u0647 \u0627\u06cc\u0646 \u062a\u0646\u0647\u0627 \u0628\u062e\u0634 \u0645\u0647\u0645\u06cc \u0627\u0632 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644 \u0627\u0633\u062a\u060c \u0628\u0647 \u063a\u06cc\u0631 \u0627\u0632 URL \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight java\"><code><span class=\"nc\">ManagedIdentityCredential<\/span> <span class=\"n\">credential<\/span> <span class=\"o\">=<\/span>\n        <span class=\"k\">new<\/span> <span class=\"nf\">ManagedIdentityCredentialBuilder<\/span><span class=\"o\">()<\/span>\n                       <span class=\"o\">.<\/span><span class=\"na\">clientId<\/span><span class=\"o\">(<\/span><span class=\"n\">userManagedIDClientId<\/span><span class=\"o\">)<\/span>\n                        <span class=\"o\">.<\/span><span class=\"na\">build<\/span><span class=\"o\">();<\/span>\n<span class=\"nc\">OpenAIClient<\/span> <span class=\"n\">openAIClient<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">OpenAIClientBuilder<\/span><span class=\"o\">()<\/span>\n                                        <span class=\"o\">.<\/span><span class=\"na\">credential<\/span><span class=\"o\">(<\/span><span class=\"n\">credential<\/span><span class=\"o\">)<\/span>\n                                        <span class=\"o\">.<\/span><span class=\"na\">endpoint<\/span><span class=\"o\">(<\/span><span class=\"n\">openAIEndpoint<\/span><span class=\"o\">)<\/span>\n                                        <span class=\"o\">.<\/span><span class=\"na\">buildClient<\/span><span class=\"o\">();<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u062a\u0623\u062b\u06cc\u0631 \u06cc\u06a9 \u0641\u0627\u0634 \u0634\u062f\u0647 \u0631\u0627 \u062f\u0631 \u0646\u0638\u0631 \u0628\u06af\u06cc\u0631\u06cc\u0645 <code>client ID<\/code> \u062f\u0631 \u0645\u0642\u0627\u0628\u0644 \u0644\u0648 \u0631\u0641\u062a\u0647 <code>Access Key<\/code>.<\/p>\n<p>\u06cc\u06a9 <code>Access Key<\/code> \u0634\u0628\u06cc\u0647 \u06cc\u06a9 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0645\u0639\u0645\u0648\u0644\u06cc \u0627\u0633\u062a. \u0627\u06af\u0631 \u0641\u0627\u0634 \u0634\u0648\u062f\u060c \u0647\u0631 \u06a9\u0633\u06cc \u06a9\u0647 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0631\u0627 \u0628\u062f\u0627\u0646\u062f \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0647 \u0645\u0646\u0628\u0639 \u062f\u0633\u062a\u0631\u0633\u06cc \u067e\u06cc\u062f\u0627 \u06a9\u0646\u062f. \u062f\u0631 \u0645\u0648\u0631\u062f Azure OpenAI\u060c \u0627\u06cc\u0646 \u0628\u062f\u0627\u0646 \u0645\u0639\u0646\u0627\u0633\u062a \u06a9\u0647 \u0647\u0631 \u06a9\u0633\u06cc \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0627\u0632 \u0645\u062f\u0644\u200c\u0647\u0627\u06cc \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0645\u0627\u0646\u0646\u062f GPT-4 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u062f. \u0627\u06af\u0631 \u0634\u0628\u06a9\u0647 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0639\u0645\u0648\u0645 \u0628\u0627\u0634\u062f\u060c \u062a\u0623\u062b\u06cc\u0631 \u0622\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u062d\u062a\u06cc \u0628\u06cc\u0634\u062a\u0631 \u0628\u0627\u0634\u062f.<\/p>\n<p>\u0627\u0632 \u0633\u0648\u06cc \u062f\u06cc\u06af\u0631\u060c \u0627\u06af\u0631 <code>client ID<\/code> \u0644\u0648 \u0631\u0641\u062a\u0647 \u0627\u0633\u062a\u060c \u062a\u0627\u062b\u06cc\u0631 \u0645\u062d\u062f\u0648\u062f \u0627\u0633\u062a. \u0627\u06cc\u0646 \u0628\u0647 \u0627\u06cc\u0646 \u062f\u0644\u06cc\u0644 \u0627\u0633\u062a \u06a9\u0647 <code>client ID<\/code> \u0628\u0647 \u062a\u0646\u0647\u0627\u06cc\u06cc \u0646\u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0647 Azure OpenAI \u0645\u062a\u0635\u0644 \u0634\u0648\u062f. \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631\u060c \u0627\u06cc\u0646 \u0633\u0631\u0648\u06cc\u0633 \u0628\u0627\u06cc\u062f \u0631\u0648\u06cc Azure \u0627\u062c\u0631\u0627 \u0634\u0648\u062f. \u062d\u062a\u06cc \u0627\u06af\u0631 Azure OpenAI \u0628\u0631\u0627\u06cc \u0639\u0645\u0648\u0645 \u0642\u0627\u0628\u0644 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0627\u0634\u062f\u060c \u0646\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u0645\u062d\u0644\u06cc \u06cc\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u06cc\u06a9 \u0634\u0628\u06a9\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u0627\u0648\u0627 \u0645\u062a\u0635\u0644 \u0634\u0648\u06cc\u062f.<\/p>\n<p>\u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646\u060c \u0627\u0646\u062a\u0633\u0627\u0628 \u0646\u0642\u0634 \u0632\u06cc\u0631 \u0628\u0631\u0627\u06cc \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u06a9\u0627\u0631\u0628\u0631 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>az role assignment create --assignee $USER_MANAGED_ID_PRINCIPAL_ID \\\n    --scope $OPEN_AI_RESOURCE_ID \\\n    --role \"Cognitive Services OpenAI User\" \n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u062a\u0646\u0638\u06cc\u0645 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0686\u0647 \u0627\u0642\u062f\u0627\u0645\u0627\u062a\u06cc \u0631\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u0634\u0646\u0627\u0633\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u062f\u0627\u062f. \u0627\u06cc\u0646\u062c\u0627\u060c <code>Cognitive Services OpenAI User<\/code> \u0627\u06cc\u0646 \u0646\u0642\u0634 \u0628\u0631\u0627\u06cc \u062e\u062f\u0645\u0627\u062a Azure OpenAI \u0627\u0639\u0637\u0627 \u0645\u06cc \u0634\u0648\u062f \u0648 \u0645\u062c\u0648\u0632\u0647\u0627 \u0631\u0627 \u0628\u0647 \u0639\u0645\u0644\u06cc\u0627\u062a \u062f\u0631 Azure OpenAI \u0645\u062d\u062f\u0648\u062f \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u0628\u062f\u0627\u0646 \u0645\u0639\u0646\u0627\u0633\u062a \u06a9\u0647 \u062d\u062a\u06cc \u0628\u0627 \u0627\u06cc\u0646 \u0634\u0646\u0627\u0633\u0647\u060c \u0646\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a\u06cc \u0645\u0627\u0646\u0646\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0645\u062f\u0644\u200c\u0647\u0627 \u0631\u0627 \u0646\u0647 \u0641\u0642\u0637 \u062f\u0631 \u0633\u0631\u0627\u0633\u0631 Azure \u0628\u0644\u06a9\u0647 \u062d\u062a\u06cc \u062f\u0631 Azure OpenAI \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f.<\/p>\n<p>\u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646\u060c \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u0634\u0646\u0627\u0633\u0647 \u06a9\u0627\u0631\u0628\u0631\u06cc\u060c \u0628\u0627\u06cc\u062f \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0633\u0631\u067e\u0631\u0633\u062a \u0628\u0647 Azure \u0648\u0627\u0631\u062f \u0634\u0648\u06cc\u062f \u0648 \u062a\u0646\u0647\u0627 \u0645\u0646\u0627\u0628\u0639\u06cc \u06a9\u0647 \u062a\u0648\u0633\u0637 \u0633\u0631\u067e\u0631\u0633\u062a \u0645\u0634\u062e\u0635 \u0634\u062f\u0647 \u0627\u0633\u062a \u062f\u0631 \u0645\u062d\u062f\u0648\u062f\u0647 \u0645\u062c\u0648\u0632\u0647\u0627\u06cc \u0627\u06cc\u0646 \u0634\u0646\u0627\u0633\u0647 \u0642\u0627\u0628\u0644 \u062f\u0633\u062a\u0631\u0633\u06cc \u0647\u0633\u062a\u0646\u062f.<\/p>\n<p>\u0628\u0647 \u0637\u0648\u0631 \u062e\u0644\u0627\u0635\u0647\u060c \u062f\u0631 \u0645\u0642\u0627\u06cc\u0633\u0647 \u0628\u0627 \u062a\u0623\u062b\u06cc\u0631 \u06cc\u06a9 \u06a9\u0644\u06cc\u062f \u062f\u0633\u062a\u0631\u0633\u06cc \u0644\u0648 \u0631\u0641\u062a\u0647\u060c \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u06a9\u0644\u0627\u06cc\u0646\u062a \u0641\u0627\u0634 \u0634\u062f\u0647 \u0628\u0647 \u0686\u0646\u062f\u06cc\u0646 \u0645\u0631\u062d\u0644\u0647 \u0628\u0631\u0627\u06cc \u0628\u0647\u0631\u0647 \u0628\u0631\u062f\u0627\u0631\u06cc \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0627\u06cc\u0645\u0646 \u062a\u0631 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0628\u0647 \u0627\u06cc\u0646 \u062f\u0644\u0627\u06cc\u0644\u060c \u0634\u0646\u0627\u0633\u0647\u200c\u0647\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a\u200c\u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0648\u0634\u06cc \u0627\u0645\u0646\u200c\u062a\u0631 \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0639\u0645\u0644\u06cc\u0627\u062a \u0646\u0633\u0628\u062a \u0628\u0647 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f. \u0645\u0627 \u0634\u0645\u0627 \u0631\u0627 \u062a\u0634\u0648\u06cc\u0642 \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0627\u0632 \u0647\u0648\u06cc\u062a \u0647\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0645\u062d\u06cc\u0637 \u0627\u0645\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"3_%D8%AE%D9%84%D8%A7%D8%B5%D9%87\"><\/span>\n<p>  3 \u062e\u0644\u0627\u0635\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627\u060c \u0645\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u06cc\u06a9 \u0641\u0631\u0622\u06cc\u0646\u062f \u062f\u0642\u06cc\u0642 \u0648 \u06af\u0627\u0645 \u0628\u0647 \u06af\u0627\u0645 \u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644 \u0627\u06cc\u0645\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0628\u0647 Azure OpenAI \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631\u060c \u0642\u062f\u0645 \u0628\u0631\u062f\u0627\u0634\u062a\u06cc\u0645. \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u062f\u0631 \u0627\u0628\u062a\u062f\u0627 \u062f\u0634\u0648\u0627\u0631 \u0628\u0647 \u0646\u0638\u0631 \u0628\u0631\u0633\u062f\u060c \u0627\u0645\u0627 \u0645\u0632\u06cc\u062a \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647 \u0642\u0627\u0628\u0644\u06cc\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f. \u0627\u06af\u0631 \u0633\u06cc\u0633\u062a\u0645\u200c\u0647\u0627\u06cc \u0634\u0645\u0627 \u06a9\u0645 \u0647\u0633\u062a\u0646\u062f \u06cc\u0627 \u0627\u0646\u0639\u0637\u0627\u0641\u200c\u067e\u0630\u06cc\u0631\u06cc \u06cc\u06a9 \u0646\u06af\u0631\u0627\u0646\u06cc \u0639\u0645\u062f\u0647 \u0646\u06cc\u0633\u062a\u060c \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u06cc\u06a9 \u0633\u06cc\u0633\u062a\u0645 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u0647\u0648\u06cc\u062a \u062a\u0631\u062c\u06cc\u062d \u062f\u0627\u062f\u0647 \u0634\u0648\u062f.<\/p>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0628\u0627 \u0627\u0641\u0632\u0627\u06cc\u0634 \u062a\u0639\u062f\u0627\u062f \u0633\u06cc\u0633\u062a\u0645 \u0647\u0627\u060c \u0634\u0646\u0627\u0633\u0647 \u0647\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0633\u06cc\u0627\u0631 \u0645\u0641\u06cc\u062f \u0645\u06cc \u0634\u0648\u0646\u062f. \u067e\u0633 \u0627\u0632 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0634\u0646\u0627\u0633\u0647 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631 \u0648 \u062a\u062e\u0635\u06cc\u0635 \u0646\u0642\u0634\u200c\u0647\u0627\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0647\u0645\u0627\u0646 \u0634\u0646\u0627\u0633\u0647 \u062f\u0631 \u0633\u0631\u0648\u06cc\u0633\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641\u06cc \u0645\u0627\u0646\u0646\u062f Azure App Service\u060c Azure Functions\u060c \u0648 Azure Kubernetes Services \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f. \u0647\u0631\u0686\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0647\u0627 \u06cc\u0627 \u062e\u062f\u0645\u0627\u062a \u0628\u06cc\u0634\u062a\u0631\u06cc \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u06cc\u062f\u060c \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0633\u0648\u062f\u0645\u0646\u062f\u062a\u0631 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u0644\u0637\u0641\u0627\u064b \u0633\u0639\u06cc \u06a9\u0646\u06cc\u062f \u0627\u0632 \u0647\u0648\u06cc\u062a \u0647\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0634\u062f\u0647 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u062d\u06cc\u0637 \u0647\u0627\u06cc \u0627\u0645\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Summarize this content to 400 words in Persian Lang \u0627\u0645\u0631\u0648\u0632\u060c \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u0645 \u062f\u0648 \u0646\u06a9\u062a\u0647 \u06a9\u0644\u06cc\u062f\u06cc \u0631\u0627 \u0627\u0632 \u0648\u0631\u0648\u062f\u06cc \u00ab\u0627\u062a\u0635\u0627\u0644 \u0627\u06cc\u0645\u0646 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0628\u0647 Azure OpenAI \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0647\u0648\u06cc\u062a \u0645\u062f\u06cc\u0631\u06cc\u062a\u200c\u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0627\u0631\u0628\u0631\u00bb \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u0628\u06af\u0630\u0627\u0631\u0645: \u0627\u0633\u062a\u0642\u0631\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u062c\u0627\u0648\u0627 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0628\u062f\u0648\u0646 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631\u0633\u0627\u0632\u06cc \u0627\u062a\u0635\u0627\u0644 \u0627\u06cc\u0645\u0646 \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631 Azure \u0628\u0647 Azure &hellip;<\/p>\n","protected":false},"author":2,"featured_media":76893,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-76892","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/76892","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=76892"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/76892\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/76893"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=76892"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=76892"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=76892"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}