一、Java+AI 实战案例

可直接写进代码、真实项目在用、Java 工程师能立刻复刻的 Java+AI 实战案例,每个都带场景 + 技术栈 + 核心流程 + 简化代码,不玩虚算法,全是工程落地。


案例 1:Spring AI + 大模型 + 向量库 = 企业内部知识库(RAG)

场景:员工上传 PDF/Word 产品文档,用自然语言提问,AI 基于文档精准回答。

技术栈Spring Boot 3 + Spring AI + Milvus/Chroma + OpenAI / 通义千问 + Apache Tika

核心流程

  1. Java 解析文档 → 分块
  2. 调用 Embedding 接口生成向量
  3. 存入向量数据库
  4. 用户提问 → 检索相似文档块
  5. 拼接 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);
}

流程

  1. 用户:我订单 123 发货没?
  2. LLM:需要调用queryOrder("123")
  3. Spring AI 自动反射执行 Java 方法
  4. 结果返回给 LLM → 组织语言返回前端

案例 3:AI 自动生成 Java CRUD 代码

场景:输入表结构 / 需求,自动生成 Controller、Service、Mapper、VO。

技术栈Spring Boot + CodeLlama/CodeQwen + FreeMarker/Velocity

流程

  1. 前端传需求:用户表,增删改查分页
  2. Java 构造专业编程 Prompt
  3. AI 返回完整代码
  4. 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

流程

  1. 采集异常日志
  2. 发送给 AI:

plaintext

以下是Java异常堆栈,请分析原因并给出修复方案:
%s
  1. 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

流程

  1. Java 解析@GetMapping("/user")等方法
  2. 拼接方法信息发给 AI
  3. AI 生成 Markdown 文档 / JUnit 代码
  4. 写入项目/docs目录

案例 9:AI 推荐系统(简化版)

场景:基于用户行为做商品 / 内容推荐。

技术栈Java + Redis + Embedding + 向量检索

流程

  1. 用户浏览记录 → 生成行为向量
  2. 向量库检索相似商品
  3. 返回推荐列表

案例 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

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