[]
软件开发领域存在一个持续了半个多世纪的梦想,那就是通过更好的工具替代开发者。这个梦想每隔十年左右就会以新的技术形态重现一次。
1970年代,COBOL的设计理念是“使语法可读性足够强,理解业务的人可以编写代码”,结果发现仍然需要专业程序员。1980年代,CASE工具(Computer Aided System Engineering,例如UML、E-R等)承诺通过图表生成代码,最终也未能兑现。1990年代,Visual Basic等可视化工具扩展了参与者范围,但并未消除对专业开发的需求。2010年代以后,低代码平台延续了同样的愿景。而当下,生成式AI被认为是最有能力实现这一目标的技术。
与过去不同的是,AI已经展现出了前所未有的代码生成能力,它能够理解自然语言、生成可运行的代码片段,甚至在某些场景下直接输出完整的应用原型。这一能力的飞跃,让人们重新审视一个问题,当AI已经能够写代码,软件开发是否正在走向全面自动化?这一问题进一步引出了对低代码技术的质疑,既然AI可以绕过设计器、模型与配置,直接输出可执行代码,那么低代码是否正在成为一种过渡性的技术?或者更激进地说,低代码是否只是“在AI辅助编程成熟之前,用来弥补开发效率不足的临时方案”?
本文试图从软件工程的基本原理出发,对上述判断给出一个更为冷静、也更具解释力的回答:AI辅助开发需要元数据驱动加可视化审查作为监管载体,而不能依赖传统的代码审查体系。而低代码恰好是一个不错的解决方案。
要回答上述问题,必须首先厘清一个基础判断,AI是否已经具备独立承担企业软件开发的能力? 如果答案是肯定的,那么低代码确实可能成为过渡性技术;但如果答案是否定的,那么问题就变成了AI在企业软件开发中的真实位置是什么,以及需要什么样的工程体系来支撑它发挥作用?
在展开具体讨论之前,有必要先回顾企业软件区别于其他软件领域的几个基本特征。这些特征对后续的讨论非常重要。
业务复杂性远大于技术复杂性:企业软件的核心挑战通常不在于算法难度或性能极限,而在于业务规则的数量、关联性和不稳定性。一个包含基础功能的ERP系统可能包含数百张业务表、上千条业务规则、几十个审批流程,这些要素之间存在大量隐含的依赖关系。技术实现本身往往是数据的增删改查(CRUD)和流程编排的组合,真正困难的是准确理解和持续维护这些业务语义。
系统生命周期长,参与人员更替频繁:企业软件通常需要运行五年甚至更长时间,期间业务需求持续变化,开发和维护人员可能更换多轮。系统的可理解性和可维护性,往往比初始开发效率更为重要。
多角色协作是常态:企业软件的构建过程中,需求方代表、开发人员、测试人员、实施顾问、最终用户等多个角色需要在同一个系统上协作。不同角色对系统的理解方式和操作方式存在显著差异。
合规性与可审计性是刚性要求:在金融、医疗、政务等行业,系统行为的可追溯性、数据的完整性、操作的合规性,都是不可妥协的底线要求。而对于制造业或商务服务业来说,核心软件的质量问题可能为企业带来不容忽视的时间和成本损失,同样存在较强的合规与审计需求。
这些特征意味着,企业软件领域对“工程治理”的需求,比面向消费者的应用或工具型软件更为迫切。而这,正是软件工程这个学科诞生的原动力。
深入了解企业软件的工程治理水平如何决定软件的可维护性与质量,请移步:第三部分的第一章
我们必须承认,AI在辅助开发领域具备非常强大的能力,可以将自然语言描述转换为代码文本。例如,当开发者描述创建一个订单详情页面,包含客户名称、订单金额和提交按钮时,大模型通常可以快速生成一段前端组件代码,甚至配套生成一个简单的后端接口。这种体验,很容易让人产生一种系统已经被写出来了的错觉。

