Azure Databricks LLM端点调用异常:200响应但Body锁定求助
Azure Databricks LLM端点调用返回200但响应Body锁定问题排查
检查Flask代理的响应处理逻辑
如果是通过Flask转发请求到Databricks端点,确认代码是否正确读取并返回响应内容。直接返回requests库的原始响应对象可能导致响应体被锁定,需先读取响应内容再返回:# 错误写法:直接返回response对象 @app.route('/call-llm', methods=['POST']) def call_llm(): res = requests.post(DATABRICKS_ENDPOINT, json=request.json, headers=headers) return res # 正确写法:读取响应内容后返回 @app.route('/call-llm', methods=['POST']) def call_llm(): res = requests.post(DATABRICKS_ENDPOINT, json=request.json, headers=headers) return jsonify(res.json()), res.status_code验证CORS配置是否干扰响应解析
前端React可能因CORS策略无法正常解析响应体,检查Flask的CORS设置,确保允许前端域名,且响应头包含Access-Control-Allow-Origin等必要字段。同时排查是否有过严的Content-Security-Policy头导致浏览器拦截响应。排查Azure应用服务的响应限制
Azure App Service默认对响应体大小、超时时间有限制,若LLM返回的响应过大或处理时间过长,可能触发响应锁定。在Azure门户的应用服务配置中,调整响应超时时间,或检查是否开启响应压缩导致解析异常。核对请求头的一致性
对比Postman和应用中发送的请求头,确保Authorization、Content-Type等关键头信息完全一致。重点确认Databricks所需的认证令牌在Flask转发时未被篡改或丢失,比如正确设置headers={'Authorization': f'Bearer {TOKEN}'}。处理流式响应的特殊逻辑
若LLM端点返回流式响应,Postman可自动处理,但Flask和React需专门代码适配:# Flask流式响应示例 @app.route('/stream-llm', methods=['POST']) def stream_llm(): def generate(): with requests.post(DATABRICKS_ENDPOINT, json=request.json, headers=headers, stream=True) as r: for chunk in r.iter_content(chunk_size=1024): yield chunk return Response(generate(), mimetype='application/json')前端React对应处理:
const response = await fetch('/stream-llm', { method: 'POST', body: JSON.stringify(data), headers: {'Content-Type': 'application/json'} }); const reader = response.body.getReader(); while (true) { const { done, value } = await reader.read(); if (done) break; const chunk = new TextDecoder().decode(value); // 处理流式返回内容 }
内容的提问来源于stack exchange,提问作者maxim
相关产品推荐
相关产品推荐

