Harness Engineering实践,如何驾驭AI这匹野马

news2026/4/11 17:34:04
随着Harness Engineering驾驭工程这个词开始在 2026 年频繁刷屏很多人的第一反应恐怕又是“看又一个试图收割智商税的黑话Jargon出现了。” 的确教科书里的 Software Engineering 优雅如诗现实中却是群魔乱舞Clean Code 的守则详尽如法典却挡不住大家在“屎山”上精雕细琢。概念与落地之间隔着一条名为“平庸”的巨大鸿沟。这一次我不打算再堆砌苍白的定义而是带你潜入一个边缘云实战项目的深水区。我们要聊的不是玄学而是如何在落地 Harness Engineering 的过程中把 AI 研发从“碰运气”的 Vibe Coding驯化为一门过程可控、结果可信的系统性工程学科。1.我们的武器库工具与范式在进入代码深水区之前有必要先检阅一下本次实战所依赖的“重型装备”。在这个 AI 原生软件工程AI-Native SE的爆发年我们不再是在 IDE 里单打独斗而是在一套严密的工具链约束下进行“工业化生产”。1.1 OpenCodeAI 编程界的“Linux”作为 2026 年开发者生态的当红炸子鸡OpenCode 凭借 125K Star 的战绩确立了其 AI Coding Agent 的霸主地位。它的迷人之处在于其“不妥协”的开源精神不绑定任何模型厂商通吃主流 MaaS 平台且完美向下兼容 Claude Code 生态。在本项目中它是我们的“首席执行官”负责调动后端的 Glm-4.7 模型将逻辑转化为具体的二进制生产力。安装和使用请参考https://opencode.ai/docs/zh-cn/1.2 SDD是真理还是教条SDDSpec-Driven Development规格驱动开发提出了一个极具挑衅性的口号“文档即真理代码只是副产品”。 它的逻辑是通过高度结构化的功能定义强迫人类与 AI 在落子编码前达成“逻辑共振”从而降伏那些由于理解偏差导致的 Bug。虽然亚马逊的 Kiro 已经将这套流程推向了极致但我必须在此提前打个响指——我并不完全认同“文档即真理”这种激进的教条在后文中我会撕开这个优雅幻觉下的工程真相。1.3 OpenSpec连接意图与现实的铁轨如果说 OpenCode 是引擎那么 OpenSpec 就是铺就通往结果的铁轨。在 2026 年它已成为 AI 原生开发的事实标准。 它绝非一份躺在目录里落灰的 PDF而是一套将“人的模糊意图”硬化为“机器可执行约束”的规约协议。它构建了一个标准化的桥梁贯穿了从需求调研 (Explore)到方案提案 (Proposal)再到自动化实现 (Implementation)的全生命周期。更多OpenSpec的内容可以参考https://github.com/Fission-AI/OpenSpec/blob/main/docs/getting-started.md如下图所示只需一行openspec init我们便在项目根目录下构筑了一套钢铁般的工程约束。1.4 Harness Engineering给 AI 狂飙的马力套上“缰绳”Harness直译为“挽具”。想象一下你面对的是一匹拥有无穷爆发力的烈马如果没有缰绳、马鞍和踏板它只会在旷野中横冲直撞甚至把你掀翻在地。在 AI 时代模型算力就是这匹“马”而 Harness Engineering 就是你亲手打造的那套精密的控制系统。在工程语境下Harness 是你为 AI 搭建的整套数字化结界它是那份规定“非请勿入”的架构约束是那组时刻盯着逻辑漏洞的自动化校验脚本是动态扩容的上下文管理器也是出故障时能实现自愈的隔离沙箱。OpenAI 曾在那篇轰动业内的《Harness Engineering 实践》中透露其核心要义可以凝练为三根支柱过程可控、结果可信、反馈闭环。1. 过程可控终结 Vibe Coding 的玄学为了降伏那种“全靠感觉、随缘生成”的随机性我们必须给 AI 注入高度结构化的外部干预。这正是 SDD 以及 AWS Kiro 诞生的初衷——用确定的输入换取确定的逻辑。2. 结果可信以测试为终局类似于“AI 版的 TDD”。在 AI 还没落下第一行代码前我们就先构建出完备的测试用例和模拟运行环境。当绿灯亮起的那一刻功能的一致性不再需要靠人类肉眼复核而是由数学逻辑背书。3. 反馈闭环在磨合中进化构建 Harness 的初期往往是痛苦的“慢”因为你要像搞精益生产一样对 AI 每一个不符合预期的输出进行“追溯闭环”。该补规则补规则该加约束加约束。这种初期的“慢”是为了后续飞轮转起来后的“极速自演进”。Harness Engineering 正在粗暴地重定义“程序员”这个职业。OpenAI 的工程师们说得足够露骨他们的工作性质已经发生了基因突变。他们不再是代码的搬运工而是“代码工厂”的设计师。 他们的战场变成了定义架构约束、构建反馈闭环、维护文档系统、监控质量指标。一个顶级的 Harness Engineer其价值在于不断优化那套精密的控制旋钮。一旦自动化飞轮转过临界点他的杠杆率将彻底碾压任何所谓的手写代码天才——因为他设计的每一条规则、每一个机制都会在未来的千万次 Agent 运行中产生永恒的复利。需求设计从“模糊意图”到“钢铁蓝图”实战项目背景边缘云网络平面控制服务。 核心目标通过 Netconf 协议自动化配置交换机与服务器实现边缘租户 Underlay 网络的物理隔离。2.0 任务拆分确定性的作战序列不管传统软件工程还是Agentic软件工程我们都不会“一步到位”也拒绝“走一步看一步”。出于可控的SDD实现要求必须将宏大的愿景拆解为原子化的、具有依赖关系的 User Stories (US)。这不仅是为了给 AI 指路更是为了构建一个可追踪的项目进度闭环。阶段优先级US编号核心内容依赖关系1. 基础架构P0US-1: COLA 4.0 骨架搭建项目初始化无US-2: 核心领域 Spec 定义领域建模US-12. 通信适配P1US-3: Netconf 驱动集成Netconf实现US-1US-4: 站点初始化规格实现站点初始化US-33. 业务核心P2US-5: 租户网络平面创建分配 VLAN/VNIUS-2, US-4US-6: 裸机实例网络配置将裸机物理网卡接入对应的租户平面。US-54. 生命周期P3US-7: 租户平面销毁与回收实现配置的反向清理逻辑释放占US-5US-8: 配置一致性巡检定期比对物理设备US-3, US-52.1 需求探索Explore一场深度的“灵魂拷问”在使用OpenSpec进行需求探索的时候我们只需要在/openspec-explore命令后加上简单的需求描述即可针对上面的任务拆分首先我们要搭建项目的基础框架此处我想在搭建框架之外再实现一些基础功能实际是把US-1和US-2合并了因此我输入了如下的prompt/openspec-explore 创建一个新微服务管理租户在边缘云的underlay网络通过租户网络平面实现租户间网络隔离该服务通过Netconf协议统一管理边缘云站点的交换机配置支持站点初始化、租户网络平面创建/删除、裸机实例网络配置等核心功能。现在先搭建应用框架要求使用COLA四层架构MavenJDK21SpringBoot3OpenSpec 随后给我的反馈令人惊喜。在探索模式下它会发起一连串极具专业深度的互动澄清。这不仅是在对齐需求更是在用大模型海量的网络领域知识Underlay 知识库为我查漏补缺。这些“灵魂拷问”覆盖了从业务逻辑领域建模到应用架构的全维度1、业务领域深挖涉及到具体的租户网络隔离实现逻辑。2、部署拓扑与管理半径厘清服务与边缘站点的映射关系3、驱动层适配针对不同厂商交换机的适配策略4、架构选型决策关于 COLA 架构中 Layer-first 与 Feature-first 的权衡这是一个让我欣慰的问题经过这么多年对COLA的持续经营COLA已经变成大模型的背景知识关于Layer-first和Feature-first之间的权衡的确是个关键问题。大部分情况会选Layer-frist简单一点。2.2 创建提案Proposal纠偏 AI 的“教条主义”需求澄清后通过openspec-proposal生成的变动清单包含proposal.md,design.md,tasks.md就是我们即将实施的工程蓝图。作为 Harness Engineer此时必须开启严苛的 Spec Review 模式。 AI 有时会陷入某种“模式教条”。例如在本项目中AI 过于推崇 DDD 中的 Value Object值对象甚至将所有的业务 ID 都建模成了 VO。这显然增加了不必要的复杂度。我果断下达指令“取消 ID 的 VO 建模回归简单类型。”AI 随即根据反馈自动更新了所有设计文档和任务列表。这种“人类设定约束 - AI 调整蓝图 - 人类最终确认”的迭代过程确保了生成的任务列表tasks.md精准且不跑偏。以下是最终确定的部分 tasks.md 片段。这份结构化清单不仅是 AI 的行动指南更是我们拒绝“黑盒式开发”、实现过程可控的关键武器## 1. Project Setup- [] 1.1 Create Maven project with Spring Boot 3 parent, JDK 21- [] 1.2 Configure COLA layer package structure (adapter, app, domain, infrastructure)- [] 1.3 Add dependencies: Spring Web, Spring Data JPA, PostgreSQL driver, Liquibase- [] 1.4 Configure application.yml with database connection and Liquibase- [] 1.5 Create main Spring Boot application class## 2. Domain Layer - Value Objects- [] 2.1 Create Vlan value object with validation (100-4000)- [] 2.2 Create Vrf value object with naming convention (VRF001-VRF999)- [] 2.3 Create Vendor enum (HUAWEI, H3C)- [] 2.4 Create status enums (SiteStatus, TenantStatus, ServerStatus, SwitchStatus)- [] 2.5 Create domain eceptions (VrfEhaustedEception, VlanEhaustedEception, etc.)## 3. Domain Layer - Entities- [] 3.1 Create Site entity (id: String, name, switches, status)- [] 3.2 Create Switch entity (id: String, siteId: String, ipAddress, vendor, credentials, role, status)- [] 3.3 Create Tenant entity (id: String, siteId: String, vrf: Vrf, status)- [] 3.4 Create NetworkPlane entity (id: String, tenantId: String, vlan: Vlan, cidr)- [] 3.5 Create Server entity (id: String, networkPlaneId: String, switchId: String, portName, status)有了这份钢铁般坚实的任务清单代码实现阶段将不再是“猜谜游戏”而是一场精准的“外科手术”。代码实现警惕 AI 的“草稿陷阱”当proposal阶段的规格、设计与任务清单Spec, Design, Tasks最终对齐了我们的预期便可以祭出openspec-apply命令开启自动化的“火力全开”模式。但在这一阶段作为 Harness Engineer你必须保持清醒的审视目前的 AI 在实现层更像是一个“唯结果论”的平庸程序员。 它能极其高效地跑通逻辑分支却对代码的可读性、复用性以及架构的优雅感缺乏“灵魂级”的感知。它给你的感觉更像是为了赶进度而拼命堆砌功能丝毫不考虑未来的维护成本。因此在 Harness Engineering 的范式下我们必须达成一个共识AI 生成的代码绝非“成品”而是一份高完成度的“草稿”。从“草稿”到“作品”重构即升华在“古法编程”时代资深开发者往往也会写两遍代码第一遍快速实现功能草稿第二遍进行精细重构成品。那些更合理的抽象、更清晰的表达、更健壮的扩展性往往不是起笔时就能想透的而是在认知迭代的推敲中打磨出来的。 AI 帮我们省去了第一步的体力活但它也顺便丢给我们一堆需要“手术刀式重构”的半成品。**案例 A逻辑平铺与组合方法模式 (CMP)**本项目中最复杂的用例是“创建租户平面”。AI 最初生成的代码虽然功能达标且能跑通测试但数个业务步骤全部塞在一个大方法里读起来像是一篇毫无段落的流水账。我采用结构化思维利用CMP (Composed Method Pattern组合方法模式)对其进行了二次重构。重构后的逻辑如同一份清晰的业务清单public CreateTenantPlaneResp createTenantPlane(String siteId, CreateTenantPlaneReq req) { // 准备上下文环境包含站点ID和请求信息 Context ctx prepareContext(siteId, req); try { // 步骤1保存network信息状态为pending networkGateway.save(ctx.getNetwork()); vlanifGateway.save(ctx.getVlanif()); // 步骤2在核心交换机上创建VLAN接口并绑定VRF createVlanifAndBindVrfOnCoreSwitches(ctx.getCoreSwitches(), ctx.getVlanif(), ctx.getVlanId()); // 步骤3在核心交换机上发布路由信息 publishRoutesOnCoreSwitches(ctx.getCoreSwitches(), ctx.getVrf().getName(), ctx.getCidrs()); // 步骤4在核心下联端口上允许VLAN通过 switchConfigService.allowVlanOnPorts(ctx.getCoreSwitches(), ctx.getSite().getSiteId(), PortRole.DOWNLINK, ctx.getVlanId()); // 步骤5在TOR上联端口上允许VLAN通过 switchConfigService.allowVlanOnPorts(ctx.getTorSwitches(), ctx.getSite().getSiteId(), PortRole.UPLINK, ctx.getVlanId()); // 步骤6在核心交换机上创建租户BGP配置 createTenantBgpConfigOnCoreSwitches( ); // 步骤7设置网络状态为激活状态并保存 networkGateway.updateStatus(ctx.getNetwork().getId(), NetworkStatus.ACTIVE, ); return new CreateTenantPlaneResp() .setId(ctx.getNetwork().getId()) .setVrfId(ctx.getVrf().getId()) .setVlanifId(ctx.getVlanif().getId()); } catch (Exception e) { log.error(Create tenant plane failed, rolling back. networkId{}, ctx.getNetwork().getId(), e); // 回滚配置将上下文中的配置信息恢复到之前的状态 rollbackConfig(ctx); // 保存失败信息将请求、异常和上下文信息保存到失败记录中 saveFail(req, e, ctx); throw new VlanException(Create tenant plane failed: e.getMessage()); } }案例 B逻辑散落与领域能力下沉AI 经常会将业务逻辑散落在应用层Application Layer导致领域对象变得“贫血”。例如“从 CIDR 推断 Gateway IP”的逻辑AI 最初是直接写在 Service 里的。我将其下沉到了 Cidr 领域对象中// 领域能力下沉让对象自己“说话” public String getGatewayIp( ) { IPAddress addr new IPAddressString(this.cidr).getAddress(); if (addr null) { throw NetworkErrorDefine.INVALID_IP_FORMAT.render(Invalid CIDR format: this.cidr).toVlanException(); } return addr.toSequentialRange().getLower().increment(1).toString(); }3.2 将重构逻辑“硬化”为规则发现 AI 的“偷懒”倾向后真正高阶的 Harness Engineer 不会满足于只改这一次代码而是会尝试将这种审美偏好提炼为 Agent 的约束规则 (Rules)。例如你可以将“单方法长度禁止超过 30 行”设定为 Linter 规则。一旦 AI 生成了臃肿的长方法检查工具会直接报错并倒逼 AI 自动进行 CMP 重构直至达标。这就是 Harness Engineering 的精髓发现问题不要只修补结果要通过优化“挽具Harness”来闭环解决它。虽然我们可以设定重重规则但现阶段我们仍需扮演好“导师”的角色。积极 Review确保 AI 的每一次拆分和抽象都符合人类的架构品味。 总而言之你要做的是工厂的设计师而不是被工厂吞噬的零件。3.3 架构治理拒绝“软性祈求”拥抱“物理拦截”OpenAI 的 Harness Engineering 实践中有一个振聋发聩的观点架构约束不靠 Prompt靠 Linter。很多开发者试图通过写一长串 Prompt 来规约 AI“请注意模块 A 绝对不能调用模块 B。” 这种做法在实战中往往极其脆弱原因有二注意力稀释Attention Dilution随着任务复杂度的爆炸Prompt 会变得臃肿不堪。Agent 在处理核心逻辑时往往会“选择性忽略”这些边缘化的文字约束。软约束 vs 硬拦截Prompt 只是建议而 Linter 是物理法则。当 Agent 违反架构规则时Linter 的直接报错是一种“硬碰撞”。Agent 在面对报错时会由于“失败驱动”而被迫进入自修复路径直到代码完全符合规则。这种“报错-修正”的闭环比任何苦口婆心的 Prompt 都有效得多。实践案例用 ArchUnit “硬化” COLA 架构以本项目为例我们要捍卫 COLA 四层架构的纯净性确保Domain 层是绝对的核心不向 Infrastructure 或 App 层产生任何逆向依赖。我们没有在 Prompt 里反复唠叨而是直接编写了一份 ArchUnit 测试用例。这份代码就是我们架在代码仓上的“高压线”class ColaArchitectureTest { ArchTest static final ArchRule domain_should_not_depend_on_other_layers noClasses() .that().resideInAPackage(..domain..) .should().dependOnClassesThat() .resideInAnyPackage(..adapter.., ..app.., ..infrastructure..) .because(Domain layer should be the core and not depend on other layers);}这种机械硬约束的力量在于Agent 无论如何挣扎只要代码不达标Pipeline 就无法通过。同样对于方法长度超过 30 行、圈复杂度过高等质量红线我们全部将其硬化为 CodeCheck 的 Linter 规则。在 Harness Engineering 的世界里我们不相信 Agent 的“自觉”我们只相信制度化的“拦截”。 这种从“请按规则写”到“不按规则写就报错”的范式转变才是让 AI 研发从 Vibe Coding 走向精密工程的必经之路。迭代阵痛当“真理”遭遇变化在 AI 的精准辅助下我们确实消解了大量不确定性但需求变更这一“工程宿命”依然如期而至。在本项目的“租户平面创建”阶段底层逻辑发生了漂移BGP 配置改为在创建 VRF 时预置无需在平面创建时二次执行。修复这处变更在代码层面只需删除一行代码// 步骤6在核心交换机上创建租户BGP配置createTenantBgpConfigOnCoreSwitches( );然而这一行代码的删除却瞬间让之前的create-tenant-plane文档沦为刻舟求剑的废纸。AI 并不能豁免人类数十年来的工程宿命文档落后于代码是软件热力学第二定律式的必然。这正是我质疑 SDD规格驱动开发核心逻辑的根源。SDD 宣称“文档即真理代码是副产品”但在复杂的工程演进面前这不过是一个脆弱且优雅的幻觉。SDD 在初期确实能为 AI 提供结构化的导航但若据此宣称“自然语言编程时代已至”无异于指着一张精美的地图说我们已经征服了群山。记住代码从未骗人而文档时刻在撒谎。4.1 捍卫代码的 SSOT 权在 Harness Engineering 的体系中我始终坚持代码才是唯一的 SSOTSingle Source Of Truth单事实来源。如上图所示Spec 与 Code 的关系必须被重新定义Spec 只是辅助而非主导是阶段性的过程而非终极的目的。 针对不同场景我认为应采取灵活的Spec策略善用 Spec初始化阶段在项目冷启动或涉及重大架构变更时结构化的 Spec 是对齐 AI 认知的最高效手段也是团队 Review MR 背景的最佳凭证。绕过 Spec修补阶段进入迭代中后期对于局部的逻辑微调应直接通过 Agent 的 Plan - Execute 模式操作代码仓。即在“Plan 模式”下与 AI 讨论设计在“Build 模式”下直接降维打击执行代码变更。丢弃 Spec维护阶段不要执着于维持 Spec 与代码的强一致性。Spec 只是中间产物太多的陈旧文档反而会稀释 AI 的注意力。 在必要时必须果断清除过期的文件。4.2 文档的“垃圾回收”机制OpenAI 在其 Harness 实践中也引入了Garbage Collection垃圾回收的概念定期清理过时的文档防止其对 Agent 产生误导。这与我倡导的“丢弃中间 Spec”思想不谋而合。让 AI 直接探索代码Code Exploration往往比让它在过时的文档堆里“考古”要高效得多。一个优秀的 Harness Engineer 应该明白你的目标是交付运行的软件而不是维护一堆自我感动的文档。代码审视消减 AI 释放的“认知债”在 Agentic 时代代码生成的边际成本已近乎为零。生产不再是瓶颈审查才是。面对动辄上万行的代码提交MR如何提升可审查性Code Reviewability已成为决定软件工程成败的命脉。理论上Harness Engineering 越精密代码质量就越高Review 的压力就越小。但现实是我们尚未进入“无需理解代码”的乌托邦。AI 产出的速度远超人类消化的速度这直接导致了“认知债”的激增。如果不加节制地接受 AI 生成的逻辑今天飞涨的研发效率明天就会变成无法维护的泥潭。因此在 AI 原生的 PDLC软件开发生命周期中我强烈建议将战略重心向 Code Review 倾斜AI Review利用更强的模型对“平庸模型”生成的逻辑进行初步扫描。Human Review Group Review不仅仅是查 Bug更是为了理解、重构与优化。我们要主动通过人为的干预去对冲 AI 快速生产带来的复杂性熵增。代码测试构建坚不可摧的“反馈结界”软件测试特别是自动化测试始终是软件产业中最高耸的堡垒。即便进入了 2026 年依然有大量的 QA 沉溺于低效的手工点选这种模式在 Agent 时代将彻底崩塌。这正是 OpenAI 工程师在 Harness Engineering实践 实践中发出的终极警告“我们当前最棘手的挑战集中在设计环境、反馈回路和控制系统方面。”6.1 实验室级反馈从 UT 到集成测试在本项目中我们的反馈闭环主要依托单元测试UT。但对于边缘云这种复杂系统UT 的覆盖深度显然不足以支撑起“结果可信”。我探索出了一套基于UT的微服务集成测试办法利用内存中间件In-memory DB/Kafka/Redis以及 WireMock 模拟周边服务依赖。这种方案的优势在于它能在不启动整套笨重环境的前提下将集成测试也纳入 Harness 的反馈环。AI 每一行代码的变动都能在秒级得到准生产环境的验证。6.2 真实战场端到端E2E的环境博弈真正的工程挑战在于端到端测试的环境构建如何用 Docker 编排真实的中间件如何利用 Chrome DevTools 模拟用户行为这是一个极其残酷的平衡游戏。如果你构建的环境过于沉重AI 的运行会变得极其耗时且易碎导致研发过程频繁“卡壳”原本预想的效率飞轮会瞬间卡死。作为 Harness Engineer我们的核心使命是为 AI 构建一套“可运行、高韧性”的执行结界。以一个前后端分离的项目为例E2E 测试横跨页面、前端服务器与后端微服务。经过反复试错和尝试我终于找到一个构建相对稳定的E2E测试环境的方法这里的重点是要解决服务器端口冲突问题。为了让Agent操作浏览器我们首先要在opencode中注册chrome-devtools-mcp工具。即我们需要在~\.config\opencode\opencode.jsonc中添加以下信息mcp: { chrome-devtools: { type: local, command: [npx, -y, chrome-devtools-mcplatest] } }为了实现环境自愈我们在AGENTS.md中硬化了如下检测与拉起规约### E2E Test Runtime Guard (环境自愈守则)0. **存活与冲突校验** 禁止盲目启动。首先利用 netstat -ano | findstr LISTENING 精准探测后端(8080)与前端(3000)端口。 *若端口被无关进程占用后端需要销毁进程重新拉起前端可以保持不变*1. **后端防御性启动** 若 8080 端口离线触发冷启动序列。一次性拉起 powershell -Command Start-Process cmd -ArgumentList /k cd crm-backend mvn spring-boot:run -Dserver.port8080 -Dmaven.wagon.http.ssl.insecuretrue2. **前端动态挂载** 若 3000 端口离线自动进入前端开发目录执行热更新模式 powershell -Command Start-Process cmd -ArgumentList /k cd crm-frontend npm run dev3. **浏览器自动化执行** 在确认双端“心跳”正常后等待7秒方可驱动 Chrome DevTools 协议开启无头浏览器进行全链路回归。这套规约的意义在于它把原本需要人类手工排查的“环境玄学”转化为了 Agent 可以理解并执行的标准操作程序SOP。当 Agent 能够自主处理端口占用、依赖下载失败、服务拉起超时等工程杂讯时它才真正具备了在无人值守状态下大规模交付高质量代码的能力。6.3 成本平衡从“每改必测全量”到“按需召唤”然而现实是骨感的运行一次完整的 E2E 测试极其昂贵算力与时间成本。我们必须在“测试全面性”与“测试反馈速度”之间找到那个微妙的黄金分割点。我不希望 AI 的每一次微小改动都触发沉重的 E2E 流程这会稀释开发的专注度。更合理的工程实践是将环境规约封装为“可召唤的指令”。我们将上述逻辑抽象为命令下沉至.opencode/commands/e2e-test.md。这样开发者或 Agent 只有在关键里程碑节点通过键入\e2e-test才能激活这套重型武器。自动化环境构建与韧性测试是软件工程最后的“无人区”。 在这里没有现成的地图。你能否在复杂的分布式环境下为 Agent 维持一个稳定、快速、可重复的反馈闭环是衡量你是否真正具备“驾驭 AI 能力”的试金石。结语从“代码手艺人”到“软件工厂设计师”通过这场边缘云项目的实战洗礼我们清晰地看到Harness Engineering 绝非又一个转瞬即逝的黑话而是一场正在发生的软件生产力革命。在这个范式下OpenCode、OpenSpec 不再是单纯的辅助工具而是构筑新一代软件工程边界的基石。它们正将软件开发从“作坊式的手工打磨”推向“工业化的精密制造”。然而驾驭这股力量并非一蹴而就。回顾这段实战经历我们沉淀下了几条关乎成败的硬核经验拒绝“黑盒”锚定过程通过结构化的 OpenSpec 规约和颗粒度极细的 tasks.md我们将 AI 的产出强行锁死在预设轨道上。只有过程可控效率才有意义。以测试作为“逻辑准星”无论是 UT 还是复杂的集成测试它们不再仅仅是质量守门员而是整个反馈闭环的核心。代码的公信力应由自动化的数学逻辑背书而非人类的疲劳肉眼。构建自进化闭环发现 AI 的偷懒或偏差后不要只满足于修补代码。真正的 Harness Engineer 会将教训提炼为 Linter 规则或架构约束。这种“发现即闭环”的模式是飞轮转起来的动力源。警惕“认知债”严守 Review 阵地AI 释放了生产力也制造了认知负担。我们必须将战略重心向 Code Review 倾斜通过 AI 与人类的多重审视消减快速生产带来的复杂度熵增。捍卫代码的SSOT地位Spec 是地图Code 是领土。无论 SDD 的理念多么迷人我们必须时刻保持清醒代码从未骗人而文档时刻在撒谎。 保持代码的纯净与可维护性永远优于维护堆积如山的文档。合理的上下文管理在Context Engineering文中我们已经知道过大的Context会导致Context Rot问题《OpenAI Harness Engineering 实践》提到的让AGENTS.md成为简短的指南使用SubAgent渐进式披露更多内容同时保证主Agent的Clean将是一个不错的方案。Harness Engineering 的崛起标志着软件工程正在经历一场深刻的回归——回归到其“工程化”的本质。罗马不是一天建成的不要期望在一开始就能构建出一个功能强大完整的Harness每个项目的环境都不一样好的Harness Engineering都是迭代生长出来的。我们只有不断地调整、优化feedforward和feedback才能构建出强大的Harness。它不再寄希望于某个开发者当天的“Vibe感觉”或灵光现而是建立在一套可复制、可观测、可演进的精密控制系统之上。虽然“环境构建难、测试反馈慢”这些老掉牙的幽灵依然游荡但进化的方向已不可逆转。未来别再做一个单纯的“代码手艺人”去为 AI 构建那套足够精密的“挽具”吧。当你的 Harness 足够强大时澎湃的 AI 算力才会真正化作你手中无坚不摧的生产力。正如 OpenAI 团队所言一旦控制飞轮旋转起来其杠杆率将彻底重塑软件行业的格局。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

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