基于Spring AI alibaba组件AI问答功能开发示例

[复制链接]
发表于 2025-12-22 15:48:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
基于Spring AI alibaba组件AI问答功能开发示例
功能效果图:

http://localhost:9999/ai/test
http://localhost:9999/ai/chat?input=ai
设置 application.yaml 指定 API-KEY(可通过访问阿里云百炼模子服务平台获取,有免费额度可用。)
阿里云百炼
阿里云百炼模子服务平台
https://ai.aliyun.com/
架构版本
JDK17
SpringBoot3.3.3
Spring-AI 1.0.0-M3
Spring-AI-Alibaba1.0.0-M3.1
vue3
  1. 架构版本JDK17
  2. SpringBoot3.3.3
  3. Spring-AI 1.0.0-M3
  4. Spring-AI-Alibaba1.0.0-M3.1
  5. vue3
复制代码
aiApplication.java入口类
  1. package com.cwgis;
  2. import com.cwgis.pg.function.MockOrderService;
  3. import com.cwgis.pg.function.Response;
  4. import org.springframework.boot.SpringApplication;
  5. import org.springframework.boot.autoconfigure.SpringBootApplication;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.context.annotation.Description;
  8. import java.util.function.Function;
  9. /**
  10. * Hello world!
  11. */
  12. @SpringBootApplication
  13. public class aiApplication {
  14.    
  15.    
  16.     public static void main(String[] args) {
  17.    
  18.    
  19.         SpringApplication.run(aiApplication.class, args);
  20.         System.out.println("===============");
  21.         System.out.println("ai服务正在运行中!");
  22.         System.out.println("===============");
  23.     }
  24.     @Bean
  25.     @Description("根据用户编号和订单编号查询订单信息")
  26.     public Function<MockOrderService.Request, Response> getOrderFunction(
  27.             MockOrderService mockOrderService) {
  28.    
  29.    
  30.         return mockOrderService::getOrder;
  31.     }
  32. }
复制代码
ChatController.java问答服务类
  1. package com.cwgis;
  2. import com.cwgis.pg.core.AjaxResult;
  3. import com.cwgis.pg.function.MJDLTBService;
  4. import com.cwgis.pg.function.MockWeatherService;
  5. import org.springframework.ai.chat.client.ChatClient;
  6. import org.springframework.web.bind.annotation.GetMapping;
  7. import org.springframework.web.bind.annotation.PostMapping;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.springframework.web.bind.annotation.RestController;
  10. import reactor.core.publisher.Flux;
  11. import java.util.Objects;
  12. @RestController
  13. @RequestMapping("/ai")
  14. public class ChatController {
  15.    
  16.    
  17.     private final ChatClient chatClient;
  18.     public ChatController(ChatClient.Builder builder) {
  19.    
  20.    
  21.         this.chatClient = builder.build();
  22.     }
  23.     @GetMapping("/test")
  24.     public AjaxResult test() {
  25.    
  26.    
  27.         String r= this.chatClient.prompt().user("测试").call().content();
  28.         return AjaxResult.success(r);
  29.     }
  30.     //自动加载自定义function函数
  31.     @PostMapping("/chat")
  32.     public AjaxResult chat(String input) {
  33.    
  34.    
  35.         String r= this.chatClient.prompt()
  36.                 .function("getWeather", "根据城市查询天气", new MockWeatherService())
  37.                 .functions("getOrderFunction")     //获取aiApplication类中注册的Bean函数
  38.                 .function("MJDLTBService","根据城市和地类名称查询地类图斑面积",new MJDLTBService())
  39.                 .user(input).call().content();
  40.         return AjaxResult.success(r);
  41.     }
  42.     @PostMapping("/stream")
  43.     public AjaxResult stream(String input) {
  44.    
  45.    
  46.         Flux<String> content = this.chatClient.prompt().user(input).stream().content();
  47.         String r= Objects.requireNonNull(content.collectList().block()).stream().reduce((a, b) -> a + b).get();
  48.         return AjaxResult.success(r);
  49.     }
  50.     //函数调用
  51.     @PostMapping("/weather-service")
  52.     public AjaxResult weatherService(String subject) {
  53.    
  54.    
  55.         String r= chatClient.prompt()
  56.                 .function("getWeather", "根据城市查询天气", new MockWeatherService())
  57.                 .user(subject)
  58.                 .call()
  59.                 .content();
  60.         return AjaxResult.success(r);
  61.     }
  62.     @PostMapping("/order-detail")
  63.     public AjaxResult orderDetail() {
  64.    
  65.    
  66.         String r= chatClient.prompt()
  67.                 .functions("getOrderFunction")     //获取aiApplication类中注册的Bean函数
  68.                 .user("帮我查询一下订单, 用户编号为1001, 订单编号为2001")
  69.                 .call()
  70.                 .content();
  71.         return AjaxResult.success(r);
  72.     }
  73.     //
  74. }
复制代码
MJDLTBService.java自界说服务函数
  1. package com.cwgis.pg.function;
  2. import com.fasterxml.jackson.annotation.JsonClassDescription;
  3. import com.fasterxml.jackson.annotation
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表