讯飞星火通过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

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

其中图像理解挺有意思

可以根据识别出图片

从而回答用户的问题

如果您有兴趣

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

反正不要钱

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/860716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【分布式】Pytorch在多GPU环境的分布式训练中常见问题汇总

文章目录 第一部分:分布式训练的基本概念1. 分布式训练简介2. 关键概念第二部分:环境设置1. 安装和配置2. 初始化进程组第三部分:模型构建与封装1. 构建模型2. 注意事项第四部分:数据处理1. DataLoader2. 数据分割第五部分:训练过程第六部分:调试和优化1. 调试技巧2. 性能…

PostgreSQL 安全性与权限管理(八)

1. 用户和角色管理 1.1 创建角色 在 PostgreSQL 中&#xff0c;角色可以是用户或组的抽象概念&#xff0c;用于管理数据库的访问权限。 1.1.1 创建角色 CREATE ROLE role_name; 1.1.2 赋予角色权限 GRANT permission_type ON object TO role_name; 1.2 用户管理 用户是…

React 19 新特性集合

前言&#xff1a;https://juejin.cn/post/7337207433868197915 新 React 版本信息 伴随 React v19 Beta 的发布&#xff0c;React v18.3 也一并发布。 React v18.3相比最后一个 React v18 的版本 v18.2 &#xff0c;v18.3 添加了一些警告提示&#xff0c;便于尽早发现问题&a…

PostgreSQL 分区表与并行查询(十)

1. 分区表概述 1.1 什么是分区表 分区表是将大表分割成更小、更可管理的部分的技术。每个分区表都可以单独进行索引和查询&#xff0c;从而提高查询性能和管理效率。 1.2 分区策略 1.2.1 基于范围的分区 按照时间范围或者数值范围进行分区&#xff0c;如按月或按地区。 C…

利用百数应用优化制造细节,提升生产效率的技术实践

制造管理是确保企业高效、高质生产的核心环节&#xff0c;对于提高企业的运营效率、质量控制、成本控制、交货期保障、资源优化、创新能力以及风险管理等方面都具有重要意义&#xff0c;它能帮助企业在激烈的市场竞争中保持领先地位&#xff0c;同时实现资源的有效利用和风险的…

CSS|02 基本选择器

选择器 什么是选择器 选择器是指通过一定的语法规则选取到对应的HTML标记&#xff0c;然后给这个对应的HTML标记设置样式。 选择器分为四大类&#xff1a;基本选择器、复合选择器、 伪类选择器、属性选择器基本选择器通用选择器&#xff1a;将匹配HTML所有标签。不建议使用。…

顺序栈与链式栈

目录 1. 栈 1.1 栈的概念 2. 栈的实现 3. 顺序栈的实现 3.1 顺序栈的声明 3.2 顺序栈的初始化 3.3 顺序栈的入栈 3.4 顺序栈的出栈 3.5 顺序栈获取栈顶元素 3.6 顺序栈获取栈内有效数据个数 3.7 顺序栈判断栈是否为空 3.8 顺序栈打印栈内元素 3.9 顺序栈销毁栈 3…

[数据集][目标检测]鸡蛋缺陷检测数据集VOC+YOLO格式2918张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2918 标注数量(xml文件个数)&#xff1a;2918 标注数量(txt文件个数)&#xff1a;2918 标注…

什么是大语言模型

前言 自从去年chatgpt横空出世以来&#xff0c;它火爆也让大语言模型这个词变的很流行&#xff0c;到底什么是大语言模型&#xff0c;今天从初学者的角度介绍一下大语言模型的基本概念、组成部分和基本工作流程等。下面的介绍中如果涉及到一些专业术语不太理解&#xff0c;也没…

携程暑期实习一面

携程暑期实习一面 4.7 50min 微核 两段实习时间节点&#xff0c;为什么想这么早去实习。讲一下测试工作的流程是什么样子的对于测试用例方法设计上你了解哪些讲一下你所提到的等价类划分法和边界值分析法的具体概念&#xff0c;还了解哪些方法一个场景&#xff0c;web端或者…

算法金 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost 算法大全

