fastapi接口gradio
时间: 2025-05-23 18:07:51 浏览: 12
### 将 FastAPI 与 Gradio 集成以创建接口
FastAPI 是一种现代、快速(高性能)的 Web 框架,用于构建 API,而 Gradio 提供了一种简单的方法来为机器学习模型或其他函数创建交互式 UI。两者的结合可以实现强大的功能扩展。
#### 方法概述
为了将两者集成在一起,可以通过让 Gradio 的前端界面通过 HTTP 请求调用由 FastAPI 构建的服务端逻辑[^1]。具体来说,Gradio 可以作为前端展示工具运行在一个独立进程中,或者嵌入到 FastAPI 应用程序中作为一个子路由处理请求[^2]。
以下是具体的实现方式:
#### 实现方案一:分离部署模式
在这种方法下,Gradio 和 FastAPI 各自独立运行,但它们之间通过网络通信连接起来。这种架构适合于需要灵活配置的应用场景。
##### 步骤描述
- 使用 FastAPI 创建一个 RESTful 接口服务。
- 在 Gradio 中定义好输入输出组件并设置其 `fn` 参数指向远程 URL 调用。
下面是一个简单的例子演示这一过程:
```python
from fastapi import FastAPI, Request
import requests
app = FastAPI()
@app.post("/predict/")
async def predict(request: Request):
data = await request.json()
result = process_data(data) # 假设这是您的核心业务逻辑
return {"result": result}
def process_data(input_data):
"""模拟数据处理"""
processed_output = f"Processed {input_data}"
return processed_output
```
接着,在另一个文件里启动 Gradio 幂面应用如下所示:
```python
import gradio as gr
import json
def remote_predict(text_input):
url = "http://localhost:8000/predict/"
payload = {'text': text_input}
headers = {'Content-Type': 'application/json'}
response = requests.post(url, data=json.dumps(payload), headers=headers)
output = response.json().get('result', '')
return output
demo = gr.Interface(fn=remote_predict, inputs="text", outputs="text")
if __name__ == "__main__":
demo.launch()
```
#### 实现方案二:嵌套集成模式
如果希望减少外部依赖,则可以选择直接把 Gradio 整合进 FastAPI 当作其中的一部分模块操作。这种方式更加紧凑高效。
这里给出一段示范代码片段说明如何做到这一点:
```python
from fastapi import FastAPI
import uvicorn
import gradio as gr
# 定义预测函数
def model_predict(message):
reply = f"Echo: {message}"
return reply
with gr.Blocks() as demo:
textbox = gr.Textbox(label="Input Message")
btn_submit = gr.Button(value="Submit")
out_text = gr.Textbox(label="Response")
btn_submit.click(model_predict, inputs=textbox, outputs=out_text)
fastapi_app = FastAPI()
@fastapi_app.get("/")
def index():
return {"status":"ok"}
@fastapi_app.on_event("startup")
async def start_gradio():
app = demo.queue(concurrency_count=2).launch(prevent_thread_lock=True)
fastapi_app.mount("/gradio", app)
if __name__ == '__main__':
uvicorn.run(fastapi_app, host='0.0.0.0', port=7860)
```
上述脚本会同时开启两个服务器入口——一个是标准的 FastAPI `/`, 另外还挂载了一个路径名为 `/gradio/` 的 Gradio 用户界面对话框页面[^3]。
---
阅读全文
相关推荐

















