iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0

為什麼要給題目加上標籤?因為在複習時,我們不一定能記得所有的題目、專有名詞,但是給題目加上標籤後,我們就可以以標籤來做為搜尋條件,快速找到相關題目。標籤還能用來追蹤錯題的類型,讓我們更容易了解自己不懂的是哪些部分。

一般情況下,如果想要自動生成題目的標籤,想要準較高的確度,需要先進行大量人工標註,建立好訓練資料,再透過模型進行分類或標籤生成。但這樣的流程不僅耗時,還需要持續更新與維護資料集,不一定能在這次鐵人賽完成,所以這次我選擇讓ai根據題目來提取標籤。

  1. API key獲取
    這次選用mistral模型,先到 mistral 官網創建帳號,創建完後在下圖位置申請api keyhttps://ithelp.ithome.com.tw/upload/images/20250920/20169370kuUucUUln2.png

  2. 在環境變數中加入MISTRAL_API_KEY
    https://ithelp.ithome.com.tw/upload/images/20250920/20169370NCb16GsTlK.png

  3. 找到官方範例,換上需要的提示詞

# 讀取題目、答案,準備加入提示詞
file_path = os.path.join( " json檔路徑 " )
with open(file_path, 'r', encoding='utf-8') as f:
    questions = json.load(f)

for item in questions:
    question = item['題目']
    answer = item['答案']

prompt = f"""
    你是一個標籤生成助手。根據提供的題目和答案,請從提供的「題目」和「答案」中,提取1到3個最能代表主題的繁體中文關鍵字。
    範例:
    題目:白血病又稱血癌,是鄉土劇中常見的生病橋段。主因骨髓造血細胞產生不正常增生,進而影響骨髓造血功能的惡性疾病。『白血病』的英文是?
    答案:Leukemia
    標籤:白血病、血癌

    現在,請生成以下內容的關鍵字:
    題目:{question}
    答案:{answer}
    標籤:
"""
  1. 把生成的結果存回json
keywords = chat_response.choices[0].message.content.strip().replace('標籤:', '')
item['標籤'] = keywords.split('、')
        
except Exception as e:
    print(f"在處理題目 '{question}' 時發生錯誤:{e}")
    continue
        
# 存檔
output_file_path = os.path.join( " json檔路徑 " )
with open(output_file_path, 'w', encoding='utf-8') as f:
    json.dump(questions, f, ensure_ascii=False, indent=4)

print(f"\n所有標籤處理完成,已成功儲存至 {output_file_path}")

最後執行一下測試,大功告成!
https://ithelp.ithome.com.tw/upload/images/20250920/20169370NBSIXo7nmC.png
https://ithelp.ithome.com.tw/upload/images/20250920/201693704vDG22uBqf.png


上一篇
DAY5 - 題目詳情&切換答案顯示
系列文
打造你的數位圖書館:從雜亂檔案到個人化知識庫6
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言