上周给客户演示一个内部的小工具,能拿一段文字自动生成摘要。我这边跑得挺顺,终端里贴进去一句话,几秒后吐出结果。
电话那头沉默了一会儿,说:你把网址发我吧,我让同事也点点。
我低头看了眼屏幕上那个黑框框。总不能让人家装个终端、配个环境、再敲一行命令。那顿演示就这么冷了半分钟,我含糊说了句"我整理一下发你",挂了电话开始找办法。
其实要的特别简单:一个网页,上面一个输入框、一个按钮、下面一块地方显示结果。就这些。
Gradio 干的就是这个。把你那个 Python 函数直接包一下,它帮你把界面生出来:
import gradio as gr
def summarize(text):
return call_my_model(text) # 原来那个函数,一行没改
gr.Interface(fn=summarize, inputs="textbox", outputs="textbox").launch()
六行,跑起来终端会给个 http://127.0.0.1:7860 之类的地址,点开就是个正经网页。要发给别人,加个 share=True 会临时给一条能外网访问的链接(有时效,别拿来当正式服务用)。
当时最让我意外的是,原来的函数一行没动。我之前一直以为"做个界面"意味着要写点前端,或者至少把代码改成能收 HTTP 请求的样式。结果它是反过来:你有个普通函数,它负责在前面挡一层。
样式当然简陋,白底、灰框、按钮方方正正,一眼能看出是自动生成的。但演示够用了,客户那边点了两下就说"这个可以"。后来他们提了个需求,说能不能把结果旁边加个复制按钮,我查了半天发现得写点自定义布局,就没接,先记在便签上了。
Streamlit 是另一个常被提到的,路数不太一样,更适合一块一块往上堆图表和数据。我们这种"一个输入一个输出"的,Gradio 更省事。
哦对,电话最后客户还问了一句:这个能直接放到我们官网上吗?我说现在这个不行,它是本地跑的临时页面,真要对外得另外部署。他"哦"了一声,说那先这样。
给"发个网址就能点"这种场合做的,VidDown 上那几个工具算一类。
那半分钟冷场我没跟客户解释,挂了电话才想起来该说点什么。