python gradio-app

gradio-app 通常指的是用 Gradio 快速搭建的机器学习 Web 应用。Gradio 是专门为 ML/AI 模型做交互界面的 Python 库,几行代码就能把模型变成网页应用。

安装

pip install gradio

最小示例

import gradio as gr

def greet(name):
    return f"Hello, {name}!"

demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch()

运行后访问 http://127.0.0.1:7860 就能看到界面。

常见场景

1. 文本处理

import gradio as gr

def process_text(text):
    return text.upper(), len(text)

demo = gr.Interface(
    fn=process_text,
    inputs=gr.Textbox(label="输入文本", lines=3),
    outputs=[gr.Textbox(label="大写"), gr.Number(label="长度")],
    title="文本处理工具"
)
demo.launch()

2. 图像处理

import gradio as gr
from PIL import Image

def to_grayscale(img):
    return Image.fromarray(img).convert("L")

demo = gr.Interface(
    fn=to_grayscale,
    inputs=gr.Image(type="numpy"),
    outputs=gr.Image(type="pil"),
    title="图片转灰度"
)
demo.launch()

3. 聊天机器人(ChatInterface)

import gradio as gr

def chatbot(message, history):
    return f"你说的是:{message}"

demo = gr.ChatInterface(fn=chatbot, title="简单聊天机器人")
demo.launch()

4. 多标签页(Blocks)

import gradio as gr

with gr.Blocks() as demo:
    gr.Markdown("# 我的 AI 工具集")

    with gr.Tab("文本"):
        txt_in = gr.Textbox()
        txt_out = gr.Textbox()
        txt_btn = gr.Button("处理")
        txt_btn.click(lambda x: x[::-1], txt_in, txt_out)

    with gr.Tab("图片"):
        img_in = gr.Image()
        img_out = gr.Image()
        img_btn = gr.Button("处理")
        img_btn.click(lambda x: x, img_in, img_out)

demo.launch()

部署相关

让别人能访问

demo.launch(
    server_name="0.0.0.0",   # 监听所有网卡
    server_port=7860,
    share=False              # True 会生成临时公网链接
)

生成临时公网链接(72小时有效)

demo.launch(share=True)

生产部署建议

# 用 nohup 后台跑
nohup python app.py > gradio.log 2>&1 &

# 或用 screen/tmux
screen -S gradio
python app.py
# Ctrl+A D 分离

然后前面挂 Nginx 反向代理,配 HTTPS:

server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://127.0.0.1:7860;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

常用组件

组件 用途
gr.Textbox 文本输入/输出
gr.Number 数字
gr.Slider 滑块
gr.Dropdown 下拉选择
gr.Image 图片
gr.Audio 音频
gr.Video 视频
gr.File 文件上传
gr.Dataframe 表格
gr.Chatbot 对话展示

结合大模型示例

import gradio as gr
from openai import OpenAI

client = OpenAI(api_key="your-key")

def chat(message, history):
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": message}]
    )
    return response.choices[0].message.content

gr.ChatInterface(fn=chat).launch()

常见坑

  1. 端口被占用:默认 7860,冲突就改 server_port。
  2. share=True 慢:它走 Gradio 的 frp 中转,速度不稳定,生产别用。
  3. 中文乱码:Python 文件头加 # -*- coding: utf-8 -*-,或确保终端编码是 UTF-8。
  4. 并发问题:默认单线程,加 demo.queue() 支持并发:
    demo.queue().launch()
    
  5. 模型只加载一次:把模型加载写在 if __name__ == "__main__": 外面,避免每次请求都重载。

你是想做个什么应用?文本、图像还是接大模型?我可以给你完整可跑的模板。

posted @ 2026-09-27 15:49  AceFenix  阅读(3)  评论(0)    收藏  举报