SpringAI系列---【如何快速构建一个SpringAI工程?】

工程配置步骤

注意

  • 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();
    }
}

posted on 2025-06-14 23:33  少年攻城狮  阅读(148)  评论(0)    收藏  举报

导航