回调逻辑修改

This commit is contained in:
zhh
2025-10-31 11:24:22 +08:00
parent e195372bef
commit a50e99031a
2 changed files with 26 additions and 13 deletions

View File

@@ -81,7 +81,7 @@ class LCAgent(ls.LitAPI):
user_id=request.user_id, user_id=request.user_id,
gender=request.gender, gender=request.gender,
callback_url=request.callback_url) callback_url=request.callback_url)
logger.info("\n--- Final Recommendation Results ---") logger.info("--- Final Recommendation Results ---")
for i, path in enumerate(recommendation_results.get("successful_outfits", [])): for i, path in enumerate(recommendation_results.get("successful_outfits", [])):
logger.info(f"✅ Outfit {i + 1} saved to: {path}") logger.info(f"✅ Outfit {i + 1} saved to: {path}")
for failed in recommendation_results.get("failed_outfits", []): for failed in recommendation_results.get("failed_outfits", []):

View File

@@ -282,6 +282,14 @@ class AsyncStylistAgent:
logger.info(response_data) logger.info(response_data)
item_id = "" item_id = ""
item_category = "" item_category = ""
headers = {
'Accept': "*/*",
'Accept-Encoding': "gzip, deflate, br",
'User-Agent': "PostmanRuntime-ApipostRuntime/1.1.0",
'Connection': "keep-alive",
'Content-Type': "application/json"
}
url = f'{callback_url}/api/style/callback'
while True: while True:
# 1. 准备用户输入(上下文) # 1. 准备用户输入(上下文)
user_input = self._build_user_input() user_input = self._build_user_input()
@@ -292,12 +300,15 @@ class AsyncStylistAgent:
response_data['path'] = minio_path response_data['path'] = minio_path
if item_id: if item_id:
response_data['items'].append({"item_id": item_id, "category": item_category}) response_data['items'].append({"item_id": item_id, "category": item_category})
if not gemini_data: if not gemini_data:
# if gemini_data: # if gemini_data:
print("🚨 Agent 返回无效响应,终止流程。") print("🚨 Agent 返回无效响应,终止流程。")
self.stop_reason = "Agent failed to return response" self.stop_reason = "Agent failed to return response"
response_data['status'] = "failed" response_data['status'] = "failed"
response_data['message'] = self.stop_reason response_data['message'] = self.stop_reason
response = post_request(url=url, data=json.dumps(response_data), headers=headers)
logger.info(f"request data {response_data} | JAVA callback info -> status:{response.status_code} | message:{response.text}")
break break
# 3. 检查终止条件 # 3. 检查终止条件
@@ -306,6 +317,8 @@ class AsyncStylistAgent:
self.stop_reason = "Finish reason: " + gemini_data.get('reason', 'No reason provided') self.stop_reason = "Finish reason: " + gemini_data.get('reason', 'No reason provided')
response_data['status'] = "stop" response_data['status'] = "stop"
response_data['message'] = self.stop_reason response_data['message'] = self.stop_reason
response = post_request(url=url, data=json.dumps(response_data), headers=headers)
logger.info(f"request data {response_data} | JAVA callback info -> status:{response.status_code} | message:{response.text}")
break break
# 4. 处理推荐单品 # 4. 处理推荐单品
@@ -320,6 +333,8 @@ class AsyncStylistAgent:
# 这里简化为跳过本次循环 # 这里简化为跳过本次循环
response_data['status'] = "continue" response_data['status'] = "continue"
response_data['message'] = f"❌ Agent 推荐了无效类别: {category}。要求 Agent 重新输出。", response_data['message'] = f"❌ Agent 推荐了无效类别: {category}。要求 Agent 重新输出。",
response = post_request(url=url, data=json.dumps(response_data), headers=headers)
logger.info(f"request data {response_data} | JAVA callback info -> status:{response.status_code} | message:{response.text}")
continue continue
# 4b. 在本地 DB 中查询单品 # 4b. 在本地 DB 中查询单品
@@ -338,6 +353,8 @@ class AsyncStylistAgent:
self.stop_reason = "Finish reason: Duplicate item selected." self.stop_reason = "Finish reason: Duplicate item selected."
response_data['status'] = "stop" response_data['status'] = "stop"
response_data['message'] = self.stop_reason response_data['message'] = self.stop_reason
response = post_request(url=url, data=json.dumps(response_data), headers=headers)
logger.info(f"request data {response_data} | JAVA callback info -> status:{response.status_code} | message:{response.text}")
break break
if new_item['item_id'] == "ELG383": if new_item['item_id'] == "ELG383":
@@ -345,17 +362,23 @@ class AsyncStylistAgent:
self.stop_reason = "Finish reason: ELG383 is seleced repeatly." self.stop_reason = "Finish reason: ELG383 is seleced repeatly."
response_data['status'] = "stop" response_data['status'] = "stop"
response_data['message'] = self.stop_reason response_data['message'] = self.stop_reason
response = post_request(url=url, data=json.dumps(response_data), headers=headers)
logger.info(f"request data {response_data} | JAVA callback info -> status:{response.status_code} | message:{response.text}")
break break
self.outfit_items.append(new_item) self.outfit_items.append(new_item)
# print(f" 成功添加单品: {new_item['category']} ({new_item['item_id']}). 当前搭配数量: {len(self.outfit_items)}") # print(f" 成功添加单品: {new_item['category']} ({new_item['item_id']}). 当前搭配数量: {len(self.outfit_items)}")
response_data['status'] = "ok" response_data['status'] = "ok"
response_data['message'] = self.stop_reason response_data['message'] = self.stop_reason
response = post_request(url=url, data=json.dumps(response_data), headers=headers)
logger.info(f"request data {response_data} | JAVA callback info -> status:{response.status_code} | message:{response.text}")
else: else:
print("⚠️ 未找到匹配单品,无法继续搭配。终止。") print("⚠️ 未找到匹配单品,无法继续搭配。终止。")
self.stop_reason = "Finish reason: No matching item found in local database." self.stop_reason = "Finish reason: No matching item found in local database."
response_data['status'] = "stop" response_data['status'] = "stop"
response_data['message'] = self.stop_reason response_data['message'] = self.stop_reason
response = post_request(url=url, data=json.dumps(response_data), headers=headers)
logger.info(f"request data {response_data} | JAVA callback info -> status:{response.status_code} | message:{response.text}")
break break
if len(self.outfit_items) >= self.max_len: # 设置一个最大循环限制,防止无限循环 if len(self.outfit_items) >= self.max_len: # 设置一个最大循环限制,防止无限循环
@@ -363,19 +386,9 @@ class AsyncStylistAgent:
self.stop_reason = "Finish reason: Reached max outfit length." self.stop_reason = "Finish reason: Reached max outfit length."
response_data['status'] = "stop" response_data['status'] = "stop"
response_data['message'] = self.stop_reason response_data['message'] = self.stop_reason
response = post_request(url=url, data=json.dumps(response_data), headers=headers)
logger.info(f"request data {response_data} | JAVA callback info -> status:{response.status_code} | message:{response.text}")
break break
logger.info(f"request data {response_data}")
headers = {
'Accept': "*/*",
'Accept-Encoding': "gzip, deflate, br",
'User-Agent': "PostmanRuntime-ApipostRuntime/1.1.0",
'Connection': "keep-alive",
'Content-Type': "application/json"
}
url = f'{callback_url}/api/style/callback'
response = post_request(url=url, data=json.dumps(response_data), headers=headers)
logger.info(f"JAVA callback info -> status:{response.status_code} | message:{response.text}")
return response_data return response_data
def _upload_to_gcs(self, bucket_name: str, blob_name: str, mime_type, image_bytes) -> str: def _upload_to_gcs(self, bucket_name: str, blob_name: str, mime_type, image_bytes) -> str: