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

1 讯飞星火简介

讯飞星火是科大讯飞推出的一款先进的人工智能大模型,它具备强大的语言理解和知识问答能力,能够在多种场景中提供智能化服务。2024年6月27日,科大讯飞发布了讯飞星火大模型V4.0版本,全面对标GPT-4 Turbo。现有的模型类型如下:
模型类型
Spark Lite是完全免费的,无限量Token,Spark Pro、Spark3.5 Max、Spark 4.0 Ultra目前是有免费额度的。

2 开发者快速指引

2.1 注册账号

打开讯飞星火大模型官方网站:
官网
注册账号:
登录页面

2.2 创建应用,获取接口认证信息

登录后,点击左下角的“API接入”:
API接入
点击“在线调试”:
星火API
右上角下拉菜单的「我的应用」进入控制台。若您的账户未曾创建过应用,系统会引导您创建您的第一个应用。
我的应用
填写应用名称、应用分类、应用功能描述:
创建应用
应用创建完成之后,就可以通过左侧的服务列表,选择您要使用的服务。在服务管理面板中,您将看到这个服务对应的可用量、历史用量、服务接口的认证信息(后面Python 调用API需要用到这3个参数)。
服务接口认证信息
讯飞开放平台支持一个账户创建多个应用。当您需要返回应用列表页切换应用,可以点击页面左上角应用名称上方的返回按钮,或顶部右侧个人菜单中的「我的应用」。进入应用列表后,选择一个应用点击应用名称,即可进入这个应用对应的服务管理页。

同一个应用APPID可以用在多个业务上,这个没有限制,但考虑到多个业务共用一个APPID无法分业务统计用量,建议一个业务对应一个应用APPID。

2.3 获取Token

接口采用tokens方式计费。tokens与词表、分词方案相关,没有精确的计算方式,但是接口会返回本次计费的tokens数(详见接口文档响应参数描述)。接口计费会将请求text字段下所有的content内容均计费,开发者需要酌情考虑保留的历史对话信息数量,避免浪费tokens(最大的输入tokens见接口文档参数描述)。
以最新的Spark 4.0 Ultra为例,在左侧的列表中选中Spark 4.0 Ultra,点击“立即购买”按钮:
购买token
选择应用,完成身份认证及设置支付密码的个人可以免费领取200万的token,有效期为1年。
免费token
0元下单:
确认下单

3 Python 调用 API

3.1 获取Web API 文档

点击链接:星火认知大模型Web API文档
API文档
详细阅读说明文档,重点看下请求参数:
请求参数
role 参数的取值为[system,user,assistant],system用于设置对话背景,user表示是用户的问题,assistant表示AI的回复。其中 system 只有Spark 4.0Ultra/Max支持,比如一些定制化的需求,使用Spark Lite 版本是无法实现的。

3.2 获取示例代码

下拉接口文档到最后,下面会有一些不同语言的调用示例以供参考,我们以 Python 为例:
调用示例
第一个示例文件是单次对话,第二个则可以连续对话。这里我们先介绍第一个的使用方法。下载后解压,可以得到一个“sparkAPI.py”的文件,内容如下:

