LLM模型-讯飞星火与百度文心api调用

spark-wenxin

        • 1-讯飞星火
          • 1_1-SparkApi.py
          • 1_2- Chat_spark.py
          • 1_3-调用api
        • 2-百度文心
          • 2_1.code
        • 3-两者之间比较与openai

1-讯飞星火

进入讯飞官网进行创建应用,获取相关密钥APPID,APISecret,APIKey,选择最新版本
首次调用讯飞官方api可能有两问题:

1-No module named 'websocket'#安装 pip install websocket_client==1.4.2
2-spark_url="ws(s)://spark-api.xf-yun.com/v3.1/chat" #改为"ws://spark-api.xf-yun.com/v3.1/chat"

现搞了个完整的代码如下:
第一个相关请求的代码:SparkApi.py 相关参数可自行修改

1_1-SparkApi.py
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_timeimport websocket  # 
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:ws.close()def gen_params(appid, domain,question):"""通过appid和用户的提问来生成请参数"""data = {"header": {"app_id": appid,"uid": "1234"},"parameter": {"chat": {"domain": domain,"random_threshold": 0.5,"max_tokens": 2048,#"auditing": "default"}},"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})

1_2- Chat_spark.py

通过创建应用获取密钥,选择版本创建,这里用的是3.0版本

import SparkApiclass SparkProcessor:#以下密钥信息从控制台获取3.0appid = "xxx"     #填写控制台中获取的 APPID 信息api_secret = "xxxx"   #填写控制台中获取的 APISecret 信息api_key ="xxx"    #填写控制台中获取的 APIKey 信息# # #2.0# appid = "xxx"     #填写控制台中获取的 APPID 信息# api_secret = "xxx"   #填写控制台中获取的 APISecret 信息# api_key ="xxx"    #填写控制台中获取的 APIKey 信息#用于配置大模型版本,默认“general/generalv2”#domain = "general"   # v1.5版本# domain = "generalv2"    # v2.0版本domain = "generalv3"    # v3.0版本#云端环境的服务地址#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.1/chat"import SparkApiclass SparkProcessor:@staticmethoddef _get_text(role, content):#jsoncon = {}jsoncon["role"] = rolejsoncon["content"] = contentreturn jsoncon#实例方法#def get_text(self, role, content):#    jsoncon = {}#   jsoncon["role"] = role#   jsoncon["content"] = content#    return jsoncon@staticmethoddef _get_length(text):length = 0for content in text:temp = content["content"]leng = len(temp)length += lengreturn length@staticmethoddef _check_len(text):#私有方法while SparkProcessor._get_length(text) > 8000:del text[0]return text#类方法@classmethoddef spark_api(cls, question):text = []question = cls._check_len([cls._get_text("user", question)])SparkApi.answer = ""SparkApi.main(cls._get_appid(),cls._get_api_key(),cls._get_api_secret(),cls._get_spark_url(),cls._get_domain(),question,)text.clear()return SparkApi.answer# 私有方法获取敏感信息@staticmethoddef _get_appid():return "xxx"@staticmethoddef _get_api_secret():return "xxx"@staticmethoddef _get_api_key():return "xxx"@staticmethoddef _get_domain():return "xxx"@staticmethoddef _get_spark_url():return "xxx"
1_3-调用api

prompt的基本写法规则:
任务:明确而简洁地陈述Prompt 要求模型生成的内容
指令:模型在生成文本时应遵循的指令。
角色:模型在生成文本时应扮演的角色。

prompt1="""将文本分类为中性、负面或正面。文本:我认为这次假期还可以。情感:"""
from Chat_spark import SparkProcessor
result = SparkProcessor.spark_api(prompt1)
print(result)#中性
2-百度文心

人设+任务目标及解决方式+附加条件完整陈述

2_1.code

创建应用获取相关密钥

# -*- coding: utf-8 -*-
# @Author  : Elvis
# @Time    : 2023/11/13 10:56
# @File    : get_chat.py
# @describe: ""
api_key = 'xxx'
api_id = 'xxx'
secret_key = 'xxx'
name = 'CHAT'import requests
import jsondef get_access_token(api_k, secret_k):"""使用 API Key,Secret Key 获取access_token,替换下列示例中的应用API Key、应用Secret Key"""url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=%s&client_secret=%s" % (api_k, secret_k)
#     print('url: ', url)payload = json.dumps("")headers = {'Content-Type': 'application/json','Accept': 'application/json'}response = requests.request("POST", url, headers=headers, data=payload)return response.json().get("access_token")def get_main(prompt,sys=None):res = get_access_token(api_key, secret_key)
#     print('res: ', res)#     url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token=" + get_access_token()url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token=" + respayload = json.dumps({"messages": [{"role": "user","content": prompt}],
#          "stream": True,"temperature":0.1,#(0, 1.0]"system":sys})headers = {'Content-Type': 'application/json'}response = requests.request("POST", url, headers=headers, data=payload)res = response.textprint(res)res1 = json.loads(res)
#     print(res1)return res1['result']
3-两者之间比较与openai

目前国内的效果在某些方面还是差点意思,没有公开过prompt实例,文心对格式控制很难把控,很难去掉提示语,星火给出的结果有时候偏差很大,估计还得明年中旬,训练慢慢好起来。

相关promot guide
想写好prompt,可以先上B站看一下关于吴恩达对openai 的prompt 视频。

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

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

相关文章

redis三种集群方式

redis有三种集群方式:主从复制,哨兵模式和集群。 1.主从复制 主从复制原理: 从服务器连接主服务器,发送SYNC命令; 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所…

Git的简单使用

Git的简介 Git是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。通过Git仓库来存储和管理这些文件,Git仓库分为两种,一个是本地仓库:开发人员自己电脑上的Git仓库,一个是远程仓库:…

centos FreeXL源码编译

安装、编译 https://www.gaia-gis.it/gaia-sins/freexl-2.0.0.zip wget https://www.gaia-gis.it/gaia-sins/freexl-2.0.0.zip#centos yum install -y minizip minizip-devel expat-devel ./configure --prefix/usr/local/freexl-2.0.0#Ubuntu apt install libminizip libmin…

学习c#的第十六天

目录 C# 正则表达式 定义正则表达式 字符转义 字符类 定位点 分组构造 Lookaround 概览 数量词 反向引用构造 替换构造 替代 正则表达式选项 其他构造 Regex 类 代码示例 实例 1 实例 2 实例 3 C# 正则表达式 正则表达式 是一种匹配输入文本的模式。.Net 框…

PHP比较漏洞, 代码审计, 字符串数字, “0e“字符串, 布尔值比较, 极限值, switch比较, in_array比较

PHP比较漏洞 一, 字符串与数字比较,0e’字符串比较 在 PHP 中处理字符串和数字比较时需要小心谨慎的重要性,尤其是在安全敏感的应用中。 在某些情况下,PHP 的类型强制转换可能会导致意外和潜在的安全漏洞。 var_dump("admin" 0); //true …

RecyclerView嵌套布局,导致RecyclerView复用失效 解决

前言:使用NestedScrollView嵌套RecyclerView。 解决步骤一:固定高度 NestedScrollView嵌套RecyclerView时,RecyclerView的高度是无限大,所以要将RecyclerView设置固定高度。在代码中固定的,灵活度更高。 binding.nest…

键盘方向键移动当前选中的table单元格,并可以输入内容

有类似于这样的表格&#xff0c;用的<table>标签。原本要在单元格的文本框里面输入内容&#xff0c;需要用鼠标一个一个去点以获取焦点&#xff0c;现在需要不用鼠标选中&#xff0c;直接用键盘的上下左右来移动当前正在输入的单元格文本框。 const currentCell React.u…

【数据结构初阶】单链表SLlist

描述 不同于顺序表&#xff0c;顺序表的数据是存储在一个连续的空间里的 而链表它是链接起来的结构体地址。 所以我们不用像顺序表一样先创建一块空间出来&#xff0c;而是创建一个能存数据节点和节点与下一个节点之间的连接&#xff1b; 所以&#xff1a;“一个能存数据节点…

词向量笔记

一、词向量的世界排名比赛MTEB MTEB: Massive Text Embedding Benchmark 二、词向量的维数 词向量的维数d1一般取20~500之间

百分点科技|怎样做数据运营,才能让数据中台真正用起来?

导读&#xff1a;大多数企业用户已完成数据平台初步建设工作&#xff0c;但数据在业务运营和管理中没有发挥应有价值。数据开发工作繁重&#xff0c;数据质量问题严重&#xff0c;IT、数据和业务协作不畅&#xff0c;诸多问题依然困扰着企业用户的IT部门和数据部门。数据运营成…

起立科技(起鸿)在第25届高交会上展示透明OLED技术创新

第二十五届中国国际高新技术成果交易会 日期&#xff1a;2023年11月15日 地点&#xff1a;福田会展中心7号馆 深圳&#xff0c;2023年11月15日 — 起鸿科技&#xff0c;作为透明OLED领域的引领者&#xff0c;于今日参展了第二十五届中国国际高新技术成果交易会。这一展会将汇…

『亚马逊云科技产品测评』活动征文|通过lightsail一键搭建Drupal VS 手动部署

『亚马逊云科技产品测评』活动征文&#xff5c;通过lightsail一键搭建Drupal 提示&#xff1a;授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚…

微服务架构中的 熔断和降级

文章目录 熔断判定服务的健康状态服务恢复正常 降级跨服务降级自身服务提供有损服务具体案例分析 熔断 微服务架构中&#xff0c;如果需要保障可用性&#xff0c;其中一个方式就是 熔断。熔断在微服务架构里面是指 当微服务本身出现问题的时候&#xff0c;它会拒绝新的请求&am…

《算法通关村——反转字符串中的单词问题解析》

《算法通关村——反转字符串中的单词问题解析》 151. 反转字符串中的单词 给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接…

大学生如何免费认证,下载,安装MATLAB

下载 打开学校图书馆官网 选择版本后&#xff0c;点击下载 注册绑定个人认证 前提&#xff01;需要有学校邮箱【以edu.cn结尾的】 进入mathworks官网 注册账户 安装 下载完后&#xff0c;打开 选择&#xff1a;setup 安装程序 勾选&#xff1a;是&#xff1b;选择&#xf…

记GitLab服务器迁移后SSH访问无法生效的问题解决过程

公司IT心血来潮对GitLab服务器进行安全升级&#xff0c;升级后无法启动。。。只得启用备用服务器&#xff0c;具体的备份机制不祥&#xff0c;只知道原数据都在&#xff0c;但文件系统是否完全一样不清楚。切换为备用服务器后使用SSH下载代码死活不成功&#xff0c;反复提示需要…

机器学习第10天:集成学习

文章目录 机器学习专栏 介绍 投票分类器 介绍 代码 核心代码 示例代码 软投票与硬投票 bagging与pasting 介绍 核心代码 随机森林 介绍 代码 结语 机器学习专栏 机器学习_Nowl的博客-CSDN博客 介绍 集成学习的思想是很直观的&#xff1a;多个人判断的结合往往比…

身份证阅读器和社保卡读卡器Harmony鸿蒙系统ArkTS语言SDK开发包

项目需求&#xff0c;用ArkTS新一代开发语言实现了在Harmony鸿蒙系统上面兼容身份证阅读器和社保卡读卡器&#xff0c;调用了DonseeDeviceLib.har这个读卡库。 需要注意的是&#xff0c;鸿蒙系统的app扩展名为.hap&#xff0c;本项目编译输出的应用为&#xff1a;entry-default…

下厨房网站月度最佳栏目菜谱数据获取及分析PLus

目录 概要 源数据获取 写Python代码爬取数据 Scala介绍与数据处理 1.Sacla介绍 2.Scala数据处理流程 数据可视化 最终大屏效果 小结 概要 本文的主题是获取下厨房网站月度最佳栏目近十年数据&#xff0c;最终进行数据清洗、处理后生成所需的数据库表&#xff0c;最终进…

elmenetui表格二次封装包含查询框和分页

<!--dataList: 表格数据columnList: 表头字段 宽度minWidth使用slotName字段: 需要对列数据进行处理&#xff0c;不写prop字段&#xff0c;使用slotName字段btnText<String>: 按钮字段btnIcon<String>: 按钮的iconbtnEvent: 按钮事件btnType: 按钮类型getHeigh…