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

Cloud Run部署的Vertex AI Gradio应用REST请求返回无效响应且日志无法显示

Cloud Run部署的Vertex AI Gradio应用REST请求返回无效响应且日志无法显示

我来帮你逐个解决这两个头疼的问题:


一、REST请求返回奇怪响应的原因和解决办法

你现在直接POST到Cloud Run的端点,得到的其实是Gradio为网页前端交互生成的内部状态数据,不是模型的直接响应——这很正常,因为Gradio默认的/api/predict接口是给它自己的前端用的,不是标准的REST API。

解决思路有两个:

  1. 按照Gradio的API规范发送请求
    如果你想继续用Gradio自带的接口,请求体必须符合它的格式。你的输入是MultimodalTextbox,请求应该这样构造:

    {
      "data": ["需要修正的捷克文本内容"]
    }
    

    发送POST到/api/predict后,响应里的data字段才是模型返回的结果,你可以从中提取text值。

  2. 自定义标准REST接口(更推荐)
    如果你需要一个符合自己需求的REST API,建议用FastAPI和Gradio结合,单独开一个路由处理POST请求。步骤如下:

    • 先在requirements.txt里添加fastapi和uvicorn
    • 修改app.py的代码:
      import base64
      from google import genai
      from google.genai import types
      import gradio as gr
      import utils
      import logging
      from fastapi import FastAPI
      import uvicorn
      
      # 保留你原来的generate函数不变...
      
      # 初始化FastAPP和Gradio接口
      app = FastAPI()
      iface = gr.Interface(
          fn=generate,
          inputs=gr.MultimodalTextbox(),
          outputs=gr.MultimodalTextbox(),
          title="Czech Text Correction and Explanation - Informal"
      )
      
      # 把Gradio挂载到FastAPI的根路径(保留网页访问功能)
      app = gr.mount_gradio_app(app, iface, path="/")
      
      # 自定义REST接口,处理标准POST请求
      @app.post("/api/correct-czech")
      async def correct_czech(text: str):
          # 调用generate函数,处理它的生成器返回值
          final_result = None
          for output in generate(text, None):
              final_result = output
          # 返回你需要的JSON格式
          return {"corrected_text": final_result["text"]}
      
      if __name__ == "__main__":
          # 用uvicorn启动服务,替代原来的iface.launch()
          uvicorn.run(app, host="0.0.0.0", port=8080)
      

    这样你就可以POST到/api/correct-czech,发送{"text": "你的捷克文本"},得到干净的标准JSON响应。


二、Cloud Run日志不显示的问题排查和修复

先看你代码里的几个明显问题,这些都会导致日志出不来:

  1. 代码里的未定义变量错误
    你写了logger.info("got here"),但根本没定义logger对象,应该改成logging.info("got here"),这个错误会让程序直接崩溃,后面的日志自然打不出来。

  2. 启动时主动抛出错误
    你在main()函数里直接raise gr.Error(...),这会导致程序刚启动就崩溃,连Gradio都没机会启动,日志当然看不到。先把这行代码删掉,确保程序能正常运行。

  3. 日志格式不兼容Cloud Run
    Cloud Run优先收集结构化的JSON日志,或者至少要确保日志输出到stdout/stderr。修改你的logging配置:

    import logging
    from pythonjsonlogger import jsonlogger
    
    # 配置结构化日志,适配Cloud Run
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)
    # 清空默认的handler,避免重复输出
    logger.handlers = []
    handler = logging.StreamHandler()
    # 用JSON格式输出日志,包含时间、级别、消息
    formatter = jsonlogger.JsonFormatter(
        "%(asctime)s %(levelname)s %(message)s"
    )
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    

    记得把python-json-logger加到requirements.txt里,Dockerfile会自动安装它。

  4. Cloud Run日志查看注意事项

    • 进入Cloud Run控制台的服务详情页,点击「日志」标签,确认时间范围选对了,没有过滤掉INFO级别的日志
    • 确认服务使用的服务账号(默认是PROJECT_NUMBER-compute@developer.gserviceaccount.com)拥有Logs Writer权限,如果是自定义账号,手动添加这个权限

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 09:58:09