当前位置:首页|资讯|ChatGPT

如何简单调用讯飞星火大模型API

作者:子不语2015831发布时间:2023-08-31

讯飞星火大模型 API 封装

01 写在前面

自ChatGPT火了之后,国内的大模型发展如雨后春笋。

讯飞星火大模型是国内排名靠前的一款,

而且官方提供的API调用也比友商大度。

普通用户,只要审核通过,就赠送两百万tokens的免费额度。

我对官方的python调用示例进行了封装,拿到了专属渠道。

扫描下面的二维码申请,注册秒通过,无需审核等待,

免费额度高达四百万tokens,日常使用绝对够用。

注册专属渠道,更多tokens

4百万tokens包括 V1.5 版本的二百万token + V2.0 版本的二百万token。

官方文档中提到:

讯飞的token计算,1tokens 约等于 1.5 个中文汉字 或者 0.8 个英文单词。

所以4百万tokens相当于六百万字的中文文本交互。

官方提供的API调用示例只是体验为主,

没有错误码与错误信息提示,没有tokens的计算功能,

仅支持多轮会话窗口,操作起来对新手并不友好。

本项目对其 python版的调用示例 进行封装,以方便编程小白使用。

从上面的二维码申请之后,配合我提供的代码,

只要你有一点点python基础,就可以用AI极大程度提高生活、工作效率啦~

(具体教程见下方)

项目中包含  official_demo 和  spark_api 两个文件夹,

前者为官方调用示例(2023-08-24),供学习使用;

后者即为封装版。

02 详细教程

具体步骤:

  1. 通过专属渠道注册;

  2. 登录用户,进入讯飞后台;

  3. 创建一个应用;

  4. 申请讯飞AI的API测试权限;

  5. 获取认证信息;

  6. 下载代码;

  7. 将认证信息填入配置文件中;

  8. 安装程序依赖;

  9. 运行代码,完成自己需求。

2.1 注册账户

第一步:手机端扫描专属渠道注册,

或者浏览器输入下方网址:

https://xinghuo.xfyun.cn/?ch=bl_FUaZl5 

注册专属渠道,更多tokens
手机端操作


第二步:登录用户,进入讯飞后台。

讯飞后台

第三步:创建一个应用。

创建应用
填写应用信息

第四步:

返回首页,

申请讯飞星火认知大模型的API测试权限。

申请API测试
申请入口
填写申请信息

第五步:

等待官方通过API申请。

通过后,点击你创建的应用,再点击左侧的【星火认知大模型】

官方审核通过后,点击应用

第六步:

获取认证三要素。

认证三要素是需要填写进配置文件的。

配置文件中的 Spark_url 也在此页获取。

获取认证三要素

第七步:

将获取到的信息填入配置文件中,

然后将 config_demo.json 重命名为 config.json

这一步最重要。

配置文件说明

2.2 下载代码

2.2.1 下载代码

可以从GitHub拉取项目代码。

GitHub有时候网速很慢,

也可以从本人的公众号获取。

关注【思维兵工厂】,回复“星火大模型”。

有使用问题,也可到公众号与我联系。

(不建议从其他渠道获取,以防有心之人修改了代码,以致泄露信息的情况。)

思维兵工厂


2.2.2 安装依赖

其实,只用到了一个第三方包: websocket_client

用下面的命令也可以:

(关于websocket_client的版本,官方没作要求。我使用的是1.5.2版本。)

2.2.3 导入使用

下面是一个简单案例。

代码说明


03 代码说明

配置相关:

实例.app_id : 返回app_id。

实例.api_key : 返回api_key。

实例.api_secret : 返回api_secret。

实例.domain : 返回domain。在目前(2024-08-24)版本中,官方只提供 "generalv1" 和 "generalv2"。

实例.Spark_url : 返回Spark_url。在目前(2024-08-24)版本中,官方只提供 "ws://spark-api.xf-yun.com/v1.5/chat" 或者 "ws://spark-api.xf-yun.com/v2.1/chat"。

(注意:domain参数需要和Spark_url搭配)

实例.max_tokens : 返回max_tokens。默认为2048,模型回答的tokens的最大长度,即允许它输出文本的最长字数。