# coding: utf-8
import _thread as thread
import os
import time
import base64import base64
import datetime
import hashlib
import hmac
import json
from urllib.parse import urlparse
import ssl
from datetime import datetime
from time import mktime
from urllib.parse import urlencode
from wsgiref.handlers import format_date_timeimport websocket
import openpyxl
from concurrent.futures import ThreadPoolExecutor, as_completed
import osclass Ws_Param(object):# 初始化def __init__(self, APPID, APIKey, APISecret, gpt_url):self.APPID = APPIDself.APIKey = APIKeyself.APISecret = APISecretself.host = urlparse(gpt_url).netlocself.path = urlparse(gpt_url).pathself.gpt_url = gpt_url# 生成urldef create_url(self):# 生成RFC1123格式的时间戳now = datetime.now()date = format_date_time(mktime(now.timetuple()))# 拼接字符串signature_origin = "host: " + self.host + "\n"signature_origin += "date: " + date + "\n"signature_origin += "GET " + self.path + " HTTP/1.1"# 进行hmac-sha256进行加密signature_sha = hmac.new(self.APISecret.encode('utf-8'), signature_origin.encode('utf-8'),digestmod=hashlib.sha256).digest()signature_sha_base64 = base64.b64encode(signature_sha).decode(encoding='utf-8')authorization_origin = f'api_key="{self.APIKey}", algorithm="hmac-sha256", headers="host date request-line", signature="{signature_sha_base64}"'authorization = base64.b64encode(authorization_origin.encode('utf-8')).decode(encoding='utf-8')# 将请求的鉴权参数组合为字典v = {"authorization": authorization,"date": date,"host": self.host}# 拼接鉴权参数,生成urlurl = self.gpt_url + '?' + urlencode(v)# 此处打印出建立连接时候的url,参考本demo的时候可取消上方打印的注释,比对相同参数时生成的url与自己代码生成的url是否一致return url# 收到websocket错误的处理
def on_error(ws, error):print("### error:", error)# 收到websocket关闭的处理
def on_close(ws):print("### closed ###")# 收到websocket连接建立的处理
def on_open(ws):thread.start_new_thread(run, (ws,))def run(ws, *args):data = json.dumps(gen_params(appid=ws.appid, query=ws.query, domain=ws.domain))ws.send(data)# 收到websocket消息的处理
def on_message(ws, message):# print(message)data = json.loads(message)code = data['header']['code']if code != 0:print(f'请求错误: {code}, {data}')ws.close()else:choices = data["payload"]["choices"]status = choices["status"]content = choices["text"][0]["content"]print(content,end='')if status == 2:print("#### 关闭会话")ws.close()def gen_params(appid, query, domain):"""通过appid和用户的提问来生成请参数"""data = {"header": {"app_id": appid,"uid": "1234",           # "patch_id": []    #接入微调模型,对应服务发布后的resourceid          },"parameter": {"chat": {"domain": domain,"temperature": 0.5,"max_tokens": 4096,"auditing": "default",}},"payload": {"message": {"text": [{"role": "user", "content": query}]}}}return datadef main(appid, api_secret, api_key, gpt_url, domain, query):wsParam = Ws_Param(appid, api_key, api_secret, gpt_url)websocket.enableTrace(False)wsUrl = wsParam.create_url()ws = websocket.WebSocketApp(wsUrl, on_message=on_message, on_error=on_error, on_close=on_close, on_open=on_open)ws.appid = appidws.query = queryws.domain = domainws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})if __name__ == "__main__":main(appid="",api_secret="",api_key="",#appid、api_secret、api_key三个服务认证信息请前往开放平台控制台查看(https://console.xfyun.cn/services/bm35)gpt_url="wss://spark-api.xf-yun.com/v3.5/chat",      # Max环境的地址   # Spark_url = "ws://spark-api.xf-yun.com/v3.1/chat"  # Pro环境的地址# Spark_url = "ws://spark-api.xf-yun.com/v1.1/chat"  # Lite环境的地址domain="generalv3.5",     # Max版本# domain = "generalv3"    # Pro版本# domain = "general"      # Lite版本址query="给我写一篇100字的作文")

这段代码定义了一个名为Ws_Param的类,用于处理WebSocket请求。以下是代码中各个方法的解释:

  • _init_(self, APPID, APIKey, APISecret, gpt_url):初始化方法,用于设置类的实例变量。其中,APPID、APIKey、APISecret分别表示讯飞开放平台的应用ID、API Key和API Secret;gpt_url表示星火大模型的请求地址。
  • create_url(self):生成请求的URL。根据当前时间生成RFC1123格式的时间戳;然后,拼接签名字符串,包括host、date和GET请求行;接着,使用hmac-sha256算法对签名字符串进行加密;将加密后的签名字符串进行Base64编码,并将其添加到鉴权参数中,生成完整的URL。
  • on_error(ws, error):收到WebSocket错误的处理方法。当WebSocket连接发生错误时,会调用此方法。
  • on_close(ws):收到WebSocket关闭的处理方法。当WebSocket连接关闭时,会调用此方法。
  • on_open(ws):收到WebSocket连接建立的处理方法。当WebSocket连接建立时,会调用此方法。在此处,会启动一个新的线程来运行run函数。
  • run(ws, *args):运行函数,用于向讯飞星火大模型服务发送请求。根据WebSocket实例的appid和question属性生成请求参数,然后将请求参数转换为JSON字符串并通过WebSocket发送。
  • on_message(ws, message):收到WebSocket消息的处理方法。当从讯飞星火大模型服务接收到消息时,会调用此方法。解析接收到的消息,然后根据消息中的code判断请求是否成功;如果成功,则将返回的内容打印出来;如果code不为0,表示请求失败,此时关闭WebSocket连接。

