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()

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

相关文章
|
人工智能 缓存 安全
LangChain开发环境准备-实现私有大模型OpenAI标准接口封装
今天这节课我就将带领小伙伴们将这未完成的一步补全,实现私有大模型OpenAI标准接口封装,并完成LangChain对大模型的调用与测试
2860 0
|
7月前
|
存储 缓存 文件存储
uv安装python及其依赖的加速方法
国内在使用uv的时候,可能会涉及到装python的速度太慢的问题,为了解决这个问题,可以使用`UV_PYTHON_INSTALL_MIRROR`这个环境变量。除此以外,对于多人协作场景,`UV_CACHE_DIR`也是一个有用的环境变量。本文会介绍这两个变量。
5146 10
|
XML 存储 API
RAG效果优化:高质量文档解析详解
本文介绍了如何通过高质量的文档解析提升RAG系统整体的效果。
16444 15
|
11月前
|
人工智能 自然语言处理 人机交互
CosyVoice 2.0:阿里开源升级版语音生成大模型,支持多语言和跨语言语音合成,提升发音和音色等的准确性
CosyVoice 2.0 是阿里巴巴通义实验室推出的语音生成大模型升级版,通过有限标量量化技术和块感知因果流匹配模型,显著提升了发音准确性、音色一致性和音质,支持多语言和流式推理,适合实时语音合成场景。
7425 22
CosyVoice 2.0:阿里开源升级版语音生成大模型,支持多语言和跨语言语音合成,提升发音和音色等的准确性
|
10月前
|
自然语言处理 前端开发 开发者
使用 modelscope-studio 构建你的 Gradio 应用
modelscope-studio是一个基于 Gradio 的三方组件库,它可以为开发者提供更定制化的界面搭建能力和更丰富的组件使用形式。
678 26
|
存储 机器人 API
如何使用渐变块创建自定义聊天机器人
本文是一篇使用Gradio库的Blocks API创建自定义聊天机器人界面的教程,涵盖了从基础聊天机器人到支持流式响应、用户反馈(喜欢/不喜欢)以及Markdown、图像、音频和视频等多媒体内容的高级功能实现方法。
如何使用渐变块创建自定义聊天机器人
Deepseek开源多模态LLM模型框架Janus,魔搭社区最佳实践
deepseek近期推出了简单、统一且灵活的多模态框架Janus,它能够统一处理多模态理解和生成任务。让我们一起来了解一下吧。
|
Linux 测试技术 API
Ollama+Qwen2,轻松搭建支持函数调用的聊天系统
本文介绍如何通过Ollama结合Qwen2,搭建OpenAI格式的聊天API,并与外部函数结合来拓展模型的更多功能。
|
机器学习/深度学习 人工智能 数据可视化
# Python的一个非常cool的库Gradio
# Python的一个非常cool的库Gradio
433 0