前言
对接 AI 的方式有很多,比如;AI 官网提供的 SDK、自研 SDK 组件、one-api 服务类统一包装接口,其中自研类 SDK 已经在星球 openai 项目对接 chatglm、chatgpt 的时候进行设计,为了差异化学习到不同技术,本项目会采用 Spring AI 框架进行对接。
Spring AI 支持;OpenAI,Microsoft,Amazon,Google和Ollama,大模型的对接。其他不属于这个范围的,可以通过 one-api 配置,统一转换为 OpenAI 接口服务格式进行使用。
功能实现
引入框架
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>${spring-ai.version}</version><type>pom</type><scope>import</scope>
</dependency>
spring-ai 父pom,定义引入ai框架的适配版本。在统一父pom下,所有的spring-ai下的组件,都不需要再单独定义pom版本。
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-ollama</artifactId>
</dependency>
之后在具体使用ai调用方法的的工程模块下,引入对应的pom。如,本节我们要对接 ollama 就要引入 spring-ai-ollama
接口配置
spring:ai:ollama:base-url: http://ip.***:11434
换成你的 Ollama 所在的服务IP,云服务器就是公网IP,注意开放端口 11434
核心代码
@RestController()
@CrossOrigin("*")
@RequestMapping("/api/v1/ollama/")
public class OllamaController implements IAiService {@Resourceprivate OllamaChatClient chatClient;/*** curl http://localhost:8090/api/v1/ollama/generate?model=deepseek-r1:1.5b&message=1+1*/@RequestMapping(value = "generate", method = RequestMethod.GET)@Overridepublic ChatResponse generate(@RequestParam String model, @RequestParam String message) {return chatClient.call(new Prompt(message,OpenAiChatOptions.builder().withModel(model).build()));}/*** curl http://localhost:8090/api/v1/ollama/generate_stream?model=deepseek-r1:1.5b&message=1+1*/@RequestMapping(value = "generate_stream", method = RequestMethod.GET)public Flux<ChatResponse> generateStream(@RequestParam String model, @RequestParam String message) {return chatClient.stream(new Prompt(message,OllamaOptions.create().withModel(model)));}}
Spring AI 提供对话的接口非常简单,call 是直接应答,stream 是流式应答。流式应答通过 Flux 返回。
Project Reactor 是一个用于构建响应式应用程序的库,Flux 是 Reactor 中的一个核心组件,用于表示一个异步序列,可以发出 0 到 N 个元素,并且可以是有限的或无限的流。
测试验证
确保,Docker Ollama DeepSeek 运行正常。之后启动本地服务 SpringBoot 检查日志是否运行正常。
访问接口
可以看到接口的反馈结果。这些结果可以用于后续提供给前端页面做流式展示。
好了 至此 《DeepSeek RAG 增强检索知识库系统》Ollama DeepSeek 流式应答接口实现之二 点点关注不迷路 老铁们!!!!!