Gradio 流式输出教程

简介: 本文是Gradio流式输出教程,介绍了如何通过Gradio的Blocks API实现聊天机器人的流式文本输出,包括两个示例:一个简单的ChatBot流式输出示例和一个更复杂的输入处理与输出分离的流式输出示例,旨在改善用户体验并为实时处理积累技术。

Gradio 流式输出教程

随着AIGC的发展,我逐渐发现我有许多项目,如果都是等待生成结束才传输出去,就会导致等待时间非常长,影响用户使用体验。在这里流式输出就显得很有必要了,同时也是为后续的实时处理积累一下前置条件。

一、具体思路

核心步骤主要参考上一篇博客:如何使用渐变块创建自定义聊天机器人中的 流式传输部分。

1、流式输出的ChatBot 示例一

import gradio as gr
import random
import time

with gr.Blocks() as demo:
    chatbot = gr.Chatbot()
    msg = gr.Textbox()
    clear = gr.Button("Clear")

    def user(user_message, history):
        return "", history + [[user_message, None]]

    def bot(history):
        bot_message = random.choice(["How are you?", "I love you", "I'm very hungry"])
        history[-1][1] = ""
        for character in bot_message:
            history[-1][1] += character
            time.sleep(0.05)
            yield history


    msg.submit(user, [msg, chatbot], [msg, chatbot], queue=False).then(
        bot, chatbot, chatbot
    )
    clear.click(lambda: None, None, chatbot, queue=False)

demo.queue()
demo.launch()

运行结果
在这里插入图片描述

流式输出在上面的例子里面就实现了,不过不属于最小理解单位,我对其进一步拆分为:输入框-输出框用于理解。

2、流式输出示例二

代码功能:

  1. 在输入框输入 任何字符串
  2. 在输出框流式输出 拼接的字符串。

实现逻辑:
1、将输入和输入处理、输出拆分成两个函数user()、bot()。
2、user只负责输入用户输入的内容,bot负责对输入的内容进行处理,并使用yield关键词(可以理解为特殊的 return),在每次循环都会返回当前累积到的消息字符串,从而实现逐字显示的效果。
3、拆分成的两个函数,第一个跟平常的button绑定函数没有什么区别,第二个函数就是在第一个的基础上放到.then()
里面,表示在执行完第一个函数之后的return 结果 做为then的输入执行第二个函数。

import gradio as gr
import random
import time

with gr.Blocks() as demo:
    chatbot = gr.Textbox(placeholder='输出框...')
    msg = gr.Textbox(placeholder='输入框...')
    with gr.Column():
        submit=gr.Button('上传')
        clear = gr.Button("Clear")

    def user(user_message):

        return  user_message


    def bot(history):
        print(history)
        bot_message = random.choice(["How are you?", "I love you", "I'm very hungry"])
        bot_message+=history
        botmess=''
        for character in bot_message:
            botmess += character
            time.sleep(0.05)
            yield botmess


    msg.submit(user, msg, chatbot, queue=False).then(bot, chatbot, chatbot)
    submit.click(user,msg,msg,queue=False).then(bot,msg,chatbot)

    clear.click(lambda: None, None, chatbot, queue=False)

demo.queue()
demo.launch()

运行结果如下:
在这里插入图片描述

相关文章
|
6月前
|
存储 缓存 文件存储
uv安装python及其依赖的加速方法
国内在使用uv的时候,可能会涉及到装python的速度太慢的问题,为了解决这个问题,可以使用`UV_PYTHON_INSTALL_MIRROR`这个环境变量。除此以外,对于多人协作场景,`UV_CACHE_DIR`也是一个有用的环境变量。本文会介绍这两个变量。
4302 10
|
10月前
|
人工智能 自然语言处理 人机交互
CosyVoice 2.0:阿里开源升级版语音生成大模型,支持多语言和跨语言语音合成,提升发音和音色等的准确性
CosyVoice 2.0 是阿里巴巴通义实验室推出的语音生成大模型升级版,通过有限标量量化技术和块感知因果流匹配模型,显著提升了发音准确性、音色一致性和音质,支持多语言和流式推理,适合实时语音合成场景。
6816 22
CosyVoice 2.0:阿里开源升级版语音生成大模型,支持多语言和跨语言语音合成,提升发音和音色等的准确性
|
9月前
|
自然语言处理 前端开发 开发者
使用 modelscope-studio 构建你的 Gradio 应用
modelscope-studio是一个基于 Gradio 的三方组件库,它可以为开发者提供更定制化的界面搭建能力和更丰富的组件使用形式。
570 26
|
12月前
|
计算机视觉
Deepseek开源多模态LLM模型框架Janus,魔搭社区最佳实践
deepseek近期推出了简单、统一且灵活的多模态框架Janus,它能够统一处理多模态理解和生成任务。让我们一起来了解一下吧。
|
存储 机器人 API
如何使用渐变块创建自定义聊天机器人
本文是一篇使用Gradio库的Blocks API创建自定义聊天机器人界面的教程,涵盖了从基础聊天机器人到支持流式响应、用户反馈(喜欢/不喜欢)以及Markdown、图像、音频和视频等多媒体内容的高级功能实现方法。
如何使用渐变块创建自定义聊天机器人
|
12月前
|
机器学习/深度学习 开发者 数据格式
Gradio如何使用
**Gradio** 是一个开源 Python 库,用于快速创建和部署机器学习模型的用户界面。它支持多种输入输出形式,如文本、图像、音频等,无需复杂 Web 开发知识即可实现模型的直观展示和交互。Gradio 特点包括简单易用、实时更新、多样的输入输出形式以及轻松部署。通过几个简单的步骤,即可创建和分享功能强大的机器学习应用。
427 0
|
机器学习/深度学习 人工智能 数据可视化
# Python的一个非常cool的库Gradio
# Python的一个非常cool的库Gradio
369 0
|
机器学习/深度学习 人工智能 编解码
【机器学习】阿里Qwen-VL:基于FastAPI私有化部署你的第一个AI多模态大模型
【机器学习】阿里Qwen-VL:基于FastAPI私有化部署你的第一个AI多模态大模型
3663 1
|
弹性计算 并行计算 Shell
在云上搭建CosyVoice环境-保姆级教程
发现个好玩的模型,阿里最近开源的,可以便捷的复刻人声,本文提供全套安装过程。仓库地址:https://github.com/FunAudioLLM/CosyVoice。
5197 1
|
机器学习/深度学习 前端开发 安全
【Gradio】Could not create share link
【Gradio】Could not create share link
6098 7