3.3 调试代码

注:项目仅支持 Python3.8+

  1. 安装PyPI上的包,在 Python 环境中执行命令:
pip install --upgrade spark_ai_python
  1. 安装 websocket 库:
pip install websocket-client
  1. 填入参数:
    填入星火大模型的URL值和domain值(根据不同版本对应的值),以及接口认证信息(开放平台控制台查看):
    填入参数

  2. 运行示例代码:

python [sparkAPI.py路径]

提示“ModuleNotFoundError: No module named ‘openpyxl’”:
缺少openpyxl
openpyxl 是用于读写Excel文件的库,这里没用到,可以删除导包的这行代码“import openpyxl”。
然后继续运行,又提示on_close()函数参数错误:
参数错误
这里on_close()方法少传两个参数,实际在传参时需要有三个参数,这里补齐另外两个参数:

def on_close(ws, close_code, close_reason):print("### closed ###")

再次运行,成功!!!
运行成功

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

某采招网爬虫数据采集逆向

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 目标网站 aHR0cHM6Ly9zZWFyY2guYmlkY2VudGVyLmNvbS5jbi9zZWFyY2g/a2V5d29yZHM9JWU0…

医院伤员消费点餐限制———未来之窗行业应用跨平台架构

一、点餐上限 医院点餐上限具有以下几方面的意义: 1. 控制成本 - 有助于医院合理规划餐饮预算,避免食物的过度供应造成浪费,从而降低餐饮成本。 2. 保障饮食均衡 - 防止患者或陪护人员过度点餐某一类食物,有利于引导合…

基于51单片机的两路电压检测(ADC0808)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机,通过ADC0808获取两路电压,通过LCD1602显示 二、硬件资源 基于KEIL5编写C代码,PROTEUS8.15进行仿真,全部资源在页尾,提供…

大数据Flink(一百二十三):五分钟上手Flink MySQL连接器

文章目录 五分钟上手Flink MySQL连接器 一、创建数据库表 二、​​​​​​创建session集群 三、源表查询 四、​​​​​窗口计算 五、​​​​​​结果数据写回数据库 五分钟上手Flink MySQL连接器 MySQL Connector可以将本地或远程的MySQL数据库连接到Flink中&#x…

【Spring Cloud Alibaba】Nacos

【Spring Cloud Alibaba】Nacos 1. 什么是Nacos,它都能干什么?1.1 注册中心演变及其思想1.2 Nacos Discovery1.3 远程调用流程图1.4 一个微服务的流程1.4 常用注册中心对比 2. Nacos Server部署3. Nacos Client搭建附录 1. 什么是Nacos,它都能…

科研绘图系列:R语言误差连线图(errobar linechart)

文章目录 介绍加载R包导入数据数据预处理画图系统信息介绍 误差连线图是一种在数据可视化中常用的图表,它通过在数据点处添加线段(误差线)来表示数据的变异性或不确定性。这些误差线可以基于不同的统计度量,如标准差(Standard Deviation)、标准误差(Standard Error)或…

docker操作的基本命令加容器的基本命令(仅供自己参考)

1、docker build:本地将一个docker文件打包成镜像 2、docker push:将自己打包的镜像传到镜像服务器上 3、docker pull:将镜像服务器上的镜像拉取到本地 4、docker images: 查看镜像服务器上的镜像 5、docker rmi:删…

lte sss加扰序列c产生 MATLAB和c语言实现

