SpringCloud添加ai微服务(1)
添加新的模块,然后选择maven点击创建就行。之后进行导入Maven坐标,我这里使用的是ollama链接的本地大模型,因为这是是微服务项目,所以其他依赖可以直接导入Common微服务。修改启动类:AiServiceApplication.java。
·
1.添加新模块
添加新的模块,然后选择maven点击创建就行。
之后进行导入Maven坐标,我这里使用的是ollama链接的本地大模型,因为这是是微服务项目,所以其他依赖可以直接导入Common微服务。
<dependencies>
<dependency>
<groupId>com.buka</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
</dependencies>
修改启动类:AiServiceApplication.java
package com.buka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
/**
* @ClassName AiServiceApplication
* @Description TODO
* @Author cgx
* @Date 2025/9/2 下午11:30
* @Version 1.0
**/
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class AiServiceApplication {
public static void main(String[] args) {
SpringApplication.run(AiServiceApplication.class, args);
}
}
2.连接大模型
(1)配置文件application.yml
server:
port: 9005
#spring:
# application:
# name: ai-service
# cloud:
# nacos:
# discovery:
# server-addr: 192.168.40.133:8848
spring:
ai:
ollama:
base-url: http://localhost:11434 # Ollama默认API地址
default-model: deepseek-r1:8b # 默认使用的模型
由于我们这里目前阶段是只进行了连接大模型,所以可以只添加ai微服务的端口以及ollama的配置。当然要想写这样配置还需要有一个OllamaProperties.java的文件。(如果在创建新的项目时可以选择SpringAI框架,就不需要这个文件了)
package com.buka.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @ClassName OllamaProperties
* @Description TODO
* @Author cgx
* @Date 2025/9/2 上午1:44
* @Version 1.0
**/
@Component
@ConfigurationProperties(prefix = "spring.ai.ollama")
public class OllamaProperties {
private String baseUrl;
private String defaultModel;
public String getBaseUrl() {
return baseUrl;
}
public void setBaseUrl(String baseUrl) {
this.baseUrl = baseUrl;
}
public String getDefaultModel() {
return defaultModel;
}
public void setDefaultModel(String defaultModel) {
this.defaultModel = defaultModel;
}
}
(2)定义Ollama专用的请求/响应实体
首先是请求OllamaReques.java
package com.buka.request;
import lombok.Data;
/**
* @ClassName OllamaRequest
* @Description TODO
* @Author cgx
* @Date 2025/9/2 下午2:30
* @Version 1.0
**/
@Data
public class OllamaRequest {
//模型名称
private String model;
//提示词
private String prompt;
//关闭流式返回
private boolean stream = false;
public OllamaRequest(String model, String prompt) {
this.model = model;
this.prompt = prompt;
}
}
响应OllamaResponse.java
package com.buka.response;
import lombok.Data;
/**
* @ClassName OllamaResponse
* @Description TODO
* @Author cgx
* @Date 2025/9/3 上午12:10
* @Version 1.0
**/
@Data
public class OllamaResponse {
private String model;
// 模型回答内容
private String response;
// Ollama返回的完成标识
private boolean done;
}
(3)实现Ollama调用服务
package com.buka.service;
import com.buka.request.OllamaRequest;
import com.buka.response.OllamaResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
/**
* @ClassName OllamaAiService
* @Description TODO
* @Author cgx
* @Date 2025/9/2 下午2:36
* @Version 1.0
**/
@Service
public class OllamaAiService {
private final WebClient webClient;
private final String defaultModel;
public OllamaAiService(WebClient.Builder webClientBuilder,
@Value("${spring.ai.ollama.base-url}") String baseUrl,
@Value("${spring.ai.ollama.default-model}") String defaultModel) {
this.webClient = webClientBuilder.baseUrl(baseUrl).build();
this.defaultModel = defaultModel;
}
//调用Ollama生成文本
public String generate(String prompt){
return generate(prompt,defaultModel);
}
// 用指定的模型生成文本(可以手动指定其他模型,比如你以后可能加的其他模型)
public String generate(String prompt, String model) {
// 1. 构建请求参数:指定模型(比如deepseekr1:8b)和你的问题(prompt)
OllamaRequest request = new OllamaRequest(model, prompt);
// 2. 发送POST请求到Ollama的API接口(/api/generate)
return webClient.post()
// Ollama生成文本的固定接口路径
.uri("/api/generate")
// 发送上面构建的请求参数
.bodyValue(request)
.retrieve() // 执行请求并获取响应
// 将响应转换成Java对象(OllamaResponse)
.bodyToMono(OllamaResponse.class)
// 从响应中提取模型的回答内容
.map(OllamaResponse::getResponse)
.block(); // 同步等待结果(会阻塞当前线程,直到模型返回结果)
}
}
(4)Controller层:
package com.buka.controller;
import com.buka.service.OllamaAiService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @ClassName OllamaAiController
* @Description TODO
* @Author cgx
* @Date 2025/9/2 下午3:01
* @Version 1.0
**/
@RestController
@RequestMapping("/ai/ollama")
public class OllamaAiController {
@Autowired
private OllamaAiService ollamaAiService;
// 同步调用接口(指定提示词,使用默认模型)
@PostMapping("/generate")
public String generate(@RequestBody String prompt) {
return ollamaAiService.generate(prompt);
}
// 同步调用接口(可指定模型)
@PostMapping("/generate/{model}")
public String generateWithModel(@PathVariable String model,
@RequestBody String prompt) {
return ollamaAiService.generate(prompt, model);
}
}
3.进行测试
这里要说明,要先下载Ollama,直接在官网就能下载,然后下载想要的模型。
然后测试是使用的postman。
在Controller里我们看到了这是一个post请求,参数就是String类型,写入url就用body里面的test进行测试即可。可以看到下面已经是ai的回答了。
最后这是ai微服务的整个结构
更多推荐
所有评论(0)