2024年12月25日 星期三

利用Ollama辨識症狀並協助醫生快速診斷

程式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import random
import ollama

# 模擬患者數據收集
def get_patient_data():
    data = {
        "heart_rate": random.randint(60, 100),  # 心率 (次/分鐘)
        "body_temperature": round(random.uniform(36.0, 40.0), 1),  # 體溫 (°C)
        "blood_pressure": f"{random.randint(90, 140)}/{random.randint(60, 90)}",  # 血壓 (收縮壓/舒張壓)
        "symptoms": random.choice(["咳嗽", "發燒", "頭痛", "肌肉疼痛", "喉嚨痛"])
    }
    print(f"收集的患者數據:{data}")
    return data

# 將患者數據轉為診斷描述
def prepare_diagnostic_prompt(patient_data):
    prompt = (
        f"以下是患者的生理數據與症狀:\n"
        f"- 心率:{patient_data['heart_rate']} 次/分鐘\n"
        f"- 體溫:{patient_data['body_temperature']} °C\n"
        f"- 血壓:{patient_data['blood_pressure']}\n"
        f"- 症狀:{patient_data['symptoms']}\n"
        f"請根據以上數據提供可能的診斷建議,並協助醫生進一步確診。"
    )
    print(f"生成的診斷請求描述:\n{prompt}")
    return prompt

# 與 Ollama 交互進行診斷分析
def analyze_diagnosis_with_ollama(question_1, ans_1, question_2):
    try:
        # 使用 Ollama 進行互動分析
        response = ollama.chat(
            model="llama3.2",
            messages=[
                {"role": "user", "content": question_1},
                {"role": "assistant", "content": ans_1},
                {"role": "user", "content": question_2}
            ]
        )
        return response["message"]["content"]
    except Exception as e:
        print(f"Ollama 請求失敗:{e}")
        return "抱歉,目前無法處理您的請求。"

# 主程序
if __name__ == "__main__":
    print("啟動智能診斷系統...")
    
    # 獲取患者數據
    patient_data = get_patient_data()

    # 問題 1:基本醫療問題
    question_1 = "什麼是正常的心率與體溫範圍?"
    ans_1 = "正常心率範圍為 60-100 次/分鐘,正常體溫範圍為 36.1°C 至 37.2°C。"

    # 問題 2:診斷描述
    question_2 = prepare_diagnostic_prompt(patient_data)

    # 與 Ollama 交互,獲取診斷結果
    diagnostic_result = analyze_diagnosis_with_ollama(question_1, ans_1, question_2)

    # 顯示結果
    print("\nOllama 的診斷建議與分析:")
    print(diagnostic_result)

    # 保存結果至檔案(可選)
    with open("diagnostic_analysis.txt", "w", encoding="utf-8") as file:
        file.write("智能診斷結果分析:\n")
        file.write(diagnostic_result)

第一次執行結果:
啟動智能診斷系統...
收集的患者數據:{'heart_rate': 79, 'body_temperature': 39.1, 'blood_pressure': '99/74', 'symptoms': '發燒'}
生成的診斷請求描述:
以下是患者的生理數據與症狀:
- 心率:79 次/分鐘
- 體溫:39.1 °C
- 血壓:99/74
- 症狀:發燒
請根據以上數據提供可能的診斷建議,並協助醫生進一步確診。

Ollama 的診斷建議與分析:
基於患者的生理數據與症狀,我們可以做出以下初步分析:

1. 心率正常(79 次/分鐘),不太提示心臟問題。
2. 體溫升高到 39.1 °C,明顯提示發燒。可能是感染性疾病,例如呼吸道感染、肺炎或其他細菌感染。
3. 血壓正常(99/74),不太提示高血壓或低血壓。

根據以上數據,我們可以提出以下幾個可能的診斷:

* 呼吸道感染 (e.g. 關節炎、鼻窦感染)
* 肺炎
* other bacterial infections (e.g. 腹瀉、食道炎)

為了進一步確診,我們建議醫生進行以下檢查:

* 病毒和細菌培養(e.g. 血液培養、痰液培養)
* 疫苗接種史檢查
* 尿液檢查
* 肺部X光片

醫生可以根據檢查結果進行進一步的診斷和治療方案。

第二次執行結果:
啟動智能診斷系統...
收集的患者數據:{'heart_rate': 61, 'body_temperature': 39.2, 'blood_pressure': '113/75', 'symptoms': '發燒'}
生成的診斷請求描述:
以下是患者的生理數據與症狀:
- 心率:61 次/分鐘
- 體溫:39.2 °C
- 血壓:113/75
- 症狀:發燒
請根據以上數據提供可能的診斷建議,並協助醫生進一步確診。

Ollama 的診斷建議與分析:
哼哮!我們需要幫助這位患者出來!

根據給出的數據,我們可以觀察到:

* 心率正常(61次/分鐘)
* 體溫升高(39.2 °C),是發燒的跡象
* 血壓正常(113/75)

這些數據指向了一個可能的感染性疾病,例如肺炎、胰腺炎或急性感染等。

我們可以幫助醫生進一步確診:

1. **查找發燒原因**:需要進行更多檢查,如血液培養、胸部X光、腹部超音波等,以瞭解發燒的成因。
2. **評估症狀**:需要了解患者的症狀,例如是否有呼吸困難、嘔吐、頭痛或高溫持續時間等。
3. **檢查其他指標**:需要進行血液檢查,例如白細胞計數、 血紅蛋白、電解質等,以瞭解患者的免疫狀態和代謝狀況。

醫生的下一步可能是:

* 宇通會議
* 血液培養
* 胸部X光
* 腹部超音波

我們需要幫助醫生繼續進一步確診,並協助治療這位患者!

還有任何其他問題嗎?


沒有留言:

張貼留言