参考3GPP 36.211 今日给大家介绍一下LTE SSS信号产生过程中加扰序列c的产生过程以及用MATLAB 和 c语言给大家实现一下: 加扰序列c产生过程如下: 1 首先产生公共的序列x的生成 X的初始值 两个加扰序列c0和c1 c语言实现 void lte_sss_gen_c(char *c,u…

初始Vitis——ZYNQ学习笔记1

一、Vitis是什么 Vitis 统一软件平台的前身为 Xilinx SDK,从 Vivado 2019.2 版本开始, Xilinx SDK 开发环境已统一整合到全功能一体化的 Vitis 中。 Vitis 开发平台除了启动方式、软件界面、使用方法与 SDK 开发平台略有区别,其他操作几乎一模…

针对 Linux SSH 服务器的新攻击:Supershell 恶意软件危害易受攻击的系统

ASEC 研究人员发现了针对保护不善的 Linux SSH 服务器的新攻击。 在其中,黑客使用了用Go编写的 Supershell恶意软件。 该后门使攻击者能够远程控制受感染的系统。 初次感染后,黑客启动扫描仪来寻找其他易受攻击的目标。 据信这些攻击是使用从已受感…

【多模态大模型】Qwen2-VL基本原理和推理部署实战

文章目录 Qwen2-VL基本原理Qwen-VL简要回顾Qwen2-VL的高级升级统一视觉处理方式原生动态分辨率处理(非大图切分方式)多模态旋转位置编码 Qwen2-VL推理实现|代码解析单图推理视觉信息预处理找到能被28整除的最合适size最大最小pixel数边界处理 多模态信息…

docker入门总结(附错误处理,持续更新)

安装、启动、卸载 卸载掉旧版本的 Docker yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engineDocker安装(选其一)…

解决DockerDesktop启动redis后采用PowerShell终端操作

如图: 在启动redis容器后,会计入以下界面 : 在进入执行界面后如图: 是否会觉得界面过于单调,于是想到使用PowerShell来操作。 步骤如下: 这样就能使用PowerShell愉快地敲命令了(颜值是第一生…

[SAP ABAP] 生成表维护视图

SAP由于数据量较大,很多自定义表都需要通过用户自行去维护,一般可以直接在SE16N对数据字典进行维护数据,但不是每个用户都有其操作权限,而且直接在数据字典上操作数据有很高的风险,因此SAP提供了表维护视图生成器&…

蓝桥杯【物联网】零基础到国奖之路:八. RTC

蓝桥杯【物联网】零基础到国奖之路:八. RTC 第一节 RTC的基本知识第二节 CubeMX配置第三节 代码 第一节 RTC的基本知识 RTC是实时时钟,指可以想时钟一样输出实际时间的电子设备,一般会是集成电路,也被称为是时钟芯片。总之,RTC只…

Matlab可视化│常用绘图全家桶

Matlab拥有强大的数据可视化功能,这也是其备受科研大佬们青睐的原因之一。利用Matlab的高级绘图全家桶,你能够轻松地呈现各种复杂数据,并使其变得更加易于阅读和理解。 效果图展示: colormap Matlab还提供了各种各样的颜色&#…

java 获取集合a比集合b多出来的对象元素

public class OrderListEntity {/*** deprecated 对象集合的处理* param aData 集合a* param bData 集合b* return 返回集合a比集合b多出来的部分, 通过id判断*/public static List<OrderListEntity> AHasMoreThanBData(List<OrderListEntity> aData, List<Ord…

机器人时代的“触觉革命”:一块小传感器如何颠覆你的认知?

你是否曾经想过,机器人也能像人类一样有“触觉”?不再是简单的机械操作,而是具备真正的感知能力,能够学会精细的任务。今天我想和你聊聊一种让机器人“长出触觉”的技术:一种小巧的触觉传感器,它的名字叫“AnySkin”。别看它小,它的潜力可一点都不小,或许能彻底改变我们…

如何使用ssm实现基于Web的数字家庭网站设计与实现+vue

TOC ssm661基于Web的数字家庭网站设计与实现vue 绪论 课题背景 身处网络时代&#xff0c;随着网络系统体系发展的不断成熟和完善&#xff0c;人们的生活也随之发生了很大的变化。目前&#xff0c;人们在追求较高物质生活的同时&#xff0c;也在想着如何使自身的精神内涵得到…

2024华为杯数学建模竞赛A题

2024年中国研究生数学建模竞赛A题 风电场有功功率优化分配 一、问题背景 我国风电快速发展&#xff0c;大型风机、大规模场站逐步投入运行。额定容量高的大型风机机械部件柔性更强&#xff0c;导致其疲劳损伤累积速度快&#xff0c;增加风机维护成本&#xff0c;降低风力发电…