# llm_repo1 **Repository Path**: dasdsadasdas/llm_repo1 ## Basic Information - **Project Name**: llm_repo1 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-05-29 - **Last Updated**: 2025-05-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # llm_repo: 使用大语言模型生成代码提交信息 **llm_repo** 是一个利用大型语言模型(LLM)自动生成 Git 代码提交信息的项目工具,旨在提高提交信息的质量和一致性,并减轻开发者编写提交说明的负担。 ## 项目背景 在团队协作开发中, **提交信息** (commit message)对于代码历史的可读性和可维护性至关重要。良好的提交信息有助于团队成员快速了解更改内容、原因和影响,方便代码审查和日后追踪问题。然而,撰写高质量的提交信息并非易事:很多开发者往往因为赶时间或不重视而填写过于简单的描述,甚至直接省略,这使得提交记录难以理解。 为了解决这一痛点,本项目尝试借助**大语言模型**自动生成提交信息。大语言模型能够基于代码改动内容进行上下文理解和语言生成,帮助输出详细且规范的提交说明。这样不仅节省了开发者编写提交说明的时间,也确保了提交信息的专业性和一致性。其具体优势包括: * **提高质量和一致性:** LLM 可以根据代码修改内容生成准确描述变更的提交信息,避免过于简短或含糊不清的描述,提高项目提交记录的质量和一致性。 * **节省时间与精力:** 自动生成提交信息减少了开发者手动撰写的时间成本,尤其在大量提交或紧迫开发周期中,大幅提升效率。 * **融合多源知识:** 借助 LLM 的强大语义理解和知识库,它能够将代码变更、相关文档、在线资料等信息融合,在提交信息中提及更丰富的背景(例如引用相关的issue、函数用途或漏洞修复来源),使提交说明更加完整。 总而言之,llm_repo 项目旨在让提交信息“更聪明”,充分利用智能生成提升团队协作的体验。 ## 项目架构与工作流程 llm_repo 的架构由三个主要部分组成: **提交信息预处理、代码检索器、多源知识融合与 LLM** 。下面的流程图展示了这三部分的工作流程及交互关系: 流程概述:当开发者准备提交代码时,工具首先获取最新的代码改动内容,并对其进行预处理分析;随后,系统会检索代码库中的相关片段或文档,以及查询额外的知识库和互联网资源,以收集与此次改动相关的信息;最后,将所有收集到的上下文知识融合后,通过大语言模型生成详尽的提交信息建议,展示给用户。各部分功能如下: 1. **提交信息预处理:** 解析待提交的代码差异(diff),提取关键变更内容。此步骤会过滤无关信息、整理修改的文件和函数列表,为后续生成做好准备。预处理确保模型关注代码改动的要点,如增加了哪个函数、修复了什么问题等,为提交信息生成提供基础素材。 2. **代码检索器:** 从当前 Git **代码仓库**中检索与本次改动相关的代码片段或说明。这一步使用仓库历史和代码内容来提供上下文,例如找到被修改函数的注释、相关配置的说明,或先前提交中类似改动的描述。通过 GitPython 等手段监听代码库最新状态并提取 diff,代码检索器能够获取**最新代码改动**以及仓库内可能相关的参考信息,帮助模型更好地理解改动意义。 3. **多源知识融合与 LLM:** 将代码diff、代码检索器提供的仓库内部信息,结合其它知识源(如额外知识库文件检索结果和联网搜索结果),整合成一份上下文。随后调用**大语言模型**生成提交信息。多源融合保证了模型在生成时具备充分的背景:额外知识库(如项目文档、技术规范)提供专业说明,**联网搜索**带来可能的相关案例或通用资料,最终由 LLM(如ChatGLM)综合这些信息撰写出详细的提交说明。例如,模型可能会在提交信息中引用相关函数的用途、引用文档中的特定术语解释,或提及网上资料中的解决方案来源,使提交信息内容更加丰富完善。 通过以上架构,llm_repo 实现了从代码变更到高质量提交信息的自动化流程,每个模块各司其职又紧密协作,为开发者提供智能化的提交信息生成支持。 ## 各模块功能说明 项目源代码由多个模块组成,各模块功能简介如下: * **`ui_main.py`** :项目的主入口,基于 Gradio 构建Web图形界面。它启动一个本地 Web 应用,供用户交互使用提交信息生成功能。通过该界面,用户可以查看最新的代码改动,点击按钮生成提交信息,并在生成后进行编辑调整。 * **`code_repo.py`** :Git 仓库监控与差异提取模块。它使用 GitPython 监听目标 Git 仓库的变化,获取最新的代码**diff**信息。当有新的改动时,该模块提取出改动内容(新增、修改、删除的代码块),供后续步骤使用。简而言之,`code_repo.py` 实时捕获代码改动快照,为提交信息预处理提供原始数据。 * **`llm_engine.py`** :大语言模型推理引擎接口模块。封装了与 LLM 的交互,提供统一的文本生成接口。该模块支持两种模式:**在线模型API**调用和**本地模型**推理。目前默认实现对接了智谱AI的 ChatGLM 服务接口,也可以配置为调用本地的模型推理。例如,如果使用本地模型,本模块会加载 Hugging Face Transformers 模型并生成文本;使用在线API则通过HTTP请求获取结果。 * **`online_engine.py`** :联网搜索模块。负责根据代码改动内容生成查询(query),通过互联网搜索相关的信息。例如,当改动涉及某个函数或错误消息时,该模块会自动搜索官方文档、技术博客或问答帖,获取可能有用的解释或解决方案。搜索得到的文本片段将被作为补充知识加入提交信息生成的上下文中。需要注意,使用此模块需保证运行环境可以访问互联网。 * **`file_extra.py`** :本地额外知识库检索模块。用于在项目的额外文档或知识库中查找与当前改动相关的内容。开发者可以将项目相关的说明文档、设计文档、API 规范等以文本形式存放在预定的目录(如“docs”或项目自带的 `pydoc` 文件夹)。`file_extra.py` 会对这些文件进行关键词搜索或文本向量检索,找到与本次代码改动主题相关的段落,并提取出来供 LLM 参考,增强提交信息的专业性和背景说明。 * **`pydoc/` 文件夹** :可选的代码文档目录,内含项目的补充说明或自动生成的代码文档。这里面的内容可以包括代码中的类和函数说明、开发规范、历史决策记录等。该目录不是核心模块,但提供的资料会被 `file_extra.py` 用作检索源之一。如果存在该文件夹,提交信息生成时模型可以引用其中的内容(例如函数的用途或参数解释),提高提交信息的准确度和信息量。没有该目录也不影响主流程运行。 上述各模块共同协作,分别处理UI交互、代码获取、知识检索和文本生成等环节,构成完整的提交信息自动生成系统。 ```bash project_root/ ├── code_repo.py # 代码仓库监视器 ├── file_extra.py # 文件引擎和知识库检索 ├── llm_engine.py # 大语言模型交互逻辑 ├── online_engine.py # 联网搜索引擎集成 ├── ui_main.py # Gradio UI 主程序 ├── pydoc/ # 额外代码知识库文件夹(存放 API 文档等) │ ├── module1.txt │ └── module2.txt └── README.md # 当前文档 ``` ## 环境依赖与安装说明 在使用本项目之前,请确保已安装所需的运行环境和依赖。主要依赖包括: * **Python 3.x** :请使用 Python 3.8+ 或更高版本以获得更好的兼容性。 * **Gradio** :用于构建Web界面交互。 (`pip install gradio`) * **GitPython** :用于访问 Git 仓库并提取代码差异。 (`pip install gitpython`) * **Transformers** :用于本地模型的加载与推理支持。 (`pip install transformers`) * **ZhipuAI SDK** :用于调用智谱AI的 ChatGLM 大模型接口。 (`pip install zhipuai`) * **Requests** :用于联网搜索时发送HTTP请求。 (`pip install requests`) * **PyTorch** (可选,本地模型支持):如果计划使用本地 LLM 模型进行推理,需要安装 PyTorch 或其他深度学习框架(如 TensorFlow)。对于Transformer模型,建议安装 PyTorch,并确保有相应的GPU支持以加速推理。 以上依赖可以通过如下命令一并安装: ```bash pip install gradio gitpython transformers zhipuai requests # (本地运行大模型请另外安装 PyTorch, pip install torch) ``` 安装完成后,还需要进行一些配置: * **Git 仓库准备:** 请将本项目放置在目标代码仓库的根目录下,或在运行时指明要监控的 Git 仓库路径。默认情况下,工具会在当前工作目录查找 `.git` 仓库并提取改动。确保您在一个 Git 仓库目录中运行应用,并且已有未提交的代码改动,这样 `code_repo.py` 模块才能获取到正确的 diff 信息。 * **模型 API 密钥:** 若使用智谱 ChatGLM 在线接口,请先前往**智谱AI开放平台**申请 API Key。获得密钥后,可以将其配置为环境变量,例如: ```bash export ZHIPUAI_API_KEY="你的ChatGLM_API密钥" 确保在运行 `ui_main.py` 前已设置好密钥(或按照 `llm_engine.py` 中的提示将密钥直接填入代码),否则在请求 ChatGLM 接口时会认证失败。 ``` 完成上述依赖安装和配置后,即可开始使用 llm_repo。 ## 启动方式 请按照以下步骤启动 llm_repo 的图形界面并生成提交信息: 1. **进入项目目录:** 在终端(Terminal)中切换到包含 `ui_main.py` 的 llm_repo 项目目录(确保此目录在一个 Git 仓库内并已配置好依赖)。 2. **启动应用程序:** 运行命令 `python ui_main.py`。程序将启动 Gradio 本地服务器,并在终端中输出本地访问链接(默认情况下为 http://127.0.0.1:7860 或类似地址)。 3. **访问Web界面:** 打开浏览器,访问上述输出的本地链接,即可看到 llm_repo 提交信息生成工具的界面。界面上会显示当前 Git 仓库的最新改动摘要,并提供“生成提交信息”等交互控件。 4. **生成提交信息:** 在Web界面中点击相应按钮,llm_repo 将调用各模块自动完成预处理、检索和文本生成,最终在界面上给出**建议的提交信息**文本。您可以在文本框中查看和编辑该提交信息。如果满意,可以复制此提交说明用于 `git commit`,也可以根据需要在提交前做进一步修改。 整个启动和使用过程非常简便:启动服务→打开界面→一键生成提交信息。通过图形界面,开发者无需记忆命令行参数,即可直观地获取高质量的提交说明。 ```bash python ui_main.py # 这将启动 Gradio Web 服务,默认在浏览器中自动打开地址 http://localhost:7860。 ``` ## 模型接口说明 llm_repo 的核心是大语言模型推理接口(`llm_engine.py`),其设计为 **易于扩展和替换** 。目前默认集成的是**智谱 ChatGLM** 模型接口(通过 ZhipuAI 提供的 API)。ChatGLM 擅长中文理解和生成,因此非常适合输出详尽的中文提交信息。 项目采用模块化的方式封装 LLM 调用逻辑,如果您有不同的需求,可以将其替换为其他模型或服务,而不改变整体流程。例如: * **更换为其他在线API:** 您可以修改 `llm_engine.py` 来调用 OpenAI 的 GPT 系列接口、Azure 的认知服务 API 等国内外其他大模型服务,只需将相应的API调用和参数填入即可。 * **使用本地部署模型:** 如果希望在离线环境或本地GPU上运行,llm_repo 同样支持替换为本地模型。例如,您可以加载本地的 **LLaMA** 或 **百川 (Baichuan)** 等开源大模型(通过 Hugging Face Transformers 等工具),并将 `llm_engine.py` 中的推理调用指向本地模型。从而实现无需外网依赖的提交信息生成。请注意,本地运行超大模型可能需要高性能的计算资源和充足的内存支持。 * **模型配置:** 无论使用哪种模型,您都可以根据需要调整提示词(prompt)模板、温度等生成参数。在 `llm_engine.py` 中,这些细节都可以配置,从而影响生成提交信息的风格和详细程度。默认的配置针对提交信息场景进行了优化,兼顾简洁和信息量。 通过上述机制,llm_repo 并不局限于特定的大语言模型接口。开发者可以根据实际情况选择或集成最适合的 LLM,为提交信息生成提供支持。这种灵活性使得本项目能够跟随大语言模型技术的发展而演进。 ## 常见问题与解决方案 ### 问题 1:无法识别代码仓库 **原因** :路径选择错误或文件夹不是有效的 Git 仓库 **解决方法** : * 确保选择的是包含 `.git` 子文件夹的根目录 * 如果是新仓库,请先运行 `git init` ### 问题 2:联网搜索无结果 **原因** : * API Key 配置错误 * 网络连接问题 * 搜索引擎限制 **解决方法** : * 检查网络连接 * 验证 API Key 是否正确 * 尝试更换搜索引擎 ### 问题 3:生成的提交信息质量不高 **优化方法** : * 提供更完整的本地知识库文档 * 调整大语言模型的参数 * 尝试启用思维链模式 * 在 `llm_engine.py` 中修改 `prompt` 属性,可根据团队提交规范调整模型输出风格。例如: * ```python self.prompt = ''' 你是一个资深 Python 开发者。请根据以下代码修改内容,按照 Angular 提交规范编写中文提交信息: 类型: [feat|fix|docs|style|refactor|test|chore|breaking] 范围: 模块名称 主题: 简短描述(不超过50字符) ``` ## TODO / 后续计划 当前版本的 llm_repo 已实现了基本的功能,但仍有不少改进空间。未来的开发计划包括以下几个方面: * **优化检索模块精度:** 提升代码检索和知识检索的智能性。未来可能引入更高级的算法(例如使用向量嵌入进行语义搜索)来获取更相关的文档片段,过滤噪音信息,确保提供给模型的上下文更精准,从而提高提交信息生成的准确度。 * **支持多语言提交信息:** 目前系统偏重于生成中文提交说明,后续将考虑支持多语言环境。例如,针对英文项目输出英文提交信息。为此可集成擅长英文的 LLM(如 GPT-4 等)或者引入翻译模块,以满足不同语言开发团队的需求。 * **自定义提交风格规范:** 增加提交信息风格配置选项,使生成的说明符合特定规范或模板。例如,支持**Conventional Commits**风格的前缀(如 feat, fix 等)自动插入,或根据项目要求套用自定义的提交信息格式。通过提供参数或配置文件,用户可以定义希望的提交信息结构,LLM 将据此进行格式化生成。 * **集成开发流程:** 为提高工具的实用性,计划提供更多与开发流程集成的方式。例如,开发命令行接口(CLI)或 Git Hook 脚本,使得在终端执行 `git commit` 时自动调用 llm_repo 生成提交信息,或提供 VSCode 插件在代码编辑器中一键生成提交说明。这样的集成将进一步简化使用成本,让智能提交信息生成融入开发者的日常工作流。 随着上述功能的逐步实现,llm_repo 将变得更加智能、强大,满足更多样化的需求。如果您对此项目有任何建议或想法,欢迎提出,一起完善这个大语言模型驱动的提交信息生成工具!