讯飞星火认知大模型V3.5 python调用 Web API

具体参考 科大讯飞:星火认知大模型Web API文档

目录

    • 1.首先要注册一个 讯飞星火账号,
    • 2. 按照自己的业务需求,翻看相关SDK开发文档, 如图1所示。
    • 3. 星火认知大模型Web API python示例源码文件共两个
        • *接口请求与接口解析函数:SparkApi.py
        • *测试例子:test.py

1.首先要注册一个 讯飞星火账号,

进行实名认证,并领取免费试用额度。
并进入控制台找到 APPID, APISecret ,APIKey 三个关键信息
科大讯飞控制台界面查看(图1)

2. 按照自己的业务需求,翻看相关SDK开发文档, 如图1所示。

3. 星火认知大模型Web API python示例源码文件共两个

  • 测试例子:test.py
  • 接口请求与接口解析函数:SparkApi.py

星火认知大模型Web API python的示例下载
在这里插入图片描述

这里只在 示例的基础上 参考 星火认知大模型Web API文档改为了 星火大模型V3.5版本的请求地址,因为这里申请的是V3.5版本的对话额度。

  • 我的本地测试效果如图2(命令行效果):

在这里插入图片描述(图2)

  • 这里的示例代码如下(domain = “generalv3.5” # v3.5版本):
*接口请求与接口解析函数:SparkApi.py
# 接口请求与接口解析函数:SparkApi.pyimport _thread as thread
import 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  # 使用websocket_client
answer = ""class Ws_Param(object):# 初始化def __init__(self, APPID, APIKey, APISecret, Spark_url):self.APPID = APPIDself.APIKey = APIKeyself.APISecret = APISecretself.host = urlparse(Spark_url).netlocself.path = urlparse(Spark_url).pathself.Spark_url = Spark_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.Spark_url + '?' + urlencode(v)# 此处打印出建立连接时候的url,参考本demo的时候可取消上方打印的注释,比对相同参数时生成的url与自己代码生成的url是否一致return url# 收到websocket错误的处理
def on_error(ws, error):print("### error:", error)# 收到websocket关闭的处理
def on_close(ws,one,two):print(" ")# 收到websocket连接建立的处理
def on_open(ws):thread.start_new_thread(run, (ws,))def run(ws, *args):data = json.dumps(gen_params(appid=ws.appid, domain= ws.domain,question=ws.question))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 ="") #持续打印  间断收到的信息global answeranswer += content   #不断将收到的信息拼接到 回复对话# print(1)if status == 2:     #对话回复的拼接结束# print(answer,end ="") #打印完整回复ws.close()def gen_params(appid, domain,question):"""通过appid和用户的提问来生成请参数"""data = {"header": {"app_id": appid,"uid": "1234"},"parameter": {"chat": {"domain": domain,"temperature": 0.5,"max_tokens": 2048}},"payload": {"message": {"text": question}}}return datadef main(appid, api_key, api_secret, Spark_url, domain, question):# print("星火:")wsParam = Ws_Param(appid, api_key, api_secret, Spark_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.question = questionws.domain = domainws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})
*测试例子:test.py
# 测试例子:test.pyimport SparkApi#以下密钥信息从控制台获取
appid = "填写控制台中获取的 APPID 信息"     #填写控制台中获取的 APPID 信息
api_secret = "填写控制台中获取的 APISecret 信息"     #填写控制台中获取的 APISecret 信息
api_key ="填写控制台中获取的 APIKey 信息"         #填写控制台中获取的 APIKey 信息#用于配置大模型版本,默认“general/generalv2”
# domain = "general"   # v1.5版本
# domain = "generalv2"    # v2.0版本
domain = "generalv3.5"    # v3.5版本
#云端环境的服务地址
# Spark_url = "ws://spark-api.xf-yun.com/v1.1/chat"  # v1.5环境的地址
# Spark_url = "ws://spark-api.xf-yun.com/v2.1/chat"  # v2.0环境的地址
Spark_url = "ws://spark-api.xf-yun.com/v3.5/chat"    # v3.5环境的地址text =[]
# length = 0def getText(role,content):jsoncon = {}jsoncon["role"] = rolejsoncon["content"] = contenttext.append(jsoncon)return textdef getlength(text):length = 0for content in text:temp = content["content"]leng = len(temp)length += lengreturn lengthdef checklen(text):while (getlength(text) > 8000):del text[0]return textif __name__ == '__main__':text.clearcharTimes=0while(1):print("==========\r\n")charTimes+=1print("---我的提问"+str(charTimes)+"\r\n")Input = input("提问:")question = checklen(getText("user",Input))SparkApi.answer =""SparkApi.main(appid,api_key,api_secret,Spark_url,domain,question)getText("assistant",SparkApi.answer)print("星火:"+ SparkApi.answer, end = "\r\n\n")print("---text回复"+str(charTimes)+"原JSON内容:\r\n")print(text[-2])print(text[-1])print("==========\r\n")

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

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

