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

Java程序员的AI框架,它带着Spring走来啦

Spring AI旨在简化包含人工智能功能的应用程序的开发,而不会造成不必要的复杂性。

该项目从著名的 Python 项目中汲取灵感,例如 LangChain 和 LlamaIndex,但 Spring AI 并不是这些项目的直接移植。该项目成立的信念是,下一波生成式 AI 应用程序将不仅适用于 Python 开发人员,而且将在许多编程语言中无处不在。

Spring AI 的核心是提供抽象,作为开发 AI 应用程序的基础。这些抽象具有多种实现,只需最少的代码更改即可轻松交换组件。

1.Spring AI 提供以下功能

  1. 支持所有主要的模型提供商,如OpenAI,Microsoft,Amazon,Google和Huggingface。
  2. 支持的模型类型包括聊天和文本到图像,还有更多类型正在开发中。
  3. 跨 AI 提供商的可移植 API,用于聊天和嵌入模型。支持同步和流 API 选项。还支持下拉以访问特定于模型的功能。
  4. 将 AI 模型输出映射到 POJO。
  5. 支持所有主要的矢量数据库提供商,例如 Azure Vector Search、Chroma、Milvus、Neo4j、PostgreSQL/PGVector、PineCone、Qdrant、Redis 和 Weaviate
  6. 跨 Vector Store 提供程序的可移植 API,包括一个类似 SQL 的新颖元数据过滤器 API,该 API 也是可移植的。
  7. Function calling 函数调用
  8. 用于 AI 模型和矢量存储的 Spring Boot 自动配置和启动器。
  9. 用于数据工程的 ETL 框架

2.快速开始

创建一个简单的spring项目,注意这里jdk需要17以上,然后在pom文件中添加依赖

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId><version>0.8.1</version>
</dependency>

 接下来在application.properties文件中添加配置

spring.ai.openai.api-key=YOUR_API_KEY
spring.ai.openaibase-url=https://api.openai.com

这样一个简单的环境就完成了。 

 3.简单使用

创建一个OpenAiController类,将ChatClient(SpringBoot启动时,会为我们自动注入注入进来,并编写一个简单的接口进行测试:

@RestController
@RequestMapping("/chat")
public class OpenAiController {@Resourceprivate ChatClient chatClient;@GetMapping("/openai/test")public Map<String, String> completion(@RequestParam(value = "message") String message) {return Map.of("generation", chatClient.call(message));}
}

代码chatClient.call(message)中message是我们输入到chartgpt的文本,返回结果即时ChartGPT生成的内容,AI模型默认gpt-3.5-turbo,Spring AI对参数和请求做了封装,简单的一行代码就完成了ChartGPT的对接。

4.流式对话

        流式对话即流式对话传输,只要AI有输出,就进行服务端内容的推送,而不需要等到AI生成完后一起发送,一定程度上能够提高使用上的响应速度,增加对话的体验。

        Spring AI 流式对话接口采用的是Spring WebFlux异步网络框架实现。

@RestController
@RequestMapping("/chat")
public class OpenAiStreamController {@Resourceprivate StreamingChatClient streamingChatClient;@GetMapping(value = "/openai/stream")public Flux<String> stream(String message){// 将流中的内容按顺序返回return streamingChatClient.stream(message).flatMapSequential(Flux::just);}
}

相关文章:

  • Java面向数据编程1.1版本
  • C#_类型转换之隐式转换
  • 闲话 .NET(7):.NET Core 能淘汰 .NET FrameWork 吗?
  • Lvm逻辑卷调整容量
  • 2024电激世界脉动-中国汽车品牌全球化制胜手册
  • M00238-固定翼无人机集群飞行仿真平台MATLAB完整代码含效果
  • 整理前端新出的操作工具好用又好玩(Custom Formatter,Oxlint,Nuxt DevTools,component-party)
  • 机器学习过拟合和欠拟合!看这一篇文章就够了 建议收藏!(上篇)
  • 备战秋招c++ 【持续更新】
  • huggingface笔记 accelerate launch
  • 学习编程对英语要求高吗?
  • FreeBSD下使用原生虚拟机管理器bhyve
  • KT6368A蓝牙芯片AT命令会被透传出去,指令对为什么会被透传出去
  • PUBG绝地求生卡在初始界面 登不上去 打不开游戏的解决办法
  • Nginx添加访问密码
  • #Java异常处理
  • 2017年终总结、随想
  • go append函数以及写入
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • Python_网络编程
  • SpringCloud集成分布式事务LCN (一)
  • vue-cli在webpack的配置文件探究
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 订阅Forge Viewer所有的事件
  • 回顾 Swift 多平台移植进度 #2
  • 基于Android乐音识别(2)
  • 基于遗传算法的优化问题求解
  • 实战|智能家居行业移动应用性能分析
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (4)logging(日志模块)
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (windows2012共享文件夹和防火墙设置
  • (第二周)效能测试
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (转)linux 命令大全
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .Net Core 中间件验签
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .NET企业级应用架构设计系列之应用服务器
  • .net通用权限框架B/S (三)--MODEL层(2)
  • /dev下添加设备节点的方法步骤(通过device_create)
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • [<死锁专题>]
  • [BUUCTF]-PWN:[极客大挑战 2019]Not Bad解析
  • [BUUCTF]-Reverse:reverse3解析
  • [C#] 基于 yield 语句的迭代器逻辑懒执行
  • [C#]使用C#部署yolov8-seg的实例分割的tensorrt模型
  • [C++11 多线程同步] --- 条件变量的那些坑【条件变量信号丢失和条件变量虚假唤醒(spurious wakeup)】
  • [cb]UIGrid+UIStretch的自适应
  • [CISCN 2019华东南]Web11
  • [DL]深度学习_Feature Pyramid Network
  • [dts]Device Tree机制