基于星火和Gradio的聊天机器人

这篇具有很好参考价值的文章主要介绍了基于星火和Gradio的聊天机器人。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

星火大模型官网:https://xinghuo.xfyun.cn/

1 创建虚拟环境(windows)

conda create -n Gradio python=3.8
pip install gradio

中间遇到os报错,解决方案:

pip install aiofiles==23.2.1

2 代码

SparkDesk.py:
下面代码是一个用于与基于WebSocket的聊天机器人API进行交互的Python实现。下面逐个解释代码的每个部分:

  1. 代码导入了几个模块,用于各种功能,例如线程处理(_thread),base64编码,哈希算法,JSON操作,与时间相关的操作,URL解析,SSL处理,CSV处理以及websocket库。
  2. 接下来,代码定义了一个名为Ws_Param的类,该类用于初始化建立WebSocket连接和生成URL所需的参数。
  3. Ws_Param类中有一个名为create_url()的方法,用于生成建立WebSocket连接的URL。它使用HMAC-SHA256加密构建必要的身份验证头。
  4. 代码定义了几个WebSocket事件处理函数:
    a. 5.on_error:处理WebSocket连接期间发生的错误。
    b. on_close:处理WebSocket连接关闭事件。
    c. on_open:处理WebSocket连接打开事件。
    d. on_message:处理WebSocket连接收到的传入消息。
  5. run函数设计为在单独的线程中运行,并向聊天机器人API发送初始请求载荷。
  6. gen_params函数是一个辅助函数,用于生成聊天机器人API请求的JSON载荷。
  7. main函数是启动WebSocket连接的入口点。它创建Ws_Param类的实例,生成WebSocket URL,并使用websocket库中的WebSocketApp类来初始化WebSocket连接。
  8. ask_question函数是对main函数的封装,提供了一个便捷的方法来向聊天机器人API提问问题。
  9. 最后,startSparkOne函数是ask_question的封装函数,可以通过将问题作为参数传递给它来启动与聊天机器人API的交互。
    要使用此代码,在调用startSparkOne函数时,您需要为appid,api_key,api_secret和gpt_url参数提供适当的值。
import _thread as thread
import base64
import datetime
import hashlib
import hmac
import json
import pickle
import time
from urllib.parse import urlparse
import ssl
import sys
import io
import csv
from datetime import datetime
from time import mktime
from urllib.parse import urlencode
from wsgiref.handlers import format_date_time
# websocket-client
import websocket


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, status_code, reason):
    print("")


# 收到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):
    # 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:
            ws.close()


def gen_params(appid, question):
    """
    通过appid和用户的提问来生成请参数
    """
    data = {
        "header": {
            "app_id": appid,
            "uid": "1234"
        },
        "parameter": {
            "chat": {
                "domain": "general",
                "random_threshold": 0.5,
                "max_tokens": 2048,
                "auditing": "default"
            }
        },
        "payload": {
            "message": {
                "text": [
                    {"role": "user", "content": question}
                ]
            }
        }
    }
    return data


def main(appid, api_key, api_secret, gpt_url, question):
    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 = appid
    ws.question = question
    ws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})


def ask_question(question):
    main(appid="",
         api_secret="",
         api_key="",
         gpt_url="ws://spark-api.xf-yun.com/v1.1/chat",
         question=question)


def startSparkOne(question):
    ask_question(question)

app.py:
这段代码实现了一个简单的聊天界面,用户可以输入消息与SparkDesk Chatbot进行交互。下面对每部分代码进行详细解释:

  1. 导入了random模块,用于随机生成响应消息,gradio模块用于创建交互界面,startSparkOne来自SparkDesk模块,用于与聊天机器人进行交互。另外还导入了sys和io模块,用于处理标准输出和字符串流对象。
  2. random_response函数是一个用于生成随机响应的函数。它接收两个参数,message表示用户输入的消息,history表示之前的对话历史。在函数内部,它创建了一个字符串流对象,并将标准输出重定向到该流对象。然后调用startSparkOne函数与聊天机器人交互,并将机器人的回复输出到标准输出流。最后,它将标准输出重定向回原来的标准输出,并获取标准输出流的内容,即机器人的回复。
  3. demo是一个gr.ChatInterface对象,用于创建聊天界面。它接受两个参数,第一个参数是一个函数,用于处理用户输入和生成响应,这里使用了random_response函数。第二个参数是界面的标题和描述。
  4. 最后,调用demo.launch()启动聊天界面。
    通过这段代码,可以在一个简单的界面中输入消息与SparkDesk Chatbot进行交互,并获得机器人的随机响应。
import random
import gradio as gr
from SparkDesk import startSparkOne
import sys, io

def random_response(message, history):
    # 创建一个字符串流对象,并将其设置为标准输出
    old_stdout = sys.stdout
    new_stdout = io.StringIO()
    sys.stdout = new_stdout

    startSparkOne(message)

    # 将标准输出重新设置为原来的标准输出
    sys.stdout = old_stdout

    # 获取标准输出的内容
    response = new_stdout.getvalue()

    return response


demo = gr.ChatInterface(
    random_response,
    title="SparkDesk Chatbot",
    description="输入消息来与 SparkDesk Chatbot 进行交互。",
)

