本章的收官实战来了。
这一节我们做一个真正能用的工具——智能周报生成器。它解决的是一个 99% 上班族都有的痛点:
周五下午,领导在群里:「大家下午 5 点前把本周周报发我。」
你打开电脑,看着空白的文档发呆:这周到底做了啥?好像很忙,但又想不起来具体干了什么。翻日历、翻聊天记录、翻提交记录——找齐了之后,还要按”工作内容、进展、下周计划”的格式组织成规整的文字……这一整套下来,一个小时没了。
如果我们让 AI 来做:
你每天随手在一个文本文件里记一行流水账,列如”2026-04-15 上午:和张总开会讨论 Q2 营销方案,下午:跟进了抖音代运营的合同”。
周五一键运行脚本,AI 自动读取一周的记录,按”工作内容/完成进展/下周计划”三大块整理成一份结构规整的周报。

总耗时:1 分钟。
需求分析
先把需求拆清楚。一个”智能周报生成器”要做三件事:
- 读取一周的工作流水账(本地 txt 文件)
- 调用 AI 整理分类(归纳成”已完成 / 进行中 / 下周计划”)
- 输出规整的周报(Markdown 格式,直接复制粘贴到飞书、企微、邮件)
附加要求:
- 支持手动指定周数范围(这周 / 上周 / 自定义日期)
- 输出结果要包含标题、日期、姓名等元信息
- 容错:流水账格式不规范也能处理
- 可复用:不同岗位的人都能用(产品、运营、开发、销售……)
准备工作
流水账文件
新建一个 worklog.txt 文件,随手记录每天的工作。格式随意,列如:
2026-04-14 周一
上午:review 了上周末上线的功能,修复了两个用户反馈的 bug
下午:和设计师对接了会员中心改版的 UI 稿
晚上:写了下个月的技术方案初稿
2026-04-15 周二
上午:参与了产品周会,讨论 Q2 路线图
下午:帮销售同学解决了一个客户的集成问题
晚上:加班完成了技术方案
2026-04-16 周三
开发新功能:消息推送模块,完成了后端接口
和产品对了一下推送规则,下周要做 A/B 实验
2026-04-17 周四
继续开发消息推送,完成了前端页面
遇到一个性能问题,正在排查
2026-04-18 周五
定位到性能问题,是数据库查询太慢,加了索引解决
写周报中
注意:AI 对格式的容忍度很高,你不需要严格遵循”上午/下午/晚上”的结构。哪怕只写一句”今天开了三个会,写了需求文档”,AI 也能理解。
目录结构
weekly_report/
├── worklog.txt # 你的流水账
├── generate_report.py # 周报生成脚本
└── reports/ # 生成的周报存放目录
└── 2026-04-18.md
第一版:最小可运行版本
我们先用最短的代码跑通核心流程,再逐步完善。
# generate_report.py
import anthropic
from datetime import datetime
client = anthropic.Anthropic()
# 1. 读取流水账
with open('worklog.txt', 'r', encoding='utf-8') as f:
worklog = f.read()
# 2. 让 AI 整理
prompt = f"""你是一位专业的职场助理,请根据以下一周的工作流水账,生成一份结构规整的周报。
要求:
1. 用 Markdown 格式
2. 分三个部分:本周完成、进行中、下周计划
3. 用条目式列举,每条简洁清晰
4. 突出成果和数据,避免记流水账
流水账:
{worklog}
请直接输出周报正文,不要加解释。
"""
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=2000,
messages=[{"role": "user", "content": prompt}]
)
report = response.content[0].text
# 3. 保存
today = datetime.now().strftime('%Y-%m-%d')
output_path = f'reports/{today}.md'
import os
os.makedirs('reports', exist_ok=True)
with open(output_path, 'w', encoding='utf-8') as f:
f.write(report)
print(f"✅ 周报已生成:{output_path}")
print("
" + "=" * 40)
print(report)
跑一下:
python generate_report.py
你会看到 AI 生成的周报,类似这样:
## 本周工作周报
### 本周完成
- 完成会员中心改版 UI 对接,设计稿已确认
- 修复上周功能上线后发现的 2 个用户反馈 Bug
- 定位并解决消息推送模块的数据库性能问题(通过新增索引)
### 进行中
- 消息推送模块开发:后端接口已完成,前端页面开发完成,待联调
- 下月技术方案:初稿已完成,待评审
### 下周计划
- 消息推送模块 A/B 实验上线
- 技术方案评审并修改
- 参与 Q2 路线图落地
15 分钟前还要花 1 小时写的周报,目前只要按一下回车。
第二版:让它更好用
第一版能跑,但还有一些不足:
- 没有个人信息(姓名、岗位)
- 没法区分”本周”和”上周”
- 流水账越写越多,全量丢给 AI 浪费钱
我们升级一下。
# generate_report.py (v2)
import os
import re
import anthropic
from datetime import datetime, timedelta
client = anthropic.Anthropic()
# ========== 配置区 ==========
USER_NAME = "张三"
USER_ROLE = "产品经理"
DEPARTMENT = "增长部"
WORKLOG_FILE = "worklog.txt"
OUTPUT_DIR = "reports"
# ============================
def parse_worklog(content):
"""把流水账按日期分段"""
entries = []
# 用日期行作为分段标记
pattern = r'(d{4}-d{1,2}-d{1,2}.*?)(?=
d{4}-d{1,2}-d{1,2}|)'
matches = re.finditer(pattern, content, re.DOTALL)
for m in matches:
block = m.group(1).strip()
# 提取日期
date_match = re.match(r'(d{4}-d{1,2}-d{1,2})', block)
if date_match:
date_str = date_match.group(1)
try:
date = datetime.strptime(date_str, '%Y-%m-%d')
entries.append({'date': date, 'content': block})
except ValueError:
continue
return entries
def filter_this_week(entries):
"""只保留本周(周一到周五)的条目"""
today = datetime.now()
weekday = today.weekday() # 0=周一, 6=周日
monday = today - timedelta(days=weekday)
result = []
for entry in entries:
if entry['date'] >= monday.replace(hour=0, minute=0, second=0, microsecond=0):
result.append(entry)
return result
def generate_report(entries, name, role, department):
"""调用 AI 生成周报"""
worklog_text = "
".join([e['content'] for e in entries])
prompt = f"""你是一位专业的职场助理,负责为以下同事生成一份本周工作周报。
同事信息:
- 姓名:{name}
- 岗位:{role}
- 部门:{department}
以下是这位同事本周的工作流水账:
{worklog_text}
请生成一份结构化的周报,要求:
1. Markdown 格式
2. 分三部分:「一、本周完成」「二、进行中」「三、下周计划」
3. 每部分用列表形式
4. 语言简洁专业,突出成果与进展,避免罗列细节
5. 如果流水账没体现"下周计划",请基于进行中的工作合理推断
直接输出周报正文,不要前置说明。
"""
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=2000,
messages=[{"role": "user", "content": prompt}]
)
return response.content[0].text
def build_report_header(name, role, department):
"""生成周报的元信息头部"""
today = datetime.now()
weekday = today.weekday()
monday = today - timedelta(days=weekday)
friday = monday + timedelta(days=4)
return f"""# 周报 · {name}
- **姓名**:{name}
- **岗位**:{role}
- **部门**:{department}
- **周期**:{monday.strftime('%Y-%m-%d')} ~ {friday.strftime('%Y-%m-%d')}
- **提交日期**:{today.strftime('%Y-%m-%d')}
---
"""
def main():
# 读流水账
with open(WORKLOG_FILE, 'r', encoding='utf-8') as f:
content = f.read()
# 解析
entries = parse_worklog(content)
if not entries:
print("❌ 流水账为空或格式无法识别")
return
# 筛选本周
this_week = filter_this_week(entries)
if not this_week:
print("❌ 本周还没有记录")
return
print(f" 本周共记录 {len(this_week)} 天的工作")
# 生成周报正文
print(" AI 整理中...")
body = generate_report(this_week, USER_NAME, USER_ROLE, DEPARTMENT)
# 加上头部
header = build_report_header(USER_NAME, USER_ROLE, DEPARTMENT)
full_report = header + body
# 保存
os.makedirs(OUTPUT_DIR, exist_ok=True)
filename = datetime.now().strftime('%Y-%m-%d') + '.md'
output_path = os.path.join(OUTPUT_DIR, filename)
with open(output_path, 'w', encoding='utf-8') as f:
f.write(full_report)
print(f"✅ 周报已生成:{output_path}
")
print("=" * 40)
print(full_report)
if __name__ == '__main__':
main()
新增的功能:
- 配置区:顶部的 USER_NAME 等变量,改一下就能给不同人用
- 按日期筛选:parse_worklog() + filter_this_week() 只取本周的数据
- 统一头部:自动拼接”姓名、岗位、部门、周期”这些元信息
- 异常处理:流水账为空或格式错误都有友善提示
输出文件的效果:
# 周报 · 张三
- **姓名**:张三
- **岗位**:产品经理
- **部门**:增长部
- **周期**:2026-04-14 ~ 2026-04-18
- **提交日期**:2026-04-18
---
## 一、本周完成
- **会员中心改版**:完成 UI 对接和设计稿确认
- **Bug 修复**:修复用户反馈的 2 个生产环境问题
- **消息推送模块**:后端接口开发完成,前端页面开发完成
- **性能优化**:定位并解决数据库慢查询问题
## 二、进行中
- 消息推送模块联调与 A/B 实验准备
- 下月技术方案撰写,初稿已完成
## 三、下周计划
- 消息推送模块 A/B 实验上线
- 技术方案评审并根据反馈修改
- 推进 Q2 路线图相关工作
完美的周报,比 90% 的人手写得都规整。
第三版:进阶增强
如果你想再进一步,这里有几个方向:
增强 1:读取多个数据源
不只是流水账文件,还可以读:
- Git 提交记录(开发同学适用)
import subprocess
commits = subprocess.check_output(
['git', 'log', '--since=1.week.ago', '--pretty=format:%s'],
text=True
)
- 日历事件(已开会议作为”沟通协作”条目)
- 邮件发件箱(本周处理的重大问题)
- 任务管理工具(Jira、飞书任务、腾讯文档等)
把这些数据合并后一起喂给 AI,周报会更丰满。
增强 2:自定义模板
不同公司对周报格式要求不同。可以把模板抽成一个文件:
# template.md
# 周报 · {name}
## 本周目标达成情况
{goals}
## 关键数据
{metrics}
## ✅ 本周完成
{completed}
## ⏳ 进行中
{in_progress}
## 下周计划
{next_week}
## 思考与提议
{thoughts}
然后让 AI 按这个模板填内容。
增强 3:自动发送
生成完周报,直接发到指定渠道:
# 发到飞书机器人
import requests
webhook_url = "https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxx"
requests.post(webhook_url, json={
"msg_type": "text",
"content": {"text": full_report}
})
或者发邮件、企微、钉钉——第 11 章之后你会越来越熟悉这些。
增强 4:定时自动运行
在 Mac 上用 cron、Windows 上用”任务计划程序”,设置每周五下午 4 点自动跑一遍。
Mac 示例:
# 编辑定时任务
crontab -e
# 添加这一行(每周五 16:00 执行)
0 16 * * 5 cd /path/to/weekly_report && python generate_report.py
reports/从此你再也不用手动跑脚本——周五下午,周报自动出目前你的 文件夹里。
用的过程中会踩到的坑
坑 1:流水账写得太简略,AI 瞎编
如果你某天只写了”开会”两个字,AI 只能靠猜——它可能会编造”讨论了 Q2 关键战略”之类的内容。
解法:在提示词里加一句”不要捏造流水账中没有的内容,宁可简略也不要编造“。
坑 2:生成的周报太啰嗦或太简略
解法:在提示词里加上字数约束,列如”每条不超过 30 字”、”整份周报控制在 500 字以内”。
坑 3:中英文混杂
有时候 AI 会把”完成”写成”Completed”。解法:加一句”严格使用中文“。
坑 4:敏感信息外泄
如果你的流水账里有客户姓名、财务数据等敏感信息,发给 AI 之前要先脱敏:
def sanitize(text):
# 把手机号替换成 ***
text = re.sub(r'1[3-9]d{9}', '[手机号已屏蔽]', text)
# 把金额数字替换
text = re.sub(r'd+[万千亿元]', '[金额已屏蔽]', text)
return text
具体规则根据你的场景定。涉及敏感信息时,优先思考用国产 AI(数据在国内),或者用本地模型。
本章总结
从 1 到 5,你完整经历了”给工具接上 AI 大脑”的全过程:
- 1 理解了 API 是什么,API Key 怎么用
- 2 完成了第一次 AI API 调用
- 3 学会了”读 → 发 → 接 → 存”的通用套路
- 4 掌握了让脚本稳定运行的七个关键技巧
- 5 做出了一个真正有用的工具 —— 智能周报生成器
从这一章开始,你已经不再是”AI 的用户”,而是”AI 的使用者”**。你会开始用”AI 能不能帮我做这个”的视角看待日常工作——这是一种思维方式的升级,比具体的代码更重大。
你可以 clone 下来直接改参数跑。用起来之后你会发现,AI 编程不是技术,而是一种”让生活变简单”的新习惯。