Gradio 极简入门:三分钟为AI模型打造交互界面,并对比Streamlit与Dash如何选型

我用 Gradio 给模型做界面的一点经验,顺带聊聊和 Streamlit、Dash 怎么选

训完模型之后最尴尬的一刻,是别人问你"能给我看看效果吗",而你只能让他去看一坨命令行输出。Gradio 就是用来填这个坑的:它是个开源的 Python 库,几行代码就能给机器学习模型、API 或者任意一个 Python 函数套上界面,还不用写一句 HTML / CSS / JS。

它是 Hugging Face 出的,跟 HF 生态贴得特别近------这也是后面选型的一个关键考量。

装好、跑起来

Python 3.10 以上,pip 安装:

bash 复制代码
pip install gradio

最小例子:

python 复制代码
import gradio as gr

def greet(name):
    return f"Hello {name}!"

demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch()

跑起来终端会给一个本地地址,默认 http://127.0.0.1:7860

但只这么 launch 其实不够用,几个参数值得一开始就记住:

  • server_name="0.0.0.0":默认只绑定本机,别人访问不了你的局域网地址。你在一台服务器上跑,同事想从自己机器打开,必须加这个。
  • server_port=xxxx:7860 被占了就换。
  • inbrowser=True:启动后自动弹浏览器,省得手动复制地址。
  • share=True:生成一个公网临时链接,后面单独说它的坑。

Interface 够用就用 Interface

gr.Interface 是我用得最多的:一个函数配一组输入输出,完事。它内部其实是 Blocks 的封装,你只关心"进什么、出什么"就行。

多个输入也简单:

python 复制代码
demo = gr.Interface(
    fn=greet,
    inputs=[gr.Textbox(label="你的名字"), gr.Slider(label="热情程度", minimum=1, maximum=5)],
    outputs="text"
)

什么时候该从 Interface 换到 Blocks?我的判断标准是:一旦你发现"一个函数、一组进出"表达不了你的需求------比如要多个按钮触发不同逻辑、要分栏布局、要做多步状态------就上 Blocks。日常 80% 的情况 Interface 能扛住,别一开始就上 Blocks 搞复杂了。

python 复制代码
with gr.Blocks() as demo:
    gr.Markdown("# 我的第一个 Blocks 应用")
    with gr.Row():
        with gr.Column():
            text_input = gr.Textbox(label="输入文本")
            btn = gr.Button("提交")
        with gr.Column():
            text_output = gr.Textbox(label="输出结果")

    btn.click(fn=greet, inputs=text_input, outputs=text_output)

慢推理一定要加 queue,否则会被并发拖垮

这是我最开始踩的坑。模型推理要几秒钟,界面看起来"没反应",而且多个人同时点,后端直接乱套。解法是在 launch() 之前加一行:

python 复制代码
demo.queue()
demo.launch()

queue() 开启之后,请求会排队处理,状态条会显示"排队中",不会再出现"点了没反应、连点几次"的体验问题;concurrency_count 参数还能控制同时处理几个请求。如果你的模型推理明显耗时,这行千万别省。

顺带一提:如果你的模型是逐字生成的(比如 LLM 流式输出),把处理函数写成 generator、配合合适组件就能边生成边出字,这块儿 Gradio 的聊天组件支持得不错。真要往聊天机器人方向做,直接看 gr.ChatInterface,比手动拿 Blocks 拼省事得多。

常见组件

列张表,用到再回来查:

类型 组件
输入 Textbox(文本)、Number(数字)、Slider(滑块)、File(文件)、Image(图像)、Audio(音频)、Video(视频)、Checkbox(复选框)、Radio(单选)
输出 Textbox(文本)、Label(标签/分类结果)、Number(数字)、Image(图像)、Audio(音频)、Video(视频)
布局与展示 Markdown(渲染Markdown)、HTML(渲染HTML)、Row(水平布局)、Column(垂直布局)、Button(按钮)

再进阶一点的话:继承基类自定义组件、重写 preprocess / postprocess 控制数据进出;或者塞自己的 CSS / JS 改样式加动画。日常用不太到,知道有这回事就行。

