使用E2B数据分析沙盒进行文件分析
在现代数据分析中,运行环境的安全性与灵活性是确保数据处理高效可靠的关键因素。E2B提供了一个数据分析沙盒,能够在隔离的环境中安全地执行代码,非常适合构建诸如代码解释器或类似于ChatGPT的高级数据分析工具。在这篇文章中,我将演示如何使用E2B的数据分析沙盒来对上传的文件进行分析,为您提供一个强大的Python代码示例。
核心原理解析
E2B的数据分析沙盒为开发者提供了以下功能:
- 运行Python代码
- 使用matplotlib生成图表
- 动态安装Python和系统软件包
- 运行Shell命令
- 上传和下载文件
这些功能使得开发者可以在安全的沙盒环境中进行复杂的分析操作。
代码实现演示
接下来,我们将创建一个简单的OpenAI代理,它将使用E2B数据分析沙盒来分析上传的文件。首先,请确保安装了所需的库,并设置了环境变量。
%pip install --upgrade --quiet langchain e2b langchain-community
配置API密钥
确保将OpenAI和E2B API密钥设置为环境变量。
import os
os.environ["E2B_API_KEY"] = "<E2B_API_KEY>"
os.environ["OPENAI_API_KEY"] = "<OPENAI_API_KEY>"
创建数据分析工具实例
我们将实例化E2BDataAnalysisTool
,并附加回调以监听沙盒的输出。
from langchain_community.tools import E2BDataAnalysisTool
def save_artifact(artifact):
print("New matplotlib chart generated:", artifact.name)
file = artifact.download()
basename = os.path.basename(artifact.name)
with open(f"./charts/{basename}", "wb") as f:
f.write(file)
e2b_data_analysis_tool = E2BDataAnalysisTool(
env_vars={"MY_SECRET": "secret_value"},
on_stdout=lambda stdout: print("stdout:", stdout),
on_stderr=lambda stderr: print("stderr:", stderr),
on_artifact=save_artifact,
)
上传CSV文件
在沙盒中上传一个示例CSV文件以进行分析。在这里,我们使用关于Netflix电视节目的数据。
with open("./netflix.csv") as f:
remote_path = e2b_data_analysis_tool.upload_file(
file=f,
description="Data about Netflix tv shows including their title, category, director, release date, casting, age rating, etc.",
)
print(remote_path)
初始化Langchain代理
创建一个工具对象并初始化Langchain代理,准备处理分析请求。
from langchain.agents import AgentType, initialize_agent
from langchain_openai import ChatOpenAI
tools = [e2b_data_analysis_tool.as_tool()]
llm = ChatOpenAI(model="gpt-4", temperature=0)
agent = initialize_agent(
tools,
llm,
agent=AgentType.OPENAI_FUNCTIONS,
verbose=True,
handle_parsing_errors=True,
)
查询数据
现在,我们可以询问代理关于上传的CSV文件的数据问题。
agent.run(
"What are the 5 longest movies on netflix released between 2000 and 2010? Create a chart with their lengths."
)
安装软件包和运行Shell命令
E2B还允许在运行时动态安装Python和系统软件包,执行Shell命令。以下是安装pandas
和sqlite3
的示例:
# 安装Python包
e2b_data_analysis_tool.install_python_packages("pandas")
# 运行Shell命令以安装系统包
e2b_data_analysis_tool.run_command("sudo apt update")
e2b_data_analysis_tool.install_system_packages("sqlite3")
# 检查SQLite版本
output = e2b_data_analysis_tool.run_command("sqlite3 --version")
print("version: ", output["stdout"])
关闭沙盒
完成操作后,不要忘记关闭沙盒。
e2b_data_analysis_tool.close()
应用场景分析
E2B的数据分析沙盒非常适合在需要高安全性和动态资源管理的环境中进行数据处理。它能够通过动态安装包和安全执行代码,为各种数据科学应用提供支持。
实践建议
- 在使用E2B沙盒上传敏感数据时,务必确保数据在沙盒中处理的安全性。
- 动态安装包功能可以帮助快速适应依赖变化,但也应该小心管理包的版本以避免依赖冲突。
如果遇到问题欢迎在评论区交流。
—END—