Portable Spec Kit:用Markdown文件实现AI辅助开发的规格持久化框架

news2026/5/7 4:39:25
1. 项目概述一个文件改变你的AI编码方式如果你和我一样每天都要和Claude、Cursor、Copilot这些AI编码助手打交道那你肯定也经历过这种痛苦每次打开一个新项目或者隔了几天再回来都得从头开始解释一遍项目背景、技术栈、代码规范。更别提那些中途换了个AI工具或者电脑重装系统后所有上下文都消失得一干二净的绝望时刻了。我们花在“重建上下文”上的时间可能比真正写代码的时间还多。Portable Spec KitPSK就是为了解决这个痛点而生的。它不是什么复杂的命令行工具也不是需要你安装一堆依赖的庞然大物。它就是一个Markdown文件——一个你扔进任何项目根目录就能让所有AI助手瞬间“认识”这个项目并且记住所有开发决策、任务进度和架构设计的文件。我把它叫做“规格持久化开发”框架核心思想很简单让规格说明Specs成为项目中始终存在、始终最新、但永远不会阻塞你开发的“活文档”。想象一下这个场景你克隆了一个三个月前写的项目打开Claude只说了一句“项目状态如何”。AI助手读取了项目里的几个Markdown文件然后告诉你“v0.3版本已经完成登录模块和支付网关已就绪。v0.4计划中的用户仪表盘完成了80%但数据库迁移脚本还没写。另外上周我们决定把Redis换成Memcached原因记录在agent/design/f12-cache-switch.md里。” 这种感觉就像项目有了一个永不离职、记忆超群的技术负责人。2. 核心理念与设计哲学拆解2.1 为什么是“规格持久化”而不是“规格优先”传统的开发方法论往往让你二选一要么像瀑布模型那样先花几周写完所有规格再动代码要么像敏捷开发那样先写代码规格文档往往滞后甚至缺失。GitHub官方的spec-kit走的是“规格优先”路线要求你在编码前必须完成完整的六阶段规格定义。这很严谨但对于快速迭代的个人项目或小团队来说太重了。PSK选择了第三条路规格持久化。它不强制你在什么时候写规格你可以代码先行先快速实现功能AI助手会默默跟踪你的实现然后自动补全对应的规格说明。混合模式先写个大概的需求边写代码边细化规格。后期补全项目做到一半突然需要给客户展示文档AI助手能从已实现的代码中反向生成规格。唯一不变的是规格文件SPECS.md和相关的设计文档agent/design/会一直存在并且随着代码的演进而自动更新。它们不再是项目的“门卫”而是变成了“记录员”。2.2 单文件架构的巧妙之处PSK最让我佩服的设计就是它的“零依赖、零安装”。整个框架的逻辑、规则、工作流全都写在一个portable-spec-kit.md文件里。你通过一条curl命令下载它然后创建一堆符号链接Windows上是复制指向各个AI助手的配置文件# 这就是全部安装过程 curl -sO https://raw.githubusercontent.com/aqibmumtaz/portable-spec-kit/main/portable-spec-kit.md ln -sf portable-spec-kit.md CLAUDE.md ln -sf portable-spec-kit.md .cursorrules # ... 其他AI助手的链接这个设计解决了三个关键问题一致性你只需要维护portable-spec-kit.md这一个文件。修改一次所有AI助手Claude、Cursor、Copilot等下次会话时都会读取到最新的规则。可移植性你可以把这个文件看作你的“开发习惯配置”。把它带到新项目你的AI助手就会用你熟悉的方式工作。团队共享这个文件就能统一开发规范。零摩擦没有Python版本冲突没有npm包管理问题没有复杂的CLI命令。对新手极其友好对老手来说也省去了配置环境的时间。实操心得在实际使用中我建议把portable-spec-kit.md文件放在一个你容易找到的目录比如~/Developer/templates/然后每个新项目都从这个模板复制。你甚至可以写个简单的shell脚本来自动化这个过程真正实现“一键初始化”。2.3 智能代理目录项目的“数字大脑”安装PSK后它会在你的项目根目录创建一个agent/文件夹。别小看这个文件夹它就是你项目的“数字大脑”所有上下文和状态都存储在这里。让我拆解一下每个文件的作用文件核心职责更新时机我的使用体会AGENT.md项目宪法。定义技术栈、代码规范、API配置、品牌色调等静态规则。项目技术栈变更时。这里我放了一些硬性规定比如“必须用TypeScript”、“禁止使用any类型”、“错误处理必须用Result模式”。AI助手会严格遵守。AGENT_CONTEXT.md项目记忆。记录当前版本、完成进度、下一步任务、遇到的阻塞问题甚至包括本次会话的时间追踪。完成重要工作后、提交代码前、推送前。这是最有价值的文件。我经常出差可能一周碰不到代码。回来打开AI它第一句话就是“欢迎回来上次我们完成了用户认证模块v0.2还剩3个任务其中‘密码重置邮件’卡在SMTP配置上。”SPECS.md需求清单。用表格列出所有功能F1, F2, F3...、需求描述、验收标准和测试状态。新增功能、修改范围、标记功能完成时。我不再需要维护单独的Jira或Trello看板。所有需求都在这张表里而且“测试”列会被AI自动填充从生成的测试用例中提取。PLANS.md架构蓝图。高层架构图、技术选型理由、数据模型以及一个“架构决策日志”ADL索引链接到每个功能的设计文件。做出新的技术决策时。ADL索引是宝藏。每次我们决定“为什么用PostgreSQL而不是MySQL”AI都会在对应的设计文件里记录原因然后在这里加个链接。追溯决策原因变得异常简单。TASKS.md任务看板。按版本v0.1, v0.2组织任务清单每个任务有复选框、负责人标签username、关联的Jira单号。每个任务开始前必须先添加任务和完成后立即打勾。“任务先行”规则改变了我的工作流。现在我会先说“我要修登录页的CSS错位”AI会先把它加到TASKS.md然后才开始写代码。这杜绝了“忘了记录”的情况。RELEASES.md发布日志。每个版本的变更列表、测试结果、部署记录。某个版本下的所有任务都完成后。配合CI/CD这里会自动记录每次发布的测试通过率、代码覆盖率。给老板汇报进度时直接打开这个文件就行。design/目录设计档案库。每个功能如f3-user-login.md都有独立的设计文件记录实现思路、边界情况、排除项。功能被添加到SPECS.md时自动创建草稿在实现过程中填充。以前的设计文档写完就没人看。现在它是“活的”AI在实现时会参考它在代码审查时会核对它。设计真正驱动了开发。这个结构的美妙之处在于它的双向可追溯性。你可以从发布RELEASES追溯到具体任务TASKS再到设计决策design/最后到原始需求SPECS。反过来你也可以从某个需求出发看到它的所有实现历史和决策记录。3. 核心工作流与实操要点3.1 初始化与个性化90秒建立你的专属工作区当你第一次在项目中使用PSK时过程是完全自动化的。你只需要让AI助手执行安装命令然后它就会接管一切身份识别PSK会尝试读取你的GitHub配置如果存在自动填充你的用户名和邮箱。如果没有它会礼貌地询问。偏好设置它会问三个简单问题来个性化体验沟通风格你希望AI是“简洁直接”还是“详细解释”工作模式你偏好“深度专注”长时间单任务还是“快速切换”多任务并行代理委托你希望AI在多大程度上自主决策从“凡事问我”到“安全范围内自行决定”的梯度项目扫描AI会分析你的代码库识别技术栈React、Python、Go等然后基于8个内置的模板之一初始化所有agent/文件。交互式导览一个4步、不到1分钟的导览会带你快速了解项目状态、工作方式、当前设置以及如何获取帮助。这里有个关键细节PSK会在项目根目录创建一个隐藏文件夹.portable-spec-kit/里面存放项目配置文件config.md和你的个人偏好文件。这个文件夹是建议提交到Git的这样团队其他成员拉取代码后也能获得一致的AI行为配置。避坑指南如果你的项目是全新的、空白的AI在扫描技术栈时可能会无法确定。这时你可以直接告诉它“这是一个Node.js Express的后端API项目使用PostgreSQL数据库。” AI会基于此信息初始化更精准的模板比如自动生成.gitignore排除node_modules在AGENT.md里设置好ESLint规则。3.2 自然语言驱动像和同事对话一样开发PSK没有复杂的斜杠命令/。你只需要用自然语言和AI交流它就能理解你的意图并触发相应的工作流。下面是一些高频场景的对话示例场景一添加新功能你 “我们需要一个用户注册功能包含邮箱验证。” AI “好的。我已在SPECS.md中添加了功能F7: 用户注册与邮箱验证。接下来我需要为你创建一个设计计划。你是希望我现在就详细规划还是你先开始编码我随后补充设计文档”无论你选择哪条路AI都会确保SPECS.md被更新并且在agent/design/f7-user-registration.md中创建或填充设计细节。场景二查询进度你 “项目现在什么情况了” AI “查看TASKS.md和AGENT_CONTEXT.md后当前版本v0.3共12个任务已完成8个。进行中的任务F9-支付回调处理张三F10-管理后台仪表盘李四。下一个建议优先处理F10因为它是v0.3的最后一个核心功能。”场景三获取帮助你 “help” AI “根据你项目的当前状态v0.3进行中有2个进行中任务你可以 1. 继续处理任务F9或F10直接告诉我你要做什么。 2. 运行测试说‘运行测试’。 3. 准备发布v0.3说‘准备发布’。 4. 检查代码范围是否有漂移说‘检查范围’。 5. 查看你的个人任务说‘我的任务’。”帮助信息是上下文相关的。如果你刚完成一个功能AI可能会建议“运行测试”或“开始代码审查”。如果你刚启动项目它会建议“添加第一个功能”或“设置Jira集成”。3.3 自动化质量门禁让AI成为你的第一道防线PSK内置了多个自动化检查点在你不经意间守护代码质量。1. 自动化代码审查每当一个功能的所有任务被标记为完成[x]PSK会触发一个两层的代码审查脚本层运行psk-code-review.sh进行基础静态检查如是否存在硬编码密码、TODO注释、明显的安全反模式。AI层AI基于AGENT.md中的规则对代码进行逻辑、命名一致性、架构符合度的审查。 审查结果是建议性的不会阻塞流程但会以清晰列表展示发现的问题。在我的实践中这能提前捕获大约70%的粗心错误。2. 范围漂移检测你有没有遇到过“功能越做越多离最初目标越来越远”的情况PSK的psk-scope-check.sh脚本会从五个维度检查“范围漂移”功能漂移实现的功能是否与SPECS.md中的描述严重不符需求缺口SPECS.md中的需求是否在代码中完全没有体现范围蔓延代码中是否出现了SPECS.md中未提及的新功能架构漂移实际使用的技术栈或模式是否偏离了PLANS.md中的设计计划陈旧agent/design/中的设计文档是否很久没更新与代码脱节 它会给出一个“漂移分数”并在每次会话开始时自动进行快速检查。分数过高时AI会主动提醒你。3. 测试桩完成度检查这是我最喜欢的功能之一。当你在SPECS.md中为某个功能编写验收标准时AI会自动在tests/目录下生成对应的测试文件桩比如test_user_login.py或UserLogin.test.js。这些桩里面包含了一些TODO标记等待填充具体的测试逻辑。 PSK有一个桩完成度门禁在准备发布prepare release时它会检查所有测试文件。如果发现任何未完成的TODO测试桩发布流程会被阻止并提示你“功能F3的测试尚未完成”。这强制了测试与开发同步而不是事后补。3.4 发布流程一键式、可审计的发布传统的发布流程跑测试、改版本号、更新日志、打标签、推送……一堆琐事。PSK把它压缩成一条命令“准备发布并推送”。这条命令背后是一个9步的自动化管道运行测试执行所有测试套件。任何失败都会中止流程并给出详细的失败摘要和修复建议。代码审查运行自动化代码审查。范围检查运行完整的5维度范围漂移检测。流程验证确保docs/work-flows/下的流程图是最新的。文件计数核对README、架构图等关键文档的完整性。版本升级根据语义化版本规范提示你升级版本号如从v0.3.1到v0.3.2。生成PDF将架构设计文档ARD等转换为PDF便于分享。更新RELEASES.md创建新的发布条目记录所有变更和测试结果。更新CHANGELOG.md在项目根目录的变更日志中添加摘要。如果包含‘并推送’自动提交所有更改打上Git标签并推送到远程仓库甚至可以在GitHub上创建Release。整个过程是交互式的特别是在版本升级步骤AI会询问你确认。最终你会看到一个清晰的发布摘要表格所有步骤一目了然。这极大地减少了人为失误也让每次发布都有完整的审计轨迹。4. 高级特性与集成实战4.1 Jira云同步打通项目管理闭环对于在企业环境中使用Jira的团队PSK的Jira集成功能v0.5引入堪称神器。它不是一个全自动的同步器那太危险了而是一个显式、可控的桥梁。核心机制双轨时间追踪Track A代理会话时间AI在每次回复你时会悄悄在AGENT_CONTEXT.md中累加本次“思考生成”所花费的秒数。这是开发时间的近似值。Track B系统守护进程时间通过运行一个后台守护进程psk-tracker.sh它可以更精确地追踪你在项目文件上的活跃编辑时间。你需要运行“安装追踪器”来启用它。同步流程当你说“同步到Jira”时PSK会汇总Track A和Track B的时间。列出TASKS.md中所有已完成[x]且带有Jira单号标签如[PROJ-123]的任务。向你展示一个确认列表包括每个任务要记录的工作日志小时数和评论。获得你的明确确认后才通过Jira REST API v3提交工作日志和更新任务状态。为什么这样设计全自动同步听起来很美好但实际很可怕。想象一下AI误判了一个任务状态或者时间记录有偏差导致Jira数据被污染。PSK坚持显式确认让你在同步前有机会审核和修改。同时它提供了“Jira状态”命令让你随时查看有哪些任务待同步而无需调用API。实操心得在团队中使用时我建议在AGENT.md中统一Jira项目的配置URL、项目键、任务类型映射。然后每个开发者在开始一个任务时使用“链接Jira PROJ-456”命令将当前任务与Jira单号关联。这样同步时就非常清晰。4.2 多AI代理无缝切换上下文永不丢失这是我选择PSK的决定性因素。我日常会在Claude深度思考、Cursor快速编辑、Copilot代码补全之间切换。没有PSK时每次切换都是灾难。有了PSK之后所有AI助手都通过符号链接指向同一个portable-spec-kit.md文件读取相同的规则。项目状态和上下文存储在agent/目录下的Markdown文件中这些是纯文本任何AI都能读取。因此我在Claude里做的设计决策在Cursor里写的代码在Copilot里获得的补全建议都基于同一套最新的项目上下文。实际工作流示例上午用Claude打开项目AI读取AGENT_CONTEXT.md告诉我昨天用Cursor实现了支付接口但测试没写。我让Claude为支付接口设计测试用例它把方案写在agent/design/f8-payment-tests.md里。下午用Cursor打开同一个项目Cursor读取上下文后直接问我“是否要开始实现支付接口的测试用例设计文档F8已就绪。” 我点头它就开始编码。晚上用Copilot我在写其他代码时Copilot基于SPECS.md和PLANS.md给我的API路由命名提供了更符合项目规范的补全建议。这种体验是革命性的。AI工具变成了一个统一的、有记忆的“超级助手”而不是几个割裂的、失忆的对话窗口。4.3 针对现有项目的改造与适配你可能会问我的项目已经开发到一半了还能用PSK吗完全可以而且这是PSK的强项。PSK的“重新初始化”reinit命令就是为现有项目设计的。当你对一个已有代码库运行初始化时AI会深度扫描分析现有的目录结构、代码文件、依赖管理文件如package.json,go.mod来推断技术栈和项目状态。智能填充基于扫描结果尝试自动填充SPECS.md从代码中反向推导功能、PLANS.md从代码结构推断架构、TASKS.md从Git提交历史或TODO注释中提取任务。差异报告生成一个清单告诉你它自动填充了什么以及哪些地方需要你手动确认或补充比如某些模块的原始需求不明。这个过程不是完美的但它能建立一个惊人的基础。通常它能恢复出项目70-80%的“规格”上下文剩下的由你在后续开发中通过自然对话让AI逐步补全。这比从零开始为老项目写文档要轻松得多。5. 常见问题与故障排查实录即使设计得再完善在实际使用中还是会遇到各种边界情况。以下是我和社区成员遇到的一些典型问题及解决方法。5.1 安装与初始化问题问题1在Windows PowerShell中执行安装命令后AI助手没有反应。原因Windows的复制Copy-Item命令不会创建符号链接而是创建了文件副本。后续你修改portable-spec-kit.md但各个AI助手读取的还是旧的副本文件。解决方案删除所有生成的副本文件CLAUDE.md,.cursorrules等。以管理员身份打开PowerShell使用New-Item -ItemType SymbolicLink命令创建真正的符号链接。或者更简单的方法是定期手动复制更新后的portable-spec-kit.md到所有目标文件。问题2AI在初始化时无法检测到我的GitHub信息。原因PSK优先读取~/.gitconfig中的[user]部分。如果你的git配置是全局的但信息不完整或者你是在容器内开发可能读取不到。解决方案AI会直接询问你。只需按照提示输入你的姓名和邮箱即可。你也可以事后在.portable-spec-kit/user-profile/user-profile-{你的名字}.md文件中手动编辑。问题3初始化后agent/目录下的文件内容很空泛不符合我的项目。原因PSK内置了多个技术栈模板如Node.js、Python、Go、React等。如果项目非常新或结构特殊AI可能匹配到了通用模板。解决方案直接告诉AI你的项目详情。例如“这是一个使用Next.js 14 App Router、Tailwind CSS和Prisma ORM的全栈项目。”然后运行“重新初始化”命令。AI会基于你提供的信息重新生成更精准的AGENT.md和项目结构建议。5.2 工作流与文件同步问题问题4我在SPECS.md里手动添加了一个功能但agent/design/目录下没有自动生成设计文件。原因自动生成设计文件的触发条件是AI代理在SPECS.md中添加新功能行。如果你手动编辑Markdown文件AI可能没有感知到这个事件。解决方案有两个方法触发AI同步对AI说“同步规格文件”或“检查规格更新”。AI会重新扫描SPECS.md并为任何缺失设计文件的功能创建草稿。手动创建直接让AI为你创建“为功能F5创建一个设计计划”。AI会检查F5是否存在然后创建f5-*.md文件。问题5TASKS.md中的任务完成了但SPECS.md里对应功能的‘测试’列没有自动更新。原因SPECS.md的“测试”列更新依赖于AI在运行测试后对结果的解析。如果测试是通过其他方式如手动在终端运行完成的AI可能不知道。解决方案让AI运行一次测试。说“运行测试”AI会执行测试套件解析结果并自动更新SPECS.md中已完成功能的测试状态。这是保持两个文件同步的最佳实践。问题6多个开发者同时编辑agent/下的文件导致Git冲突。原因agent/文件本质是共享的“状态机”并发修改确实可能冲突。解决方案PSK推荐以下协作策略AGENT.md规则很少变动变动前团队沟通由一人修改。SPECS.md需求类似产品需求文档建议由产品负责人或Tech Lead主维护其他人通过PR提议修改。TASKS.md任务冲突高发区。建议每人只编辑自己负责的任务行。AI在添加任务时会自动加上username标签这有助于识别归属。如果出现冲突Git的合并冲突解决通常很直观因为内容是纯文本列表。AGENT_CONTEXT.md上下文此文件主要记录“会话状态”建议不提交到Git或每个开发者维护自己的版本。PSK的设计是即使没有这个文件AI也能从其他文件中重建大部分上下文。5.3 配置与高级功能问题问题7如何禁用我不需要的功能比如自动代码审查或Jira同步解决方案所有功能开关都在.portable-spec-kit/config.md文件中。你可以直接编辑这个文件或者更简单地对AI说“显示配置”。AI会列出所有可用的开关CI/CD、Jira、代码审查、范围检查等及其当前状态。然后你可以说“禁用代码审查”或“启用Jira集成”来切换。更改会立即生效。问题8psk-tracker.sh时间守护进程不准确或占用资源。原因守护进程通过监控文件系统事件来估算工作时间可能在复杂的IDE或频繁切换窗口时产生误差。解决方案查看状态运行“追踪器状态”查看守护进程是否运行及今日记录时间。使用显式标记对于需要精确计时的任务使用“开始处理[任务描述]”命令。这会创建一个明确的时间起点提高Track B的准确性。调整或卸载如果觉得不准确或不需要可以运行“卸载追踪器”来移除守护进程。时间追踪将回退到仅使用Track AAI会话时间。问题9在准备发布时测试桩TODO检查过于严格我想暂时跳过。原因测试桩完成度门禁是为了保证质量但有时在原型阶段或探索性编程时你可能想先发布一个不完整但可用的版本。解决方案没有直接的禁用开关因为这是一个核心质量原则。但你可以填充桩快速为那些TODO写一个最简单的测试哪怕只是expect(true).toBe(true)先让门禁通过。修改规格如果某个功能确实暂时不需要测试可以在SPECS.md中将其验收标准改为“暂不测试”AI可能不会为其生成测试桩。手动发布绕过PSK的发布流程手动进行Git操作。但这不是推荐做法会失去自动化带来的审计和一致性好处。5.4 性能与规模考量问题10项目非常大agent/目录下的Markdown文件变得很长会影响AI性能吗体验目前主流AI模型的上下文窗口都很大如128K、200K tokens。一个中等规模项目的所有agent/文件加起来通常不超过几千字远未达到上限。优化建议PSK的AGENT_CONTEXT.md文件设计为“滚动式”更新只保留最近的关键决策和下一步计划而不是完整历史。SPECS.md和TASKS.md虽然会增长但AI在读取时通常会进行摘要提取而不是将整个文件作为提示词。如果确实感到迟缓可以定期归档已发布版本v0.1, v0.2的详细任务到单独的archive/目录并在主文件中只保留摘要链接。问题11这个框架适合大型团队吗定位PSK最初是为个人开发者和小型协作团队2-5人设计的。它的轻量化和灵活性在这里是优势。大型团队挑战在超大型团队中SPECS.md和TASKS.md可能变成瓶颈因为所有需求/任务都集中在一个文件中容易产生合并冲突。适配思路可以将PSK用于团队内的单个服务或模块而不是整个巨型单体应用。每个微服务或模块维护自己的agent/目录。团队级的需求管理仍可使用Jira等专业工具然后通过PSK的Jira同步功能将分配到本模块的任务同步到本地的TASKS.md中。经过几个月的深度使用Portable Spec Kit已经从我的一个“实验性工具”变成了开发流程中不可或缺的基础设施。它最大的价值不是替代了某个具体工具而是统一了碎片化的开发上下文并用一种极其轻巧的方式让AI从“一次性的代码生成器”变成了“有记忆、懂规范、会跟踪的长期合作伙伴”。它可能不会适合每一个项目或每一种工作风格但如果你也厌倦了在AI聊天窗口中重复自己不妨花五分钟试试它——毕竟最坏的情况你也只是删掉一个Markdown文件而已。

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