Gradio Agents 和 MCP 黑客马拉松
获奖者Gradio Agents 和 MCP 黑客马拉松
获奖者您可以通过内置API以编程方式使用几乎所有Gradio应用!在任何Gradio应用的页脚,您都会看到一个“通过API使用”链接。点击该链接将打开一个详细的API文档页面,该API是Gradio根据您Gradio应用中的函数签名生成的。
API端点名称
当您创建Gradio应用时,API端点名称会根据函数名称自动生成。您可以通过在`gr.Interface`或`gr.ChatInterface`中使用`api_name`参数来更改它。如果您正在使用Gradio `Blocks`,您可以像这样命名每个事件监听器:
btn.click(add, [num1, num2], output, api_name="addition")
隐藏API端点
在构建复杂的Gradio应用时,您可能希望隐藏某些API端点,使其不出现在API页面上,例如,如果它们对应于仅仅更新UI的函数。您可以在任何`Blocks`事件监听器中将`show_api`参数设置为`False`来实现此目的,例如:
btn.click(add, [num1, num2], output, show_api=False)
禁用API端点
隐藏API端点并不会禁用它。如果用户知道名称,仍然可以通过编程方式调用该API端点。如果您想完全禁用某个API端点,请设置`api_name=False`,例如:
btn.click(add, [num1, num2], output, api_name=False)
注意:将`api_name`设置为`False`也意味着下游应用将无法使用`gr.load()`加载您的Gradio应用,因为该函数在底层使用了Gradio API。
添加API端点
您还可以向Gradio应用添加新的API路由,这些路由不对应于您UI中的事件。
例如,在此Gradio应用中,我们添加了一个新的路由,用于数字相加和列表切片
import gradio as gr
with gr.Blocks() as demo:
with gr.Row():
input = gr.Textbox()
button = gr.Button("Submit")
output = gr.Textbox()
def fn(a: int, b: int, c: list[str]) -> tuple[int, str]:
return a + b, c[a:b]
gr.api(fn, api_name="add_and_slice")
_, url, _ = demo.launch()
这将创建一个新的路由`/add_and_slice`,它将显示在“查看API”页面中。Python或JS客户端(下面会讨论)可以像这样以编程方式调用它:
from gradio_client import Client
client = Client(url)
result = client.predict(
a=3,
b=5,
c=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
api_name="/add_and_slice"
)
print(result)
此API页面不仅列出了可用于查询Gradio应用的所有端点,还展示了Gradio Python客户端和Gradio JavaScript客户端的使用方法。
对于每个端点,Gradio都会自动生成一个完整的代码片段,其中包含参数及其类型以及示例输入,让您可以立即测试一个端点。这是一个显示图像文件输入和`str`输出的示例
除了阅读API页面之外,您还可以使用Gradio内置的API录制器来生成相关的代码片段。只需点击“API录制器”按钮,像往常一样通过UI使用您的Gradio应用,然后API录制器将使用客户端生成代码,以编程方式重现您的所有交互。
API页面还包括如何将Gradio应用用作模型上下文协议(MCP)服务器的说明,这是一种将函数公开为工具以便LLM可以使用的标准化方式。
对于MCP服务器,每个工具及其描述和参数都会列出,并附有如何与流行的MCP客户端集成的说明。在此处阅读更多关于Gradio的MCP集成信息。
您可以通过端点`<your-gradio-app-url>/gradio_api/openapi.json`访问Gradio应用API的完整OpenAPI(原Swagger)规范。OpenAPI规范是一种标准化的、与语言无关的REST API接口描述,使人类和计算机都能够发现和理解您服务的功能。