SpringAI整合DeepSeek生成图表
利用Spring-ai-openai集成DeepSeek
①、在DeepSeek开放平台创建API KEY
②、创建springboot项目,引入spring-ai-openai依赖,创建配置文件,配置deepseek的url和api key
③、具体的实现业务应用
@RestController
public class ChatDeepSeekController{@Autowiredprivate OpenAiChatModel chatModel;@GetMapping("/ai/test")public String generate(@RequestParam(value="message",defaultValue="hello")String message){String response = this.chatModel.call(message);System.out.println("response:" + response);return response;}
}
利用spring-ai-ollama访问本地化部署DeepSeek
①、利用DeepSeek本地化部署
②、通过ollama拉取DeepSeek模型
CMD窗口执行复制上面的命令
③、创建springboot工程引入依赖
④、业务应用
@RestController
public class ChatDeepSeekController{@Autowiredprivate OllamaChatModel ollamaChatModel;@GetMapping("/ai/test")public String generate(@RequestParam(value="message",defaultValue="hello")String message){String response = this.ollamaChatModel.call(message);System.out.println("response:" + response);return response;}
}
项目中应用实现数据报表
ECharts图表方式实现报表
①、前端使用工具ECharts
vue项目中安装ECharts:npm install echarts --save
vue组件中使用ECharts
<template><div ref="chart" style="width:600px;height:400px;"></div>
</template><script>import * as echarts from 'echarts';export default {data(){return {searchObj:{selectYear:''},btnDisabled:false,chart:null,title:'',xData:[],yData:[]}},created(){this.showChart()},method:{//初始化图表showChart(){getUserCount().then(response=>{this.yData = response.data.countListthis.xData = response.data.dateListthis.setChartData()})},setChartData(){var myChart = echarts.init(this.$refs.chart)var option = {title:{text:this.title + ''},tooltip:{}legend:{data:[this.title]},xAxis:{data:this.xData},yAxis:{minInterval:1},series:[{name:this.title,type:'bar',data:this.yData}]}//使用刚指定的配置项和数据显示图表myChart.setOption(option);},}}
</script>
②、后端创建查询统计数据的接口,按照ECharts要求格式返回
share-user模块
@GetMapping("/getUserCount")
public R getUserCount(){Map<String,Object> map = userInfoService.getUserCount();return R.ok();
}
@Override
public Map<String,Object> getUserCount(){Lit<UerCountVo> list = baseMapper.selectUserCount();Map<String,Object> map = new HashMap<>();//创建两个list集合,一个对应所有的日期,一个对应所有的数据//java中list -- json数组[]List<String> dateList = list.stream().map(UserCountVo::getRegisterDate).collect(Collectors.toList());List<Integer> countList = list.stream().map(UserCountVo::getCount).collect(Collectors.toList());map.put("dateList",dateList);map.put("countList",countList);return map;
}
SpringAI集成DeepSeek实现数据报表
- AI生成sql语句
①、创建AI工程
依赖spring-ai-openai-spring-boot-starter
②、shart-order模块中
根据传递的sql查询数据库,得到报表
@PostMapping("/getOrderCount")
public R getOrderCount(@RequestBody OrderSqlVo orderSqlVo){Map<String,Object> map = orderInfoService.getOrderCount(orderSqlVo.getSql());return R.ok(map);
}
@Override
public Map<String,Object> getOrderCount(String sql){List<Map<String,Object>> list = baseMapper.getOrderCount(sql);Map<String,Object> dataMap = new HashMap<>();List<Object> dataList = new ArrayList<>();List<Object> countList = new ArrayList<>();for(Map<String,Object> map:list){dataList.add(map.get("order_date"));countList.add(map.get("order_count"));}dataMap.put("dateList",dateList);dataMap.put("countList",countList);return dataMap;
}
<select id="getOrderCount" resultType="hashmap">${sql}
</select>
③、远程定义模块(略)
④、shart-statics模块进行调用
@Configuration
public class RestTmplateConfig{@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}
}
@Autowired
private RestTemplate restTemplate;@Autowired
private RemoteOrerInfoService remoteOrderInfoService;@GetMapping("/orderData")
public AjaxResult getOrderData(@RequestParam(value="message",defaultValue="hello") String message){//通过restTemplate调用aiString sql = restTemplate.getForObject("http://localhost:8899/ai/generateSql?message=" + message,String.class);//远程调用OrderSqlVo orderSqlVo = new OrderSqlVo();orderSqlVo.setSql(sql);R<Map<String,Object>> result = remoteOrderInfoServce.getOrderCount(orderSqlVo);Map<String,Object> map = result.getData();return success(map);
}
整合前端
export function getOrderCount(message){return request({url:'/sta/orderData?message=' + message,method:'get'})
}