aurora博客接入讯飞星火大模型

aurora博客接入讯飞星火大模型

aurora博客接入讯飞星火大模型

接口申请

aurora博客是一个web项目,所以申请免费的web接口https://xinghuo.xfyun.cn/sparkapi?scr=price,这里选择免费的接口即可。
在这里插入图片描述

按照网站上的提示需要先在控制台创建应用,将该套餐包绑定在这个应用上即可。

接口使用(官方示例代码)

使用Java请求接口使用的是websocket,不是httprequest,这里简单科大讯飞 星火 教程说一下两者的区别HTTP1.1中,Connection默认为Keep-alive参数,Keep-alive的确可以实现长连接,但是这个长连接是有问题的,本质上依然是客户端主动发起-服务端应答的模式,是没法做到服务端主动发送通知给客户端的。也就是说,在一个HTTP连接中,可以发送多个Request,接收多个Response。但是一个request只能有一个response。而且这个response也是被动的,不能主动发起。开启了Keep-alive,可以看出依然是一问一答的模式,只是省略了每次的关闭和打开操作。WebSocket是可以互相主动发起的。相对于传统 HTTP 每次请求-应答都需要客户端与服务端建立连接的模式,WebSocket 是类似 TCP 长连接的通讯模式,一旦 WebSocket 连接建立后,后续数据都以帧序列的形式传输。在客户端断开 WebSocket 连接或 Server 端断掉连接前,不需要客户端和服务端重新发起连接请求。在具体的实现中是继承WebSocketListener类,进行websocket的建立,发送信息,接受信息的。具体的步骤大概可以分为构造鉴权url、建立连接、发送问题、接受答案、关闭连接 这五步。

1 构造鉴权Url

在自己控制台创建的应用中得到appid,APIKey, APISecret。鉴权的参数如下:

参数 类型 必须 说明 示例 host string 是 请求的主机 aichat.xf-yun.com(使用时需替换为实际使用的接口地址) date string 是 当前时间戳,采用RFC1123格式,时间偏差需控制在300s内 Fri, 05 May 2023 10:43:39 GMT authorization string 是 base64编码的签名信息 参考下方生成方式

把具体生成鉴权Url的Java代码贴出


2 建立连接

使用OkHttpClient来建立websocket连接,首先在maven中添加依赖


然后利用生成的鉴权Url创建websocket连接


3. 发送问题

官方示例中给出的示例是通过控制台的输入得到用户输入的问题


发送问题的时机在于和大模型建立了Websocket连接之后,onOpen监听到websocket已经建立好就会新开一个线程发送问题.


MyThread继承了Thread,其run函数的主要作用是按照接口文档中的要求构造请求参数然后发送


可以看到当构造好请求参数之后利用webSocket.send(requestJson.toString());发送给大模型,然后进入循环中等待,当大模型传回来所有答案之后关闭websocket连接。

4. 接受答案 & 关闭连接

值得一提的是星火模型通过websocket返回答案是流式返回的,流式返回是一种将数据以流的形式传输到客户端的机制,与传统的一次性请求-响应模式不同。流式返回使我们能够在模型生成文本的同时逐步将结果发送给客户端,实现实时的交互体验。在客户端再一次的问题请求当中能够收到多个返回,需要将多次返回的结果进行拼接显示。一次返回的结果格式如下


按照这种格式可以得到回答的状态信息和当前会话的位置。

onMessage函数也是websocketListener的一个监听函数,会单独开一个线程运行onMessage,当监听到星火模型返回信息给客户端时就会运行。onMessage的主要作用是接收到返回信息后按照格式截取到答案,并拼接在一起。


项目实战
1. 添加依赖

按照上门所说的加入websocket、okhttp和gson相关依赖。


2. 添加Model

按照星火模型返回数据的格式设置相应的模型来接受数据


3.添加配置和工具类

将需要到的appId hostUrl等固定参数放入到常数类中,方便以后使用


然后将生成鉴权url函数和构造请求头函数提取出来放入到gptutil工具类中


编写继承了WebSocketListener的gpt监听类,监听websocket连接,当建立连接之后发送问题,收到答案后拼接答案并且当检测到这是最后一个答案时关闭连接。


4. 添加controller接口

添加访问接口,并设置请求限制,防止短时间内多次请求gpt回答


5. 添加service处理

在说service处理逻辑之前先简单说明要实现一下前端询问gpt以及gpt回答的效果,效果如下。用户在评论区编写问题,然后点击ask gpt按钮,后端收到请求之后提取出问题,先将该问题作为一层评论存放到数据库中,再与星火模型建立连接发送信息,得到答案之后将该答案作为这个问题回复存放到数据库中,然后返回前端成功标志,前端重新要求后端返回评论区,即可达到效果。

在这里插入图片描述

根据上面的逻辑可以实现service的接口为


6. 前端处理

在添加评论的组件CommentForm中设置请求按钮和接口

添加请求按钮


判断当前按钮是哪一个,如果是gpt就执行以下逻辑,先让按钮禁用防止多次请求,然后发送请求给后端,得到信息之后再把按钮恢复。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/280199.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月14日 下午2:10
下一篇 2026年3月14日 下午2:10


相关推荐

关注全栈程序员社区公众号