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/

相关推荐
腾渊信息科技公司10 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
Smoothcloud润云11 小时前
国内GPU算力租赁平台横向测评:资源、成本、稳定性三维对比
人工智能·ai·云计算·gpu算力·gpu
赵康14 小时前
AI 写代码之后,Code Review 会议怎么开
ai·llm·skill
神奇霸王龙14 小时前
Claude Code屠榜:MiMo与Grok紧追Codex
服务器·网络·人工智能·gpt·ai·ai编程
TsingtaoAI14 小时前
3D高斯泼溅技术发展及其在具身智能领域的应用综述
人工智能·算法·ai·具身智能·高斯泼溅
汤姆yu16 小时前
CodeGeeX 4完整安装与实操使用全指南
人工智能·windows·ai·智能体·视频模型
人间凡尔赛16 小时前
2026 AI Agent 多智能体协同编程实战指南:从 Kimi K3 到 GPT-5.6 深度解析
ai·agent·多智能体·编程实战·waic·gpt-5.6·kimik3
ApacheSeaTunnel17 小时前
Apache SeaTunnel AI CLI Benchmark:7 款大模型、100 个 ETL 任务实测,谁真正能跑起来?
大数据·ai·开源·大模型·数据集成·cli·seatunnel·技术分享·数据同步
大卫小东(Sheldon)17 小时前
小鹤音形词典:一个用 Rust 写的离线编码查询桌面工具
ai·rust
yio_yin17 小时前
Spring事务管理(数据一致性)
数据库·sql·spring