相关文章

TCP和UDP相关问题(重点)——8.TCP的拥塞控制怎么实现的?

在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就会变坏,比如在高速公路上行驶的车辆,如果一时期内涌入了太多的车辆,道路将变得拥堵,交通状况变差。网络中也是一样&#…

Quartus工程的qsf配置约束文件介绍

一、qsf文件概述 qsf:Quartus Setting File,是Quartus工程的配置文件; 包含一个Quartus工程的所有约束,包括工程的软件版本信息、FPGA器件信息、引脚约分配、引脚电平分配,编译约束和用于Classic TimingAnalyzer的时…

MATLAB环境下基于深层小波时间散射网络的ECG信号分类

2012年,法国工程学院院士Mallat教授深受深度学习结构框架思想的启发,提出了基于小波变换的小波时间散射网络,并以此构造了小波时间散射网络。 小波时间散射网络的结构类似于深度卷积神经网络,不同的是其滤波器是预先确定好的小波…

DMA直接内存访问,STM32实现高速数据传输使用配置

1、DMA运用场景 随着智能化、信息化的不断推进,嵌入式设备的数据处理量也呈现指数级增加,因此对于巨大的数据量处理的情况时,必须采取其它的方式去替CPU减负,以保证嵌入式设备性能。例如SD卡存储器和音视频、网络高速通信等其它情…

Vue中 常用的修饰符有哪些

Vue是一款建立在JavaScript框架上的开源前端库,已经成为当今前端开发人员最喜爱的选择之一。它的简洁语法和强大的功能使得开发者可以轻松地构建交互性的网页应用程序。在Vue中,修饰符是一个重要的概念,它们可以帮助我们更好地控制和定制DOM元…

【数据结构】二叉树的顺序结构及链式结构

目录 1.树的概念及结构 1.1树的概念 1.2树的相关概念 ​编辑 1.3树的表示 1.4树在实际中的运用(表示文件系统的目录树结构) 2.二叉树概念及结构 2.1二叉树的概念 2.2现实中的二叉树 ​编辑 2.3特殊的二叉树 2.4二叉树的性质 2.5二叉树的存储结…

c++新特性override和final

override 作用: 在子类中重写父类的虚函数,我们可以在子类的虚函数声明后加上override。 上图就在重写eat()的时候,加上override。 作用: 1. 可以提示读者,这个函数是重写自父类中的。 2. 加上override之后,我们在重…

数据库管理-第148期 最强Oracle监控EMCC深入使用-05(20240208)

数据库管理148期 2024-02-08 数据库管理-第148期 最强Oracle监控EMCC深入使用-05(20240208)1 性能主页2 ADDM Spotlight3 实时ADDM4 数据库的其他5 主机总结 数据库管理-第148期 最强Oracle监控EMCC深入使用-05(20240208) 作者&am…

实例分割论文阅读之:FCN:《Fully Convolutional Networks for Semantica Segmentation》

论文地址:https://openaccess.thecvf.com/content_cvpr_2015/papers/Long_Fully_Convolutional_Networks_2015_CVPR_paper.pdf 代码链接:https://github.com/pytorch/vision 摘要 卷积网络是强大的视觉模型,可以产生特征层次结构。我们证明&#xff0c…