图:AI辅助开发工具的运行界面
但是,软件工程的核心目标,并不是生成一个看起来能跑的结果,而是构建一个在给定约束条件下,行为可预测、结果可复现的系统。需求评审、设计建模、测试与上线,本质上都是在不断压缩不确定性。
而生成式AI的工作机制建立在概率性推断之上。即便输入保持一致,模型在不同上下文状态下生成的结果,也可能在架构、命名与实现路径上存在差异。这种不确定性在内容创作领域是优势,但在工程体系中就成为了天然的风险。
这并不意味着AI生成的代码本身不可靠,而是说它并不具备工程系统所要求的那种内生确定性。工程中的确定性,来源于显式规则、结构化约束与一致的解释机制,而非统计相似度。这正是为什么需要人类监管的第一个核心原因:必须有人来验证AI生成的内容是否符合工程确定性的要求。
为了帮助理解这一点,我们可以将AI辅助开发中的AI类比于一名的全栈程序员,小C,他的知识很全面,前后端代码的产出效率都很高。小C以“远程办公”的形式通过了公司的招聘后,就和其他开发者一样参与到开发工作中。唯一的不同,是小C没有和团队成员有任何形式的工作外交流,公司甚至无法通过合同对他进行约束。在这一背景下,公司该如何对他进行管理呢?会直接将企业软件的端到端工作(从业务需求到可执行的软件)交给小C来独立交付吗?我们的答案是否定的。我们大概率会将为小C配套同级评审的开发人员与测试人员,从代码和成果两个层面,对他的产出进行验证。
更麻烦的是,真实的软件工程并非一次性完成,而是在长期迭代中逐步演进。每一次需求变更、架构调整或性能优化,都会对系统既有结构产生影响。AI的不确定性会放到这些影响,很可能会将其转换为三类严重的系统性风险:
结构退化风险:以订单系统为例,当AI被要求增加预计交付日期字段时,可能将大额订单的判断阈值硬编码为1万元,而系统其他地方(如审批规则)使用10万元,导致概念分叉。三个月后再次调整规则,AI又引入新的VIP等级判断标准,与既有定义不一致。更麻烦的是,每一次AI生成代码,都会引入新的命名风格、新的数据获取方式、新的错误处理策略。随着迭代次数增加,系统逐渐演变为由大量来源不同、假设不一的代码片段拼接而成的集合体。局部功能可能持续增加,但整体结构却在不断退化,最终进入一种脆弱状态:新功能开发越来越慢,bug修复越来越难,没有人能够完整理解系统的工作机制。
协作失效风险:继续上面的示例,该系统由三位开发者协作开发,他们都使用AI来加速编码。在开发WebAPI时,开发者A向AI描述需求时使用客户名称这个术语,AI生成的代码中属性命名为customerName。开发者B使用客户姓名,AI生成clientName。开发者C使用购买方,AI生成buyerName。三个属性在业务语义上指向同一个概念,但由于描述用词不同,AI生成了三种不同的命名。更严重的是,三位开发者开发的WebAPI可能被同一个系统调用,在某些边界条件下(如该系统没有做好必要的数据合法性检查),结果就会发生混乱。当企业要做数据治理后,要求统一所有WebAPI的客户名称命名规则时,开发团队需要找到系统中所有相关代码并统一修改。但由于命名和实现方式各异,搜索customerName无法找到clientName和buyerName,最终只能通过人工阅读大量代码,逐一排查,非常麻烦。
影响分析失效风险:除了接口层面的属性名称,代码内部的命名混乱也会导致基于文本检索的影响分析功能失效。比如在系统某个模块中查询有哪些地方用到了客户名称,不论是采用customerName查找还是clientName,都无法获取到真实的影响范围。在进行重构时,既耗时又极易出错。
从工程角度看,问题的根源在于AI加速了实现的生成,但没有建立结构的约束。每一次AI生成代码,都是在无边界文本空间中进行概率推断,而不是在有明确语义的结构空间中进行规则填充。这就导致了AI的概率性输出带来的风险会在多轮迭代中不断累积,导致系统逐渐偏离原有设计意图。最终,系统大概率会呈现出一种每个局部都看似合理、整体却难以理解的状态,不得不通过人工重构来重新建立秩序。
这表明,AI辅助开发在企业软件开发领域的问题并不局限在单次生成是否正确,而在于是否具备在长期演进中自我约束与保持结构稳定的能力。这是为什么需要人类监管的第二个核心原因,必须有人对系统的长期演进负责,确保每一次变更都不会破坏既有的工程基础。
既然AI辅助开发的成果需要人工校验和负责,确保其确定性和长期演进性,那么是否意味着我们只需简单地将AI视为人类开发人员,沿用现有的编码规范、融入CI/CD管线的审查工具(如ESLint等)和同级评审(Peer Review)管理实践,就可以应对了?
很可惜,答案是否定的。问题的根源在于,AI的出现在软件开发史上首次造成了一种系统性的失衡,代码的生成效率,已经超过了人类的理解与审查能力。监管本身,正在成为新的瓶颈。
AI可以在几分钟内生成数百行代码,而人类保质保量地理解、评审同等数量的代码,通常需要数小时。如果团队中有多名开发者同时使用AI辅助编码,代码的生成速度可能是团队审查能力的数十倍。但是,传统的同级评审建立在一个隐含假设之上,那就是代码的编写速度低于阅读和审查的速度。在这一假设下,一名开发者每天写的代码量,大致是另一名开发者可以在能接受的时间内完成认真审查的代码量。这种平衡使得同级评审成为一种可持续的工程实践。但当AI辅助开发介入后,这一平衡被彻底打破。如果依然坚持人工逐行审查,要么审查流程成为开发瓶颈,AI的规模优势被完全抵消,要么审查流于形式,失去实质意义。
这一失衡还因另一个维度而持续扩大。人类开发者在团队中工作的时间越长,在管理压力与自驱力的共同作用下,会逐渐将团队的工程约定“内化”为个人的开发习惯,审查的颗粒度就能随时间推移呈现出递减的效果。基于通用大语言模型的AI辅助开发显然不具备这种成长机制。无论团队使用AI辅助开发多少个月,AI都不会因为在这个团队工作久了而自发调整输出风格,也不会因为上次审查者指出了这个问题而在下次生成时主动规避。每一次生成,AI都是在相同的概率分布下重新开始,不携带任何团队特定的工程记忆。这意味着,AI辅助开发所带来的审查负担,并不会随着时间推移而自然减轻,而是会随着AI代码生成量与系统复杂度的增加持续累积。
当然,AI并非完全没有适应团队约定的可能性。通过微调(Fine-tuning)、记忆(RAG、文件读写等)、或在提示词中注入团队规范,可以在一定程度上使AI的输出更符合特定团队的工程约定。但这些机制与人类的自然成长存在根本差异,它们不会自动发生,而是需要团队投入专门的工程资源来构建和维护。即便如此,这些规范也并不会AI 100%的执行。
面对上述失衡,我们需要加强现有的工程治理手段。比如,用更详细的编码规范来约束风格、用更复杂的规则做静态检查来发现明显缺陷等。这套组合拳确实有效,但它们主要解决的是局部的、可形式化的问题,如风格一致性、明显缺陷、局部正确性等。而AI辅助开发在长期演进中真正危险的问题,恰恰不在这个范围之内。以上文描述的三类系统性风险为例:
结构退化风险表现为系统在多轮迭代后逐渐演变为由大量来源不同、假设不一的代码片段拼接而成的集合体。这种退化不会触发任何静态检查规则,因为每一段代码在局部都是合法的。
协作失效风险表现为不同开发者借助AI生成的代码在语义上指向同一概念,但在命名和实现上各自为政。这种不一致性不会被ESLint等静态检查工具发现,因为它不是语法问题,而是语义问题。
影响分析失效风险表现为基于文本检索的影响分析因命名混乱而失效。这种失效不会在CI/CD管线中报错,因为代码本身是可以编译和运行的。
更深层的问题在于,传统工程治理手段的设计前提,是人类开发者在编写代码时具备完整的业务上下文。这些手段的作用,是帮助人类开发者避免疏忽和错误,而不是替代人类来理解业务需求,形成解决方案。当代码的主要生产者变为AI时,这一前提不再成立。AI没有业务上下文,只有统计推断;没有设计过的方案,只有概率输出。传统工程治理手段所能捕获的,只是AI输出中那些形式上可检测的问题,而对于架构层面的退化、业务目标的悄然偏移、长期演进中的隐式耦合等等,它们几乎无能为力。
传统工程治理手段之所以难以应对AI辅助开发的挑战,还有一个更根本的原因,AI“擅长”生成看起来正确的代码,这些代码通常结构完整、逻辑自洽、风格规范,不但能做到形式上的高度正确,能够通过大多数自动化检查,在代码审查中也不会引发明显的警觉。问题在于,这种表面上的正确性,掩盖了一类更难被发现的错误,比如抽象层级不当、假设前提错误、偏离真实业务目标等。
以一个在企业软件中高度真实的场景为例。某电商系统的库存可用量计算逻辑为:可用量 = 实际库存 − 已预留库存 − 冻结库存。这一接口被下单、报价、库存预警、BI分析等多个系统高频调用,随着业务规模扩大,接口QPS持续攀升,数据库压力显著增大。开发者向AI提出了一个优化库存可用量查询性能的任务,要求不改变现有业务语义、保证结果一致性、不影响下单准确性。AI给出了一个教科书级别的性能优化方案:引入以商品ID为键的Redis缓存,设置5秒TTL。代码分层正确、命名规范合格、测试齐全,CI全绿。从任何局部工程视角审视,这个方案都无懈可击,抽象清晰,性能显著提升,代码优雅可维护。在代码审查中,绝大多数工程师会直接通过。
然而,这个方案存在一个致命的错误。AI将库存可用量被当作了一个可缓存的计算结果,但在真实的业务中,它实际上是并发交易中的判定条件。库存不仅是一条数据,更是交易裁决的依据、风控的边界、财务口径的组成部分。即便5秒的不一致窗口,在高并发场景下也可能造成超卖、账实不符和财务对账异常。这类问题在日常测试、压测和小流量场景下完全不会暴露,只会在大促、并发高峰、多系统竞争库存时集中出现,而一旦爆发,往往是事故级别的后果。
这个错误之所以难以避免,不是因为AI的工程能力不足,而是因为“库存查询是下单前的判定条件,而非展示数据”这一业务上下文中至关重要的信息,往往没有被写进需求文档,也不会体现在代码接口上,却是以行业知识的形式存在于开发团队的大脑里。但AI只能在给定的上下文中做出合理的工程推断,自然忽视掉了这一点。这类“合理但错误”的问题代码在短期内几乎不会被发现,却会在长期演进中产生高昂代价。更麻烦的是,随着系统规模扩大,这类代码会逐渐成为系统底层模块的一部分,后续的修改和扩展都会在这个错误的基础上叠加,使得纠正成本随时间指数级增长。
除了代码,此类问题在注释上的表现更加隐蔽。主流的AI辅助开发都可以生成注释,在形式上留下类似决策痕迹的文字。但AI生成的注释与人类编写的注释在本质上存在差异,人类注释往往记录的是真实的决策过程,为什么选择这种方案而非另一种,某个边界条件是如何被识别和处理的,是现有这些注释的内容,然后才有代码;而AI生成的注释,本质上是对代码行为的描述性推断,它告诉审查者“这段代码做了什么”,但无法回答“为什么这样做”。更值得警惕的是,AI生成的注释有时会对代码行为作出过于自信的描述,而实际上在某些边界条件下,代码的行为可能与注释所描述的并不一致。这使得AI生成的注释不仅无法降低审查负担,有时反而会给后续修改这段代码的人类开发者与AI带来误导。
综合以上三个方面,可以得出一个清晰的结论:在AI辅助开发的背景下,以逐行阅读代码为核心,依赖编码规范、静态检查和同级评审为代表的传统监管方式在工程上不再成立。不论是广度还是深度,人类都已无法监管AI所有产物的细节。监管的对象,必须从代码上移到更高的抽象层级。也就是说,人类监管的重心需要从具体的代码细节,提升到更宏观的层面:
架构:描述系统的整体骨架,AI是否对系统的整体形态造成破坏?分层边界是否清晰?依赖关系是否合理?
意图:描述具体的业务初衷,AI生成的内容,是否仍在解决正确的问题?是否与业务目标保持一致?
约束:界定开发的“红线”,AI是否越过了工程与治理的硬性要求?是否符合系统既有的架构约定?
这三个维度的监管,无法通过自动化工具完全替代,因为它们本质上需要对业务语义和工程意图的理解。但它们可以通过合适的工程基础设施来支撑,使人类能够以更高效的方式履行这一职责。
这一转变,意味着人类在AI辅助开发体系中的角色发生了根本性的变化。人类不再是"代码的主要阅读者",而必须转变为规则、边界与方向的制定者,以及最终的背书者。这种转变并不意味着人类的责任减轻,恰恰相反,它要求人类在更高的抽象层次上承担更重的工程判断责任。
站在工程的角度看,问题的关键不只是监管什么,还有依托什么来监管。系统的关键抽象,必须以人类可直接感知、可比较、可审计的形式存在,否则监管就不具备可操作性。那么,这些抽象层次的监管,究竟应该依附在什么载体之上?
首先需要澄清的是,传统编码开发并非没有抽象。随着强类型语言、形式化验证和CI/CD流程等工程技术手段的普及,架构分层、领域模型、模块边界、接口契约、设计原则,这些概念在软件工程中早已存在,并且在企业软件领域中被广泛接受。所以,问题不在于有没有抽象,而在于这些抽象以何种形式存在。在以代码为中心的体系中,架构、意图和约束等主要存在于以下几个地方:
架构文档和设计说明:以文字形式记录系统的整体结构与设计意图,包含但不限于OpenAPI文档、ER图等,但与代码实现之间缺乏强制性的绑定关系。
代码注释和命名约定:以内嵌方式表达局部意图,但依赖开发者的自律,难以系统性维护。
资深开发者的经验与认知:以隐性知识的形式存在于团队成员的大脑中,无法被工具直接访问或验证。
评审会议和口头共识:以临时性协商的方式形成,因为缺乏持久化的记录机制,大部分并没有落在会议纪要中。
可见,这些抽象的本质是背景知识,与实际决定“软件行为”的代码本身是分离的,且没有办法实现自动验证。这就意味着这些文档不论是人工编写还是由AI生成,都无法确保与软件行为保持一致。所以,如果我们直接将传统编码开发中的文档作为监管的载体,即便这些上层信息都没问题,也无法确保真正的代码和软件符合预期。要想解决这个问题,系统的结构只能通过代码关系推断,意图只能通过接口语义猜测,约束只能通过逻辑逆向总结,那么这一过程带来的监管成本将依然与代码规模呈线性关系。监管本身仍然成本高昂。
便于人类阅读的文档与决定软件行为的代码并不一致的问题,事实上是软件工程领域的常见问题。行业内最典型的解决方案就是元数据驱动。
元数据驱动的核心在于系统运行所需的全部规则、模块关系、约束条件以及设计决策,可以最大程度上抽象为结构化的元数据,开发活动通过工具对这些元数据的解析、验证与执行来完成。在这一体系中,除了少量的编码扩展之外,架构、意图和约束等不再是解释系统的背景知识,而是系统本身的一部分,直接驱动软件运行。元数据因此被确立为软件行为的主要决定者,最大化覆盖数据架构、业务规则、交互行为、逻辑控制和权限模型。
元数据驱动通常与可视化绑定提供。元数据驱动解决的是“软件行为由什么决定”的问题,可视化解决的是这些决定如何被感知和操作的问题。只有元数据驱动而没有可视化,元数据就只是配置文件,普通开发者难以直接操作;只有可视化而没有元数据驱动,可视化就只是界面,背后的行为仍然由代码决定,无法被工具验证。这一组合通常以“低代码”的商业概念出现,在AI出现之前主要服务于人类开发者,设计器让开发者以可视化方式定义系统行为,运行时保证行为与定义一致,从而提升开发、维护和审查的效率。AI辅助开发技术被引入低代码后,同样的基础设施同时服务于AI,元数据为AI提供了结构化的生成空间,可视化为人类提供了审查AI生成结果的界面。这种全新的开发方式也被称为AI辅助低代码开发。

