2026-03-09 10:37:35 +08:00
2026-03-09 10:26:03 +08:00
2026-03-09 10:37:35 +08:00
2026-03-09 10:26:03 +08:00
2026-03-09 10:37:35 +08:00

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. 安装依赖

pip install -r requirements.txt

2. 配置环境变量

创建 .env 文件:

OPENAI_API_KEY=your-api-key
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-4

支持任何 OpenAI 兼容 API如自定义 base_url

3. 运行分析

# 最简用法 — 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 文件或系统环境变量配置:

# 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 抽象类并注册即可:

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
Description
No description provided
Readme 1.8 MiB
Languages
Python 100%