Amity123 commited on
Commit
992f0fb
·
verified ·
1 Parent(s): 97ae401

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +5 -11
app.py CHANGED
@@ -3,11 +3,12 @@ import gradio as gr
3
  import numpy as np
4
  import re
5
  import traceback
 
6
 
7
- # ======== 1. 初始化 OpenAI ========
8
- client = OpenAI(api_key="OPENAIAPIKEY") # 替換成你的 API key
9
 
10
- # ======== 2. 專業領域定義 ========
11
  PROFESSIONS = {
12
  "程式設計": "你是一位資深程式設計師,回答必須專業、詳細,附上程式範例與步驟。",
13
  "行銷": "你是一位行銷專家,回答必須專業、詳細,提供可執行行銷策略與步驟。",
@@ -53,7 +54,6 @@ def detect_profession(user_input: str) -> str:
53
  print("Embedding 呼叫錯誤:", traceback.format_exc())
54
  return "你是一個專業顧問,回答必須專業、詳細、可操作。"
55
 
56
- # 計算餘弦相似度
57
  scores = {}
58
  for field, emb in profession_embeddings.items():
59
  if np.linalg.norm(text_vector)==0 or np.linalg.norm(emb)==0:
@@ -68,11 +68,8 @@ def professional_agent(user_input, state):
68
  user_input = safe_utf8(user_input)
69
 
70
  if state.get("profession_prompt") is None:
71
- # 第一次輸入,判斷職業
72
  profession_prompt = detect_profession(user_input)
73
  state["profession_prompt"] = profession_prompt
74
-
75
- # 抽取問題部分
76
  question = re.sub(r"我是.*?(,|,)", "", user_input)
77
  if not question.strip():
78
  answer = "✅ 已設定你的專業領域,請提出問題。"
@@ -81,7 +78,6 @@ def professional_agent(user_input, state):
81
  else:
82
  user_input = question
83
 
84
- # 構造對話
85
  messages = [{"role": "system", "content": state["profession_prompt"]}]
86
  for h in state["chat_history"]:
87
  messages.append({"role": "user", "content": h[0]})
@@ -96,12 +92,10 @@ def professional_agent(user_input, state):
96
  )
97
  answer = safe_utf8(response.choices[0].message.content)
98
  except Exception as e:
99
- # 捕獲完整 traceback,顯示在 Chatbot
100
  tb = traceback.format_exc()
101
  print(tb)
102
  answer = f"⚠️ 發生錯誤: {str(e)}\n詳情請看後端 logs"
103
 
104
- # 儲存歷史訊息
105
  state["chat_history"].append([user_input, answer])
106
  if len(state["chat_history"]) > 10:
107
  state["chat_history"] = state["chat_history"][-10:]
@@ -113,7 +107,7 @@ with gr.Blocks() as demo:
113
  gr.Markdown("## 🧑‍💼 全職業專業 AI 顧問")
114
  gr.Markdown("第一次輸入可以同時輸入職業 + 問題,例如:我是會計師,我想知道台灣稅務分析")
115
 
116
- chatbot = gr.Chatbot()
117
  msg = gr.Textbox(label="輸入訊息")
118
  state = gr.State({"chat_history": [], "profession_prompt": None})
119
 
 
3
  import numpy as np
4
  import re
5
  import traceback
6
+ import os
7
 
8
+ # ======== 1. 初始化 OpenAI (使用 HF Secret Key) ========
9
+ client = OpenAI(api_key=os.environ.get("OPENAIAPIKEY"))
10
 
11
+ # ======== 2. 專業領域 ========
12
  PROFESSIONS = {
13
  "程式設計": "你是一位資深程式設計師,回答必須專業、詳細,附上程式範例與步驟。",
14
  "行銷": "你是一位行銷專家,回答必須專業、詳細,提供可執行行銷策略與步驟。",
 
54
  print("Embedding 呼叫錯誤:", traceback.format_exc())
55
  return "你是一個專業顧問,回答必須專業、詳細、可操作。"
56
 
 
57
  scores = {}
58
  for field, emb in profession_embeddings.items():
59
  if np.linalg.norm(text_vector)==0 or np.linalg.norm(emb)==0:
 
68
  user_input = safe_utf8(user_input)
69
 
70
  if state.get("profession_prompt") is None:
 
71
  profession_prompt = detect_profession(user_input)
72
  state["profession_prompt"] = profession_prompt
 
 
73
  question = re.sub(r"我是.*?(,|,)", "", user_input)
74
  if not question.strip():
75
  answer = "✅ 已設定你的專業領域,請提出問題。"
 
78
  else:
79
  user_input = question
80
 
 
81
  messages = [{"role": "system", "content": state["profession_prompt"]}]
82
  for h in state["chat_history"]:
83
  messages.append({"role": "user", "content": h[0]})
 
92
  )
93
  answer = safe_utf8(response.choices[0].message.content)
94
  except Exception as e:
 
95
  tb = traceback.format_exc()
96
  print(tb)
97
  answer = f"⚠️ 發生錯誤: {str(e)}\n詳情請看後端 logs"
98
 
 
99
  state["chat_history"].append([user_input, answer])
100
  if len(state["chat_history"]) > 10:
101
  state["chat_history"] = state["chat_history"][-10:]
 
107
  gr.Markdown("## 🧑‍💼 全職業專業 AI 顧問")
108
  gr.Markdown("第一次輸入可以同時輸入職業 + 問題,例如:我是會計師,我想知道台灣稅務分析")
109
 
110
+ chatbot = gr.Chatbot(type="messages") # 設定 type='messages' 避免 tuple 警告
111
  msg = gr.Textbox(label="輸入訊息")
112
  state = gr.State({"chat_history": [], "profession_prompt": None})
113