【AI】Python调用讯飞星火大模型接口,轻松实现文本生成

news2024/12/24 2:43:00

随着chatGPT的出现,通用大模型已经成为了研究的热点,由于众所周知的原因,亚太地区调用经常会被禁,在国内,讯飞星火大模型是一个非常优秀的中文预训练模型。本文将介绍如何使用Python调用讯飞星火大模型接口,实现文本生成等功能。

1. 安装API库

需要安装库,在命令行中输入以下命令进行安装:

pip3 install websocket
pip3 install websocket-client

2. 获取讯飞星火大模型API密钥

在使用讯飞星火大模型API之前,需要先获取一个API密钥。请访问讯飞开放平台官网(https://www.xfyun.cn/),注册账号并登录后,进入“我的应用”页面,创建一个新的应用

在工单中申请API密钥:
在这里插入图片描述

3. 调用讯飞星火大模型API进行文本生成

参考官方api:https://www.xfyun.cn/doc/spark/Web.html
下面演示如何使用Python调用讯飞星火大模型接口进行文本生成。需要导入所需的库,并设置API密钥:在这里插入图片描述

import _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_time

import websocket
global result
import os
 class Ws_Param(object):
        # 初始化
        def __init__(self, APPID, APIKey, APISecret, gpt_url):
            self.APPID = APPID
            self.APIKey = APIKey
            self.APISecret = APISecret
            self.host = urlparse(gpt_url).netloc
            self.path = urlparse(gpt_url).path
            self.gpt_url = gpt_url

        # 生成url
        def 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
            }
            # 拼接鉴权参数,生成url
            url = 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, question=ws.question))
            ws.send(data)


        # 收到websocket消息的处理
        def on_message(ws, message):
            global result 
            # 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"]
                result += content
                print(content, end='')
                if status == 2:
                    ws.close()")

4. 代码解释

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

  1. __init__(self, APPID, APIKey, APISecret, gpt_url):初始化方法,用于设置类的实例变量。其中,APPID、APIKey、APISecret分别表示讯飞开放平台的应用ID、API Key和API Secret;gpt_url表示讯飞语音合成服务的URL。

  2. create_url(self):生成请求的URL。根据当前时间生成RFC1123格式的时间戳;然后,拼接签名字符串,包括host、date和GET请求行;接着,使用hmac-sha256算法对签名字符串进行加密;将加密后的签名字符串进行Base64编码,并将其添加到鉴权参数中,生成完整的URL。

  3. on_error(ws, error):收到WebSocket错误的处理方法。当WebSocket连接发生错误时,会调用此方法。

  4. on_close(ws):收到WebSocket关闭的处理方法。当WebSocket连接关闭时,会调用此方法。

  5. on_open(ws):收到WebSocket连接建立的处理方法。当WebSocket连接建立时,会调用此方法。在此处,会启动一个新的线程来运行run函数。

  6. run(ws, *args):运行函数,用于向讯飞语音合成服务发送请求。根据WebSocket实例的appid和question属性生成请求参数;然后,将请求参数转换为JSON字符串并通过WebSocket发送。

  7. on_message(ws, message):收到WebSocket消息的处理方法。当从讯飞语音合成服务接收到消息时,会调用此方法。解析接收到的消息;然后,根据消息中的code判断请求是否成功;如果成功,则将返回的内容累加到全局变量result中,并打印出来;如果code不为0,表示请求失败,此时关闭WebSocket连接。

5.自动保存

最好把每次调用接口保存下来,并总结一些常用的话术,如起名,指定markdown格式等:

# -*- coding: utf-8 -*-
import sys
import os
sys.path.append(os.path.abspath(os.path.dirname(os.path.dirname(__file__))))
import requests, json,time
from ai import SparkApi
from util import file_util
def write(prefix, titile):
    result = SparkApi.api(prefix + titile)   
    result = result.replace('我们','').replace('首先,','').replace('其次,','').replace('最后,','')
    file_util.write(os.path.join(r'./data', titile + '.md'), result)
def article(titile):   
    prefix = '假如你是一个公众号博主,请以markdown格式写一篇1500字的文章并起10个吸引人的标题,从第二级标题开始,'  
    write(prefix, titile)
def replace(titile):
    result = file_util.read(os.path.join(r'./data', titile + '.md'))
    result = result.replace('我们','').replace('首先,','').replace('其次,','').replace('最后,','')
    file_util.write(os.path.join(r'./data', titile + '.md'), result)
