Spaces:
Sleeping
Sleeping
Update main.py
Browse files
main.py
CHANGED
|
@@ -194,27 +194,29 @@ def handle_message(event):
|
|
| 194 |
agent_input = {"messages": [{"role": "user", "content": user_text}]}
|
| 195 |
try:
|
| 196 |
response = agent_executor.invoke(agent_input)
|
| 197 |
-
# 1. 先取得原始內容 (可能是字串,也可能是列表)
|
| 198 |
raw_content = response["messages"][-1].content
|
| 199 |
-
print(raw_content)
|
| 200 |
-
|
| 201 |
-
|
| 202 |
-
|
| 203 |
-
|
| 204 |
-
for block in raw_content:
|
| 205 |
-
if isinstance(block, dict) and block.get("type") == "text":
|
| 206 |
-
out += block.get("text", "")
|
| 207 |
-
else:
|
| 208 |
-
# 如果已經是字串,直接指派
|
| 209 |
out = raw_content
|
| 210 |
-
|
| 211 |
-
|
| 212 |
-
|
| 213 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 214 |
image_url = next((u for u in urls if any(ext in u.lower() for ext in ['.png', '.jpg', '.jpeg', '.gif'])), None)
|
|
|
|
|
|
|
| 215 |
if image_url:
|
| 216 |
-
|
| 217 |
-
image_url = image_url.split(')')[0]
|
| 218 |
line_bot_api.reply_message(
|
| 219 |
event.reply_token,
|
| 220 |
[
|
|
@@ -223,10 +225,14 @@ def handle_message(event):
|
|
| 223 |
]
|
| 224 |
)
|
| 225 |
else:
|
| 226 |
-
|
|
|
|
|
|
|
|
|
|
| 227 |
except Exception as e:
|
| 228 |
print(f"Agent Error: {e}")
|
| 229 |
-
|
|
|
|
| 230 |
|
| 231 |
if __name__ == "__main__":
|
| 232 |
uvicorn.run(app, host="0.0.0.0", port=7860)
|
|
|
|
| 194 |
agent_input = {"messages": [{"role": "user", "content": user_text}]}
|
| 195 |
try:
|
| 196 |
response = agent_executor.invoke(agent_input)
|
|
|
|
| 197 |
raw_content = response["messages"][-1].content
|
| 198 |
+
print(f"原始內容: {raw_content}")
|
| 199 |
+
|
| 200 |
+
out = ""
|
| 201 |
+
# 1. 判斷並提取內容
|
| 202 |
+
if isinstance(raw_content, str):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 203 |
out = raw_content
|
| 204 |
+
elif isinstance(raw_content, list):
|
| 205 |
+
# 串接所有文字區塊
|
| 206 |
+
out = "".join([block.get("text", "") for block in raw_content if isinstance(block, dict) and block.get("type") == "text"])
|
| 207 |
+
elif isinstance(raw_content, dict):
|
| 208 |
+
# 如果直接回傳字典 (如您的 Log 所示)
|
| 209 |
+
# 優先抓取內容,如果沒內容就轉成字串避免出錯
|
| 210 |
+
out = raw_content.get("imageUrl", str(raw_content))
|
| 211 |
+
|
| 212 |
+
# 2. 搜尋 URL 邏輯 (修正 Regex 並過濾)
|
| 213 |
+
# 使用 str(out) 確保處理的是字串
|
| 214 |
+
urls = re.findall(r'https?://[^\s<>"\)]+|www\.[^\s<>"\)]+', str(out))
|
| 215 |
image_url = next((u for u in urls if any(ext in u.lower() for ext in ['.png', '.jpg', '.jpeg', '.gif'])), None)
|
| 216 |
+
|
| 217 |
+
# 3. 回覆邏輯
|
| 218 |
if image_url:
|
| 219 |
+
image_url = image_url.split(')')[0]
|
|
|
|
| 220 |
line_bot_api.reply_message(
|
| 221 |
event.reply_token,
|
| 222 |
[
|
|
|
|
| 225 |
]
|
| 226 |
)
|
| 227 |
else:
|
| 228 |
+
# 確保 out 不是空的,否則 LINE 會報 400 錯誤
|
| 229 |
+
final_text = out.strip() if out else "處理完成,但沒有文字內容。"
|
| 230 |
+
line_bot_api.reply_message(event.reply_token, TextSendMessage(text=final_text))
|
| 231 |
+
|
| 232 |
except Exception as e:
|
| 233 |
print(f"Agent Error: {e}")
|
| 234 |
+
# 同樣確保錯誤回覆不是空的
|
| 235 |
+
line_bot_api.reply_message(event.reply_token, TextSendMessage(text="抱歉,系統處理時發生錯誤。"))
|
| 236 |
|
| 237 |
if __name__ == "__main__":
|
| 238 |
uvicorn.run(app, host="0.0.0.0", port=7860)
|