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

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

相关文章
|
5月前
|
存储 人工智能 搜索推荐
LangGraph 记忆系统实战:反馈循环 + 动态 Prompt 让 AI 持续学习
本文介绍基于LangGraph构建的双层记忆系统,通过短期与长期记忆协同,实现AI代理的持续学习。短期记忆管理会话内上下文,长期记忆跨会话存储用户偏好与决策,结合人机协作反馈循环,动态更新提示词,使代理具备个性化响应与行为进化能力。
1096 10
LangGraph 记忆系统实战:反馈循环 + 动态 Prompt 让 AI 持续学习
基于Gradio的GPT聊天程序
这篇文章介绍了如何使用Gradio库创建一个基于ChatGPT的聊天程序,包括详细的代码实现和所需的依赖库。
基于Gradio的GPT聊天程序
|
数据采集 Python
Python实用记录(七):通过retinaface对CASIA-WebFace人脸数据集进行清洗,并把错误图路径放入txt文档
使用RetinaFace模型对CASIA-WebFace人脸数据集进行清洗,并将无法检测到人脸的图片路径记录到txt文档中。
386 1
|
机器学习/深度学习 人工智能 自然语言处理
很火的DeepSeek到底是什么
DeepSeek,全称杭州深度求索人工智能基础技术研究有限公司,成立于2023年。因推出开源 AI 模型 DeepSeek-R1 而引起了广泛关注。与ChatGPT相比,大幅降低了推理模型的成本。
4381 36
|
人工智能 开发框架 算法
Qwen-Agent:阿里通义开源 AI Agent 应用开发框架,支持构建多智能体,具备自动记忆上下文等能力
Qwen-Agent 是阿里通义开源的一个基于 Qwen 模型的 Agent 应用开发框架,支持指令遵循、工具使用、规划和记忆能力,适用于构建复杂的智能代理应用。
10404 13
Qwen-Agent:阿里通义开源 AI Agent 应用开发框架,支持构建多智能体,具备自动记忆上下文等能力
|
存储 机器人 API
如何使用渐变块创建自定义聊天机器人
本文是一篇使用Gradio库的Blocks API创建自定义聊天机器人界面的教程,涵盖了从基础聊天机器人到支持流式响应、用户反馈(喜欢/不喜欢)以及Markdown、图像、音频和视频等多媒体内容的高级功能实现方法。
如何使用渐变块创建自定义聊天机器人
|
人工智能 并行计算 监控
深入剖析 Qwen2.5 - 32B 模型在 VLLM 上的单机三卡部署与运行
本文深入探讨了Qwen2.5 - 32B模型在VLLM框架上的部署过程,从模型下载、启动命令、资源占用分析到GPU资源分配及CUDA图应用,详述了大模型运行的挑战与优化策略,强调了硬件资源规划与技术调优的重要性。
8330 2
|
人工智能 API 知识图谱
使用SiliconCloud尝试GraphRag——以《三国演义》为例(手把手教程,适合小白)
本文介绍了使用不同模型和平台体验GraphRAG的过程。首先通过OpenAI的GPT-4O Mini模型对沈从文的《边城》进行了分析,展示了如何安装GraphRAG并配置参数,最终实现了对文本的有效查询。随后,文章探讨了在国内环境下使用SiliconCloud作为替代方案的可能性,以《三国演义》为例,演示了使用SiliconCloud模型进行相同操作的步骤。此外,还讨论了使用本地模型如Ollama和LM Studio的可能性,尽管受限于硬件条件未能实际运行。最后,提出了混合使用在线对话模型API与本地或在线嵌入模型的方法,并列举了一些能够使GraphRAG流程跑通的大模型。
804 10
使用SiliconCloud尝试GraphRag——以《三国演义》为例(手把手教程,适合小白)