Python解决SSL不可用问题

参考:https://blog.csdn.net/weixin_44894162/article/details/126342591 一、问题描述: 报错概述: WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. ## 警告:pip配…

Project 2019下载安装教程,保姆级教程,附安装包和工具

前言 Project是一款项目管理软件,不仅可以快速、准确地创建项目计划,而且可以帮助项目经理实现项目进度、成本的控制、分析和预测,使项目工期大大缩短,资源得到有效利用,提高经济效益。软件设计目的在于协助专案经理发…

ubuntu原始套接字多线程负载均衡

原始套接字多线程负载均衡是一种在网络编程中常见的技术,特别是在高性能网络应用或网络安全工具中。这种技术允许应用程序在多个线程之间有效地分配和处理网络流量,提高系统的并发性能。以下是关于原始套接字多线程负载均衡技术的一些介绍: …

交通 | 共乘出行(下):基于图结构的动态多时空供需网络的均衡度量方法

博客:Alex Chin, & Tony Qin. (2023.02.25). Quantifying Efficiency in Ridesharing Marketplaces. Link: https://eng.lyft.com/quantifying-efficiency-in-ridesharing-marketplaces-affd53043db2 论文:Chin, Alex, and Zhiwei Qin. “A Unified…

Springboot根据环境读取application配置文件

目录 1. 首先创建两个不同配置文件 2. pom.xml 配置文件 3. 指定环境 4. 最后启动测试 1. 首先创建两个不同配置文件 分别为开发环境和生产环境 application-dev.properties 和 application-prod.properties application-dev.properties 配置为 1931 端口 application-pro…

CAN通讯协议详解

阅读引言: 本篇博文想给需要的人介绍一下CAN总线, 这个也算是我从B站学习记得笔记分享吧也算是。简单的介绍了CAN总线的大致内容, 简述支持CAN功能的STM32的简单使用例程。本视频的中的图片内容均来自B站爱上半导体博主的内容。 CAN高质量教学…

问题:在填制记账凭时,应注意以下几个方面:( ) #知识分享#其他

问题:在填制记账凭时,应注意以下几个方面:( ) A:记账凭证各项内容必须完整 B:必须以审核无误的原始凭证为依据 C:记账凭证应连续编号 D:记账凭证的书写应清楚、规范。 参考答案如图所示

C++算法之双指针、BFS和图论

一、双指针 1.AcWing 1238.日志统计 分析思路 前一区间和后一区间有大部分是存在重复的 我们要做的就是利用这部分 来缩短我们查询的时间 并且在使用双指针时要注意对所有的博客记录按时间从小到大先排好顺序 因为在有序的区间内才能使用双指针记录两个区间相差 相当于把一个…

Leecode之随机链表的复制

一.题目及剖析 https://leetcode.cn/problems/copy-list-with-random-pointer/ 这个题目的意思就是拷贝一份复杂链表,难点在于它的random指针所指向的空间与拷贝下来的链表之间缺少一种联系,当然可以用遍历链表的方式通过value去找那块空间,不过时间复杂度太高. 二.思路引入 …

Redis Centos7 安装到启动

文章目录 安装Redis启动redis查看redis状况连接redis服务端 安装Redis 1.下载scl源 yum install centos-release-scl-rh2.下载redis yum install rh-redis5-redis 3. 创建软连接 1.cd /usr/bin 2. In -s /opt/rh/rh-redis5/root/usr/bin/redis-server ./redis-server 3. …

Ajax+JSON学习一

AjaxJSON学习一 文章目录 前言一、Ajax简介1.1. Ajax基础1.2. 同源策略 二、Ajax的核心技术2.1. XMLHttpRequest 类2.2. open指定请求2.3. setRequestHeader 设置请求头2.4. send发送请求主体2.5. Ajax取得响应 总结 前言 一、Ajax简介 1.1. Ajax基础 Ajax 的全称是 Asynchron…