git-memory:为AI编程助手构建持久化项目记忆的轻量级CLI工具

news2026/5/3 6:12:03
1. 项目概述为AI编程助手构建持久化项目记忆如果你和我一样经常与AI编程助手比如Claude、Cursor的AI模式或者一些本地部署的Agent协作开发肯定遇到过这个让人头疼的问题每次开启一个新的对话或会话AI就像得了“健忘症”。它完全不知道这个项目里已经实现了哪些功能不知道我们上周刚决定用PostgreSQL替代了SQLite更不知道在auth_middleware.py里因为一个拼写错误导致过线上故障。结果就是你不得不花大量时间反复解释项目背景或者更糟——眼睁睁看着AI“重新发明轮子”甚至重蹈覆辙。git-memory就是为了解决这个痛点而生的。它不是一个复杂的AI模型而是一个极其轻巧的CLI工具。它的核心思想很朴素既然项目的全部历史都记录在Git里为什么不把这些历史“翻译”成AI能理解和查询的知识呢通过索引你的Git提交历史自动提取功能特性、记录架构决策、映射源代码文件并构建一个可搜索的知识图谱git-memory为你的AI助手装上了“持久化记忆”。从此AI在开始工作前可以先“回忆”一下这个项目的来龙去脉。这个工具特别适合长期维护的中大型项目、多人协作的团队或者任何希望将AI助手从“临时工”升级为“资深成员”的开发者。它让AI的上下文不再局限于单次对话的几万字而是扩展到项目的整个生命周期。2. 核心设计思路与架构解析2.1 问题本质AI的“会话失忆症”与解决方案AI模型尤其是基于大语言模型的编程助手其工作模式本质上是“无状态”的。每次对话它都从一个近乎空白的画布开始。虽然我们可以通过上传文件或粘贴代码来提供上下文但这种方式是零散、临时且不完整的。项目中的许多关键信息——比如“为什么选择这个库而不是另一个”、“某个功能是何时由谁实现的”、“哪些文件共同完成了用户认证模块”——这些知识都隐含在Git提交记录、代码注释和文件结构中却很难被AI直接获取和利用。git-memory的解决方案可以概括为“知识提取 - 结构化存储 - 语义查询”三步走知识提取利用Git作为唯一真实数据源解析提交信息、变更文件、作者和时间。这确保了知识的权威性和可追溯性。结构化存储将提取的原始信息分类、清洗并存入一个轻量级的SQLite数据库。数据库设计了不同的表commits,features,decisions等来承载不同类型的知识。语义查询基于BM25算法构建搜索索引允许用户或AI用自然语言进行查询并返回相关性最高的历史记录。这种设计巧妙地避开了对复杂NLP模型或外部API的依赖实现了“零依赖”和离线工作核心就是一个Python脚本加一个SQLite文件简单却强大。2.2 架构拆解数据流与核心组件让我们深入看看git-memory内部是如何运转的。整个系统的架构可以清晰地分为离线构建和在线查询两个阶段。离线构建阶段git-memory sync当你运行sync命令时会触发以下流水线作业Git日志抓取工具调用git log命令获取所有提交的详细信息包括完整的提交哈希、作者、日期、消息以及变更的文件列表。提交解析与分类解析每条提交信息。这里它巧妙地利用了“约定式提交”规范。如果提交信息以feat:开头它就会被识别为一个“功能”其描述信息会被提取出来单独存入features表并标记状态为active。其他如fix:、refactor:等则归类到commits表。文件目的推断工具会扫描项目中的源代码文件默认如.py,.js等。它并不进行复杂的代码分析而是通过读取文件顶部的模块文档字符串docstring或关键注释来推断这个文件的“目的”purpose。例如一个文件开头有Authentication and authorization middleware using JWT.那么这个文件的目的就会被记录为“JWT认证授权中间件”。交叉引用建立这是构建知识图谱的关键一步。通过提交记录中的“变更文件列表”工具可以自动建立“功能”与“文件”之间的关联。比如一个名为“添加用户登录功能”的feat:提交修改了auth.py和user_model.py那么features表中这条记录的file_paths字段就会包含这两个文件同时files表中这两个文件的related_features字段也会更新。在线查询阶段git-memory query当知识库构建完成后任何查询都会经过以下处理查询预处理对用户输入的自然语言进行分词并查询配置中的synonyms同义词表进行扩展。例如查询“通知”可能被扩展为“通知 OR 提醒 OR 弹窗”。BM25相关性检索在features、decisions、anti_patterns等表的文本字段上进行BM25算法检索。BM25是一种经典的信息检索算法它根据查询词项在文档中出现的频率和文档长度来计算相关性得分比简单的关键词匹配要智能得多。结果融合与排序将来自不同表的检索结果根据其相关性得分进行混合排序最终呈现给用户一个统一的、按相关性降序排列的列表。整个架构的核心是那个隐藏在.git-memory/目录下的memory.dbSQLite文件。它体积小、无需服务、读写速度快完美契合了这个工具“轻量、离线、快速”的定位。注意git-memory的索引是基于Git历史的静态分析。这意味着它无法捕获未提交的本地更改或者那些没有通过提交信息清晰表达出来的“隐性知识”。它的有效性很大程度上依赖于团队良好的Git提交规范。3. 从零开始安装、配置与初始化实战3.1 多种安装方式与选择建议git-memory提供了几种安装方式你可以根据自身的使用习惯和环境来选择。方式一直接下载推荐给大多数用户这是最快捷、侵入性最小的方式。它直接将单个Python脚本下载到你的系统可执行路径下。curl -o /usr/local/bin/git-memory \ https://raw.githubusercontent.com/bandtincorporated8/git-memory/main/git-memory chmod x /usr/local/bin/git-memory优点一步到位全局可用不污染项目目录。注意需要/usr/local/bin的写入权限。如果没有可以替换为~/bin/git-memory并确保~/bin在你的PATH环境变量中。方式二克隆并创建软链接适合喜欢查看源码、或有修改定制需求的开发者。git clone https://github.com/bandtincorporated8/git-memory.git cd git-memory ln -s $(pwd)/git-memory /usr/local/bin/git-memory优点保留了完整的项目仓库方便查看代码、提交Issue或PR。实操心得我更喜欢这种方式。将仓库克隆到~/Developer/tools/这样的目录下然后创建软链接。这样当工具更新时我只需要进入这个目录git pull即可软链接会自动指向最新版本。方式三作为OpenClaw Skill安装如果你的主要工作流深度集成OpenClaw AI助手这是最无缝的方式。cp -r skill/ ~/.openclaw/workspace/skills/git-memory优点在OpenClaw环境中自动集成AI助手能直接调用相关功能。说明这通常需要你的AI助手框架支持Skill插件机制。安装后AI在进入Git项目目录时可能会自动感知并利用git-memory。安装完成后在终端输入git-memory --help如果看到命令列表说明安装成功。3.2 项目初始化与首次同步安装好工具后就可以为你手头的项目开启“记忆”功能了。这个过程非常简单。首先进入你的Git项目根目录cd /path/to/your/awesome-project然后执行初始化命令git-memory init这个命令会在当前目录下创建一个名为.git-memory的隐藏文件夹并在其中生成两个文件memory.db: SQLite数据库文件未来所有知识都将存储在这里。config.json: 项目配置文件初始时可能是一个空配置或包含默认值。重要提示务必确保将.git-memory目录添加到你的.gitignore文件中。因为这个文件夹包含的是从Git历史衍生出的索引数据属于本地构建物不应该被纳入版本控制。你可以手动添加或者git-memory未来可能会提示你添加。接下来进行首次历史同步这是最耗时的一步但通常也很快git-memory sync你会看到类似这样的输出 awesome-project: 1247 new commits (of 1247 scanned) 89 files mapped, 67 feature links ✅ Sync: 1247 new commits, 312 new features (312 total)工具会遍历整个Git历史解析每一个提交扫描源代码文件并构建初始的知识图谱。对于拥有上万次提交的大型项目这个过程也可能在10秒内完成效率非常高。3.3 深度配置让记忆更贴合你的项目默认配置适用于大多数项目但通过调整.git-memory/config.json你可以让工具更智能地理解你的项目领域。让我们详细看看每个配置项。{ file_extensions: [.py, .js, .ts, .go, .rs], src_dirs: [src, lib, app, backend], synonyms: { trade: [signal, position, order, fill], auth: [login, jwt, token, session, oauth, authentication], error: [exception, fault, bug, issue] }, extra_repos: [ { path: ../shared-core-lib, name: core-lib }, { path: ~/work/common-utils, name: common-utils } ] }file_extensions: 指定需要扫描并提取“文件目的”的源代码文件后缀。默认会自动检测一些常见后缀但如果你使用.rs(Rust)或.go最好显式添加进来确保这些文件被分析。src_dirs: 工具会扫描这些目录下的文件。如果你的项目结构比较特殊核心代码放在server或packages目录下就需要修改这个配置避免扫描到node_modules、dist等构建目录。synonyms:这是提升搜索体验的关键配置。你可以为项目领域的特定术语设置同义词。例如在一个交易系统中“trade”交易可能和“order”订单、“fill”成交含义高度相关。这样当AI查询“如何创建一个新order”时所有包含“trade”或“fill”的相关历史记录也能被匹配到大大提高了查全率。extra_repos: 对于微服务架构或使用了子模块、独立工具库的项目这个功能非常有用。你可以将相关的其他Git仓库路径添加进来。git-memory会将这些仓库的历史一并索引构建一个跨项目的统一知识图谱。例如主服务awesome-project和共享库core-lib的决策和功能可以一起被搜索到。配置心得不要急于在项目初期就配置复杂的synonyms。建议先使用默认配置运行几周通过git-memory query观察哪些常用术语搜索效果不佳再有的放矢地添加到同义词表中。extra_repos的配置需要确保提供的路径是有效的Git仓库否则同步时会跳过。4. 核心功能实操查询、记录与知识管理4.1 语义搜索像对话一样查询项目历史git-memory最强大的功能莫过于其语义搜索。你不再需要精确地记住某个提交哈希或功能名称用自然语言描述你的问题即可。基础查询git-memory query 用户登录是怎么实现的输出会按照相关性从高到低排列可能包括功能FEATURE标题为“实现基于JWT的用户登录与刷新令牌”的feat:提交。决策DECISION一条记录着“采用JWT而非Session Cookie进行无状态认证”的架构决策。文件FILEauth/login_service.py文件其目的被推断为“处理用户登录逻辑和JWT生成”。提交COMMIT一些相关的fix:或refactor:提交。每条结果都附带了相关性百分比、类型图标、简要描述以及关键的来源信息如提交哈希、日期你可以快速定位到原始的Git提交或文件。高级搜索技巧文件聚焦搜索如果你只想找文件可以使用file-for命令它专门在文件目的描述中搜索。git-memory file-for 数据库连接池查看特定类型知识你可以单独列出所有已提取的功能或记录的决策。git-memory features # 列出所有功能 git-memory features --status active # 仅列出活跃功能 git-memory decisions --importance high # 列出所有高重要性决策 git-memory anti-patterns # 列出所有反模式记录组合使用通常的工作流是先用query进行宽泛搜索找到感兴趣的方向然后再用更具体的命令深入查看。4.2 主动记录为项目注入“元知识”除了自动从Git历史中提取知识git-memory还允许你主动记录那些无法从代码中直接推断的“元知识”——也就是决策和反模式。这是将团队经验和教训制度化的关键。记录架构决策当团队经过讨论做出一个重要的技术选型或架构决定时立即记录下来。git-memory add-decision 生产环境数据库使用PostgreSQL禁用SQLite \ --context 因业务增长需要事务支持、复杂查询和更好的并发性能 \ --category architecture \ --importance high--context: 记录决策的背景和原因这是未来理解“为什么”的关键。--category: 分类如general通用、architecture架构、policy策略。--importance: 重要性等级normal/high/critical。高级别决策在搜索中会获得更高权重。记录反模式与教训当线上发生一个故障或代码审查中发现一个容易导致问题的糟糕实践时把它作为“反模式”记录下来并制定预防规则。git-memory add-anti 在循环内进行数据库查询导致接口超时 \ --incident-date 2023-10-26 \ --prevention-rule 批量获取数据到内存后再处理或使用JOIN优化查询 \ --severity high--prevention-rule: 这是最有价值的部分它给出了具体的、可操作的避免方法。--severity: 严重性等级low/medium/high/critical。实操心得把记录决策和反模式变成代码审查或事故复盘会后的一个标准动作。这不仅仅是给AI看更是给新加入的团队成员看的“项目生存指南”。我们团队甚至设置了一个Git钩子当提交信息包含[DECISION]或[ANTI]标签时尝试自动解析并调用git-memory记录但手动记录更能保证质量。4.3 知识维护更新、同步与状态查看项目在不断发展git-memory的知识库也需要更新。增量同步在日常开发中你不需要每次都进行全量同步。git-memory sync命令是增量的它只会处理自上次同步以来的新提交速度极快。你也可以使用--if-stale参数让工具自己判断是否需要同步默认判断距离上次同步是否超过1小时。git-memory sync --if-stale # 智能同步避免不必要的开销强制重建如果你修改了config.json比如增加了新的同义词或者怀疑索引数据有损坏可以使用强制重建。git-memory sync --force这个命令会清空现有数据库从头开始重新扫描整个Git历史和文件。对于大型项目这可能需要一些时间。查看知识库状态使用git-memory status可以快速查看知识库的概况。git-memory status输出会显示已索引的提交数、功能数、决策数、反模式数、文件数以及数据库文件大小让你对知识库的覆盖范围有一个直观了解。5. 与AI助手深度集成从工具到工作流5.1 为OpenClaw等AI Agent赋能git-memory的终极价值在于让AI助手真正“理解”你的项目上下文。项目自带的OpenClaw Skill是实现这一目标的最佳实践。技能工作原理自动激活当AI助手如OpenClaw的工作目录切换到一个已初始化git-memory的Git项目时该技能自动激活。会话前同步在AI开始分析或编写代码前技能自动执行git-memory sync --if-stale --quiet确保知识库是最新的。查询前置当AI接收到一个任务指令时例如“添加一个用户通知功能”技能会先拦截这个指令并用git-memory query搜索“通知”、“alert”、“notification”等关键词。上下文注入将搜索到的相关功能、决策、文件信息作为背景知识注入给AI的提示词prompt。AI从而知道“哦这个项目已经有一个邮件通知服务了文件是notifications/email_sender.py上次实现时决定使用SendGrid而不是SMTP。”决策记录在AI执行任务过程中如果它做出了值得记录的选择比如“决定使用Pydantic进行数据验证”技能可以引导或自动调用git-memory add-decision将其记录下来。反模式预警当AI即将编写的代码模式与知识库中记录的某个反模式相似时例如准备在循环内写数据库查询技能可以发出警告提醒AI或你检查。集成示例你可以在AI助手的启动脚本或状态加载器中加入以下逻辑#!/bin/bash # 假设这是你的AI工作区启动脚本 cd /path/to/project # 检查git-memory是否存在且已初始化 if command -v git-memory /dev/null [ -d .git-memory ]; then echo Syncing project memory... git-memory sync --if-stale --quiet # 接下来可以将最新的知识摘要通过某种方式注入AI上下文 # 例如提取最近的高重要性决策和反模式 RECENT_DECISIONS$(git-memory decisions --importance high | head -5) CRITICAL_ANTIS$(git-memory anti-patterns --severity critical) # 将这些信息设置为环境变量或写入一个临时文件供AI读取 export PROJECT_MEMORY_CONTEXTRecent Decisions:\n$RECENT_DECISIONS\n\nCritical Anti-Patterns:\n$CRITICAL_ANTIS fi # 启动你的AI助手 # launch_ai_agent5.2 自动化同步策略为了确保AI助手在任何时候都能获取到最新的项目记忆即使在你没有主动运行同步命令的情况下设置自动化同步是非常有用的。使用Systemd TimerLinux/macOS with systemd对于长期运行在服务器上的开发环境或常驻的AI助手可以设置一个定时任务。# 创建服务单元文件 cat ~/.config/systemd/user/git-memory-sync.service EOF [Unit] Descriptiongit-memory sync for awesome-project [Service] Typeoneshot WorkingDirectory/home/yourname/awesome-project # 替换为你的项目绝对路径 ExecStart/usr/local/bin/git-memory sync --quiet EOF # 创建定时器单元文件 cat ~/.config/systemd/user/git-memory-sync.timer EOF [Unit] DescriptionRun git-memory sync every 4 hours [Timer] OnBootSec5min OnUnitActiveSec4h Persistenttrue [Install] WantedBytimers.target EOF # 启用并启动定时器 systemctl --user daemon-reload systemctl --user enable --now git-memory-sync.timer # 检查状态 systemctl --user status git-memory-sync.timer这样系统会每4小时自动同步一次你的项目记忆确保知识库的时效性。使用Cron通用方案如果你的系统不支持systemd可以使用cron。# 编辑当前用户的cron任务 crontab -e # 添加一行每4小时同步一次安静模式 0 */4 * * * cd /home/yourname/awesome-project /usr/local/bin/git-memory sync --quiet /dev/null 21使用Git钩子开发时同步你还可以在本地开发时利用Git的post-commit钩子在每次提交后自动触发增量同步。# 在项目的 .git/hooks/post-commit 文件中添加如果没有则创建 #!/bin/sh git-memory sync --quiet 2/dev/null || true记得给这个文件添加可执行权限chmod x .git/hooks/post-commit。这种方式能保证你的本地记忆库几乎实时更新。集成心得自动化同步是一把双刃剑。对于活跃度非常高的项目频繁同步如每次提交后可能会有点开销。我个人的策略是在本地使用Git钩子进行近实时同步在共享的CI/CD环境或AI助手服务器上使用定时任务如每小时一次。同时确保.git-memory目录被正确忽略不会意外提交。6. 高级技巧、问题排查与性能优化6.1 处理大型仓库与复杂场景巨型仓库10万提交git-memory在设计中考虑了性能但对于历史极其悠久的巨型仓库首次同步仍可能较慢。你可以考虑只索引最近的历史。分阶段同步目前原生命令不支持但你可以通过创建一个浅克隆仓库或者手动编写脚本分批次运行git log并导入但这属于高级用法。关注.git-memory/memory.db大小即使有数万次提交数据库大小通常也能保持在几MB到几十MB完全在可接受范围内。如果发现异常增大检查是否有大量非文本文件如图片、二进制文件被错误地扫描了其“目的”可以通过file_extensions配置排除。多模块/单体仓库Monorepo对于包含多个独立服务或库的Monorepogit-memory会将其视为一个整体进行索引。这有时可能不够精细。策略你可以利用src_dirs配置分别为不同的子项目创建不同的.git-memory配置虽然工具本身设计为一个项目一个库。更优雅的方式是为每个重要的子目录如/services/auth,/packages/ui分别初始化git-memory然后通过extra_repos配置将它们关联起来不extra_repos用于关联不同的物理仓库。对于Monorepo更好的方法是接受其作为一个整体知识库然后通过查询时包含路径关键词来过滤例如git-memory query auth service 的用户登录。二进制文件与生成代码默认配置可能会扫描到*.min.js,*.pyc等文件或者dist/,build/目录下的生成代码。解决方案在config.json中精确配置file_extensions和src_dirs。例如只包含[.py, .js, .ts, .java, .go]并将src_dirs设置为[src, app, server]排除[dist, build, node_modules, .venv]注意src_dirs是包含而非排除所以你需要仔细规划目录结构。6.2 常见问题与排查指南即使工具设计得很健壮在实际使用中也可能遇到一些小问题。下面是一个快速排查指南。问题现象可能原因解决方案运行git-memory提示command not found1. 安装路径不在PATH中。2. 脚本没有执行权限。1. 检查安装路径which git-memory确保其所在目录如/usr/local/bin已加入PATH。2. 运行chmod x /path/to/git-memory添加权限。git-memory init失败当前目录不是Git仓库根目录。使用cd命令切换到正确的Git项目根目录下再执行。git-memory sync速度非常慢或卡住1. 项目历史非常庞大。2. 扫描到了包含海量文件的目录如node_modules。1. 耐心等待首次同步后续增量同步会很快。2. 检查并优化config.json中的src_dirs排除无关目录。搜索 (query) 结果不相关1. 查询词太宽泛或拼写错误。2. 缺少领域同义词配置。3. 相关的知识未被正确提取如提交信息不规范。1. 尝试更具体的关键词组合。2. 在config.json的synonyms中添加项目特定术语的同义词。3. 检查相关提交是否使用了feat:等规范前缀。对于历史提交可以手动使用add-decision补充记录。文件目的 (file-for) 显示为None或不准1. 文件没有模块文档字符串或清晰注释。2. 文件类型不在file_extensions列表中。1. 这是工具限制它依赖静态文本分析。可以为重要文件手动添加清晰的模块级docstring。2. 在config.json中添加对应的文件后缀。数据库文件 (memory.db) 损坏异常关机或磁盘错误可能导致SQLite数据库损坏。1.首先备份cp .git-memory/memory.db .git-memory/memory.db.backup。2. 尝试修复sqlite3 .git-memory/memory.db PRAGMA integrity_check;。3. 如果修复失败删除损坏的数据库并强制重建rm .git-memory/memory.db git-memory sync --force。在CI/CD流水线中运行失败CI环境可能缺少Git或Python 3.8。确保你的CI镜像或运行环境中已安装git和python3版本3.8。git-memory本身无其他依赖。6.3 性能调优与最佳实践经过在几个不同规模项目上的实践我总结出一些让git-memory运行更顺畅的经验。配置优化精简src_dirs这是提升同步速度最有效的方法。只包含真正存放核心业务逻辑的源代码目录。将第三方库、构建产物、文档目录排除在外。善用synonyms花时间维护一个高质量的同义词表能极大提升搜索命中率。可以从项目的技术栈术语、业务领域术语入手。定期清理虽然git-memory设计上是增量的但如果你删除了大量历史文件或进行了仓库重构如git filter-branch可以考虑定期如每季度进行一次git-memory sync --force来重建一个更干净的索引。工作流集成最佳实践团队规范在团队内推广“约定式提交”确保每个新功能都以feat:开头。这能保证git-memory自动提取功能的准确性。决策记录仪式感将“记录决策”作为技术方案评审通过后的一个必要步骤。可以创建一个简单的脚本将决策模板化。反模式复盘在每次线上事故或严重Bug复盘后不仅修复问题更要将其作为一条anti-pattern记录到git-memory中形成团队的知识资产。新人入职工具对于新加入的开发者除了给他们看文档可以让他们运行git-memory query搜索“架构”、“设计”、“核心流程”等关键词快速了解项目脉络和历史关键决策。与现有工具链结合git-memory可以很好地融入现有开发工具链。例如在VS Code中可以设置一个任务Task来运行git-memory query并将结果输出到终端面板。与fzf等模糊查找工具结合打造一个交互式的项目历史搜索界面。将git-memory status的输出集成到你的终端提示符如Oh My Zsh的主题中随时显示项目记忆的规模。这个工具的魅力在于其简单和专注。它不试图解决所有问题而是精准地瞄准了“AI失忆”这个痛点并用一种极其轻量、可组合的方式给出了优雅的解决方案。我开始使用它后最明显的感受是向AI解释项目背景的时间减少了AI给出的代码建议也更贴合项目的既有模式和规范了。它就像为你的AI助手配备了一位永不疲倦的项目档案馆管理员。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2577395.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…