В современном мире искусственный интеллект и большие языковые модели (LLM) стали неотъемлемой частью инновационных решений, трансформируя подходы к разработке программного обеспечения. Способность машин понимать, генерировать и обрабатывать естественный язык открывает беспрецедентные возможности для автоматизации, персонализации и создания совершенно новых пользовательских опытов. Azure OpenAI Service предоставляет разработчикам уникальную возможность интегрировать мощные модели OpenAI, такие как GPT-3.5-turbo и GPT-4o-mini, в свои приложения, используя надежную, безопасную и масштабируемую инфраструктуру Microsoft Azure. Это не просто доступ к передовым моделям, но и возможность их использования в корпоративной среде с соблюдением требований безопасности и соответствия.
Python, благодаря своей простоте, обширной экосистеме библиотек и доминирующему положению в области машинного обучения и искусственного интеллекта, является идеальным выбором для взаимодействия с Azure OpenAI. Это руководство призвано предоставить разработчикам полное, пошаговое понимание того, как эффективно интегрировать Azure OpenAI с Python.
Мы рассмотрим все этапы: от первоначальной настройки ресурсов Azure и подготовки среды Python до выполнения первых запросов, создания интерактивного веб-приложения на Flask и его развертывания в Azure App Service с использованием управляемых удостоверений. Вы также узнаете о лучших практиках и расширенных возможностях, которые помогут вам создавать надежные и производительные решения. Приготовьтесь погрузиться в мир интеллектуальной разработки и раскрыть весь потенциал Azure OpenAI с Python.
Настройка Среды и Ресурсов Azure OpenAI
Создание ресурса Azure OpenAI и развертывание модели
Для начала работы с Azure OpenAI необходимо создать соответствующий ресурс в вашей подписке Azure. Это можно сделать через портал Azure или с помощью Azure CLI. Рекомендуется использовать Azure CLI для автоматизации и воспроизводимости.
- Создайте группу ресурсов (если её нет):
az group create —name MyOpenAIResourceGroup —location eastus «`
- Создайте ресурс Azure OpenAI:
az cognitiveservices account create
—name MyOpenAIInstance
—resource-group MyOpenAIResourceGroup
—location eastus
—kind OpenAI
—sku S0
«`
-
Разверните модель: После создания ресурса перейдите на портал Azure, найдите ваш ресурс Azure OpenAI и в разделе "Управление развертываниями" (Model deployments) разверните нужную модель, например,
gpt-3.5-turboилиgpt-4o-mini. Присвойте ей имя развертывания, например,gpt35turbo. Это имя будет использоваться в вашем коде. -
Получите конечную точку и ключ API: Эти данные необходимы для аутентификации. Их можно найти в разделе "Ключи и конечная точка" (Keys and Endpoint) вашего ресурса Azure OpenAI на портале.
Подготовка Python-проекта: виртуальное окружение и зависимости
После настройки ресурсов Azure OpenAI, следующим шагом является подготовка локальной среды разработки Python.
- Создайте виртуальное окружение: Это изолирует зависимости вашего проекта.
python -m venv .venv «`
-
Активируйте виртуальное окружение:
-
Windows:
.\.venv\Scripts\activate -
macOS/Linux:
source ./.venv/bin/activate
-
-
Установите необходимые пакеты:
pip install openai python-dotenv
«`
Пакет openai предоставляет SDK для взаимодействия с API, а python-dotenv поможет безопасно управлять переменными окружения, такими как ключи API.
- Создайте файл
requirements.txt: Зафиксируйте зависимости для воспроизводимости.
pip freeze > requirements.txt «` Теперь ваша среда готова к написанию кода и взаимодействию с Azure OpenAI.
Создание ресурса Azure OpenAI и развертывание модели
Для начала работы с Azure OpenAI необходимо создать соответствующий ресурс в вашей подписке Azure и развернуть в нем желаемую модель. Этот процесс можно выполнить как через портал Azure, так и с помощью Azure CLI, что часто предпочтительнее для автоматизации и разработчиков.
1. Создание ресурса Azure OpenAI
Прежде всего, убедитесь, что у вас установлен и настроен Azure CLI. Если у вас еще нет группы ресурсов, создайте ее:
az group create --name my-openai-rg --location eastus
Затем создайте сам ресурс Azure OpenAI. Обратите внимание на kind (OpenAI) и sku (S0):
az cognitiveservices account create \
--name my-openai-resource \
--resource-group my-openai-rg \
--location eastus \
--kind OpenAI \
--sku S0
После выполнения этой команды Azure создаст ресурс, который будет служить контейнером для ваших моделей.
2. Развертывание модели
После создания ресурса необходимо развернуть конкретную модель, например, gpt-35-turbo или gpt-4o-mini. Имя развертывания (deployment-name) будет использоваться в вашем коде для обращения к модели.
az cognitiveservices account deployment create \
--name my-openai-resource \
--resource-group my-openai-rg \
--deployment-name gpt-35-turbo-deployment \
--model-name gpt-35-turbo \
--model-version "0125" \
--model-format OpenAI
Вы можете выбрать любую доступную модель и соответствующую ей версию. Убедитесь, что выбранная модель доступна в вашем регионе.
3. Получение конечной точки и ключей API
Для взаимодействия с развернутой моделью вам понадобятся конечная точка (endpoint) и ключ API. Их можно найти в портале Azure, перейдя к созданному ресурсу Azure OpenAI и выбрав раздел "Keys and Endpoint" (Ключи и конечная точка). Скопируйте один из ключей и значение конечной точки. Эти данные будут использоваться для аутентификации ваших Python-приложений.
Подготовка Python-проекта: виртуальное окружение и зависимости
После того как ресурсы Azure OpenAI настроены, необходимо подготовить локальную среду разработки Python. Это критически важный шаг для обеспечения чистоты проекта, управления зависимостями и безопасного хранения конфиденциальных данных.
Создание виртуального окружения
Использование виртуального окружения (virtual environment) — это лучшая практика в разработке на Python. Оно позволяет изолировать зависимости вашего проекта от других проектов и глобальной установки Python, предотвращая конфликты версий. Для создания виртуального окружения выполните следующие команды в корневой папке вашего проекта:
-
Создание окружения:
python -m venv .venv -
Активация окружения:
-
Linux/macOS:
source .venv/bin/activate -
Windows (PowerShell):
.venv\Scripts\Activate.ps1 -
Windows (Command Prompt):
.venv\Scripts\activate.bat
-
После активации виртуального окружения в вашей командной строке появится префикс (.venv), указывающий на то, что вы работаете внутри него.
Установка необходимых зависимостей
Для взаимодействия с Azure OpenAI из Python нам потребуется официальная библиотека openai. Кроме того, для безопасного управления ключами API и конечными точками мы будем использовать библиотеку python-dotenv, которая позволяет загружать переменные окружения из файла .env.
Установите эти пакеты с помощью pip:
pip install openai python-dotenv
Настройка переменных окружения
Для безопасного хранения конфиденциальных данных, таких как ключи API и конечные точки, создайте файл с именем .env в корневой папке вашего проекта. Добавьте в него следующие строки, заменив заполнители на ваши данные, полученные на предыдущем шаге:
AZURE_OPENAI_ENDPOINT="https://ВАШ_РЕСУРС.openai.azure.com/"
AZURE_OPENAI_API_KEY="ВАШ_КЛЮЧ_API"
AZURE_OPENAI_API_VERSION="2026-02-01" # Используйте актуальную версию API
Важно: Никогда не коммитьте файл .env в систему контроля версий (например, Git). Добавьте его в .gitignore.
Основы Взаимодействия с Azure OpenAI через Python
Теперь, когда наша среда разработки настроена, а необходимые библиотеки установлены, мы готовы выполнить наш первый запрос к Azure OpenAI. Этот шаг продемонстрирует базовое взаимодействие с моделью завершения чата.
Выполнение первого запроса завершения чата
Для начала убедитесь, что переменные окружения (AZURE_OPENAI_ENDPOINT, AZURE_OPENAI_API_KEY, AZURE_OPENAI_API_VERSION, AZURE_OPENAI_DEPLOYMENT_NAME) загружены. Мы будем использовать класс AzureOpenAI из библиотеки openai.
import os
from openai import AzureOpenAI
from dotenv import load_dotenv
# Загружаем переменные окружения из .env файла
load_dotenv()
# Инициализируем клиент Azure OpenAI
client = AzureOpenAI(
azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"),
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
)
deployment_name = os.getenv("AZURE_OPENAI_DEPLOYMENT_NAME") # Например, 'gpt-35-turbo' или 'gpt-4o-mini'
# Выполняем запрос завершения чата
response = client.chat.completions.create(
model=deployment_name,
messages=[
{"role": "system", "content": "Вы полезный ИИ-ассистент."},
{"role": "user", "content": "Привет, как дела?"}
]
)
# Выводим ответ модели
print(response.choices[0].message.content)
В этом примере мы отправляем простой диалог, где role: system задает контекст для модели, а role: user содержит запрос пользователя. Модель GPT-3.5-turbo или GPT-4o-mini (в зависимости от вашего развертывания) обработает запрос и вернет ответ.
Методы аутентификации: ключи API и Microsoft Entra ID (Managed Identity)
В приведенном выше примере мы использовали ключ API для аутентификации. Это самый простой способ начать работу, но для производственных приложений, особенно развернутых в Azure, рекомендуется использовать управляемые удостоверения (Managed Identity) через Microsoft Entra ID.
-
Ключи API: Подходят для быстрой разработки и тестирования. Однако они требуют безопасного хранения и ротации, так как их утечка может привести к несанкционированному доступу.
-
Управляемые удостоверения (Managed Identity): Это функция Azure, которая позволяет вашим приложениям, работающим в Azure (например, в Azure App Service), аутентифицироваться в других службах Azure без необходимости управлять учетными данными. Azure автоматически управляет жизненным циклом удостоверения. Для использования управляемых удостоверений с
AzureOpenAIклиент может быть инициализирован с помощьюDefaultAzureCredentialиз библиотекиazure-identity:from azure.identity import DefaultAzureCredential # ... credential = DefaultAzureCredential() client = AzureOpenAI( azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"), azure_ad_token_provider=credential.get_token, api_version=os.getenv("AZURE_OPENAI_API_VERSION"), )Этот подход значительно повышает безопасность, поскольку секреты не хранятся в коде или переменных окружения приложения.
Выполнение первого запроса завершения чата
После того как ваша среда Python настроена, а ресурс Azure OpenAI и модель развернуты, вы готовы выполнить свой первый запрос завершения чата. Этот шаг демонстрирует базовое взаимодействие с моделью, используя установленный ранее пакет openai и настроенные переменные окружения для аутентификации.
Для начала убедитесь, что у вас установлена библиотека openai (как было описано в предыдущем разделе) и что переменные окружения AZURE_OPENAI_ENDPOINT, AZURE_OPENAI_API_KEY и AZURE_OPENAI_API_VERSION корректно заданы. Затем используйте следующий код:
import os
from openai import AzureOpenAI
try:
# Инициализация клиента AzureOpenAI с использованием переменных окружения
client = AzureOpenAI(
azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
api_key=os.environ["AZURE_OPENAI_API_KEY"],
api_version=os.environ["AZURE_OPENAI_API_VERSION"]
)
# Укажите имя вашего развертывания модели (например, 'gpt-35-turbo' или 'gpt-4o-mini')
deployment_name = "gpt-35-turbo" # Замените на имя вашего развертывания в Azure OpenAI
print(f"Отправка запроса к модели '{deployment_name}'...")
# Выполнение запроса завершения чата
response = client.chat.completions.create(
model=deployment_name,
messages=[
{"role": "system", "content": "Вы полезный ИИ-ассистент, который отвечает кратко и по делу."},
{"role": "user", "content": "Привет, как дела?"}
],
max_tokens=100,
temperature=0.7
)
print("Ответ получен:")
print(response.choices[0].message.content)
except KeyError as e:
print(f"Ошибка: Не установлена переменная окружения {e}. Убедитесь, что AZURE_OPENAI_ENDPOINT, AZURE_OPENAI_API_KEY и AZURE_OPENAI_API_VERSION установлены.")
except Exception as e:
print(f"Произошла ошибка при выполнении запроса: {e}")
В этом примере:
-
AzureOpenAIклиент инициализируется с использованием конечной точки, ключа API и версии API, полученных из переменных окружения. -
deployment_name— это имя, которое вы дали вашей развернутой модели в Azure OpenAI Studio. -
Список
messagesсодержит диалог. Каждый элемент — это словарь сrole(например,system,user,assistant) иcontent. -
max_tokensограничивает длину генерируемого ответа, аtemperatureконтролирует случайность ответов (от 0 до 2). -
Ответ модели доступен через
response.choices[0].message.content.
Этот базовый запрос является фундаментом для всех дальнейших взаимодействий с моделями Azure OpenAI.
Методы аутентификации: ключи API и Microsoft Entra ID (Managed Identity)
После того как мы успешно выполнили первый запрос, важно углубиться в методы аутентификации, которые обеспечивают безопасное взаимодействие вашего Python-приложения с Azure OpenAI. Существует два основных подхода: использование ключей API и управляемых удостоверений (Managed Identity) Microsoft Entra ID.
Ключи API
Ключи API — это традиционный и наиболее простой способ аутентификации. Каждый ресурс Azure OpenAI имеет два ключа API, которые можно найти в разделе «Ключи и конечная точка» (Keys and Endpoint) на портале Azure. Эти ключи представляют собой длинные секретные строки, которые предоставляют полный доступ к вашему ресурсу.
Для использования ключа API в Python, как мы уже видели, его необходимо передать клиенту AzureOpenAI:
from openai import AzureOpenAI
import os
client = AzureOpenAI(
azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"),
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
api_version="2026-02-01"
)
Важно: Никогда не храните ключи API непосредственно в коде. Всегда используйте переменные окружения, Azure Key Vault или другие безопасные методы хранения секретов. Регулярно меняйте ключи API для повышения безопасности.
Microsoft Entra ID (Managed Identity)
Для приложений, развернутых в Azure (например, в Azure App Service, Azure Functions, Azure Kubernetes Service), настоятельно рекомендуется использовать управляемые удостоверения Microsoft Entra ID. Этот метод устраняет необходимость в управлении секретами (ключами API), поскольку Azure автоматически управляет жизненным циклом учетных данных.
Управляемые удостоверения позволяют вашему приложению аутентифицироваться в Azure OpenAI, используя собственное удостоверение, предоставленное Azure. Для этого необходимо:
-
Включить управляемое удостоверение для вашего ресурса Azure (например, App Service).
-
Предоставить этому управляемому удостоверению роль «Пользователь служб когнитивных вычислений Azure OpenAI» (Cognitive Services OpenAI User) на вашем ресурсе Azure OpenAI.
В Python вы можете использовать библиотеку azure-identity для аутентификации с помощью DefaultAzureCredential:
from openai import AzureOpenAI
from azure.identity import DefaultAzureCredential
import os
credential = DefaultAzureCredential()
client = AzureOpenAI(
azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"),
azure_ad_token_provider=credential.get_token("https://cognitiveservices.azure.com/.default"),
api_version="2026-02-01"
)
DefaultAzureCredential автоматически пытается аутентифицироваться, используя различные методы (переменные окружения, управляемые удостоверения, Azure CLI и т.д.), что делает его очень гибким для локальной разработки и развертывания в облаке. Этот подход значительно повышает безопасность, поскольку вам не нужно вручную управлять секретами.
Создание Интерактивного Приложения с Flask и Azure OpenAI
Теперь, когда мы освоили методы аутентификации, применим эти знания для создания интерактивного веб-приложения. Мы разработаем простой чат-бот на Flask, который будет использовать Azure OpenAI для генерации ответов, а затем создадим базовый веб-интерфейс для взаимодействия с ним.
Разработка простого чат-бота на Flask
Начнем с файла app.py, который будет содержать логику нашего Flask-приложения. Убедитесь, что переменные окружения для AZURE_OPENAI_ENDPOINT и AZURE_OPENAI_API_KEY (или соответствующие для Managed Identity) настроены, как обсуждалось ранее.
import os
from flask import Flask, request, jsonify, render_template
from openai import AzureOpenAI
app = Flask(__name__)
client = AzureOpenAI(
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
api_key = os.getenv("AZURE_OPENAI_API_KEY"),
api_version = "2026-02-01"
)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/chat', methods=['POST'])
def chat():
user_message = request.json.get('message')
if not user_message:
return jsonify({'error': 'No message provided'}), 400
try:
response = client.chat.completions.create(
model="gpt-35-turbo" if os.getenv("AZURE_OPENAI_MODEL_NAME") is None else os.getenv("AZURE_OPENAI_MODEL_NAME"), # Имя развернутой модели
messages=[
{"role": "system", "content": "Вы полезный ИИ-помощник."},
{"role": "user", "content": user_message}
]
)
ai_response = response.choices[0].message.content
return jsonify({'response': ai_response})
except Exception as e:
return jsonify({'error': str(e)}), 500
if __name__ == '__main__':
app.run(debug=True)
В этом коде мы инициализируем клиент AzureOpenAI, используя переменные окружения. Маршрут / отображает index.html, а /chat обрабатывает POST-запросы, отправляя сообщение пользователя в Azure OpenAI и возвращая ответ.
Разработка веб-интерфейса (HTML) и тестирование локально
Создайте папку templates в корне вашего проекта и внутри нее файл index.html:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Чат-бот Azure OpenAI</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
#chat-box { border: 1px solid #ccc; padding: 10px; height: 300px; overflow-y: scroll; margin-bottom: 10px; }
.message { margin-bottom: 5px; }
.user { color: blue; }
.ai { color: green; }
</style>
</head>
<body>
<h1>Чат-бот Azure OpenAI</h1>
<div id="chat-box"></div>
<input type="text" id="user-input" placeholder="Введите ваше сообщение..." style="width: 80%; padding: 8px;">
<button onclick="sendMessage()">Отправить</button>
<script>
async function sendMessage() {
const userInput = document.getElementById('user-input');
const message = userInput.value;
if (!message) return;
addMessage('user', message);
userInput.value = '';
try {
const response = await fetch('/chat', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ message: message })
});
const data = await response.json();
if (data.response) {
addMessage('ai', data.response);
} else if (data.error) {
addMessage('ai', 'Ошибка: ' + data.error);
}
} catch (error) {
addMessage('ai', 'Ошибка сети: ' + error);
}
}
function addMessage(sender, text) {
const chatBox = document.getElementById('chat-box');
const msgDiv = document.createElement('div');
msgDiv.className = 'message ' + sender;
msgDiv.textContent = `${sender === 'user' ? 'Вы' : 'AI'}: ${text}`;
chatBox.appendChild(msgDiv);
chatBox.scrollTop = chatBox.scrollHeight;
}
</script>
</body>
</html>
Для локального тестирования убедитесь, что у вас установлен Flask (pip install Flask) и openai (pip install openai). Затем запустите python app.py в терминале и откройте http://127.0.0.1:5000 в браузере. Вы сможете взаимодействовать с чат-ботом, который использует вашу развернутую модель Azure OpenAI.
Разработка простого чат-бота на Flask
Начнем с создания основного файла приложения app.py, который будет обрабатывать логику нашего чат-бота. Мы будем использовать Flask для маршрутизации запросов и интеграции с Azure OpenAI.
Сначала импортируем необходимые библиотеки и инициализируем клиент Azure OpenAI, используя переменные окружения, которые мы настроили ранее:
import os
from flask import Flask, request, jsonify, render_template
from openai import AzureOpenAI
app = Flask(__name__)
# Инициализация клиента Azure OpenAI
client = AzureOpenAI(
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
api_key = os.getenv("AZURE_OPENAI_API_KEY"),
api_version = "2026-02-01" # Убедитесь, что используете актуальную версию API
)
deployment_name = os.getenv("AZURE_OPENAI_DEPLOYMENT_NAME")
Далее определим маршруты для нашего приложения. Главная страница (/) будет отображать пользовательский интерфейс чата, который мы разработаем в следующем подразделе.
@app.route('/')
def index():
return render_template('index.html')
Основная логика чат-бота будет реализована в маршруте /chat, который будет принимать POST-запросы с сообщениями пользователя. Этот маршрут отправит сообщение в Azure OpenAI и вернет сгенерированный ответ.
@app.route('/chat', methods=['POST'])
def chat():
user_message = request.json.get('message')
if not user_message:
return jsonify({"error": "No message provided"}), 400
try:
response = client.chat.completions.create(
model=deployment_name,
messages=[
{"role": "system", "content": "Вы полезный ИИ-помощник."},
{"role": "user", "content": user_message}
]
)
ai_response = response.choices[0].message.content
return jsonify({"response": ai_response})
except Exception as e:
return jsonify({"error": str(e)}), 500
if __name__ == '__main__':
app.run(debug=True)
Этот код создает базовый Flask-сервер, который принимает сообщения от пользователя, передает их в развернутую модель Azure OpenAI и возвращает ответ. Файл index.html будет отвечать за отображение этого взаимодействия в браузере.
Разработка веб-интерфейса (HTML) и тестирование локально
Теперь, когда серверная часть чат-бота на Flask готова, необходимо создать клиентский интерфейс для взаимодействия с ним. Для этого мы разработаем простой HTML-файл templates/index.html, который будет содержать поле ввода для сообщений пользователя и область для отображения истории чата.
Разработка веб-интерфейса (HTML)
Создайте файл templates/index.html со следующей структурой. Основное внимание уделим JavaScript-части, которая отвечает за отправку сообщений на сервер Flask и отображение ответов:
<!-- ... другие элементы HTML, стили и поле ввода ... -->
<div id="chat-box"></div>
<input type="text" id="user-input" placeholder="Введите ваше сообщение...">
<button onclick="sendMessage()">Отправить</button>
<script>
async function sendMessage() {
const userInput = document.getElementById('user-input');
const message = userInput.value.trim();
if (!message) return;
// Отображаем сообщение пользователя
document.getElementById('chat-box').innerHTML += `<div class="message user">Вы: ${message}</div>`;
userInput.value = '';
try {
const response = await fetch('/chat', { // Отправляем запрос на Flask-сервер
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ message: message })
});
const data = await response.json();
// Отображаем ответ бота
document.getElementById('chat-box').innerHTML += `<div class="message bot">Бот: ${data.response}</div>`;
} catch (error) {
console.error('Ошибка:', error);
document.getElementById('chat-box').innerHTML += `<div class="message bot" style="color: red;">Ошибка: ${error.message}</div>`;
}
document.getElementById('chat-box').scrollTop = document.getElementById('chat-box').scrollHeight;
}
document.getElementById('user-input').addEventListener('keypress', (e) => { if (e.key === 'Enter') sendMessage(); });
</script>
Этот JavaScript-код использует fetch API для отправки POST-запросов на маршрут /chat вашего Flask-приложения и динамически обновляет div#chat-box полученными ответами.
Локальное тестирование
Для локального тестирования убедитесь, что ваш файл app.py запущен. Вы можете сделать это, выполнив команду python app.py (или flask run, если вы настроили переменную FLASK_APP). После запуска откройте веб-браузер и перейдите по адресу http://127.0.0.1:5000. Вы сможете взаимодействовать с чат-ботом, отправляя сообщения и получая ответы от Azure OpenAI через ваше Flask-приложение.
Развертывание Python-Приложения в Azure App Service
После успешного локального тестирования нашего Flask-приложения с Azure OpenAI, следующим логичным шагом является его развертывание в облаке. Azure App Service предоставляет масштабируемую и управляемую платформу для хостинга веб-приложений.
Подготовка к развертыванию: requirements.txt и конфигурация
Для корректного развертывания в Azure App Service необходимо убедиться, что все зависимости вашего Python-проекта перечислены в файле requirements.txt. Azure App Service использует этот файл для автоматической установки необходимых пакетов при деплое. Создайте его, если еще не сделали:
pip freeze > requirements.txt
Конфигурация приложения, такая как конечная точка Azure OpenAI и имя развернутой модели, должна быть передана через переменные среды в App Service. Это обеспечивает безопасность и гибкость, позволяя легко менять параметры без изменения кода.
Развертывание с помощью Azure CLI и настройка управляемых удостоверений
Развертывание Flask-приложения в Azure App Service можно выполнить с помощью Azure CLI. Сначала создайте ресурс App Service, а затем разверните ваш код. Пример команды для создания и развертывания:
az webapp up --resource-group <ВАША_ГРУППА_РЕСУРСОВ> --name <ИМЯ_ВАШЕГО_ПРИЛОЖЕНИЯ> --runtime PYTHON:3.10 --sku B1
Для обеспечения максимальной безопасности и упрощения управления учетными данными рекомендуется использовать управляемые удостоверения (Managed Identity) вместо ключей API. После развертывания включите системное управляемое удостоверение для вашего App Service и предоставьте ему роль "Cognitive Services OpenAI User" на ресурсе Azure OpenAI. Это позволит приложению аутентифицироваться в Azure OpenAI без явного хранения секретов.
Подготовка к развертыванию: requirements.txt и конфигурация
Для успешного развертывания вашего Flask-приложения в Azure App Service необходимо тщательно подготовить зависимости и конфигурацию.
Управление зависимостями с requirements.txt
Azure App Service автоматически устанавливает все необходимые пакеты Python, перечисленные в файле requirements.txt. Этот файл должен находиться в корневой директории вашего проекта. Чтобы сгенерировать его, находясь в активированном виртуальном окружении, выполните команду:
pip freeze > requirements.txt
Убедитесь, что в requirements.txt включены все пакеты, используемые вашим приложением, включая flask, openai и python-dotenv (если вы использовали его для локальной разработки).
Конфигурация приложения через переменные среды
Ключи API, конечные точки Azure OpenAI и другие конфиденциальные данные никогда не должны быть жестко закодированы в вашем приложении. Вместо этого используйте переменные среды. В Azure App Service вы можете настроить их как "Параметры приложения" (Application settings), которые затем становятся доступными для вашего приложения как переменные среды.
В вашем Python-коде доступ к этим переменным осуществляется через os.environ:
import os
AZURE_OPENAI_ENDPOINT = os.environ.get("AZURE_OPENAI_ENDPOINT")
AZURE_OPENAI_API_KEY = os.environ.get("AZURE_OPENAI_API_KEY")
Это обеспечивает безопасность и гибкость, позволяя изменять конфигурацию без повторного развертывания кода. После этих шагов ваше приложение готово к развертыванию в облаке.
Развертывание с помощью Azure CLI и настройка управляемых удостоверений
После подготовки проекта к развертыванию, используем Azure CLI для публикации приложения в Службе приложений Azure. Этот метод упрощает процесс, автоматизируя многие шаги конфигурации.
- Развертывание приложения с помощью Azure CLI:
Перейдите в корневую директорию вашего проекта и выполните следующую команду:
az webapp up —resource-group <ВАША_ГРУППА_РЕСУРСОВ> —name <ИМЯ_ВАШЕГО_ПРИЛОЖЕНИЯ> —runtime PYTHON:3.9 —sku B1
«`
Эта команда создаст Службу приложений (если она еще не существует), настроит среду Python и развернет ваше приложение, используя requirements.txt для установки зависимостей.
-
Настройка управляемых удостоверений (Managed Identity): Для обеспечения максимальной безопасности и исключения необходимости хранения ключей API, настроим системно-назначаемое управляемое удостоверение для вашей Службы приложений.
- Включение управляемого удостоверения:
- Включение управляемого удостоверения:
az webapp identity assign —resource-group <ВАША_ГРУППА_РЕСУРСОВ> —name <ИМЯ_ВАШЕГО_ПРИЛОЖЕНИЯ> «`
* **Предоставление разрешений:**
Получите ID вашего ресурса Azure OpenAI и назначьте роль "Cognitive Services OpenAI User" управляемому удостоверению вашего приложения:
```bash
OPENAI_ID=$(az cognitiveservices account show —name <ИМЯ_ВАШЕГО_РЕСУРСА_OPENAI> —resource-group <ВАША_ГРУППА_РЕСУРСОВ> —query id —output tsv)
APP_PRINCIPAL_ID=$(az webapp show —name <ИМЯ_ВАШЕГО_ПРИЛОЖЕНИЯ> —resource-group <ВАША_ГРУППА_РЕСУРСОВ> —query identity.principalId —output tsv)
az role assignment create —role "Cognitive Services OpenAI User" —assignee $APP_PRINCIPAL_ID —scope $OPENAI_ID
«`
Теперь ваше приложение может аутентифицироваться в Azure OpenAI, используя DefaultAzureCredential из библиотеки azure-identity, без явного указания ключей API.
Расширенные Возможности и Лучшие Практики
После успешного развертывания и настройки безопасной аутентификации, рассмотрим, как оптимизировать и расширить функциональность вашего приложения.
Работа с различными моделями и параметрами запросов
Azure OpenAI предлагает доступ к различным моделям, включая GPT-4o-mini, GPT-4, а также модели для встраиваний (embeddings). Выбор модели зависит от задачи и бюджета. Для тонкой настройки ответов используйте параметры запроса:
-
temperature: контролирует случайность ответов (0.0 для детерминированных, 1.0 для творческих). -
max_tokens: максимальное количество токенов в ответе. -
top_p: альтернативаtemperature, фокусирующаяся на вероятностном распределении. -
stop_sequences: последовательности, при обнаружении которых модель прекращает генерацию.
Экспериментируйте с этими параметрами и методами prompt engineering для достижения наилучших результатов.
Мониторинг, безопасность и масштабирование приложений
Для обеспечения надежности и эффективности:
-
Мониторинг: Используйте Azure Monitor и Application Insights для отслеживания производительности, ошибок и использования API.
-
Безопасность: Помимо управляемых удостоверений, рассмотрите сетевую изоляцию (например, через Приватные конечные точки) для доступа к Azure OpenAI, а также валидацию входных данных.
-
Масштабирование: Azure App Service позволяет легко масштабировать ваше приложение горизонтально для обработки возрастающей нагрузки. Учитывайте лимиты скорости (rate limits) Azure OpenAI и реализуйте механизмы повторных попыток (retry logic) с экспоненциальной задержкой.
Работа с различными моделями и параметрами запросов
Продолжая тему оптимизации ответов, важно понимать, что Azure OpenAI предоставляет доступ к широкому спектру моделей, каждая из которых имеет свои особенности и предназначение. Выбор подходящей модели, такой как gpt-3.5-turbo для быстрых и экономичных решений или gpt-4o-mini для более сложных задач, является первым шагом к достижению желаемого результата. Эффективное использование этих моделей также требует тонкой настройки параметров запросов.
Ключевые параметры, влияющие на генерацию ответов:
-
temperature: Определяет «креативность» модели. Значения от 0 до 1, где более высокие значения делают ответы более случайными и разнообразными, а низкие — более предсказуемыми и сфокусированными. -
max_tokens: Устанавливает максимальное количество токенов (слов или частей слов) в генерируемом ответе. Это помогает контролировать длину вывода. -
top_p: Альтернативаtemperature, контролирующая разнообразие путем выбора токенов из вероятностного распределения. Например,top_p=0.1означает, что будут рассмотрены только токены, составляющие 10% верхней вероятностной массы. -
frequency_penaltyиpresence_penalty: Эти параметры (от -2.0 до 2.0) влияют на вероятность повторения токенов.frequency_penaltyснижает вероятность повторения уже использованных токенов, аpresence_penalty— вероятность появления новых тем.
Экспериментирование с этими параметрами позволяет точно настроить поведение модели для конкретных сценариев использования, будь то генерация креативного контента или получение точных, фактических ответов.
Мониторинг, безопасность и масштабирование приложений
После тонкой настройки моделей и параметров запросов, критически важно обеспечить надежность, безопасность и масштабируемость вашего приложения.
-
Мониторинг: Используйте Azure Monitor и Application Insights для отслеживания производительности приложения, использования API Azure OpenAI, ошибок и задержек. Настройте пользовательские метрики и оповещения, чтобы оперативно реагировать на любые аномалии. Логирование запросов и ответов (с учетом конфиденциальности данных) поможет в отладке и оптимизации.
-
Безопасность: Помимо использования управляемых удостоверений (Managed Identities) для аутентификации, рассмотрите применение Приватных конечных точек (Private Endpoints) для Azure OpenAI, чтобы ограничить доступ к вашим моделям только из вашей виртуальной сети. Внедряйте строгий контроль доступа на основе ролей (RBAC) и регулярно проверяйте политики безопасности.
-
Масштабирование: Для обработки растущей нагрузки масштабируйте экземпляры Azure App Service. Учитывайте лимиты скорости (rate limits) Azure OpenAI и реализуйте механизмы повторных попыток (retry logic) с экспоненциальной задержкой. При необходимости рассмотрите распределение нагрузки между несколькими развернутыми моделями или регионами.
Заключение
В этом полном руководстве мы прошли путь от базовой настройки ресурсов Azure OpenAI и подготовки Python-среды до создания интерактивного веб-приложения на Flask и его развертывания в Azure App Service. Мы освоили ключевые методы аутентификации, включая безопасное использование управляемых удостоверений, и научились выполнять запросы к моделям завершения чата.
Вы получили практические навыки по интеграции мощных языковых моделей OpenAI в свои Python-проекты, а также глубокое понимание лучших практик по мониторингу, обеспечению безопасности и масштабированию таких решений. Теперь вы готовы создавать интеллектуальные приложения, используя всю мощь облачной платформы Azure и передовых возможностей искусственного интеллекта.
Продолжайте экспериментировать с различными моделями, параметрами и сценариями использования, чтобы раскрыть полный потенциал Azure OpenAI в ваших разработках и создавать инновационные решения, отвечающие современным требованиям.