图:AI辅助低代码开发,人类开发者与AI的协作流程
该模式下,元数据成为了AI生成的载体、系统运行的载体和人类监管的载体,三位一体,我们只要确保元数据符合预期,就能交付高质量的企业软件。
深入了解元数据驱动的原理,及其在企业软件中的应用,请移步:第三部分的第二章和第三章
对于这三类元数据,事后监管的能力由设计器(Designer)提供,设计器扮演的是审查工具的角色,而非单纯的生成工具。设计器的可视化能力,使AI生成的元数据从存在于系统中的结构化信息变为可被人类直接感知和比较的视图。针对不同类型的元数据,设计器提供了与其结构特征匹配的可视化形式:
结构性元数据(模块依赖、实体关系)以图结构呈现,多入度多出度的关联关系一目了然。审查者可以直接判断是否新增了不合理的核心依赖,或是否引入了不应存在的跨模块耦合。
行为性元数据(业务流程、权限规则)以流程图或树结构呈现,流转路径、分支条件、责任节点清晰可见。审查者可以直接判断是否扩展了原本受限的职责范围,或是否引入了新的业务裁决节点。
约束性元数据(校验规则、依赖约束)以列表与矩阵呈现,规则边界结构化排列。审查者可以直接对比变更前后的约束条件,而不需要从代码中逆向推断。
这三种视图共同构成了设计器的审查界面。那些在代码中往往分散而隐蔽的变化,在可视化的元数据视图中以结构化的形式直接呈现,使审查从依赖经验的推断变为基于图形化呈现的直接判断。

