PaperAnvil 是一个基于多智能体(Multi-Agent)架构的自动化市场调研与学术分析系统。通过 LangGraph 工作流编排多个专精 AI 智能体,实现从调研主题到学术论文的端到端全自动生成。
- 🎯 一键生成 - 输入主题,自动完成问卷设计、数据模拟、分析可视化、报告撰写
- 🤖 多智能体协作 - 8 个专业 Agent 分工明确,通过状态机精准调度
- 📊 高级数据分析 - 集成 K-Means 聚类、异常检测、LDA 主题建模、语义分析等
- 🖥️ 现代化 GUI - PySide6 深色主题界面,支持实时日志追踪
- 🔄 断点续传 - 支持从断点恢复,避免重复计算
- 📁 外部数据支持 - 可导入已有 CSV 数据进行分析
- Python >= 3.8
- 推荐使用 Anaconda 环境
git clone https://github.com/hetaodw/PaperAnvil.git
cd PaperAnvil
pip install -r requirements.txt# 复制环境变量模板
cp .env.example .env
# 编辑 .env 文件,填入您的 DashScope API Key
# 获取地址: https://dashscope.console.aliyun.com/GUI 模式(推荐):
python gui_main.py命令行模式:
python app.py- 自动生成人口统计学问题、李克特量表、开放性问题
- 支持导入已有问卷文本
- 生成现代化 HTML 问卷页面
- 基于人口统计学特征构建高保真画像
- 支持年龄、学历等分布比例自定义
- 自动生成画像比例权重
- 基于画像分布生成 2000+ 条模拟数据
- 李克特量表正态分布采样
- 自动处理缺失值和异常值
- 描述性统计 - 频率分布、均值、标准差
- 机器学习 - K-Means 聚类、DBSCAN、孤立森林异常检测
- 相关性分析 - 特征相关系数矩阵
- 语义分析 - LDA 主题建模、情感分析
- 自动生成统计图表
- 支持多图表组合
- 高清 PNG 输出
- 自动生成 Markdown 格式学术论文
- 包含研究背景、方法、结果、讨论、结论
- 自动插入图表引用
┌─────────────────────────────────────────────────────────────┐
│ PaperAnvil Workflow │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Survey Agent │ -> │ Survey UI │ -> │ Persona │ │
│ │ 问卷设计 │ │ Agent 界面 │ │ Agent 画像 │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │ │
│ ┌───────────────────────────┼──────────┐│
│ ▼ ▼ ││
│ ┌──────────────────────┐ ┌──────────────────────────┐ ││
│ │ Data Expansion Agent │ │ Open-Ended Agent │ ││
│ │ 数据扩增 (2000条) │ │ 开放题深度回答 │ ││
│ └──────────────────────┘ └──────────────────────────┘ ││
│ │ │ ││
│ └───────────┬───────────────┘ ││
│ ▼ ││
│ ┌──────────────────────┐ ││
│ │ Analysis Agent │ ││
│ │ 数据分析 & 洞察 │ ││
│ └──────────────────────┘ ││
│ │ ││
│ ┌───────────┴───────────┐ ││
│ ▼ ▼ ││
│ ┌──────────────────────┐ ┌──────────────────────┐ ││
│ │ Plotting Agent │ │ Writer Agent │ ││
│ │ 可视化图表生成 │ -> │ 学术报告撰写 │ ││
│ └──────────────────────┘ └──────────────────────┘ ││
│ │ ││
│ ▼ ││
│ ┌──────────────────────┐ ││
│ │ Markdown 报告 │ ││
│ │ Excel 数据表 │ ││
│ └──────────────────────┘ ││
└─────────────────────────────────────────────────────────────┘
| 组件 | 技术 |
|---|---|
| 工作流编排 | LangGraph |
| LLM 接口 | OpenAI API (兼容 DashScope) |
| GUI 框架 | PySide6 |
| 数据处理 | Pandas, NumPy |
| 机器学习 | scikit-learn |
| 可视化 | Matplotlib |
PaperAnvil/
├── app.py # 核心工作流入口 & 提示词配置
├── gui_main.py # GUI 主程序
├── package.py # PyInstaller 打包脚本
├── requirements.txt # 依赖列表
├── .env.example # 环境变量模板
├── logo.png / logo.ico # 项目图标
│
├── src/
│ ├── agents/ # 🤖 智能体模块
│ │ ├── survey_agent.py # 问卷设计
│ │ ├── survey_ui_agent.py # 问卷界面生成
│ │ ├── persona_agent.py # 用户画像
│ │ ├── data_expansion_agent.py # 数据扩增
│ │ ├── open_ended_agent.py # 开放题回答
│ │ ├── analysis_agent.py # 数据分析
│ │ ├── plotting_agent.py # 可视化
│ │ └── writer_agent.py # 报告撰写
│ │
│ ├── tools/ # 🔧 工具模块
│ │ ├── basic_stats_tool.py # 基础统计
│ │ ├── state_tool.py # ML 分析
│ │ ├── semantic_tool.py # 语义分析
│ │ ├── data_expansion.py # 数据生成
│ │ ├── csv_validator.py # CSV 验证
│ │ └── csv_to_xlsx.py # 格式转换
│ │
│ └── workflow/ # 🧠 工作流模块
│ ├── state.py # 状态定义
│ └── graph.py # 图结构
│
├── data/
│ ├── assets/ # 静态资源
│ ├── intermediate/ # 中间文件 (git ignored)
│ ├── output/ # 输出文件 (git ignored)
│ └── raw_data/ # 原始数据 (git ignored)
│
├── tests/ # 🧪 测试用例
└── docs/ # 📚 文档
所有 Agent 的提示词模板都在 app.py 的 DEFAULT_PROMPTS 字典中,可直接修改:
DEFAULT_PROMPTS = {
"persona_system_prompt": "你的自定义提示词...",
"analysis_filter_prompt": "...",
# ...
}在 persona_system_prompt 中可调整:
- 年龄分布(青年/中年/老年比例)
- 学历分布(高中/专科/本科/硕士比例)
- 画像生成支持断点保存,失败后可从断点恢复
- 勾选 GUI 中的"从断点恢复"选项即可
- 勾选"使用已有数据文件"
- 选择 CSV 文件
- 系统会自动验证并处理数据
运行完成后,在 data/output/ 目录下生成:
| 文件 | 说明 |
|---|---|
thesis_draft.md |
学术报告 (Markdown) |
final_survey_results.xlsx |
调研数据 (Excel) |
plot_*.png |
可视化图表 |
run.log |
运行日志 |
欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
本项目基于 MIT License 开源。
Building automated insights from noise, forging papers on the anvil of Multi-Agent AI.
Made with ❤️ by hetaodw
