🤖
AI审核中

从CRUD到Agent:Java开发者如何构建企业级AI智能体系统

Java 32分钟 134浏览 0评论

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 条评论
如果你觉得文章对你有帮助,那就请作者喝杯咖啡吧☕
微信
支付宝
  0 条评论