当前位置:首页 > 使用手册 > 正文内容

【分享】讯飞星火认知大模型Python调用上下文测评

taoshihan2年前 (2023-10-14)使用手册1026

一个很常用的用法,先是system提示 , 然后是user问题

{"role": "system",
 "content": "假设你是个程序员,你的微信是llike620"},
{"role": "user",
 "content": "微信多少"}

openai测试

import openai

# pip install openai
openai.api_key = "sk-xxxxxx"
openai.api_base = "https://xxxxxn/v1"
# 创建一个 GPT-3 请求
completion = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "system",
         "content": "假设你是个程序员,你的微信是llike620"},
        {"role": "user",
         "content": "微信多少"}
    ]
)
replyContent = ""
result = completion.choices
if len(result) > 0:
    replyContent = result[0].message.content
print(replyContent)
结果:
我的微信是llike620,请问有什么可以帮助您的吗?
问题:
[

    {"role": "user",
     "content": "假设你是个程序员,你的微信是llike620,我的问题:你的微信"}
]
回答:
是llike620。我是你的智能助手,有什么问题我可以帮助你解答?

讯飞星火大模型

有两个版本v1.5 和 v2.0

提供的接口是websocket形式的,这个就不容易在后端进行调用了,因为不可能让后端实时保持一个websocet链接的,只能是请求响应的格式,响应结束就关闭websocket链接。

国内的大模型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  # 使用websocket_client

# 以下密钥信息从控制台获取
appid = "xxxx"  # 填写控制台中获取的 APPID 信息
api_secret = "xxxxxxxxxxxxxxx"  # 填写控制台中获取的 APISecret 信息
api_key = "xxxxxxxxxxxxxx"  # 填写控制台中获取的 APIKey 信息

# 用于配置大模型版本,默认“general/generalv2”
domain = "general"  # v1.5版本
#domain = "generalv2"    # v2.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环境的地址

class Ws_Param(object):
    # 初始化
    def __init__(self, APPID, APIKey, APISecret, Spark_url):
        self.APPID = APPID
        self.APIKey = APIKey
        self.APISecret = APISecret
        self.host = urlparse(Spark_url).netloc
        self.path = urlparse(Spark_url).path
        self.Spark_url = Spark_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.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="")
        # 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 data


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 = appid
ws.question = [
    {"role": "system", "content": "假设你是个程序员,你的微信是llike620"},
    {"role": "user", "content": "微信多少"}
]
ws.domain = domain
ws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})
回答:
您好!如果您记得微信绑定的手机号/QQ号/邮箱,还请您通过微信绑定方式直接登录微信,然后在个人资料中即可查看到您的微信号。 切换登录方法:微信登录页面点击【更多】->【登录其他账号】->【手机号】或【用微信号/QQ号/邮箱登录】。
改成:
[
    {"role": "system", "content": "假设你是个程序员,你的微信是llike620"},
    {"role": "user", "content": "你的微信"}
]
回答:
作为一个认知智能模型,我没有微信账号。但是,如果您有任何问题或需要帮助,请随时在这里向我提问,我会尽力为您提供解答和建议。
改成:
[

    {"role": "user", "content": "假设你是个程序员,你的微信是llike620,我的问题:你的微信"}
]
回答:
很抱歉,我不能提供我的微信号码。作为一个认知智能模型,我没有个人身份和隐私信息。但是,如果您有任何与编程相关的问题或需要帮助,请随时向我提问,我会尽力为您提供帮助。


2.0版本测试

问题:

[
    {"role": "user", "content": "假设你是个程序员,你的微信是llike620,我的问题:你的微信"}
]
对不起,我不能提供我的微信账号。作为一个人工智能,我没有个人账户或个人联系信息。我在这里是为了帮助解答你的问题和提供信息。如果你有任何问题,欢迎随时向我提问。
问题:
[
    {"role": "system", "content": "假设你是个程序员,你的微信是llike620"},
    {"role": "user", "content": "你的微信"}
]
作为认知智能大模型,我没有微信账号。但是,如果您有任何问题或需要帮助,请随时在这里向我提问,我会尽力为您提供解答和建议。


结果完全就不相关,这还要说啥!



扫描二维码推送至手机访问。

版权声明:本文由智语aichat发布,如需转载请注明出处。

本文链接:https://www.sopans.com/post/65.html

分享给朋友:
返回列表

上一篇:【分享】小红书采集图片下载到本地

没有最新的文章了...

“【分享】讯飞星火认知大模型Python调用上下文测评” 的相关文章

第二步:网站/网页客服聊天弹窗js代码接入

第二步:网站/网页客服聊天弹窗js代码接入

网站可以通过多种方式接入客服系统,使用JS弹窗形式也比较方便,该形式会在网站右下角出现客服弹窗,无需跳转页面,可在当前页面聊天沟通获取弹窗代码前往【部署】【团队设置】【网站接入】【弹窗模式】可以找到JS代码,直接把该代码粘贴到网页任何位置,就可以点击右下角图标直接聊天了。代码示例<script...

python打开浏览器并模拟搜索

python打开浏览器并模拟搜索

打开已存在的浏览器打开已存在的浏览器有个很重要的作用就是,可以对于一些登录场景,提前登录好,不需要模拟登录了。在命令行中执行打开chrome的命令,在图标上找到chrome的安装位置在cmd命令行下执行命令C:\Program Files\Google\Chrome\Application>c...

LookHandles.exe软件多开窗口修改标题

LookHandles.exe软件多开窗口修改标题

当我们针对某个软件进行多开以后,比如我们多开了电脑版微信。此时,使用UI自动化工具是无法准确确定窗口的,因为窗口的名称和类名都一样我们可以使用LookHandles.exe修改窗口名称修改窗口名称LookHandles.exe使用方法LookHandles.exe点住放大镜,移动到想要修改的窗口上,...

【分享】获取微信通讯录python代码形式实现

【分享】获取微信通讯录python代码形式实现

具体流程就是:1. 打开微信 2. 点击通讯录3. 滚动鼠标到最顶部(防止已经滚动了一部分了)4. 获取联系人列表5. 找到最后一个空格所在的位置(后一个就是真正的联系人了)6. 点击第一个联系人7.记录下上一个联系人的微信号7. 无限循环按键盘下箭头当前微信号与上一个相同的时候,说明到底部了,可以...

学习RPA两年了,我得到了什么?

学习RPA两年了,我得到了什么?

两年前,由于工作上的需要,我开始接触RPA(Robotic Process Automation)技术。作为一种新兴的科技工具,RPA的自学为我带来了许多好处和满足感。过程:1⃣️.学习RPA:学习的软件是影刀,其实学影刀还挺方便的,软件上配套的课程就有完整的,不用自己去找,大概学了2周,就把初级课...

太香了! 用影刀RPA控制ChatGPT自动产出内容

太香了! 用影刀RPA控制ChatGPT自动产出内容

用过 ChatGPT 的小伙伴都懂得自动生成内容有多爽不管是小红书笔记、dou 音脚本,还是公号文章打磨好输出模板就能稳定地产出高质量内容,再也不纠结没内容了但要是想批量做出多条内容,每段提示词都要重新输入简直把自己变成了莫得感情的“提示词录入器”这时,就轮到解放双手的影刀RPA上场啦你只需要把提问...