AI 自动生成 Git 提交信息:原理、实践与 commitgpt 工具详解

news2026/5/5 21:31:38
1. 项目概述当代码提交信息遇上AI如果你和我一样每天都要在终端里敲下无数条git commit -m “...”那你肯定也经历过那种“词穷”的尴尬时刻。修复了一个小bug该写点啥是“fix bug”还是“修复了一个由XX引起的XX问题”完成了一个新功能又该如何清晰、专业地概括改动让未来的自己和同事一目了然写提交信息这件小事看似微不足道却直接影响着代码库的可读性、可维护性甚至是团队协作的效率。RomanHotsiy/commitgpt 这个项目就是瞄准了这个看似微小却普遍存在的痛点。它的核心想法非常直接利用当下强大的大语言模型比如 OpenAI 的 GPT 系列自动为你生成高质量、符合规范的 Git 提交信息。你不再需要为“今天改了点啥”而绞尽脑汁只需像往常一样执行git add然后运行 commitgpt它就会分析你的暂存区改动并生成一条条清晰、结构化的提交说明供你选择或直接使用。这不仅仅是一个偷懒的工具。在我多年的开发生涯中见过太多因为提交信息模糊而导致的“考古”难题——为了搞清楚三年前某行代码为什么被修改不得不翻遍聊天记录和模糊的提交日志。一个优秀的提交信息本身就是项目文档的重要组成部分。commitgpt 的价值在于它通过 AI 将“写好提交信息”这个需要经验和意识的任务变成了一种可自动化、标准化的实践尤其适合快节奏的团队、开源项目维护者以及任何希望提升项目工程化水平开发者。2. 核心原理与架构拆解2.1 工作流程从代码差异到自然语言commitgpt 的核心工作流程可以概括为一个清晰的管道Pipeline。理解这个流程有助于我们明白它在哪里发挥了作用以及潜在的优化点在哪里。首先当你运行commitgpt命令时工具的第一步是获取代码变更。它并不是去猜测或读取你的想法而是实实在在地调用git diff或git diff --cached命令获取当前工作区或暂存区staging area与上一次提交之间的差异。这个差异diff是原始的、面向行的文本信息包含了哪些文件被增加、删除或修改以及修改的具体内容。接下来commitgpt 会扮演一个信息提炼者的角色。原始的git diff输出可能非常冗长尤其是当修改涉及多个文件时。直接将这些原始文本扔给 AI不仅会消耗大量 Token影响成本和速度还可能让 AI 抓不住重点。因此commitgpt 内部通常包含一个预处理或总结模块。这个模块可能会做以下几件事过滤无关信息忽略只改变空格、换行符的改动或者排除某些特定类型的文件如package-lock.json这种自动生成的文件。提取关键变更尝试识别出新增的函数、修改的类、修复的错误信息字符串等作为后续提示词Prompt的补充材料。结构化差异信息将 diff 按文件组织并可能附带上文件路径和变更类型增、删、改。然后进入提示词工程的核心环节。commitgpt 会将处理后的代码变更信息嵌入到一个精心设计的提示词模板中。这个模板是决定生成质量的“咒语”。一个基础的模板可能长这样你是一个经验丰富的软件工程师负责编写清晰、简洁的 Git 提交信息。 请根据以下代码变更生成一条合适的提交信息。 遵循 Conventional Commits 规范格式为类型[可选的作用域]: 描述 代码变更 {{这里填入处理后的 diff 信息}} 请只输出提交信息本身不要有其他解释。更高级的模板可能会指定类型如 feat, fix, docs, style, refactor, test, chore要求描述正文body和脚注footer甚至引用相关的 Issue 编号。最后调用 AI 模型并返回结果。commitgpt 将组装好的提示词发送给配置好的大语言模型 API如 OpenAI GPT-3.5/4, Anthropic Claude或本地部署的模型。接收到 AI 的回复后工具会将其解析并呈现给用户。通常它会提供多个选项供用户选择用户可以直接确认使用也可以在此基础上进行编辑。2.2 技术栈与依赖关系commitgpt 作为一个 CLI命令行界面工具其技术选型充分考虑了轻量、高效和跨平台。核心语言项目主要使用Go语言编写。这是一个非常明智的选择。Go 编译后是单个静态二进制文件无需复杂的运行时环境用户下载后即可运行部署和分发成本极低。其出色的并发性能和简洁的语法也非常适合编写这种需要网络请求调用 AI API的 CLI 工具。Git 交互通过 Go 的os/exec包或更封装的 Git 库如go-git来执行git diff等命令直接与用户的 Git 仓库交互。AI 模型集成这是项目的核心依赖。它需要集成一个或多个 AI 提供商的 SDK。例如对于 OpenAI会使用其官方 Go SDK 或通过 HTTP 客户端直接调用 REST API。项目架构上通常会设计一个抽象的“Provider”接口使得支持新的 AI 后端如切换至 Claude、本地 Llama 模型变得相对容易。配置管理用户需要配置 API 密钥、模型选择如gpt-4-turbo-preview、语言偏好等。这些配置通常通过环境变量、配置文件如~/.config/commitgpt/config.yaml或命令行参数来管理。一个设计良好的工具会提供commitgpt config之类的子命令来方便用户设置。输出与交互为了提供良好的用户体验commitgpt 可能会集成终端 UI 库例如cobra用于构建强大的 CLI 命令结构和survey用于交互式选择提交信息让用户可以在终端内方便地浏览和选择 AI 生成的选项。注意使用 commitgpt 意味着你的代码变更内容diff会被发送到第三方 AI 服务提供商。对于处理敏感代码或受严格合规要求如 GDPR HIPAA的项目这是一个必须严肃考虑的安全与隐私问题。务必阅读所使用 AI 服务的数据处理政策或考虑使用支持本地模型如通过 Ollama 部署的 fork 版本。3. 从零开始安装与配置实战3.1 多种安装方式详解commitgpt 作为开源项目通常提供多种安装方式以适应不同用户的环境和偏好。1. 使用包管理器安装最推荐对于 macOS 用户如果安装了 Homebrew安装往往只是一条命令的事brew install commitgptHomebrew 会自动处理二进制文件的下载、安装和链接。对于 Linux 用户如果项目提供了 Snap 包或 AppImage也可以方便地安装。这种方式的好处是易于管理和更新。2. 直接下载预编译二进制文件这是最通用、依赖最少的方式。你需要前往项目的 GitHub Releases 页面找到对应你操作系统Windows, macOS, Linux和处理器架构amd64/x86_64, arm64的最新版本二进制文件。下载后通常需要将其移动到系统路径下并赋予执行权限。# 以 Linux/macOS 为例 wget https://github.com/RomanHotsiy/commitgpt/releases/download/v0.1.0/commitgpt_darwin_arm64 -O commitgpt chmod x commitgpt sudo mv commitgpt /usr/local/bin/ # 或 ~/bin/ 等 PATH 包含的目录Windows 用户下载.exe文件后可以将其所在目录添加到系统环境变量PATH中。3. 从源码编译安装适合开发者或需要定制功能的用户。前提是本地需要安装 Go 开发环境1.19。git clone https://github.com/RomanHotsiy/commitgpt.git cd commitgpt go build -o commitgpt ./cmd/commitgpt # 假设主程序在 cmd/commitgpt 目录这种方式你可以查看和修改源码但需要自己处理后续的更新。3.2 关键配置步骤与避坑指南安装完成后配置是让 commitgpt 工作的关键。通常第一次运行时会引导你进行配置。1. 设置 AI API 密钥这是核心配置。以 OpenAI 为例commitgpt config set openai-api-key sk-你的真实API密钥重要避坑点不要将密钥硬编码在脚本或提交到代码库永远使用配置命令或环境变量OPENAI_API_KEY来设置。密钥权限在 OpenAI 平台创建密钥时仅授予必要的最小权限。如果 commitgpt 只用于聊天补全就不要给密钥分配图像生成或审核等权限。环境变量优先许多工具会遵循“环境变量 配置文件 默认值”的优先级。在 CI/CD 环境中通过环境变量注入密钥是最安全、最方便的做法。2. 选择模型与配置参数不同的模型在效果和成本上差异巨大。# 设置默认使用的模型 commitgpt config set model gpt-4-turbo-preview # 设置温度参数控制创造性0.0较确定1.0更多变 commitgpt config set temperature 0.7 # 设置最大生成长度Token数 commitgpt config set max-tokens 200实操心得gpt-3.5-turbo速度快、成本低对于简单的代码变更生成提交信息完全够用是性价比之选。gpt-4系列理解更深刻生成的描述更精准、更贴近“工程师思维”尤其适合复杂的重构或涉及多个模块的更改但成本和延迟更高。temperature建议设置在 0.7 左右能在“规范性”和“一点创造性”之间取得平衡避免生成过于千篇一律或天马行空的信息。3. 配置提交信息规范为了让 AI 生成符合你团队规范的提交信息你需要“训练”它。最好的方式就是在提示词模板中明确规则。 你可以查看 commitgpt 的配置文件通常在~/.config/commitgpt/config.yaml找到prompt_template部分进行修改。例如强制要求遵循 Angular 提交规范prompt_template: | 你是一个资深开发者。请为以下代码变更编写一条 Git 提交信息。 必须严格遵循 Conventional Commits 规范。 格式类型(作用域): 简短描述 空一行 详细描述可选 空一行 脚注如关闭的IssueCloses #123可选 可用的类型包括feat, fix, docs, style, refactor, test, chore。 代码变更 {{.Diff}} 只输出最终的提交信息。通过这样明确的指令AI 生成的内容格式就会稳定很多。4. 核心功能深度使用与定制4.1 基础使用替换你的git commit -m最常用的场景就是替代手动编写提交信息。在完成代码修改并添加到暂存区后不再运行git commit -m “...”而是git add . commitgpt运行后commitgpt 会展示它生成的提交信息通常会给 2-3 个选项。你可以使用上下键选择按回车确认。确认后工具会自动执行git commit -m “生成的提交信息”。一个真实的操作示例 假设我修改了一个 API 路由文件修复了用户查询参数解析的一个边界条件错误并添加了相应的错误处理日志。我执行git add app/api/user.go。我执行commitgpt。终端显示? 选择一条提交信息 (使用方向键) fix(api): 修复用户查询参数空值解析错误并添加日志 fix(user): 处理缺失的查询参数以避免panic chore: 更新用户API错误处理逻辑我选择第一条按回车。终端输出[main a1b2c3d] fix(api): 修复用户查询参数空值解析错误并添加日志提交完成。这个过程无缝衔接了现有的 Git 工作流几乎没有学习成本。4.2 高级特性范围、交互与历史指定 diff 范围默认情况下commitgpt 查看的是暂存区的变更。但你也可以让它分析任意两次提交之间的差异这对于为过去的、信息不完整的提交进行“重写”或生成变更日志非常有用。# 生成上次提交的改进信息针对 --amend 场景 commitgpt --last # 生成从 commitA 到 commitB 所有变更的概括信息 commitgpt --range commitA..commitB交互式编辑与确认好的工具不会强迫你接受 AI 的结果。commitgpt 在展示候选信息后通常会提供一个“编辑”选项。选择编辑后它会用你配置的默认编辑器如 Vim, VSCode打开一个临时文件里面是 AI 生成的信息你可以自由修改后再保存提交。这保证了人对提交信息的最终控制权。多语言支持如果你的团队使用中文可以配置 commitgpt 生成中文提交信息。commitgpt config set language zh-CN这本质上是在提示词模板中加入了“请使用中文回答”的指令。实测下来主流模型对中文的生成质量已经非常高。自定义提示词模板这是 commitgpt 最强大的定制功能。你可以创建完全属于自己的提示词模板文件如~/.config/commitgpt/my_template.tmpl并在配置中指定它。commitgpt config set prompt-template-path ~/.config/commitgpt/my_template.tmpl在你的模板里你可以定义固定的提交信息前缀/后缀。要求 AI 重点分析某些特定文件类型的变更。引入外部信息例如从package.json读取当前版本号并包含在提交信息中。指定更严格的格式甚至要求生成符合特定内部模板如 JIRA Issue 键值自动链接的信息。4.3 集成到现有工作流钩子与别名为了达到“无感”使用的境界将其集成到你的日常 Git 工作流中是关键。Git 别名为长命令设置一个简短的别名是开发者的基本操作。在你的~/.gitconfig文件中添加[alias] cg !commitgpt # 或者更智能的添加所有变更并调用 commitgpt acg !git add -A commitgpt之后你就可以用git cg来代替commitgpt命令了。Git Commit 钩子更自动化的方式是使用 Git 的prepare-commit-msg钩子。这个钩子在默认提交信息编辑器打开之前被调用可以用于自动生成提交信息。在你的项目.git/hooks/目录下或通过git config core.hooksPath设置的全局钩子目录创建文件prepare-commit-msg。写入如下内容#!/bin/bash # 如果已经提供了提交信息-m 参数或 --amend则跳过 if [ -n $2 ] || [ $3 message ] || [ $3 merge ] || [ $3 squash ]; then exit 0 fi # 调用 commitgpt 生成信息并写入到钩子接收的第一个参数提交信息文件中 commitgpt --output $1赋予该文件执行权限chmod x .git/hooks/prepare-commit-msg。 配置好后当你执行git commit不带-m时弹出的编辑器里就会预先填充好由 commitgpt 生成的提交信息你可以直接使用或在此基础上修改。注意事项使用钩子需要谨慎。首先它会影响所有没有-m参数的提交。其次在 CI/CD 环境或自动化脚本中可能会因为网络问题调用 AI API 失败导致提交阻塞。建议初期先使用别名手动调用待稳定后再考虑钩子方案。5. 效果评估、调优与局限性分析5.1 如何评估 AI 生成的提交信息质量引入 AI 辅助工具后我们不能做“甩手掌柜”需要建立一套评估机制确保生成的信息真正有用。1. 准确性检查这是底线。生成的信息必须准确反映代码变更的实质。一个常见的错误是 AI 可能会“过度解读”或“臆测”某个修改的意图。例如你只是重命名了一个变量AI 却生成了“优化了算法性能”。每次使用后花 10 秒钟快速浏览一下生成的描述是否与你的修改意图吻合。2. 规范符合度检查是否符合你设定的规范如 Conventional Commits。类型feat, fix 等使用是否恰当描述是否以动词开头作用域是否准确可以配置一些简单的本地钩子或使用commitlint这样的工具在提交前进行自动校验将 AI 生成的信息也纳入校验范围。3. 信息量与清晰度好的提交信息应该能让未来的阅读者在只看日志的情况下就对变更有个大致了解。避免过于笼统如“更新了代码”或包含无用信息。AI 有时会生成很长的描述需要你手动精简核心。4. 一致性观察一段时间内AI 为类似性质的变更生成的提交信息在风格和术语上是否保持一致。不一致的日志会降低可读性。这需要通过优化提示词模板来改善。个人调优心得我通常会保留一个“提交信息日志本”记录下那些我认为 AI 生成得特别好的例子和特别差的例子。分析差例子的原因是 diff 信息太杂乱还是提示词模板对某种类型的变更指导不足然后有针对性地调整我的工作习惯比如更频繁地提交、保持更小的变更集或修改提示词模板。5.2 常见问题与局限性应对没有任何工具是完美的commitgpt 在实际使用中也会遇到一些挑战。1. 对于大型或结构复杂的 Diff 处理不佳当一次提交包含几十个文件的改动涉及功能新增、Bug 修复、重构混杂在一起时AI 很难生成一条清晰、聚焦的提交信息。它可能会试图概括所有内容导致信息冗长且重点不明。解决方案倡导小颗粒度提交。这是 Git 的最佳实践也是发挥 commitgpt 效力的前提。将大功能拆分成一系列逻辑独立的小提交每个提交只做一件事。这样每次 diff 都更简单AI 也更容易生成精准的描述。可以使用git add -p交互式暂存来精心组织每次提交的内容。2. 对领域特定知识或内部术语理解有限AI 模型是在通用代码和文本上训练的对你公司或项目内部特有的缩写、模块名、业务黑话可能不理解导致生成的信息用词不准确。解决方案在提示词模板中提供“上下文”或“术语表”。你可以在模板开头加入一段描述“本项目是一个电商后端系统主要模块有user用户、order订单、payment支付。‘SKU’指库存单位‘OMS’指订单管理系统。” 这样能显著提升 AI 生成信息的专业性和准确性。3. 成本与延迟问题频繁调用 GPT-4 等高级模型对于个人或小团队可能产生不可忽视的 API 成本。同时网络请求也会带来提交延迟通常 2-5 秒。解决方案模型降级对于日常小修小改在配置中切换到gpt-3.5-turbo它几乎零延迟且成本极低。本地模型探索 commitgpt 是否支持或寻找支持本地模型如通过 Ollama 运行的 CodeLlama、DeepSeek-Coder的衍生版本。本地调用零成本、零延迟且数据完全私有但生成质量可能略低于顶级商用模型。缓存机制一些高级的用法是为相似的 diff 生成的信息建立本地缓存基于 diff 的哈希值下次遇到类似改动时直接使用缓存避免重复调用 API。4. 无法理解“为什么”提交信息的“正文”部分常常需要解释此次变更的动机或背景。AI 能看到“改了啥”代码 diff但无法知晓“为什么要这么改”产品需求、问题讨论、性能考量。这部分信息必须由开发者手动补充。解决方案将 commitgpt 定位为“初稿生成器”。它为你生成一个规范、准确的“标题”简短描述。你在此基础上使用编辑功能在正文部分补充上下文、理由、以及可能带来的影响。这是一个完美的人机协作模式AI 处理格式和基础描述人注入意图和上下文。6. 进阶场景团队集成与工程化实践6.1 在团队中推广与标准化将 commitgpt 引入团队不仅仅是推荐一个工具更是推动一项工程实践。1. 统一配置与共享为了避免每个成员单独配置的麻烦可以创建一个团队共享的配置文件模板。这个模板包含公司/项目规定的提交信息格式提示词模板。推荐的 AI 模型和参数平衡成本与效果。可能用到的 Git 别名或钩子脚本。 可以将这个模板放在项目仓库的docs/或.devcontainer/目录下并在 onboarding 文档中说明如何应用。2. 与代码审查流程结合在代码审查Code Review环节可以将“提交信息是否清晰”作为一项审查点。鼓励审查者不仅看代码也看提交信息。如果提交信息是由 commitgpt 生成后未经修改直接使用的审查者可以快速判断其准确性这本身也是对 AI 生成质量的一种持续监督和训练。3. 作为生成变更日志的基础遵循 Conventional Commits 规范的一个巨大好处是可以方便地自动生成变更日志CHANGELOG。使用standard-version或semantic-release等工具可以自动从格式良好的提交历史中提取feat:、fix:等类型的提交归类生成版本发布说明。commitgpt 确保了提交信息的规范性从而让自动化生成变更日志成为可能极大减少了发布前的手动整理工作。6.2 安全、合规与私有化部署考量对于企业级应用安全与合规是无法绕过的话题。1. 代码隐私如前所述将代码 diff 发送给 OpenAI 等第三方服务存在潜在的代码泄露风险。对于闭源商业项目或处理敏感数据的项目这是不可接受的。解决方案寻求支持本地模型的方案。这可能是 commitgpt 的一个配置选项也可能是另一个类似但设计为本地优先的工具如git-ai-commit的某些版本。你需要在内网部署一个足够强大的语言模型服务如使用 Ollama、LocalAI 部署 CodeLlama 系列模型并将 commitgpt 的 API 端点指向这个本地服务。虽然初期设置有一定复杂度且模型能力可能稍弱但它彻底解决了数据出域的风险。2. 审计与追溯在严格受监管的行业可能需要记录“谁在什么时候生成了什么样的提交信息”。标准的 commitgpt 可能不提供这种审计日志。解决方案可以开发一个轻量的代理服务Proxy所有 commitgpt 的 API 请求都通过这个代理转发。代理服务可以记录请求的元数据用户、时间戳、diff 哈希和响应生成的提交信息但不存储完整的代码内容以满足审计要求的同时保护代码隐私。3. 网络与可用性依赖外部 API 意味着工具可用性受网络和服务商状态影响。在离线环境或网络不稳定时工具将无法工作。解决方案实现一个降级策略。可以修改 commitgpt 或包装脚本使其在检测到 API 调用失败时自动回退到一种“离线模式”——例如提供一个简单的模板提示用户手动输入或者使用一套基于规则的本地启发式方法生成一个基础信息。这保证了工作流在任何情况下都不会被完全阻断。commitgpt 这类工具的出现标志着 AI 辅助开发正从“炫技”阶段走向“实用”阶段。它解决的并非核心技术难题而是一个长期存在、影响广泛但又被许多人忽视的工程实践问题。通过将 AI 作为编码工作流的“副驾驶”它帮助我们节省了心智负担提升了产出物的规范性。然而它的价值最大化离不开使用者的正确理解和主动调优——明确其能力边界将其用作提升效率的杠杆而非替代思考的拐杖。最终清晰、有用的提交历史仍然是开发者责任心与专业素养的体现AI 在此过程中是一位得力的助手。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2586212.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…