feat: update data analysis agent logic and prompts
This commit is contained in:
@@ -132,13 +132,9 @@ class DataAnalysisAgent:
|
|||||||
print(f" 🔍 分析: {analysis}")
|
print(f" 🔍 分析: {analysis}")
|
||||||
|
|
||||||
# 验证文件是否存在
|
# 验证文件是否存在
|
||||||
|
# 只有文件真正存在时才加入列表,防止报告出现裂图
|
||||||
if file_path and os.path.exists(file_path):
|
if file_path and os.path.exists(file_path):
|
||||||
print(f" ✅ 文件存在: {file_path}")
|
print(f" ✅ 文件存在: {file_path}")
|
||||||
elif file_path:
|
|
||||||
print(f" ⚠️ 文件不存在: {file_path}")
|
|
||||||
else:
|
|
||||||
print(f" ⚠️ 未提供文件路径")
|
|
||||||
|
|
||||||
# 记录图片信息
|
# 记录图片信息
|
||||||
collected_figures.append(
|
collected_figures.append(
|
||||||
{
|
{
|
||||||
@@ -149,6 +145,11 @@ class DataAnalysisAgent:
|
|||||||
"analysis": analysis,
|
"analysis": analysis,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
if file_path:
|
||||||
|
print(f" ⚠️ 文件不存在: {file_path}")
|
||||||
|
else:
|
||||||
|
print(f" ⚠️ 未提供文件路径")
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"action": "collect_figures",
|
"action": "collect_figures",
|
||||||
@@ -325,7 +326,12 @@ class DataAnalysisAgent:
|
|||||||
elif process_result["action"] == "collect_figures":
|
elif process_result["action"] == "collect_figures":
|
||||||
# 记录图片收集结果
|
# 记录图片收集结果
|
||||||
collected_figures = process_result.get("collected_figures", [])
|
collected_figures = process_result.get("collected_figures", [])
|
||||||
feedback = f"已收集 {len(collected_figures)} 个图片及其分析"
|
missing_figures = process_result.get("missing_figures", [])
|
||||||
|
|
||||||
|
feedback = f"已收集 {len(collected_figures)} 个有效图片及其分析。"
|
||||||
|
if missing_figures:
|
||||||
|
feedback += f"\n⚠️ 以下图片未找到,请检查代码是否成功保存了这些图片: {missing_figures}"
|
||||||
|
|
||||||
self.conversation_history.append(
|
self.conversation_history.append(
|
||||||
{
|
{
|
||||||
"role": "user",
|
"role": "user",
|
||||||
@@ -339,6 +345,7 @@ class DataAnalysisAgent:
|
|||||||
"round": self.current_round,
|
"round": self.current_round,
|
||||||
"action": "collect_figures",
|
"action": "collect_figures",
|
||||||
"collected_figures": collected_figures,
|
"collected_figures": collected_figures,
|
||||||
|
"missing_figures": missing_figures,
|
||||||
"response": response,
|
"response": response,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
54
prompts.py
54
prompts.py
@@ -60,12 +60,34 @@ Notebook环境特性:
|
|||||||
- 数据质量检查:确认数值列是否正确,字符串列是否被错误识别
|
- 数据质量检查:确认数值列是否正确,字符串列是否被错误识别
|
||||||
|
|
||||||
|
|
||||||
**阶段3:数据分析和可视化(使用 generate_code 动作)**
|
**阶段3:数据分析和可视化(核心阶段,使用 generate_code 动作)**
|
||||||
- 基于实际的列名进行计算
|
- **多轮执行策略(重要)**:
|
||||||
- 生成有意义的图表(至少要有超长工单问题类型分布 车型-问题热力图 车型分布 处理时长分布 处理时长箱线图 高频关键词 工单来源分布.图 工单状态分布模块分布
|
- **不要试图一次性生成所有图表**。你应该将任务拆分为多个小的代码块,分批次执行。
|
||||||
未关闭工单状态分布 问题类型分布 严重程度分布远程控制问题模块分布月度工单趋势月度关闭率趋势 责任人分布 责任人工作量与效率对比)可以多轮执行,不要一个代码执行
|
- 每一轮只专注于生成 1-2 个复杂的图表或 2-3 个简单的图表,确保代码正确且图片保存成功。
|
||||||
- 图片保存到会话专用目录中
|
- 只有在前一轮代码成功执行并保存图片后,再进行下一轮。
|
||||||
- 每生成一个图表后,必须打印绝对路径
|
- **必做图表清单(Mandatory Charts)**:
|
||||||
|
1. **超长工单问题类型分布**(从处理时长分布中筛选)
|
||||||
|
2. **车型-问题热力图**(发现特定车型的高频故障)
|
||||||
|
3. **车型分布**(整体工单在不同车型的占比)
|
||||||
|
4. **处理时长分布**(直方图/KDE)
|
||||||
|
5. **处理时长箱线图**(按问题类型或责任人分组,识别异常点)
|
||||||
|
6. **高频关键词词云**(基于Text Cleaning和N-gram结果)
|
||||||
|
7. **工单来源分布**
|
||||||
|
8. **工单状态分布**
|
||||||
|
9. **模块分布**
|
||||||
|
10. **未关闭工单状态分布**
|
||||||
|
11. **问题类型分布**
|
||||||
|
12. **严重程度分布**
|
||||||
|
13. **远程控制(Remote Control)问题模块分布**(专项分析)
|
||||||
|
14. **月度工单趋势**
|
||||||
|
15. **月度关闭率趋势**
|
||||||
|
16. **责任人分布**
|
||||||
|
17. **责任人工作量与效率对比**(散点图或双轴图)
|
||||||
|
- **图片保存要求**:
|
||||||
|
- 必须使用 `plt.savefig(path, bbox_inches='tight')`。
|
||||||
|
- 保存后**必须**显示打印绝对路径。
|
||||||
|
- **严禁**使用 `plt.show()`。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**阶段4:深度挖掘与高级分析(使用 generate_code 动作)**
|
**阶段4:深度挖掘与高级分析(使用 generate_code 动作)**
|
||||||
@@ -218,7 +240,7 @@ final_report: |
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
# 最终报告生成提示词
|
# 最终报告生成提示词
|
||||||
final_report_system_prompt = """你是一个专业的数据分析师,你的任务是基于详细的数据分析过程,生成一份汇报的分析报告**。
|
final_report_system_prompt = """你是一位**资深数据分析专家 (Senior Data Analyst)**。你的任务是基于详细的数据分析过程,撰写一份**专业级、可落地的业务分析报告**。
|
||||||
|
|
||||||
### 输入上下文
|
### 输入上下文
|
||||||
- **数据全景 (Data Profile)**:
|
- **数据全景 (Data Profile)**:
|
||||||
@@ -229,16 +251,20 @@ final_report_system_prompt = """你是一个专业的数据分析师,你的任
|
|||||||
|
|
||||||
- **可视化证据链 (Visual Evidence)**:
|
- **可视化证据链 (Visual Evidence)**:
|
||||||
{figures_summary}
|
{figures_summary}
|
||||||
> **警告**:你必须仔细检查上述列表。如果在 `figures_summary` 中列出了 10 张图,你的报告中就必须至少引用这 10 张图。**严禁遗漏任何已生成的图表**。引用格式必须为 ``。
|
> **警告**:你必须仔细检查上述列表。如果在 `figures_summary` 中列出了图表,你的报告中就必须引用它。**严禁遗漏任何已生成的图表**。引用格式必须为 ``。
|
||||||
|
|
||||||
### 报告核心要求
|
### 报告核心要求
|
||||||
1. **角色定位**:
|
1. **角色定位**:
|
||||||
- 你不是一个只会“看图说话”的初级分析师。
|
- 你不仅是数据图表的生产者,更是业务问题的诊断者。
|
||||||
- 你是为管理层提供决策支持的顾问。必须跳出图表本身,结合**数据全景**进行宏观归因。
|
- 你的报告需要回答“发生了什么”、“为什么发生”以及“怎么解决”。
|
||||||
2. **文风规范 (Strict Tone of Voice)**:
|
2. **文风规范 (Strict Tone of Voice)**:
|
||||||
- **禁止**:第一人称(我、我们)、模糊词(可能、大概、看起来)、情绪化表达。
|
- **禁止**:使用第一人称(我、我们)、使用模糊推测词(大概、可能)。
|
||||||
- **强制**:客观陈述(“数据显示”、“分析表明”)、专业术语(渗透率、转化率、同比/环比)、确定性结论。
|
- **强制**:客观陈述事实,使用专业术语(同比、环比、占比、TOPN),结论要有数据支撑。
|
||||||
3. **结构化输出**:必须严格遵守下方的 5 章节结构。
|
3. **结构化输出**:必须严格遵守下方的 5 章节结构,确保逻辑严密。
|
||||||
|
|
||||||
|
### 报告结构模板使用说明 (Template Instructions)
|
||||||
|
- **固定格式 (Format)**:所有的 Markdown 标题 (`#`, `##`)、列表项前缀 (`- **...**`)、表格表头是必须保留的**骨架**。
|
||||||
|
- **写作指引 (Prompts)**:方括号 `[...]` 内的文字是给你的**写作提示**,请根据实际分析将其**替换**为具体内容,**不要**在最终报告中保留方括号。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -271,7 +297,7 @@ final_report_system_prompt = """你是一个专业的数据分析师,你的任
|
|||||||
- **切片维度**:按[用户群、时间、功能模块、地理位置、设备类型等]交叉分析
|
- **切片维度**:按[用户群、时间、功能模块、地理位置、设备类型等]交叉分析
|
||||||
- **归因方法**:[如:根本原因分析(RCA)、相关性分析、趋势分解]
|
- **归因方法**:[如:根本原因分析(RCA)、相关性分析、趋势分解]
|
||||||
|
|
||||||
## 3. 核心业务洞察 (Key Business Insights)
|
## 3. 重点问题回顾
|
||||||
> **核心原则**:以故事线组织,将数据转化为叙事。每个主题应包含“现象-证据-归因-影响”完整逻辑链。
|
> **核心原则**:以故事线组织,将数据转化为叙事。每个主题应包含“现象-证据-归因-影响”完整逻辑链。
|
||||||
|
|
||||||
### 3.1 [业务主题一:例如“远程控制稳定性阶段性恶化归因”]
|
### 3.1 [业务主题一:例如“远程控制稳定性阶段性恶化归因”]
|
||||||
|
|||||||
Reference in New Issue
Block a user