目录Flag功能基本使用自定义标记目录标记选项图像示例标记模式总结上一篇Gradio.Net (https://github.com/feiyun0112/Gradio.Net)是一个开源的 .NET 库它是 Gradio 的 .NET 移植版本允许你为机器学习模型、API 或任何 C# 函数快速构建演示或 Web 应用程序无需任何 JavaScript、CSS 或 Web 开发经验Flag功能你可能已经注意到在Gradio.Net界面中默认会显示一个Flag标记按钮。当使用你的演示的用户看到有趣的输出例如错误或意外的模型行为时他们可以标记这个输入供你查看。在通过flaggingDir参数指定的目录中会生成一个CSV文件来记录标记的输入。如果界面涉及文件数据例如Image和Audio组件还会创建文件夹来存储这些标记的数据。基本使用让我们来看一个简单的计算器示例展示标记功能的基本使用using Gradio.Net; decimal Calculator(decimal num1, string operation, decimal num2) { if (operation 加) { return num1 num2; } else if (operation 减) { return num1 - num2; } else if (operation 乘) { return num1 * num2; } else if (operation 除) { if (num2 0) { throw new Exception(不能除以零); } return num1 / num2; } return 0; } var demo gr.Interface( fn: Calculator, inputs: new object[] { number, gr.Radio(choices: new[] { 加, 减, 乘, 除 }), number }, outputs: number, title: 简易计算器, description: 这是一个示例计算器展示标记功能。, flaggingMode: manual // 设置为手动标记模式 ); await demo.Launch();运行这个示例后当你在界面上点击Flag按钮时Gradio.Net会在当前目录下创建一个flagged文件夹并在其中生成一个logs.csv文件记录标记的输入和输出。自定义标记目录你可以通过flaggingDir参数自定义标记数据的存储目录var demo gr.Interface( fn: Calculator, inputs: new object[] { number, gr.Radio(choices: new[] { 加, 减, 乘, 除 }), number }, outputs: number, title: 简易计算器, description: 这是一个示例计算器展示标记功能。, flaggingMode: manual, flaggingDir: my_flagged_data // 自定义标记目录 );这样标记的数据会存储在my_flagged_data文件夹中而不是默认的flagged文件夹。标记选项如果你希望用户在标记时提供原因你可以通过flaggingOptions参数传递一个字符串列表。用户在标记时必须选择其中一个字符串这将作为额外的列保存到CSV文件中。var demo gr.Interface( fn: Calculator, inputs: new object[] { number, gr.Radio(choices: new[] { 加, 减, 乘, 除 }), number }, outputs: number, title: 简易计算器, description: 这是一个示例计算器展示标记功能。, flaggingMode: manual, flaggingOptions: new Liststring { 结果错误, 输入异常, 其他原因 } // 标记选项 );图像示例对于涉及图像等文件类型的界面Gradio.Net会自动创建文件夹来存储标记的图像文件。让我们来看一个图像示例using Gradio.Net; using SixLabors.ImageSharp; using SixLabors.ImageSharp.PixelFormats; string Sepia(string inputImg) { // 加载图像 using var image SixLabors.ImageSharp.Image.LoadRgb24(inputImg); // 应用 sepia 滤镜 for (int y 0; y image.Height; y) { for (int x 0; x image.Width; x) { var pixel image[x, y]; // Sepia 滤镜矩阵 int tr (int)(0.393 * pixel.R 0.769 * pixel.G 0.189 * pixel.B); int tg (int)(0.349 * pixel.R 0.686 * pixel.G 0.168 * pixel.B); int tb (int)(0.272 * pixel.R 0.534 * pixel.G 0.131 * pixel.B); // 确保值在有效范围内 pixel.R (byte)Math.Min(255, tr); pixel.G (byte)Math.Min(255, tg); pixel.B (byte)Math.Min(255, tb); image[x, y] pixel; } } // 保存处理后的图像 string outputPath Path.Combine(Path.GetTempPath(), $sepia_{Guid.NewGuid()}.png); image.Save(outputPath); return outputPath; } var demo gr.Interface( fn: Sepia, inputs: gr.Image(), outputs: image, title: Sepia 滤镜演示, description: 上传图像应用 Sepia 滤镜并可标记结果。, flaggingMode: manual ); await demo.Launch();在这个示例中当用户标记一个结果时Gradio.Net会在flagged目录下创建一个logs.csv文件创建inputImg文件夹存储输入图像创建output文件夹存储输出图像在CSV文件中记录图像路径标记模式Gradio.Net支持三种标记模式通过flaggingMode参数设置manual手动标记模式用户需要点击Flag按钮来标记输入auto自动标记模式每次提交都会自动标记never禁用标记功能不显示Flag按钮总结标记功能是Gradio.Net中一个非常有用的特性它允许你收集和分析用户反馈以便改进你的模型或应用。你可以自定义标记目录、添加标记选项并根据需要选择不同的标记模式。引入地址