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

Java程序员最好的AI框架,伴随着Spring到来了

Spring AI:简化AI集成的Java框架

在过去,Java 缺乏一个优秀的 AI 应用框架,这使得开发者在整合不同 AI 提供商的服务时面临诸多不便。Spring AI 的出现填补了这一空白。它是一个专为 AI 工程设计的应用框架,旨在将 Spring 生态系统的设计原则(如可移植性和模块化)引入到 AI 领域,并提倡使用 POJO 作为构建块。

Spring AI 的核心优势在于提供了一套统一的接口,这使得开发者能够轻松地在不同的 AI 提供商之间切换,仅需更改配置即可。此外,Spring AI 完美兼容现有的 Spring 生态系统以及 Java 的面向对象编程范式,极大简化了开发流程,减少了学习成本和迁移工作量。通过这些特性,Spring AI 不仅为开发者提供了强大的抽象层,还显著提升了生产力。

Spring AI的核心功能

能力名字:模型(Model)

一句话说明:Spring AI 提供了与不同AI服务提供商的接口标准化,使得开发者能够以统一的方式使用多个AI大模型。
输入输出举例:输入为用户查询或指令,输出为由AI生成的文本、图片或语音内容。

能力名字:提示(Prompt)

一句话说明:通过定义对话中的消息角色及内容,Prompt允许更复杂而细致地与AI模型交互。
输入输出举例:输入可以是用户的问题或者请求,结合预设的角色信息作为背景;输出则是基于这些信息生成的回答或响应。

能力名字:提示词模板(Prompt Template)

一句话说明:利用模板文件来组织和格式化给AI模型的输入,增强灵活性同时简化开发工作。
输入输出举例:输入包括动态参数如用户提供的特定词语,以及固定的模板文本;输出为根据模板和参数合成后的完整问题或命令。

能力名字:嵌入(Embedding)

一句话说明:将文本转换成向量表示形式,便于执行诸如语义搜索之类的任务。
输入输出举例:输入一段文字,输出是该段落对应的多维向量空间坐标值。

能力名字:结构化输出(Structured Output)

一句话说明:自动从非结构化的自然语言响应中解析出结构化数据,比如JSON对象。
输入输出举例:输入是来自AI的自由文本回复,输出则是经过解析后得到的键值对或其他形式的数据结构。

能力名字:检索增强生成(RAG)

一句话说明:结合私有数据源的信息来提高文本生成的质量,使回答更加准确且相关。
输入输出举例:输入可能涉及对特定文档或数据库条目的引用,输出则是基于这些资料优化过的回答。

能力名字:函数调用(Function Calling)

一句话说明:允许AI在处理某些任务时调用外部定义的功能,扩展其功能范围。
输入输出举例:当遇到需要数学计算的情况时,AI会请求执行一个专门用于数学运算的函数,并接收该函数的结果作为进一步处理的基础。

能力名字:向量存储

一句话说明:支持多种向量数据库,实现高效的数据检索与相似性匹配。
输入输出举例:输入是待索引的文档集合,输出是在接收到查询后返回的相关度最高的文档列表。

Spring AI Alibaba框架介绍:支持多类型AI服务,简化开发流程

Spring AI Alibaba 是一个专为阿里云通义大模型设计的实现框架,它基于 Spring AI 的API,支持接入包括对话、文生图、文生语音等在内的多种生成式AI服务。Spring AI Alibaba 核心优势在于其标准化了各类AI提供者的接口,让开发者能够通过简单的配置切换不同的AI服务提供商,无需重复编写大量代码。此外,该框架还提供了诸如输出解析、Prompt模板等功能,极大地简化了AI应用开发流程。特别地,Spring AI Alibaba 兼容国产大模型如阿里云的通义系列,使得用户能够方便地利用这些强大的本地化资源进行创新和开发。

使用Spring AI Alibaba构建聊天后端示例

基于Spring AI Alibaba生成做聊天后端例子

