构建人工智能驱动的 Git 提交报告生成器:开发日志 1
一切始于我注意到一项必须反复执行的手动任务。即重新阅读过去一周的提交历史并撰写每周进度报告并将其发送给我的团队成员和客户。
我需要写两种类型的报告:
我一直认为这是一种机器人任务,可以通过一个简单的脚本或工具自动完成,它将以智能的方式读取我的提交历史并生成格式良好的报告,然后我可以将其复制并粘贴到我的电子邮件中。
因此我决定采用这种方法并开始在一系列编码会话中编写该工具的代码。
到目前为止,我已经录制了 4 个编码会话流,可在 twitch 和 youtube 上观看:
这篇博文讨论了我们在过去 4 个流程中迄今为止所取得的进展。
该工具是开源的,可在 Github 上获取。
cli 工具作为 npm 包发布,可在包链接中找到。
如何使用它?
npx ai-commit-report-generator-cli

如果您从前面列出的选项中选择运行扫描选项,系统将提示您输入:
然后,该工具将根据所选的过滤器(作者,从今天开始考虑的天数或周数……)从所选的目录中获取提交。
然后,CLI 工具将显示一个进度条,同时逐个扫描提交并生成技术报告。
此后,您将看到另一个进度条,告诉您该工具正在处理每天生成的技术提交摘要并生成业务或每日要点报告。
当该过程完成后,您可以返回到 cli 菜单并选择查看生成的报告之一(技术报告或业务报告)。
业务报告将如下所示:

技术报告如下:

扫描如何工作?
提交获取器
该工具首先从选定的目录中获取提交,然后根据选定的过滤器(作者,从今天开始考虑的天数或周数……)对其进行过滤。
在底层,CLI 工具使用 **git log** 命令来获取、过滤来自所选本地目录的提交。
之后,CLI 工具解析 git log 命令的结果,应用其他过滤器并继续下一步。
提交统计信息获取程序
对于每次提交,CLI 工具将获取提交中修改的文件列表及其相应的插入、删除和总更改统计信息。
为此,我们使用 **git show --stat ** 命令。
下面你可以看到 **git show --stat** 命令的输出示例。Git show stat 输出
什么是大型语言模型或 LLM?
在深入研究提交分析器之前,让我们先了解什么是大型语言模型或 LLM。
LLM 或语言模型是一种机器学习模型,可以在大量文本数据上进行训练,并可以根据该数据生成文本。
一些法学硕士的例子包括:
LLM 可以执行任何类型的常规任务,例如与人聊天、生成文本、编写代码等。
但在这个项目中,我们需要一种方法来指导那些 LLM 执行特定的任务。
这就是**提示**出现的地方。
**提示**是一组用自然语言编写的清晰指令,它将帮助我们指导 LLM 执行特定任务,如分类、总结等。
什么是代理?
代理是一种能够与**环境**交互并根据自身逻辑、知识和目标执行任务的程序。
代理可以使用工具对环境执行操作。
这些工具就像是代理和环境之间的桥梁。每个工具都赋予代理特殊的能力来对环境进行观察/操作。
提交 AI 处理器代理
生成提交统计信息后,CLI 工具将使用提交分析器代理根据每个提交的详细信息和文件更改统计信息生成其摘要。
我们可以只使用 LLM 来总结提交和文件更改,因为 LLM 是提交期间已更改的所有文件的列表。
但这将是昂贵和低效的,因为一次提交可能包含很多文件更改。
由于我们无法一次性将所有文件更改提供给 LLM(想象一下在整个代码库中运行 Prettier 的提交!),因此我们需要一种更智能的方法。这就是我们的智能代理发挥作用的地方。
代理充当智能中介,策略性地决定哪些文件更改值得更仔细检查。
通过只关注重要的变化,我们可以利用更少的资源获得更好的结果。
这种选择性方法可确保高效处理——我们只深入研究重要的变化,避免信息过载,同时仍然捕捉提交的真正意义。
用于驱动代理的提示如下:
You are a commit analyzer. Follow these steps in order: 1. Here is the commit information:\n - Commit message: {message} - Commit hash: {hash} - Global stats: {statistics} 2. Depending on the commit attributes and statistics decide to use the "file_diffs_tool" to get the diffs or the code changes of a specific file in the commit statistics, You can use the tool as many times as needed before proceeding to the next step.\n 3. Analyse the commit attributes, statistics and code changes to generate a summary of the commit.\n 4. The final summary should respect the format instructions below.\n {format_instructions}
为每个提交生成一个 Agentic AI 摘要。
所以我们的**提交 AI 处理器**代理将按顺序逐一处理所有提交,然后为每个提交生成一个 AI 摘要条目。
AI摘要条目的形状如下:
{ "changes": [ { "type": "enum of: feature, fix, breaking change, or refactor", "description": "detailed description of what was changed" } ], "summary": "a comprehensive paragraph describing the overall changes and their impact", "called_tools": [ { "name": "name of the tool that was used", "description": "description of what the tool was used for", "called_at": "timestamp of when the tool was called" } ] }
让我们分解一下 AI 摘要的结构:
**所谓的 tools** 键用于调试目的。它允许我们查看哪些工具用于生成每个提交的 AI 摘要。
报告生成
现在,我们有足够的数据来生成技术报告,但我们需要更多的处理步骤来生成业务或基于要点的报告。
技术报告渲染
现在,我们需要做的就是使用我们之前生成的 AI 摘要条目,按顺序读取它们,然后在终端上呈现报告。

生成业务或日常要点报告
业务报告由一系列要点组成,总结了我们每天所做的事情。
因此,在处理我们的提交及其相应的 AI 摘要条目之前,我们需要按提交的日期对它们进行分组。
AI 报告生成器。
现在,我们需要一种方法来生成每日要点报告。给定特定日期的提交及其对应的 AI 摘要条目,我们需要生成一份要点报告,总结我们当天所做的事情。
这就是**AI 报告生成器**的用武之地。
AI 报告生成器将获取所有提交及其相应的 AI 摘要,并生成具有以下结构的要点报告:
{ "date": "ISO datetime string of the day", "bulletPoints": [ { "short": "brief, non-technical description of the change", "long": "detailed, business-focused explanation of the change and its benefits" } ] }
让我们分解一下结构:
每个要点都不应包含任何技术术语,并且应使没有技术背景的人也能轻松理解。
为了有效地实现所有这些,我们使用了以下提示:
You're a business report writer who specializes in making complex technical changes easy to understand for non-technical stakeholders. Your task is to create a clear, simple summary of the changes made. Follow these steps: 1. Review the list of changes below: {commits} 2. Create a bullet-point report that: - Uses simple, everyday language - Avoids technical terms and jargon - Focuses on business value and user-facing improvements - Explains changes in terms of what they mean for users/stakeholders - Groups related changes together when possible - Includes specific improvements and their benefits 3. Make sure each bullet point is: - Written in plain English - Easy to understand by someone with no technical background - Focused on what was improved rather than how it was done 4. The number of bullet points should be equal to {numberOfCommits} 5. Follow this format: {format_instructions}
呈现业务
现在我们需要做的就是使用我们之前生成的 AI 每日报告条目,按顺序读取它们,然后在终端上呈现报告。

结论
在这第一个开发日志中,我们探索了如何使用 AI 将重复的手动任务转变为自动化解决方案。AI 提交报告生成器 CLI 工具展示了以下组合的强大功能:
这仅仅是一个开始——未来的开发日志中还会有更多内容,我们将探索更多功能和改进。
联系方式与资源
如果您有任何问题、建议或想为该项目做出贡献,请随时联系我们!