Day 17 · 综合实战 A:日报/周报/月报自动化 Agent
「AI Python 系列」第 01 栏 · AI 时代的 Python 办公自动化全栏 18 篇 · 零成本跟完品牌梅雅达编程笔记摘要整合前 16 篇能力的实战项目。Agent 读取经营数据AI 分析趋势和异常自动生成Markdown格式日报/周报/月报。本篇使用 GLM-4.7-Flash永久免费3 次调用约 12,000 token零成本跑完。关键词报告自动化、AI 数据分析、Markdown生成、办公自动化、Agent 实战项目版本 / 说明操作系统Windows 10/11、macOS、Linux 均可Python3.9 及以上依赖库json、datetime标准库、llm_clientDay 04 封装LLM 提供商智谱 GLM-4.7-Flash免费前置知识需先完成 Day 01-16预计耗时阅读 12 分钟 动手验证 10 分钟开篇 · 每周五下午的那一个小时我有个学生在一家小公司做运营。每周五下午他都要干同一件事打开三四个后台系统把这周的数据复制到Excel里算环比、找亮点、写总结然后发邮件给老板。每次大概一个小时。内容其实不复杂但胜在重复——每周都差不多只是数字不一样。他问我“能不能让 AI 帮我把这事干了”我说可以。今天的代码就是我给他的答案数据丢进去Markdown报告出来。日报、周报、月报都能跑。一、思路让 AI 当数据分析师代码的逻辑很简单四步准备好数据JSON 格式可以是数据库查出来的也可以是Excel转的把数据连同分析要求一起丢给 AIAI 返回分析文字概要、指标表格、亮点、建议套上固定格式的报告头尾保存成Markdown文件核心在第二步——AI 既是数据分析师又是报告写手。你只需要告诉它根据这些数据写一份周报它自己找重点、算趋势、写建议。整个流程整合了前面学的几个能力Day 05 的结构化数据输出、Day 06 的数据分析思路、Day 14-16 的 Agent 模式。区别在于前面每篇只练一个点今天是把它们串起来了。二、核心代码完整代码包含模拟数据约 120 行这里只展示两个核心函数。完整代码和示例数据请在 CSDN 下载区获取。ai_analyze()把数据丢给 AIdefai_analyze(data,report_type):AI 分析数据并生成报告正文clientLLMClient(providerglm)data_strjson.dumps(data,ensure_asciiFalse,indent2)system_promptf你是数据分析专家。根据数据生成一份{report_type}报告。 输出 Markdown 格式包含 1. 概要总结2-3句话概括核心情况 2. 关键指标用表格呈现 3. 数据亮点发现的趋势、异常或值得关注的点 4. 改进建议基于数据的可操作建议2-3条 风格简洁专业数据说话不要空话套话。promptf以下是{report_type}的数据请生成分析报告\n\n{data_str}returnclient.chat(prompt,system_promptsystem_prompt,temperature0.3,max_tokens1500)整个函数就做一件事把 JSON 数据和一段system prompt打包丢给 AI。system prompt里明确了输出格式——概要、表格、亮点、建议。temperature设 0.3 是因为报告要准确不需要太多创意。generate_report()组装报告并保存defgenerate_report(report_typedaily):生成完整报告并保存type_map{daily:日报,weekly:周报,monthly:月报}type_nametype_map.get(report_type,日报)print(f\n 正在生成{type_name}...)dataSAMPLE_DATA.get(report_type)ifnotdata:print(f 不支持的报告类型{report_type})returnNonereport_bodyai_analyze(data,type_name)timestampdatetime.now().strftime(%Y-%m-%d %H:%M)full_reportf# 梅雅达编程笔记 · 经营{type_name} 生成时间{timestamp} 报告周期{data.get(date,data.get(week_range,data.get(month,)))}---{report_body}--- *本报告由 AI 自动生成数据仅供参考。* base_diros.path.dirname(os.path.abspath(__file__))output_diros.path.join(base_dir,reports)os.makedirs(output_dir,exist_okTrue)filenamef{report_type}_report_{datetime.now().strftime(%Y%m%d_%H%M)}.mdoutput_pathos.path.join(output_dir,filename)withopen(output_path,w,encodingutf-8)asf:f.write(full_report)print(f 报告已保存{output_path})returnoutput_path这里有个设计思路值得说头尾用f-string模板固定标题、时间、免责声明中间正文由 AI 生成。这种人定框架、AI 填内容的模式在办公自动化里非常实用。运行方式cdday17_code python report_agent.py预期输出 日报/周报/月报自动化 Agent 正在生成日报... 报告已保存reports/daily_report_20240715_0130.md 正在生成周报... 报告已保存reports/weekly_report_20240715_0130.md 正在生成月报... 报告已保存reports/monthly_report_20240715_0130.md 全部完成生成的Markdown报告长这样周报截选# 梅雅达编程笔记 · 经营周报 生成时间2024-07-15 01:30 报告周期2024-07-08 ~ 2024-07-14 --- ## 概要总结 本周共完成156笔订单总收入31.2万元日均收入4.46万元。新增客户28人 收到投诉9件。整体经营稳中向好周三达到单日收入峰值5.1万元。 ## 关键指标 | 指标 | 数值 | |---|---| | 总订单数 | 156 | | 总收入 | ¥312,450 | | 日均收入 | ¥44,636 | | 新增客户 | 28 | | 投诉数 | 9 | ## 数据亮点 1. **周三收入峰值**7月10日单日收入5.1万高于日均14% 2. **软件类占比最高**软件类销售额15.6万占总收入50% 3. **周末收入下降**周六周日收入低于工作日平均水平 ## 改进建议 1. 分析周三高收入原因复制成功经验 2. 软件类产品贡献最大建议加大推广力度 3. 关注投诉率9/156≈5.8%优化售后服务流程三、几个值得说的设计点数据格式统一AI 自己找重点日报、周报、月报的 JSON 结构不同——日报有orders和channels周报有weekly_trend月报有resolution_rate。但ai_analyze()函数完全没做区分就是把 JSON 丢给 AI。为什么能这么偷懒因为大模型天然能理解不同结构的 JSON。你在system prompt里说根据数据生成周报它自己知道weekly_trend是趋势数据、category_sales是品类分布。不需要你手动写if-else分支。文件名带时间戳filenamef{report_type}_report_{datetime.now().strftime(%Y%m%d_%H%M)}.md每次运行生成新文件不覆盖旧报告。我一开始用的是weekly_report.md这种固定名结果有一次不小心跑了两次第一份就被覆盖了。从那以后一律加时间戳。模拟数据长什么样代码里用SAMPLE_DATA字典存了三份模拟数据。以周报为例结构大概是这样的SAMPLE_DATA{weekly:{week_range:2024-07-08 ~ 2024-07-14,total_orders:156,total_revenue:312450,avg_daily_revenue:44636,new_customers:28,complaints:9,weekly_trend:[{date:07-08,revenue:38000},{date:07-09,revenue:42000},# ... 7天数据],category_sales:{教育:89000,软件:156000,工具:67450},},}真实场景里这份数据从数据库或Excel里来。格式不限只要是 JSON 能表达的AI 都能处理。四、真实场景怎么接代码里用的是SAMPLE_DATA模拟数据。实际用的时候你需要把这个替换掉。常见的接法从 CSV 读取用 Python 的csv模块读sales_data.csv转成字典后传给ai_analyze()。从数据库读取用sqlite3或pymysql查出数据格式化后传入。加定时功能用schedule库实现自动生成。比如日报每天 9:00 跑importscheduleimporttime schedule.every().day.at(09:00).do(generate_report,daily)schedule.every().monday.at(09:00).do(generate_report,weekly)whileTrue:schedule.run_pending()time.sleep(60)我那个学生最后选了 CSV schedule的方案每天早上自动从系统导出一份 CSV脚本读取后生成日报直接发到他的邮箱。每周自己花 5 分钟改改 AI 生成的初稿就能交差。以前一小时现在十分钟。五、写在最后报告自动化的核心不是写得漂亮而是写得快。AI 生成的初稿大概能打 80 分你花几分钟改改重点、调调措辞85-90 分的报告就出来了。省下来的时间用来想想数据背后的策略比在Excel里复制粘贴有价值得多。下期预告Day 18 · 综合实战 BAI 客服 Agent专栏收官最后一个实战——做一个能多轮对话的客服 Agent。意图分类 FAQ 检索 回复生成 人工转接。这是本专栏的收官之作。资源与工具Python datetime 文档https://docs.python.org/3/library/datetime.html智谱 GLM 模型文档https://docs.bigmodel.cn/本专栏配套代码CSDN 下载区往期回顾Day 16 · 长任务与记忆让 Agent 记住上下文专栏「AI Python 系列」第 01 栏 · AI办公自动化©️ 梅雅达编程笔记原创 · 首发 CSDN · 转载请注明出处