基于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聊天机器人就已经初具雏形了。
后续有时间再开发一个前端聊天界面,并实现对话记忆和历史对话功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九仞山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值