Gradio好啊,好啊,好啊.Hugging Face好啊,好啊.
Gradio是一个开源Python包,允许您为机器学习模型、API或任何任意Python函数快速构建演示或web应用程序。然后,您可以使用Gradio的内置共享功能,在几秒钟内共享演示或web应用程序的链接。无需JavaScript、CSS或网络托管经验!
Hot reload
Developing Faster With Reload Mode (gradio.app)1
gradio run.py
在使用重载模式时,Gradio专门在代码中寻找一个名为demo的Gradio Blocks/Interface演示。如果您将您的demo命名为其他名称,则需要将演示的名称作为代码中的第二个参数传入。所以,如果你的run.py文件是这样的:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25import gradio as gr
with gr.Blocks() as my_demo:
gr.Markdown("# Greetings from Gradio!")
inp = gr.Textbox(placeholder="What is your name?")
out = gr.Textbox()
inp.change(fn=lambda x: f"Welcome, {x}!",
inputs=inp,
outputs=out)
if __name__ == "__main__":
my_demo.launch()import gradio as gr
with gr.Blocks() as my_demo:
gr.Markdown("# Greetings from Gradio!")
inp = gr.Textbox(placeholder="What is your name?")
out = gr.Textbox()
inp.change(fn=lambda x: f"Welcome, {x}!",
inputs=inp,
outputs=out)
if __name__ == "__main__":
my_demo.launch()
使用下面命令启动reload模式1
gradio run.py my_demo.
我发现开发时使用reload最好把launch放在name == “main“下Unable to launch with reload mode with default port · Issue #4755 · gradio-app/gradio (github.com)
launch参数
在reload模式下没用,开发完毕后可以使用,用于改变端口、获得公网地址用于分享等.
Interface
Class
Interface类旨在为机器学习模型创建演示,这些模型接受一个或多个输入,并返回一个或更多输出.
Interface类有三个核心参数:
- fn:包装用户界面(UI)的函数
- inputs:用于输入的Gradio组件。组件的数量应与函数中的参数数量相匹配。
- outputs:用于输出的Gradio组件。组件的数量应该与函数返回值的数量相匹配。
1 | demo = gr.Interface( |
可以多个输入,多个输出,输出由fn计算得到,但是貌似这只能构建一个单组件.
Blocks
Blocks是Gradio的低级API,它允许您创建比Interfaces更多的自定义web应用程序和演示(但仍然完全使用Python)。
与Interface类相比,Blocks提供了更多的灵活性和控制:
(1)组件的布局(
2)触发功能执行的事件
(3)数据流(例如,输入可以触发输出,这可以触发下一级的输出)
Blocks还提供了将相关演示分组在一起的方法,例如使用选项卡。块的基本用法如下:创建一个块对象,然后将其用作上下文(使用“with”语句),然后在块上下文中定义布局、组件或事件。最后,调用launch()方法来启动演示。1
2
3
4
5
6
7
8
9
10
11def update(name):
return "Hello" + name + "!"
with gr.Blocks() as demo:
gr.Markdown("## Hello World")
with gr.Row():
textbox = gr.Textbox(placeholder="input your words")
slider = gr.components.Slider()
btn = gr.Button("Run")
btn.click(fn=update,input=textbox,output=slider)
demo.launch()1
2
3
4
5
6
7
8
9
10
11
12
13
14import gradio as gr
def increase(num):
return num + 1
with gr.Blocks() as demo:
a = gr.Number(label="a")
b = gr.Number(label="b")
atob = gr.Button("a > b")
btoa = gr.Button("b > a")
atob.click(increase, a, b)
btoa.click(increase, b, a)
demo.launch()
TabbedInterface
TabbedInterface是通过提供一个接口列表来创建的,每个接口都在一个单独的选项卡中呈现。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24def update(name):
return "Hello" + name + "!"
with gr.Blocks(theme=gr.themes.Glass()) as test:
gr.Markdown("## Hello World")
with gr.Row():
textbox = gr.Textbox(placeholder="input your words",label="name")
slider = gr.components.Slider(label="Greet",interactive=True)
btn = gr.Button("Run")
btn.click(fn=update, inputs=textbox, outputs=slider)
stt_demo = gr.load(
"huggingface/facebook/wav2vec2-base-960h",
title=None,
inputs="mic",
description="Let me try to guess what you're saying!",
)
demo = gr.TabbedInterface([stt_demo,test],["STT","Hello World"])
if __name__ == '__main__':
demo.launch()
ChatInterface
聊天机器人是大型语言模型的一个流行应用程序。使用gradio,您可以轻松地构建聊天机器人模型的演示并与用户共享,或者使用直观的聊天机器人UI自己尝试。
1 | import random |
streaming
如果应用程序预计流量会很大,请使用queue()方法来控制处理速率。
可以搭配Openai或者Hugging Face上的大语言模型使用.同时搭配LangChain使用.
上面就是基本的四个大模块,此外还有许多组件,重点是一些组件如何组合,一般来说使用gr.Blocks
进行构建.