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

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.dtcms.com/a/274261.html

相关文章:

  • Matlab裁剪降水数据:1km掩膜制作实战
  • JavaAI时代:重塑企业级智能开发新范式
  • OpenCV 与深度学习:从图像分类到目标检测技术
  • 端口到底是个什么鬼?回答我!
  • 虚幻引擎5 GAS开发俯视角RPG游戏 #06-2:优化EffectActor类
  • 鸿蒙开发之ArkTS数组
  • 深度体验飞算JavaAI:一场Java开发效率的革命
  • HarmonyOS NEXT端云一体化开发初体验
  • IPA软件源预览系统源码(源码下载)
  • 【跟着PMP学习项目管理】项目管理 之 采购管理知识点
  • Axios之核心语法详解
  • 上位机知识篇---常见的文件系统
  • 用数学构建权限系统:从集合论到位运算的高效设计
  • 前端开发—全栈开发
  • 主从服务器完整使用指南
  • 4万亿英伟达,凭什么?
  • SM712.TCT Semtech TVS二极管——电子设备的终极电路守护
  • 和鲸社区深度学习基础训练营2025年关卡2(1)纯numpy
  • 小皮面板搭建pikachu
  • 在 Linux 中配置天气机器人脚本开机自启动的完整指南
  • T16IZ遥控器教程__遥控器与无人机对频
  • 人形机器人公司融合Xsens与Manus动作捕捉技术,利用人工智能训练机器人模仿人类动作,以执行复杂任务
  • 开源“具身大脑” 实现不同机器人群体协作-RoboBrain
  • 弧焊机器人气体全方位节能指南
  • 基于MuJoCo的宇树科技G1机器人基础动作仿真研究
  • 企业培训笔记:Vue3前端框架配置
  • JAVA程序的类加载器的底层和双亲委派机制的原理
  • Bash函数详解
  • 软件开发那些基础事儿:需求、模型与生命周期
  • MySQL锁的分类