在过去的一年里,大模型(LLM)技术经历了狂飙突进的发展。然而,当我们试图将那些在 Python 脚本(如 LangChain、AutoGen)里跑得飞起的"玩具级" Agent 搬到企业核心业务线时,往往会遭遇当头一棒:如何管控高危操作?如何进行白盒审计?如何融入现有的微服务治理体系?

今天,我们将以 MateCloud 体系下的 Mate-hive(太一企业版) 为例,深入探讨如何利用 Java 生态的最新技术栈(Java 21 虚拟线程 + Spring Boot 4 + Spring AI 2.0 ),从零构建一个真正具备"可治理、可审计、可信创"特性的企业级智能体平台。我们将重点剖析其核心架构设计:Agent Loop(单智能体核心循环) 与 Agent Team(多智能体组织协同)。
一、 为什么企业级 Agent 需要 Java?
Python 是 AI 时代的母语,但在企业后台服务中,Java 依然是当之无愧的王者。当 AI 走向落地,它不再是孤立的算法模型,而是企业微服务网格中的一个节点。

Mate-hive 选择 Java 21 与 Spring 体系,并非简单的语言平替,而是为了获得以下关键的架构红利:
- Java 21 虚拟线程 (Virtual Threads):Agent 的执行(尤其是大模型的 HTTP 请求与工具回调)是典型的 I/O 密集型任务。虚拟线程让我们能以极低的资源代价,支撑海量并发的 Agent 会话,彻底摆脱传统线程池的瓶颈。
- 与企业治理体系的无缝融合 :通过 Spring Boot 的
@AutoConfiguration和 SPI 机制,Agent 的工具调用可以轻易挂载企业现有的鉴权(Sa-Token)、数据权限(DataScope)、脱敏与审计拦截器。 - Open-Core 架构设计 :通过
mate-hive-core定义 SPI 接口,通过mate-hive-starters提供企业级能力。丢 jar 即点亮,拔 jar 即降级,核心代码零侵入。
在 HiveCoreAutoConfiguration 中,这种设计体现得淋漓尽致:
java
// mate-hive-core/src/main/java/vip/mate/hive/core/config/HiveCoreAutoConfiguration.java
@AutoConfiguration
public class HiveCoreAutoConfiguration {
// 每个扩展点都以 @ConditionalOnMissingBean 注册 OSS 默认实现 ------ 这就是开源版的能力面。
// 当某企业 starter 注册了高阶实现时, 默认即自动让位。核心代码零改动。
@Bean
@ConditionalOnMissingBean
public AuditPort defaultAuditPort() {
return new LoggingAuditPort(); // 开源版仅打日志
}
@Bean
@ConditionalOnMissingBean
public CryptoProvider defaultCryptoProvider() {
return new JdkCryptoProvider(); // 开源版用 JDK AES
}
}
二、 拆解 Agent Loop:从"黑盒对话"到"可审计的自主循环"
在业界,ReAct(Reason + Act)模式是目前单智能体最成熟的范式。但在 Mate-hive 中,我们不仅要让它跑起来,还要让它的每一步都在管控之下。
1. Spring AI 驱动的 ReAct 引擎
Mate-hive 的核心引擎 SpringAiAgentRuntime 深度整合了 Spring AI 2.0。其 run 方法揭示了单次会话的核心流程,特别是加入了会话轮次串行(SessionTurnGate)和失控保护:
java
// mate-hive-starters/mate-hive-engine-starter/src/main/java/vip/mate/hive/engine/SpringAiAgentRuntime.java
public AgentResult run(AgentRequest req) {
// 会话轮次串行 (SessionTurnGate): 同一会话 scope 的并发 turn 串行执行, 防上下文竞争;
return turnGate.inTurn(ConversationScopeKey.conversation(req), () -> runCore(req));
}
private AgentResult runCore(AgentRequest req) {
AgentContext ctx = newContext(taskId, req);
long modelStart = System.currentTimeMillis();
try {
// 协作取消: 启动模型调用前先检查
CancellationKeys.of(ctx).throwIfCancelled();
// 核心: 调用 Spring AI ChatClient,内部自动触发工具调用循环
ChatResponse response = spec(req, ctx, req.input()).call().chatResponse();
String content = response.getResult().getOutput().getText();
// 强制溯源后置校验: 追加合规提示
content = CitationGuard.appended(ctx, content);
List<AgentStep> steps = stepsOf(ctx);
steps.add(AgentStep.thought(nextSeq(steps), "模型完成: " + safeSummary(content)));
return AgentResult.succeeded(taskId, content, steps, extractUsage(response));
} catch (Exception e) {
// ... 异常处理与兜底话术
}
}
2. 治理链(Governance Chain)的介入
如果仅仅是调用工具,那它依然是个"黑盒"。企业级 Agent 的底线是:每一次工具调用都必须被审查。

