Java+AI编程的具体案例
一、Java+AI 实战案例
可直接写进代码、真实项目在用、Java 工程师能立刻复刻的 Java+AI 实战案例,每个都带场景 + 技术栈 + 核心流程 + 简化代码,不玩虚算法,全是工程落地。
案例 1:Spring AI + 大模型 + 向量库 = 企业内部知识库(RAG)
场景:员工上传 PDF/Word 产品文档,用自然语言提问,AI 基于文档精准回答。
技术栈Spring Boot 3 + Spring AI + Milvus/Chroma + OpenAI / 通义千问 + Apache Tika
核心流程
- Java 解析文档 → 分块
- 调用 Embedding 接口生成向量
- 存入向量数据库
- 用户提问 → 检索相似文档块
- 拼接 Prompt → 调用大模型 → 返回答案
简化代码
@Autowired
private ChatModel chatModel;
@Autowired
private VectorStore vectorStore;
// 文档入库
public void ingestDoc(File file) {
List<Document> docs = TikaLoader.load(file);
List<Document> chunks = new TextSplitter().split(docs);
vectorStore.add(chunks);
}
// 问答接口
public String ask(String question) {
// 语义检索
List<Document> docs = vectorStore.similaritySearch(question, 3);
String context = String.join("\n", docs.stream().map(Document::getContent).toList());
String prompt = """
基于以下资料回答问题:
资料:%s
问题:%s
""".formatted(context, question);
return chatModel.call(prompt);
}
案例 2:AI 函数调用(Function Calling)实现智能客服
场景:用户问 “我的订单到哪了”,AI 自动调用 Java 接口查订单,再自然语言回复。
技术栈Spring AI / LangChain4j + 大模型(支持 Function)+ 订单微服务
核心代码(函数注册)
@AiFunction(
name = "queryOrder",
description = "根据订单号查询物流状态"
)
public OrderDTO queryOrder(
@AiParam("订单编号") String orderNo
) {
return orderFeignClient.getOrder(orderNo);
}
流程
- 用户:我订单 123 发货没?
- LLM:需要调用
queryOrder("123") - Spring AI 自动反射执行 Java 方法
- 结果返回给 LLM → 组织语言返回前端
案例 3:AI 自动生成 Java CRUD 代码
场景:输入表结构 / 需求,自动生成 Controller、Service、Mapper、VO。
技术栈Spring Boot + CodeLlama/CodeQwen + FreeMarker/Velocity
流程
- 前端传需求:用户表,增删改查分页
- Java 构造专业编程 Prompt
- AI 返回完整代码
- Java 格式化 → 自动写入项目目录
Prompt 示例
plaintext
生成一套SpringBoot后端代码:
1. 表:user(id, name, phone, create_time)
2. 包含:VO、DTO、Controller、Service、Mapper
3. 使用MyBatis-Plus,统一返回Result
4. 带参数校验和分页
案例 4:OCR + AI 单据结构化识别(发票 / 报销单)
场景:上传发票图片 → OCR 识别 → AI 输出标准 JSON → 自动入库。
技术栈Java + 百度 / 阿里云 OCR + LLM + MySQL
Java 流程
// 1. OCR识别
String ocrText = ocrClient.recognize(invoiceImage);
// 2. AI结构化
String prompt = """
从以下文本提取发票信息,返回严格JSON:
发票号、金额、税率、开票日期、销售方
文本:%s
""".formatted(ocrText);
String json = aiModel.call(prompt);
Invoice invoice = JSON.parseObject(json, Invoice.class);
// 3. 入库
invoiceMapper.insert(invoice);
案例 5:AI 日志异常分析(运维监控)
场景:Java 应用报错日志 → AI 自动分析原因并给出解决方案。
技术栈Java + ELK + LLM + Redis
流程
- 采集异常日志
- 发送给 AI:
plaintext
以下是Java异常堆栈,请分析原因并给出修复方案:
%s
- AI 返回:
原因:数据库连接池耗尽建议:调大 HikariCP maximum-pool-size
案例 6:多模态 AI:图片内容理解 + 业务审核
场景:商品 / 售后图片上传 → AI 判断是否破损 / 违规 → Java 自动审核通过 / 驳回。
技术栈Java + Qwen-VL / Gemini / 通义万象 + MinIO
Java 调用
String prompt = "判断图片是否有破损、污渍,返回是或否";
String imageUrl = minioUrl + "/xxx.jpg";
String result = multiModalModel.call(prompt, imageUrl);
if ("是".equals(result)) {
orderService.reject(imageId, "商品破损");
}
案例 7:AI 驱动的敏感信息审核
场景:用户发帖 / 评论 → Java 调用 AI 审核是否涉政、色情、辱骂。
代码片段
String content = "用户发布的文本";
String checkPrompt = "审核内容是否违规,返回合法/违规:" + content;
String res = chatModel.call(checkPrompt);
if ("违规".equals(res)) {
userService.blockPost(postId);
}
案例 8:AI 自动生成接口文档与测试用例
场景:扫描 Java Controller 注解 → AI 生成 API 文档 + JMeter 脚本 + 单元测试。
技术栈JavaParser + Spring MVC + LLM
流程
- Java 解析
@GetMapping("/user")等方法 - 拼接方法信息发给 AI
- AI 生成 Markdown 文档 / JUnit 代码
- 写入项目
/docs目录
案例 9:AI 推荐系统(简化版)
场景:基于用户行为做商品 / 内容推荐。
技术栈Java + Redis + Embedding + 向量检索
流程
- 用户浏览记录 → 生成行为向量
- 向量库检索相似商品
- 返回推荐列表
案例 10:AI 聊天机器人(带上下文记忆)
场景:连续对话,AI 记住历史聊天内容。
Spring AI 代码
// 带记忆的对话
ChatMemory memory = new InMemoryChatMemory();
PromptTemplate prompt = new PromptTemplate("历史对话:{history} 新问题:{question}");
String response = chatModel.call(
prompt.create(Map.of(
"history", memory.getHistory(),
"question", question
))
);
memory.add(question, response);
二、Java+AI 通用脚手架(含配置、工具类、异常、限流)
基于:Spring Boot 3 + Spring AI + 通用工具类 + 全局异常 + 限流 + 统一返回 + 日志 + 工具封装结构清晰、可直接用于公司项目 / 毕业设计。
(1)、项目结构(标准架构师分层)
ai-common-scaffold/
├── pom.xml
├── application.yml
├── src/main/java/com/ai/scaffold/
│ ├── config/ # AI配置、线程池、Bean注册
│ ├── core/ # 核心模块:异常、统一返回、常量
│ ├── ai/ # AI统一客户端、工具类、RAG封装
│ ├── function/ # FunctionCalling 函数注册
│ ├── service/ # 业务层
│ ├── controller/ # API接口
│ ├── util/ # 工具类:Http、Json、文档解析等
│ └── interceptor/ # 限流、日志拦截器
(2)、pom.xml(核心依赖)
xml
<dependencies>
<!-- Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- Spring AI(对接大模型) -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
<!-- 向量库(可选Milvus/Chroma) -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-milvus-store</artifactId>
</dependency>
<!-- 限流 -->
<dependency>
<groupId>com.github.benmanes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.25.2</version>
</dependency>
<!-- 文档解析 -->
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-core</artifactId>
<version>2.9.1</version>
</dependency>
<!-- 工具 -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.23</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.32</version>
</dependency>
<!-- 接口文档 -->
<dependency>
<groupId>com.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.2.0</version>
</dependency>
</dependencies>
(3)、application.yml(AI + 通用配置)
yaml
spring:
application:
name: ai-common-scaffold
# AI 大模型配置(通义/文心/OpenAI 都兼容)
ai:
openai:
api-key: sk-xxxxxx
base-url: https://api.openai.com
chat:
options:
model: gpt-3.5-turbo
temperature: 0.7
# 向量库 Milvus
vectorstore:
milvus:
host: 127.0.0.1
port: 19530
database: default
collection-name: ai_doc_collection
# 限流配置
rate-limit:
default:
permits-per-second: 10 # 每秒10个请求
# 服务器
server:
port: 8080
tomcat:
threads:
max: 200
(4)、核心基础模块
1. 统一返回 Result
package com.ai.scaffold.core;
import lombok.Data;
@Data
public class Result<T> {
private int code;
private String msg;
private T data;
public static <T> Result<T> success(T data) {
Result<T> r = new Result<>();
r.setCode(200);
r.setMsg("success");
r.setData(data);
return r;
}
public static <T> Result<T> fail(String msg) {
Result<T> r = new Result<>();
r.setCode(500);
r.setMsg(msg);
return r;
}
}
2. 全局异常处理
package com.ai.scaffold.core;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public Result<?> handleException(Exception e) {
return Result.fail("系统异常:" + e.getMessage());
}
@ExceptionHandler(IllegalArgumentException.class)
public Result<?> handleIllegalArg(IllegalArgumentException e) {
return Result.fail("参数错误:" + e.getMessage());
}
@ExceptionHandler(RateLimitException.class)
public Result<?> handleRateLimit() {
return Result.fail("请求过于频繁,请稍后再试");
}
}
3. 限流异常
package com.ai.scaffold.core;
public class RateLimitException extends RuntimeException {
}
(5)、限流拦截器(通用)
package com.ai.scaffold.interceptor;
import com.ai.scaffold.core.RateLimitException;
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.concurrent.TimeUnit;
@Component
public class RateLimitInterceptor implements HandlerInterceptor {
private final Cache<String, Integer> counter = Caffeine.newBuilder()
.expireAfterWrite(1, TimeUnit.SECONDS)
.build();
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) {
String ip = request.getRemoteAddr();
Integer count = counter.get(ip, k -> 0);
if (count >= 10) {
throw new RateLimitException();
}
counter.put(ip, count + 1);
return true;
}
}
(6)、AI 核心工具类(脚手架灵魂)
1. AI 统一客户端工具
package com.ai.scaffold.ai;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.document.Document;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
@Component
public class AiUtil {
@Resource
private ChatModel chatModel;
@Resource
private VectorStore vectorStore;
// 简单对话
public String chat(String prompt) {
return chatModel.call(prompt);
}
// RAG 检索问答
public String ragChat(String question) {
// 1. 向量检索
List<Document> docs = vectorStore.similaritySearch(question, 3);
String context = String.join("\n",
docs.stream().map(Document::getContent).toList());
// 2. 构造Prompt
String prompt = """
你是智能助手,请基于资料回答。
资料:%s
问题:%s
""".formatted(context, question);
return chat(prompt);
}
// 文档向量化入库
public void ingest(String content) {
Document doc = new Document(content);
vectorStore.add(List.of(doc));
}
}
2. 文档解析工具(PDF/Word/TXT)
package com.ai.scaffold.util;
import org.apache.tika.Tika;
import java.io.File;
public class DocUtil {
private static final Tika TIKA = new Tika();
public static String extractText(File file) throws Exception {
return TIKA.parseToString(file);
}
}
(7)、Function Calling 示例(可直接扩展)
package com.ai.scaffold.function;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.stereotype.Component;
@Component
public class AiFunctions {
@Tool(name = "getOrderInfo", description = "根据订单号查询订单")
public String getOrderInfo(String orderNo) {
// 真实调用订单服务
return "订单" + orderNo + ":待发货";
}
@Tool(name = "checkRisk", description = "风险检测")
public String checkRisk(String content) {
return "内容正常";
}
}
(8)、Controller(对外 AI 接口)
package com.ai.scaffold.controller;
import com.ai.scaffold.ai.AiUtil;
import com.ai.scaffold.core.Result;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
@RequestMapping("/ai")
public class AiController {
@Resource
private AiUtil aiUtil;
@GetMapping("/chat")
public Result<String> chat(@RequestParam String prompt) {
return Result.success(aiUtil.chat(prompt));
}
@GetMapping("/rag")
public Result<String> rag(@RequestParam String question) {
return Result.success(aiUtil.ragChat(question));
}
}
(9)、脚手架自带能力(开箱即用)
- ✅ Spring AI 统一大模型调用
- ✅ RAG 知识库(向量库)
- ✅ Function Calling 函数调用
- ✅ IP 限流防刷
- ✅ 全局异常 + 统一返回
- ✅ PDF/Word 文档解析
- ✅ 日志、工具类、线程池
- ✅ 可直接对接:通义千问、文心一言、DeepSeek、Llama3
更多推荐

所有评论(0)