智能BI项目-调用硅基流动的DeepSeek

今天开始快速突击一下智能BI项目,为了找工作还真的是一刻都不能休息呢😂。

硅基流动提供了API接口来给我们调用里面的模型,这个是参考文档,通过官方文档的介绍,可以看到调用的api是/chat/completions,是一个post请求:

image.png

其中请求参数中modelmessages这两个参数是必须的,model参数很明显是填我们想要调用的模型,messages参数如图所示有role和content参数:

image.png

其中role表示消息的角色,通常有以下几种:system:系统角色,用于设置 AI 的行为或背景。user:用户角色,表示用户输入的内容。assistant:助手角色,表示 AI 的回复。content表示消息的具体内容。messages的例子:[{"role": "user","content": "xxx"}]。为了能让ds按照我们想要的格式返回结果,也需要给system角色提供prompt。接口的返回值像最上面那副图那样,我们要的结果在choices的message对象的content值中。

基于文档的例子写了个DeepseekAiManager来执行api的调用:

java
复制代码
@Service public class DeepseekAiManager { @Value("${siliconflow.apiKey}") private String apiKey; private final static String API_URL = "https://api.siliconflow.cn/v1/chat/completions"; public String doChat(String message) { JSONObject requestBody = new JSONObject(); requestBody.set("model", CommonConstant.DEEPSEEK_MODEL); JSONArray messages = new JSONArray(); String systemPrompt = "\"你是一个数据分析师和前端开发专家,接下来我会按照以下固定格式给你提供内容:\\n\" +\n" + " \"分析需求:\\n\" +\n" + " \"{数据分析的需求或者目标}\\n\" +\n" + " \"原始数据:\\n\" +\n" + " \"{csv格式的原始数据,用,作为分隔符}\\n\" +\n" + " \"请根据这两部分内容,按照以下指定格式生成内容(此外不要输出任何多余的开头、结尾、注释)\\n\" +\n" + " \"【【【【【\\n\" +\n" + " \"{前端 Echarts V5 的 option 配置对象的json代码,合理地将数据进行可视化,不要生成任何多余的内容,比如注释}\\n\" +\n" + " \"【【【【【\\n\" +\n" + " \"{明确的数据分析结论、越详细越好,不要生成多余的注释}\""; messages.add(new JSONObject().set("role", "system").set("content", systemPrompt)); messages.add(new JSONObject().set("role", "user").set("content", message)); requestBody.set("messages",messages); // requestBody.set("temperature", 0.7); // requestBody.set("top_p", 0.9); HttpResponse response = HttpRequest.post(API_URL) .header("Authorization", "Bearer " + apiKey) .header("Content-Type", "application/json") .body(requestBody.toString()) .execute(); if (response.getStatus() != 200){ throw new BusinessException(ErrorCode.SYSTEM_ERROR, response.getStatus()+ " AI 响应错误,"+response.body()); } JSONObject responseJson = JSONUtil.parseObj(response.body()); JSONArray choices = responseJson.getJSONArray("choices"); if (choices.isEmpty()) { throw new BusinessException(ErrorCode.OPERATION_ERROR,"API返回结果为空"); } // 提取生成的文本 return choices.getJSONObject(0) .getJSONObject("message") .getStr("content"); } }

CommonConstant.DEEPSEEK_MODEL是我定义在通用常量类里的一个常量,想要调用哪个模型直接修改常量的值即可。

但是目前有个问题,就是Deepseek的api还是不稳定,我在多次调用R1和V3模型时见了多次504、503,直到写这篇文章为止我都没能成功调用其api,一直显示5开头的状态码,后面我去用deepseek-ai/DeepSeek-R1-Distill-Llama-8B这个模型,试了好多次它也不能给我返回正确的结果,看到下图血压直接高了:

e86d2c58e1350701014152313ae32e1.png

仿佛我的prompt跟没有一样,然后我想着吧,换成qwen的对中文的理解会更好一点,于是我换成了deepseek-ai/DeepSeek-R1-Distill-Qwen-7B,好了它格式终于对了,但是它返回的json代码在echarts中是错误的,控制台给我报了Cannot use 'in' operator to search for 'x'的错误,问了gpt发现qwen的给我返回的代码中它自创了一些x和y轴没有的属性导致不能应用在图表上,到这其实我有点崩溃了已经,报着最后一丝希望我重新回去调用一下V3模型deepseek-ai/DeepSeek-V3,终于它成功的返回正确的结果了,它终于能读懂我的prompt,终于能不自创属性了:

5e3b996603de1ba4797b13cb288dc93.png

虽然成功了一次,但我觉得明天再重新试的时候可能又会不行了,感觉Deepseek的api现在还没能稳定下来(毕竟经常服务器繁忙),希望他们能加油让它稳定下来吧。

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
shark
作者分享
做了一个月的小程序,终于准备到即将交付的时候了,这段时间里可真是被微信小程序的各种限制折磨的不要不要的,突出一个为难开发者,有几次改代码改到了两点多才改完!小程序的后端技术栈和鱼皮的智能Bi项目采用了差不多的技术栈,通过注解+aop来对接口进行令牌桶限流,用rabbitmq来缓解调用Ai服务的压力,异步生成报告,对于订单采用了自定义线程池结合async+scheduled注解实现定时任务的异步执行,每分钟遍历删除库中的订单,还有些功能等真正交付后再做下总结。唉,不知道这个项目再加上智能图库项目能不能让我这种0相关工作经验的双非往届生有面试机会和找到工作呢,不想再次尝试付出与回报不成正比的滋味了😭😭
8
今天收到了甲方的第一笔付款💰,没想到毕业一年半居然能用自己专业技能接个活赚了点外快,还是有点小高兴的。 这两天的学习状态不太行,我好像总会在经历了持续一段时间的学习后会有两三天学不进的状态🤧,不知道大伙会不会有这种状态,虽然我很想克服这种状态,但心里就好像有东西堵在那影响着学不进去(不知道是不是焦虑),希望明天能恢复状态吧。 转眼到了3月份,接的活的时间也剩下半个月了,下半部分就要开发调用Ai接口的代码和微信支付(感觉好像挺麻烦?)的代码了,同时也需要开始准备看面试题了,想问下各位是怎么使用面试鸭来高效刷题的呢,这两天(可能跟我的状态有关)看面试题总是有种似记住但又没全记住的感觉,上次背八股还是22年秋招的时候,对于一些知识可能还有记得一些,但由于我是0开发经验社招,不知道重点要看哪些好,希望各位大佬能给小弟一点建议🙏
4
这几天没有打卡,不是摆烂了,而是前几天有个朋友推了个活给我问我说做不做,是做一个微信小程序,并且需要调用Ai的接口,他因为工作太忙没有空接这个活,而我本来正在学习Bi项目,打算学完之后写简历刷面试题投简历,所以一开始还在犹豫,觉得自己23届毕业,虽说大学自学了几年Java,但是0相关工作经验,有点没底气,不过后来我拉到了另一个同学来帮忙,那个同学在大厂实习过,有过企业开发的经验,他也乐意加入一起做项目,于是最后便接下了这个活(主要是有钱可以拿)。由于自己是前端苦手,所以也是一边问Ai一边改页面的布局,改到今天觉得差不多了,甲方也觉得ok,后面就准备和同学一起写后端的接口了,在这几天也对着项目需求跟同学讨论了许多功能和结构上的设计,也算是一种积累经验的过程了,希望这一个月的工期内能把项目做好上线,最好是能写到简历上吧,孩子真的很想要一份工作!!这一个月干的活希望不要是白忙活,不然我真的要道心破碎了😭😭😭
7
智能Bi项目-限流优化
7
智能图库模块-协同编辑
6
下载 APP