# 旅遊小幫手 ## Introduction ### 目的 本系統旨在打造一個一站式的智慧 AI 旅遊助手平台,整合旅遊相關的各項功能,從查詢景點、行程規劃、導覽導遊、互動建模、到翻譯與記錄旅程,皆可在單一平台內完成。透過 AI 技術,我們希望使用者能: - 節省搜尋與安排的時間 - 根據個人需求獲得最佳推薦 - 在旅途中獲得即時、互動式的資訊支援 - 提升整體旅遊的效率與體驗品質 ### 動機 現今市面上的旅遊應用程式雖然功能豐富,但往往分散在多個平台中,導致使用者在行前、行中與行後都需要反覆切換不同 App,不僅操作麻煩,也容易遺漏重要資訊。此外: - 多數應用缺乏 AI 智能整合,無法針對個人偏好自動推薦與整理資訊。 - 許多使用者在行前做了大量功課,卻難以在旅途中快速回顧。 - 評論與資訊數量龐大且雜亂,使用者難以掌握重點。 - 部分功能如 AR/VR 導覽、語音翻譯、旅遊日記,仍未被主流平台完整納入。 因此,我們希望透過 AI 整合與創新互動介面,解決功能分散、資訊過載、使用效率低落等問題,提升使用者從規劃到旅行實際體驗的全流程便利性與智慧化。 ## Current System ### Comparison | 功能 | AI 旅遊助手 | chicTrip | TripAdvisor | Google Map | |:--:|:--:|:--:|:--:| :--: | | 地圖 | 提供室外地圖與即時資訊 | 無內建地圖<br>依賴 Google Maps | 無內建地圖<br>依賴 Google Maps |提供地圖與部分地點資訊 | | 興趣點 | 提供詳細資訊 | 提供詳細資訊 | 提供詳細資訊 | 提供詳細資訊 | | 評分與留言 | AI 匯總評分與推薦評論 | 支援使用者評分與留言 | 支援使用者評分與留言 | 支援使用者評分與留言 | | AI 歸納 | AI 整理並提供參考建議 | 不支援 | 不支援 | 不支援 | | 建模與查看 | 建模與互動 | 不支援 | 不支援 | 部分地點適用 | | 景點尋找 | AI 推薦旅遊景點 | 手動搜尋、無 AI 輔助 | 手動搜尋、無 AI 輔助 | 手動搜尋、無 AI 輔助 | | 景點導覽 | AI 文字或語音導覽 | 不支援 | 不支援 | 不支援 | | AR 導覽 | 現場獲取互動式資訊 | 不支援 | 不支援 | 部分地點適用 | | VR 導覽 | 虛擬實境體驗 | 不支援 | 不支援 | 部分地點適用 | | 景點規劃 | AI 自動生成最佳行程 | 手動規劃、無 AI 輔助 | 規劃推薦、無 AI 輔助 | 不支援 | | 路線規劃 | AI 推薦安排方式 | 根據距離推薦路線 | 手動拖移、無 AI 輔助 | 不支援 | | 旅遊日記 | 圖文記錄旅程、AI 整理 | 記錄日記、無 AI 整理 | 不支援 | 不支援 | | 景點清單 | 收藏景點、AI 推薦行程 | 收藏清單、無 AI 推薦 | 收藏清單、無 AI 推薦 | 收藏清單、無 AI 推薦 | | 商品清單 | 記錄想購買的商品 | 不支援 | 不支援 | 不支援 | | 即時對話翻譯 | 多語言即時語音翻譯 | 不支援 | 不支援 | 不支援 | | 即時掃描翻譯 | 透過相機快速掃描翻譯內容 | 不支援 | 不支援 | 不支援 | | 優點 | AI 旅遊助手 | chicTrip | TripAdvisor | Google Map | | :--: | :--: | :--:| :--:| :--: | | 整合分散功能 | 一站式體驗 | 功能較為獨立 | 無明顯整合功能 | 以地圖與導航為核心 | | AI 支援 | 各式 AI 功能 | 無 AI 支援 | 無 AI 功能 | 提供基於數據的建議 | | 介面簡單 | 簡單易用 | 簡單易懂 | 操作需習慣 | 介面簡潔 | | 清晰景點資訊 | AI 整理資訊 | 精選的資訊、簡潔 | 大量評論、雜亂 | 大量評論、雜亂 | | 大量的資料 | 整個網路都是資料 | 數據量有限| 評論與評分數多 | 評論與評分數多 | | 了解地點 | AI 生成摘要 | 完整度不一 | 提供不同觀點 | 提供不同觀點 | | 即時室外地圖 | 提供即時資訊 | 無即時地圖 | 無即時地圖 | 地圖功能完整 | | 精確導航 | AI 計算路線 | 依賴第三方地圖 | 無內建導航 | 導航功能完整 | | 支援全球範圍 | 整個網路都是資料 | 針對特定旅遊市場 | 部分區域資料較少 | 全球皆可使用 | | 缺點 | AI 旅遊助手 | chicTrip | TripAdvisor | Google Map | | :--| :-- | :-- | :-- | :-- | | AI 依賴性過強 | 極度仰賴 AI 判斷 | 無 AI 支援 | 無 AI 支援 | 無 AI 支援 | | 沒有 AI 輔助 | 有 AI 功能 | 無 AI 功能 | 無 AI 功能 | 無 AI 功能 | | 需要大量數據支持 | 需要大量的數據 | 少數使用者分享 | 許多使用者評論 | 全球使用者貢獻數據 | | 功能不夠完整 | 完整的功能體驗 | 功能較為單一 | 功能較為單一 | 功能較為單一 | | 評論偏向主觀 | AI 整理評論 | 評論較主觀 | 評論較主觀 | 評論較主觀 | | 沒有導覽 | AI 導覽 | 使用者手動安排 | 無導覽功能 | 無導覽功能 | | 沒有行程規劃 | AI 規劃行程 | 使用者手動安排 | 無規劃功能 | 使用者手動安排 | ## Proposed system ### Overview - 地圖服務 - 提供即時室外地圖,顯示位置與景點資訊,支援導航功能 - 興趣點探索 - 瀏覽景點資訊、評論與評分,支援 AI 重點整理與 3D 互動展示 - AI 導遊 - 根據使用者興趣與位置推薦景點,並提供語音、AR、VR 導覽功能 - AI 行程規劃 - 依據時間、偏好與交通資訊,自動生成最佳化行程與路線 - 旅遊日記 - 使用者可圖文記錄旅程,由 AI 協助整理每日亮點 - 願望清單 - 收藏想造訪的地點與商品,系統自動推薦相關行程 - 翻譯工具 - 支援即時語音與掃描翻譯,協助旅途中語言溝通 ### Functional Requirement - 地圖 - 地圖:提供室外地圖 - 興趣點 - 介紹:提供景點、餐廳、住宿等地點的詳細資訊 - 評分與留言:使用者可為地點評分、撰寫評論 - AI 歸納:透過 AI 分析熱門評論、整理重點資訊與提供參考連結 - 建模與查看:支援建模與互動,讓使用者能更直觀地瀏覽興趣點 - AI 導遊 - 景點尋找:根據使用者興趣與位置,推薦適合的旅遊景點 - 景點導覽:提供文字或語音導覽,提升遊覽體驗 - AR 導覽:透過擴增實境技術,讓使用者在現場獲取互動式資訊 - VR 導覽:支援虛擬實境體驗,讓使用者不出門也能探索世界 - AI 行程規劃 - 景點規劃:根據旅遊時間、興趣與評價,自動生成最佳行程 - 路線規劃:整合交通資訊,推薦最有效率的移動方式與行程順序 - 日記 - 旅遊日記:使用者可透過圖文記錄旅程,並由 AI 幫助整理亮點 - 願望清單 - 景點清單:收藏想造訪的景點,方便未來規劃旅行 - 商品清單:記錄想購買的紀念品或特色商品,避免錯過當地好物 - 翻譯 - 即時對話翻譯:支援多語言語音翻譯,幫助旅途中與當地人溝通 - 即時掃描翻譯:透過相機拍攝,快速翻譯標誌、菜單與文件內容 ### Nonfunctional Requirement #### User Interface and Human Factors - What type of user will be using the system? - 主要使用者為旅遊愛好者、自由行旅客、背包客以及各種需要行程規劃的使用者。 - Will more than one type of user be using the system? - 是,包含一般旅客與餐廳/景點業主等。 - What training will be required for each type of user? - 會有簡潔的教學,力求直觀與方便操作,同時保持美觀。 - 根據使用者的身分,透過動畫,互動式地指引使用者操作功能。 - 旅遊者:提供地圖、興趣點、導遊與行程規畫等功能教學。 - 業主:上傳/更新店家資訊與後台數據等功能教學。 - Is it important that the system is easy to learn? - 是,要給予使用者良好的使用體驗,需確保 UI/UX 友善,讓大家都能快速上手。 - Should users be protected from making errors? - 是,若系統發現使用者不正確使用就有相應的應對機制。 - What input/output devices are available? - 手機、平板、電腦、VR 設備、AR 設備。 - 於 Hardware Considerations 對裝置具體細節有進一步說明。 #### Documentation - What kind of documentation is required? - 系統需求文件、系統設計文件、系統測試文件。 - 使用者指南、隱私政策與服務條款。 - What audience is to be addressed by each document? - 旅客(使用者指南)、業主(使用者指南)、開發者(系統類文件)。 #### Hardware Considerations - What hardware is the proposed system to be used on? - 輸入裝置 - 手機、平板:觸控螢幕。 - 電腦:鍵盤、滑鼠。 - VR 設備:體感控制器(搖桿、手勢)。 - AR 眼鏡:配套控制器(搖桿、手勢)。 - 輸出裝置 - 電腦、平板、手機:螢幕,顯示文字、圖片、影片等內容,並提供操作介面進行互動。 - VR:螢幕,顯示建模之場景等內容,並結合體感控制器進行互動。 - AR:螢幕,在使用者視野中疊加數位內容,並結合配套控制器進行互動。 - 喇叭、耳機:在導遊等功能支援語音時播放。 - VR / AR 規格詳情 - VR - HTC Vive:建議至少 2 基站追蹤器、可支援 6DoF 動作捕捉。 - Meta Quest:內建 Inside-Out 追蹤、6DoF 控制器。 - AR - Microsoft HoloLens:內建深度攝影機、空間繪製與手勢控制。 - Magic Leap:空間定位、手勢控制器。 - 建議確保使用者端具有足夠效能以順暢運行複雜 3D 場景或即時擴增實境。 - Apple Vision Pro:M2 晶片 - 8 核心 CPU 、10 核心 GPU、16 核心神經網路引擎、16GB 統一記憶體 - What are the characteristics of the target hardware, including memory size and auxiliary storage space? - 伺服器建議 RAM 為 128GB 以上。 - 伺服器儲存空間需要 100TB 以上。 #### Performance Characteristics - Are there speed, throughput, response time constraints on the system? - 系統在 1000 位使用者內需要1秒內回應使用者。 - 整個系統可以乘載 10000 人以下的使用者同時使用。 - 加強後端伺服器架構,否則依賴單一伺服器會導致負載過高。 - Are there size or capacity constraints on the data to be processed by the system? - 興趣點 - 純文本的資訊不超過 100 MB - 圖片的資訊不超過 1 GB - 建模無資料量限制 #### Error Handling and Extreme Conditions - How should the system respond to input errors? - 提供清楚的錯誤提示,例如語音輸入錯誤時,允許重試或手動輸入。 - 當系統當掉時,啟用備用伺服器來應付。 - 網路塞車,使用排隊來限制人數進入系統。 - How should the system respond to extreme conditions? - 無網路時:提供部分離線地圖與翻譯功能。 - 裝置效能低:啟用低效能模式,減少動畫與即時運算負擔。 - GPS 訊號弱:提供 AI 預測定位與使用者手動選擇位置的選項。 #### System Interfacing - Is input coming from systems outside the proposed system? - 一般 API:地圖、興趣點、天氣、交通、商品、翻譯 - AI API:LLM - Is output going to systems outside the proposed system? - 一般 API:地圖、興趣點、天氣、交通、商品、翻譯 - AI API:LLM - Are there restrictions on the format or medium that must be used for input or output? - 都以 JSON 作為資料格式 #### Quality Issues - What are the requirements for reliability? - 伺服器有 90% 以上的可用性,每天允許的最大停機時間不超過 30 分鐘。 - 備用伺服器確保即使發生故障,系統仍能正常運作。 - Must the system trap faults? - 捕捉錯誤並提供適當的錯誤處理機制。 - What is the time for restarting the system after a failure? - 當系統出現故障,需在 10 分鐘內自動重新啟動,並使用備援機制確保最小的服務中斷。 - Is there an acceptable downtime per 24-hour period? - 每天允許的最大停機時間不超過 30 分鐘,系統會透過後備機制將停機時間降至最低。 - Is it important that the system be portable? - 是,系統需多種設備,具備跨平台兼容性,確保使用者能在不同裝置上獲得一致的體驗。 #### System Modifications. - What parts of the system are likely to be modified? - AI 類功能、第三方API - 地圖、興趣點、行程規劃、日記、願望清單 - What sorts of modifications are expected? - UI、UX - 安全性 - 資料 #### Physical Environment. - Where will the target equipment operate? - 伺服器應運行於穩定的環境中,並至少配置兩台伺服器互為備援,以應對突發狀況。 - Amazon Web Services (東京) - Is the target equipment in one or several locations? - 伺服器應分布於多個地點,以降低火災、停電等意外事故的影響。 - Will the environmental conditions be ordinary? - 機房需維持適當的溫度與濕度,並配備空調等環境調節設備。 #### Security Issues - Must access to data or the system be controlled? - 劃分使用者、業者及開發者權限。 - 所有使用者個人資訊都要有相關文件去規範個資的產生、保管、留存及銷毀。 - 後端商業資料應嚴格區分開發人員能取得資料的權限。 - 保證使用者個資無法被開發人員取得。 - Is physical security an issue? - 是,需要管理實體機房、工作區域的資訊安全。 - 機房需設有多層次的物理防衛機制,如:實時監控、門禁。 - 防止資料被物理機制破壞:火災控管、濕度控管、防震、防突波電流。 #### Resources and Management Issues - How often will the system be backed up? - 系統資料必須每小時進行自動備份。 - 分散式系統能夠將資料同時儲存在多部伺服器上。 - 備份儲存時間 - 短期備份:2 個月、備份所有資料。 - 中期備份:6 個月、備份重要資料。 - 長期備份:1 年、備份關鍵資料。 - Who will be responsible for the back up? - 系統本身會進行自動備份。 - 系統管理員為主要負責人,系統管理員需檢查是否有備份到。 - Who is responsible for system installation? - 系統管理員。 - 使用者。 - Who will be responsible for system maintenance? - 從開發團隊挑選並額外增加人員成立維運團隊。 ## Scenario - 宜臻坐在書桌前,使用平板開啟「旅遊小幫手」App。 - 她點選主畫面的「AI 行程規劃」圖示。 - 系統切換至設定頁面,她輸入: - 出發地:「台北」 - 目的地:「花蓮」 - 天數:「4天」 - 日期:「7月5日~7月8日」 - 偏好:「自然風景」、「歷史建築」 - 點擊「開始規劃」,系統顯示提示「為您規劃中……」。 - 幾秒後,畫面顯示四日行程,包括每個景點卡片、推薦時間與交通安排。 - 她點選第一天的「松園別館」卡片,進入詳細資訊頁面,查看: - 景點介紹 - 熱門評論摘要(由 AI 歸納) - 圖片與實用資訊(開放時間、交通方式等) - 點選「← 返回」,她回到行程卡片瀏覽模式。 - 她發現「花蓮文化創意產業園區」排在第一天晚上過於普通,點選右上角垃圾桶圖示。 - 系統彈出確認:「是否刪除此行程?將重新計算路線與時間」→ 她點選「確定」 - 景點被移除,系統即時重排路線與交通時間。 - 她覺得「七星潭」更適合第一天下午: - 長按「七星潭」卡片 → 拖曳至第一天下午。 - 放手後畫面更新順序與地圖路線。 - 她想到朋友推薦的「石梯坪」: - 點選「新增景點」→ 輸入「石梯坪」→ 點擊加入 → 拖曳排入「第二天下午」。 - 景點成功加入行程,系統更新路線與預估交通時間。 - 修改完成後,宜臻檢視行程頁面,確認內容無誤。 - 她點選畫面下方的「完成規劃」按鈕,回到主畫面。 ![image](https://hackmd.io/_uploads/BkQCjDi-gg.png) ![image](https://hackmd.io/_uploads/HyYc0Po-gl.png) ![image](https://hackmd.io/_uploads/rkEdpPiWxg.png) ![image](https://hackmd.io/_uploads/ryuNkOi-el.png) ![image](https://hackmd.io/_uploads/ByNNWdj-gl.png) ![image](https://hackmd.io/_uploads/B1QdZui-xe.png) ![image](https://hackmd.io/_uploads/Sk8Mfuj-eg.png) ![image](https://hackmd.io/_uploads/SyZa7dsWex.png) ## Use case models - Use case - Planning and Landmark Navigation(行程規劃) - Participating Actors - 使用者(如旅遊規劃者、學生、觀光客) - AI 規劃模組 - Entry Condition - 使用者已開啟 App。 - Flow of Events - 使用者點選「AI 行程規劃」。 - 使用者可以輸入出發地、目的地、日期、天數與偏好類型。 - 使用者確認資料後,點選「開始規劃」。 - 系統生成行程卡片,包含景點卡片、交通建議與時間安排。 - 使用者可以檢視、編輯、新增或刪除景點。 - 使用者完成行程編輯後,點選「完成規劃」,行程儲存。 - 返回主頁面。 - Exit Condition - 行程成功儲存。 - Exceptions - 網路中斷,無法下載或更新行程/景點資訊。 - 景點資料庫缺少地標或無法推薦。 - Nonfunctional Requirements - 使用介面直覺與快速反應:介面須具備高直覺性,操作反應時間短。 - 多語系支援:支援中英文操作介面,語音導覽須支援在地語言與離線使用。 - 高效能行程規劃:行程規劃作業須於 5 秒內完成。 - 資訊計算準確性:行程與路線計算、景點資訊與交通時間需具備高準確度。 ## Class identification from use case models ### Data dictionary #### 名詞 | Example | Part of speech | UML model component | 型態 | 說明 | |----------------------|----------------|-----------------------------------|---------|------------------------------------------------| | 使用者 | 名詞 | `User` | class | 使用本系統進行旅遊規劃的使用對象 | | 旅遊介面 | 名詞 | `TravelView` | class | 使用者進行操作與互動的主要畫面 | | 系統 | 名詞 | `TravelAssistantSystem` | class | 執行行程規劃與景點管理的核心邏輯系統 | | 行程 | 名詞 | `Itinerary` | class | 包含多日景點與時間安排的完整旅遊規劃 | | 行程卡片 | 名詞 | `ItineraryCard` | class | 在介面中顯示單一景點的資訊卡片 | | 景點 | 名詞 | `Attraction` | class | 使用者將造訪的觀光位置 | | 公共景點 | 名詞 | `PublicAttraction` | class | 從外部來源擷取的開放式景點資料 | | 私人景點 | 名詞 | `PrivateAttraction` | class | 使用者自訂的景點資料 | | 景點安排 | 名詞 | `AttractionSchedule ` | class | 指定景點於特定日與時間造訪的配置與交通建議 | #### 形容詞 | Example | Part of speech | UML model component | 型態 | 說明 | |----------------------|----------------|-----------------------------------|------------|----------------------------------------------------| | 行程標題 | 形容詞 | `Itinerary.title` | String | 行程的名稱或主題標示 | | 出發地 | 形容詞 | `Itinerary.startLocation` | String | 行程的起點 | | 目的地 | 形容詞 | `Itinerary.destination` | String | 行程的終點 | | 日期區間 | 形容詞 | `Itinerary.dateRange` | DateTime | 行程的開始與結束時間範圍 | | 天數 | 形容詞 | `Itinerary.days` | DateTime | 行程所涵蓋的天數總計 | | 行程偏好 | 形容詞 | `Itinerary.preference` | String | 使用者偏好的旅遊類型或活動偏好 | | 景點標題 | 形容詞 | `Attraction.title` | String | 景點的標題 | | 圖片 | 形容詞 | `Attraction.image` | Blob | 景點的配圖 | | 景點介紹 | 形容詞 | `Attraction.description` | String | 景點的官方簡介 | | 熱門評論摘要 | 形容詞 | `Attraction.reviewSummary` | String | 系統彙整的熱門評論精華 | | 景點實用資訊 | 形容詞 | `Attraction.practicalInfo` | String | 景點相關的實用參訪資訊 | | 資料來源 | 形容詞 | `PublicAttraction.source` | String | 景點資訊的來源 | | 建立者編號 | 形容詞 | `PrivateAttraction.createdBy` | String | 哪個使用者建立的景點 | | 景點順序 | 形容詞 | `AttractionSchedule.attractionOrder` | Integer | 景點在每日中的順序 | | 推薦時間 | 形容詞 | `AttractionSchedule.displayTime` | DateTime | 建議參訪該景點的理想時間點 | | 交通建議 | 形容詞 | `AttractionSchedule.transportationInfo`| String | 各景點之間的移動方式與交通耗時建議 | #### 動詞 | Example | Part of speech | UML model component | 型態 | 說明 | |----------------------|----------------|---------------------------------------|----------|----------------------------------------------------------| | 顯示行程設定 | 動詞 | `TravelView.displayItinerarySetting()` | void | 在畫面上呈現行程相關設定選項 | | 開始行程規劃 | 動詞 | `TravelView.planItinerary()` | Itinerary | 根據輸入自動產生初始行程 | | 顯示行程 | 動詞 | `TravelView.displayItinerary()` | void | 呈現目前已建立的行程與細節資訊 | | 檢視景點 | 動詞 | `TravelView.searchAttraction()`| Attraction | 尋找所選景點的詳細 | | 顯示景點詳情 | 動詞 | `TravelView.displayAttractionInfo()`| void | 顯示所選景點的詳細資訊 | | 新增景點卡片 | 動詞 | `TravelView.addAttraction()`| Itinerary | 新增景點卡片 | | 刪除景點卡片 | 動詞 | `TravelView.deleteAttraction()`| Itinerary | 刪除景點卡片 | | 拖曳景點卡片 | 動詞 | `TravelView.moveAttraction()`| Itinerary | 重新排序景點卡片以調整參訪順序 | | 更新行程卡片 | 動詞 | `TravelView.displayUpdateItinerary()`| void | 更新 UI 上對應景點卡片的顯示內容 | | 完成行程規劃 | 動詞 | `TravelView.saveItinerary()`| Boolean | 儲存行程規劃 | | 返回主畫面 | 動詞 | `TravelView.returnToMainPage()`| void | 返回主畫面 | | 新增行程 | 動詞 | `TravelAssistantSystem.createItinerary()` | Itinerary | 新增行程 | | 檢視景點 | 動詞 | `TravelAssistantSystem.searchAttraction()`| Attraction | 尋找所選景點的詳細資訊 | | 新增景點 | 動詞 | `TravelAssistantSystem.addAttraction()`| Itinerary | 新增景點 | | 刪除景點 | 動詞 | `TravelAssistantSystem.deleteAttraction()`| Itinerary | 刪除景點 | | 編輯景點安排 | 動詞 | `TravelAssistantSystem.changeAttractionSchedule()`| Itinerary | 調整景點在行程中的時間與順序安排 | | 儲存行程 | 動詞 | `TravelAssistantSystem.saveItinerary()` | Boolean | 將目前行程內容保存 | ### 類別圖關聯性 ![image](https://hackmd.io/_uploads/BkVgkJKlgg.png) ## Sequence diagram ![圖片](https://hackmd.io/_uploads/r1q0HqKxlg.png) ## Activity diagram ![image](https://hackmd.io/_uploads/r1bN1yKexg.png) ## StateChart Diagram ![image](https://hackmd.io/_uploads/HkUfvwKbee.png) ## Navigation Path ![image](https://hackmd.io/_uploads/r12QWpdWel.png)