概述
在AI辅助开发的工作流中,将日常编码活动转化为结构化的工作报告是一项具有实际价值的需求。本文档旨在解析如何利用大语言模型(LLM)的上下文与本地工具调用能力,通过创建项目专属的 Skill,实现对 Git 提交记录的自动解析,并生成符合规范的工作汇报文档。
该过程不涉及复杂的API对接,而是通过自然语言指令与模型自身的文件系统操作能力,完成从数据读取到文档落地的完整闭环。
纲要
Skill的类型与作用域- 全局
Skillvs 项目局部Skill - 目录结构与存储位置
- 全局
Git提交记录的读取与解析- 本地
Git历史命令 - 提交信息汇总逻辑
- 本地
- 周报生成的自动化流程
- 内容模板的定义
- 输出格式与存储策略(
Markdown)
- 文件管理规范
- 文档忽略提交配置(
.gitignore) - 目录规划示例
- 文档忽略提交配置(
核心流程概览
整个自动化周报生成流程涉及三个核心环节:数据源提取(Git Log)、指令封装(Skill 定义)、产物输出(Markdown 文档)。下图描述了该流程的逻辑关系。
#mermaid-svg-wxiUGSsSwD65fAdx{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-wxiUGSsSwD65fAdx .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-wxiUGSsSwD65fAdx .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-wxiUGSsSwD65fAdx .error-icon{fill:#552222;}#mermaid-svg-wxiUGSsSwD65fAdx .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-wxiUGSsSwD65fAdx .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-wxiUGSsSwD65fAdx .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-wxiUGSsSwD65fAdx .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-wxiUGSsSwD65fAdx .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-wxiUGSsSwD65fAdx .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-wxiUGSsSwD65fAdx .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-wxiUGSsSwD65fAdx .marker{fill:#333333;stroke:#333333;}#mermaid-svg-wxiUGSsSwD65fAdx .marker.cross{stroke:#333333;}#mermaid-svg-wxiUGSsSwD65fAdx svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-wxiUGSsSwD65fAdx p{margin:0;}#mermaid-svg-wxiUGSsSwD65fAdx .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-wxiUGSsSwD65fAdx .cluster-label text{fill:#333;}#mermaid-svg-wxiUGSsSwD65fAdx .cluster-label span{color:#333;}#mermaid-svg-wxiUGSsSwD65fAdx .cluster-label span p{background-color:transparent;}#mermaid-svg-wxiUGSsSwD65fAdx .label text,#mermaid-svg-wxiUGSsSwD65fAdx span{fill:#333;color:#333;}#mermaid-svg-wxiUGSsSwD65fAdx .node rect,#mermaid-svg-wxiUGSsSwD65fAdx .node circle,#mermaid-svg-wxiUGSsSwD65fAdx .node ellipse,#mermaid-svg-wxiUGSsSwD65fAdx .node polygon,#mermaid-svg-wxiUGSsSwD65fAdx .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-wxiUGSsSwD65fAdx .rough-node .label text,#mermaid-svg-wxiUGSsSwD65fAdx .node .label text,#mermaid-svg-wxiUGSsSwD65fAdx .image-shape .label,#mermaid-svg-wxiUGSsSwD65fAdx .icon-shape .label{text-anchor:middle;}#mermaid-svg-wxiUGSsSwD65fAdx .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-wxiUGSsSwD65fAdx .rough-node .label,#mermaid-svg-wxiUGSsSwD65fAdx .node .label,#mermaid-svg-wxiUGSsSwD65fAdx .image-shape .label,#mermaid-svg-wxiUGSsSwD65fAdx .icon-shape .label{text-align:center;}#mermaid-svg-wxiUGSsSwD65fAdx .node.clickable{cursor:pointer;}#mermaid-svg-wxiUGSsSwD65fAdx .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-wxiUGSsSwD65fAdx .arrowheadPath{fill:#333333;}#mermaid-svg-wxiUGSsSwD65fAdx .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-wxiUGSsSwD65fAdx .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-wxiUGSsSwD65fAdx .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wxiUGSsSwD65fAdx .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-wxiUGSsSwD65fAdx .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wxiUGSsSwD65fAdx .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-wxiUGSsSwD65fAdx .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-wxiUGSsSwD65fAdx .cluster text{fill:#333;}#mermaid-svg-wxiUGSsSwD65fAdx .cluster span{color:#333;}#mermaid-svg-wxiUGSsSwD65fAdx div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-wxiUGSsSwD65fAdx .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-wxiUGSsSwD65fAdx rect.text{fill:none;stroke-width:0;}#mermaid-svg-wxiUGSsSwD65fAdx .icon-shape,#mermaid-svg-wxiUGSsSwD65fAdx .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wxiUGSsSwD65fAdx .icon-shape p,#mermaid-svg-wxiUGSsSwD65fAdx .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-wxiUGSsSwD65fAdx .icon-shape .label rect,#mermaid-svg-wxiUGSsSwD65fAdx .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wxiUGSsSwD65fAdx .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-wxiUGSsSwD65fAdx .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-wxiUGSsSwD65fAdx :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 创建指令
调用
返回提交历史
格式化
保存
存放于
触发
配置
开发者
项目局部 Skill
Git 本地仓库
提交记录解析器
周报草案
Markdown 文档
项目 docs/ 目录
忽略周报文件提交
.gitignore
项目结构规划
为实现局部 Skill 的隔离,需在项目根目录下规划特定文件夹用于存放文档与配置。以下是一个推荐的基础结构:
dir
├── .cursor/ # Cursor IDE 配置目录
│ └── skills/ # 局部 Skills 存放位置
│ └── weekly-report.md # 具体的 Skill 定义文件
├── docs/ # 文档纪要目录
│ └── 2026-08-15_weekly.md # 生成的周报示例
├── .gitignore # 版本忽略文件
└── README.md
创建项目专属的局部 Skill
在 AI 辅助编程环境中,Skill 是一组预定义的指令集,用于引导模型完成特定任务。根据作用范围,Skill 可分为全局(跨项目可用)与局部(仅当前项目可用)两种类型。针对周报生成场景,建议采用局部 Skill,以确保其与当前项目的 Git 提交记录上下文强相关。
定义 Skill 的步骤
- 初始化指令 :向 AI 助手(如 Cursor/Claude)发送创建指令,明确要求创建一个仅存在于本项目中的
Skill。 - 功能描述 :清晰说明该
Skill的核心功能------读取当前项目的Git提交记录,汇总本周工作内容,并输出为Markdown格式文档。 - 存储路径指定 :指定文档的输出路径(例如
docs/目录),避免文件散落在项目根目录。
指令示例(自然语言)
"请创建一个只能在本项目中使用的
Skill。该Skill需要能够读取当前项目的Git提交历史,汇总本周的工作内容,并将最终周报保存为Markdown文档,存放在docs/目录下。"
迁移与复用
由于该 Skill 被定义为局部类型,其配置文件(通常为 .md 或 .yaml)会保存在项目目录中(如 .cursor/skills/)。若需在另一个项目中复用,仅需将此配置文件复制至目标项目的对应 skills 目录即可,无需重复定义。
Git 提交记录的解析逻辑
Skill 的核心能力在于对本地版本历史的读取与解析。在实现层面,AI 模型通过执行终端命令来获取原始数据。
获取提交历史
常用的 Git 命令用于提取格式化的一周日志:
bash
git log --since="1 week ago" --oneline --pretty=format:"%h - %s (%cd)" --date=short
该命令参数的含义如下:
--since="1 week ago":限定时间范围为一周内。--oneline:简洁单行显示。--pretty=format:...:自定义输出格式,包含哈希值、注释与日期。
信息汇总策略
AI 在获取上述文本输出后,会依据 Skill 定义中的指令进行语义归纳。归纳逻辑通常包括:
- 分类聚合:按功能模块(如前端、后端、文档)对提交记录进行分类。
- 去重与精炼:合并相似的提交(如修复同一问题的多次提交),提取核心变更点。
- 结构化输出:将整理后的内容映射到周报的固定章节中(如"核心功能开发"、"缺陷修复"、"文档更新")。
周报生成与存储规范
输出格式
为确保周报的可读性与一致性,Skill 应指导模型按照特定模板生成 Markdown 内容。一个标准的周报模板应包含:
- 报告周期(本周起止日期)
- 关键工作项列表(基于
Git提交分类) - 下月/下周工作计划(预留占位符)
存储与版本忽略策略
重要实践 :周报属于工作汇报文档,通常不应提交至公共代码仓库。建议在 .gitignore 文件中添加过滤规则,忽略 docs/ 下或特定命名的周报文件。
gitignore
# .gitignore 片段
docs/*weekly.md
实施效果与验证
在 Skill 配置完成后,每次触发生成指令(例如"生成本周工作周报"),AI 将自动执行以下流程:
- 扫描本地
Git记录。 - 根据提交信息生成初版周报。
- 保存至指定本地路径。
根据实际项目数据(包含前端、后端、管理后台的开发提交),生成内容可覆盖项目初始化、API 开发、功能完善等多个维度,显著减少了人工回忆与撰写的时间成本。
参考文档
官方文档
参考链接
总结
本文档描述了一种利用 AI 辅助编程工具构建自动化周报系统的轻量级方案。其核心价值在于将重复性的数据收集与归纳工作交由 Skill 配合 Git 信息处理完成。开发者仅需通过自然语言定义规则,无需编写复杂脚本,即可实现从版本历史到结构化报告的转换。
该方案的关键技术要点如下:
- 局部
Skill隔离 :通过限定Skill作用域,避免不同项目间的指令干扰,并便于版本控制与迁移。 Git日志解析 :依赖git log命令的标准输出作为数据源,利用 AI 的归纳能力替代传统的正则表达式解析,降低了对精确文本匹配的依赖,提高了对非规范提交信息的兼容性。- 文件生命周期管理 :通过将生成的报告存放于特定目录并配置
.gitignore,实现了代码仓库内容与本地工作汇报产物的解耦,防止了敏感或无关文件的版本污染。 - 人机协作指令流 :展现了通过自然语言与模型交互来动态生成、修改及配置
Skill的工作模式,而无需深入研究底层 API 调用逻辑。