2026/2/20 23:46:30
网站建设
项目流程
合肥建设网站查询,wordpress程序安装包,外贸推广邮件,常州建设网站公司网站0. 序章#xff1a;为了不想写日报#xff0c;我写了个代码
如果是程序员最讨厌的事情排行榜#xff0c;“写日报/周报”绝对能进前三。
每天晚上 6 点#xff0c;当你刚刚解决完一个复杂的并发 Bug#xff0c;大脑还在回味代码的优雅时#xff0c;钉钉/飞书弹出一个提醒…0. 序章为了不想写日报我写了个代码如果是程序员最讨厌的事情排行榜“写日报/周报”绝对能进前三。每天晚上 6 点当你刚刚解决完一个复杂的并发 Bug大脑还在回味代码的优雅时钉钉/飞书弹出一个提醒“请提交今日日报”。瞬间你的大脑一片空白。“我今天干啥了”“上午好像在修环境”“下午那个 Bug 到底改了哪里”最后你只能打开 Git Log一行行复制粘贴凑出一篇流水账。这是对生命极大的浪费。作为一名极客我们的原则是凡是超过三次的重复劳动都应该自动化。今天我将带你从零开始用Python Git Log LLM (大模型)搭建一个**“全自动日报生成器”**。它不仅能自动读取你的代码提交记录还能利用 AI 的润色能力把破碎的提交信息通过“STAR 原则”美化成一份让老板无可挑剔的专业日报并自动推送到工作群。Ⅰ. 架构设计把“流水账”变成“奏折”我们不能只是简单地把 Git Log 扔给老板那是“数据”不是“信息”。我们需要一个加工厂。这个工具的核心逻辑Pipeline非常清晰是一个典型的RAG检索增强生成的微型应用数据层 (Miner)从你的本地代码仓库挖掘当天的“工作痕迹”Git Commits。组装层 (Assembler)将这些痕迹清洗、去重并拼接成 AI 能读懂的 Prompt。大脑层 (Brain)调用 LLM API (OpenAI/DeepSeek/Gemini)让 AI 根据预设的人设Senior Engineer进行润色。触达层 (Courier)将生成的 Markdown 报告推送到飞书/钉钉机器人。系统架构图1. 提取提交记录2. 补充上下文Raw Logs结构化 DataAPI Request生成日报文本WebhookGit 仓库数据日历 / Todo 事项数据挖掘器 GitMiner清洗器: 去重/脱敏Prompt 组装器AI 大模型Markdown 渲染企业微信 / 飞书 / 钉钉Ⅱ. 数据挖掘不要欺骗自己Git 不会撒谎日报写不出来本质是上下文丢失。而 Git Commit Log 是最诚实的记录者。我们需要编写一个 Python 脚本自动提取当前用户、今天的所有提交。2.1 核心依赖我们需要gitpython来操作 Gitrequests来调用 API。pipinstallgitpython requests openai2.2 挖掘机代码实现 (miner.py)这个模块负责深入你的项目目录把今天的提交挖出来。importosfromdatetimeimportdatetime,timefromgitimportRepo,InvalidGitRepositoryErrorclassGitMiner:def__init__(self,repo_paths,author_name): :param repo_paths: list, 项目路径列表支持多项目监控 :param author_name: str, 你的 Git 用户名防止把同事的提交算进去 self.repo_pathsrepo_paths self.author_nameauthor_namedefget_daily_commits(self):daily_logs[]todaydatetime.now().date()# 定义今天的起止时间start_of_daydatetime.combine(today,time.min)end_of_daydatetime.combine(today,time.max)print(f️ 正在挖掘{today}的代码提交...)forpathinself.repo_paths:try:repoRepo(path)# 检查是否有当天提交forcommitinrepo.iter_commits():# 提交时间转 datetimecommit_datedatetime.fromtimestamp(commit.committed_date)# 过滤条件必须是今天且必须是本人if(start_of_daycommit_dateend_of_day)and\(self.author_nameincommit.author.name):# 提取关键信息Hash前7位 提交信息log_entryf[{repo.working_dir.split(/)[-1]}]{commit.hexsha[:7]}-{commit.message.strip()}daily_logs.append(log_entry)# 优化如果遍历到昨天的提交直接中断当前仓库的循环Git log 是倒序的ifcommit_datestart_of_day:breakexceptInvalidGitRepositoryError:print(f⚠️ 警告:{path}不是一个有效的 Git 仓库已跳过。)continuereturndaily_logsif__name____main__:# 测试代码minerGitMiner(repo_paths[/Users/admin/Work/ProjectA,/Users/admin/Work/ProjectB],author_nameJackMa)logsminer.get_daily_commits()print(\n.join(logs))避坑指南很多时候我们会在多个项目间切换。所以repo_paths设计为列表支持一次性扫描所有正在开发的项目。Ⅲ. AI 炼金术Prompt Engineering 是核心如果你直接把 Git Log 扔给 AI 说“帮我写个日报”它大概率会给你写出一堆废话。我们需要通过 Prompt 让 AI 扮演一个**“高情商、懂技术的资深工程师”**。我们需要 AI 做三件事归纳把琐碎的fix bug合并成一个完整的功能点。润色把修改了空指针变成优化系统稳定性修复潜在的空指针异常听起来就贵了 2000 块。排版输出符合 Markdown 格式的列表。3.1 定义 Prompt 模板 (prompt_manager.py)SYSTEM_PROMPT 你是一名资深软件工程师擅长向上管理和工作汇报。 你的任务是根据用户提供的 Git Commit Logs生成一份高质量的“每日工作汇报”。 要求 1. **结构清晰**使用 STAR 原则Situation, Task, Action, Result重新组织语言。 2. **语气专业**不要使用流水账口吻要体现技术深度和业务价值。 3. **合并同类项**如果有多条 Commit 属于同一个功能开发请合并为一条汇报。 4. **格式规范**输出 Markdown 格式包含【今日工作内容】、【遇到的问题与解决】如果Log里体现了Bug fix、【明日计划】根据今日内容推测。 5. **拒绝废话**保持简洁有力。 USER_TEMPLATE 这是我今天的 Git 提交记录 {git_logs} 请帮我生成日报。 Ⅳ. 核心引擎接入 LLM (brain.py)这里我们使用 OpenAI SDK你可以随意替换为 DeepSeek、Moonshot 或本地 Ollama 的 API 地址。fromopenaiimportOpenAIfromprompt_managerimportSYSTEM_PROMPT,USER_TEMPLATEclassAIBrain:def__init__(self,api_key,base_urlhttps://api.openai.com/v1,modelgpt-3.5-turbo):self.clientOpenAI(api_keyapi_key,base_urlbase_url)self.modelmodeldefgenerate_report(self,git_logs):ifnotgit_logs:return 经过检测你今天似乎没有提交任何代码... 是在摸鱼还是在做架构设计建议手动补充# 拼接 raw stringraw_logs\n.join(git_logs)try:print( AI 正在疯狂思考如何美化你的工作...)responseself.client.chat.completions.create(modelself.model,messages[{role:system,content:SYSTEM_PROMPT},{role:user,content:USER_TEMPLATE.format(git_logsraw_logs)}],temperature0.7# 稍微有点创造力但别太离谱)returnresponse.choices[0].message.contentexceptExceptionase:returnf❌ AI 罢工了:{str(e)}Ⅴ. 最后一公里自动推送 (courier.py)生成了文本复制粘贴还是太累。我们要直接推送到群里。以飞书机器人 (Lark Bot)为例钉钉和企业微信同理都是 Webhook。importrequestsimportjsonclassFeishuCourier:def__init__(self,webhook_url):self.webhook_urlwebhook_urldefdeliver(self,markdown_content):headers{Content-Type:application/json}# 飞书机器人的富文本格式payload{msg_type:interactive,card:{header:{title:{tag:plain_text,content: 自动日报生成},template:blue},elements:[{tag:div,text:{tag:lark_md,content:markdown_content}},{tag:hr},{tag:note,elements:[{tag:plain_text,content:Powered by Python AI }]}]}}try:resrequests.post(self.webhook_url,headersheaders,datajson.dumps(payload))ifres.status_code200:print(✅ 日报已成功推送到飞书群)else:print(f⚠️ 推送失败:{res.text})exceptExceptionase:print(f❌ 网络错误:{e})Ⅵ. 完整组装与运行 (main.py)现在我们将所有模块组装在一起构成最终的执行脚本。importosfromdotenvimportload_dotenvfromminerimportGitMinerfrombrainimportAIBrainfromcourierimportFeishuCourier# 加载环境变量 (API Key 等敏感信息)load_dotenv()# 配置区CONFIG{REPO_PATHS:[/Users/yourname/project/backend,/Users/yourname/project/frontend],AUTHOR_NAME:YourGitName,LLM_API_KEY:os.getenv(LLM_API_KEY),LLM_BASE_URL:os.getenv(LLM_BASE_URL,https://api.openai.com/v1),LLM_MODEL:gpt-3.5-turbo,WEBHOOK_URL:os.getenv(FEISHU_WEBHOOK)}defmain():# 1. 挖掘minerGitMiner(CONFIG[REPO_PATHS],CONFIG[AUTHOR_NAME])logsminer.get_daily_commits()print(f 共扫描到{len(logs)}条今日提交。)# 2. 思考brainAIBrain(CONFIG[LLM_API_KEY],CONFIG[LLM_BASE_URL],CONFIG[LLM_MODEL])reportbrain.generate_report(logs)print(-*30)print(report)# 在控制台先预览一下print(-*30)# 3. 发送 (增加一个确认步骤防止 AI胡说八道直接发群里)confirminput( 是否推送到群里? (y/n): )ifconfirm.lower()y:courierFeishuCourier(CONFIG[WEBHOOK_URL])courier.deliver(report)else:print(已取消发送。)if__name____main__:main()Ⅶ. 进阶玩法让它更聪明上面的版本已经能用了但作为一个有追求的架构师我们还可以加入更多功能7.1 加入日历上下文 (Context)代码只是工作的一部分。有时候我们一整天都在开会。思路接入 Google Calendar API 或 读取本地.todo文件。在Prompt中增加一段另外这是我今天的日历事项{calendar_events}。如果代码提交很少请结合会议内容侧重描述方案设计和沟通。7.2 隐私保护与脱敏直接把公司源码的 Commit Message 发给 OpenAI 可能存在合规风险。优化在GitMiner中加入正则过滤把敏感的 IP、Token、内部项目代号自动替换为***。或者使用本地部署的Llama 3或Qwen模型确保数据不出内网。7.3 定时自动触发虽然手动跑脚本很爽但我们希望更懒。Mac/Linux 用户可以使用Crontab# 每天下午 18:30 自动运行3018* *1-5 /usr/bin/python3 /path/to/main.py/tmp/report.logⅧ. 总结这个工具虽然简单但它涵盖了数据采集 - 提示词工程 - AI 交互 - 自动化集成的完整闭环。它带来的价值不仅仅是每天省下的 10 分钟更是一种思维方式的转变不要让你的大脑被低价值的重复劳动占据。程序员的每一行代码都应该是为了解决问题包括解决“不想写日报”这个问题。下一步你可以尝试把这个脚本封装成一个 CLI 工具使用Typer或Click甚至打包成.exe分享给你的同事收他们 50 块钱奶茶费不过分吧。