近年来,AI 大模型(LLM)已经成为企业数字化升级的核心动力。作为后端工程师,如何将大模型能力稳定、安全地集成到 Java 系统中,是未来几年最有价值的技术能力之一。
引用:Java 集成 AI 大模型
- Java 调用大模型的最佳技术方案
- 完整可运行 Demo(Spring Boot)
- 流式输出(SSE)实现 ChatGPT 式连续响应
- 高并发、token 优化与异常处理
- 企业落地场景:智能客服、智能文案、自动化 RPA 等
文章代码开箱即用,可直接复制到你的 Spring Boot 项目中。
一、为什么 Java 工程师一定要掌握"大模型集成"?
在国内外大厂(阿里、字节、亚马逊 AWS、Google Cloud),AI 已经融入各种业务系统,包括:
- 智能客服自动回复
- 营销文案自动生成
- 跨境电商多语言翻译
- 运营自动化(通过 RPA + LLM)
- 自动生成 SQL、接口文档、测试用例
- 自动总结日志、工单、会议纪要
Java 作为主流企业级语言,是接入大模型最常见的后端。
二、总体架构:Java 调用大模型应该怎么设计?
bash
[前端页面]
│ (SSE流式)
▼
[Java Spring Boot 服务]
│ (封装统一AI Service)
▼
[OpenAI / DeepSeek / 其他大模型]
三层设计:
- Controller:接收请求,转发到 AI 服务
- AI Service:封装模型参数、流式处理、异常处理
- Client 封装类:真正发起 HTTP 调用,支持重试、超时控制
这种结构清晰解耦,方便后期切换模型,比如从 OpenAI → Moonshot → DeepSeek。
三、准备工作
- 引入 Maven 依赖(推荐使用 OkHttp + Jackson)
xml
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.11.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
四、编写通用大模型 Client
这是本文章最核心的部分,一个统一的大模型客户端。
java
@Slf4j
@Component
public class OpenAIClient {
private final OkHttpClient client;
@Value("${ai.key}")
private String apiKey;
public OpenAIClient() {
client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(0, TimeUnit.SECONDS) // SSE 必须设置为无限
.build();
}
public void streamChat(String prompt, Consumer<String> callback) {
try {
JSONObject json = new JSONObject();
json.put("model", "gpt-4.1-mini");
json.put("stream", true);
JSONArray messages = new JSONArray();
messages.put(new JSONObject()
.put("role", "user")
.put("content", prompt));
json.put("messages", messages);
Request request = new Request.Builder()
.url("https://api.openai.com/v1/chat/completions")
.addHeader("Content-Type", "application/json")
.addHeader("Authorization", "Bearer " + apiKey)
.post(RequestBody.create(json.toString(), MediaType.parse("application/json")))
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(response.body().byteStream()))) {
String line;
while ((line = reader.readLine()) != null) {
if (line.startsWith("data: ")) {
String data = line.substring(6).trim();
if (!" [DONE] ".equals(data)) {
callback.accept(data);
}
}
}
} catch (Exception e) {
log.error("SSE error: {}", e.getMessage());
}
}
@Override
public void onFailure(Call call, IOException e) {
log.error("Request error:", e);
}
});
} catch (Exception e) {
log.error("Build request error:", e);
}
}
}
- 支持 SSE
- 支持流式 token 回调
- 简洁易扩展
五、Service 层封装业务逻辑
java
@Service
public class AIService {
@Resource
private OpenAIClient openAIClient;
public void chat(String question, Consumer<String> callback) {
openAIClient.streamChat(question, callback);
}
}
六、Controller 支持前端流式输出(SSE)
适合在前端做 ChatGPT 风格的对话框。
java
@RestController
@RequestMapping("/ai")
public class AIController {
@Resource
private AIService aiService;
@GetMapping(value = "/chat")
public SseEmitter chat(@RequestParam String msg) {
SseEmitter emitter = new SseEmitter(0L);
aiService.chat(msg, data -> {
try {
emitter.send(data);
} catch (Exception e) {
emitter.completeWithError(e);
}
});
return emitter;
}
}
前端只需接入 SSE:
html
const source = new EventSource("/ai/chat?msg=你好");
source.onmessage = function(e){
console.log("AI:", e.data);
}
七、企业级增强:高可用处理
1. 超时控制
2. API Key 轮询策略
3. 重试策略
4. 日志脱敏
5. Token 费用统计(可计费)
6. 熔断 / 降级(Redis + Semaphore 限流)
八、真实场景案例:跨境电商 × AI 大模型
以下是可直接落地的业务场景:
(1)智能多语言翻译(淘宝、亚马逊场景)
- 中文标题 → 英文 SEO 文案
- 英文卖点自动生成
- 批量生成 Listing
(2)AI 自动生成产品图片 Prompt
- 适合 Midjourney、SDXL、Stable Diffusion
(3)智能客服自动回复
- AI 自动回答:物流、退货、发票、优惠政策
(4)RPA + AI 自动化
影刀 RPA + 大模型:
- 自动处理工单
- 自动分析 Excel 并生成报告
- 自动抓取 Amazon 竞品并总结
九、完整示例:自动生成产品标题接口
java
@PostMapping("/generateTitle")
public String generateTitle(@RequestBody ProductInfo info) {
SseEmitter emitter = new SseEmitter();
String prompt = String.format(
"请根据以下信息生成 5 个英文产品标题,每个不超过 140 字符:\n产品名称:%s\n产品卖点:%s",
info.getName(), info.getFeatures()
);
aiService.chat(prompt, text -> {
try {
emitter.send(text);
} catch (Exception e) {
emitter.completeWithError(e);
}
});
return "ok";
}
十、总结
本文从工程角度完整地介绍了:
- Java 调用大模型的架构设计
- 通用 AI 客户端实现
- SSE 流式输出
- Spring Boot 组合调用示例
- 企业级落地玩法与案例
如果你将本文章实践到你的系统中,你将具备:让任何 Java 系统具备 AI 能力的全套实践经验。