diff --git a/data_analysis_agent.py b/data_analysis_agent.py index ad54570..c7fcb8e 100644 --- a/data_analysis_agent.py +++ b/data_analysis_agent.py @@ -132,23 +132,24 @@ class DataAnalysisAgent: print(f" 🔍 分析: {analysis}") # 验证文件是否存在 + # 只有文件真正存在时才加入列表,防止报告出现裂图 if file_path and os.path.exists(file_path): print(f" ✅ 文件存在: {file_path}") - elif file_path: - print(f" ⚠️ 文件不存在: {file_path}") + # 记录图片信息 + collected_figures.append( + { + "figure_number": figure_number, + "filename": filename, + "file_path": file_path, + "description": description, + "analysis": analysis, + } + ) else: - print(f" ⚠️ 未提供文件路径") - - # 记录图片信息 - collected_figures.append( - { - "figure_number": figure_number, - "filename": filename, - "file_path": file_path, - "description": description, - "analysis": analysis, - } - ) + if file_path: + print(f" ⚠️ 文件不存在: {file_path}") + else: + print(f" ⚠️ 未提供文件路径") return { "action": "collect_figures", @@ -325,7 +326,12 @@ class DataAnalysisAgent: elif process_result["action"] == "collect_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( { "role": "user", @@ -339,6 +345,7 @@ class DataAnalysisAgent: "round": self.current_round, "action": "collect_figures", "collected_figures": collected_figures, + "missing_figures": missing_figures, "response": response, } ) diff --git a/prompts.py b/prompts.py index ef1c6c9..2eb1134 100644 --- a/prompts.py +++ b/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 动作)** @@ -218,7 +240,7 @@ final_report: | """ # 最终报告生成提示词 -final_report_system_prompt = """你是一个专业的数据分析师,你的任务是基于详细的数据分析过程,生成一份汇报的分析报告**。 +final_report_system_prompt = """你是一位**资深数据分析专家 (Senior Data Analyst)**。你的任务是基于详细的数据分析过程,撰写一份**专业级、可落地的业务分析报告**。 ### 输入上下文 - **数据全景 (Data Profile)**: @@ -229,16 +251,20 @@ final_report_system_prompt = """你是一个专业的数据分析师,你的任 - **可视化证据链 (Visual Evidence)**: {figures_summary} -> **警告**:你必须仔细检查上述列表。如果在 `figures_summary` 中列出了 10 张图,你的报告中就必须至少引用这 10 张图。**严禁遗漏任何已生成的图表**。引用格式必须为 `![描述](./图片文件名.png)`。 +> **警告**:你必须仔细检查上述列表。如果在 `figures_summary` 中列出了图表,你的报告中就必须引用它。**严禁遗漏任何已生成的图表**。引用格式必须为 `![描述](./图片文件名.png)`。 ### 报告核心要求 1. **角色定位**: - - 你不是一个只会“看图说话”的初级分析师。 - - 你是为管理层提供决策支持的顾问。必须跳出图表本身,结合**数据全景**进行宏观归因。 + - 你不仅是数据图表的生产者,更是业务问题的诊断者。 + - 你的报告需要回答“发生了什么”、“为什么发生”以及“怎么解决”。 2. **文风规范 (Strict Tone of Voice)**: - - **禁止**:第一人称(我、我们)、模糊词(可能、大概、看起来)、情绪化表达。 - - **强制**:客观陈述(“数据显示”、“分析表明”)、专业术语(渗透率、转化率、同比/环比)、确定性结论。 -3. **结构化输出**:必须严格遵守下方的 5 章节结构。 + - **禁止**:使用第一人称(我、我们)、使用模糊推测词(大概、可能)。 + - **强制**:客观陈述事实,使用专业术语(同比、环比、占比、TOPN),结论要有数据支撑。 +3. **结构化输出**:必须严格遵守下方的 5 章节结构,确保逻辑严密。 + +### 报告结构模板使用说明 (Template Instructions) +- **固定格式 (Format)**:所有的 Markdown 标题 (`#`, `##`)、列表项前缀 (`- **...**`)、表格表头是必须保留的**骨架**。 +- **写作指引 (Prompts)**:方括号 `[...]` 内的文字是给你的**写作提示**,请根据实际分析将其**替换**为具体内容,**不要**在最终报告中保留方括号。 --- @@ -271,7 +297,7 @@ final_report_system_prompt = """你是一个专业的数据分析师,你的任 - **切片维度**:按[用户群、时间、功能模块、地理位置、设备类型等]交叉分析 - **归因方法**:[如:根本原因分析(RCA)、相关性分析、趋势分解] -## 3. 核心业务洞察 (Key Business Insights) +## 3. 重点问题回顾 > **核心原则**:以故事线组织,将数据转化为叙事。每个主题应包含“现象-证据-归因-影响”完整逻辑链。 ### 3.1 [业务主题一:例如“远程控制稳定性阶段性恶化归因”]