从实际项目分析软件工程的未来:AI Native Coder的思考
说起来,上周在分析一个知识图谱项目,代码写得很规范,分层架构清晰,事件驱动设计也很优雅。但让我惊讶的是,团队还在用传统方式开发:需求文档→接口设计→编码→测试→上线,一个都不少。
作为AI NativeCoder,我一直在思考一个问题:AI时代的软件工程应该是什么样子?直到看到最近开发的一个项目,我突然有了答案。
这个项目本身很棒——基于Spring Boot的微服务架构,知识图谱管理、向量嵌入、多模型集成,技术栈现代化程度很高。但更重要的是,它的架构特点让它特别适合拆解为Agent Skills:模块化程度高、职责边界清晰、接口契约完善。
为什么这很重要?因为我们正在进入软件3.0时代。
我花了很多时间研究AI对软件工程的影响。有个观点很深刻:软件工程的传统范式建立在确定性之上——相同的输入必然产生相同的输出,程序行为完全可预测。
而LLM的引入,打破了这一模式。
Andrej Karpathy(前OpenAI、特斯拉AI负责人)把编程范式分为三个阶段:
- 软件1.0:规则驱动的传统软件,本质是有限状态机
- 软件2.0:数据驱动的人工神经网络,本质是统计模型
- 软件3.0:上下文驱动的大模型应用,以自然语言为接口
这不是从汇编语言到高级语言的抽象层次提升,而是更根本的跨越:从确定性编程到非确定性编程。
Martin Fowler(软件大师)也表达了相似的观点:LLM带来的变化,本质上是编程方式的范式转移。
这个转移带来的最直接影响,是开发者角色的重塑。
去年有个数据挺猛:某电商平台双十一系统迭代中,AI生成代码占比达52%。GitHubCopilot已覆盖37%的基础代码编写。但更关键的是,初级开发者的招聘量减少了60%。
为什么?因为纯粹执行者的岗位正在消亡。
如果你的工作主要是把StackOverflow上的代码搬运到IDE里,或者只掌握规范化知识(语法、API调用),那危机已经兵临城下了。AI在处理这些”确定性任务”上,比你更快、更准、更不爱发牢骚。
但另一组数据让我意外:系统分析师岗位需求增长8%,而AI伦理顾问、多智能体架构师等新兴岗位需求激增380%。
这个分化说明什么?软件工程师的核心价值正在从”代码编写速度”转向”问题定义深度”。
回到项目上,让我先说说它的技术架构。
这是一个基于知识图谱、向量嵌入和大语言模型技术的企业级AI数据管理平台。技术栈包括Spring Boot、Dubbo、Neo4j、Redis、LangChain4j,支持通义千问、Ollama等多种模型。
架构上采用经典的四层设计:
- 应用层(App):核心业务逻辑实现
- 客户端层(Client):对外暴露的服务接口和DTO
- 领域层(Domain):核心业务模型和领域实体
- 基础设施层(Infrastructure):数据库访问、外部服务集成
这个分层架构让职责边界非常清晰。再加上它的事件驱动设计,工厂模式的应用,以及策略模式的实践。
这些设计模式的组合,让它天然适合拆解为独立的、可复用的Skills。
为什么说”天然适合”?因为:
第一,模块化程度高。每个模块职责单一,高内聚低耦合。
第二,接口契约完善。Service接口与实现类的解耦机制让协作变得容易。
第三,配置与代码分离。动态加载机制支持热更新,不需要重启服务。
第四,可扩展性强。插件化设计支持新功能模块的快速接入。
这些都是Agent Skills协作需要的特质。如果一个系统本身就很混乱,想拆解成Skills只会更乱。但这个项目不是这样,它的架构设计已经为Agent化拆解奠定了基础。
那么,如何把该项目拆解为Agent Skills?
我根据产品设计、需求设计、架构设计、代码实现四个维度,拆解出12个独立的Skills。每个Skill都有明确的职责、输入输出标准和协作机制。
应用场景:当业务方提出新功能需求时(如”支持新的向量数据库”)
触发条件:收到自然语言描述的需求
输入标准:
-
需求背景描述 -
目标用户画像 -
预期业务价值
输出标准:
-
结构化需求文档(Markdown格式) -
用户故事列表(As a…I want…So that…) -
优先级建议(MoSCoW原则)
与其他Skills的协作:将需求传递给功能模块划分Skill
核心逻辑:利用LLM理解自然语言需求,提取关键信息,转化为技术可理解的结构化文档。
应用场景:将复杂需求拆解为可执行的用户故事
触发条件:收到结构化需求文档
输入标准:需求分析Skill的输出
-
用户故事卡片(包含验收标准) -
故事依赖关系图
协作机制:与功能模块划分Skill同步进行,确保故事与模块匹配
应用场景:设计新功能前,了解业界最佳实践
触发条件:需求涉及新领域或重大变更
输入标准:功能描述、目标市场
-
竞品功能对比表 -
最佳实践总结 -
创新机会点
协作机制:为技术选型Skill提供参考
应用场景:基于需求和用户故事生成产品需求文档
触发条件:用户故事编写完成
输入标准:用户故事列表、需求文档
输出标准:标准PRD(包含功能描述、交互流程、验收标准)
协作机制:PRD是功能模块划分Skill和接口设计Skill的输入
应用场景:将PRD拆解为技术可实现的模块
触发条件:PRD生成完成
输入标准:PRD文档、现有架构文档
-
模块划分方案(树形结构) -
模块依赖关系图 -
接口边界定义
协作机制:与架构设计Skill协同,确保模块划分符合整体架构
核心逻辑:基于项目的四层架构,遵循高内聚低耦合原则,结合领域驱动设计(DDD)思想,进行模块拆分。
应用场景:为每个模块定义对外接口
触发条件:功能模块划分完成
输入标准:模块划分方案、PRD
-
RESTfulAPI规范(OpenAPI 3.0格式) -
DTO定义(Java POJO) -
接口文档(Markdown)
协作机制:输出是代码生成Skill的输入
核心逻辑:参考项目的Service接口定义风格,遵循RESTful最佳实践,确保接口语义清晰、版本可控。
应用场景:基于需求生成测试用例
触发条件:PRD或用户故事完成
输入标准:需求文档、用户故事
-
测试用例清单(按优先级分类) -
测试数据准备清单 -
自动化测试框架建议
协作机制:与代码生成Skill同步,确保代码可测试
应用场景:为新功能选择合适的技术方案
触发条件:涉及新领域或性能敏感的功能
输入标准:需求文档、性能指标、成本约束
-
技术方案对比表(包含优劣势分析) -
推荐方案(含风险评估) -
PoC验证计划
协作机制:为代码生成Skill提供技术约束
核心逻辑:参考项目的技术选型实践(如多向量数据库支持、多模型提供商集成),建立评估维度(性能、成本、生态、维护性)。
应用场景:设计或优化整体系统架构
触发条件:重大功能变更或新项目启动
输入标准:需求文档、性能指标、现有架构
-
架构设计文档(C4模型) -
技术栈清单 -
部署架构图
协作机制:与功能模块划分Skill协同,确保架构与模块匹配
核心逻辑:遵循项目的分层架构原则,结合微服务设计模式,确保系统的可扩展性、可维护性和高可用性。
应用场景:设计或优化数据库schema
触发条件:功能模块划分完成,涉及数据存储
输入标准:功能模块、数据模型需求
-
ER图(实体关系图) -
表结构定义(DDL) -
索引优化建议
核心逻辑:参考项目的Neo4j图数据库设计和MySQL关系型数据库设计,结合业务场景选择合适的存储方案。
应用场景:生成可运行的业务代码
触发条件:接口定义、数据库设计完成
-
接口定义(OpenAPI规范) -
DTO定义 -
数据库schema -
技术栈约束 -
Service接口和实现类 -
Repository层代码 -
Controller层代码 -
单元测试代码
协作机制:接收来自上游Skills的输入,输出到单元测试Skill
核心逻辑:基于项目的代码风格,遵循Clean Code原则,生成高质量、可维护的代码。支持Dubbo微服务框架集成,LangChain4j AI框架集成。
应用场景:为生成的代码编写单元测试
触发条件:模块开发Skill完成
-
源代码 -
测试用例清单(来自测试用例设计Skill) -
JUnit测试类 -
Mock对象配置 -
测试覆盖率报告
协作机制:验证代码质量,反馈给模块开发Skill进行迭代
核心逻辑:遵循测试金字塔原则,优先编写单元测试,使用Mock隔离外部依赖,确保测试的独立性和可重复性。参考项目的测试实践,确保核心逻辑的测试覆盖率≥90%。
拆解出12个Skills只是第一步。真正让它们像一个团队一样协作,需要设计一套协作机制。
每个Skill的输入输出都必须标准化,这样Skills之间才能无缝对接。
我定义了一套JSONSchema作为Skills之间的通信协议:
json
{"task_id": "string","skill_name": "string","input": {"type": "string","data": "object"},"output": {"type": "string","data": "object"},"metadata": {"timestamp": "datetime","version": "string"}}
这套协议包含:
- task_id:全局唯一的任务标识,用于全链路追踪
- skill_name:当前执行Skill的名称
-
input:标准化输入(包含类型和数据) -
output:标准化输出(包含类型和数据) - metadata:元数据(时间戳、版本等)
Skills之间的协作不是硬编码的调用链,而是基于状态机的任务编排。
我参考LangGraph框架的设计,用有向图来描述Skills之间的流转:
节点(Nodes):每个Skill是一个节点
边(Edges):描述Skills之间的流转逻辑
状态(State):共享的工作记忆
状态机的设计决定了协作的灵活性。例如:
- 顺序流转:需求分析→用户故事编写→PRD生成
- 条件分支:如果需求涉及新领域,触发竞品分析Skill
-
并行执行:接口定义和数据库设计可以并行进行 - 循环迭代:代码生成后,如果测试不通过,触发重构
Skills之间的通信采用事件驱动机制,参考项目的消息订阅设计。
当某个Skill完成时,它会发布一个事件:
{"event_type": "skill_completed","skill_name": "requirement_analysis","task_id": "task_001","output": {...},"timestamp": "2026-02-11T11:30:00Z"}
订阅该事件的Skills会自动接收并处理。这种异步解耦的方式让协作更灵活。
Skills协作最大的挑战是:当某个环节出错时,如何快速定位问题?
我引入了全链路追踪机制:
每个任务都有一个唯一的taskid,从需求分析到代码上线,所有Skills的日志都绑定这个taskid。配合OpenTelemetry,可以在Grafana上实时查看Skills的执行情况:
-
每个Skill的执行时长 -
Skills之间的调用关系 -
哪个Skill出现了异常 -
输入输出的原始JSON
理论说完了,怎么落地?我建议分三个阶段:
目标:验证Skills协作的可行性,积累经验
选择项目:找一个规模较小、交付压力不大的项目
实施步骤:
- 选型Skills:先从非核心的Skills开始试点
-
需求分析Skill -
用户故事编写Skill -
PRD生成Skill - 建立标准:
-
定义输入输出JSONSchema -
编写Skills的测试集 -
设计协作流程 - 小步快跑:
-
每个Skill都要有测试验证 -
每次改动都要能快速回滚 -
收集参与者的反馈
预期成果:
-
验证3个Skills的协作可行性 -
收集至少10个真实案例 -
总结出最佳实践
- 扩展Skills:
-
新增功能模块划分Skill -
新增接口定义Skill -
新增模块开发Skill - 优化协作:
-
引入LangGraph框架进行任务编排 -
建立Skills的能力图谱 -
实现Skills的版本管理 - 团队培训:
-
培训第一批”AI教练” -
在组织内做布道 -
至少6个Skills稳定运行 -
覆盖20%的项目 -
开发效率提升30%
目标:Skills协作成为团队的标准工作方式
- 完善生态:
-
新增剩余6个Skills -
建立Skills市场(复用历史Skills) -
实现Skills的自动评估和优化 - 深度集成:
-
Skills与CI/CDpipeline集成 -
Skills与代码仓库关联 -
Skills与项目管理工具打通 - 持续演进:
-
建立反馈闭环 -
定期评估模型能力 -
优化协作流程 -
12个Skills全部上线 -
覆盖80%的项目 -
开发效率提升60%以上
理论上听起来很美好,但实际落地会遇到很多问题。我把最常见的问题和解决方案列出来。
问题:AI生成的需求分析可能包含不真实的信息,比如虚构竞品功能、编造技术细节。
解决方案:三层验证机制
- 第一层:交叉验证
-
用两个不同的模型独立生成需求分析 -
对比结果,找出差异点 -
差异点需要人工确认 - 第二层:外部验证
-
连接外部数据源(如产品官网、技术文档) -
验证关键信息的准确性 -
标注信息来源 - 第三层:人工审计
-
对高风险模块(如支付、安全)进行人工审计 -
建立审计日志 -
定义审计标准
问题:AI能在一天内生成10万行代码,但人类理解的速度跟不上。代码库充斥着虽然能跑但没人真正读懂的逻辑。
解决方案:重构与AI协同进化
- 小步重构
-
将AI生成的”一次性代码”拆解为可理解的小模块 -
提取函数、简化逻辑 -
增加注释和文档 - 定期审计
-
每个迭代进行代码审计 -
识别重复代码和复杂逻辑 -
生成重构建议 - 知识沉淀
-
将重构经验存入知识库 -
训练AI生成更易维护的代码 -
形成持续优化的闭环
问题:12个Skills协作,出错率会指数级上升。A说该派单,B说直接回复,怎么裁决?
解决方案:清晰的职责边界和冲突解决机制
- 职责边界
-
每个Skill只做一件事 -
不要让一个Skill既做需求又做设计又做编码 -
定义清晰的输入输出 - 优先级机制
-
定义Skills的优先级 -
当发生冲突时,优先级高的Skill决策 -
优先级根据业务价值动态调整 - 人工介入点
-
在关键决策点设置人工介入 -
定义人工介入的条件 -
记录人工决策的依据
问题:团队成员担心被AI取代,抗拒改变工作方式。
解决方案:角色重塑和价值重塑
- 角色定位
-
强调AI是工具,不是替代 -
开发者从”代码编写者”转变为”智能体教练” -
人类的核心价值是定义问题、做决策、守底线 - 价值展示
-
展示Skills协作带来的效率提升 -
让参与者看到自己的成长 - 培训支持
-
提供Skills使用的培训 -
建立 mentorship 机制
写到这里,我想起之前和几个技术Leader聊天,大家都在问同一个问题:AI时代的软件工程师,到底需要什么能力?
我认为,未来需要构建”技术深度 × 行业广度 × 伦理认知”的三维能力体系。
技术深度:掌握智能体架构、多模型协作、系统设计等前沿技术。不是会用API,而是能设计和优化整个系统。
行业广度:理解业务场景,知道哪些问题值得用AI解决,哪些不该。AI不是万能的,能用最简单方案解决问题的才是高手。
伦理认知:理解AI系统的潜在风险,设计防护机制。当AI生成代码涉及版权或安全问题时,需要有人把关。
卡帕西(前OpenAI、特斯拉AI负责人)有个判断我很认同:2026年将迎来模型层与智能体层的”乘积式进化”。一方面AI基础模型的能力会持续突破,另一方面智能体的自主规划执行能力会爆发式提升。
这带来的影响是两极分化。
掌握智能体工程的开发者,能凭借AI的助力一个人完成过去团队级的任务,实现”一人公司”级的效率跃迁。
而那些只依赖随机生成代码,缺乏架构判断力的开发者,很可能被市场淘汰。
但我想强调的是:AI的出现不是对软件工程的否定,而是对人类劳动价值的重新发现。
当我们看到AI生成的代码通过单元测试,当我们见证Skills协作完成任务,当我们体验自然语言驱动的开发流程,我们正在重新定义”工作”的本质——从知识重复到价值创造,从经验决策到数据智能,从个体劳动到人机共生。
作为AI NativeCoder,我的核心观点很简单:
软件工程的未来,不是AI取代程序员,是程序员和Agent协作创造更大的价值。
人做什么?定义问题、做决策、守底线。
Agent做什么?执行任务、生成代码、跑测试。
这个分工,比谁都清楚。
回想起上周三那个下午,分析项目的时候,我看到的不仅是一个技术架构优秀的产品,更是一个软件工程范式转移的缩影。
它的分层架构、事件驱动、设计模式应用,让Agent Skills的拆解成为可能。而Agent Skills的协作,又会反过来推动软件工程的智能化。
这不是一蹴而就的。它需要试点验证、需要团队磨合、需要持续优化。
但方向已经明确:从人力驱动到智能体协作,这是软件工程的生产力变革。
而你,准备好了吗?
夜雨聆风