def code(titile, code_str):
    prefix = '假如你是一个公众号博主,请以markdown格式写一篇1500字的文章,解释如下代码:'  
    write(prefix + code_str, titile)
if __name__ ==  '__main__':
    startTime=time.time()        
    article("python调用讯飞星火大模型接口")
    endTime=time.time()
    print(str(endTime-startTime))''')

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

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

相关文章

flask-----初始项目架构

1.初始的项目目录 -apps 包 ------存放app -user文件夹 -------就是一个app -models.py --------存放表模型 -views.py -------存放主代码 -ext包 -init.py -------实例化db对象 -manage.py -----运行项目的入口 -setting.py -----配置文件 2.各文件内容 manage…

剑指offer39.数组中出现次数超过一半的数字

这个题非常简单&#xff0c;解法有很多种&#xff0c;我用的是HashMap记录每个元素出现的次数&#xff0c;只要次数大于数组长度的一半就返回。下面是我的代码&#xff1a; class Solution {public int majorityElement(int[] nums) {int len nums.length/2;HashMap<Integ…

【C++】异常的使用和细节

传统C语言错误异常的方式 C语言一般使用assert来处理错误&#xff0c;assert确实很不错&#xff0c;可以把错误的行数都提示出来&#xff0c;但是&#xff0c;assert有一个致命的缺点&#xff0c;就是触发assert之后就会终止程序&#xff0c;还有一点就是在release环境下&#…

如何通过Pytest的插件,轻松切换自动化测试的环境地址?

前言 前面小编介绍了如何通过Pytest的插件来实现自动化测试的环境的切换&#xff0c;当时使用的方法是通过钩子函数进行获取命令行参数值&#xff0c;然后通过提前配置好的参数进行切换测试环境地址。加我VX&#xff1a;atstudy-js 回复“测试”&#xff0c;进入 自动化测试学…

【CDH集群】无法发出查询:Host Monitor未运行

无法发出查询:Host Monitor未运行 【CDH集群】无法发出查询:Host Monitor未运行同事的解决方案解决方法&#xff1a;删除原uuid重启agent查看新uuid修改scm数据库中HOSTS表中的agent的uuid 【CDH集群】无法发出查询:Host Monitor未运行 起初是impala报错&#xff0c;连接不上&…

武器换弹系统这节课出现的bug,角色不能正确掏枪了,只有换完弹夹以后才能正常掏枪了

UE4系列文章目录 文章目录 UE4系列文章目录前言一、蓝图实现二、错误原因三、修改后的效果 前言 在学习武器换弹系统这节课出现的bug&#xff0c;角色不能正确掏枪了&#xff0c;只有换完弹夹以后才能正常掏枪了&#xff0c;就是添加了换弹之后才影响了持枪功能&#xff0c;在…

Maven的入门级——介绍,安装,导入项目,全网最最详细教程!!,包含可能会包的错误的已经指出来了

目录 一.Maven的基本介绍 二. Maven的使用过程 使用步骤&#xff1a; 三.Maven的安装 3.1 下载 3.2 配置环境步骤 3.3配置settings.xml文件 四.入门案列 4.1 配置Eclipse环境 4.2 介绍Maven项目的结构 4.3 运行测试项目 一.Maven的基本介绍 我们可以知道在程序员做项目的时…

ngrok内网穿透可以实现资源共享吗?快解析更加简洁

随着互联网的高速发展&#xff0c;越来越多的人开始意识到内网穿透技术的重要性。在这一技术中&#xff0c;ngrok已经成为了一个备受关注的工具。然而&#xff0c;很多人对于ngrok是否可以进行资源共享存在疑问。本文将从新的角度出发&#xff0c;深入探讨这个问题。 了解什么…

SAP使用函数NUMBER_GET_NEXT创建流水号

1. 系统中设定流水号&#xff1b;使用T-Code&#xff1a;SNRO来创建一个流 输入Object&#xff1a;ZLC_001&#xff0c;然后单击创建。 然后输入Shorttext, Long text, Number length domain在写程序的时候应该会另外创建&#xff0c;这里测试就使用料号的Domain MATNR来做,其他…

Mahout教程_编程入门自学教程_菜鸟教程-免费教程分享

教程简介 Mahout 是 Apache Software Foundation&#xff08;ASF&#xff09; 旗下的一个开源项目&#xff0c;提供一些可扩展的机器学习领域经典算法的实现&#xff0c;旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout包含许多实现&#xff0c;包括聚类、分类、推荐…

利用PHP的特性做免杀Webshell

0x01 前言 最近很多家厂商都陆续开放了自己的Webshell检测引擎&#xff0c;并且公开接口&#xff0c;邀请众安全研究员参加尝试bypass检测引擎&#xff0c;并且给予奖励&#xff0c;我也参加了几场类似的活动&#xff0c;有 ASRC 的 伏魔计划 &#xff0c;也有 TSRC 的 猎刃计…

8月盛夏相约|上海国际智能家居展SSHT 精彩亮点抢先看

上海国际智能家居展览会&#xff08;SSHT&#xff09; 2023年8月29至31日 上海新国际博览中心举行 SSHT 作为国内专业智能家居展会&#xff0c;定位为“智能家居技术的行业平台”&#xff0c;以“技术整合”及“跨界合作”为主轴&#xff0c;旨在呈现不同层面的智能家居技术如…

计算机基础知识一

1、计算机系统组成 1.1 硬件 CPU&#xff1a;中央处理器、计算机核心部件、负责计算任务 内存&#xff1a;记忆功能、存储二进制数&#xff0c;内存是一个字节一个地址。 内存大小换算&#xff1a; 8 bits 1 Byte 1024 Bytes Bytes 1 KB &#xff0c; 1024 KB KB 1 …

妙盈面试(部分)

算法题1&#xff0c;二分查找即可&#xff1a; git rebase算法题2&#xff0c;求二叉树两结点的最小公共祖先 搞笑的是&#xff0c;第2道算法题我刚开始做&#xff0c;黑屏了两秒钟&#xff0c;当时其实腾讯会议软件已经崩溃了&#xff0c;但是我没注意到而是继续做题。等到做…

openGauss学习笔记-36 openGauss 高级数据管理-TRUNCATE TABLE语句

文章目录 openGauss学习笔记-36 openGauss 高级数据管理-TRUNCATE TABLE语句36.1 语法格式36.2 参数说明36.3 示例 openGauss学习笔记-36 openGauss 高级数据管理-TRUNCATE TABLE语句 清理表数据&#xff0c;TRUNCATE TABLE用于删除表的数据&#xff0c;但不删除表结构。也可以…

易大师运势测算网站源码含视频搭建教程

微信/支付宝支付、海外paypal支付、积分支付、VIP免支付&#xff0c;易支付&#xff0c;码支付。 对接真人服务、完善的分销功能、支持设置一二多级分成比例、微信/QQ登陆、注册送积分设置。 推广链接被访问送积分设置&#xff0c;海报推广功能、完善的推广机制&#xff0c;可…

MES系统应该涵盖那些功能

导 读 ( 文/ 1497 ) MES系统是专门面向生产环节的软件系统&#xff0c;用于管理、监控原材料转化为中间产品以及成品的过程。尽管市面上有着不同类别、覆盖不同行业的MES系统&#xff0c;但它们都具有一些基本特征&#xff0c;即包括产品文档管理、物料管理、生产执行管理…

CVE-2021-26411在野样本中利用RPC绕过CFG缓解技术的研究

浏览器渲染进程漏洞利用的一般思路是&#xff1a;在利用漏洞获得用户态任意地址读写权限后&#xff0c;通过篡改DOM、js等对象的虚表函数指针劫持程序执行流&#xff0c;通过ROP链调用VirtualProtect等Win32 API&#xff0c;修改保存shellcode buffer的内存属性为PAGE_EXECUTE_…

将matlab中工作区的数据保存为.mat文件及加载.mat数据

将matlab工作区中的数据保存为.mat文件 如数据a a[1 1 2 3 2 4];一、工作区数据 二、保存为.mat文件 利用save保存数据a到data.mat文件中 save(data.mat,a);三、加载数据 Iload(data.mat)

lc18.四数之和

三数之和的延申&#xff0c;四数之和&#xff1a;两层外层for循环双指针 时间复杂度&#xff1a;O(n3) 空间复杂度&#xff1a;O(1) import org.junit.Test;import java.util.ArrayList; import java.util.Arrays; import java.util.List;public class FourSum {Testpublic v…