尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Gradio.Net 开发指南 -- Interface 状态管理

Gradio.Net 开发指南 -- Interface 状态管理
📅 发布时间:2026/7/24 16:23:13

目录

Interface 状态管理

全局状态

会话状态

状态的注意事项

总结



上一篇

Gradio.Net (https://github.com/feiyun0112/Gradio.Net)是一个开源的 .NET 库,它是 Gradio 的 .NET 移植版本,允许你为机器学习模型、API 或任何 C# 函数快速构建演示或 Web 应用程序,无需任何 JavaScript、CSS 或 Web 开发经验!

Interface 状态管理

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

全局状态

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

using Gradio.Net; // 全局状态示例:跟踪所有用户的分数 List<int> scores = new List<int>(); 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 支持的另一种数据持久化类型是会话状态,其中数据在页面会话内的多次提交之间持久化。但是,数据不会在模型的不同用户之间共享。要将数据存储在会话状态中,您需要执行三件事:

  1. 向函数中传入一个额外的参数,该参数表示界面的状态。

  2. 在函数末尾,将状态的更新值作为额外的返回值返回。

  3. 在创建 Interface 时添加 'state' 输入和 'state' 输出组件。

下面是一个简单的应用程序来说明会话状态 - 这个应用程序简单地存储用户之前的提交并将它们显示回给用户:

using Gradio.Net; // 会话状态示例:存储用户的消息历史 (string, List<string>) StoreMessage(string message, List<string> history) { // 如果历史为空,初始化一个新列表 if (history == null) { history = new List<string>(); } // 创建输出消息 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 List<string>())], outputs: [gr.Textbox(label: "消息历史"), gr.State()] ); await demo.Launch();

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

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

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

状态的注意事项

  1. ‎全局状态会在所有用户之间共享:如果您使用全局变量来存储状态,所有访问您应用程序的用户都会共享同一个状态,这可能导致意外行为。

  2. ‎会话状态仅在单个用户会话中持久化:每个用户会话都有自己独立的状态,不会与其他用户共享。

  3. ‎状态必须是 JSON 可序列化的:Gradio.Net 使用 JSON 来序列化和反序列化状态,因此您的状态必须是 JSON 可序列化的类型。

  4. ‎状态可以是复杂类型:您可以使用列表、字典等复杂类型作为状态,只要它们是 JSON 可序列化的。

总结

在本指南中,我们学习了 Gradio.Net 中的两种状态管理方法:

  1. ‎全局状态:使用函数外部的变量来存储对所有用户和所有函数调用都可访问的数据。

  2. ‎会话状态:使用 ‎gr.State组件来存储在单个用户会话内持久化的数据,不会在不同用户之间共享。

状态管理是构建复杂 Gradio.Net 应用程序的重要工具,它允许您基于之前的交互来修改应用程序的行为,提供更丰富的用户体验。

引入地址

相关新闻

  • 大模型微调与部署实战:LoRA、量化与工程化挑战
  • 大模型推理加速:三大框架与实战优化技巧
  • 2026苏州有资质的空压系统安装公司推荐,专业持证改造厂家直荐 - 2027品牌AI展

最新新闻

  • 二手名表回收估价怎么算?覆盖劳力士 百达翡丽全品牌,广州表主实操指南 - 广州二奢大本营
  • 猫抓浏览器扩展:3大核心功能助您高效获取网页媒体资源
  • OnmyojiAutoScript终极指南:阴阳师自动化脚本的完整解决方案
  • 合肥卖黄金怕被坑少赚钱?2026实测裕金黄金奢侈品回收正规无损变现攻略 | 2026.07.24上金所大盘参考价879元/克 - 城刊速递
  • 能源与股票量化核心差异,AI全链路落地实操手册
  • 生命涌现的小龙虾技能之【Pet Excitement Calming Guide | 宠物兴奋过度冷静引导】简介

日新闻

  • 武汉卡地亚LOVE钻戒与钻石项链回收变现攻略|多家门店行情参考 - 大牌深度测评
  • 2026年无锡地区健康管理如何考量?四家机构业务体系概览
  • 2026图片去水印软件哪个好用 手机电脑免费工具盘点 - 免费软件工具方法教程

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号