您的位置:首页 > 汽车 > 新车 > 讯飞星火通过API接入

讯飞星火通过API接入

2024/7/3 20:40:27 来源:https://blog.csdn.net/hellwindy/article/details/139966563  浏览:    关键词:讯飞星火通过API接入

国内的GPT王者讯飞星火

如果你想暴富

可以关注一下科大讯飞

看看它的股票走势

每次讯飞星火发布新版本的时候

都掀起了一个小涨停

科大讯飞作为国内领先的人工智能企业

常年以来积累的优势

包括智能客服、语音识别、机器翻译等

多场景的大量应用

铺垫了海量的训练数据

除了传统的新闻、小说、论文

更多的是在学习和理解人类语言方面

有着巨大的优势

星火大模型2.0

我们前面也介绍过一些讯飞星火的使用

基本上是基于1.5的大模型

在对话、翻译、写作、编程等方面

做到了国内最强

星火的2.0在星火的1.5的基础上

做了更多的提升

比如语音识别、图像识别、自然语言处理等方面

并且开放了API

对程序员来说

可以为自己的项目增加一个新的亮点


传统行业讲究的是“短板理论”

即一个木桶要想不漏水

取决的是最短的哪个木板

即补足自己的弱点

而在IT人的眼里

只有“长板理论”才是极致

唯有发挥自己的专长

做深做强,才有竞争优势

就像鹅厂的社交,天下第一

而自然语言和AI这块

讯飞的优势遥遥领先

星火API

目前已经开放测试

注册用户可以获得百万token的免费额度

我注册完成后

就送了100万的1.5版

以及200万的2.0版

试用绰绰有余

但大家注意,每次请求上下文的文字越多

消耗的量越大

一般正常对话一次就会消耗几百个token

当然也可以购买token

现在的价格1亿token才2800元

实属便宜了

API接入

注册这块就不讲了

进入控制台

先创建一个应用

建好之后就会生成对应的APPID,Secret,Key等信息

这个我们写代码时要用

编码需要一定的WebSocket基础

因为对话有来有往

是一个双向的,带有会话上下文的交互


当然,也支持SDK方式接入

包括Android、IOS、Windows、Linux等

都可以下载SDK包和文档来处理

我们为了演示

采用最简单的ws方式

示范代码

主要分两步

第一步,鉴权

就是将我的应用ID等信息传过去

public static final String hostUrl = "https://spark-api.xf-yun.com/v1.1/chat"; // 1.5的地址,2.0版本,把版本号改成 v2.1
public static final String appid = "1111111"; // 替换成你的appid
public static final String apiSecret = "ZmFlYaskdjfhakdfkZjRm"; // 替换成你的appsecret
public static final String apiKey = "fd4slkdjfhalkwqieurlkjew92baa"; // 替换成你的appkeypublic static void main(String[] args) throws Exception {// 构建鉴权urlString authUrl = getAuthUrl(hostUrl, apiKey, apiSecret);OkHttpClient client = new OkHttpClient.Builder().build();String url = authUrl.toString().replace("http://", "ws://").replace("https://", "wss://");Request request = new Request.Builder().url(url).build();for (int i = 0; i < 1; i++) {WebSocket webSocket = client.newWebSocket(request, new XinghuoChat(i + "", false));}
}public static String getAuthUrl(String hostUrl, String apiKey, String apiSecret) throws Exception {URL url = new URL(hostUrl);SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.US);format.setTimeZone(TimeZone.getTimeZone("GMT"));String date = format.format(new Date());String preStr = "host: " + url.getHost() + "\n" + "date: " + date + "\n" + "GET " + url.getPath() + " HTTP/1.1";Mac mac = Mac.getInstance("hmacsha256");SecretKeySpec spec = new SecretKeySpec(apiSecret.getBytes(StandardCharsets.UTF_8), "hmacsha256");mac.init(spec);byte[] hexDigits = mac.doFinal(preStr.getBytes(StandardCharsets.UTF_8));String sha = Base64.getEncoder().encodeToString(hexDigits);String authorization = String.format("api_key=\"%s\", algorithm=\"%s\", headers=\"%s\", signature=\"%s\"", apiKey, "hmac-sha256", "host date request-line", sha);// 拼接地址HttpUrl httpUrl = Objects.requireNonNull(HttpUrl.parse("https://" + url.getHost() + url.getPath())).newBuilder().//addQueryParameter("authorization", Base64.getEncoder().encodeToString(authorization.getBytes(StandardCharsets.UTF_8))).//addQueryParameter("date", date).//addQueryParameter("host", url.getHost()).//build();return httpUrl.toString();
}

