iT邦幫忙

2025 iThome 鐵人賽

DAY 19
0

前言

在 Day 18,我把藥品資料整理進一個乾淨的資料表,讓系統有了穩固的基礎。但我發現一般人查藥品時,想知道的不只是官方適應症或副作用列表,而是一些更日常的問題:

  • 「普拿疼可以空腹吃嗎?」

  • 「這個藥會讓人想睡嗎?」

  • 「小孩可以吃幾歲以上?」

這些問題往往不會直接出現在藥典或官方資料裡,但卻是使用者最關心的。
所以今天的重點,就是新增常見問與答(FAQ)模組

實作流程

1.建立 FAQ 資料表

import sqlite3

# 連線資料庫
conn = sqlite3.connect("medicine.db")
cursor = conn.cursor()

# 建立 FAQ 資料表
cursor.execute("""
CREATE TABLE IF NOT EXISTS faq (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    drug_name TEXT,
    question TEXT,
    answer TEXT
);
""")

conn.commit()
print("FAQ 資料表建立完成")
  1. 手動新增一筆 FAQ
faq_data = {
    "drug_name": "普拿疼",
    "question": "普拿疼可以空腹吃嗎?",
    "answer": "一般建議隨餐或飯後服用,避免空腹時可能造成腸胃不適。"
}

cursor.execute("""
INSERT INTO faq (drug_name, question, answer)
VALUES (:drug_name, :question, :answer)
""", faq_data)

conn.commit()
print(" FAQ 已新增!")

3.查詢 FAQ

def get_faq(drug_name, user_question):
    cursor.execute("SELECT question, answer FROM faq WHERE drug_name=?", (drug_name,))
    results = cursor.fetchall()

    for q, a in results:
        if user_question in q:  # 簡單關鍵字比對
            return a
    return None

answer = get_faq("普拿疼", "空腹吃")
print(" 查詢結果:", answer)
  1. FAQ 自動擴充(串 AI API,選配功能)
    如果 FAQ 查不到,就丟給 AI 回答,並寫回資料庫。
from openai import OpenAI

client = OpenAI(api_key="YOUR_API_KEY")

def ask_ai(drug_name, question):
    prompt = f"""
    你是一位專業藥師,請根據藥品知識回答以下問題:
    藥品:{drug_name}
    問題:{question}
    請用簡單白話的方式回答。
    """
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": prompt}]
    )
    return response.choices[0].message.content.strip()

def get_or_create_faq(drug_name, user_question):
    answer = get_faq(drug_name, user_question)
    if answer:
        return answer

    # 沒找到 → 請 AI 生成
    answer = ask_ai(drug_name, user_question)

    # 存進資料庫
    cursor.execute("""
    INSERT INTO faq (drug_name, question, answer)
    VALUES (?, ?, ?)
    """, (drug_name, user_question, answer))
    conn.commit()

    return answer

# 測試:問一個不存在的問題
print(" 使用者問題:普拿疼會不會讓人想睡?")
print(" 系統回覆:", get_or_create_faq("普拿疼", "會不會讓人想睡?"))

成果展示

第一次詢問:

輸入:普拿疼有什麼副作用?
輸出:[AI 回覆並新增到資料庫] 普拿疼常見副作用包含噁心、胃不適,長期或過量使用可能造成肝臟損傷,建議依照醫師指示服用。

第二次詢問(同一問題):

輸入:普拿疼有什麼副作用?
輸出:[資料庫回覆] 普拿疼常見副作用包含噁心、胃不適,長期或過量使用可能造成肝臟損傷,建議依照醫師指示服用。

心得

今天把常見問答模組接上 SQLite,做出了一個自我學習型 FAQ 系統。第一次查詢時,AI 會產生答案,並自動存到資料庫;第二次查詢同樣的問題時,就能直接回覆資料庫的內容,減少 API 成本,也提升反應速度。


上一篇
Day 18:資料結構優化 – 打造乾淨的藥品資料表
下一篇
Day 20:藥品比較工具
系列文
AI 藥師助手:打造人人都看得懂的藥品查詢系統22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言