实例.temperature : 返回temperature。取值为[0,1],默认为0.5。取值越高随机性越强、发散性越高,即相同的问题得到的不同答案的可能性越高。

实例.top_k : 返回top_k。取值为[1,6],默认为4。从k个候选中随机选择一个(非等概率)

(注意:temperature和top_k都涉及到回答的随机性,官方建议,修改随机性时,修改其中一个即可。)

实例.prompt : 返回实例的prompt。

实例.text : 返回列表,存储当前实例的历史会话信息。

实例.all_answers_data : 返回当前实例所有答案的流式信息。

实例.prompt : 返回实例的prompt。

token计算相关:

实例.this_tokens : 返回最新一次交互中,消耗的tokens总数

实例.this_answer_tokens : 返回最新一次交互中,回答部分的tokens数

实例.this_question_tokens : 返回最新一次交互中,问题部分的tokens数,在多轮会话中,也是累计问题tokens数

实例.all_tokens : 返回累计消耗tokens总数

方法相关:

实例.set_max_tokens(value) : 修改当前实例的max_tokens

实例.set_top_k(value) : 修改当前实例的top_k

实例.set_temperature(value) : 修改当前实例的temperature

实例.set_language(value) : 修改当前实例的language,可传入chineseenglish,该值主要涉及输入文本最大长度计算。

实例.reset_text() : 重置历史会话记录

实例.ask(self, question) : 接收一个问题,返回sparkGPT的回复。

实例.talk() : 开启多轮会话。

实例.get_text() : 返回一个列表,元素为字典。内容为对话记录。

实例.get_answer() : 返回最新一次交互的答案

04 使用注意

在官方文档的说明中,访问的token需要控制在8192内。

而token字符的换算,根据官方给出的数据,1 token = 约等于1.5个中文汉字 或者 0.8个英文单词。

也就是说:

  • 单次调用(即上图调用 speaker.ask() 方法),文本最大长度为 1.2万个中文汉字 或者 6千个单词

  • 多轮会话(即上图调用 speaker.talk() 方法),类似汉字(包括问题与答案)最多1.2万。超过1.2万字将逐渐丢失上下文语境。

05 参数说明

微调大模型的输出结果,是通过修改请求头的某些参数实现的。

具体来说,在配置文件 config.json 中,后三个值,可以修改,以微调输出结果。

修改微调参数,请确保其符合官方要求。详见下方参数表格说明。

可微调参数

参数修改请参考官方表格:

参数说明

注意:

在官方早期的demo中,可能会出现 random_threshold参数auditing参数

但官方文档(2023-08-24)中并未说明。

经过咨询对方技术人员,

auditing参数 为输入输出的审核参数,当前是默认值;

random_threshold参数 = temperature

详细请参照官方文档:https://www.xfyun.cn/doc/

06 关于tokens消耗的测试

以下是一次多轮会话的tokens消耗数据:

第一次交互:

问:请你根据你掌握的历史回答我的问题,如果你不知道就说不知道。秦始皇的真名是什么?

答:秦始皇的真名是赢政。

本次问答tokens数: 53 

本次问题tokens数: 44 

本次答案tokens数: 9

累计问题tokens数: 44 

累计消耗tokens数: 53

第二次交互:

问:秦始皇出名的儿子都有谁?

答:秦始皇有十八个儿子,但其中比较出名的只有两位:扶苏和胡亥。扶苏是秦始皇的长子,但其性格温和、仁爱,不似秦始皇那般强势,因此并没有得到秦始皇的宠爱。而胡亥则是秦始皇的小儿子,在秦始皇死后继位,但不久就被赵高等人所杀。

本次问答tokens数: 139 

本次问题tokens数: 68 

本次答案tokens数: 71

累计问题tokens数: 68 

累计消耗tokens数: 192

第三次交互:

问:秦始皇死的那天早上,早餐吃了什么?

答:关于秦始皇死的那天早上他吃了什么,历史上并没有明确的记载。不过根据一些文献和传说,有几种说法认为他当天早上可能吃了粗粮和蔬菜做的粥,以及蒸鱼、烤肉等食物。但这些都只是猜测,无法确定其真实性。

本次问答tokens数: 212 

本次问题tokens数: 156 

本次答案tokens数: 56

累计问题tokens数: 156 

累计消耗tokens数: 404

第四次交互:

问:秦始皇灭六国统一天下,哪一个国家是秦始皇最后消灭的?

答:秦始皇灭六国统一天下的过程中,最后一个被消灭的国家是韩国。秦始皇先后击败了赵国、魏国、楚国、燕国和齐国,最终只剩下韩国没有被征服。秦始皇派遣王贲率领大军进攻韩国,经过三年的战争,最终于公元前230年攻陷韩国都城新郑,使韩国成为秦国的附属国。随后,秦始皇将韩国的领土划分为三十个郡,设立秦韩两郡,标志着中国历史上第一次大一统王朝——秦朝的建立。

本次问答tokens数: 340 

本次问题tokens数: 236 

本次答案tokens数: 104

累计问题tokens数: 236 

累计消耗tokens数: 744

第五次交互:

问:哪一个国家是他最先消灭的?

答:秦始皇最先消灭的国家是赵国。在秦灭六国的过程中,秦始皇采取了先易后难、各个击破的策略,而赵国是他攻打的第一个国家。公元前230年,秦始皇派遣将军王翦率领大军进攻赵国都城邯郸,经过一年多的战斗,最终于公元前225年攻陷邯郸,使赵国成为秦国的附属国。此后,秦始皇又先后击败了魏国、楚国、燕国和齐国,最终统一天下建立了秦朝。

本次问答tokens数: 455 

本次问题tokens数: 356 

本次答案tokens数: 99

累计问题tokens数: 356 

累计消耗tokens数: 1199

第六次交互:

问:替秦始皇征战的将军都有谁?

答:秦始皇统一天下的过程中,派遣了众多的将领和名将征战四方,其中一些比较出名的将军包括:

  1. 李斯:秦国重要的政治家和谋士,也是秦始皇身边的得力干将,替秦始皇拟定了许多重要的政策和法律。

  2. 王翦:秦国重要的将领之一,替秦始皇征战六国,先后击败了赵国、魏国等国。

  3. 蒙恬:秦国重要的将领之一,替秦始皇征战北方,曾多次打败匈奴等外族。

  4. 章邯:秦国将领,曾替秦始皇攻打赵国,后来在楚汉战争中投降了刘邦。

  5. 项羽:虽然项羽并非秦始皇时期的将领,但他是秦末时期的重要人物之一,替秦朝东征西讨,最终推翻了秦朝的统治。

本次问答tokens数: 644 

本次问题tokens数: 472 

本次答案tokens数: 172

累计问题tokens数: 472 

累计消耗tokens数: 1843

第七次交互:

问:这些将军中,哪一个的历史结局比较好?

答:这些将军中,历史结局比较好的可能是王翦。王翦替秦始皇征战六国,先后击败了赵国、魏国等国,是秦国的一位重要将领。在秦始皇死后,他的儿子王贲继续为秦朝效力,成为重要的官员和军事将领。而其他一些将军,如蒙恬、章邯等,在秦始皇死后不久就被指控谋反,被迫自杀或被处死。项羽则是在秦末时期崛起的一位将领,虽然他曾经替秦朝东征西讨,但最终却与刘邦结盟,成为了汉朝的开国皇帝。

本次问答tokens数: 780 

本次问题tokens数: 662 

本次答案tokens数: 118

累计问题tokens数: 662 

累计消耗tokens数: 2623

累计消耗tokens:2623

根据官方目前的计费标准(2023-08-24):

使用v2.0版本费用为:0.83936 元 

使用v1.5版本费用为:0.41968 元

结论:

从累计消耗tokens数与大模型底层逻辑来看,大模型其实不适合多轮会话,

所谓多轮会话,是将重复输入前面的问题,以便让大模型了解语义。

以上面的例子来说,

第七次交互时,是将前六次的问题合并到第七次的问题中,再输入给大模型。

因此,多轮会话的交互次数越多,对tokens的消耗就越快。

从上面可以看到,

第一个问题消耗的tokens数为44,第七个问题的tokens消耗就高达2623,

大概是第一个问题的60倍。

因此,实际使用时,不建议多轮会话,单次会话即可。

后续预告:

  1. 优化多轮会话时对tokens的消耗;

  2. 更新一些API调用示例。

本文完,您若喜欢,可关注公众号【思维兵工厂


Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1