以上步骤构造了鉴权地址

并向 XinghuoChat 发起对话

这是我们自建的一个类

用于发送信息,并获取AI回复的文字

样例如下:

public class XinghuoChat extends WebSocketListener {public static final String myQuestion = "软件需求文档的格式是怎样的"; // 这是我要问的问题public static final Gson gson = new Gson();private String userId;private Boolean wsCloseFlag;public XinghuoChat(String userId, Boolean wsCloseFlag) {this.userId = userId;this.wsCloseFlag = wsCloseFlag;}@Overridepublic void onOpen(WebSocket webSocket, Response response) {super.onOpen(webSocket, response);MyThread myThread = new MyThread(webSocket);myThread.start();}@Overridepublic void onMessage(WebSocket webSocket, String text) {JsonParse myJsonParse = gson.fromJson(text, JsonParse.class);if (myJsonParse.header.code != 0) { webSocket.close(1000, "");}List<Text> textList = myJsonParse.payload.choices.text;for (Text temp : textList) {System.out.print(temp.content);}if (myJsonParse.header.status == 2) {wsCloseFlag = true;}}@Overridepublic void onFailure(WebSocket webSocket, Throwable t, Response response) {super.onFailure(webSocket, t, response);try {if (null != response) {int code = response.code();System.out.println("错误码 code:" + code);System.out.println("错误信息 body:" + response.body().string());if (101 != code) {System.out.println("connection failed");System.exit(0);}}} catch (IOException e) {e.printStackTrace();}}
}

其中使用了一个线程类 MyThread 进行交互

它解决提问发送的功能

可以单独提问请求,也可以加上上下文的对话

public class MyThread extends Thread {private WebSocket webSocket;public MyThread(WebSocket webSocket) {this.webSocket = webSocket;}public void run() {String requestJson; // 请求参数json串try {requestJson = "{\n" +"  \"header\": {\n" +"    \"app_id\": \"" + appid + "\",\n" +"    \"uid\": \"" + UUID.randomUUID().toString().substring(0, 10) + "\"\n" +"  },\n" +"  \"parameter\": {\n" +"    \"chat\": {\n" +"      \"domain\": \"general\",\n" +"      \"temperature\": 0.5,\n" +"      \"max_tokens\": 1024\n" +"    }\n" +"  },\n" +"  \"payload\": {\n" +"    \"message\": {\n" +"      \"text\": [\n" +
//                        "        {\n" +
//                        "          \"role\": \"user\",\n" +
//                        "          \"content\": \"你是中国人吗\"\n" +
//                        "        },\n" +
//                        "        {\n" +
//                        "          \"role\": \"assistant\",\n" +
//                        "          \"content\": \"是的\"\n" +
//                        "        },\n" +"        {\n" +"          \"role\": \"user\",\n" +"          \"content\": \"" + myQuestion + "\"\n" +"        }\n" +"      ]\n" +"    }\n" +"  }\n" +"}";webSocket.send(requestJson);while (true) {Thread.sleep(200);if (wsCloseFlag) {break;}}webSocket.close(1000, "");} catch (Exception e) {e.printStackTrace();}}
}

如果只是发送一次对话

只需要里面的 payload.message 有最后一个问题即可

也可以加上前面的对话内容

注意,如果发起了多次交互

则每个来回的问答都要加进去

才会得到连续的交互效果

即上文中注释掉的那段代码

但最大长度不得超过8192 tokens

这样就完成了一个最简单的API交互

其他功能

除了对话交互API

星火还提供了图片生成、图像理解等

其中图像理解挺有意思

可以根据识别出图片

从而回答用户的问题

如果您有兴趣

也可以注册一个免费用户试一试

反正不要钱

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com