搭建网站平台,做网站建设出路在哪里,电池优化大师下载,深圳vi设计公司 全力设计博客原文地址
前言
Spring在Java语言中一直稳居高位#xff0c;与AI的洪流碰撞后也产生了一些有趣的”化学反应“#xff0c;当然你要非要说碰撞属于物理反应也可以#xff0c;
在经历了一系列复杂的反应方程后#xff0c;Spring家族的新成员——SpringAI#xff0c;就…博客原文地址
前言
Spring在Java语言中一直稳居高位与AI的洪流碰撞后也产生了一些有趣的”化学反应“当然你要非要说碰撞属于物理反应也可以
在经历了一系列复杂的反应方程后Spring家族的新成员——SpringAI就此诞生。
需要注意的是springai目前仍处于试验阶段可能会出现许多不稳定因素希望各位使用者能放平心态面对BUG或者去issues里发表自己的见解
简介
Spring AI 项目为开发 AI 应用程序提供了 Spring 友好的 API 和抽象类。
其目标是将 Spring 生态系统设计原则如可移植性和模块化设计应用于 AI 领域并将使用 POJO 作为应用程序的构建块推广到 AI 领域。
github仓库spring-projects/spring-ai: An Application Framework for AI Engineering 目前该项目已经集成了OpenAI、Azure OpenAI、Hugging Face、Ollama等API。
我们一般对于AI类项目嵌入JAVA的做法为 开发java后端和前端部分代码 确定功能需求如文本生成类项目即接收部分参数返回一个String文本 确定模型主题如BERT/T5等等 对模型进行训练或微调并编写使用方法代码 使用web框架如FastAPI/Flask开放接口规范接参收参格式 java使用webclient也可以用别的请求接口调用AI服务 测试联调你也可以选择一步一测试都可以
对于具体的模型对接代码可以参考我的Transformers文章中有详细的对于模型使用和训练的代码transformer库 | ADulcimer Blog
所以SpringAI也就相当于是集合了大部分厂商的API接口提供调用再进行一些java适配和代码优化等等。最终也是通过接惨文本和key等等然后传参被java接收
请注意springai的API调用并不能让你在离线模式进行大模型的访问如果你是AI开发人员那么springai可以让你在java中离线运行本地torch或其他模型但是相比于python还是较为局限但如果你只是通过此技术调用大模型API那么离线模式下是无法实现对话功能的
应该足够清楚的表明了 springAI到底是个什么技术总结一下
Spring AI 是一个强大的工具适合那些已经在使用 Spring 框架的开发者并且希望将 AI 能力集成到他们的企业级应用中。它的优势在于与 Spring 生态系统的无缝集成和企业级支持但对于初学者或者需求较简单的 AI 项目来说它可能过于复杂
Python开AI接口区别
SpringAI在解决复杂问题时会比传统的AI开接口更加优秀请注意这里说的是复杂的业务逻辑如果是复杂的AI功能比如需求不断微调训练或者更换模型对模型进行更改等等等等Python开接口的方式还是会更加灵活如果说业务复杂但AI需求功能单一则使用SpringAI如果业务逻辑简单则都可以使用python接口的方式因为SpringAI是一个很重的框架
1、企业级架构与可扩展性 Spring AI 是构建在 Spring 框架 上的Spring 本身就是为企业级、分布式、高并发系统设计的框架。因此如果你的需求涉及到复杂的业务逻辑、大规模的用户交互或者高可用、高并发的环境Spring AI 提供的 可扩展性 和 可靠性 将使得系统更加稳定。 Spring Cloud 和 Spring Boot 等工具使得它在微服务架构中的表现非常出色这对于那些需求复杂的系统如需要多个模块、服务和组件的系统来说是一个很大的优势。
2. 集成能力 Spring AI 能够无缝集成 Java 生态系统中的其他工具和技术比如数据库、消息队列、缓存系统、认证与授权、安全等模块。如果你的系统已经在使用 Spring 框架这使得 Spring AI 能够与现有的基础设施进行更好的集成。 如果需要和传统的 Java 后端服务、企业级应用 或 第三方服务如支付、ERP 系统 进行集成Spring 提供的成熟的解决方案和丰富的生态系统使得这种集成更加顺畅。
3. 高并发和高可靠性 Spring 框架和相关工具如 Spring Boot、Spring Cloud具有极强的 高并发 支持和 高可用 设计。对于大规模用户请求、海量数据处理等需求Spring 框架能够通过 多线程、异步处理、负载均衡、服务容错、分布式系统管理等技术 来确保系统的稳定性和高效运行。 在这些场景下Spring AI 提供的 性能优化 和 容错机制 使得系统更加可靠而 Python 写的模型可能需要通过额外的优化和工具来应对这些挑战。
4. 生产环境的成熟度与稳定性 Spring 框架已经在 生产环境 中得到了广泛的应用尤其是在 大型企业级应用 中具有非常高的稳定性和可靠性。Spring 提供了很多企业级功能如 事务管理、缓存、日志记录、调试工具 等这些功能对于复杂需求的应用至关重要。 对比之下传统的 Python 接口通常更多用于 原型开发、快速部署 或 中小规模应用虽然在灵活性和开发速度上有优势但在大规模生产环境中的稳定性和可维护性上可能没有 Spring 那么强。
5. 安全性 在涉及到 敏感数据、权限管理、认证与授权 的复杂需求时Spring 提供了丰富的 安全机制。通过 Spring Security 等工具可以高效地管理和控制用户权限、进行身份验证、数据加密等确保系统的安全性。 Python 虽然也有相关的库如 Flask-Security、Django Security 等但在集成和管理方面可能没有 Spring 的安全框架那么成熟和全面。
6. DevOps 支持与自动化部署 Spring 在 DevOps 和自动化部署方面也有很强的支持Spring Boot 和 Spring Cloud 的集成功能使得部署、监控、日志管理和版本管理等任务更加自动化极大地提高了运维效率。 Python 部署方面也可以使用 Docker、Kubernetes 等工具但由于 Spring 提供的微服务架构和生产环境支持更加丰富Spring AI 在大规模应用部署和运维上表现更佳。
7. 维护与支持 对于 大型团队 和 长期项目Spring 框架提供了成熟的企业级支持文档和社区也非常强大。对于一些需求复杂、时间长的项目使用 Spring AI 可以更容易进行 长期维护 和 团队协作。 Python 的开发者社区虽然庞大但在企业级开发、集成和维护方面可能不如 Spring 框架在行业中的积淀和支持那么全面。
代码部分
根据官方文档分为两种方式调用一种是springboot项目交给spring管理
参考官方文档transforms我们以它为例
ONNX变形金刚 ((ONNX) Transformers) _ Spring AI 1.0.0-SNAPSHOT 中文文档(官方文档中文翻译) —— CADN开发者文档中心
参考maven文档
repo.spring.io
1、Springboot管理
1、引入依赖 repositoriesrepositoryidspring-milestones/idnameSpring Milestones/nameurlhttps://repo.spring.io/milestone/urlsnapshotsenabledfalse/enabled/snapshots/repositoryrepositoryidspring-snapshots/idnameSpring Snapshots/nameurlhttps://repo.spring.io/snapshot/urlreleasesenabledfalse/enabled/releases/repository/repositoriesdependencyManagementdependenciesdependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-bom/artifactIdversion1.0.0-SNAPSHOT/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementdependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-transformers-spring-boot-starter/artifactId
/dependency2、编写application.yml配置文件
spring:ai:embedding:transformer:onnx:model-uri: https://huggingface.co/intfloat/e5-small-v2/resolve/main/model.onnxtokenizer:uri: https://huggingface.co/intfloat/e5-small-v2/raw/main/tokenizer.jsoncache:directory: /tmp/ai-embedding-transformerenabled: true部分的配置详情如下
Property
Description
spring.ai.embedding.transformer.enabled
启用 Transformer Embedding 模型。
spring.ai.embedding.transformer.tokenizer.uri
Transformer分词器地址
spring.ai.embedding.transformer.tokenizer.options
模型的一些参数max_length这些
spring.ai.embedding.transformer.cache.enabled
是否启用缓存
spring.ai.embedding.transformer.cache.directory
缓存路径
spring.ai.embedding.transformer.onnx.modelUri
Transformers预训练模型地址
spring.ai.embedding.transformer.onnx.gpuDeviceId
GPU设备ID
这些是一些常用的具体请参考官方文档
3、搭建controller和service层
import com.adulcimer.ai.service.ToxicityService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;RestController
class MyController {Resourceprivate ToxicityService toxicityService;PostMapping(/test)public String test() throws Exception {toxicityService.modelTest();return Hello, World!;}
}import jakarta.annotation.Resource;
import org.springframework.ai.transformers.TransformersEmbeddingModel;
import org.springframework.stereotype.Service;import java.util.Arrays;Service
public class ToxicityService {Resourceprivate TransformersEmbeddingModel transformersEmbeddingModel;public void modelTest() throws Exception {float[] embed transformersEmbeddingModel.embed(Hello World);System.out.println(Arrays.toString(embed));}
}4、结果
我们已经得到模型的返回值了成功使用springboot调用了AI模型
具体的业务逻辑也可以轻松嵌入是不是很轻松
2、自定义配置
当然你也可以不使用spring的管理
TransformersEmbeddingModel embeddingModel new TransformersEmbeddingModel();embeddingModel.setTokenizerResource(classpath:/onnx/all-MiniLM-L6-v2/tokenizer.json);embeddingModel.setModelResource(classpath:/onnx/all-MiniLM-L6-v2/model.onnx);embeddingModel.setResourceCacheDirectory(/tmp/onnx-zoo);embeddingModel.setTokenizerOptions(Map.of(padding, true));embeddingModel.afterPropertiesSet();ListListDouble embeddings this.embeddingModel.embed(List.of(Hello world, World is big));然后正常使用架构搭建即可
最后
以上部分内容和图片来自于官方文档本文中已声明原作地址。