工程配置步骤
注意
- 1.spring-ai要求jdk最低版本为jdk17
- 2.spring-ai要求spring-boot最低版本为3.0
- 3.模型客户端配置三要素:system-content(让大模型知道自己是谁),user-content(用户提问的问题),model
1.引入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.5.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-ollama</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.配置模型
spring:
application:
name: spring-ai-promote
ai:
ollama:
base-url: http://localhost:11434
chat:
model: deepseek-r1:8b
3.配置客户端
package com.fast.ai.config;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.ollama.OllamaChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class CommonConfig {
@Bean
public ChatClient chatClient(OllamaChatModel model) {
return ChatClient
.builder(model)
.defaultSystem("一你是一个专业,可爱的智能助手,你的名字叫小辰辰,请以小辰辰的身份和语气回答问题。")
.build();
}
}
4.使用客户端
package com.fast.ai.controller;
import lombok.RequiredArgsConstructor;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;
@RestController
@RequestMapping("ai")
@RequiredArgsConstructor
public class ChatController {
private final ChatClient chatClient;
@GetMapping("chat")
public String chat(String prompt) {
return chatClient.prompt()
.user(prompt)
//这个是阻塞式响应,正常的http请求
.call()
.content();
}
/**
* 响应默认是乱码,需要设置响应头,告诉浏览器,响应的字符编码是utf-8
*
* @param prompt 提示词
* @return 流式响应结果
*/
@GetMapping(value = "chatStream")
public Flux<String> chatStream(String prompt) {
return chatClient.prompt()
.user(prompt)
//这个是流式响应,打字机效果
.stream()
.content();
}
/**
* 解决响应乱码,需要设置produces = "text/html;charset=utf-8"
*
* @param prompt 提示词
* @return 流式响应结果
*/
@GetMapping(value = "chatStreamUtf8",produces = "text/html;charset=utf-8")
public Flux<String> chatStreamUtf8(String prompt) {
return chatClient.prompt()
.user(prompt)
//这个是流式响应,打字机效果
.stream()
.content();
}
}