Hellowish commited on
Commit
cac4759
·
verified ·
1 Parent(s): 2ddb6f3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +32 -14
app.py CHANGED
@@ -36,24 +36,42 @@ def extract_text(file):
36
 
37
  # 3. 定義主預測邏輯
38
  def predict(file, manual_context, question):
39
- # 優先從上傳的文件提取內容,若無則使用手動輸入的內容
 
 
 
 
 
40
  if file is not None:
 
41
  context = extract_text(file)
42
- else:
 
 
43
  context = manual_context
 
 
 
 
44
 
45
- if not context or not question:
46
- return "請先提供文件內容(上傳或貼上文字)並輸入提問。"
47
-
48
- # 執行問答推理
49
- # 加入 handle_impossible_answer=True 處理 SQuAD v2.0 特性
50
- result = qa_model(question=question, context=context)
51
-
52
- # 信心門檻判斷
53
- if result['score'] < 0.05:
54
- return "抱歉,在文件內容中找不到相關答案(模型信心程度較低)。"
55
-
56
- return f"回答:{result['answer']}\n(信心分數: {round(result['score'], 4)})"
 
 
 
 
 
 
57
 
58
  # 4. 建立 Gradio 網頁介面
59
  with gr.Blocks(title="Case Study: AI Document QA") as demo:
 
36
 
37
  # 3. 定義主預測邏輯
38
  def predict(file, manual_context, question):
39
+ # 1. 檢查問題是否為空
40
+ if not question.strip():
41
+ return "⚠️ 請輸入您想提問的問題。"
42
+
43
+ # 2. 判斷資料來源優先級
44
+ source_info = ""
45
  if file is not None:
46
+ # 如果有上傳檔案,優先讀取檔案
47
  context = extract_text(file)
48
+ source_info = f"📝 來源:已偵測到上傳檔案 ({file.name.split('/')[-1]})"
49
+ elif manual_context.strip():
50
+ # 如果沒有檔案但有貼上文字
51
  context = manual_context
52
+ source_info = "📝 來源:手動輸入的文本"
53
+ else:
54
+ # 兩者皆無
55
+ return "⚠️ 請先提供文件內容(上傳檔案或是在文字框貼上內容)。"
56
 
57
+ # 3. 檢查 Context 是否成功提取文字
58
+ if not context.strip():
59
+ return "⚠️ 無法從提供的來源中提取有效文字,請檢查檔案格式。"
60
+
61
+ # 4. 執行模型推理
62
+ try:
63
+ result = qa_model(question=question, context=context)
64
+
65
+ # SQuAD 2.0 門檻檢查
66
+ if result['score'] < 0.01:
67
+ return f"{source_info}\n\n❌ 抱歉,在提供的內容中找不到相關答案。"
68
+
69
+ return (f"{source_info}\n"
70
+ f"🎯 模型回答:{result['answer']}\n"
71
+ f"📊 信心分數:{round(result['score'] * 100, 2)}%")
72
+
73
+ except Exception as e:
74
+ return f"❌ 發生錯誤:{str(e)}"
75
 
76
  # 4. 建立 Gradio 網頁介面
77
  with gr.Blocks(title="Case Study: AI Document QA") as demo: