AI 时代,Java 开发者正在从“实现固定业务流程”,逐步走向“让系统理解目标、调用能力并完成任务”。
过去十几年,Java 企业开发形成了一套非常成熟的模式。
无论是 ERP、CRM、OA,还是各种项目管理、生产管理和内部业务系统,本质上大多围绕一条固定链路运行:
flowchart LR
A[用户] --> B[页面]
B --> C[接口]
C --> D[Service]
D --> E[数据库]
E --> F[返回结果]
用户点击按钮,前端提交参数,Controller 接收请求,Service 执行业务逻辑,最后读写数据库。
这种模式稳定、清晰,也支撑了大量企业软件。
但大模型出现之后,软件正在发生一个值得 Java 开发者关注的变化:
过去是用户告诉系统“怎么做”,未来越来越多场景会变成用户告诉系统“我要什么结果”。
比如用户提出:
帮我分析一下这个项目为什么延期。
传统业务系统能做的是把项目进度、施工日志、材料记录、人员情况分别展示出来,最后仍然需要人自己查看和判断。
而 Agent 可以进一步完成:
flowchart LR
A[用户提出目标] --> B[理解问题]
B --> C[拆解任务]
C --> D[查询业务数据]
D --> E[分析异常]
E --> F[生成结论]
F --> G[给出处理建议]
这就是从 CRUD 到 Agent 的变化。
它并不意味着传统系统要被推倒重来。
恰恰相反,未来真正有价值的企业 AI,往往建立在现有 Java 业务系统之上。
一、什么是企业级 AI Agent?
很多人第一次接触 Agent,会把它理解成:
一个更聪明的聊天机器人。
但聊天只是交互方式。
真正的企业级 Agent,更接近一个可以调用企业能力的“智能执行层”。
一个完整的 Agent 通常包含几个核心部分:
flowchart LR
A[用户目标] --> B[Agent]
B --> C[理解意图]
C --> D[任务规划]
D --> E[选择工具]
E --> F[调用业务系统]
F --> G[获得真实数据]
G --> H[分析与推理]
H --> I[返回结果或执行动作]
这里最关键的一点是:
Agent 不应该只依靠模型本身回答问题。
它需要连接真实业务。
例如:
用户问:
1001 项目目前有哪些风险?
模型自身不可能知道 1001 项目的真实情况。
Agent 必须先判断需要哪些信息,然后调用:
- 项目查询接口;
- 施工日志接口;
- 整改记录接口;
- 合同变更接口;
- 项目知识库。
拿到真实数据之后,再进行分析。
因此,一个真正可用的企业 Agent,本质上是:
LLM + Tool Calling + 企业数据 + 业务规则 + 权限体系。
二、CRUD 和 Agent 最大的区别是什么?
传统 CRUD 系统实际上非常擅长执行确定性任务。
比如:
flowchart LR
A[用户填写表单] --> B[提交接口]
B --> C[校验参数]
C --> D[执行Service]
D --> E[写入数据库]
程序员提前定义好了:
- 用户点哪个按钮;
- 请求哪个接口;
- Service 执行什么;
- 最后修改哪张表。
整个流程都是确定的。
Agent 则不同。
用户可能只提出一个目标:
帮我看看最近哪个项目最需要关注。
这时候系统需要自己决定:
flowchart LR
A[分析所有在建项目] --> B[查询项目进度]
B --> C[查询延期情况]
C --> D[查询整改记录]
D --> E[查询合同变更]
E --> F[计算风险]
F --> G[筛选重点项目]
也就是说:
CRUD 的核心是流程确定
开发人员决定:
第一步做什么,第二步做什么。
Agent 的核心是目标确定
开发人员提供:
Agent 可以使用哪些能力,以及哪些规则不能突破。
至于具体调用哪个工具、以什么顺序完成任务,可以由 Agent 根据上下文动态决定。
三、为什么企业 AI 最终绕不开 Java?
一提到 AI 开发,很多人的第一反应仍然是 Python。
如果讨论:
- 模型训练;
- 深度学习;
- 数据科学;
- 推理框架;
Python 的确拥有明显优势。
但企业 AI 应用并不等于训练模型。
绝大多数企业真正需要解决的问题是:
怎么让大模型连接现有业务系统。
而大量企业核心业务恰恰运行在 Java 体系中。
例如:
flowchart LR
A[Spring Boot业务系统] --> B[订单]
A --> C[客户]
A --> D[合同]
A --> E[项目]
A --> F[审批]
AI 如果想真正产生业务价值,就必须连接这些能力。
因此未来很可能出现这样的架构:
flowchart LR
A[用户] --> B[AI Agent]
B --> C[Spring Boot业务服务]
C --> D[MySQL]
C --> E[Redis]
C --> F[第三方系统]
这正是 Java 开发者的优势。
Java 开发者已经掌握:
- 企业业务模型;
- 数据库设计;
- 权限管理;
- 事务;
- 缓存;
- 消息队列;
- API;
- 微服务;
- 系统稳定性。
AI 并不是把这些能力全部替换。
而是在它们上面增加了一层新的智能入口。
四、Spring AI 给 Java 带来了什么?
过去开发一个普通 Java 企业应用,典型技术栈可能是:
flowchart LR
A[Spring Boot] --> B[MySQL]
B --> C[Redis]
C --> D[MQ]
D --> E[业务系统]
进入 AI 应用阶段之后,会逐渐增加新的组件:
flowchart LR
A[Spring Boot] --> B[Spring AI]
B --> C[LLM]
C --> D[Tool Calling]
D --> E[RAG]
E --> F[Agent]
Spring AI 的价值并不是“让 Java 可以调用 GPT”。
HTTP 请求任何语言都能发送。
真正重要的是,它尝试把大模型能力纳入 Spring 熟悉的工程体系:
- 模型调用;
- Prompt;
- Tool Calling;
- 对话上下文;
- Embedding;
- Vector Store;
- RAG;
- Observability;
- Spring Bean 生命周期。
于是 AI 不再是系统旁边一个孤立的接口,而可以逐渐成为业务架构的一部分。
一个典型企业 AI 系统可以设计成:
flowchart LR
A[用户] --> B[AI入口]
B --> C[Agent]
C --> D[Tool Calling]
C --> E[Memory]
C --> F[RAG]
D --> G[CRM]
D --> H[ERP]
D --> I[项目系统]
D --> J[审批系统]
E --> K[(Redis)]
F --> L[(Vector Store)]
F --> M[企业文档]
G --> N[(MySQL)]
H --> N
I --> N
到这里,AI 就开始真正进入传统 Java 企业架构。
五、Tool Calling:Agent 和普通聊天机器人的分界线
如果只能聊天,它本质上仍然只是一个 AI 助手。
当模型能够调用真实业务能力之后,Agent 才真正开始“工作”。
假设系统已经存在一个项目服务:
@Service
public class ProjectService {
public ProjectDetail getProject(Long projectId) {
// 查询数据库
return null;
}
}
我们可以把它包装成 Agent 可以使用的工具。
下面是一个简化示例:
@Component
public class ProjectTools {
private final ProjectService projectService;
public ProjectTools(ProjectService projectService) {
this.projectService = projectService;
}
@Tool(description = "根据项目ID查询项目详细信息")
public ProjectDetail queryProject(Long projectId) {
return projectService.getProject(projectId);
}
}
于是用户输入:
帮我分析 1001 项目的风险。
系统内部的链路不再只是:
flowchart LR
A[用户] --> B[LLM]
B --> C[生成文字]
而会变成:
flowchart LR
A[用户] --> B[Agent]
B --> C[LLM判断需要数据]
C --> D[调用queryProject]
D --> E[ProjectService]
E --> F[(MySQL)]
F --> G[返回真实项目数据]
G --> H[LLM分析]
H --> I[生成风险报告]
完整交互过程也可以用时序图表示:
sequenceDiagram
participant U as 用户
participant A as Agent
participant L as LLM
participant T as ProjectTool
participant S as ProjectService
participant DB as MySQL
U->>A: 分析1001项目风险
A->>L: 理解用户目标
L-->>A: 需要查询项目资料
A->>T: queryProject(1001)
T->>S: getProject(1001)
S->>DB: 查询项目数据
DB-->>S: 返回数据
S-->>T: ProjectDetail
T-->>A: 返回工具结果
A->>L: 基于真实数据分析
L-->>A: 输出风险结论
A-->>U: 返回分析报告
这时大模型负责的是:
理解和推理。
Java 系统负责的是:
真实业务能力。
这种职责划分非常重要。
六、不要让 Agent 直接操作数据库
第一次做 Agent 时,一个很容易产生的想法是:
既然模型这么聪明,干脆把数据库查询能力直接给它。
例如让模型自己生成 SQL。
这在 Demo 中很方便,但在企业生产环境里风险很高。
更合理的架构应该是:
flowchart LR
A[Agent] --> B[受控Tool]
B --> C[Service业务层]
C --> D[Repository]
D --> E[(Database)]
而不是:
flowchart LR
A[Agent] --> B[动态SQL]
B --> C[(生产数据库)]
原因并不复杂。
传统 Service 已经包含大量成熟能力:
- 权限判断;
- 参数校验;
- 数据范围控制;
- 事务;
- 审计;
- 业务规则。
如果 Agent 绕过 Service 直接访问数据库,相当于绕过了多年积累的业务边界。
因此,在企业 Agent 中,Tool 最合理的定位不是:
给模型一个万能入口。
而是:
把经过控制的业务能力暴露给模型。
七、RAG:让 Agent 理解企业自己的知识
Tool Calling 更适合结构化业务数据。
但企业里还有大量非结构化资料:
- Word;
- PDF;
- Excel;
- 会议纪要;
- 制度文件;
- 技术文档;
- 项目资料;
- 操作手册。
这些内容不适合全部硬编码成接口。
于是就需要 RAG。
典型流程:
flowchart LR
A[企业文档] --> B[文档解析]
B --> C[文本切片]
C --> D[Embedding]
D --> E[(Vector Store)]
E --> F[语义检索]
F --> G[LLM]
G --> H[生成答案]
比如用户询问:
公司项目离职交接需要哪些材料?
系统可以先从知识库检索:
- 《离职交接制度》;
- 《岗位 SOP 管理制度》;
- 《项目资料归档规范》。
然后把真正相关的内容交给模型。
相比单纯询问大模型:
离职交接需要哪些东西?
区别非常大。
前者回答的是:
你公司的制度是什么。
后者回答的只是:
大模型认为一般公司可能怎么做。
企业 AI 真正重要的知识,恰恰是前者。
八、Memory 不等于把聊天记录全部塞进去
另外一个常见误区是:
Agent 要有记忆,那我把全部历史聊天记录传给模型不就好了?
短期可以。
长期一定会遇到问题:
- Token 越来越多;
- 成本越来越高;
- 上下文越来越混乱;
- 无关信息影响推理;
- 历史数据难以管理。
更合理的 Memory 应该分层。
flowchart LR
A[当前对话] --> B[短期Memory]
B --> C[摘要记忆]
C --> D[长期用户信息]
D --> E[业务上下文]
比如:
用户第一次说:
帮我分析衡阳 XX 项目。
随后说:
再看看它最近一周的施工日志。
Agent 应该能够知道:
“它”指的是刚才的项目。
但这并不意味着半年之后,每次请求都需要把半年聊天记录完整发送给模型。
因此 Memory 的核心不是:
保存所有内容。
而是:
保存未来推理真正需要的上下文。
九、企业 Agent 最难的其实不是模型
做到这里会发现:
调用大模型反而是整个系统最简单的一部分。
真正困难的是工程化。
1. 权限
假设用户问:
帮我查一下这个项目的利润。
首先要判断:
他有没有权限查看利润?
因此真正链路应该是:
flowchart LR
A[用户] --> B[身份认证]
B --> C[权限判断]
C --> D[Agent]
D --> E[Tool]
E --> F[业务系统]
不能因为换成 AI,就绕过原来的权限体系。
2. 审计
如果 Agent 可以:
- 创建审批;
- 修改数据;
- 发送邮件;
- 修改项目状态;
那么每一次行为都必须能够追踪:
flowchart LR
A[Agent操作] --> B[记录调用人]
B --> C[记录Tool]
C --> D[记录参数]
D --> E[记录结果]
E --> F[形成审计日志]
出了问题之后,至少能够回答:
谁触发的?
Agent 为什么调用这个工具?
调用了什么?
修改了什么?
3. 幂等
Agent 最大特点之一就是可能重复尝试。
例如:
给张三发送项目提醒。
如果 Agent 因为超时重新执行一次,就可能发送两封邮件。
因此 Tool 不能只考虑:
能不能执行。
还必须考虑:
重复执行会发生什么。
很多传统后端中的工程问题:
- 幂等;
- 状态机;
- 分布式锁;
- 事务;
- 重试;
- Outbox;
到了 Agent 时代依然存在。
甚至更加重要。
十、高风险操作一定要 Human in the Loop
并不是所有 Tool 都应该允许 AI 自动执行。
可以把 Agent 能力划分成三个等级。
第一类:只读操作
例如:
- 查询项目;
- 查询订单;
- 查询合同;
- 查询知识库。
可以让 Agent 自动调用。
第二类:低风险写操作
例如:
- 创建待办;
- 生成草稿;
- 添加备注。
可以允许自动执行,但保留完整审计。
第三类:高风险操作
例如:
- 删除数据;
- 对外付款;
- 修改合同金额;
- 发布正式文件;
- 执行生产系统操作。
这类操作应该增加人工确认。
整体链路:
flowchart LR
A[Agent产生操作] --> B{风险等级}
B -->|低风险| C[自动执行]
B -->|高风险| D[人工确认]
D -->|通过| E[执行Tool]
D -->|拒绝| F[终止操作]
企业 AI 真正成熟的标志并不是:
AI 什么都能干。
而是:
系统知道哪些事情 AI 可以干,哪些事情必须由人最终决定。
十一、Agent 不是万能循环,Workflow 同样重要
现在谈 Agent,很容易陷入一种误区:
所有事情都交给模型自己规划。
事实上很多企业任务本身就是高度确定的。
比如:
flowchart LR
A[上传合同] --> B[解析合同]
B --> C[提取关键字段]
C --> D[风险检查]
D --> E[人工审核]
E --> F[归档]
这个流程本身不需要 Agent 每次重新思考顺序。
更合理的方法是:
确定性的部分使用 Workflow,不确定性的部分使用 Agent。
例如:
flowchart LR
A[固定业务流程] --> B[Workflow]
B --> C[需要理解或判断的节点]
C --> D[Agent]
D --> E[返回结构化结果]
E --> F[Workflow继续执行]
这实际上比“万能 Agent”更加适合企业应用。
因为它:
- 更稳定;
- 更可控;
- 更容易测试;
- 更容易审计;
- Token 成本也更低。
十二、一个真正的企业 AI 中台应该是什么样?
如果继续发展,企业最终可能不会只有一个 Agent。
而是出现多个智能体:
- 项目 Agent;
- 合同 Agent;
- 行政 Agent;
- 招聘 Agent;
- 财务 Agent;
- 客服 Agent。
如果每一个 Agent 都独立开发:
flowchart LR
A[Agent A] --> B[自己的模型]
C[Agent B] --> D[自己的知识库]
E[Agent C] --> F[自己的权限]
G[Agent D] --> H[自己的Tool]
很快就会失控。
因此更合理的方式是建立统一能力层:
flowchart LR
A[业务Agent] --> B[AI能力中台]
C[项目Agent] --> B
D[合同Agent] --> B
E[行政Agent] --> B
B --> F[模型网关]
B --> G[Tool中心]
B --> H[RAG知识库]
B --> I[Memory]
B --> J[权限系统]
B --> K[日志监控]
业务 Agent 只关心:
我要完成什么业务。
底层中台负责:
- 调哪个模型;
- 如何鉴权;
- 如何记录 Token;
- Tool 如何注册;
- RAG 如何检索;
- 日志如何追踪;
- 模型失败如何降级。
这时候 AI 才真正从一个功能,变成企业基础设施。
十三、Java 开发者的能力模型正在发生变化
过去一个 Java 后端工程师的典型成长路线可能是:
flowchart LR
A[Java基础] --> B[Spring]
B --> C[MySQL]
C --> D[Redis]
D --> E[MQ]
E --> F[微服务]
F --> G[架构设计]
未来并不需要推翻这些能力。
而是在上面继续增加:
flowchart LR
A[Java] --> B[Spring Boot]
B --> C[企业架构]
C --> D[LLM应用]
D --> E[RAG]
E --> F[Tool Calling]
F --> G[Agent]
G --> H[AI应用架构]
未来 Java 开发者真正值得补充的,不只是 Prompt。
而是几类新的工程能力。
AI 应用能力
包括:
- LLM API;
- Prompt;
- Structured Output;
- Tool Calling;
- RAG;
- Embedding;
- Agent;
- Workflow。
AI 工程能力
包括:
- Token 成本;
- 模型路由;
- 超时;
- 重试;
- 限流;
- 降级;
- 可观测性;
- Prompt 版本管理。
企业治理能力
包括:
- 权限;
- 数据隔离;
- 审计;
- 敏感信息;
- Human in the Loop;
- Tool 风险控制。
真正拉开开发者差距的,最终很可能不是:
谁会调用更多模型 API。
而是:
谁能把 AI 安全、稳定、低成本地接进真实业务系统。
十四、企业应该如何真正落地 Agent?
很多公司做 AI 项目时会从模型开始:
GPT 很强,我们能拿它做什么?
然后购买 API、搭聊天页面、接知识库。
最后发现:
员工体验了一段时间,却并没有真正改变业务。
更加合理的路径应该反过来。
flowchart LR
A[寻找业务痛点] --> B[梳理业务数据]
B --> C[判断AI是否适合]
C --> D[设计Tool和知识库]
D --> E[开发最小Agent]
E --> F[业务验证]
F --> G[继续扩展]
例如一家项目型企业存在一个问题:
老员工离职之后,新员工很难快速了解项目历史。
这时不要先问:
用哪个大模型?
应该先分析:
项目历史在哪里?
可能存在:
- 施工日志;
- 工作联系单;
- 现场照片;
- 会议纪要;
- 签证资料;
- 整改记录;
- 合同资料。
先把这些资料进行统一沉淀。
然后再构建:
flowchart LR
A[项目资料沉淀] --> B[统一知识库]
B --> C[项目Agent]
C --> D[自动总结项目历史]
D --> E[生成交接报告]
E --> F[回答新人问题]
这时候 AI 才真正解决了问题。
所以企业 AI 有一个非常重要的前提:
AI 的上限,很大程度取决于企业数据治理的下限。
数据都没有,Agent 再聪明也只能猜。
十五、传统 Java 架构不会消失,只会增加一个智能层
很多 Java 开发者担心 AI 会不会让传统后端开发失去价值。
但从企业系统的实际结构来看,更可能发生的是:
原来的架构:
flowchart LR
A[用户] --> B[页面]
B --> C[接口]
C --> D[Service]
D --> E[(数据库)]
逐渐增加一条新的入口:
flowchart LR
A[用户目标] --> B[AI Agent]
B --> C[Tool]
C --> D[Service]
D --> E[(数据库)]
注意最后三层:
Tool → Service → Database
仍然是 Java 开发者熟悉的世界。
变化的是最上层。
以前:
用户自己理解页面,并寻找功能。
未来:
Agent 理解用户意图,并找到对应能力。
因此更准确地说,Agent 不是替代 Spring Boot。
而是:
Spring Boot 开始拥有了一个能够理解自然语言和业务目标的新入口。
十六、结语
过去十几年,Java 开发者不断解决一个问题:
如何把现实世界的业务流程变成代码?
订单如何流转,审批如何执行,权限如何控制,状态如何变化。
我们把这些逻辑写进:
- Controller;
- Service;
- Repository;
- MQ;
- 定时任务。
Agent 出现之后,一个新的问题开始出现:
如何让软件理解用户真正想完成什么,然后组合已有能力完成任务?
于是系统架构正在从:
flowchart LR
A[用户] --> B[页面]
B --> C[接口]
C --> D[数据库]
逐渐演进成:
flowchart LR
A[用户目标] --> B[AI Agent]
B --> C[业务能力]
C --> D[企业数据]
D --> E[分析与决策]
E --> F[任务执行]
这并不是 Java 的终点。
反而可能是 Java 企业开发进入下一个阶段的开始。
因为 Agent 最终还是需要:
- 可靠的数据;
- 稳定的接口;
- 清晰的业务规则;
- 完善的权限;
- 可追踪的执行链路;
- 成熟的企业系统。
而这些恰恰是 Java 多年来一直擅长解决的问题。
所以未来值得关注的,也许不只是:
Java 还能不能继续做后端?
而是:
当企业软件开始从 CRUD 走向 Agent,Java 开发者能不能成为连接 AI 与真实业务的那个人。

评论区 0