本项目是一个基于 Flask 的 Web 应用,它利用大型语言模型(LLM)根据用户提出的问题,动态生成并执行 Python 脚本,最终以友好的方式展示数据分析结果。
- 动态脚本生成: 根据用户输入的问题,通过 LLM(默认为 DeepSeek)生成用于数据分析的 Python 脚本。
- 安全执行: 在隔离环境中执行生成的脚本,并对执行时间、输出大小进行限制。
- 三阶段处理流程:
- 代码生成: 根据用户问题和预设的
schema.json生成 Python 脚本。 - 结果分析: 执行脚本后,由 LLM 分析输出结果,判断是否能回答用户问题。
- 智能回答/重试: 如果结果有效,LLM 会整理成 Markdown 格式的报告;否则,将尝试重新生成脚本(最多三次)。
- 兜底回答: 若多次尝试失败,LLM 将直接基于问题进行文本回答。
- 代码生成: 根据用户问题和预设的
- 流式响应 (SSE): 前端通过 Server-Sent Events (SSE) 实时接收后端的处理日志和最终结果,提升用户体验。
- 数据驱动: 脚本主要针对项目根目录下的数据文件进行处理,其数据结构由
schema.json定义。
.
├── app.py # Flask 应用主文件
├── requirements.txt # Python 依赖
├── templates/
│ └── index.html # 前端页面
├── generated_scripts/ # 存放动态生成的 Python 脚本
├── schema.json # 数据文件的结构定义
├── your_data_file.ndjson # 【需用户提供】示例数据文件
├── .env.example # 环境变量示例
└── README.md # 本文档
- 安装 Python 3.x
- 克隆本项目
在项目根目录下执行以下命令:
pip install -r requirements.txt将 .env.example 文件复制为 .env,并填入你的 API 密钥:
DEEPSEEK_API_KEY="sk-xxxxxxxxxxxxxxxx"
确保项目根目录下存在一个数据文件(例如 your_data_file.ndjson),其格式应符合 schema.json 的描述。
python app.py应用将在 http://127.0.0.1:5000 启动。
- 打开浏览器并访问
http://127.0.0.1:5000。 - 在输入框中输入你想要查询的问题(例如:“统计一下昨天谁最活跃”)。
- 点击“提交”按钮。
- 页面将实时显示后端处理日志,并在完成后展示最终的分析报告。
默认情况下,生成的 Python 脚本会尝试读取名为 your_data_file.ndjson 的文件。这个文件名硬编码在 app.py 的 PROMPT1_TEMPLATE 变量中。
要适配您自己的数据文件(例如 my_chat_logs.ndjson),请执行以下操作:
- 修改
app.py: 打开app.py文件。 - 定位
PROMPT1_TEMPLATE: 找到名为PROMPT1_TEMPLATE的多行字符串变量。 - 更改文件名: 在该字符串中,将所有
your_data_file.ndjson的实例替换为您自己的文件名。
示例:
# app.py
# ...
PROMPT1_TEMPLATE = """你是一个群聊Bot的Python脚本生成器。
...
说明:
- 项目根目录下存在一个名为 `my_chat_logs.ndjson` 的数据文件...
...
3) 读取 `my_chat_logs.ndjson` 时必须指定 encoding="utf-8", errors="ignore"。
...
数据处理与留痕:
- 对于统计、筛选、匹配类问题,应遍历 `my_chat_logs.ndjson`,优先用正则。
...
"""通过修改这个 Prompt 模板,您可以完全控制生成脚本的行为,包括但不限于:
- 指定不同的数据源文件。
- 调整脚本的数据处理逻辑。
- 修改对生成脚本的格式或输出要求。
- 安全性: 动态执行代码具有一定风险。本项目通过限制执行权限、超时和输出来降低风险,但仍建议在受控环境中使用。
- API 密钥: 请妥善保管你的 API 密钥,不要泄露到公共代码库中。
- 数据文件: 数据文件是本项目的核心数据源,其内容和格式直接影响脚本的执行结果。