spring boot 使用 langchain4j 对接 ollama 本地化部署 deepseek-r1 实现 ai 对话功能
本文介绍如何在 Spring Boot 项目中使用 Langchain4j 对接 Ollama 本地部署的 deepseek-r1 模型,实现 AI 对话、流式传输功能。包含依赖配置、YML 配置、Controller 示例及接口调用效果。
1. Ollama deepseek 本地化部署
Ollama 支持在本地部署 deepseek-r1 模型,部署教程参考:ollama 本地化部署 deepseek r1 指南。
部署完成后,模型会对外暴露 HTTP 服务接口,供 Spring Boot 程序访问。
2. Maven 依赖配置
在 pom.xml
中添加 langchain4j-ollama-spring-boot-starter 依赖,该依赖内置了 OllamaChatModel 自动装配:
复制
展开
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-ollama-spring-boot-starter</artifactId>
<version>1.5.0-beta11</version>
</dependency>
3. Spring Boot 配置
在 application.yml
中配置 Ollama 服务地址和模型名称:
复制
展开
langchain4j:
ollama:
chat-model:
base-url: http://localhost:11434
model-name: deepseek-r1:32b
streaming-chat-model:
base-url: http://localhost:11434
model-name: deepseek-r1:32b
base-url
:Ollama 本地服务地址model-name
:要使用的本地模型名称
4. Controller 实现
通过 OllamaChatModel
调用模型接口,实现 AI 对话功能:
复制
展开
import dev.langchain4j.data.message.TextContent;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.model.chat.request.ChatRequest;
import dev.langchain4j.model.chat.response.ChatResponse;
import dev.langchain4j.model.chat.response.StreamingChatResponseHandler;
import dev.langchain4j.model.ollama.OllamaChatModel;
import dev.langchain4j.model.ollama.OllamaStreamingChatModel;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;
@RestController
@RequestMapping("/model/ollama")
@Slf4j
public class OllamaController {
@Resource
private OllamaChatModel ollamaChatModel;
@Resource
OllamaStreamingChatModel ollamaStreamingChatModel;
@GetMapping("/chat")
public String chat(@RequestParam(value = "message", defaultValue = "你好") String message) {
ChatRequest request = ChatRequest.builder().messages(UserMessage.userMessage(TextContent.from(message))).build();
ChatResponse response = ollamaChatModel.chat(request);
return response.aiMessage().text();
}
@GetMapping("/chat-stream")
public Flux<String> chatStream(@RequestParam(value = "message", defaultValue = "你好") String message, HttpServletResponse response) {
response.setCharacterEncoding("UTF-8");
return Flux.create(sink -> {
ollamaStreamingChatModel.chat(message, new StreamingChatResponseHandler() {
@Override
public void onPartialResponse(String partialResponse) {
log.info("部分对话响应:{}", partialResponse);
sink.next(partialResponse);
}
@Override
public void onCompleteResponse(ChatResponse completeResponse) {
log.info("对话完成结束:{}", completeResponse);
sink.complete();
}
@Override
public void onError(Throwable error) {
sink.error(error);
}
});
});
}
}
- 类路径
/model/ollama
- 方法路径
/chat
/chat-stream
- 最终访问路径:
http://localhost:8080/model/ollama/chat?message=你好
5. 接口调用效果
调用接口后,返回模型生成的文本内容,效果如下:
✅ 总结
通过 Langchain4j + Ollama 本地模型 deepseek-r1,可以快速实现一个 Spring Boot AI 对话接口:
- 无需联网调用远程 API,完全本地化部署
- 支持多种对话场景,灵活扩展
- 集成简单,依赖少,易于快速开发
作者:https://blog.xn--rpv331d.com/望舒
链接:https://blog.xn--rpv331d.com/望舒/blog/118
转载注意保留文章出处...
No data