gradio快速入门 — Interface状态

目录

到目前为止,我们假设您的演示是无状态的 :它们不会保留单个函数调用以外的信息。如果您想根据与演示的先前交互来修改演示的行为,该怎么办? Gradio 中有两种方法:全局状态 和会话状态。

全局状态

如果状态是所有函数调用和所有用户都应该可以访问的,则可以在函数调用之外创建一个变量,并在函数内部访问它。例如,您可以在函数外部加载一个大型模型,并在函数内部使用它,这样每次函数调用都不需要重新加载模型。

python 复制代码
import gradio as gr

scores = []

def track_score(score):
    scores.append(score)
    top_scores = sorted(scores, reverse=True)[:3]
    return top_scores

demo = gr.Interface(
    track_score, 
    gr.Number(label="Score"), 
    gr.JSON(label="Top Scores")
)
demo.launch()

在上面的代码中,scores数组在所有用户之间共享。如果多个用户正在访问此演示,他们的分数将全部添加到同一个列表中,并从此共享引用中收集返回的前 3 个分数。

会话状态

Gradio 支持的另一种数据持久性类型是会话状态,其中数据在页面会话中的多次提交中保持不变。但是,数据不会在模型的不同用户之间共享。要将数据存储在会话状态中,您需要做三件事:

  1. 将一个额外的参数传入你的函数,它代表接口的状态。
  2. 在函数的最后,将状态的更新值作为额外的返回值返回。
  3. 在创建Interface时添加'state'输入和'state'输出组件

这是一个用于说明会话状态的简单应用程序 - 该应用程序仅存储用户以前的提交并将其显示给用户:

python 复制代码
import gradio as gr

def store_message(message: str, history: list[str]):
    output = {
        "Current messages": message,
        "Previous messages": history[::-1]
    }
    history.append(message)
    return output, history

demo = gr.Interface(fn=store_message, 
                    inputs=["textbox", gr.State(value=[])], 
                    outputs=["json", gr.State()])

demo.launch()

请注意,状态在每个页面的提交之间如何保持不变,但如果您在另一个选项卡中加载此演示(或刷新页面),则演示将不会共享聊天历史记录。在这里,我们不能将提交历史记录存储在全局变量中,否则提交历史记录会在不同的用户之间混乱。

的初始值State默认None为。如果将参数传递给value的参数gr.State(),则它将被用作状态的默认值。

注意:该类Interface仅支持单个会话状态变量(尽管它可以是包含多个元素的列表)。对于更复杂的用例,您可以使用支持多个State变量的 Blocks 。或者,如果您正在构建一个维护用户状态的聊天机器人,请考虑使用自动管理状态的ChatInterface抽象。

相关推荐
云杂项2 分钟前
tmux指南:安装、配置与高效使用(Ubuntu上)
linux·服务器·ubuntu
智鸟科技GemeOpen开发者智能设备16 分钟前
智能插座二次开发如何接入Home Assistant,从零开始完整工程实现(Python+React)
开发语言·python·物联网·react.js·智能家居
hqyjzsb32 分钟前
法律 Prompt 干货:搭建合同审查提示词要包含哪些要素
开发语言·人工智能·python·职场和发展·数据分析·prompt·业界资讯
Andreapiki35 分钟前
风险审计校招技术栈拆解:SQL、Python、Power BI在2026届JD中的真实权重
数据库·python·sql
泡海椒1 小时前
趋势分析报表:jquick-pdf折线图PDF生成实战
java·大数据·运维·服务器·前端·pdf
qq_394562001 小时前
【在Linux上升级nginx】
linux·服务器·nginx
2601_966949651 小时前
股票池发生变化后,如何高效更新行情数据?从全量刷新到增量同步
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
丸子君君1 小时前
【以麒麟服务器时间为准,定时请求时间同步】
运维·服务器·单片机
玖石书1 小时前
python-uv-windows环境安装方案
windows·python·uv
happylifetree2 小时前
Python06-08:Python开发工具PyCharm安装
python·pycharm