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/7/24 16:14:46 阅读更多 →
MSP430指令集精讲:条件跳转、数据传输与算术逻辑操作实战

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

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

2026/7/25 17:34:31 阅读更多 →
lessandmore

lessandmore

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

2026/7/24 16:14:45 阅读更多 →

最新新闻

Context Portal MCP服务器架构深度剖析:Python/FastAPI如何构建高效RAG后端

Context Portal MCP服务器架构深度剖析:Python/FastAPI如何构建高效RAG后端

Context Portal MCP服务器架构深度剖析:Python/FastAPI如何构建高效RAG后端 【免费下载链接】context-portal Context Portal (ConPort): A memory bank MCP server building a project-specific knowledge graph to supercharge AI assistants. Enables powerful R…

2026/7/25 21:21:10 阅读更多 →
【AI批量翻译实战指南】:20年技术专家亲授5大避坑法则,90%团队忽略的自动化陷阱

【AI批量翻译实战指南】:20年技术专家亲授5大避坑法则,90%团队忽略的自动化陷阱

更多请点击: https://kaifayun.com 第一章:AI批量翻译的本质与技术演进全景 AI批量翻译并非简单地将单句翻译能力叠加,而是融合大规模并行处理、上下文感知建模与领域自适应的系统工程。其本质是构建一种可扩展、低延迟、高一致性语义映射管…

2026/7/25 21:21:10 阅读更多 →
大语言模型对齐调优中的偏见形成机制与缓解策略

大语言模型对齐调优中的偏见形成机制与缓解策略

最近在调试一个基于大语言模型的问答系统时,我遇到了一个有趣的现象:当我用“你觉得这个方案怎么样?”提问时,模型会根据我之前的发言倾向来调整回答。如果我先表达了对某个技术栈的偏好,模型就更可能迎合这种偏好&…

2026/7/25 21:21:10 阅读更多 →
录音棚级AI母带处理不是玄学!用FFT相位对齐+感知编码补偿,将AI音频失真率从8.3%压至0.47%

录音棚级AI母带处理不是玄学!用FFT相位对齐+感知编码补偿,将AI音频失真率从8.3%压至0.47%

更多请点击: https://codechina.net 第一章:录音棚级AI母带处理不是玄学!用FFT相位对齐感知编码补偿,将AI音频失真率从8.3%压至0.47% 传统AI音频生成在母带阶段常因频谱相位坍塌与编解码器感知建模偏差导致谐波畸变、瞬态模糊和立…

2026/7/25 21:21:10 阅读更多 →
oneAPI Math Library (oneMath)完全指南:从入门到精通的跨平台数学计算引擎

oneAPI Math Library (oneMath)完全指南:从入门到精通的跨平台数学计算引擎

oneAPI Math Library (oneMath)完全指南:从入门到精通的跨平台数学计算引擎 【免费下载链接】oneMKL oneAPI Math Library (oneMath) 项目地址: https://gitcode.com/gh_mirrors/on/oneMKL oneAPI Math Library (oneMath) 是一个开源的跨平台数学计算引擎&am…

2026/7/25 21:21:10 阅读更多 →
Flutter Admin图表组件全解析:数据可视化从未如此简单

Flutter Admin图表组件全解析:数据可视化从未如此简单

Flutter Admin图表组件全解析:数据可视化从未如此简单 【免费下载链接】flutter_admin Flutter Admin: 一个基于 Flutter 的后台管理系统、开发模板。A backend management system and development template based on Flutter 项目地址: https://gitcode.com/gh_m…

2026/7/25 21:20:10 阅读更多 →

日新闻

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决您的…

2026/7/25 0:00:35 阅读更多 →
C++ string类模拟实现:从深拷贝到内存管理的完整指南

C++ string类模拟实现:从深拷贝到内存管理的完整指南

1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…

2026/7/25 0:00:35 阅读更多 →
三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…

2026/7/25 0:00:35 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/25 5:08:22 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/25 5:13:53 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 18:52:18 阅读更多 →

月新闻