Gradio.Net 开发指南 -- Interface 状态管理
目录Interface 状态管理全局状态会话状态状态的注意事项总结上一篇Gradio.Net (https://github.com/feiyun0112/Gradio.Net)是一个开源的 .NET 库它是 Gradio 的 .NET 移植版本允许你为机器学习模型、API 或任何 C# 函数快速构建演示或 Web 应用程序无需任何 JavaScript、CSS 或 Web 开发经验Interface 状态管理到目前为止我们假设您的演示是无状态的它们不会在单次函数调用之外保留信息。如果您想基于之前与演示的交互来修改演示的行为该怎么办在 Gradio.Net 中有两种方法全局状态和会话状态。全局状态如果状态是应该对所有函数调用和所有用户都可访问的内容您可以在函数调用外部创建一个变量并在函数内部访问它。例如您可以在函数外部加载一个大型模型并在函数内部使用它这样每次函数调用都不需要重新加载模型。using Gradio.Net; // 全局状态示例跟踪所有用户的分数 Listint scores new Listint(); string TrackScore(int score) { scores.Add(score); var topScores scores.OrderByDescending(s s).Take(3).ToList(); return $当前分数: {score}\n前3名分数: {string.Join(, , topScores)}; } var demo gr.Interface( fn: TrackScore, inputs: new object[] { gr.Number(label: 分数) }, outputs: new object[] { gr.Textbox(label: 结果) }, apiName: predict ); await demo.Launch();在上面的代码中scores列表在所有用户之间共享。如果多个用户访问此演示他们的分数都会添加到同一个列表中返回的前3名分数将从这个共享引用中收集。会话状态Gradio.Net 支持的另一种数据持久化类型是会话状态其中数据在页面会话内的多次提交之间持久化。但是数据不会在模型的不同用户之间共享。要将数据存储在会话状态中您需要执行三件事向函数中传入一个额外的参数该参数表示界面的状态。在函数末尾将状态的更新值作为额外的返回值返回。在创建 Interface 时添加 state 输入和 state 输出组件。下面是一个简单的应用程序来说明会话状态 - 这个应用程序简单地存储用户之前的提交并将它们显示回给用户using Gradio.Net; // 会话状态示例存储用户的消息历史 (string, Liststring) StoreMessage(string message, Liststring history) { // 如果历史为空初始化一个新列表 if (history null) { history new Liststring(); } // 创建输出消息 var output $当前消息: {message}\n之前的消息: {string.Join(\n, history.AsEnumerable().Reverse())}; // 将当前消息添加到历史记录中 history.Add(message); // 返回输出和更新后的历史记录 return (output, history); } var demo gr.Interface( fn: StoreMessage, inputs: [textbox, gr.State(value: new Liststring())], outputs: [gr.Textbox(label: 消息历史), gr.State()] ); await demo.Launch();请注意状态如何在每个页面的多次提交之间保持但如果您在另一个标签页中加载此演示或刷新页面演示将不会共享聊天历史记录。在这里我们不能将提交历史存储在全局变量中否则提交历史会在不同用户之间混淆。State 的初始值默认为null。如果您将参数传递给gr.State()的value参数它将被用作状态的默认值。注意Interface 类仅支持单个会话状态变量尽管它可以是包含多个元素的列表。对于更复杂的用例您可以使用 Blocks它支持多个 State 变量。或者如果您正在构建维护用户状态的聊天机器人请考虑使用 ChatInterface 抽象它会自动管理状态。状态的注意事项‎全局状态会在所有用户之间共享如果您使用全局变量来存储状态所有访问您应用程序的用户都会共享同一个状态这可能导致意外行为。‎会话状态仅在单个用户会话中持久化每个用户会话都有自己独立的状态不会与其他用户共享。‎状态必须是 JSON 可序列化的Gradio.Net 使用 JSON 来序列化和反序列化状态因此您的状态必须是 JSON 可序列化的类型。‎状态可以是复杂类型您可以使用列表、字典等复杂类型作为状态只要它们是 JSON 可序列化的。总结在本指南中我们学习了 Gradio.Net 中的两种状态管理方法‎全局状态使用函数外部的变量来存储对所有用户和所有函数调用都可访问的数据。‎会话状态使用 ‎gr.State组件来存储在单个用户会话内持久化的数据不会在不同用户之间共享。状态管理是构建复杂 Gradio.Net 应用程序的重要工具它允许您基于之前的交互来修改应用程序的行为提供更丰富的用户体验。引入地址

相关新闻

基于小程序的个人书摘管理系统

基于小程序的个人书摘管理系统

目录 1绪论 1.1 研究背景 1.2国内外研究现状 1.3 主要研究内容 2相关技术 2.1微信小程序 2.2 MYSQL数据库 2.3 Java语言 2.4 SSM框架简介 3系统分析 3.1可行性分析 3.1.1技术可行性 3.1.2经济可行性 3.1.3操作可行性 3.2系统性能分析 3.2.1 系统…

2026/10/22 1:42:35 阅读更多 →
MSP430指令集精讲:条件跳转、数据传输与算术逻辑操作实战

MSP430指令集精讲:条件跳转、数据传输与算术逻辑操作实战

1. MSP430指令集:嵌入式开发的基石与核心逻辑在嵌入式开发的世界里,尤其是面对像TI MSP430这类以超低功耗著称的微控制器,直接与硬件对话的能力往往决定了项目的成败与效率。这种对话的“语言”,就是指令集。它不是抽象的高级语言…

2026/10/25 12:01:23 阅读更多 →
lessandmore

lessandmore

lessandmore:从基础概念到高级用法的完整指南 引言:什么是 lessandmore?在编程世界中,“lessandmore”并非一个标准术语,但它可以被理解为一种编程哲学或设计模式:用更少的代码实现更多的功能,…

2026/10/21 19:16:10 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/26 12:00:21 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/25 22:36:10 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/26 4:52:12 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/26 12:00:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/26 5:00:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/26 3:16:46 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 12:00:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 13:21:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 8:34:37 阅读更多 →