DevContext:自动化生成AI编程助手上下文文件的智能工具

news2026/4/27 18:52:39
1. 项目概述一个为AI编程助手生成“上下文文件”的智能工具如果你和我一样日常重度依赖 GitHub Copilot 或 Cursor 这类AI编程助手那你肯定也经历过这样的时刻面对一个新项目或者一个庞大的遗留代码库你希望AI能真正理解你的项目规范、架构偏好和代码风格而不是每次都要在聊天框里重复那些“请遵循我们的ESLint规则”、“使用TypeScript严格模式”之类的指令。手动维护一份给AI看的“项目说明书”既繁琐又容易遗漏。这正是 DevContext 这个开源工具要解决的核心痛点。简单来说DevContext 是一个“仓库感知”的AI编码指南助手。它的核心使命是自动化生成一套标准化的、高质量的上下文文件这些文件能直接喂给你的AI助手如 Copilot、Cursor 或 Claude Code让它们从项目一开始就“懂规矩”。它提供了两种极富效率的路径一种是像填问卷一样的引导式“向导”适合从零开始的新项目另一种是“仓库扫描”能智能分析一个已有的公共 GitHub 仓库自动提取技术栈和约定并为你预填向导问卷。最终它会输出copilot-instructions.md、.cursor/rules和agents.md等文件将你的开发上下文固化为AI可读的规范。2. 核心价值与设计思路拆解2.1 为什么需要专门的“AI上下文文件”在AI结对编程成为主流的今天我们与工具的交互方式发生了根本变化。过去我们通过配置eslintrc、prettierrc来约束格式化工具通过编写JSDoc来给人类开发者提供提示。现在我们需要一种新的“配置”来约束和引导我们的AI伙伴。这种配置需要更语义化、更贴近项目决策本身。举个例子一个项目是选择Redux Toolkit还是Zustand进行状态管理这不只是一个技术选型它背后关联着一系列代码组织模式、异步处理逻辑和性能考量。单纯在package.json里列一个依赖项AI无法理解这些关联。DevContext 通过结构化的问答将这些决策及其上下文如选择理由、示例代码、权威文档链接一并捕获并生成到指令文件中。这样当AI助手在编写一个状态切片时它就能直接引用项目中约定的模式和最佳实践而不是从通用知识库里随机发挥。2.2 双模式设计覆盖项目全生命周期DevContext 的“向导”和“仓库扫描”双模式设计精准覆盖了项目从启动到维护的不同阶段这是一个非常实用的设计。向导模式针对的是“规划期”和“创建期”。当你启动一个全新的 Next.js 项目或者为公司内部设计一个新的工具链时你可以通过向导系统地思考并定义项目的各个方面整体架构是 Monorepo 还是单一仓库性能优化要考虑图片懒加载还是路由级拆分代码提交规范是采用 Conventional Commits 还是自定义格式向导通过一系列分类清晰的问题通用、架构、性能、安全、提交等引导你做出有意识的、一致的技术决策。对于不确定的选项你可以使用智能默认值这大大降低了启动门槛。仓库扫描模式则解决了“接管期”和“规范化期”的难题。想象一下你刚加入一个新团队需要快速熟悉一个拥有几百个文件、多年历史的代码库。或者你发现团队内每个成员给Copilot的指令都五花八门导致生成的代码风格不一。这时将仓库URL丢给 DevContext它能在几分钟内完成一次“技术栈审计”并生成一份标准化的AI指令草案。你只需要审查和确认就能立即获得一份与现有代码库高度匹配的上下文文件极大地加速了开发者的上手速度并促进了团队协作的规范性。2.3 输出文件的标准化与可扩展性DevContext 目前聚焦于三个主流AI工具的上下文格式这个选择非常务实copilot-instructions.md: 这是 GitHub Copilot 在仓库根目录或用户全局配置中读取的指令文件。它通常包含项目概述、技术栈、代码风格、要避免的模式等。.cursor/rules: Cursor 编辑器使用此目录下的JSON规则文件来指导其AI行为。这些规则可以非常具体例如“在React组件中优先使用箭头函数”。agents.md: 这是一个更通用的文件可用于配置其他AI代理如Claude Code、Windsurf等描述项目的整体上下文和约束。这种基于模板file-templates/目录下的渲染方式通过lib/template-render.ts实现提供了良好的可扩展性。如果未来有新的AI工具定义了其上下文文件格式社区可以很容易地通过添加新的模板和更新lib/template-config.ts中的映射来支持它。注意虽然输出是标准化的但生成的内容质量完全依赖于向导问答的深度和仓库扫描的准确度。因此在回答向导问题时尽可能详细并仔细审查扫描预填的结果是获得高质量上下文文件的关键。3. 深度使用指南与实操要点3.1 本地运行与环境配置详解让我们从零开始在本地运行起一个 DevContext 实例。这个过程本身也是理解其技术栈Next.js, TypeScript, Tailwind CSS的好机会。首先克隆仓库并安装依赖git clone https://github.com/spivx/devcontext.git cd devcontext npm install这里使用的是 npm你也可以使用 yarn 或 pnpm前提是项目已配置好相应的 lock 文件。安装过程会拉取 Next.js、React、TypeScript、Tailwind CSS 以及用于UI交互的组件库如shadcn/ui等依赖。接下来是关键的一步配置 GitHub 令牌。仓库扫描功能需要调用 GitHub API 来读取公共仓库的元数据和文件结构。没有令牌的话你会很快触及其严格的匿名访问速率限制。# 复制环境变量示例文件如果存在 cp .env.local.example .env.local # 或者直接创建 .env.local 文件 echo GITHUB_TOKEN你的_GitHub_个人访问令牌 .env.local如何获取这个令牌访问 GitHub 网站进入 Settings - Developer settings - Personal access tokens - Tokens (classic)。点击 “Generate new token (classic)”。为令牌起个名字例如 “DevContext Local”。在权限scopes选择中只需要勾选public_repo访问公共仓库信息就足够了。出于最小权限原则不要授予不必要的权限。生成令牌并复制。这个令牌只显示一次请妥善保存。配置完成后启动开发服务器npm run dev终端会输出类似http://localhost:3000的地址。在浏览器中打开它你就会看到 DevContext 的落地页。3.2 向导模式从零构建项目规范的实践点击 “Start from scratch” 或类似按钮进入向导模式。界面通常会被划分为几个核心部分对应不同的技术维度。1. 通用设置与项目骨架这部分会询问项目名称、描述、主要语言如 TypeScript/JavaScript、包管理器npm/yarn/pnpm等基础信息。我的建议是即使是一个小项目也认真填写描述。因为这部分内容会直接成为生成指令文件的开篇介绍帮助AI以及未来的协作者快速理解项目意图。2. 架构与代码组织这是体现设计思想的部分。问题可能包括项目结构是经典的src/分层还是像 Next.js App Router 那样的特性文件夹feature-based folders对于 Monorepo会询问你使用的工具Turborepo, Nx等。路由方案如果是Web项目是使用文件系统路由Next.js, Remix还是声明式路由React Router状态管理选择React Context、Zustand、Redux Toolkit还是其他这里 DevContext 的强大之处在于选择一个选项后它通常会展示example代码示例、infoLines优缺点和docs官方文档链接。务必利用这些信息来做决策而不仅仅是凭熟悉度选择。3. 性能、安全与质量性能是否会启用图片优化、代码拆分、懒加载组件对于SSR/SSG项目缓存策略是什么安全是否使用环境变量校验库如envalidAPI 路由是否有速率限制依赖是否定期审计代码质量LinterESLint、FormatterPrettier、类型检查TypeScript的严格规则是什么是否有提交前钩子husky lint-staged4. 提交与协作规范定义git commit的信息格式。强烈建议选择 “Conventional Commits”因为它能自动化生成 CHANGELOG 并与语义化版本SemVer配合良好。你可以指定提交类型feat, fix, docs等的范围和细节要求。在整个过程中遇到不确定的问题可以大胆点击 “Apply recommended defaults”。DevContext 内置的智能默认值是基于社区常见实践和特定技术栈的最佳实践生成的是一个很好的起点。所有选择在最后生成前都可以随时返回修改。3.3 仓库扫描模式逆向工程与上下文提取对于已有项目仓库扫描模式是真正的“生产力神器”。在主页输入owner/repo如vercel/next.js或完整的 GitHub URL。扫描过程背后发生了什么当 DevContext 扫描一个仓库时它并非简单地下载所有代码那会非常慢且占用大量资源。相反它执行了一系列高效的启发式分析元数据分析读取package.json、composer.json、pyproject.toml等文件确定主要语言、框架、依赖和脚本。目录结构探测通过分析顶级目录和常见模式如src/,components/,app/,lib/,tests/来推断项目结构。配置文件识别查找如.eslintrc.js、prettierrc、tsconfig.json、jest.config.js、tailwind.config.js、.github/workflows/等文件从而推断出工具链、测试框架和CI/CD配置。代码模式抽样可能会抽样读取少量关键文件如路由文件、主组件、工具函数来检测状态管理库的使用通过 import 语句、样式方案CSS Modules, Styled-Components, Tailwind CSS 的类名等。扫描完成后它会将检测到的“信号”转换为向导中对应问题的预填答案。例如在package.json里发现了reduxjs/toolkit和react-redux状态管理问题就会预选为 “Redux Toolkit”。在tailwind.config.js中发现了daisyui插件UI 框架/组件库问题可能就会提及 DaisyUI。你需要做什么你的角色从一个“答题者”变成了“审阅者”和“补全者”。你需要逐一确认快速浏览每个部分确认自动填充的答案是否准确反映了项目的实际情况。扫描不是100%准确的特别是对于自定义程度高的项目。填补空白扫描可能无法探测到所有维度比如一些关于架构决策的“为什么”例如“为什么选择 MongoDB 而非 PostgreSQL”、团队内部特定的命名约定、或尚未形成文件的性能优化原则。这些需要你手动补充。统一与修正有时扫描会探测到历史遗留的、不一致的实践。你可以借此机会在向导中将其统一为团队希望推广的新标准。3.4 生成文件的使用与集成点击生成后DevContext 会提供下载或直接在你的项目目录中创建相应的文件。1. 集成到你的项目对于新项目直接将生成的copilot-instructions.md和.cursor/rules/目录如果使用 Cursor放入项目根目录。将agents.md放入项目文档目录或根目录。对于现有项目建议先将生成的文件与现有文件如果存在进行对比合并。特别是.cursor/rules可能已经有一些个人或团队的规则。你可以手动合并或者用生成的文件作为基础进行增补。2. 激活与验证GitHub Copilot只要copilot-instructions.md存在于仓库根目录Copilot 就会自动读取。你可以在 VS Code 的 Copilot 聊天中尝试询问一些项目特定问题如“我们如何在这里创建一个新的API端点”观察其回复是否遵循了指令中的约定。Cursor将生成的.cursor/rules目录下的 JSON 文件放入你项目根目录的.cursor文件夹中。重启 Cursor 编辑器这些规则就会生效。你可以尝试让 Cursor 生成一些代码看它是否遵守了规则例如是否使用了指定的函数命名方式。3. 持续维护项目不是一成不变的。当团队决定引入一个新的状态管理库或者调整了提交规范时你应该回过头来更新 DevContext 生成的指令文件。你可以直接修改这些 Markdown/JSON 文件更好的做法是重新运行一次 DevContext 向导更新答案后生成新版本的文件这样可以保持决策记录的连贯性和可追溯性。实操心得不要指望生成的文件一劳永逸。将它们视为“活文档”。在项目初期可以每两周回顾一次在稳定期可以每月或在每次重大技术架构调整时回顾并更新。将其纳入团队的代码审查流程中确保AI指令与代码实践同步演进。4. 核心实现机制与技术栈解析4.1 技术栈选型为什么是 Next.js TypeScript Tailwind CSSDevContext 本身就是一个现代 Web 应用的最佳实践示范。它选用 Next.js 作为全栈框架这并非偶然。服务端能力仓库扫描、文件生成等逻辑部分可以在服务端安全地执行如调用 GitHub API避免将敏感逻辑暴露给客户端。Next.js 的 API Routes 和 Server Actions 完美支持这一点。优秀的开发体验Next.js 提供了开箱即用的路由、编译、打包和热重载配合 TypeScript 能极大提升构建复杂表单向导如 DevContext 的向导的类型安全和开发效率。渲染灵活性大部分页面是静态的但向导的交互部分需要客户端状态管理。Next.js 支持混合渲染在需要高度交互的页面使用客户端组件在展示性页面使用服务端组件优化性能。TypeScript对于这样一个管理复杂、嵌套状态所有向导答案、扫描结果的应用至关重要。它确保了在data/*.json中定义的问题和答案结构与lib/template-render.ts中的模板渲染逻辑之间能够保持类型安全。当你贡献新功能时TypeScript 能提前捕获许多潜在的数据结构不匹配错误。Tailwind CSS则负责快速、一致地构建用户界面。DevContext 的界面需要清晰地展示大量选项和说明信息Tailwind 的工具类范式使得实现响应式布局、状态交互如悬停、禁用变得非常高效且能保持设计系统的一致性。4.2 数据驱动的问题与答案引擎DevContext 的核心“知识”存储在data/目录下。这是一个高度结构化的数据驱动设计。data/stacks.json: 定义了可选的“技术栈”起点如 “Next.js (App Router)”、“React (Vite)”、“Python (FastAPI)”等。选择某个栈会加载对应的问题集。data/questions/stack.json: 这是每个技术栈专属的问题配置文件。问题被分组如 “general”, “architecture”每个问题有唯一的id、label显示文本、type单选、多选、文本等。最重要的是answers数组它定义了每个可选项的完整元数据。让我们看一个答案对象的可能结构示例{ value: redux-toolkit, label: Redux Toolkit, icon: SiRedux, example: // Use createSlice and createAsyncThunk\nimport { createSlice, createAsyncThunk } from reduxjs/toolkit;, infoLines: [ Pros: Official, opinionated, reduces boilerplate, includes RTK Query for data fetching., Cons: Learning curve, can be overkill for simple state. ], tags: [state-management, official], docs: https://redux-toolkit.js.org/ }这种设计使得添加新的技术选项变得非常简单只需在相应的 JSON 文件中添加一个新的答案对象并配置好其展示信息和关联数据。lib/template-render.ts会根据用户最终选择的答案value去匹配和填充对应的模板变量。4.3 仓库扫描的智能检测流程仓库扫描是 DevContext 的“黑科技”部分。其流程可以概括为输入解析接收owner/repo构造 GitHub API 请求 URL。分层信息获取调用/repos/{owner}/{repo}获取基础仓库信息。调用/repos/{owner}/{repo}/contents递归或分页获取根目录文件/文件夹列表。针对关键配置文件如package.json调用 API 获取其原始内容。信号提取器一系列专用的检测函数会分析获取到的内容。detectPackageManager(): 查看是否存在yarn.lock、pnpm-lock.yaml或package-lock.json。detectFramework(): 分析package.json中的dependencies和devDependencies寻找next,react,vue,angular等关键词。detectTesting(): 寻找jest.config.*,vitest.config.*,cypress/,playwright.config.*等。detectCodeQuality(): 寻找.eslintrc.*,.prettierrc,tsconfig.json等。结果映射将检测到的字符串信号如 “next”, “jest”映射到内部预定义的、与向导答案value对应的标识符上。这个映射关系很可能维护在一个单独的配置文件中。向导预填将映射后的标识符集合作为初始状态注入到向导的表单中。这个过程在服务端完成充分利用了 GitHub API 和高效的静态分析避免了对整个代码库的克隆因此速度很快。4.4 模板渲染与文件生成当用户完成所有向导问题或确认了扫描预填结果后点击生成便触发了渲染流程。数据收集将表单中所有问题的答案收集起来形成一个完整的“项目上下文”数据对象。模板选择根据用户需要生成的指令文件类型Copilot, Cursor, Agents从file-templates/目录下选择对应的模板文件。这些模板是带有特殊占位符如{{project.name}},{{architecture.stateManagement.value}}的 Markdown 或 JSON 文件。数据注入lib/template-render.ts中的渲染函数会遍历数据对象将占位符替换为具体的值。对于简单值如项目名直接替换。对于复杂值如一个选择了“Redux Toolkit”的答案对象渲染函数会智能地提取其label、example、docs等信息并组织成一段连贯的描述文字插入模板。文件输出将渲染后的纯文本内容返回给前端供用户下载或查看。这种模板与逻辑分离的设计让定制输出格式变得异常简单。如果你想修改生成指令的措辞风格或者为内部团队添加一些特定的章节直接修改模板文件即可无需触碰核心的 TypeScript 逻辑。5. 常见问题、排查技巧与进阶使用5.1 安装与运行问题问题1npm install失败提示依赖冲突或网络错误。排查首先确认 Node.js 版本是否符合项目要求查看package.json中的engines字段或.nvmrc文件。DevContext 可能要求 Node.js 18。解决尝试使用npm cache clean --force清除缓存后重试。如果使用了特定的包管理器如 pnpm确保其版本也兼容。可以尝试删除node_modules和package-lock.json或yarn.lock/pnpm-lock.yaml然后重新运行npm install。对于网络问题可以配置 npm 镜像源。问题2运行npm run dev后页面空白或控制台有编译错误。排查打开浏览器开发者工具查看控制台Console和网络Network标签页。编译错误通常会在终端和浏览器控制台都有显示。解决最常见的 TypeScript 错误是类型不匹配。检查你是否在未安装依赖的情况下修改了types/目录下的文件。运行npm run build或npx tsc --noEmit可以提前发现类型错误。如果错误与模块找不到有关确保所有依赖都已正确安装。问题3仓库扫描功能报错 “API rate limit exceeded” 或 “Bad credentials”。排查这几乎总是与GITHUB_TOKEN环境变量有关。解决确认令牌存在检查项目根目录下的.env.local文件确保GITHUB_TOKENghp_...这一行正确无误且没有多余的空格或换行。确认令牌有效令牌可能已过期或被撤销。去 GitHub 设置中生成一个新的。确认令牌权限确保令牌至少拥有public_repo权限。如果你要扫描私有仓库如果未来版本支持则需要repo权限。重启开发服务器修改.env.local后需要重启npm run dev才能使新的环境变量生效。5.2 向导使用与内容生成问题问题1在向导中某些选项是灰色的显示“Soon”。原因这是 DevContext 开发团队规划中但尚未实现的功能选项。在data/*.json文件中这些答案的disabled属性被设置为true并配有disabledLabel: Soon。处理你可以选择其他已启用的选项。如果你急需该功能可以查阅项目的 GitHub Issues看是否有相关讨论或者自己尝试贡献代码来实现它。问题2生成的copilot-instructions.md文件内容感觉比较泛不够具体。分析与解决这是由问答的深度决定的。向导提供的答案是“选项”但每个选项下的“示例”、“文档”和“说明”是固定的。要获得更具体的指令你需要善用“自定义”或“其他”文本框很多问题在提供选项的同时允许你输入自定义文本。在这里你可以详细描述你团队的特定约定比如“组件 Props 必须使用type定义而非interface”“所有 API 响应必须包裹在{ data: T, error: null }格式中”。事后手动编辑将生成的文件作为基线然后手动添加更细致的规则。例如在copilot-instructions.md中增加一个“特定模式”章节用代码块展示你希望 AI 遵循的精确模式。贡献更丰富的答案如果你认为某个技术选项的示例或说明不够好可以向 DevContext 项目提交 Pull Request丰富data/下的对应答案内容。问题3扫描现有仓库后发现很多问题的预填答案是空的或“未检测到”。原因扫描检测依赖于仓库中是否存在标准化的配置文件和明显的代码模式。如果项目结构非常独特、使用了冷门工具链或者配置是高度自定义的如通过脚本动态生成检测就可能失败。解决手动在向导中补充这些信息。扫描功能的价值在于它能帮你完成70%-80%的填充工作剩下的20%-30%关键决策和特殊约定仍需人工介入。这仍然比从零开始填写所有问题要高效得多。5.3 贡献与自定义开发如何添加一个新的技术栈假设你想为 “SvelteKit” 项目添加支持。更新栈列表在data/stacks.json中添加一个新的栈对象包含id(如sveltekit)、label、icon和关联的questionsFile路径。创建问题文件在data/questions/下创建sveltekit.json。你可以参考现有的nextjs-app.json或react-vite.json的结构根据 SvelteKit 的特点调整问题。例如路由问题可能变成“是否使用 SvelteKit 的布局Layout文件”。可选添加约定文件在conventions/目录下创建sveltekit.json定义一些 SvelteKit 特有的代码片段或约定这些可以在模板中被引用。测试运行npm run validate:ids确保问题ID唯一。运行npm run dev启动应用检查你的新栈是否出现在选择列表中并且向导能否正常工作。如何添加一个新的问题或答案定位文件找到你想要修改的技术栈对应的问题 JSON 文件。添加问题在合适的section下新增一个问题对象。确保id全局唯一。添加答案在该问题的answers数组中新增答案对象。为其提供有意义的value、label、example和docs。更新类型定义如果新增了字段或改变了数据结构记得同步更新types/wizard.ts中的 TypeScript 接口定义以保持类型安全。代码结构建议来自官方贡献指南逻辑复用当你在多个组件中编写类似的交互逻辑如表单验证、数据获取时将其抽象为自定义 React Hook放在hooks/目录下。这提高了代码的可维护性和可测试性。类型安全所有共享的数据结构尤其是向导问题、答案、扫描结果等核心类型都应定义在types/目录下。在组件中使用这些类型而不是内联定义。组件职责单一保持 UI 组件在components/下专注于渲染和用户交互。将复杂的状态管理和副作用逻辑剥离到 Hook 或 Context 中。5.4 性能优化与生产部署考虑虽然 DevContext 主要是一个本地开发工具但如果你希望将其部署到内网供团队使用或者其交互变得复杂以下点值得关注1. 仓库扫描的优化缓存策略对同一个仓库的多次扫描请求可以在服务端或利用 Next.js 的数据缓存设置短期缓存避免重复调用 GitHub API节省令牌额度并提升响应速度。增量扫描如果支持扫描私有仓库或特定分支可以实现增量扫描只分析自上次扫描后有变动的文件。2. 前端性能向导状态管理向导表单状态可能非常复杂。使用像Zustand或React ContextuseReducer这样的状态管理方案比单纯用useState更利于管理和性能优化避免不必要的深层组件重渲染。代码分割利用 Next.js 的动态导入dynamic import将不同的向导步骤或功能模块拆分成独立的代码块实现按需加载加快初始页面加载速度。3. 部署注意事项环境变量在生产环境中GITHUB_TOKEN需要通过部署平台如 Vercel, Netlify的环境变量设置界面进行配置而不是写在代码或文件中。API 路由安全如果扫描逻辑放在 Next.js API Route 中需要考虑添加基本的速率限制和请求验证防止滥用。静态导出如果向导逻辑完全可以在客户端运行可以考虑使用next export将应用静态化部署到任何静态托管服务上成本更低。6. 总结与个人实践体会使用 DevContext 几个月下来它已经成为了我启动任何新项目的标准动作。它强迫我在写第一行代码前花上15分钟系统性地思考项目的技术轮廓这个习惯带来的长期收益远超投入。对于团队项目我们将生成的copilot-instructions.md纳入版本控制任何架构调整都需要同步更新这份文件这无形中成为了一种轻量级但极其有效的技术决策文档。最让我惊喜的是“仓库扫描”功能在知识传承上的价值。我曾用它快速分析了一个离职同事负责的复杂中间件项目生成的指令文件让我在半小时内就理解了项目的技术选型约束和代码风格顺利接手。我也开始用它来审计团队内一些老项目将那些“口口相传”或深藏在代码注释中的惯例显式化地提取出来生成了统一的团队级AI编码指南。当然工具不是银弹。它生成的指令是“静态的”而项目是“动态的”。AI助手Copilot、Cursor在理解复杂、模糊的上下文时仍有局限。因此DevContext 生成的文件更像是一份优秀的“宪法”和“词典”确立了基本原则和词汇表但具体的“法律解释”和“行文风格”还需要开发者在日常编码中通过具体的提示词prompt去微调和强化。最后给想深度使用的朋友一个小建议不要只把它当做一个文件生成器。去阅读它的源码特别是data/目录下的问题设计和lib/template-render.ts的渲染逻辑。你会学到如何将模糊的“最佳实践”转化为结构化的、可操作的数据这种思维模式对于设计任何复杂的配置系统或开发者工具都是极其宝贵的经验。

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