用AI做了个自动写周报的工具:从想法到上线只用了3天

图片[1]-用AI做了个自动写周报的工具:从想法到上线只用了3天-AI智能库

📖 项目背景

每周五下午写周报,是我最讨厌的工作环节。不是不会写,而是太重复——把这周做过的事从日历、聊天记录、文档里捞出来,整理成领导爱看的格式,纯粹是体力活。作为一个懒人,我决定用AI把这个流程自动化。

从想法到上线只用了3天,今天把整个过程分享出来。不涉及太高深的技术,有Python基础就能跟着做。

🎯 要解决什么问题?

先明确需求。我的周报需要包含:

  • 本周完成的任务(按项目分类)
  • 遇到的问题和解决方案
  • 下周计划
  • 进度百分比和工时统计

数据来源有三个:钉钉打卡记录(知道每天在干嘛)、Git提交记录(知道写了什么代码)、飞书文档(知道开了什么会、写了什么文档)。

目标是:每周五下午点一下按钮,AI自动从这些数据源提取信息,生成一份格式规范、内容准确的周报。

🏗️ 技术方案设计

模块 技术选型 作用
数据采集 Python + 各平台API 拉取一周的工作数据
数据清洗 Python文本处理 去重、分类、格式化
内容生成 DeepSeek API 用AI生成周报文本
格式输出 python-docx 生成Word文档
调度触发 crontab 每周五下午自动执行

为什么用DeepSeek而不是ChatGPT?两个原因:便宜(生成一份周报成本不到1分钱)、国内访问稳定。DeepSeek的中文生成质量已经足够好了。

📊 第一步:数据采集

这是最耗时的一步。每个平台的数据格式不一样,需要分别对接。

Git提交记录

Git的数据最好拿。在项目目录下跑一个命令就行:

import subprocess
from datetime import datetime, timedelta

def get_git_log(repo_path, days=7):
    since_date = (datetime.now() - timedelta(days=days)).strftime("%Y-%m-%d")
    cmd = f"git -C {repo_path} log --since='{since_date}' --pretty=format:'%h|%s|%an|%ad' --date=short"
    result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
    commits = []
    for line in result.stdout.strip().split("\\n"):
        parts = line.split("|")
        if len(parts) >= 4:
            commits.append({
                "hash": parts[0],
                "message": parts[1],
                "author": parts[2],
                "date": parts[3]
            })
    return commits

commits = get_git_log("/path/to/project")
for c in commits:
    print(f"{c['date']} | {c['message']}")

这段代码会拉取最近7天的Git提交记录,包括commit hash、提交信息、作者和日期。Git提交信息是周报最核心的数据源——它精确记录了你每天做了什么。

飞书日历/文档

飞书有开放API,可以拉取日历事件和文档列表。需要先在飞书开放平台创建应用,获取app_id和app_secret:

import requests

def get_feishu_events(app_id, app_secret, days=7):
    # 获取access_token
    token_url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"
    resp = requests.post(token_url, json={"app_id": app_id, "app_secret": app_secret})
    token = resp.json()["tenant_access_token"]

    # 查询日历事件
    start_time = int((time.time() - days * 86400) * 1000)
    end_time = int(time.time() * 1000)
    url = f"https://open.feishu.cn/open-apis/calendar/v4/calendar_events"
    headers = {"Authorization": f"Bearer {token}"}
    params = {"start_time": start_time, "end_time": end_time}
    resp = requests.get(url, headers=headers, params=params)
    events = resp.json().get("data", {}).get("items", [])
    return [{"title": e.get("summary"), "start": e.get("start_time")} for e in events]

钉钉打卡记录

钉钉也有开放API,但打卡记录需要企业管理员权限。如果拿不到权限,可以简化方案——让用户手动填一个简单的”今日工作”表单,作为补充数据源。

🤖 第二步:AI生成周报

拿到原始数据后,核心工作就是把这些碎片化的信息组织成一份通顺的周报。这就是AI的用武之地。

import requests
import json

def generate_weekly_report(commits, events, tasks):

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享