Gradio从入门到精通(10)---基于星火大模型的聊天机器人


前言

前面的章节介绍了Gradio的接口类,组件,让我们对Gradio有了整体的认识,接下来,我们使用Gradio一步一步搭建一个基于大模型的聊天机器人,整个过程循序渐进,从最简单的问答,到多模态,再到引入大模型,langchain等,让我们开始吧;

一、傻瓜机器人

在Gradio中构建聊天机器人只需要调用gr.ChatInterface()接口即可完成界面搭建,接下来我们写一个很傻瓜的机器人示例代码如下

import random
import gradio as gr

def alternatingly_agree(message, history):
    if len(history) % 2 == 0:
        return f"Yes, I do think that '{message}'"
    else:
        return "I don't think so"

gr.ChatInterface(alternatingly_agree).launch()

在这里插入图片描述

二、流媒体聊天机器人

我们在使用聊天机器人时,机器人响应往往是流式传输,所以这里我们模拟一个流式响应的机器人回复;当响应流式传输时,“提交”按钮会变成“停止”按钮,可用于停止生成器功能。您可以使用“stop_btn”参数自定义“停止”按钮的外观和行为。

import time
import gradio as gr

def slow_echo(message, history):
    for i in range(len(message)):
        time.sleep(0.3)
        yield "You typed: " + message[: i+1]

gr.ChatInterface(slow_echo).launch()

在这里插入图片描述

三、自定义聊天界面

gr.ChatInterface包含许多参数,您可以使用这些参数来自定义聊天机器人的外观及功能,使其符合你的需求

参数名描述
fn要围绕聊天界面包装的函数。该函数应接受两个参数:一个字符串输入消息和一个由形如[[user_message, bot_message], ...]的两元素列表组成的列表,表示聊天历史,并返回一个字符串响应。有关聊天历史格式的更多信息,请参阅Chatbot文档。
multimodal如果为True,聊天界面将使用gr.MultimodalTextbox组件作为输入,允许上传多媒体文件。如果为False,聊天界面将使用gr.Textbox组件作为输入。
chatbot如果想要自定义聊天机器人的属性,则可以使用gr.Chatbot组件的实例作为聊天界面的聊天机器人。如果未提供,将创建一个默认的gr.Chatbot组件。
textbox如果想要自定义文本框的属性,则可以使用gr.Textboxgr.MultimodalTextbox组件的实例作为聊天界面的文本框。如果未提供,将创建默认的gr.Textboxgr.MultimodalTextbox组件。
additional_inputs聊天机器人所需的额外输入的Gradio组件实例(或其字符串快捷方式)的单个实例或实例列表。如果组件尚未在周围的Blocks中渲染,则这些组件将在聊天机器人下方的手风琴(accordion)中显示。
additional_inputs_accordion_name已弃用。将在Gradio的未来版本中移除。请使用additional_inputs_accordion参数代替。
additional_inputs_accordion如果提供字符串,则这是用于包含额外输入的gr.Accordion的标签。也可以提供gr.Accordion对象来配置包含额外输入的容器的其他属性。默认为gr.Accordion(label="Additional Inputs", open=False)。此参数仅在提供additional_inputs时使用。
examples函数的示例输入;如果提供,则显示在聊天机器人下方,并可通过点击来填充聊天机器人。

代码如下(示例):

import gradio as gr

def yes_man(message, history):
    if message.endswith("?"):
        return "Yes"
    else:
        return "Ask me anything!"

gr.ChatInterface(
    yes_man,
    chatbot=gr.Chatbot(height=300),
    textbox=gr.Textbox(placeholder="Ask me a yes or no question", container=False, scale=7),
    title="Yes Man",
    description="Ask Yes Man any question",
    theme="soft",
    examples=["Hello", "Am I cool?", "Are tomatoes vegetables?"],
    cache_examples=True,
    retry_btn=None,
    undo_btn="Delete Previous",
    clear_btn="Clear",
).launch()

在这里插入图片描述

四、使用火星大模型的聊天机器人

搜索了一下火星大模型送一些免费的token,所以这里调用火星大模型做一个实例,几行代码就可以打造一个基于大模型的聊天机器人。
在逛网注册后,进入服务管理
在这里插入图片描述
创建新应用,名字自定义
在这里插入图片描述
创建完成后,选择对应模型可以看到对应的APIKey和APISecret在这里插入图片描述
有了这些信息,我们通过OpenAI SDK 几行代码就可以做一个聊天机器人,将下列代码中的key和secret换成你的

# 导入SDK,发起请求

from openai import OpenAI  # 从openai模块导入OpenAI类,用于实例化客户端
import gradio as gr  # 导入gradio库,用于创建交互式Web界面

# 控制台获取key和secret拼接,假使APIKey是key123456,APISecret是secret123456
spark_api_key="key123456:secret123456"   #这里一定要换成你的哦  !!!!!!!!!!!!!!!
spark_base_url = 'https://spark-api-open.xf-yun.com/v1' # 指向讯飞星火的请求地址
spark_model='generalv3.5'  # 指定请求的版本
client = OpenAI(api_key=spark_api_key,base_url=spark_base_url)  # 使用你的API密钥实例化OpenAI客户端
 
 
# 定义predict函数,它接受用户的消息和聊天历史作为输入
def predict(message, history):
    history_openai_format = []  # 创建一个空列表用于存储处理过的历史记录
    for human, assistant in history:  # 遍历历史对话
        # 将每条历史消息按照OpenAI所需的格式添加到列表中
        history_openai_format.append({"role": "user", "content": human })
        history_openai_format.append({"role": "assistant", "content":assistant})
    # 将最新的用户消息也以相同的格式添加到列表
    history_openai_format.append({"role": "user", "content": message})
  
    # 使用客户端请求GPT-3.5-turbo模型的回复,传入处理过的历史消息和其他参数
    response = client.chat.completions.create(model=spark_model,
    messages= history_openai_format,
    temperature=1.0,
    stream=True)
 
    #print(response.choices[0].message)  # 打印OpenAI的响应
    partial_message = ""  # 初始化用于收集模型响应的字符串
    for chunk in response:  # 遍历响应中的每个部分
        if chunk.choices[0].delta.content is not None:  # 如果响应部分有内容
              partial_message += chunk.choices[0].delta.content  # 将其添加到累积的响应字符串completion.choices[0].message
              yield partial_message  # 使用yield返回累积的响应字符串,实现流式响应
 
 
gr.ChatInterface(predict).launch()  # 使用Gradio的ChatInterface调用predict函数,并启动Web界面

好了,看看效果吧
在这里插入图片描述


总结

本章展示了一步一步使用gradio和火星大模型打造聊天机器人的过程,可以看到打造基于gradio的应用速度非常快,几行代码就可以完成一个应用。

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LinfineEdu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值