根据我了解的信息中的指导,我们将使用SCA AI Alibaba结合通义千问来构建一个支持Prompt模板和流式返回(Flux<String>)的聊天API。下面将按照详细的步骤来实现这一功能。

1. 环境准备

确保你的开发环境满足以下要求:

  • JDK版本在17及以上。
  • Spring Boot版本为3.3.x或更高版本。

2. 获取API Key

首先需要访问阿里云并获取通义千问的API Key:

  • 访问阿里云百炼页面。
  • 登录你的阿里云账号,并开通“百炼大模型推理”服务。
  • 成功开通服务后,创建一个新的API Key,请妥善保存该Key。

配置环境变量以方便后续使用:

export AI_DASHSCOPE_API_KEY=您的有效API-Key

3. 配置Maven仓库

由于Spring AI的一些组件尚未发布到正式的Maven仓库中,因此我们需要添加Spring的特定仓库:

<repositories><repository><id>sonatype-snapshots</id><url>https://oss.sonatype.org/content/repositories/snapshots</url><snapshots><enabled>true</enabled></snapshots></repository><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository></repositories>

4. 添加项目依赖

接下来,在项目的pom.xml文件中加入必要的依赖项:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.4</version><relativePath/>
</parent><dependencies><!-- Spring AI Alibaba Starter --><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>1.0.0-M2</version></dependency><!-- Spring Web for RESTful services --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>

5. 应用程序属性配置

src/main/resources/application.properties中设置API Key:

spring.ai.dashscope.api-key=${AI_DASHSCOPE_API_KEY}

6. 创建Controller

定义一个REST控制器来处理聊天请求,包括基于模板的Prompt以及流式响应的支持。这里我们采用了一个简单的文本提示模板作为示例:

  • src/main/resources目录下创建一个名为prompt-template.st的文件,内容如下:
You are a helpful assistant. Answer the following question: {input}
  • 创建ChatController类来处理用户输入并产生流式回复:
@RestController
@RequestMapping("/ai")
public class ChatController {private final ChatClient chatClient;@Value("classpath:prompt-template.st")private Resource promptTemplateResource;public ChatController(ChatClient.Builder builder) {this.chatClient = builder.build();}@GetMapping(value = "/chatStream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)public Flux<String> chatSteam(@RequestParam String input) {PromptTemplate promptTemplate = new PromptTemplate(promptTemplateResource);Prompt prompt = promptTemplate.create(Map.of("input", input));return chatClient.prompt(prompt).stream().content();}
}

上述代码实现了通过GET方法访问/ai/chatStream?input=...路径时,系统将使用给定的输入构造Prompt并通过流的方式逐步返回聊天结果。

解释

  • PromptTemplate: 使用预定义的模板文件(prompt-template.st)与实际输入参数动态组合成最终发送给AI模型的消息体。
  • ChatClient.stream(): 调用此方法可以让客户端接收到从AI模型逐段生成的内容,非常适合长对话或需即时反馈的应用场景。

以上步骤涵盖了从基础环境搭建、API接入直到具体业务逻辑实现的所有关键点,遵循了官方文档推荐的最佳实践,能够快速帮助开发者上手并构建出具备高级特性的聊天应用。

使用React和Spring Cloud Alibaba构建聊天应用示例

基于你提供的要求,我们将结合React前端与Spring Cloud Alibaba后端来构建一个支持流输出的简单聊天应用。该方案包括了前端如何通过React实现用户交互界面以及后端如何利用Spring AI Alibaba处理请求并返回流式数据。

构建项目

前端部分
  1. 创建新的React应用
    首先,在本地机器上初始化一个新的React项目,并安装必要的依赖包:
npx create-react-app frontend
cd frontend
npm install
  1. 编辑基本文件
  • public/index.html 文件保持默认即可。
  • src/index.js 无需更改,保留如下内容以确保应用程序正确渲染:
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';ReactDOM.render(<React.StrictMode><App /></React.StrictMode>,document.getElementById('root')
);
  • 修改 src/App.js 为包含一个名为 ChatComponent 的组件入口:
