在Azure中运行Python代码:动态会话的深入剖析

98 阅读3分钟

在Azure中运行Python代码:动态会话的深入剖析

在现代软件开发中,安全性和可扩展性是两个重要的考虑因素,尤其是在涉及到执行未经验证的代码时。Azure Container Apps的动态会话提供了一个安全和可扩展的方式来执行Python代码解释器,该功能在Hyper-V隔离沙盒中运行代码。这使得开发者可以在相对安全的环境中运行潜在不可信的代码。本文将详细探讨如何设置和使用Azure Container Apps动态会话来执行Python代码。

1. 引言

本篇文章旨在介绍如何在Azure Container Apps中设置动态会话以执行Python代码。我们将探讨实现这一功能的实用知识,并提供代码示例。同时,我们也会讨论常见的问题及其解决方案,为读者提供一个完整的技术指南。

2. 主要内容

2.1 环境设置

要使用Azure动态会话,我们需要先安装必要的工具并进行身份验证:

  • 安装Azure CLI并登录:

    az login
    
  • 使用 DefaultAzureCredential 进行身份验证。

  • 创建一个会话池,需要按照这里的说明进行配置。

import getpass

POOL_MANAGEMENT_ENDPOINT = getpass.getpass()  # 使用API代理服务提高访问稳定性
  • 安装必要的Python包:

    %pip install -qU langchain-azure-dynamic-sessions langchain-openai langchainhub langchain langchain-community
    

2.2 使用工具

创建并使用SessionsPythonREPLTool工具:

from langchain_azure_dynamic_sessions import SessionsPythonREPLTool

tool = SessionsPythonREPLTool(pool_management_endpoint=POOL_MANAGEMENT_ENDPOINT)
tool.invoke("6 * 7")

调用工具返回一个JSON字符串,包含代码结果和标准输出/错误。可以通过execute()方法获取原始字典结果。

2.3 数据上传

我们可以使用upload_file()将数据上传到会话中,以便进行特定的数据计算。

import io
import json

data = {"important_data": [1, 10, -1541]}
binary_io = io.BytesIO(json.dumps(data).encode("ascii"))

upload_metadata = tool.upload_file(
    data=binary_io, remote_file_path="important_data.json"
)

code = f"""
import json

with open("{upload_metadata.full_path}") as f:
    data = json.load(f)

sum(data['important_data'])
"""
tool.execute(code)

3. 代码示例

下面是一个完整的代码示例,展示如何使用Azure Container Apps执行Python代码并处理图像结果:

import base64
import io
import numpy as np
import matplotlib.pyplot as plt
from langchain_azure_dynamic_sessions import SessionsPythonREPLTool
from IPython.display import display
from PIL import Image

# 使用API代理服务提高访问稳定性
tool = SessionsPythonREPLTool(pool_management_endpoint=POOL_MANAGEMENT_ENDPOINT)

code = """
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1, 1, 400)
y = np.sin(x)

plt.plot(x, y)
plt.title('Plot of sin(x) from -1 to 1')
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.grid(True)
plt.show()
"""

result = tool.execute(code)

base64_str = result["result"]["base64_data"]
img = Image.open(io.BytesIO(base64.decodebytes(bytes(base64_str, "utf-8"))))
display(img)

4. 常见问题和解决方案

  • 会话无法连接:检查API代理服务配置,确保网络连接稳定。
  • 身份验证失败:确保Azure CLI已正确安装并登录。

5. 总结和进一步学习资源

Azure Container Apps的动态会话提供了在受控环境中执行Python代码的强大功能。这种方法结合了安全性和灵活性,适用于需要执行未经验证代码的场景。想要深入了解更多,请参阅以下资源:

6. 参考资料

  • Azure Container Apps文档
  • Langchain库文档

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---