故事发生在今天下午,企业微信告警群里发现有供应商在疯狂上传回执单,并且回执单都没有通过,而是卡在了异常状态。通常这种状态是供应商上传的回执单不符合格式,或者上传的是一个损坏的文件。
我留心了一下,找到对应账单去审查流转记录,发现供应商上传的文件符合格式,但是异常中断,于是去核查脚本的日志,发现大模型部署的机器ip访问不通了,并且会重试3次(埋下伏笔)
golang服务会调用python脚本进行回执单校验,这个脚本调用了我们本地部署的一个大模型,大模型所在的服务器是放在河南的某个机房里。
于是我立刻找运维确认,该服务器被误下机了,恢复需要至少明天。
为了解决供应商的燃眉之急,我必须修改脚本放开校验流程,捕捉异常情况后模拟返回正常响应。让用户再次尝试上传,结果用户侧反馈网络错误。
except Exception as e: # 异常情况输出 # error_result={ # "code":500, # "success":False, # "message":str(e), # "data":None # } # 返回成功响应(自动通过) success_result = { "code": 0, "success": True, "data": { "receipt_id": receipt_info.get('id', 0) if receipt_info else 0, "bill_id": args_bill_id, "verify_status": 1, # 1=校验通过 "verify_msg": [], "receipt_info": { "receipt_bill_num": "AUTO_PASS", "total_amount": 0, "has_stamp": True, "category": "clear_stamp", "clarity_score": "1000" } }, "message": "自动通过(大模型服务暂时不可用)" } print(json.dumps(success_result, ensure_ascii=False)) logging.info(f"自动通过结果:{json.dumps(success_result, ensure_ascii=False)} \n")
我查看服务端日志,发现并没有异常返回,程序正常执行。于是本地安装抓包工具,登录测试账号进行验证,发现真的会转圈圈,抓包反馈超时。于是才想起来调用大模型api的时候,是会尝试3次的,这三次的时间加起来超过了服务端的超时时间。
于是再次修改代码,直接在调用大模型之前raise,问题得以顺利解决,不过在新服务器上架之前,我必须人工核验这些回执单
def _call_llm_api_with_image(self,prompt: str,image_data: bytes) -> str: """调用大模型API处理图片""" # 临时关闭大模型调用,直接抛出异常 raise Exception("大模型服务暂时关闭")