10年 Java,被一个 Agent 干翻了
这不是一篇劝你转行的文章,也不是一篇告诉你"AI 取代不了程序员"的安慰文。
我只是想把一件真实发生的事,完整地说给你听。
一、事情是这样开始的
我有个朋友,在一家中型互联网公司做后端,Java 工程师,干了三年。
不是那种混日子的,真的在认真学:设计模式背了一本,JVM 调优整理了十几篇笔记,Spring Boot 的源码翻过两遍,MySQL 索引原理能讲半个小时。
去年年底,他们组来了个新项目——给内部 HR 系统加一套"智能问答"模块,让员工可以用自然语言查询薪资、假期、报销等信息。
技术方案评审会上,组长说,这个功能应该不复杂,拆一下,主要是:
-
意图识别(分类用户的问题类型)
-
关键信息提取(从问题里提取日期、人名、金额等实体)
-
数据库查询生成(把自然语言转成 SQL)
-
结果格式化输出
按照他们组以往的开发节奏,这种需求大概要 6 到 8 周——需求评审、接口设计、分模块开发、联调、测试、上线。
然后他的实习生同事,一个刚入职两个月、代码写得还很生疏的应届生,举手说:
"我用 Agent 试试,可能一周能跑通。"
朋友当时心里其实有点不屑:意图识别哪那么简单,实体提取要处理多少边界情况,Text-to-SQL 光调 SQL 格式就够你折腾的……
结果,那个实习生用了 四天半,跑通了。
准确率不是 100%,大概在 85% 左右,还有一些边界情况没覆盖,但主流程是通的,演示给 HR 部门看,对方当场说"这就是我们想要的"。
朋友盯着那个演示看了很久,没说话。
二、他输在哪里?
这个问题值得认真回答,而不是用"AI 就是工具,程序员还是需要的"一句话糊弄过去。
他输的,不是技术能力,是问题的建模方式。
三年 Java 训练给他带来了一种根深蒂固的思维方式:把问题分解成确定性的模块,每个模块有明确的输入和输出,模块之间通过定义好的接口通信。
这种思维在工程领域是黄金法则。可靠、可测、可维护。
但这个 HR 问答系统的核心挑战,不是接口设计有多精巧,而是自然语言的不确定性本身。
"我上个月请了几天假"——上个月是哪个月?这里的"我"怎么鉴权?"几天"是自然日还是工作日?假期类型包不包括病假?
这些问题,用传统的规则系统来处理,每一个边界情况都是一个 if-else,一百种说法就是一百条规则,维护成本无限膨胀。
而 Agent 的处理方式完全不同:它不试图枚举所有情况,它理解语义,然后调用工具。
实习生的实现很简单:
tools = [
query_leave_records, # 查询请假记录
query_salary, # 查询薪资
query_reimbursement, # 查询报销
get_current_user_info, # 获取当前用户信息
get_date_range # 解析日期范围
]
agent = Agent(
llm=qwen_max,
tools=tools,
system_prompt="你是 HR 助手,帮助员工查询人事信息,查询前先确认用户身份..."
)
不到 50 行的核心代码,干掉了原本需要几个模块、几百行规则才能处理的问题。
朋友看着这段代码的感受,他后来跟我说,"像是看到有人用一块积木搭出了我用一百块积木才能搭出来的东西"。
三、这不是个例
我知道你可能觉得,这不过是一个特定场景,NLP 类的任务本来就适合 LLM,不代表 Agent 能干掉程序员。
这个反驳有一定道理,但问题是,**"NLP 类任务"的范围正在以你想象不到的速度扩张**。
过去,"NLP 任务"意味着文本分类、情感分析、关键词提取——这些很专业,离主流业务开发很远。
现在,这个词涵盖的范围是:
-
用户说"帮我把这份 Excel 按季度汇总一下"——这是 NLP 任务
-
用户说"找出最近三个月退货率超过 5% 的商品类目"——这是 NLP 任务
-
用户说"把昨天的会议录音整理成待办事项发给所有参会人"——这是 NLP 任务
-
运维说"帮我看看为什么这个接口今天下午两点开始响应变慢"——这还是 NLP 任务
几乎所有"把一个人的意图转化成系统操作"的场景,都在变成 NLP 任务。
而这些,恰恰是过去五年里,大量 CRUD 工程师每天在做的事情:把产品的需求文档,翻译成系统的操作流程。
这个"翻译"过程,Agent 正在一步一步地接管。
四、但是,有一件事 Agent 做不到
这里我不打算说"Agent 不能理解业务"、"Agent 没有情感"之类的宽慰话。这些是真的,但它们不能保护你的饭碗。
我想说的是一个更具体、更工程性的局限:
Agent 是一个消费基础设施的实体,而不是构建基础设施的实体。
实习生的 Agent 能跑通,是因为公司已经有了:
-
可调用的 HR 数据库接口
-
可查询的员工信息系统
-
稳定运行的身份认证中间件
-
格式规范的数据存储
如果这些底层东西都不存在,Agent 什么都做不到。
它调用的每一个 tool,背后都是某个工程师写的接口、设计的数据模型、建的索引、做的权限控制。
更进一步:那个 HR 问答系统上线之后,很快暴露了一些问题——
某些查询的 SQL 生成效率很低,因为底层表没有建合适的索引;在高并发时,Agent 频繁调用某个接口导致数据库连接数耗尽;某些敏感数据的权限控制,在 Agent 的自动化查询下出现了权限绕过的风险……
这些问题,实习生不知道怎么解决。不是他不努力,是这些问题要求你理解系统为什么会这样,而不只是怎么让它跑起来。
这是两种完全不同的知识。
前者需要的是:并发模型、数据库引擎原理、网络协议、操作系统调度……这些是真正的工程能力,Agent 不具备,短期内也不会具备。
五、真正危险的信号
所以,程序员是安全的吗?
不是。
危险的信号不是"Agent 取代了程序员",而是一个更隐蔽的变化:
会用 Agent 的人,正在取代不会用 Agent 的人。
这两件事表面相似,但性质完全不同。
前者是一场人与机器的对抗,有很多可以讲的道德哲学。
后者是一场人与人的竞争,规则从来都是这样的:能产出相同价值、成本更低的那个人赢。
一个熟练使用 Agent 的工程师,能在一天内完成另一个工程师需要一周才能完成的原型验证。他不需要在每一行代码上都强于对方——他只需要在单位时间的产出上超过对方。
这件事正在发生,而且速度很快。
GitHub Copilot 的数据说,使用 AI 编程辅助的开发者,任务完成速度平均提升 55%。这不是百分之几的边际改进,这是量级上的跃升。
如果你的竞争者开始系统性地使用这些工具,而你还在用纯手工的方式写每一行代码,你们之间的生产力差距,会在一两年内变得清晰可见。
六、那三年 Java 白学了吗?
没有。但需要重新理解"学了"意味着什么。
我见过两种"学了 Java 三年"的人:
第一种人:他记住了大量 API、框架用法、设计模式名称。遇到问题,脑子里第一反应是"这个应该用什么设计模式"、"这个框架有没有对应的功能"。
这种人,被 Agent 冲击最严重。因为 API 的查找、框架的调用、样板代码的生成,这些正是 AI 辅助编程最擅长的事情。他的核心价值——记住了很多东西——正在被大幅度贬值。
第二种人:他通过三年的实践,建立了一套理解复杂系统的思维模型。他知道为什么分布式系统里的一致性这么难,知道数据库事务隔离级别背后的取舍是什么,知道高并发时内存和 CPU 的争用是怎么产生的。
这种人,不但没有被冲击,反而被放大了。
因为他现在可以用 Agent 快速生成代码原型,用 AI 辅助写测试,把自己从繁琐的实现细节中解放出来,把更多时间花在只有他能做的那部分工作上——系统设计、架构决策、性能分析、安全审查。
Agent 给了他一个杠杆,让他的工程判断力,能够撬动比以前大得多的工作量。
七、一个值得认真对待的问题
那个被实习生干翻了的朋友,后来花了两周时间,认真研究了一遍 Agent 的工作原理——不是调用 API 那种用法,而是真正理解:为什么 Agent 能处理自然语言,它的推理是怎么工作的,工具调用的机制是什么,什么情况下 Agent 会失败。
他发现了一件有意思的事:
那个实习生的 Agent,在处理"跨年度假期查询"时,会生成错误的 SQL——因为数据库里的日期字段存的是字符串,格式是 YYYYMMDD,而 Agent 生成的查询用的是标准 ISO 格式,导致比较逻辑出错。
这个 Bug,实习生看了半天没找到原因,因为他不理解数据库字段类型和比较运算之间的关系。
我朋友五分钟定位了问题,写了一行修复代码,顺手给底层接口加了一个数据格式转换层,让 Agent 永远不会再踩这个坑。
他突然意识到,他需要做的不是跟 Agent 比谁能更快地生成功能代码,而是成为那个让 Agent 能够正确工作的人。
这是一个完全不同的定位,但并不比原来的定位低级——反而更稀缺,更难被替代。
八、行业正在分层
这件事让我开始认真思考一个问题:软件工程这个职业,正在发生什么样的结构性变化?
我的判断是:这个行业正在发生一次能力层级的重新洗牌,而不是简单的"AI 取代程序员"。
原来的层级大概是这样的:
初级工程师:写功能代码,按规范实现需求
中级工程师:设计模块,解决技术难题
高级工程师:架构设计,技术选型,团队指导
AI 工具的介入,正在让这个层级往两端撕裂:
一端向下延伸:一个没有编程经验的人,现在可以用 Agent 完成过去需要初级工程师才能做的工作。产品经理可以自己做数据分析,运营可以自己写自动化脚本,非技术背景的人可以搭建简单的系统。
另一端向上压缩:真正有价值的工程能力,越来越集中在那些对底层有深刻理解、能够设计可靠系统、能够解决 Agent 搞不定的边界问题的人手里。
中间那一层——写功能代码的普通工程师——被挤压得最厉害。
这不是危言耸听,这是供需关系的基本逻辑:当 AI 工具大幅提升了少数高水平工程师的产出,用更少的人完成同等工作量变得可能,对平均水平工程师的需求就会下降。
九、那具体应该怎么办?
给几个我认为真正有用的建议,不是"学 Python"或者"转 AI 方向"这种废话。
第一:停止把框架当核心竞争力。
框架会变,生态会迁移,AI 能生成框架代码。你真正的竞争力,是你对底层原理的理解——操作系统、网络、数据库、并发、安全。这些东西不会因为 AI 的出现而贬值,反而会因为 AI 无法真正理解它们,而变得更值钱。
第二:把 AI 工具纳入你的日常工具链,但保持对输出的审判力。
不要排斥 AI 辅助编程,但也不要盲信它的输出。AI 生成的代码,有时候"看起来对",但在边界情况、并发安全、错误处理上存在微妙的问题。发现这些问题,需要真正的工程判断力,而这正是你的价值所在。
第三:从"实现者"转向"设计者"。
以前你的价值主要体现在"把需求翻译成代码"这个过程。现在,AI 可以参与这个翻译,你的价值应该转向前一步:判断什么样的技术方案是对的,什么样的 Agent 设计是可靠的,什么样的接口是合理的。
这是一种更高阶的工程能力,也是 Agent 目前无法替代你的地方。
第四:认真理解 Agent 的原理,而不只是会用 API。
知道 Agent 怎么规划任务、如何调用工具、在什么情况下会失败——这些知识会让你成为那个能够设计可靠 Agent 系统的人,而不是被 Agent 替代的人。
十、最后说一件小事
我朋友那个被 Agent"干翻"的故事,有一个续集。
两个月后,公司决定把这个 HR 问答系统推广到更多场景,同时要解决准确率不稳定、某些复杂查询超时、以及之前发现的权限漏洞等问题。
实习生被分配去做另一个新项目的原型验证——他擅长的事。
而这个系统的技术改造,交给了我的朋友。
因为接下来要做的事,不是"让它跑起来",而是"让它在生产环境里可靠地运行"——这是两件截然不同的事。
工程,从来都不只是让程序能跑的那一刻。
它是程序在第 100 万次请求时还能正确运行,是在数据格式出乎意料时系统能够优雅降级,是在半夜三点告警响起时你能在五分钟内定位问题。
这些能力,不是三年 Java 学来的——是三年里遇到的每一个生产故障、每一个匪夷所思的 Bug、每一次深夜的压测,积累下来的。
Agent 能生成代码,但它没有遇到过这些。
所以,不是三年 Java 白学了。
是你用它换来的那些真实的系统感知,还没有找到它本来应该在的位置。
这是这个时代里,几乎每一个工程师都会经历的一次认知重构。
越早开始,越主动。
如果你也在经历类似的困惑,或者有不同的看法,欢迎留言。
更多推荐

所有评论(0)