Spring AI:AI工程领域的Spring框架应用
Spring AI是一个专为AI工程项目设计的应用框架,它将Spring生态系统的设计原则如可移植性和模块化带入AI开发领域,支持文字,图片,音频的生成以及RAG等核心能力。
借助SpringBoot的强大支持,Spring AI允许开发者通过简单的配置切换不同的AI服务提供商(例如OpenAI、Azure、阿里云等),极大简化了跨平台迁移的复杂度。其核心优势在于提供了一套标准化接口,使得开发者能够用统一的方式与多种AI后端进行交互,同时兼容基于流的数据处理模式,方便地集成到现有的SpringBoot应用中,显著减少代码编写和维护的工作量。
这不仅促进了开发效率,也确保了应用程序在不同AI服务间的灵活性与适应性。
Spring AI Alibaba:阿里云大模型的Spring AI实践,赋能智能应用开发
Spring AI Alibaba 是基于 Spring AI 的实现,整合了阿里云在AI领域的一系列产品和最佳实践。它允许开发者通过标准化接口轻松集成多种AI能力,如对话、文生图、文生语音等,极大简化了不同AI服务间的切换和对接工作。核心优势在于其与SpringBoot的无缝结合,使得用户可以在熟悉的SpringBoot环境中快速开发出具备AI功能的应用。此外,Spring AI Alibaba还支持高级特性如RAG(检索增强生成),能够利用私有知识库提升模型响应质量,非常适合希望在现有SpringBoot项目中添加智能交互功能的企业和个人开发者。
SpringBoot集成Spring AI Alibaba打造对话模型:纠错、扩展提问与流接口实现
基于SpringBoot集成Spring AI Alibaba来完成一个简单对话模型,并构建一个支持prompt的、能够纠正语法和拼写错误且做扩展性提问的流返回接口项目,以下为详细步骤:
1. 环境准备
- 确保你的JDK版本在17(含)以上。
- 确保你的Spring Boot版本在3.3.x以上。
2. 获取通义千问API Key
访问阿里云百炼页面,登录账号后开通“百炼大模型推理”服务。成功后创建一个新的API Key,并记录下来。
3. 配置环境变量
将上一步获取到的API Key配置为环境变量:
export AI_DASHSCOPE_API_KEY=your_api_key_here
4. 添加仓库与依赖
在pom.xml
中添加Spring AI Alibaba所需的仓库及依赖:
<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>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud.ai</groupId>
<artifactId>spring-ai-alibaba-starter</artifactId>
<version>1.0.0-M2</version>
</dependency>
<!-- Spring Boot starter web for RESTful API -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
5. 应用属性设置
在application.properties
或application.yml
中添加如下配置:
spring.ai.dashscope.api-key=${AI_DASHSCOPE_API_KEY}
6. 创建Prompt模板文件
在src/main/resources
目录下创建名为correct-and-expand.st
的文件,内容如下:
请先纠正下面句子中的语法和拼写错误:
{input}
然后,请基于上面的问题进行扩展性的提问。
7. 编写Controller
接下来,在项目中创建一个Controller类以处理请求并调用AI服务:
import com.alibaba.cloud.ai.chat.ChatClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux;
@RestController
@RequestMapping("/ai")
@CrossOrigin(origins = "*")
public class ChatController {
private final ChatClient chatClient;
@Value("classpath:correct-and-expand.st")
Resource resource;
public ChatController(ChatClient.Builder builder) {
this.chatClient = builder.build();
}
@GetMapping("/chatStream")
public Flux<String> chatSteam(@RequestParam String input) {
PromptTemplate promptTemplate = new PromptTemplate(resource);
Prompt prompt = promptTemplate.create(Map.of("input", input));
return chatClient.prompt(prompt)
.stream().content();
}
}
8. 构建并运行
现在你可以使用Maven命令打包应用了:
mvn clean package
然后运行打包后的jar文件或者直接从IDE启动应用。
至此,你就完成了一个基于Spring Boot的Spring AI Alibaba集成示例,它提供了一个接受中文输入并返回英文学习用语句(包括纠错与扩展提问)的流式响应接口。确保后端允许跨域请求以便前端能够顺利访问该接口。如需测试此接口,可参照第7篇参考内容提供的React前端实现方式来构建客户端部分。
分步打造React聊天应用
构建前端
根据我了解的信息中提供的步骤详细介绍如何创建这样一个前端应用。
1. 初始化React项目
首先,在本地机器上初始化一个新的React应用。打开命令行工具,运行如下命令:
npx create-react-app frontend
cd frontend
npm install
这组命令会创建一个名为frontend
的新React应用,并安装所有必要的依赖包。
2. 修改基础HTML文件
找到public/index.html
文件,确保其内容符合以下示例,以便正确显示应用标题等基本信息:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Chat App</title>
</head>
<body>
<div id="root"></div>
</body>
</html>
3. 配置入口JS文件
在src/index.js
中设置React应用的入口点,使其指向即将创建的App
组件:
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById('root')
);
4. 创建主应用组件
于src/App.js
内定义App
组件,它作为整个聊天应用的核心结构容器。此组件简单地渲染了ChatComponent
组件,后者负责实现具体的聊天功能逻辑:
import React from 'react';
import ChatComponent from './components/ChatComponent';
function App() {
return (
<div className="App">
<ChatComponent />
</div>
);
}
export default App;
5. 实现聊天组件
接下来是关键部分——在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://your-backend-url/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, fullMessage = '';
while (!done) {
const { value, done: isDone } = await reader.read();
done = isDone;
fullMessage += decoder.decode(value, { stream: true });
setMessages(prev => prev + decoder.decode(value, { stream: true }));
}
setMessages(prev => prev + '\n\n=============================\n\n');
} catch (error) {
console.error('Error:', error);
}
};
const handleClearMessages = () => setMessages('');
return (
<div>
<input type="text" value={input} onChange={handleInputChange} placeholder="Enter your message" />
<button onClick={handleSendMessage}>Send</button>
<button onClick={handleClearMessages}>Clear</button>
<h3>Messages:</h3>
<pre>{messages}</pre>
</div>
);
}
export default ChatComponent;
请替换http://your-backend-url/
为实际后端服务的URL地址。
6. 运行你的React应用
完成上述步骤后,可以使用以下命令启动你的React开发服务器,查看结果:
npm start
这个过程创建了一个简单的聊天应用程序,它可以向指定的后端API发送请求,并实时显示接收到的数据流。注意,为了使本方案工作,后端需要支持CORS跨域资源共享策略。如果遇到任何问题,请检查浏览器控制台输出以获取更多调试信息。
如何调整Spring AI框架以适配Llama模型
要切换Spring AI Alibaba 从通义到其他模型,比如Llama模型,主要涉及到修改配置。根据我了解的信息中的内容,我们知道Spring AI的核心价值是“写一次代码,支持所有模型”。因此,要切换不同的模型实现,只需要调整相关的配置即可。
依据我了解的信息提供的信息,以下是具体可执行的步骤来实现从阿里云通义模型到Llama模型的切换:
-
- 在
application.properties
或application.yml
文件中更改与AI模型相关的配置项。对于Spring AI Alibaba来说,这通常意味着更新类似于spring.ai.dashscope.model = llama
这样的设置来指定使用Llama模型。
- 在
-
- 如果之前配置了特定于通义模型的服务端点或其他参数,也需相应地更改为适用于Llama模型的值。