大侠幸会&#xff0c;在下全网同名「算法金」 0 基础转 AI 上岸&#xff0c;多个算法赛 Top 「日更万日&#xff0c;让更多人享受智能乐趣」 决策树是一种简单直观的机器学习算法&#xff0c;它广泛应用于分类和回归问题中。它的核心思想是将复杂的决策过程分解成一系列简单的决…

AI学习指南机器学习篇-朴素贝叶斯的优缺点

AI学习指南机器学习篇-朴素贝叶斯的优缺点 在机器学习领域&#xff0c;朴素贝叶斯算法是一种常见且有效的分类方法。它基于贝叶斯定理和特征条件独立性假设&#xff0c;广泛应用于文本分类、垃圾邮件过滤、情感分析等领域。然而&#xff0c;朴素贝叶斯算法也存在一些局限性和缺…

【推荐】Prometheus+Grafana企业级监控预警实战

新鲜出炉&#xff01;&#xff01;&#xff01;PrometheusGrafanaAlertmanager springboot 企业级监控预警实战课程&#xff0c;从0到1快速搭建企业监控预警平台&#xff0c;实现接口调用量统计&#xff0c;接口请求耗时统计…… 详情请戳 https://edu.csdn.net/course/detai…

Word页码设置,封面无页码,目录摘要阿拉伯数字I,II,III页码,正文开始123为页码

一、背景 使用Word写项目书或论文时&#xff0c;需要正确插入页码&#xff0c;比如封面无页码&#xff0c;目录摘要阿拉伯数字I&#xff0c;II&#xff0c;III为页码&#xff0c;正文开始以123为页码&#xff0c;下面介绍具体实施方法。 所用Word版本&#xff1a;2021 二、W…

HTTPS 代理的优点和缺点是什么?

HTTPS&#xff08;超文本安全传输协议&#xff09;作为一种基于HTTP加上SSL安全层的网络通信协议&#xff0c;已经成为互联网上广泛使用的IP协议之一。它在保证信息安全和隐私方面具有很多优势&#xff0c;但也存在一些缺点。接下来&#xff0c;我们就来探究一下HTTPS协议的优缺…

探索加拿大IT行业的移民优势与职业前景

随着全球化的不断深入&#xff0c;人才流动已成为推动经济发展的重要力量。加拿大以其开放的移民政策和对高技能人才的渴求&#xff0c;成为全球IT专业人士向往的目的地。 一、快速移民通道 加拿大政府高度重视IT行业人才&#xff0c;为IT专业人士提供了快速移民通道。根据最…

Qt篇——获取Windows系统上插入的串口设备的物理序号

先右键【此电脑-管理- 设备管理器-端口&#xff08;COM和LPT&#xff09;】中找到我们插入的某个设备的物理序号&#xff0c;如下图红色矩形框出的信息&#xff0c;这个就是已插入设备的物理序号&#xff08;就是插在哪个USB口的意思&#xff09;。 在Linux下我们可以通过往/et…

零撸创业项目:撸广告小游戏app开发源码

看广告小游戏APP的开发涉及到一系列复杂的步骤和考量&#xff0c;以下是主要的开发流程和需要注意的事项&#xff1a; 开发流程 市场调研&#xff1a; 深入了解当前小游戏市场和广告市场的趋势&#xff0c;以及用户的需求和喜好1。 分析竞争对手的产品&#xff0c;找出自己的…

【Android JNI】 C/C++ 标准输入输出打印至Android日志控制台

【Android】 C/C 标准输入输出打印至Android日志控制台 #if defined(__ANDROID__) start_logger("yeasound_sdk-native"); #endif#if defined(__ANDROID__) #include <stdio.h> #include <unistd.h> #include <android/log.h> #include <androi…

2024运维人该何去何从?

文章目录 概要写作背景当下运维行业现状未来的个人提升小结 概要 互联网自诞生之日起到今天&#xff0c;一直保持着高速发展的状态&#xff0c;每一次互联网的革新&#xff0c;都会带来一大批的机遇&#xff0c;而现在我会在这里讲的是2024年&#xff0c;作为一个it运维&#…