Mate-hive 在 Spring AI 的 ToolCallback 之上包装了一层 GovernedToolCallback。这是整个架构中最精妙的设计之一:
java
// mate-hive-starters/mate-hive-engine-starter/src/main/java/vip/mate/hive/engine/GovernedToolCallback.java
public String call(String toolInput, ToolContext toolContext) {
// 1. 循环防护 (LoopGuard): 识别"原地打转"(同调用反复 / A-B 拉锯)
LoopGuard guard = ctx.get(SpringAiAgentRuntime.ATTR_LOOP_GUARD);
if (guard != null && guard.check(toolName, args).blocked()) {
return "[循环防护] " + verdict.message();
}
// 2. 失控保护: 单任务工具调用计数 cap,超出直接拒绝
if (!claimToolCallSlot(toolName)) {
return "[已拒绝] 单任务工具调用次数超过上限 (失控保护)";
}
// 3. ACTION 步入审计轨迹
AgentStep action = AgentStep.action(nextSeq(), summarize(toolName, args), toolName);
appendStep(action);
try {
// 4. 核心:穿过 AgentExecutionChain 治理链 (守卫 → 审计 → 脱敏)
ToolResult result = chain.execute(invocation, ctx, governed -> {
String effectiveInput = governed.arguments().equals(args) ? toolInput : write(governed.arguments());
return ToolResult.ok(governed.callId(), callWithTimeout(effectiveInput, toolContext));
});
if (!result.success()) {
// 工具失败: 追加防幻觉提示,避免模型假装成功/编造结果
return "[工具执行失败] " + result.error() + TOOL_ERROR_GUIDANCE;
}
return result.content();
} catch (GovernanceException e) {
// 治理拦截统一出口 (DENY / REQUIRE_APPROVAL)
return governanceBlocked(e.getAction(), e.getMsg(), toolName, toolInput, args);
}
}
这套机制确保了:当模型试图调用某个工具(比如 execute_sql)时,请求会先穿过一条严格的治理链(Filter Chain):
- ToolGuardFilter (@Order 20) :策略引擎守卫。如果工具标记为高危,立即挂起当前虚拟线程,触发 HITL(Human-in-the-Loop,人机协同) 审批流(对应源码中的
REQUIRE_APPROVAL动作)。 - AuditFilter (@Order 30) :白盒审计。全程记录
PLAN、THOUGHT、ACTION、OBSERVATION步骤。企业版中还会使用 SM3 算法对这些轨迹进行摘要签名。 - DesensitizeFilter (@Order 40):出域脱敏。根据规则对敏感数据进行掩码处理,防止泄露给第三方 LLM。
3. AgentStep:白盒化的基石
为了让前端能够流式渲染"思考过程",并在事后进行审计回放,Mate-hive 定义了严格的领域模型:
java
// mate-hive-core/src/main/java/vip/mate/hive/core/model/AgentStep.java
public record AgentStep(Phase phase, int seq, String content, String toolName) implements Serializable {
/** 计划 / 思考 / 动作 / 观察 ------ ReAct 与 Plan-Execute 的统一步类型。 */
public enum Phase { PLAN, THOUGHT, ACTION, OBSERVATION }
}
每一次 Loop 循环,都会产生相应的 AgentStep 事件,通过 Project Reactor 的 Flux<AgentEvent> 流式推送到前端。这使得整个 Agent 的思考和执行过程完全白盒化。
三、 Agent Team:从"超级单体"到"组织协同"
单智能体的能力是有边界的。给一个 Agent 塞入 50 个工具和 10 万字的 Prompt,只会导致它"幻觉"频发。
Mate-hive 引入了 Agent Team(多智能体协作) 的概念。其核心思想是:把一支多角色团队当作"一个会话入口"来执行。
1. 两种协作模式 (TeamProcess)
在 HiveTeam 领域模型中,定义了两种主要的协作拓扑:
java
// mate-hive-starters/mate-hive-org-starter/src/main/java/vip/mate/hive/org/domain/TeamProcess.java
public enum TeamProcess {
SEQUENTIAL, // 流水线: 按成员顺序流转, 上一名产出 = 下一名输入; 落地编译成 workflow 有向图。
HIERARCHICAL // 经理派活: 经理 agent 运行时按角色动态派活 (delegate/ask coworker)。
}
-
SEQUENTIAL(流水线模式) :
这是一种确定性的编排。在
TeamCompiler.java中,Mate-hive 会将团队成员按顺序编译为一个 Workflow DAG(有向无环图),然后交由WaveRunner按拓扑波强执行。 -
HIERARCHICAL(经理派活模式) :
这是一种高度动态的协作。在
TeamDagExecutor中,Manager Agent 会首先产出一个"仅 worker"参与的 DAG 计划,然后后端按依赖强调度,最后 Manager 再次出面进行 Aggregate(汇总)。期间,Manager 可以通过CoworkerDirectory(同事目录 SPI)动态查找团队内的其他角色。
2. 团队级预算控制(Budget Meter)
多 Agent 协作极易陷入"无限套娃"的死循环,导致 API Token 费用爆炸。
为此,Mate-hive 在领域模型中直接内置了团队级的资源管控:
java
// mate-hive-starters/mate-hive-org-starter/src/main/java/vip/mate/hive/org/domain/HiveTeam.java
public record HiveTeam(
// ...
Long budgetMaxTokens, // 团队级预算:单次 run 累计 token 上限; null=用全局配置, ≤0=不限
Integer budgetMaxSeconds // 团队级预算:单次 run 墙钟上限(秒)
) implements Serializable { }
配合 Java 21 的虚拟线程,当团队中所有 Agent 消耗的 Token 总和达到阈值,或者执行时间超时,引擎会通过 CancellationKeys.throwIfCancelled() 强行中断所有相关的虚拟线程,抛出熔断异常,实现优雅的降级。
四、 总结
AI 的下半场,拼的不再是单纯的模型跑分,而是工程化落地能力。
Mate-hive 的源码向我们展示了:借助 Java 21 的虚拟线程解决 I/O 并发,利用 Spring Boot 的 SPI 机制实现 Open-Core 架构,再结合 Spring AI 2.0 强大的抽象能力,我们完全可以构建出兼具灵活性(Agent Loop / Team)与严谨性(ToolGuard / 审计 / 国密)的企业级智能体平台。
在企业级 AI 的道路上,"能跑通"只是起点,"可治理"才是终局。
参考资料
- Spring AI 2.0.0 GA 发布:https://spring.io/blog/2026/06/12/spring-ai-2-0-0-GA-available-now
- MateCloud GitHub:https://github.com/mateaix/matecloud
- MateCloud Gitee:https://gitee.com/matevip/matecloud
- MateCloud 官网:https://mate.vip