baodan/api/insurance/recommend/workflow_helper.py

57 lines
1.9 KiB
Python
Raw Normal View History

"""BaoDan Workflow 调用封装。"""
import requests
from flask import current_app
class WorkflowHelper:
"""Workflow API 调用封装。"""
def run_workflow(self, inputs: dict, user_id: str) -> dict:
"""
执行 Workflow 获取推荐方案
Args:
inputs: 客户信息和保险需求
user_id: 用户 ID
Returns:
Workflow 执行结果
"""
base_url = current_app.config.get("BAODAN_API_URL", "http://localhost:5001")
api_key = current_app.config.get("BAODAN_WORKFLOW_API_KEY", "")
if not api_key:
return {"code": 5001, "message": "Workflow API Key 未配置"}
try:
resp = requests.post(
f"{base_url}/v1/workflows/run",
json={
"inputs": inputs,
"response_mode": "blocking",
"user": f"recommend_{user_id}",
},
headers={"Authorization": f"Bearer {api_key}"},
timeout=120,
)
if resp.status_code != 200:
return {"code": 5001, "message": f"Workflow 调用失败: HTTP {resp.status_code}"}
result = resp.json()
# 解析 Workflow 输出
if result.get("status") == "succeeded":
outputs = result.get("data", {}).get("outputs", {})
return {"code": 0, "data": outputs}
else:
error = result.get("error", "未知错误")
return {"code": 5001, "message": f"Workflow 执行失败: {error}"}
except requests.Timeout:
return {"code": 5001, "message": "Workflow 调用超时120秒"}
except requests.RequestException as e:
return {"code": 5001, "message": f"Workflow 调用异常: {str(e)}"}
except Exception as e:
return {"code": 9999, "message": f"未知错误: {str(e)}"}