Spring Boot OpenClaw实战:手把手落地教程与最佳实践
摘要
AI Agent 不是 PPT 里的架构图 聊起 AI Agent、工具调用、模型编排,很多人能侃侃而谈,可一到
AI Agent 不是 PPT 里的架构图
聊起 AI Agent、工具调用、模型编排,很多人能侃侃而谈,可一到真要落地就卡住了。问题往往很现实:

“Ja va 后端到底该怎么接一个真正可控的 AI Agent?”
OpenClaw 的价值正在于此。它不是某个厂商强绑的 SDK,更不是一套封闭的 API。它是一个你可以自己部署、自己掌控、模型随时可换的本地 AI Agent 网关。
这篇文章不聊虚的,直接聚焦 OpenClaw + Spring Boot 的真实集成,手把手带你完成以下几步:
- 本地或 VPS 部署 OpenClaw
- 在 Spring Boot 中把它当作普通 REST 服务调用
- 构建一个干净、可维护、易扩展的 Ja va 调用层
- 对外暴露统一的 AI 接口,方便前端或其他系统接入
Overview:OpenClaw 在系统中的角色
简单来说,OpenClaw 是一个 本地 AI Gateway:
- 自托管(Self-Hosted)
- 对外暴露 HTTP API
- 内部可接入 OpenAI、Anthropic、Gemini、OpenRouter 等多种模型
- 对调用方而言,它就是个 REST 服务
常见的网关地址长这样:
http://localhost:18789/v1/chat/completions
在 Spring Boot 里,我们不需要“集成 OpenClaw SDK”,只需要像调用普通微服务一样调用它。
部署并初始化 OpenClaw
写 Ja va 代码之前,先确保 OpenClaw 已经跑起来了。
安装与启动
在 Linux、macOS 或 VPS 上,执行官方提供的安装脚本:
curl -fsSL https://openclaw.ai/install.sh | bash
然后跑初始化流程:
openclaw setup
过程中需要完成这些事情:
- 选择模型提供方(OpenAI、Gemini、Anthropic、OpenRouter 等)
- 配置 API Key
- 确认监听端口(默认是 18789)
关键配置确认
配置文件通常位于:
~/.openclaw/openclaw.json
也可以通过环境变量注入:
export OPENCLAW_GATEWAY_TOKEN=xxxxx
你最终需要记住的只有两个信息:
- Base URL:
http://localhost:18789 - Token:用于
Authorization: Bearer xxx
创建 Spring Boot 项目
基础依赖
使用 Spring Boot 3.x,新建项目后引入 Web Starter:
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-web
项目结构
/src/main/ja va
└── com/icoderoad/ai
├── controller
│ └── OpenClawController.ja va
├── service
│ └── OpenClawService.ja va
├── config
│ └── OpenClawConfig.ja va
└── model
├── OpenClawRequest.ja va
├── OpenClawResponse.ja va
└── Message.ja va
定义 OpenClaw 请求 / 响应模型
Message
package com.icoderoad.ai.model;
public class Message {
private String role;
private String content;
public Message() {}
public Message(String role, String content)
{
this.role = role;
this.content = content;
}
// getter / setter }
OpenClawRequest
package com.icoderoad.ai.model;
import ja va.util.List;
public class OpenClawRequest
{
private String model;
private List messages;
// getter / setter
}
OpenClawResponse
package com.icoderoad.ai.model;
public class OpenClawResponse {
private String id;
private String model;
private Choice[] choices;
public static class Choice {
private Message message;
// getter / setter
}
// getter / setter
}
这么设计的好处很直接:模型返回结构变了,你只需要修改 DTO,业务代码纹丝不动。
使用 RestClient 调用 OpenClaw
Spring Boot 3 主推 RestClient,比老旧的 RestTemplate 更简洁好用。
RestClient 配置
package com.icoderoad.ai.config;
@Configuration
public class OpenClawConfig {
@Bean
public RestClient openClawRestClient(
RestClient.Builder builder,
@Value("${openclaw.base-url}") String baseUrl,
@Value("${openclaw.auth-token}") String token
) {
return builder
.baseUrl(baseUrl)
.defaultHeaders(headers -> {
headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
if (token != null && !token.isEmpty()) {
headers.add(HttpHeaders.AUTHORIZATION, "Bearer " + token);
}
})
.build();
}
}
Service 封装
package com.icoderoad.ai.service;
@Service
public class OpenClawService {
private final RestClient restClient;
public OpenClawService(RestClient restClient) {
this.restClient = restClient;
}
public OpenClawResponse chat(String userInput) {
OpenClawRequest request = new OpenClawRequest();
request.setModel("gpt-4o");
request.setMessages(List.of(
new Message("user", userInput)
));
return restClient.post()
.uri("/v1/chat/completions")
.body(request)
.retrieve()
.body(OpenClawResponse.class);
}
}
对外暴露统一 AI 接口
package com.icoderoad.ai.controller;
@RestController
@RequestMapping("/ai")
public class OpenClawController {
private final OpenClawService openClawService;
public OpenClawController(OpenClawService openClawService) {
this.openClawService = openClawService;
}
@PostMapping("/chat")
public ResponseEntity chat(@RequestBody ChatRequest request) {
OpenClawResponse response = openClawService.chat(request.getMessage());
if (response != null &&
response.getChoices() != null &&
response.getChoices().length > 0) {
return ResponseEntity.ok(
response.getChoices()[0]
.getMessage()
.getContent()
);
}
return ResponseEntity.internalServerError()
.body("OpenClaw returned empty response");
}
public static class ChatRequest {
private String message;
// getter / setter
}
}
现在你可以直接这样调用了:
POST /ai/chat
整条链路就是 Spring Boot → OpenClaw → 模型,干净利落。
Streaming / SSE(可选进阶)
如果想做类似 ChatGPT 的流式 UI,可以这样搞:
- OpenClaw 启用
stream=true - Spring Boot 用
SseEmitter或WebClient处理流式响应
示意代码:
@GetMapping("/stream")
public SseEmitter stream(@RequestParam String message) {
SseEmitter emitter = new SseEmitter(30_000L);
executor.submit(() -> {
// 使用 WebClient 订阅 OpenClaw 的流式响应
// 将 token 按段推送给前端
});
return emitter;
}
工程级最佳实践建议
安全
- 别把 OpenClaw 网关直接暴露到公网
- 只允许后端服务访问
- 或通过 Nginx 加内网访问控制来隔离
稳定性
- 引入 Resilience4j 或 Spring Retry
- 对模型调用做好超时、重试、熔断,别让一个请求拖垮整个服务
模型无感切换
OpenClaw 最大的优势之一就是:
换模型 ≠ 改代码
你只需要:
- 修改 OpenClaw 的配置
- 或者直接替换
model字段的值
结语:这才是 Ja va 后端该有的 AI 接入方式
通过 OpenClaw,你得到的是:
- 一个 完全可控 的 AI Gateway
- 一个 与模型厂商解耦 的调用方式
- 一个 符合微服务思维 的 Ja va 集成方案
Spring Boot 不需要去“追逐 AI 潮流”。只要把 AI 当作 另一个稳定的后端服务,它就能自然而然地融入你的系统架构中。
真正的 AI 落地,不是写个 Demo 演示,而是能跑、能换、能扩展。
来源:互联网
本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。