ChatPilot代码解释器深度解析:AI如何运行Python代码并生成图表(E2B沙箱原理)
【免费下载链接】ChatPilotChatPilot: Chat Agent Web UI,实现Chat对话前端,支持Google搜索、文件网址对话(RAG)、代码解释器功能,复现了Kimi Chat(文件,拖进来;网址,发出来)。项目地址: https://gitcode.com/gh_mirrors/ch/ChatPilot
ChatPilot 是一个开源的 Chat Agent Web UI,其代码解释器是核心亮点之一:AI 能够自动编写 Python 代码,将其发送到E2B 云沙箱中安全执行,并把计算结果、折线图、饼图等图表直接渲染回对话窗口——完整复现了 Kimi Chat 中"文件拖进来、网址发出去"的交互体验。本文面向新手,用最通俗的方式拆解这套 AI 代码解释器背后的运行机制。
代码解释器:让 AI 从"会说"变成"会算"
普通大语言模型只能"说"代码,却无法真正运行代码。而 ChatPilot 的代码解释器打通了这条链路:
- 理解意图:你问"帮我算 38023×40334,并画个销售趋势图"
- 生成代码:AI 自动写出一段完整的 Python 脚本
- 沙箱执行:脚本被发送到隔离环境中运行,不触碰你的本机
- 结果回传:数字结果、
matplotlib生成的图表图片直接显示在对话中
项目 README 中对其能力的一句话概括是:Python 代码解释器,支持 E2B 虚拟环境和本地 Python 编译器环境运行代码(见 README.md)。
AI 何时决定"运行代码":ReAct 智能体机制
ChatPilot 的智能体核心封装在 chatpilot/agentica_agent.py 中。它的思路来自ReAct(Reasoning + Acting)框架:AI 不是一口气回答,而是循环执行"思考 → 选择工具 → 观察结果 → 再思考",直到得出最终答案。
关键一步是工具注册。ChatPilot 把"运行 Python 代码"注册为一个可调用的工具:
# 当开关打开时,把代码执行工具加入智能体工具列表 if enable_run_python_code_tool: self.tools.append(RunPythonCodeTool())相关实现在 chatpilot/agentica_agent.py,工具本体由依赖库agentica提供(声明于 requirements.txt)。AI 每次"思考"时看到的是一份工具清单,只有当判断"这个问题需要精确计算或画图"时,才会调用RunPythonCodeTool。
工具的行为规范写在 chatpilot/config.py 的RUN_PYTHON_CODE_TOOL_DESC中,里面有几条对新手很有启发的"提示词工程"细节:
- 环境是长驻的:沙箱跨多次执行持续存在,变量可以保留
- 必须完整重发脚本:每次都要发送整个脚本并主动打印输出
- 代码必须是纯 Python:不能用 Markdown 代码块包裹
- 预装科学计算全家桶:
numpy、pandas、matplotlib、scipy、requests均可用,并用plt.show()生成图表
E2B 沙箱原理:代码为什么敢直接跑
把 AI 生成的代码丢到服务器上直接执行是非常危险的(可能读走文件、拖垮服务)。ChatPilot 的解决方案是E2B 云沙箱:
🔒沙箱(Sandbox)= 一次性、隔离的微型云端运行环境。代码在其中执行,与宿主系统完全隔离,用完即销毁,AI 的任何"越界行为"都被关在笼子里。
其工作原理可以拆成四步:
| 步骤 | 发生了什么 |
|---|---|
| ① 启动沙箱 | 服务端拿着 API Key 向 E2B 平台请求一个全新的云沙箱实例 |
| ② 注入代码 | AI 生成的 Python 脚本通过 API 送入沙箱 |
| ③ 隔离执行 | 代码在沙箱内运行,可访问预装的 matplotlib 等库,但无法触达你的服务器文件 |
| ④ 回收结果 | stdout 文本和plt.show()生成的图片被捕获并回传,沙箱销毁或保留供下一轮使用 |
在 ChatPilot 中,只需一个环境变量即可接入 E2B:
# 在 .env 文件中配置 E2B_API_KEY=你的E2B密钥对应读取逻辑位于 chatpilot/config.py。配置了 Key 就走 E2B 云沙箱;如果没有配置,项目也允许回退到本地 Python 环境执行,方便离线体验——这也解释了为什么 README 强调"支持 E2B 虚拟环境和本地 Python 编译器环境"。
图表是如何"画"出来又"回"到对话框的
很多新手疑惑:沙箱里的图片,为什么能出现在网页聊天框里?答案是一条清晰的"图片回流"链路:
- AI 在脚本末尾调用
plt.show()让 matplotlib 渲染图表 - 沙箱执行器捕获生成的 PNG 图片(而非丢弃到显示器)
- 图片作为工具执行结果(Observation)被打包,连同标准输出一起回传给 AI
- 前端 web/src/lib/components/chat/Messages/ResponseMessage.svelte 在渲染消息时识别图片内容并展示
也就是说,图片是作为"数据"在 AI 与沙箱之间流动的,最终才落到你的浏览器里。
三步开启:最快配置代码解释器
✅第 1 步:准备 E2B 密钥在项目的.env文件中加入E2B_API_KEY(参考 chatpilot/config.py 的读取逻辑),不配置则使用本地执行模式。
✅第 2 步:确认工具开关环境变量ENABLE_RUN_PYTHON_CODE_TOOL默认为True,无需额外设置;如需关闭可显式设为False(见 chatpilot/config.py)。
✅第 3 步:发起对话在 ChatPilot 界面直接提问,例如"计算 38023×40334"或"用 Python 画一张 2024 年各季度销售柱状图"——系统自带的提示建议里就内置了"执行代码解释器"的示例入口(见 chatpilot/config.py)。
常见问题 FAQ
Q1:没有 E2B 密钥能用吗?可以。不配置E2B_API_KEY时会回退到本地 Python 环境执行,适合尝鲜,但不建议在生产环境使用。
Q2:沙箱里能用哪些第三方库?预装了requests、matplotlib、scipy、numpy、pandas等常用科学计算与网络库(工具描述见 chatpilot/config.py)。
Q3:连续提问,上一轮定义的变量还在吗?在。工具描述中明确说明"环境是长驻的,跨多次执行存在",因此你可以分多轮逐步搭建一个数据分析流程。
Q4:AI 什么时候不会调用代码解释器?常识问答、写代码讲解类问题,AI 会直接用内置知识回答;只有涉及精确计算、数据处理、可视化时才会触发该工具。
写在最后
ChatPilot 的代码解释器用"ReAct 智能体 + 工具注册 + E2B 云沙箱 + 图片回流"四块拼图,实现了 Kimi Chat 同款体验:你只需用自然语言提需求,AI 就会写代码、跑代码、出图表。如果你想亲手体验,配置好E2B_API_KEY后向它要一张图表,是了解 AI Agent 工作机制最快的一条路径 📊。
【免费下载链接】ChatPilotChatPilot: Chat Agent Web UI,实现Chat对话前端,支持Google搜索、文件网址对话(RAG)、代码解释器功能,复现了Kimi Chat(文件,拖进来;网址,发出来)。项目地址: https://gitcode.com/gh_mirrors/ch/ChatPilot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考