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
import random
import ollama

# 模擬 GPS 和交通數據
def get_gps_and_traffic_data():
    data = {
        "latitude": round(random.uniform(-90, 90), 6),
        "longitude": round(random.uniform(-180, 180), 6),
        "traffic_condition": random.choice(["暢通", "壅塞", "交通事故"]),
        "estimated_time": random.randint(10, 60)  # 預計到達時間 (分鐘)
    }
    print(f"收集的 GPS 和交通數據:{data}")
    return data

# 將 GPS 和交通數據轉為分析描述
def prepare_navigation_prompt(gps_data):
    prompt = (
        f"目前位置座標為:緯度 {gps_data['latitude']},經度 {gps_data['longitude']}。\n"
        f"交通狀況為:{gps_data['traffic_condition']}。\n"
        f"預計到達目的地需要 {gps_data['estimated_time']} 分鐘。\n"
        f"請根據這些數據提供語音導航建議,並分析交通狀況。"
    )
    print(f"生成的導航分析請求描述:\n{prompt}")
    return prompt

# 與 Ollama 交互進行分析
def analyze_navigation_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("啟動語音導航系統...")
    
    # 獲取 GPS 和交通數據
    gps_data = get_gps_and_traffic_data()

    # 問題 1:基本導航問題
    question_1 = "如何選擇最快的路線到達目的地?"
    ans_1 = "最快路線通常基於實時交通數據和道路條件來選擇,避免壅塞區域。"

    # 問題 2:導航描述
    question_2 = prepare_navigation_prompt(gps_data)

    # 與 Ollama 交互,獲取分析結果
    navigation_result = analyze_navigation_with_ollama(question_1, ans_1, question_2)

    # 顯示結果
    print("\nOllama 的導航建議與分析:")
    print(navigation_result)

    # 保存結果至檔案(可選)
    with open("navigation_analysis.txt", "w", encoding="utf-8") as file:
        file.write("語音導航與交通狀況分析結果:\n")
        file.write(navigation_result)

第一次執行結果:
啟動語音導航系統...
收集的 GPS 和交通數據:{'latitude': 33.55633, 'longitude': -99.02998, 'traffic_condition': '壅塞', 'estimated_time': 26}
生成的導航分析請求描述:
目前位置座標為:緯度 33.55633,經度 -99.02998。
交通狀況為:壅塞。
預計到達目的地需要 26 分鐘。
請根據這些數據提供語音導航建議,並分析交通狀況。

Ollama 的導航建議與分析:
( Mario 的聲音 )Ahahah!我是Mario,我可以幫助你找到最快的路線!

現在,讓我們看看目前的位置和交通狀況。你的目前位置是緯度 33.55633、經度 -99.02998,並且受到壅塞的影響。

由於壅塞,Traffic Patrol 必須建議你取一個不同的路線,減少行車時間。因此,我們將避開現在壅塞區域,改為一條新的路線。

預計行程時間是 26 分鐘,這個目標非常緊密!我們需要快走到達目的地!

(指引)請從目前位置的方向 Continue Towards South,避開壅塞區域,繞過Traffic Patrol。

新路線將會帶 you 到目的地的前幾十米。最後, Arrived at your destination !(指導完成)

在壅塞時機不錯!我們的時間預計還是可以完 成。如果你有時間,可以再來體驗一回,這個路線和壅塞區域的變化會有何不同呢?

第二次執行結果:
啟動語音導航系統...
收集的 GPS 和交通數據:{'latitude': 75.306921, 'longitude': -92.987766, 'traffic_condition': '交通事故', 'estimated_time': 35}
生成的導航分析請求描述:
目前位置座標為:緯度 75.306921,經度 -92.987766。
交通狀況為:交通事故。
預計到達目的地需要 35 分鐘。
請根據這些數據提供語音導航建議,並分析交通狀況。

Ollama 的導航建議與分析:
(深有神氣的 Mario聲音)

「咿!咿!我們的目標是在該點進行調查。先來看看當前的交通狀況... (延遲一下) Ah!Looks like there's a traffic accident going on. Better avoid that area for now.

首先,我們需要找到最快的路線。根據你的位置(緯度 75.306921,經度 -92.987766),我將計算出最佳路線。 (小 WAIT) OK!我有了!我們可以從這裡往西北方向走,接下來是通過一個小town,然後再進入高速公路。

但是,由於交通事故,我們需要避開那個地區,可能要花一些時間。預計到達目的地需要35分鐘,這是一個可行的時限。但是,我们還需要注意一下交通狀況,因為可能會有車禍、交通信號或其他問題出現。

因此,我們的建議是: (持續一秒,然後繼續) Continue on the current path, then turn north towards the town. Avoid the traffic accident area for now. Once we're through the town, we'll get back onto the highway and make our way to our destination.

讓我們一起努力, Mario 會幫你通過這個難关的!」

沒有留言:

張貼留言