Files
vibe_data_ana/README.md
2026-03-09 10:26:03 +08:00

214 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AI-Driven Data Analysis Framework
全自动 AI 数据分析框架。给一个 CSV 文件AI 自主完成从数据理解到报告生成的全流程。
## 核心理念
**框架只提供引擎和工具AI 在运行时做所有决策。**
- 没有硬编码的列名规则、数据类型判断或分析策略
- AI 只能看到元数据(表头、统计摘要、样本值),永远不接触原始数据行
- 对任意 CSV 文件自动适配,无需修改代码
## 工作流程
```
CSV 文件
[1] AI 数据理解 ─── AI 看元数据,推断数据类型、关键字段、质量评分
[2] 需求理解 ─────── 解析自然语言需求 + 可选模板,生成分析目标
[3] AI 分析规划 ──── AI 根据数据特征和工具库,生成具体任务列表
[4] AI 任务执行 ──── ReAct 模式AI 选工具 → 调用 → 观察结果 → 决定下一步
[5] 报告生成 ─────── AI 生成图文结合的 Markdown 报告
```
## 快速开始
### 1. 安装依赖
```bash
pip install -r requirements.txt
```
### 2. 配置环境变量
创建 `.env` 文件:
```env
OPENAI_API_KEY=your-api-key
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-4
```
支持任何 OpenAI 兼容 API如自定义 base_url
### 3. 运行分析
```bash
# 最简用法 — AI 自动决定分析什么、怎么分析
python run_analysis_en.py --data your_data.csv
# 指定分析需求
python run_analysis_en.py --data sales.csv --requirement "分析各产品线的销售趋势和异常"
# 使用报告模板
python run_analysis_en.py --data tickets.csv --template templates/ticket_analysis.md
# 指定输出目录
python run_analysis_en.py --data data.csv --output my_output
```
### 4. 查看结果
每次运行会在输出目录下创建带时间戳的子目录:
```
analysis_output/
└── run_20260309_143025/
├── analysis_report.md ← 图文结合的分析报告
└── charts/
├── bar_chart.png
├── pie_chart.png
└── ...
```
## 项目结构
```
├── run_analysis_en.py # 主入口5 阶段 pipeline
├── src/
│ ├── config.py # 配置管理(环境变量 / JSON / .env
│ ├── data_access.py # 数据访问层隐私保护AI 不可见原始数据)
│ ├── engines/
│ │ ├── ai_data_understanding.py # [阶段1] AI 数据理解
│ │ ├── requirement_understanding.py # [阶段2] 需求解析
│ │ ├── analysis_planning.py # [阶段3] AI 分析规划
│ │ ├── task_execution.py # [阶段4] ReAct 任务执行
│ │ └── report_generation.py # [阶段5] 报告生成
│ ├── tools/
│ │ ├── base.py # 工具抽象基类 + 注册表
│ │ ├── tool_manager.py # 工具筛选(按数据特征过滤)
│ │ ├── query_tools.py # 查询工具(分布、计数、时间序列、相关性)
│ │ ├── stats_tools.py # 统计工具(描述统计、分组聚合、异常检测、趋势)
│ │ └── viz_tools.py # 可视化工具(柱状图、折线图、饼图、热力图)
│ └── models/ # 数据模型
│ ├── data_profile.py # DataProfile, ColumnInfo
│ ├── requirement_spec.py # RequirementSpec, AnalysisObjective
│ ├── analysis_plan.py # AnalysisPlan, AnalysisTask
│ └── analysis_result.py # AnalysisResult
├── templates/ # 报告模板(可选)
├── test_data/ # 示例数据
└── examples/ # 使用示例
```
## 内置工具
框架提供 12 个分析工具AI 在运行时自主选择和组合:
| 类别 | 工具 | 说明 |
|------|------|------|
| 查询 | `get_column_distribution` | 列分布统计(值计数、百分比) |
| 查询 | `get_value_counts` | 唯一值计数 |
| 查询 | `get_time_series` | 时间序列聚合 |
| 查询 | `get_correlation` | 相关性矩阵 |
| 统计 | `calculate_statistics` | 描述性统计(均值、中位数、偏度等) |
| 统计 | `perform_groupby` | 分组聚合 |
| 统计 | `detect_outliers` | 异常值检测IQR / Z-score |
| 统计 | `calculate_trend` | 趋势分析(线性回归) |
| 可视化 | `create_bar_chart` | 柱状图 |
| 可视化 | `create_line_chart` | 折线图 |
| 可视化 | `create_pie_chart` | 饼图 |
| 可视化 | `create_heatmap` | 热力图 |
## 隐私保护
数据访问层(`DataAccessLayer`)是核心安全边界:
- AI **永远看不到**原始数据行
- AI 只能通过工具获取**聚合结果**(统计值、分布、图表)
- 数据画像只包含元数据:列名、数据类型、缺失率、唯一值数、样本值(最多 5 个)
- 工具返回结果自动截断(最多 100 行),防止数据泄露
## 配置
### 环境变量(推荐)
通过 `.env` 文件或系统环境变量配置:
```env
# LLM 配置(必填)
OPENAI_API_KEY=sk-xxx
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-4
# 可选配置
LLM_TEMPERATURE=0.7
LLM_TIMEOUT=120
AGENT_MAX_ROUNDS=20
LOG_LEVEL=INFO
```
### JSON 配置文件
也可以使用 `config.example.json` 作为模板创建配置文件。
## 报告模板
可以提供 Markdown 模板来控制报告结构。模板中的占位符会被 AI 用实际分析数据填充。
参考 `templates/` 目录下的示例模板。
## 扩展工具
实现 `AnalysisTool` 抽象类并注册即可:
```python
from src.tools.base import AnalysisTool, register_tool
class MyCustomTool(AnalysisTool):
@property
def name(self) -> str:
return "my_custom_tool"
@property
def description(self) -> str:
return "工具描述AI 会看到这段文字来决定是否使用)"
@property
def parameters(self) -> dict:
return {
"type": "object",
"properties": {
"column": {"type": "string", "description": "列名"}
},
"required": ["column"]
}
def execute(self, data, **kwargs) -> dict:
# 实现分析逻辑,返回聚合结果
return {"result": "..."}
def is_applicable(self, data_profile) -> bool:
return True
register_tool(MyCustomTool())
```
注册后AI 会自动在规划和执行阶段发现并使用新工具。
## 依赖
- Python 3.10+
- pandas, numpy, matplotlib, scipy, scikit-learn
- openai兼容任何 OpenAI API 格式的 LLM 服务)
- python-dotenv