如今全网 AI Agent 相关文章九成是空泛架构科普,满屏流程图、理论概念,Java 开发看完依旧不知道如何把本地自托管 AI 网关接入现有业务系统。
绝大多数后端开发者卡在同一个落地难题:Java 业务工程如何低成本接入自主可控的 AI 智能代理,不绑定厂商 API、不侵入原有业务代码、支持随时切换大模型。
OpenClaw 自托管 AI 网关完美解决该痛点,它不属于闭源 SDK,无需对接厂商私有接口,本地一键部署即可标准化输出 OpenAI 兼容 REST 接口。
本文摒弃空洞理论,完整走完「网关部署→Spring Boot 工程分层封装→统一 AI 接口对外输出」全流程,所有代码可直接复制运行,适配生产环境分层规范,附带流式对话、熔断安全等企业级优化方案,真正实现能上线、可维护、易扩展的 Java AI Agent 落地。
一、OpenClaw 在 Java 业务架构中的核心定位
OpenClaw 本质是私有化部署 AI 中转网关,在整套系统中承担 AI 能力统一调度角色,核心特性:
- 完全自托管:部署在自有服务器 / 本地设备,模型密钥、会话数据自主管控,无第三方数据外泄风险;
- 标准 HTTP 对外接口:兼容 OpenAI 接口规范,Java 侧无需学习专属 SDK,仅通过 HTTP 请求调用;
- 多模型统一兼容:后端可接入 GPT、Gemini、Anthropic、OpenRouter 等主流大模型,切换模型仅改网关配置,业务代码零改动;
- 独立服务解耦:Spring Boot 工程仅作为调用方,把 OpenClaw 当成普通第三方微服务,架构分层清晰。
标准调用链路地址示例:
plaintext
http://网关IP:18789/v1/chat/completions
Java 侧无需引入任何 OpenClaw 专属依赖,仅依靠 Spring 原生 HTTP 工具即可完成交互。
二、前置操作:部署并初始化 OpenClaw 网关
编写 Java 代码前,必须完成网关部署、参数配置,保证接口可正常连通。
1. 一键安装启动(Linux / 云服务器通用)
bash
运行
# 执行官方安装脚本
curl -fsSL https://openclaw.ai/install.sh | bash
# 初始化配置向导
openclaw setup
初始化流程按需填写配置:
- 选择目标大模型服务商;
- 填入对应服务商 API Key;
- 确认网关监听端口(默认 18789,无需修改)。
2. 核心关键配置记录
全局配置文件路径:~/.openclaw/openclaw.json
两种认证方式任选其一:
- 配置文件内写入网关访问 Token;
- 环境变量注入 Token(推荐服务器部署,更安全)
bash
运行
export OPENCLAW_GATEWAY_TOKEN=自定义高强度密钥
开发 Spring Boot 仅需留存两个核心参数:
- 网关基础地址:
http://xxx:18789 - 接口鉴权 Token:Bearer 认证凭证
三、从零搭建 Spring Boot 3.x 集成工程
1. 核心 Maven 依赖
仅需 Web 基础依赖,无需额外 AI 第三方包,轻量化无冗余:
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2. 标准化分层工程目录(企业级规范)
plaintext
src/main/java/com/lobsterpro/ai
├── config // RestClient全局配置、网关参数注入
│ └── OpenClawConfig.java
├── controller // 对外统一AI接口,提供前端/第三方调用
│ └── AiChatController.java
├── service // AI调用业务封装层,隔离底层HTTP逻辑
│ └── OpenClawAiService.java
└── dto // 网关请求/响应实体,解耦业务与第三方结构
├── MessageDTO.java
├── OpenClawChatReq.java
└── OpenClawChatResp.java
3. 统一 DTO 实体封装(解耦设计,适配接口迭代)
MessageDTO 对话消息实体
java
运行
package com.lobsterpro.ai.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MessageDTO {
// 角色:system/user/assistant
private String role;
// 对话内容
private String content;
}
OpenClawChatReq 网关请求体
java
运行
package com.lobsterpro.ai.dto;
import lombok.Data;
import java.util.List;
@Data
public class OpenClawChatReq {
// 指定模型名称
private String model;
// 完整对话上下文
private List<MessageDTO> messages;
// 流式输出开关,true返回分段流,false一次性返回完整结果
private Boolean stream = false;
}
OpenClawChatResp 网关返回体
java
运行
package com.lobsterpro.ai.dto;
import lombok.Data;
@Data
public class OpenClawChatResp {
private String id;
private String model;
private Choice[] choices;
@Data
public static class Choice {
private MessageDTO message;
}
}
设计优势:后续 OpenClaw 接口字段迭代、新增参数,仅修改 DTO 实体,上层 Controller、Service 业务代码完全不用改动。
4. RestClient 全局配置(SpringBoot3 原生推荐,替代 RestTemplate)
java
运行
package com.lobsterpro.ai.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.client.RestClient;
@Configuration
public class OpenClawConfig {
@Value("${openclaw.gateway.base-url}")
private String gatewayBaseUrl;
@Value("${openclaw.gateway.token}")
private String gatewayAuthToken;
@Bean
public RestClient openClawRestClient(RestClient.Builder builder) {
return builder
.baseUrl(gatewayBaseUrl)
.defaultHeaders(header -> {
header.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
if (gatewayAuthToken != null && !gatewayAuthToken.isBlank()) {
header.set(HttpHeaders.AUTHORIZATION, "Bearer " + gatewayAuthToken);
}
})
.build();
}
}
5. Service 业务封装层(隔离底层 HTTP,统一 AI 调用逻辑)
java
运行
package com.lobsterpro.ai.service;
import com.lobsterpro.ai.dto.MessageDTO;
import com.lobsterpro.ai.dto.OpenClawChatReq;
import com.lobsterpro.ai.dto.OpenClawChatResp;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestClient;
import java.util.List;
@Service
public class OpenClawAiService {
private final RestClient openClawRestClient;
// 构造注入HTTP客户端
public OpenClawAiService(RestClient openClawRestClient) {
this.openClawRestClient = openClawRestClient;
}
/**
* 普通一次性对话接口
* @param userText 用户提问内容
* @return AI完整回答
*/
public String singleChat(String userText) {
// 组装请求参数
OpenClawChatReq req = new OpenClawChatReq();
req.setModel("gpt-4o");
req.setStream(false);
req.setMessages(List.of(new MessageDTO("user", userText)));
// 调用OpenClaw网关接口
OpenClawChatResp resp = openClawRestClient.post()
.uri("/v1/chat/completions")
.body(req)
.retrieve()
.body(OpenClawChatResp.class);
// 空值校验,避免空指针异常
if (resp == null || resp.getChoices() == null || resp.getChoices().length == 0) {
return "AI网关返回数据为空,请稍后重试";
}
return resp.getChoices()[0].getMessage().getContent();
}
}
6. 对外统一 AI 控制层(前端 / 第三方系统调用入口)
java
运行
package com.lobsterpro.ai.controller;
import com.lobsterpro.ai.service.OpenClawAiService;
import lombok.Data;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/business/ai")
public class AiChatController {
private final OpenClawAiService aiService;
public AiChatController(OpenClawAiService aiService) {
this.aiService = aiService;
}
/**
* 同步对话统一接口
*/
@PostMapping("/chat/sync")
public ResponseEntity<String> syncChat(@RequestBody ChatParam param) {
String answer = aiService.singleChat(param.getMessage());
return ResponseEntity.ok(answer);
}
/**
* 前端入参接收实体
*/
@Data
public static class ChatParam {
private String message;
}
}
调用测试地址:POST /business/ai/chat/sync,传入 JSON 参数即可完成完整链路:Spring Boot → OpenClaw 网关 → 大模型。
四、进阶扩展:流式 SSE 实时对话(ChatGPT 式打字输出效果)
前端聊天页面需要分段实时输出文字时,开启 stream 流式参数,搭配 SseEmitter 实现长连接推送,简易示例:
java
运行
@GetMapping("/chat/stream")
public SseEmitter streamChat(@RequestParam String message) {
SseEmitter emitter = new SseEmitter(30000L);
// 异步线程发起网关流式请求,分段推送token至前端
new Thread(() -> {
// WebClient订阅OpenClaw流式返回,逐段封装SSE消息推送
}).start();
return emitter;
}
五、生产环境落地核心最佳实践
1. 安全规范
- OpenClaw 网关禁止直接暴露公网,仅允许内网 Spring Boot 服务访问;
- 公网访问需前置 Nginx,增加 IP 白名单、接口限流;
- 网关鉴权 Token、模型 API Key 统一存入配置中心,禁止硬编码进代码;
2. 高可用稳定性优化
- 引入 Resilience4j 组件,对 AI 接口增加超时、重试、熔断降级策略,防止大模型响应缓慢拖垮业务;
- 统一捕获网关调用异常,自定义错误返回体,便于前端异常处理;
- 增加接口请求日志记录,留存对话上下文、响应耗时,方便问题排查。
3. 模型无感切换核心优势
整套架构最大价值:切换大模型完全不改动 Java 业务代码,仅两种修改方式:
- 修改 OpenClaw 网关配置,更换默认模型;
- 调用时动态修改请求体 model 字段,按需切换不同模型。
六、总结
市面上绝大多数 AI 相关教程只停留在概念和 Demo 层面,很难直接落地进企业 Java 业务系统。OpenClaw 作为私有化 AI 网关,完美解决 Java 后端接入 AI 的几大痛点:厂商绑定、代码耦合、数据不可控、模型切换成本高。
本文提供分层清晰、规范可上线的 Spring Boot 集成方案,把 AI 能力当成普通微服务调用,贴合传统后端开发思维,无需重构现有业务架构。真正有价值的 AI 落地,不是花哨的 PPT 架构图,而是稳定、可控、易维护、能直接投入生产运行的工程代码。