初学gradio:实现聊天机器人demo

本文介绍了如何使用Gradio这个开源库在Python中创建一个基于大模型的聊天机器人,通过Chatbot组件展示了聊天过程,并提供了简单的安装步骤和参数设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  Gradio是python中一种用于构建AI界面的开源库,可以让您快速构建自己的应用程序并与AI模型进行交互,轻松部署模型。官方文档:Gradio,本文我们尝试使用Gradio构建一个基于大模型的聊天机器人demo。

安装

  Gradio的安装非常简单,代码:

pip install gradio

聊天机器人demo实现

  Gradio提供了Chatbot组件用于展示聊天机器人的输出,包括用户提交的消息和机器人的回复。它支持一些Markdown语法,包括粗体、斜体、代码和图片等。Chatbot模块的输入不接受用户输入,而是通过函数返回的列表来设置聊天内容。返回的列表应包含多个内部列表,每个内部列表包含两个元素:用户消息和机器人回复。消息可以是字符串、元组或None。如果消息是字符串,可以包含Markdown格式的文本。如果消息是元组,应包含文件路径和可选的替代文本。值为None的消息将不会显示在聊天界面上。

参数描述数据类型默认值
valueChatbot的默认值,应为一个列表,其中每个元素为一个内部列表,包含用户消息和机器人回复。可以是可调用对象,在应用程序加载时设置初始值。list[list[str | tuple[str] | tuple[str, str] | None]] | Callable | NoneNone
color_map颜色映射,用于设置不同类型消息的颜色。dict[str, str] | NoneNone
label组件的标签。str | NoneNone
every如果value是一个可调用对象,在客户端连接开启时每隔一段时间运行函数。以秒为单位解释。队列必须启用。float | NoneNone
show_label是否显示标签。boolTrue
container是否将组件放入容器中,提供一些额外的边框填充。boolTrue
scale相对于相邻组件的宽度比例。例如,如果组件A的scale=2,组件B的scale=1,则组件A的宽度是组件B的两倍。应为整数。int | NoneNone
min_width最小像素宽度,如果屏幕空间不足以满足此值,则换行。如果某个scale值导致该组件比min_width更窄,则首先遵守min_width参数。int160
visible组件是否可见。 bool True
elem_id作为HTML DOM中此组件的id分配的可选字符串。可用于定位CSS样式。str | NoneNone
elem_classes作为HTML DOM中此组件的类分配的可选字符串列表。可用于定位CSS样式。list[str] | str | NoneNone
height组件的高度(以像素为单位)。int | NoneNone
latex_delimiters用于渲染LaTeX表达式的左右分隔符及其显示方式的设置。list[dict[str, str | bool]] | NoneNone

  简单使用的demo:

import gradio as gr
import random
import time

with gr.Blocks() as demo:
    chatbot = gr.Chatbot()
    msg = gr.Textbox()
    clear = gr.ClearButton([msg, chatbot])

    def respond(message, chat_history):
        bot_message = random.choice(["How are you?", "I love you", "I'm very hungry"])
        chat_history.append((message, bot_message))
        time.sleep(2)
        return "", chat_history

    msg.submit(respond, [msg, chatbot], [msg, chatbot])

demo.launch()

效果:
在这里插入图片描述
  此外,Gradio还提供了一个多模态的聊天机器人gr.ChatInterface类,它可以方便地创建一个具有多模态输入聊天框的机器人交互界面。

def echo(message, history):
    return message["text"]

chatbot = gr.Chatbot(value=[[None, "您好,我是chat。"]],bubble_full_width = False,
                     avatar_images=('C:\workplace\pycharm_workplace\pythonProject\pics\man1.png','C:\workplace\pycharm_workplace\pythonProject\pics\women1.png'))

chatbot_infer = gr.ChatInterface(fn=echo, examples=[{"text": "我有些难过"}, {"text": "你可以安慰我吗"}], multimodal=True, chatbot=chatbot,submit_btn='发送')

  echo是推理的函数,在这个例子中,机器人会将用户的输入值返回回来:
在这里插入图片描述

### 使用 Gradio 构建聊天机器人的示例教程 #### 定义聊天功能 为了创建一个基于 Gradio聊天机器人,首先需要定义聊天的功能逻辑。这通常涉及到接收用户的输入并返回相应的回复。可以利用 Python 函数来实现这一过程[^1]。 ```python def chat_response(message, history): # 这里可以根据 message 和 history 来决定响应的内容 response = "这是对您消息的一个回应" return response ``` #### 示例:回答“是”或“否”的聊天机器人 下面是一个简单的例子,展示了如何建立仅能给出肯定或否定答复的对话系统: ```python import gradio as gr def simple_chatbot(user_input): positive_keywords = ["好", "同意"] negative_keywords = ["不好", "不同意"] if any(word in user_input for word in positive_keywords): return '是' elif any(word in user_input for word in negative_keywords): return '否' else: return '我不明白你说的意思' iface = gr.Interface(fn=simple_chatbot, inputs="text", outputs="text") iface.launch() ``` 此代码片段实现了基本的文字匹配机制,并通过 `gr.Interface` 将其封装成易于使用的界面。 #### 另一个使用用户输入和历史记录的示例 更复杂的场景可能还需要考虑之前的交互情况。因此,在设计函数时应接受额外的历史参数作为输入之一: ```python def advanced_chatbot(current_message, conversation_history=[]): previous_messages = "\n".join(conversation_history) # 基于当前的消息以及过去的交流情况进行处理... new_reply = f"{previous_messages}\n现在说:{current_message}" updated_history = conversation_history + [new_reply] return new_reply, updated_history[:-1] ``` 这里展示了一个更加动态的方法,它不仅关注即时的信息交换,还能够记住过往的交谈内容以便提供连贯的服务体验。 #### 流式聊天机器人 对于实时性要求较高的应用场合,则可采用流式的通信方式。这种方式允许数据分片发送而不必等待整个请求完成后再做反应: ```python from threading import Thread import time def stream_chatbot(input_text): def send_chunked_replies(): chunks = input_text.split() # 或者其他分割策略 for chunk in chunks: yield {"message":chunk} time.sleep(0.5) # 模拟延迟 thread = Thread(target=(lambda : list(send_chunked_replies()))) thread.start() stream_interface = gr.ChatInterface(stream_chatbot) stream_interface.launch() ``` 上述实例中引入了多线程技术以模拟异步的数据推送效果,从而提高了用户体验的质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一本糊涂张~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值