share=True 的坑

share=True 的原理是搞一个反向隧道,把本地的 7860 暴露到公网,链接 72 小时有效。很方便,但有三个实际情况要知道:

  • 它依赖外部 frpc 隧道服务,公司内网、防火墙严的环境可能直接连不上------这时候别死磕,直接用内网 server_name 或者干脆部署到 Spaces。
  • 链接是临时的,每次启动都变,不适合当正式地址发人。
  • 要长期给团队或客户用,老实推到 Hugging Face Spaces,免费、一直在线,这是 Gradio 最顺手的归宿。

三件套到底怎么选

Streamlit、Gradio、Dash 经常被放一起比,但它们的初心根本不是一回事。Streamlit 面向数据分析师"脚本即应用",Gradio 面向"给模型做个能分享的 demo",Dash 面向"正经生产级分析应用"。

Streamlit Gradio Dash
定位 数据应用快速开发 模型演示、快速原型 企业级分析 Web 应用
上手难度 很低 很低 中到高
开发速度 快(1--3 天) 快(1--2 天) 慢(1--2 周)
交互方式 脚本自上而下重跑 事件驱动 显式回调
可视化与定制 组件生态还不错 偏 AI 输入输出 强,基于 Plotly
规模 中小型 单模型演示 大型、复杂
部署 Community Cloud 一键 Hugging Face Spaces 免费 自己搭服务器

我实际做的判断通常是这样的:

  • 要快速把一个数据分析脚本变成仪表盘、或者团队全是数据背景不想碰前端,用 Streamlit。它的心智模型是"从头跑一遍",简单,但复杂交互和性能上会有上限。
  • 要给别人看模型效果、尤其大模型,还要一键发公网链接,用 Gradio。这基本是它的甜点区,跟 HF 生态是绑定的。
  • 只有当应用要交付客户、要长期维护、要对布局交互有完全控制,或者数据量大到百万行级的时候,才轮到 Dash。为了一个 demo 上 Dash,纯属杀鸡用牛刀。

一句话:图快用 Streamlit,给模型做 demo 用 Gradio,交付生产用 Dash。只想让人玩一下你的模型,Gradio 就够了,而且它大概率比你想的更省事。

参考

相关推荐
月亮和九磅十五便士1 小时前
朝闻 AI|2026-08-26
人工智能·大模型·ai agent
会编程的吕洞宾1 小时前
Spring AI 2.0 接 Milvus 做混合检索:RAG 召回率翻倍的实战方案
人工智能·spring·milvus
段一凡-华北理工大学1 小时前
高炉炉况智能诊断与预警实战~系列文章14:机器学习炉况分类:样本构建、类别不平衡与模型选型
大数据·人工智能·机器学习·分类·高炉智能化·炉况诊断·炉况分类
SEONIB_Explorer1 小时前
VEONIB 电商 UGC 视频自动化生产实战指南
人工智能·自动化·音视频·跨境电商·视频制作·veonib
代码里的AI星1 小时前
B2B企业AI搜索可见度诊断与GEO技术优化实践:从0%到67%的架构重构之路
大数据·人工智能
QCodingDev1 小时前
Spring AI Alibaba Graph实战:从ReAct Agent到Workflow,企业AI复杂流程该如何编排?
java·人工智能·spring·ai·ai编程·企业ai
DS随心转APP1 小时前
AI导出鸭插件 如何解决这些痛点,以及它如何重构“批量导出”这件事,让 纳米AI导出Excel 和其他格式告别手动整理,让AI导出回归优雅。
人工智能·重构·word·excel·deepseek·ai导出鸭
Raas1001 小时前
AI网关是做什么的?MAI Gateway (魔芋企业级AI网关)给出企业级答案
网络·人工智能·gateway·企业级·ai网关·mai gateway·魔芋
欧特克_Glodon1 小时前
OpenCV计算机视觉开发入门与实践<二十>:非线性变换灰度变换
c++·人工智能·opencv·计算机视觉