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