SpringAI自学成才系列(一)-结合deepseek开发智能问答

1.概述

Spring AI 是一个为 Java 开发者设计的应用框架,其核心目标是将生成式 AI 能力(如大语言模型)以 Spring 生态特有的"习惯法"无缝集成到企业级应用中。本文将介绍deepseek模型本地化部署,并利用springAI开发应用,实现智能问答。

2.基于SpringAI开发的智能问答

2.1 docker安装部署deepseek

大模型的安装主要基于Ollama实现,Ollama 是一个将大型语言模型(LLM)的运行门槛降到"个人开发者级别"的开源工具,它能够让用户像安装APP一样安装大模型。

2.1.1 安装ollama

可以根据需要安装对应版本ollama,如果该指令无法获取到对应版本镜像,可以从华为云或者阿里云镜像仓库获取所需要版本。

docker pull ollama/ollama:0.5.10

也可以下载ollama二进制安装包进行安装。

2.1.2 运行ollama

docker run -d --name ollama -p 11434:11434

通过docker ps检查是否安装成功,如果出现如下信息,说明成功运行。

2.1.3 安装deepseek大模型

1.选择模型

在ollama官网选择所需要安装的模型,每个模型都有多个版本,可以根据服务器的配置进行安装,如果下载的模型运行需要较大资源,可能会无法运行。

本文选择deepseek-r1:1.5b,模型大小1.5G,2C4G勉强能运行。

2.进入ollama容器

bash 复制代码
docker exec -it <containerId> bash

3.下载并安装模型

在容器中执行如下命令

bash 复制代码
//下载模型
ollama pull deepseek-r1:1.5b

//运行模型
ollama run deepseek-r1:1.5b

验证模型运行状态,指令如下:

bash 复制代码
ollama ps

如果出现如下信息,说明模型运行正常。

至此,deepseek模型部署完毕。由于我的服务器资源有限,因此选择了一个比较小的模型,在实际的测试中,可能会有响应较慢的情况。如果大家服务器资源充足,建议选择一个性能更好的模型,体验会更好点。

2.2 SpringAI整合deepseek实现智能问答

本文选择的springAI版本为2.0.0-M2,是目前最新的版本,1.0部分的接口和2.0的区别还是比较大的,选择时要注意,spring-boot-starter的版本选择4.0.2。

2.2.1 引入pom文件

java 复制代码
   <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>4.0.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.eckey.lab</groupId>
    <artifactId>ollama</artifactId>
    <version>1.0.0</version>
    <name>ollama-chat</name>

    <properties>
        <java.version>17</java.version>
        <spring-ai.version>2.0.0-M2</spring-ai.version>
    </properties>
    <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.2.2 配置OllamaChatModel

java 复制代码
@Configuration
public class OllamaConfig {

    @Bean
    public ChatClient chatClient(OllamaChatModel ollamaChatModel, ChatMemory chatMemory) {
        return ChatClient.builder(ollamaChatModel)
                 //模型系统提示词
                .defaultSystem("你是一个热心、可爱的智能助手,你的名字叫小钢炮,请以小钢炮的身份和语气回答问题")
                .defaultAdvisors(
                        new SimpleLoggerAdvisor())
                .build();
    }
  }

2.2.3 配置文件编写

java 复制代码
spring.application.name=ollama-chat
server.port=8080
//ollama服务器地址
spring.ai.ollama.base-url=http://127.0.0.1:11434
//模型版本号
spring.ai.ollama.chat.model=deepseek-r1:1.5b
//日志打印级别
logging.level.org.springframework.ai.chat.client.advisor=debug

2.2.4 编写controller

java 复制代码
@RestController()
@CrossOrigin("*")
@RequestMapping("/ai/chat/")
public class OllamaController {

    @Resource
    private ChatClient chatClient;

  	//同步返回,获取完模型的所有答案后才返回
    @GetMapping
    public String generate(@RequestParam("message") String message) {
        return chatClient.prompt(message).call().content();
    }

  	//流式输出,逐步返回模型思考结果
    @RequestMapping(value = "/stream", produces = "text/html;charset=utf-8")
    public Flux<String> generateStream(String prompt, String chatId) {
        chatHistoryRepository.save(ChatTypeEnums.CHAT.getType(), chatId);
        return chatClient.prompt(prompt).stream().content();
    }
 }

2.2.5 测试


流式输出会逐步输出返回结果,对用户来说更友好。由于我们添加了系统提示词,指定它是一个智能助手,名字叫小钢炮,所以它的回答还算正确。至此我们实现了一个简单的问答模型,可以用大模型写一个简单的前端页面,就可以进行交互测试了。

3.小结

1.本文利用SpirngAI实现了一个简单的智能助手,功能非常简单,但是也体现了springAI的开箱即用;

2.利用SpringAI实现的简单助手,还不够完善,没有集成上下文记忆功能,导致问答没有连续性,下一篇博客将介绍如何实现会话记忆功能;

3.选择SpringAI的版本很重要,不同版本的API是不一样的,存在较大差异,需要严格按照相关版本进行集成。

4.参考文献

1.https://springdoc.cn/spring-ai/

2.https://docs.ollama.com/

相关推荐
logocode_li2 小时前
Prompt,除了使用外,你了解其核心原理么?
ai·prompt·指令调优
m0_603888712 小时前
Chatting with Images for Introspective Visual Thinking
人工智能·计算机视觉·ai·论文速览
m0_603888712 小时前
MPA Multimodal Prototype Augmentation for Few-Shot Learning
人工智能·深度学习·ai·原型模式·论文速览
sww_10262 小时前
Spring AI 可观测性实战
java·人工智能·spring
qinaoaini2 小时前
Spring 简介
java·后端·spring
1candobetter3 小时前
JAVA后端开发——反射机制在Spring业务开发中的实际应用
java·开发语言·spring
spencer_tseng3 小时前
doubao-seedream & doubao-seedance
ai·doubao
阿杰学AI3 小时前
AI核心知识99——大语言模型之 Agent Skill(简洁且通俗易懂版)
人工智能·ai·语言模型·aigc·agent·agent skill·智能体技能
TDengine (老段)3 小时前
TDengine IDMP 基本概念
大数据·数据库·物联网·ai·时序数据库·tdengine·涛思数据