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

Google Cloud converse_conversation返回空值/None的Flask报错排查

Flask对接Google Cloud Discovery Engine v1返回None引发视图函数错误

问题描述

我使用Flask框架对接Google Cloud discoveryengine_v1服务,尝试发起新的对话请求。从官方示例代码修改后测试时,出现类型错误,提示视图函数未返回有效响应(函数返回None或无return语句)。

代码实现

from flask import Flask, jsonify, request
from google.cloud import discoveryengine_v1

@app.route("/new", methods=['POST'])
def new_question():
   api_data = request.get_json()

   answer_response = sample_converse_conversation(api_data['question']) # api_data['question'] 是字符串类型

   print(answer_response)
   return answer_response

def sample_converse_conversation(question):
   try:
      # 创建客户端
      client = discoveryengine_v1.ConversationalSearchServiceClient()

      # 初始化请求参数
      request = discoveryengine_v1.ConverseConversationRequest(
        name="<name value>", # 已移除具体值,但包含项目详情
      )

      # 发起请求
      response = client.converse_conversation(request=request)

      # 处理响应
      return response
   except Exception as e:
      print(e)

报错信息

Traceback (most recent call last):
File "C:\AppData\Local\Programs\Python\Python310\lib\site-packages\flask\app.py", line 1478, in __call__
  return self.wsgi_app(environ, start_response)
File "C:\AppData\Local\Programs\Python\Python310\lib\site-packages\flask\app.py", line 1458, in wsgi_app
  response = self.handle_exception(e)
File "C:\AppData\Local\Programs\Python\Python310\lib\site-packages\flask_cors\extension.py", line 176, in wrapped_function
  return cors_after_request(app.make_response(f(*args, **kwargs)))
File "C:\AppData\Local\Programs\Python\Python310\lib\site-packages\flask\app.py", line 1455, in wsgi_app
  response = self.full_dispatch_request()
File "C:\AppData\Local\Programs\Python\Python310\lib\site-packages\flask\app.py", line 869, in full_dispatch_request
  rv = self.handle_user_exception(e)
File "C:\AppData\Local\Programs\Python\Python310\lib\site-packages\flask_cors\extension.py", line 176, in wrapped_function
  return cors_after_request(app.make_response(f(*args, **kwargs)))
File "C:\AppData\Local\Programs\Python\Python310\lib\site-packages\flask\app.py", line 867, in full_dispatch_request
  rv = self.dispatch_request()
File "C:\AppData\Local\Programs\Python\Python310\lib\site-packages\flask\app.py", line 852, in dispatch_request
  return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
File "C:\AppData\Local\Programs\Python\Python310\lib\site-packages\flask_cors\decorator.py", line 130, in wrapped_function
  resp = make_response(f(*args, **kwargs))
File "C:\AppData\Local\Programs\Python\Python310\lib\site-packages\flask\helpers.py", line 175, in make_response
  return current_app.make_response(args)  # type: ignore
File "C:\AppData\Local\Programs\Python\Python310\lib\site-packages\flask\app.py", line 1161, in make_response
  raise TypeError(TypeError: The view function for 'new_question' did not return a valid response. The function either returned None or ended without a return statement.

后端目录结构

后端目录结构

问题原因及解决方法

1. 异常分支未返回值

sample_converse_conversation函数的except块仅打印异常信息,未返回任何内容。一旦Google Cloud API调用触发异常,函数会返回None,导致Flask视图函数new_question返回无效值,触发报错。

修复代码:

except Exception as e:
    print(e)
    return {"error": str(e)}, 500

2. API请求未传入用户问题

构建ConverseConversationRequest时,仅指定了name参数,未将传入的question加入请求中。Google Cloud API因缺少必要参数可能返回异常,最终导致函数返回None。

修复代码:

request = discoveryengine_v1.ConverseConversationRequest(
    name="<name value>",
    query=discoveryengine_v1.TextInput(text=question)
)

3. Flask无法直接序列化Google API响应对象

即使API调用成功,直接返回Google的protobuf响应对象,Flask无法将其转换为有效的HTTP响应,也可能引发错误。

修复代码:
先导入依赖:

from google.protobuf.json_format import message_to_json
import json

然后修改响应返回逻辑:

# 在sample_converse_conversation函数中
return json.loads(message_to_json(response))

或者在视图函数中用jsonify包装:

@app.route("/new", methods=['POST'])
def new_question():
    api_data = request.get_json()
    answer_response = sample_converse_conversation(api_data['question'])
    print(answer_response)
    return jsonify(answer_response)

4. 验证Google Cloud认证配置

确保本地环境已配置Google Cloud认证,比如设置GOOGLE_APPLICATION_CREDENTIALS环境变量指向服务账号密钥文件,否则API调用会失败,触发异常分支返回None。


内容的提问来源于stack exchange,提问作者Sophia De Leon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:54:59