图:在低代码平台中查看业务逻辑
以外部依赖审查为例。AI被要求为库存管理模块新增一个低库存预警功能,它在生成元数据时通过创建一个连接器来引用“财务结算”模块中的成本价字段,用于计算预警阈值。在代码体系中,这是几行不起眼的httpwebrequest语句,散落在数百行业务逻辑之间,人工审查极难察觉。在设计器中,外部依赖被集中到“外部接口”清单,审查者打开这个清单的变更记录,会直接看到新增了一条指向“财务结算”模块WebAPI的连接器。审查者无需阅读任何代码,只需判断库存预警是否应该直接依赖财务模块,还是应该通过定义一个共享的“商品成本”数据模型来解耦。这个判断在可视化的设计器中可以在几秒内完成,而在代码中可能需要等到大规模重构时,才能被发现和处理,而此时,成本已经积累到非常高的程度。
更有现实意义的是,在AI辅助低代码开发中,AI不再面对一个无限自由的文本空间,而是面对一个由元数据定义的、可组合但受限的结构空间。它可以生成内容,但生成的内容必须嵌入既有的元数据模型,接受既有规则的校验。事前监管并非单一工具的职责,而是设计器(Designer)与运行时(Runtime)协作的结果——设计器负责正确地生产,运行时负责一致地执行。

