别再纸上谈兵了!手把手教你在 Spring Boot 中落地 OpenClaw(Java 实战)

作者:袖梨 2026-08-04

处理别再纸上谈兵了!手把手教你在 Spring Boot 中落地 OpenClaw(Java 实战)这类问题时,先确认目标场景,再按步骤核对配置或玩法细节。

AI Agent 不是 PPT 里的架构图

很多人在聊 AI Agent、工具调用、模型编排时,讨论得天花乱坠,但一落地就卡在一个现实问题上:

别再纸上谈兵了!手把手教你在 Spring Boot 中落地 OpenClaw(Java 实战)

“Java 后端到底该怎么接一个真正可控的 AI Agent?”

OpenClaw 的价值就在这里——它不是一个 SDK,也不是某个厂商强绑定的 API,而是一个你可以自己部署、自己控制、模型随时可换的本地 AI Agent 网关

这篇文章不讲概念、不画大饼,直接从 OpenClaw + Spring Boot 的真实集成出发,带你完成:

  1. 本地 / VPS 部署 OpenClaw
  2. Spring Boot 中把它当作“普通 REST 服务”使用
  3. 构建干净、可维护、可扩展的 Java 调用层
  4. 对外暴露统一的 AI 接口,供前端或其他系统使用

Overview:OpenClaw 在系统中的角色

OpenClaw 本质上是一个 本地 AI Gateway

  1. 自托管(Self-Hosted)
  2. 对外暴露 HTTP API
  3. 内部可接入 OpenAI / Anthropic / Gemini / OpenRouter 等模型
  4. 对调用方来说:就是一个 REST 服务

常见网关地址示例:

http://localhost:18789/v1/chat/completions

在 Spring Boot 里,我们不需要“集成 OpenClaw SDK”,只需要像调用普通微服务一样调用它即可。

部署并初始化 OpenClaw

在写 Java 代码之前,先保证 OpenClaw 已经跑起来

安装与启动

在 Linux / macOS / VPS 上执行官方提供的安装脚本(示意):

curl -fsSL https://openclaw.ai/install.sh | bash

然后运行初始化流程:

openclaw setup

你需要完成的事情包括:

  1. 选择模型提供方(OpenAI / Gemini / Anthropic / OpenRouter)
  2. 配置 API Key
  3. 确认监听端口(默认 18789)

关键配置确认

通常配置文件位于:

~/.openclaw/openclaw.json

或通过环境变量注入:

export OPENCLAW_GATEWAY_TOKEN=xxxxx

你最终需要记住的只有两点:

  1. Base URLhttp://localhost:18789
  2. Token:用于 Authorization: Bearer xxx

创建 Spring Boot 项目

基础依赖

使用 Spring Boot 3.x,新建项目后引入 Web Starter:

org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-web

项目结构

/src/main/java└── com/icoderoad/ai    ├── controller    │   └── OpenClawController.java    ├── service    │   └── OpenClawService.java    ├── config    │   └── OpenClawConfig.java    └── model        ├── OpenClawRequest.java        ├── OpenClawResponse.java        └── Message.java

定义 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 java.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;@Configurationpublic 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;@Servicepublic 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,可以:

  1. OpenClaw 使用 stream=true
  2. 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;}

程级最佳实践建议

安全

  1. 不要把 OpenClaw 网关直接暴露公网
  2. 只允许后端服务访问
  3. 或通过 Nginx + 内网访问控制

稳定性

  1. 使用 Resilience4j / Spring Retry
  2. 对模型调用做超时、重试、熔断

模型无感切换

OpenClaw 的最大优势之一:

换模型 ≠ 改代码

你只需要:

  1. 修改 OpenClaw 配置
  2. 或替换 model 字段值

结语:这才是 Java 后端该有的 AI 接入方式

通过 OpenClaw,你获得的是:

  1. 一个完全可控的 AI Gateway
  2. 一个与模型厂商解耦的调用方式
  3. 一个符合微服务思维的 Java 集成方案

Spring Boot 不需要“追逐 AI 潮流”,只要把 AI 当作 另一个稳定的后端服务,它就能自然融入你的系统架构中。

真正的 AI 落地,不是写 Demo,而是能跑、能换、能扩展。

相关文章

精彩推荐