最近做了台海戰爭風險地圖,並且部署在 Zeabur 上。
我發現有不少人對於這個專案挺有興趣的,也給了我更多動力,所以決定繼續改版,增加新功能。
今天就來聊聊我怎麼發想這個專案,使用 AI 編程的過程,以及我之後打算怎麼繼續改版。
台海戰爭風險地圖專案的起始
我每天有想到什麼事,偶爾就會丟給 ChatGPT ,去做深度的思考。
ChatGPT 這類大型語言模型,是這個世界的回音鏡子,當你傳入任何提示詞,會觸發人工智慧某部分的向量資料,回傳可能的資訊。
所以你可以跟它聊任何事情,就像是你在跟世界對話一樣。
我當初就是跟它聊,以一個平民角度,要怎樣透過新聞報導,判斷戰爭即將開打。接著我們就能決定是否迅速轉移個人財產,甚至連家人都要一起帶到國外,或者躲到鄉下地區。
幸運的是,其實我們在 1996 年已經算是「演習」過一次了,所以我們已經有一些經驗。
1996 年因為臺灣要舉行總統直選,中共認為臺灣打算搞台獨,因此試射飛彈。
從事後來看,當時應該是真的要打了。只是因為我們在中共那邊有埋伏間諜,接獲間諜通報後,我們再通知美國,美國也很給力,馬上派了軍艦來台,並且以外交管道告知中共勿輕舉妄動。
當年許多國家都有備妥撤僑方案,雖然最後都沒撤,可是機票一票難求,一般人想逃到國外根本不可能。第一時間得知消息逃跑的都不是平民。
所以到底有什麼指標?撤僑是決定性指標,但是絕對不是一個好指標,因為當各國真的撤僑,你怎麼來得及逃。
ChatGPT 提供了以下意見,如果新聞出現以下消息,值得關注:
出現異常或未經公告的軍事動員,例如快速集結部隊、重型裝備,或大量海軍兵力於台灣周邊聚集,超出例行演習的範圍。
來自盟邦或可信情報來源的明確警告,指出大規模軍事攻勢在短期內極可能發生。
多項風險訊號同時出現(例如加速的經濟制裁、加劇的網路攻擊、外交衝突升高,以及不尋常的軍事動作),顯示可能正展開協調性的升級行動。
出現具確認性質的事件,如飛彈發射、正式宣布封鎖、宣戰行為,或多國同步啟動撤僑行動。
此時有趣的來了,因為長期的使用結果, ChatGPT 知道我關注程式設計,因此它問我是否要做一個台海風險指標探測器。讓我決定開啟此專案。
使用 Google Sheet 當作後端
其實我平常很少看新聞,現在太多雜訊了,看得很累。因此我決定做個 Google Sheet ,讓系統自動抓新聞資料。
新聞來源我採用中央社的 RSS,一來中央社是中華民國半官媒,二來他們提供的RSS是免費的。
首先你要先閱讀中央社的 RSS 內容,先確認他們提供什麼資料,例如這裡提供了,
title:新聞標題
link:連結
pubDate:日期
description:新聞摘要
這些訊息我覺得都挺重要的,所以在 Google Sheet 我也就設定了相對的欄位,另外我還多設了兩個欄位:
source:標示此新聞是屬於國際新聞還是兩岸新聞
risk_level:之後讓 AI 判斷新聞,然後標註風險等級
接著就是在 Google Sheet 上,點擊擴充功能→App Script。
比較初階的操作,我這裡就先跳過了,想知道的人請閱讀:【EP-21】怎麼使用 AI 生成前端網頁,用 Google 試算表當資料庫?
我在 App Script ,設定了兩個 .gs 檔案,一個是用來每日抓中央社的新聞,另一個是將中央社的新聞內容,丟給 Grok3 ,讓它依據上述的指標,來判讀台海戰爭風險。
這些程式都可以讓 AI 自動生成,現在都可以做得很好,不太需要自己手動寫。
但是如果它的邏輯有誤,你還是得跟它重複說清楚。
這個專案我都是用 Windsurf AI 程式編輯器 + Gemini 2.5 大型語言模型去製作的,底下先敘述 App Script 的程式邏輯。
抓取中央社新聞的程式說明
初始化:啟動程式並取得 Google Sheet 工作表。
刪除舊資料:計算 30 天前的日期,刪除早於此日期的資料列。
設定 RSS 來源:載入兩個中央社 RSS(國際、大陸)。
讀取現有連結:讀取 Google Sheet 現有連結,避免重複新增。
解析 RSS:逐筆讀取 RSS 內容,取得新聞標題、描述等資料。
關鍵字篩選:對國際新聞檢查是否含特定關鍵字,如「中國」「美國」等。
寫入新聞:若符合關鍵字條件且連結未重複,將資料寫入表格。
錯誤處理:記錄錯誤訊息。
傳送新聞給Grok3的程式說明
建立提示詞:將新聞標題與描述套入一段分析用提示,提供給 Grok API 判斷風險等級(green/yellow/red)。
呼叫 Grok API:使用
grok-3-latest
模型送出 prompt,回傳純文字風險結果,若格式異常則記錄錯誤並回傳unknown
。分析新聞風險:從 Google Sheet 中讀取新聞標題與描述,若
risk_level
欄位為空,就送出 API 並將結果寫入該列。
每日讓程式自動觸發
App Script 提供自動化的功能,讓程式能自動執行。
點擊畫面左側的觸發條件,就可以讓你的程式在每日指定的時間執行。
前端網頁設計
前端的部分實在沒什麼好說的,因為現在的畫面很醜,有待後續改版。
值得一提的是前端的臺灣海峽地圖,它是我從維基百科上下載的 SVG 圖檔。
原本我是想用燈號來呈現風險,後來 ChatGPT 建議使用 SVG 圖檔,然後在 SVG 圖檔內的標籤內增加新標籤,就可以讓地圖上的特定地區改顏色。
所以現在在台海地圖上,中華民國的領土範圍都有標記,且能夠更改顏色。
臺灣海峽風險地圖第二版的設計走向
因為收到不少網友的鼓勵(上圖),我覺得值得繼續開發第二版。
於是我把相關資料都存檔後,丟到 ChatGPT 的專案區,特別開了一個專案來做這件事。
跟 ChatGPT 反覆討論之後,我認為在第二版值得加入以下功能:
1. 風險事件時間軸
功能說明:
依時間序列列出每日新聞
顯示:風險燈號(🔴/🟡/🟢)、標題、簡述、判讀依據
2. 風險趨勢圖表
功能說明:
顯示紅黃綠燈號數量的變化趨勢(每日、每週)
可切換成折線圖、長條圖等視圖
3. 防空避難設施圖層
功能說明:
在地圖上標示全台防空避難所位置
點擊後顯示:名稱、容納人數、設施類型等資訊
4. 預設疏散路線展示
功能說明:
根據行政區預設靜態路線(起點至避難所)
顯示距離、參考步行時間(無導航、非互動)
5. 高風險事件即時通知
功能說明:
偵測紅燈新聞時,自動推送即時通知
每日定時寄出風險摘要報告
在技術部分,當然我也是要跟 ChatGPT 討論,由於此專案是個人開源專案,我沒打算花太多錢做這件事,因此要跟 ChatGPT 說清楚。
目前歸納出底下的技術細節:
除了抓新聞資料是在 Google Sheet 上進行,後端主要會使用 Python 來做資料處理、風險等級分類與自動通知等功能。
前端框架暫時先用 Streamlit 方便整合地圖、圖表與表格顯示。
地圖引擎使用 Mapbox GL JS,搭配 Mapbox 中文樣式圖資,並嵌入 Streamlit 頁面。地圖資料格式為 GeoJSON,負責載入防空避難所與預設逃生路線。
利用 Telegram Bot API 發送紅燈警示。無流量限制、免費、易於部署。
Email 通知可選擇 Gmail SMTP 或 SendGrid 免費額度。
推播觸發由 Python 結合
schedule
或APScheduler
進行定時執行。
最後就祝福我自己開發順利囉!