当前位置: 首页 > news >正文

基于Spring AI与Ollama构建本地DeepSeek对话机器人

1、安装ollama:

  • 打开Ollama下载官网,根据自己的操作系统下载相应版本的安装文件。

  • 由于Ollama默认安装在C盘,而Ollama和模型文件都非常大,如果安装在C盘非常占用系统空间,可以使用下面的方法将Ollama安装到指定为止

  • 打开下载Ollama的文件夹位置,并在地址栏中输入cmd,打开命令行窗口

  • 在命令行中输入OllamaSetup.exe /DIR="D:\ollama",将Ollama安装到D盘Ollama文件夹

  • 安装完成后,在命令行窗口中输入ollama -h若出现如下图所示则说明Ollama安装成功。
    在这里插入图片描述
    2、修改Ollama模型下载位置
    在我的电脑上点击鼠标右键,选择“属性”,在打开的设置窗口中找到“系统”—“高级系统设置”,如下图所示 在这里插入图片描述
    在打开的系统属性窗口中点击“环境变量”,在环境变量对话框中点击“系统变量”中的新建按钮,弹出新建环境变量窗口,如系统所示。在新建系统变量中输入变量名:OLLAMA_MODELS,变量值:D:\ollama\models,完成后点击确定
    在这里插入图片描述
    3、下载DeepSeek,在ollama官网的Models菜单下,找到deepseek-r1,点击打开
    在这里插入图片描述
    4、选择deepseek不同参数的模型,可以看到后面的ollama指令跟着变化,我用的是笔记本,太大的模型跑不起来,选择的是1.5b参数的模型,复制后面的ollama run deepseek-r1:1.5b,然后再命令行中粘贴这行指令,然后回车,即可下载该模型
    在这里插入图片描述
    5、下载完成后就可以在命令行窗口中输入问题来与deepseek进行交互了。

6、打开IDEA,点击NewProject,创建新工程,在新工程窗口中选择SpringBoot工程,项目名称填写ai-chart-robot,选择项目存放位置,语言选择Java,类型选择Maven,JDK版本选择17,其他选择默认,点击Next
在这里插入图片描述
7、在依赖中勾选Web—Spring Web;AI–Ollama;完成后点击Create
在这里插入图片描述
8、修改配置文件后缀为yaml
在这里插入图片描述
9、配置模型信息,在application.yaml中配置ollama相关信息

spring:
  application:
    name: ai-chart-robot
  ai:
    ollama:
      base-url: http://localhost:11434
      chat:
        model: deepseek-r1:1.5b

10、在com.ray.ai包下新建config包,并新建CommonConfiguration,作为配置类,在该类上添加@Configuration注解,并新建一个ChatClient,

@Configuration
public class CommonConfiguration {
    @Bean
    public ChatClient chatClient(OllamaChatModel model){
        return ChatClient
                .builder(model)
                .build();
    }
}

11、引入lombok依赖
在pom.xml文件中引入lombok依赖

<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.34</version>
</dependency>

12、在com.ray.ai包下新建controller包,并新建ChatController控制器类

13、在ChatController控制器类上添加RestController注解,添加@RequestMapping注解和equiredArgsConstructor注解;引入ChatClient,并新建一个Chat接口,代码如下

@RequiredArgsConstructor
@RestController
@RequestMapping("/ai")
public class ChatController {
    private final ChatClient chatClient;

    @RequestMapping("/chat")
    public String chat(String prompt){
        return chatClient.prompt()
                .user(prompt) 
                .call()
                .content();
    }
}

14、运行项目,在浏览器中调用localhost://8080/ai/chat?prmpot=你是谁,可以看到如下回答
在这里插入图片描述
15、修改为流式输出,上面的call方法是阻塞式调用,我们在新建一个接口,使用流式调用

 @RequestMapping("/chatStream")
    public Flux<String> chatStream(String prompt){
        return chatClient.prompt()
                .user(prompt) 
                .stream()
                .content(); 
    }

16、重新运行代码后,在浏览器输入chatStream接口并调用,发现显示的是乱码,这是因为流式输出默认采样的是Event事件流的方式,默认情况下,Event事件流是没有编码的
在这里插入图片描述
17、在@RequestMapping中添加以下代码 produces = "text/html;charset=utf-8",完整代码如下

@RequestMapping(value = "/chatStream", produces = "text/html;charset=utf-8")
    public Flux<String> chatStream(String prompt){
        return chatClient.prompt()
                .user(prompt) // 用户提示词
                .stream() // 流式调用
                .content(); // 获取响应结果
    }

18、再次刷新浏览器,
在这里插入图片描述
至此,一个简单的AI聊天机器人就已经初具雏形了。
后续有时间再开发一个前端聊天界面,并实现对话记忆和历史对话功能。

http://www.dtcms.com/a/106642.html

相关文章:

  • 数据库分库分表中间件及对比
  • ensp 网络模拟器 思科华为基于VLANIF的公司网络搭建
  • 2025.4.2总结
  • Go语言GC:三色标记法工程启示|Go语言进阶(3)
  • K-means算法
  • 从零搭建微服务项目Pro(第7-1章——分布式雪花算法)
  • cmake(11):list 选项 排序 SORT,定义宏 add_definitions,cmake 里预定义的 8 个宏
  • Git 命令大全:通俗易懂的指南
  • 基于大模型预测风湿性心脏病二尖瓣病变的多维度诊疗研究报告
  • 内网隔离环境下Java实现图片预览的三大解决方案
  • 【Django开发】前后端分离django美多商城项目第15篇:商品搜索,1. Haystack介绍和安装配置【附代码文档】
  • 从 ZStack 获取物理机与云主机信息并导出 Excel 文件
  • visual studio 2022的windows驱动开发
  • C# System.Text.Json 中 JsonIgnoreCondition 使用详解
  • Linux2 CD LL hostnamectl type mkdir dudo
  • 跨系统平台实践:在内网自建kylin服务版系统yum源
  • 面基JavaEE银行金融业务逻辑层处理金融数据类型BigDecimal
  • AI提示词:好评生成器
  • 鸿蒙NEXT小游戏开发:数字华容道
  • 详解相机的内参和外参,以及内外参的标定方法
  • 背包DP总结
  • GO语言 使用protobuf
  • 【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】【代码篇】A题解题全流程(持续更新)
  • 全国产ADC 16bit 2通道1G采样 双FMC子板
  • C++多继承
  • 【抓包工具】win 10 / win 11:Charles 下载、安装、配置(快捷方式、默认端口、登录、https 证书)
  • 【git】VScode修改撤回文件总是出现.lh文件,在 ​所有 Git 项目 中全局忽略特定文件
  • MacOS 的 AI Agent 新星,本地沙盒驱动,解锁 macOS 操作新体验!
  • 地表-地下水系统交互模拟关键技术突破:SWAT-MODFLOW耦合模型构建、验证及多情景预测研究
  • 离线语音识别 ( 小语种国家都支持)可定制词组