baodan/api/insurance/recommend/workflow_helper.py

57 lines
1.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""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)}"}