demo.launch()

3 效果

基于星火和Gradio的聊天机器人,机器人,python,人工智能,LLM文章来源地址https://www.toymoban.com/news/detail-636605.html

到了这里,关于基于星火和Gradio的聊天机器人的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • NoneBot2,基于Python的聊天机器人

    NoneBot2 是一个现代、跨平台、可扩展的 Python 聊天机器人框架,它基于 Python 的类型注解和异步特性,能够为你的需求实现提供便捷灵活的支持。 NoneBot2 具有丰富的插件生态系统,可以实现多种功能,例如自动回复、天气查询、消息推送等等。此外,它还提供了完善的文档和

    2023年04月16日
    浏览(36)
  • ChatGPT——OpenAI推出的人工智能聊天机器人

    ChatGPT——OpenAI推出的人工智能聊天机器人 [ 编辑] ChatGPT 全称为“chat Generative Pre-trained Transformer”,翻译成中文就是生成型预训练变换模型。它是美国公司OpenAI在2022年11月30日发布研发的聊天机器人程序,能用于问答、文本摘要生成、机器翻译、分类、代码生成和对话AI。 [1

    2024年02月04日
    浏览(61)
  • 常见大模型对比[ChatGPT(智能聊天机器人)、Newbing(必应)、Bard(巴德)、讯飞星火认知大模型(SparkDesk)、ChatGLM-6B]

    目录 1 引言 2 选取常见的大模型作为对比项 2.1什么是大模型 2.2 常见大模型 3 相关的大模型介绍和功能 3.1 ChatGPT 3.1.1 ChatGPT的介绍 3.1.2 ChatGPT的原理 3.1.3 ChatGPT的特点 3.2 Newbing 3.2.1 Newbing的介绍 3.2.2 GPT-4的原理 3.2.3 Newbing的特点 3.3 ChatGLM-6B 3.3.1 ChatGLM的介绍 3.3.2 ChatGLM的原理 3.3

    2024年02月11日
    浏览(31)
  • 聊天机器人与人工智能的产业链与生态系统

    作者:禅与计算机程序设计艺术 1. 背景介绍 1.1. 人工智能与聊天机器人的定义 人工智能(AI)是指那些能够执行人类智能行为的非生物机器。它通过学习和经验来改善自身表现,并最终实现人工智能系统与人类智能相似。 聊天机器人是一种自动化或半自动化的对话系统,旨在模

    2024年02月21日
    浏览(33)
  • 【0元试用微软 Azure人工智能认知服务】我做了个群聊天机器人

    我这边参加了CSDN与微软Azure举办的0元试用微软Azure人工智能认知服务活动。第一次使用微软Azure 认知服务,老实说,还是满心期待的。 登录地址: 点此开启试用之旅 ,这个认知服务有点不好找,还有有个搜索的功能,直接搜索一下,认知服务,即可找到本次测评所需要的服

    2024年02月05日
    浏览(38)
  • Elasticsearch:聊天机器人、人工智能和人力资源:电信公司和企业组织的成功组合

    作者:来自 Elastic Jürgen Obermann, Piotr Kobziakowski 让我们来谈谈大型企业人力资源领域中一些很酷且改变游戏规则的东西:生成式 AI 和 Elastic Stack 的绝佳组合。 现在,想象一下大型电信公司的典型人力资源部门 — 他们正在处理一百万件事情,对吗? 从回答无休止的员工查询到

    2024年01月24日
    浏览(53)
  • 基于Python+百度语音的智能语音ChatGPT聊天机器人(机器学习+深度学习+语义识别)含全部工程源码 适合个人二次开发

    本项目基于机器学习和语义识别技术,让机器人理解文本并进行合适的答复。伙伴们可以通过该工程源码,进行个人二次开发,比如使用语音与机器人交流,实现智能问答、智能音箱及智能机器宠物等等。 当然针对现在最火爆的 ChatGPT等通用大语言模型 ,伙伴们可以直接将其

    2024年02月07日
    浏览(37)
  • ChatGPT、Google Bard、Claude2、新BING哪一款人工智能聊天机器人适合自己

      人工智能聊天机器人正在提高数无数专业人士的工作效率。下面我们就来看看目前最流行的几款强大的人工智能工具,以及它们具体如何帮助到你。 今年7月AI圈最大的动静之一便是AI初创公司Anthropic发布了其AI聊天机器人Claude最新版本——Claude2。该聊天机器人对标OpenAI的

    2024年02月11日
    浏览(40)
  • 【人工智能】谷歌的巴德聊天机器人向公众开放 | Google‘s Bard Chatbot Opens to the Public

      Google is trying to balance AI progress with caution. 谷歌正试图谨慎地平衡人工智能的进展。 目录 https://bard.google.com/

    2024年02月09日
    浏览(35)
  • 对话机器人:使用 Python TensorFlow 训练 Chatbot 聊天机器人

    作者:禅与计算机程序设计艺术 为了能够在Facebook Messenger上与用户进行实时的沟通,开发者需要自行构建聊天机器人。然而,构建聊天机器人的过程却很复杂,需要掌握众多的技术、技能和知识。本文通过详细地阐述了如何用Python语言构建一个Facebook Messenger聊天机器人,并分

    2024年02月08日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包