如何将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
相关产品推荐
相关产品推荐