import React from 'react';
import ChatComponent from './components/ChatComponent';function App() {return (<div className="App"><ChatComponent /></div>);
}export default App;
  1. 创建聊天组件
    src/components 目录下新建 ChatComponent.js 并添加以下代码:
import React, { useState } from 'react';function ChatComponent() {const [input, setInput] = useState('');const [messages, setMessages] = useState('');const handleInputChange = (event) => {setInput(event.target.value);};const handleSendMessage = async () => {try {const response = await fetch(`http://localhost:8080/ai/chatStream?input=${input}`);if (!response.ok) throw new Error('Network response was not ok');const reader = response.body.getReader();const decoder = new TextDecoder('utf-8');let done = false;while (!done) {const { value, done: readerDone } = await reader.read();done = readerDone;const chunk = decoder.decode(value, { stream: true });setMessages((prevMessages) => prevMessages + chunk);}} catch (error) {console.error('Failed to fetch', error);}};const handleClearMessages = () => {setMessages('');};return (<div><inputtype="text"value={input}onChange={handleInputChange}placeholder="Enter your message"/><button onClick={handleSendMessage}>Send</button><button onClick={handleClearMessages}>Clear</button><div><h3>Messages:</h3><pre>{messages}</pre></div></div>);
}export default ChatComponent;
  1. 运行前端项目
    完成上述步骤后,可以通过命令启动你的React应用进行测试:
npm start
后端部分

对于后端开发,您需要按照第3篇参考材料中的指导来配置您的Spring Boot项目以支持与阿里云通义千问API的集成。这包括设置环境变量、添加适当的依赖项及配置等步骤。请特别注意使用正确的版本号和API密钥。此外,还需要实现类似于示例中给出的 /chatStream 接口,它应该能够接收客户端传入的消息,并调用AI服务返回流式响应。

请注意,由于涉及到具体业务逻辑和服务端细节(如服务器地址),此处未提供完整的后端实现代码。但上述提到的文档资源提供了充分的信息帮助您完成这些配置和编码工作。

解释

  • 前端: 我们创建了一个简单的React应用,其中包含一个可以发送消息并显示接收到的回复的聊天窗口。当用户点击“发送”按钮时,会向指定URL发起HTTP GET请求,并通过读取响应体的数据流逐步更新界面上的消息列表。
  • 后端: 虽然这里没有直接给出后端的具体实现,但是提到了关键点在于利用Spring Cloud Alibaba框架连接到阿里云通义千问API,然后根据客户端请求动态生成回复内容并通过Flux形式传递给前端。这种设计允许实时处理大量数据而不会阻塞服务器或客户端。

这样就完成了整个聊天应用从前后端的设计到初步搭建的过程。


http://www.mrgr.cn/news/55395.html

相关文章:

  • 从零学习大模型(一)-----GPT3(上)
  • 设计模式的六大原则
  • 倪师学习笔记-天纪-斗数星辰介绍
  • 关于k8s集群高可用性的探究
  • YoloV10——专栏目录
  • js.矩阵置零
  • React是如何处理事件的?
  • 颜廷利:东方智慧的现代诠释者
  • keras的内部的模块有哪些? (自用便签)
  • 《七龙珠:电光炸裂 Zero》销量破纪录,AOC U32G4ZMN带你重燃格斗热血!
  • istio多主集群架构验证方法
  • Kafka之原理解析
  • 正点原子 linux 几个编译器之间的关系
  • [单master节点k8s部署]42.全链路监控(一)
  • 【p2p、分布式,区块链笔记 Blockchain】truffle003 测试网络准备
  • 关于动态规划的一份介绍
  • 【AI大模型】本地部署 Code Llama 大模型
  • ROS 2 Jazzy Jalisco 模型工具 Xacro 总结和习题
  • FineReport 页面设置
  • 【小白学机器学习17】 概率论的认识论和方法论
  • 鲸信私有化即时通信如何平衡安全性与易用性之间的关系?
  • 观察者模式
  • Vue--数据代理
  • 相同的树算法
  • 在做题中学习(63):替换问号
  • vue3学习记录-TransitionGroup