当前位置: 首页 > java >正文

PyTorch 与 Spring AI 集成实战

目录

  • 一、前言
  • 二、发布PyTorch 模型
    • REST API 部署方式
    • ONNX 转换方式
  • 三、构建 PyTorch 服务端
    • 模型保存
    • FastAPI 服务
  • 四、Spring AI 调用 PyTorch 模型
    • 使用 RestTemplate 访问
    • 在 Tool Calling 中集成
  • 五、实战演练:智能客服识别情绪
    • 用户提问
    • PromptTemplate 示例:
    • Spring AI 调用 PyTorch 接口进行二次验证:
  • 六、总结
  • 七、参考


一、前言

大多数深度学习模型仍由 Python 和 PyTorch 驱动,但越来越多的企业希望将这些模型嵌入到 Java 微服务中运行。

Spring AI 提供了灵活的方式,结合 RESTful 接口、容器部署、Tool Calling 和 Agent 架构,使 Java 与 PyTorch 模型之间的协作不再是梦。

本篇将带你完成:

  • PyTorch 模型部署为服务(REST API)
  • Spring AI 调用 PyTorch 模型进行问答、分类或推理
  • 实战示例:中文情感分析模型接入

二、发布PyTorch 模型

Java 无法直接运行 PyTorch 模型,但可以通过以下两种方式调用:

REST API 部署方式

也是本篇推荐使用 FastAPI 或 Flask 将模型包装为 HTTP 接口,第三节将重点介绍。

ONNX 转换方式

ONNX转换适用于通用模型,将模型转换为 ONNX 格式,用 JNI/ONNX Runtime 调用。详见《标准化模型格式ONNX介绍:打通AI模型从训练到部署的环节》

本篇我们将采用第一种REST API 部署方式:用 Python + FastAPI 部署 PyTorch 模型,由 Java 远程调用。


三、构建 PyTorch 服务端

模型保存

# train.py
import torch
model = MyModel()
... # 训练代码
torch.save(model.state_dict(), "sentiment_model.pt")

FastAPI 服务

# app.py
from fastapi import FastAPI, Request
import torch
import torch.nn.functional as Fapp = FastAPI()
model = MyModel()
model.load_state_dict(torch.load("sentiment_model.pt"))
model.eval()@app.post("/predict")
async def predict(request: Request):data = await request.json()text = data["text"]# TODO: text preprocessing & tokenizingwith torch.no_grad():output = model(text)pred = F.softmax(output, dim=1).tolist()return {"result": pred}

四、Spring AI 调用 PyTorch 模型

使用 RestTemplate 访问

@RestController
public class InferenceController {@Autowired RestTemplate restTemplate;@PostMapping("/ai/sentiment")public String classify(@RequestBody String text) {HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);Map<String, String> body = Map.of("text", text);HttpEntity<Map<String, String>> req = new HttpEntity<>(body, headers);String url = "http://localhost:8000/predict";ResponseEntity<String> resp = restTemplate.postForEntity(url, req, String.class);return resp.getBody();}
}

在 Tool Calling 中集成

@AiFunction(name = "sentiment")
public String analyzeSentiment(@AiParam("text") String text) {return classify(text);
}

注册为 Spring AI 工具:

List<ToolSpecification> tools = FunctionCallingTools.fromBeans(appContext);
chatClient = new FunctionCallingChatClient(chatClient, tools);

现在,模型就可以被 LLM 调用啦!


五、实战演练:智能客服识别情绪

用户提问

“你们的服务真的太烂了,我再也不会买了!”

PromptTemplate 示例:

String prompt = "请判断以下内容的用户情绪类别(积极、消极、中性):{{text}}";

LLM 返回:消极

Spring AI 调用 PyTorch 接口进行二次验证:

String pyResult = analyzeSentiment(userText);

可用于模型投票融合、异常拦截等场景。


六、总结

通过本文,我们完成了从 PyTorch 模型训练、FastAPI 部署,到 Spring AI 调用推理的完整闭环。

Spring AI 可以将自研模型作为 Tool,嵌入智能 Agent 流程中,与大语言模型协同。

七、参考

《Java驱动AI革命:Spring AI八篇进阶指南——从架构基础到企业级智能系统实战》

在这里插入图片描述

http://www.xdnf.cn/news/15059.html

相关文章:

  • 【操作系统】线程
  • vue3 el-input 通过数组 获取显示
  • docker 启动中间件
  • LeetCode 148 排序链表解析:高效归并排序实现
  • 搭建渗透测试环境
  • React之旅-05 List Key
  • 力扣 hot100 Day40
  • Java 大视界 -- Java 大数据在智能交通智能停车诱导与车位共享中的应用(341)
  • AI翻唱——So-VITS-SVC
  • mvn能只test单独一个文件吗
  • 攻防世界——web题catcat-new session值伪造
  • 电脑息屏工具,一键黑屏超方便
  • 【LeetCode100】--- 1.两数之和【复习回滚】
  • 学习日记-spring-day45-7.10
  • 深入理解 Linux 中的 stat 函数与文件属性操作
  • 710 Mybatis实战
  • Using Spring for Apache Pulsar:Transactions
  • PyTorch Tensor 操作入门:转换、运算、维度变换
  • 【TCP/IP】11. IP 组播
  • 深入解析JVM内存结构与垃圾回收机制
  • Boost.Asio学习(3):异步读写
  • Spring for Apache Pulsar->Reactive Support->Message Production
  • Linux的DNS域名解析服务
  • 多线程 JAVA
  • 表达式索引海外云持久化实践:关键技术解析与性能优化
  • 深入浅出 Python Asynchronous I/O:从 asyncio 入门到实战
  • 2025.07.09华为机考真题解析-第二题200分
  • FlashAttention 快速安装指南(避免长时间编译)
  • LeetCode经典题解:49、字母异位词分组
  • 西部数据WD授权代理商-深圳同袍存储科技有限公司