You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Gradio/Streamlit与Flask集成实现多模型托管及路由定制?

成熟集成策略与替代方案

一、Gradio + Flask 深度集成方案

1. 官方原生挂载方案

Gradio 内置了直接挂载到 Flask 应用的 API,无需 iframe 即可实现多路由绑定,完全满足多模型分路由托管的需求:

from flask import Flask
import gradio as gr

app = Flask(__name__)

# 定义模型1的Gradio交互接口
def model1_process(input_text):
    return f"模型1输出:{input_text}"
demo1 = gr.Interface(fn=model1_process, inputs="text", outputs="text")

# 定义模型2的Gradio交互接口
def model2_process(input_text):
    return f"模型2输出:{input_text.upper()}"
demo2 = gr.Interface(fn=model2_process, inputs="text", outputs="text")

# 将不同模型挂载到Flask的专属路由
app = gr.mount_gradio_app(app, demo1, path="/model1")
app = gr.mount_gradio_app(app, demo2, path="/model2")

# 自定义Flask路由的UI页面
@app.route("/custom-dashboard")
def custom_dashboard():
    return "<h2>自定义控制面板</h2><p>这是Flask原生路由实现的专属UI</p>"

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

该方案完全基于官方API,无兼容性风险,同时保留Flask路由的灵活性,可自由添加自定义UI路由。

2. 社区轻量扩展:flask-gradio

如果需要更简洁的批量挂载逻辑,可使用社区维护的flask-gradio扩展,它封装了Gradio与Flask的绑定流程,支持批量挂载多个Gradio实例,同时兼容Flask的蓝图、中间件等特性。

二、Streamlit + Flask 集成方案

Streamlit架构相对封闭,直接嵌入Flask难度较高,推荐以下两种无iframe方案:

1. 配置路径前缀 + Flask反向代理

先修改Streamlit配置文件(.streamlit/config.toml),设置路径前缀:

[server]
baseUrlPath = "/model3"
headless = true

再通过Flask的反向代理中间件,将Streamlit服务映射到指定路由:

from flask import Flask
from werkzeug.middleware.dispatcher import DispatcherMiddleware
from werkzeug.serving import run_simple
import streamlit.web.cli as stcli
import sys

app = Flask(__name__)

@app.route("/custom-ui")
def custom_ui():
    return "<h2>自定义模型管理页面</h2>"

# 启动Streamlit的WSGI应用
def streamlit_model_app():
    sys.argv = ["streamlit", "run", "model3_app.py"]
    return stcli.main()

# 绑定Flask主应用与Streamlit子应用
application = DispatcherMiddleware(app, {
    "/model3": streamlit_model_app()
})

if __name__ == "__main__":
    run_simple("0.0.0.0", 5000, application)

这种方式通过路径转发实现多路由共存,无iframe嵌套,同时保留Flask的自定义路由能力。

2. Streamlit内部多路由替代方案

若不想引入Flask,可使用社区扩展st-pages,在单个Streamlit应用内实现多页面(类路由)功能,每个页面对应一个模型,支持自定义导航栏,能满足基础的多模型托管需求,虽灵活性不如Flask,但足够应对多数场景。

三、通用替代方案:FastAPI + Gradio/Streamlit

如果Flask集成仍有局限,可考虑用FastAPI替代Flask:

  • Gradio官方支持直接mount到FastAPI,实现多路由绑定;
  • Streamlit同样可通过反向代理方式集成到FastAPI;
  • FastAPI支持异步处理,更适合高并发的模型托管场景,路由系统灵活性与Flask相当。

内容的提问来源于stack exchange,提问作者addy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:33:30