图:AI生成内容与低代码设计器和运行时的关系
设计器的职责是在AI生成元数据的同时,通过分层验证将错误拦截在生成阶段,而非等到运行时才暴露:
实时验证与错误前移:对AI生成的元数据进行语法验证(表达式和配置值是否符合平台规范)、语义验证(引用的实体、字段、方法是否真实存在且类型匹配)、逻辑一致性验证(新增或修改的元数据是否与既有元数据存在冲突)和完整性验证(定义是否存在遗漏或断点)。不符合验证的生成结果在设计时即被拒绝,无法进入运行时。
依赖管理与影响分析:设计器实时追踪元数据之间的依赖关系。当AI修改某一模块的元数据时,设计器立即进行影响分析,并以可视化方式呈现影响范围,使监管者在变更生效前就能了解潜在风险,避免"改A坏B"的连锁反应。
级联更新与一致性保障:在监管者确认后,设计器自动遍历所有引用位置批量更新,并触发受影响元数据的重新验证,确保更新后的整体元数据仍然符合规范。
运行时的职责是在系统执行阶段,强制保证元数据定义的语义约束不被绕过:
执行语义约束:运行时只认可元数据中明确定义的操作,拒绝任何未在元数据协议中声明的行为,并提供沙箱环境对表达式和脚本的能力边界进行限制。这意味着即便设计器的静态验证存在遗漏,运行时也会在执行阶段兜底,防止语义分裂。
动态校验:运行时对实际数据进行动态校验,与设计器的静态验证形成互补,共同覆盖从建模到执行的完整验证链路。
例如,元数据驱动平台将日期选择器、下拉框、数据表格等UI组件,连同它们的默认配置(如字段校验规则、显示格式、交互行为等)统一定义为结构性元数据,存放在组件库中。当AI生成一个“包含日期范围筛选的订单列表页”时,它只能从组件库中选取组件并配置参数,无法绕开平台的日期选择器、自行实现一套行为不同的日期控件。这种硬性约束确保了AI生成的所有页面的控件表现与行为完全一致。在此基础上,元数据驱动的高可维护性依然得到保留,比如平台修复了日期选择器的某个问题(如统一了时区处理方式),所有页面自动获得更新,不会出现“有些页面已修复、有些页面仍有问题”的不一致状态。这正是元数据事前监管的价值所在,不是让人类在AI生成之后逐一检查它有没有造轮子,而是从结构上让造轮子这件事根本无法发生。
再举一个例子,企业系统中,短信通知、支付、物流查询等外部服务往往被多个业务模块同时调用。如果AI可以在每个模块中各自编写HTTP请求代码,就会出现有的模块用了正确的重试策略,有的没有;有的模块把API Key硬编码在代码里,有的用了配置项等问题。服务商一旦更换接口协议,我们需要逐一排查所有模块才能确认是否全部修改完毕。在元数据驱动的平台中,第三方API集成被定义为行为性元数据(连接器)。接口地址、认证方式、请求/响应映射、错误处理策略、重试机制等等统一在连接器定义中维护。AI只能引用已有的连接器,不能自行编写调用代码。这样,API Key集中存储、不会散落在代码中;服务商变更接口时只需更新一处连接器定义;监管者也可以在连接器层面一次性审查所有外部调用的行为规范,而不需要逐模块阅读代码。一致性在这里不是审美偏好,而是安全、可维护和可审查的前提条件。
这一机制的本质,是将大量监管的成本从事后检查转移到事前定义并约束,使AI的生成行为在结构上就符合预期,而非仅依赖事后的人工审查来兜底,从而改变审查成本与AI生成量的线性相关关系,让有效监管成为可能。
事前监管与事后监管的结合,构成了一个完整的元数据监管闭环,事前约束限制了AI的生成空间,事后可视化审查验证了生成结果是否符合预期。两者都依托低代码平台完成,使监管既不依赖逐行阅读代码,又能对系统的关键变化保持持续的感知与约束能力。从立项到现实,新的模式对低代码平台也提出了新的要求。到底什么样的低代码,才“接得住”AI?
在引入AI辅助开发之前,低代码平台首先需要具备稳定、明确且工程化的自身结构。这些能力并非因AI而生,但如果缺失,AI的加入只会加速系统走向失控。
平台必须以元数据为核心组织方式。这意味着页面、流程、数据模型、业务规则以及权限等设计成果,均应以结构化、可校验的元数据形式存在,并拥有清晰的Schema与语义边界,如明确哪些元数据是需要集中管理的策略、哪些是针对业务场景定制的常规逻辑。只有当平台自身能够“理解”这些对象,AI才可能在受控范围内对其进行生成与修改。如果低代码产品在底层仍依赖脚本甚至可执行代码,那么无论外层包装得多么可视化,其工程基础都不足以支持AI的安全介入。
平台需要具备相对稳定的中间抽象层。抽象层用于隔离业务建模与具体技术实现之间的变化。这一抽象层不仅服务于平台自身的演进,也直接决定了AI是否拥有一个长期可依赖的元数据规范。如果元数据的定义频繁随技术栈或实现策略变化,AI的理解与生成能力将不断失效,最终导致维护成本高于收益。
平台需要最大限度覆盖应用场景。用有限的平台功能覆盖无限的企业软件需求,在逻辑上并不能成立。所以,低代码平台均提供了各类扩展接口(如代码、脚本等)帮助开发者应对平台边界之外的场景。而对于AI基于扩展接口生成的代码和脚本,监管方式会回退到和传统编码开发一致,逐行审查、依赖静态检查、依赖人工经验。所以,平台能力边界对场景的覆盖度一定程度上决定了AI辅助低代码开发的竞争力。
重点提示,早期基于代码生成器技术路线的低代码平台在AI辅助开发的能力上限和编码开发类似,无法体现元数据带来的监管优势。
在工程视角下,AI辅助开发并不等同于在低代码平台上增加一个“更聪明的输入工具”。相反,AI的介入要求平台对其行为施加额外的结构性约束。
AI的输入与输出必须处在平台可理解的范围之内。AI 生成的结果不应直接表现为任意代码片段或不可解释的脚本,而应体现为对元数据的明确变更(包含创建新的元数据或者对现有元数据进行修改)。这种变更需要能够被平台校验其合法性、识别其影响范围,并在必要时被拒绝或回滚。只有当AI的行为被纳入平台既有的工程语义体系中,它才真正成为工程过程的一部分。
AI的行为约束不应主要依赖用户提示词层面的约定。除了用户输入的提示词,AI还需依托平台自身的规则体系。用户提示词只能在短期内影响AI的倾向,却无法形成长期稳定的治理机制。真正可持续的AI辅助开发,必须通过平台规则让AI在结构上“做不到违规操作”,如不允许在服务端逻辑中执行SQL等。这一转变,实质上是将部分监管责任从“使用规范”前移至低代码平台的设计本身。
AI的所有行为都应具备可审计和可回滚的特性。平台需要能够记录AI的输入上下文、生成结果以及最终执行路径,使人类决策者在任何时候都能理解AI对元数据做了什么,并判断这些变更是否应被采纳。这里的目标并非追究AI的责任,也不可能追求AI的责任,而是确保人类始终保留最终的工程判断权。
当AI开始频繁参与低代码开发活动后,原本基于人类开发者协作模式构建的工程治理功能,有一部分会被弱化,而另一部分则被强化。目前,人机协作尚处在探索阶段,行业还没有达成共识,但以下项目得到了实际项目的验证。
元数据的版本管理:版本管理能力是软件工程治理中不可回避的基础条件。平台需要支持基于语义的差异比较、冲突识别与合并,而不仅是文本层面的变更记录。由于AI的修改通常呈现出高频、小粒度、试探性的特征,如果缺乏有效的版本治理机制,这些修改将难以追踪和回滚,从而积累为不可控的技术风险。
元数据的权限控制:平台需要建立清晰的人机协同决策边界,哪些元数据可以由AI进行修改,哪些则不能。并非所有变更都适合交由AI来做,一些涉及核心模型、系统边界或安全权限的调整,仍然必须由人类进行判断和确认。如将业务模型云数据设置为“AI只读”,以避免让AI修改其中的数据校验策略等。
基于元数据的逻辑测试:相比于所见即所得的页面,复杂度更高的逻辑部分面对更大的监管风险,更需要通过自动化的回归测试机制来兜底保障。从测试用例的设计、管理到可接入CICD管线的执行机制,帮助开发者扎好最后一道防线。
软件工程没有银弹,即便聚焦在企业软件领域,AI辅助低代码开发依然不能包打天下。低代码技术本身存在一定的局限,导致在部分场景中无法展现出应有的优势。因为这些限制主要源于低代码平台本身的架构设计和组件丰富程度,而不是开发者。所以AI的出现,并没有对上述结论带来变化:不适合采用低代码开发的场景,同样不适合AI辅助低代码开发。
深入了解低代码技术在企业软件领域的上限和下限,请移步:第二部分的第五章
AI辅助开发与低代码两个概念都是企业数字化领域的热点,从业者对于他们存在诸多疑问。我们征集到一些提及率较高的,简单梳理如下,仅供参考。
Q1:能否通过多Agent协同的方式实现让AI监管AI?
A:在实践中,AI辅助测试用例设计、AI辅助版本管理等实践可以进一步降低人类的监管工作量。但AI需要被监管的核心原因是大语言模型“基于概率输出”的基本原理,执行监管的AI一样存在风险,所以必须由人来把关。
Q2:AI辅助编码开发与AI辅助低代码开发的效果存在显著差异吗?
A:两者的主要差异体现在监管的难度上,而不是效果。AI辅助开发的核心挑战依然是理解现实的业务需求,而不是理解代码或元数据的规范。
Q3:AI辅助低代码开发可以进一步降低低代码开发的学习门槛吗?
A:几乎不能。因为低代码的学习门槛集中在如何将现实中的问题转化为计算机能够理解的问题,如数据建模、业务逻辑抽象等。即便采用AI辅助,这些工作仍然需要开发者具备较强的逻辑思维能力。
Q4:AI辅助开发技术和低代码还有哪些结合的方式?
A:除了文章中重点介绍的AI辅助低代码开发外,您还可以在低代码平台的扩展上使用AI辅助编码开发,比如编写SQL脚本、开发插件等。
Q5:真实项目中,AI辅助开发为什么没有体现出宣传的效率倍增效果?
A:首先,AI辅助开发带来的效率提升与项目特点相关,相比于媒体常用做评测的微型项目,复杂度高的、长时间维护的企业软件项目,因为AI生成内容的“命中率”低,带来的提升幅度也相对低一些。另外,我们通常会评估软件开发全周期的效率,不是编码阶段的效率,而AI在软件设计、测试等环节的提效幅度低于编码阶段,一定程度上也“冲淡”了提效的程度。
Q6:AI辅助低代码开发对平台提出的最大挑战是什么?
A:平台的原生场景覆盖度。平台能力边界之外的场景,AI只能通过扩展接口生成代码或脚本,监管方式会完全退化为传统编码审查。而需要扩展处理的场景,往往是业务逻辑最复杂、最难形式化的部分,监管难度反而最高。这也意味着选型时,我们应重点评估平台对目标业务场景的原生覆盖能力(含平台内置功能和插件生态),而非扩展接口的灵活性。
Q7:在已经掌握了低代码使用能力的前提下,什么时候该使用AI辅助编码开发?
A:不需要长期维护的试验性项目。这种项目通常有需求变动大、对质量、安全和可维护性要求低等特点,可以一定程度上弱化监管,以及相关的工程治理问题,放大AI辅助编码开发的优势。