Gradio 智能体与 MCP 黑客马拉松
获奖者Gradio 智能体与 MCP 黑客马拉松
获奖者Hugging Face Hub 是一个中心平台,拥有数十万个模型、数据集和演示(也称为 Spaces)。
Gradio 具有多项功能,可以极其轻松地利用 Hub 上现有的模型和 Spaces。本指南将详细介绍这些功能。
Hugging Face 有一项名为无服务器推理端点 (Serverless Inference Endpoints) 的服务,允许您向 Hub 上的模型发送 HTTP 请求。该 API 包含一个慷慨的免费层级,当您想在生产环境中使用时,可以切换到专用推理端点 (dedicated Inference Endpoints)。Gradio 直接与无服务器推理端点集成,因此您只需指定模型名称(例如 Helsinki-NLP/opus-mt-en-es
)即可创建演示,如下所示:
import gradio as gr
demo = gr.load("Helsinki-NLP/opus-mt-en-es", src="models")
demo.launch()
对于推理端点中支持的任何 Hugging Face 模型,Gradio 会自动推断预期的输入和输出并进行底层服务器调用,因此您无需担心定义预测函数。
请注意,我们只需指定模型名称并声明 src
应为 models
(Hugging Face 的模型中心)。由于您不是在计算机上加载模型,因此无需安装任何依赖项(除了 gradio
)。
您可能会注意到第一次推理会花费更长的时间。这是因为推理端点正在服务器中加载模型。之后您会获得一些好处:
Hugging Face Spaces 允许任何人免费托管他们的 Gradio 演示,上传 Gradio 演示只需几分钟。您可以前往hf.co/new-space,选择 Gradio SDK,创建一个 app.py
文件,瞧!您就拥有了一个可以与他人分享的演示。要了解更多信息,请阅读本指南,了解如何使用网站在 Hugging Face Spaces 上托管。
或者,您也可以通过编程方式创建 Space,利用 huggingface_hub 客户端库。示例如下:
from huggingface_hub import (
create_repo,
get_full_repo_name,
upload_file,
)
create_repo(name=target_space_name, token=hf_token, repo_type="space", space_sdk="gradio")
repo_name = get_full_repo_name(model_id=target_space_name, token=hf_token)
file_url = upload_file(
path_or_fileobj="file.txt",
path_in_repo="app.py",
repo_id=repo_name,
repo_type="space",
token=hf_token,
)
这里,create_repo
使用该账户的写入令牌在特定账户下创建了一个带有目标名称的 Gradio 仓库。repo_name
获取相关仓库的完整仓库名称。最后,upload_file
将一个名为 app.py
的文件上传到仓库中。
您还可以使用和混搭 Hugging Face Spaces 上现有的 Gradio 演示。例如,您可以将两个现有的 Gradio 演示作为单独的选项卡放置,并创建一个新的演示。您可以在本地运行这个新演示,或者将其上传到 Spaces,从而为混搭和创建新演示提供了无限可能!
下面是一个实现此功能的示例:
import gradio as gr
with gr.Blocks() as demo:
with gr.Tab("Translate to Spanish"):
gr.load("gradio/en2es", src="spaces")
with gr.Tab("Translate to French"):
gr.load("abidlabs/en2fr", src="spaces")
demo.launch()
请注意,我们使用了 gr.load()
,这与我们使用推理端点加载模型的方法相同。然而,这里我们指定 src
为 spaces
(Hugging Face Spaces)。
注意:以这种方式加载 Space 可能会导致与原始 Space 略有不同。特别是,适用于整个 Blocks 的任何属性,例如主题或自定义 CSS/JS,将不会被加载。您可以将要加载的 Space 的这些属性复制到您自己的 Blocks
对象中。
transformers
中 Pipeline
的演示Hugging Face 广受欢迎的 transformers
库有一个非常易于使用的抽象——pipeline()
,它处理了大部分复杂代码,为常见任务提供了简单的 API。通过指定任务和(可选的)模型,您可以用几行 Python 代码围绕现有模型构建一个演示。
import gradio as gr
from transformers import pipeline
pipe = pipeline("translation", model="Helsinki-NLP/opus-mt-en-es")
def predict(text):
return pipe(text)[0]["translation_text"]
demo = gr.Interface(
fn=predict,
inputs='text',
outputs='text',
)
demo.launch()
但 gradio
实际上使将 pipeline
转换为演示变得更加容易,只需使用 gradio.Interface.from_pipeline
方法,这样就无需指定输入和输出组件。
from transformers import pipeline
import gradio as gr
pipe = pipeline("translation", model="Helsinki-NLP/opus-mt-en-es")
demo = gr.Interface.from_pipeline(pipe)
demo.launch()
前面的代码生成了以下界面,您可以在浏览器中直接尝试:
就是这样!让我们总结一下 Gradio 和 Hugging Face 协同工作的各种方式:
gr.load()
来构建围绕推理端点的演示,而无需加载模型。gr.load()
进行混搭和创建新的 Gradio 演示。from_pipeline()
将 transformers
pipeline 转换为 Gradio 演示。🤗