cwadayi commited on
Commit
5c41367
·
verified ·
1 Parent(s): 6ddbfb0

Update command_handler.py

Browse files
Files changed (1) hide show
  1. command_handler.py +12 -38
command_handler.py CHANGED
@@ -1,4 +1,4 @@
1
- # command_handler.py (Improved date keyword pre-processing for AI queries)
2
  import pandas as pd
3
  import re
4
  from datetime import datetime, timedelta
@@ -43,7 +43,7 @@ def get_info_message() -> TextMessage:
43
  text = (
44
  "🤖 關於我\n\n"
45
  "我是一個多功能助理機器人,提供地震查詢與 AI 對話功能。\n\n"
46
- "• 版本: 5.4 (Gemini Pre-processor Edition)\n"
47
  "• 資料來源: CWA, USGS, Google Gemini\n"
48
  "• 開發者: dayichen"
49
  )
@@ -77,48 +77,20 @@ def get_latest_earthquake_reply() -> list:
77
  except Exception as e: return [TextMessage(text=f"❌ 查詢最新地震失敗:{e}")]
78
 
79
  def preprocess_ai_prompt(prompt: str) -> str:
80
- """
81
- [核心修正]
82
- 強化預處理:偵測多種時間關鍵字,並將問題改寫為更明確的指令。
83
- """
84
  today = datetime.now()
85
  year_match = re.search(r"(\d{4})年", prompt)
86
-
87
- # 建立時間關鍵字與對應日期的字典
88
- time_keywords = {
89
- "昨天": (today - timedelta(days=1)).strftime("%Y-%m-%d"),
90
- "今天": today.strftime("%Y-%m-%d"),
91
- "今年": str(today.year),
92
- "去年": str(today.year - 1),
93
- }
94
-
95
- # 如果找到 "YYYY年" 的格式,也加入字典
96
- if year_match:
97
- time_keywords[year_match.group(0)] = year_match.group(1)
98
-
99
- # 如果訊息中包含 "地震"
100
  if "地震" in prompt:
101
  for keyword, date_val in time_keywords.items():
102
  if keyword in prompt:
103
- # 判斷是查詢特定一天還是一整年
104
- if len(date_val) == 10: # YYYY-MM-DD 格式
105
- start_date = end_date = date_val
106
- date_range_str = date_val
107
- else: # YYYY 格式
108
- start_date = f"{date_val}-01-01"
109
- end_date = f"{date_val}-12-31"
110
- date_range_str = f"{date_val}年"
111
-
112
- # 根據是否包含"最大"來決定指令內容
113
- if "最大" in prompt:
114
- new_prompt = f"請幫我呼叫地震搜尋工具,找出從 {start_date} 到 {end_date} 之間,規模最大的地震是哪一個。"
115
- else:
116
- new_prompt = f"請幫我呼叫地震搜尋工具,查詢從 {start_date} 到 {end_date} 之間發生的所有地震。"
117
-
118
  print(f"--- AI Prompt Rewritten ---\nOriginal: {prompt}\nNew: {new_prompt}\n---------------------------")
119
  return new_prompt
120
-
121
- return prompt # 如果沒有匹配,回傳原始問題
122
 
123
  def process_message(user_message_raw: str, request_base_url: str) -> list:
124
  user_message = (user_message_raw or "").strip()
@@ -141,4 +113,6 @@ def process_message(user_message_raw: str, request_base_url: str) -> list:
141
  processed_prompt = preprocess_ai_prompt(arg)
142
  return [TextMessage(text=generate_ai_text(processed_prompt))]
143
 
144
- return [get_help_message()]
 
 
 
1
+ # command_handler.py (Silent on non-command messages)
2
  import pandas as pd
3
  import re
4
  from datetime import datetime, timedelta
 
43
  text = (
44
  "🤖 關於我\n\n"
45
  "我是一個多功能助理機器人,提供地震查詢與 AI 對話功能。\n\n"
46
+ "• 版本: 5.5 (Silent Mode Edition)\n"
47
  "• 資料來源: CWA, USGS, Google Gemini\n"
48
  "• 開發者: dayichen"
49
  )
 
77
  except Exception as e: return [TextMessage(text=f"❌ 查詢最新地震失敗:{e}")]
78
 
79
  def preprocess_ai_prompt(prompt: str) -> str:
 
 
 
 
80
  today = datetime.now()
81
  year_match = re.search(r"(\d{4})年", prompt)
82
+ time_keywords = { "昨天": (today - timedelta(days=1)).strftime("%Y-%m-%d"), "今天": today.strftime("%Y-%m-%d"), "今年": str(today.year), "去年": str(today.year - 1), }
83
+ if year_match: time_keywords[year_match.group(0)] = year_match.group(1)
 
 
 
 
 
 
 
 
 
 
 
 
84
  if "地震" in prompt:
85
  for keyword, date_val in time_keywords.items():
86
  if keyword in prompt:
87
+ if len(date_val) == 10: start_date = end_date = date_val
88
+ else: start_date, end_date = f"{date_val}-01-01", f"{date_val}-12-31"
89
+ if "最大" in prompt: new_prompt = f"請幫我呼叫地震搜尋工具,找出從 {start_date} 到 {end_date} 之間,規模最大的地震是哪一個。"
90
+ else: new_prompt = f"請幫我呼叫地震搜尋工具,查詢從 {start_date} 到 {end_date} 之間發生的所有地震。"
 
 
 
 
 
 
 
 
 
 
 
91
  print(f"--- AI Prompt Rewritten ---\nOriginal: {prompt}\nNew: {new_prompt}\n---------------------------")
92
  return new_prompt
93
+ return prompt
 
94
 
95
  def process_message(user_message_raw: str, request_base_url: str) -> list:
96
  user_message = (user_message_raw or "").strip()
 
113
  processed_prompt = preprocess_ai_prompt(arg)
114
  return [TextMessage(text=generate_ai_text(processed_prompt))]
115
 
116
+ # [核心修改]
117
+ # 對於所有其他無法識別的訊息 (一般對話),回傳一個空列表,代表「不回應」。
118
+ return []