alanchen1115 commited on
Commit
5d2a72b
·
verified ·
1 Parent(s): 234804e

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +25 -19
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
- # 2. 判斷並提取純文字
201
- if isinstance(raw_content, list):
202
- # 如果是列表,把所有 type 為 'text' 的內容串接起來
203
- out = ""
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
- # 搜尋 URL 邏輯
211
- # 1. 使用更精確的 Regex 排除右括號
212
- urls = re.findall(r'https?://[^\s<>"\)]+|www\.[^\s<>"\)]+', out)
213
- # 2. 尋找圖片網址
 
 
 
 
 
 
 
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
- # 確保 image_url 不會包含 markdown 殘留物
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
- line_bot_api.reply_message(event.reply_token, TextSendMessage(text=out))
 
 
 
227
  except Exception as e:
228
  print(f"Agent Error: {e}")
229
- line_bot_api.reply_message(event.reply_token, TextSendMessage(text="抱歉,我現在無法處理這個請求。"))
 
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)