Sorry

This feed does not validate.

In addition, interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: https://blog.serv.idv.tw/feed/

  1. <?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
  2. xmlns:media="http://search.yahoo.com/mrss/"
  3. xmlns:content="http://purl.org/rss/1.0/modules/content/"
  4. xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  5. xmlns:dc="http://purl.org/dc/elements/1.1/"
  6. xmlns:atom="http://www.w3.org/2005/Atom"
  7. xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  8. xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  9. >
  10.  
  11. <channel>
  12. <title>終極邊疆 BLOG</title>
  13. <atom:link href="https://blog.serv.idv.tw/feed/" rel="self" type="application/rss+xml" />
  14. <link>https://blog.serv.idv.tw</link>
  15. <description>在這個時代, blogging 就像是深呼吸一樣。</description>
  16. <lastBuildDate>Tue, 29 Apr 2025 13:39:45 +0000</lastBuildDate>
  17. <language>zh-TW</language>
  18. <sy:updatePeriod>
  19. hourly </sy:updatePeriod>
  20. <sy:updateFrequency>
  21. 1 </sy:updateFrequency>
  22.  
  23. <image>
  24. <url>https://i0.wp.com/blog.serv.idv.tw/wp-content/uploads/2005/04/cropped-Me-at-Flickr_400.jpg?fit=32%2C32&#038;ssl=1</url>
  25. <title>終極邊疆 BLOG</title>
  26. <link>https://blog.serv.idv.tw</link>
  27. <width>32</width>
  28. <height>32</height>
  29. </image>
  30. <site xmlns="com-wordpress:feed-additions:1">33236058</site> <item>
  31. <title>白沙屯媽祖進香 &#8211; 準備</title>
  32. <link>https://blog.serv.idv.tw/2025/04/pilgrimage-preparation/</link>
  33. <comments>https://blog.serv.idv.tw/2025/04/pilgrimage-preparation/#respond</comments>
  34. <dc:creator><![CDATA[PipperL]]></dc:creator>
  35. <pubDate>Wed, 30 Apr 2025 02:35:00 +0000</pubDate>
  36. <category><![CDATA[白沙屯媽祖徒步進香 (2025)]]></category>
  37. <category><![CDATA[白沙屯媽祖]]></category>
  38. <category><![CDATA[粉紅超跑]]></category>
  39. <category><![CDATA[進香]]></category>
  40. <guid isPermaLink="false">https://blog.serv.idv.tw/?p=8072</guid>
  41.  
  42. <description><![CDATA[這一篇上架的時間點,應該是 4/30,也就是在白沙屯媽祖出發的前一天 (今年是 5/1 23:45 出發)。標 ... <a title="白沙屯媽祖進香 &#8211; 準備" class="read-more" href="https://blog.serv.idv.tw/2025/04/pilgrimage-preparation/" aria-label="Read more about 白沙屯媽祖進香 &#8211; 準備">閱讀全文</a>]]></description>
  43. <content:encoded><![CDATA[
  44. <p>這一篇上架的時間點,應該是 4/30,也就是在白沙屯媽祖出發的前一天 (今年是 5/1 23:45 出發)。<br>標題說準備,除了行李的準備,也有心態和家人生活的安排。<br>如果讀者著眼的是個人行程和裝備,可以參考以下的資訊:</p>
  45.  
  46.  
  47.  
  48. <ul class="wp-block-list">
  49. <li><a href="https://www.youtube.com/watch?v=Z7ObNK6MBSo">2025 乙巳年 &#8211; 白沙屯媽祖徒步往北港進香,進香日程、急行軍、歷史路線資料、行前準備與注意事項。</a></li>
  50.  
  51.  
  52.  
  53. <li><a href="https://www.youtube.com/watch?v=5HWEL1v0xdo">白沙屯媽祖徒步往北港進香,進香準備與路上篇 EP3,進香前準備:交通方式與住宿概況、進香報名、行李準備、體能訓練。</a></li>
  54.  
  55.  
  56.  
  57. <li></li>
  58.  
  59.  
  60.  
  61. <li><a href="https://945d.blogspot.com/2017/03/blog-post.html">跟隨媽祖徒步遶境進香準備事項的建議與經驗心得分享</a></li>
  62. </ul>
  63.  
  64.  
  65.  
  66. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  67.  
  68.  
  69.  
  70. <h2 class="wp-block-heading">2025/4/27 (D-4)</h2>
  71.  
  72.  
  73.  
  74. <p>20:10,敲下第一個字的現在 。陸續添購跟收集的裝備,還散落在書房的角落。</p>
  75.  
  76.  
  77.  
  78. <p>說散落有點不太精確,至少我有把它們堆成一小堆山丘。</p>
  79.  
  80.  
  81.  
  82. <p>這些「行李」還沒整理、還沒清點、甚至還沒在腦袋裡模擬使用的情境 &#8212; 這是我長途旅行一向會做的事。</p>
  83.  
  84.  
  85.  
  86. <p>可能是心底想著,還有四天,要把東西整理好頂多只需要一天吧…(我想)。到時缺少了什麼,再花一天去採買調整就好。</p>
  87.  
  88.  
  89.  
  90. <span id="more-8072"></span>
  91.  
  92.  
  93.  
  94. <p>也可能是看著幾個比較大的粉絲頁和社團,包括 <a href="https://www.facebook.com/groups/1461185017375829?locale=zh_TW">白沙屯媽祖粉絲團 公開社團</a> 、 <a href="https://www.facebook.com/groups/534703830199801?locale=zh_TW">白沙屯媽祖ㄟ香燈腳</a>、跟 <a href="https://www.facebook.com/groups/632716536831984?locale=zh_TW">白沙屯媽祖全球徒步聯誼會</a> 等,裡頭的前輩們大多說隨心喜樂,輕便即可,帶著一副輕鬆自在的心情上路即可。有了那份誠心與虔敬,剩下的就交給媽祖,和所有支援香燈腳的善意們。</p>
  95.  
  96.  
  97.  
  98. <p>也可能是,有人說進香路上即是修行,造福消業。如果準備充足,何來業消?何來體驗慈悲喜捨?</p>
  99.  
  100.  
  101.  
  102. <p>但隨著出發的日子越來越近,那份期待與興奮漸漸交織成一股複雜的情緒,一方面渴望踏上這條朝聖之路,另一方面又忍不住開始盤算起旅程中可能遇到的各種狀況。</p>
  103.  
  104.  
  105.  
  106. <p>心裡持續流動著有一些小小的焦慮:今年去程是急行軍,我的體力真的可以負荷嗎?遊覽車組怎麼還沒連絡我?到時停遊覽車的位置很遠怎麼辦?洗衣服怎麼辦?防曬的裝備跟雨天的裝備都要帶嗎? 行動電源要多帶一顆,還是拿之前買來放在防災包裡的行動太陽能板邊走邊充?前兩天竟然有些輕微感冒的現象,喉嚨癢癢的,會不會正好在進香時爆開?</p>
  107.  
  108.  
  109.  
  110. <p>這些問題像傍晚跑步時迎面而來的草蚊一樣,雖然不處理不會造成傷害,但放著不理又會對你造成困擾。</p>
  111.  
  112.  
  113.  
  114. <p>我知道,這種沒有完美答案、不確定性,正是白沙屯的一部份 (包括進香路線的不確定都是)。也因為如此,每個人的答案不同,才充滿了真實與感動。就算你有了自以為的答案,媽祖也有她給你的版本和考驗。你可以找萬全的準備,然後拒絕那種不確定性和隨機,也可以給自己基本的保障就好,剩下的,就交給上天和社會的善意去接住。</p>
  115.  
  116.  
  117.  
  118. <p>如果用一句話說,就是「船到橋頭自然直」。</p>
  119.  
  120.  
  121.  
  122. <p>這樣說來,或許整理行李和準備裝備只是表象,更重要的是調整自己的心態。不要執著所謂的最佳化,畢竟這不緊湊的出差行程。</p>
  123.  
  124.  
  125.  
  126. <p>學著在旅途中保持彈性和寬容,每一步踏出,不只是腳印,也是一次次小小的隨機。畢竟,我是在台灣,在這個語言和風土民情都熟悉的土地上。應該不會餓死、應該不會找不到地方睡、不會是一個人。</p>
  127.  
  128.  
  129.  
  130. <p>有一整個信仰體系的人在支撐著這個活動。</p>
  131.  
  132.  
  133.  
  134. <p>這樣想,好像就好多了。</p>
  135.  
  136.  
  137.  
  138. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  139.  
  140.  
  141.  
  142. <h2 class="wp-block-heading">2025/4/28 (D-3)</h2>
  143.  
  144.  
  145.  
  146. <p>週一,早上窗外就下著雨,不是一個適合在外頭遊蕩的日子。粉專裡開始出現打包的文章和天氣的預報。氣溫 20~32 度,會有午後陣雨。看起來,不是豔陽天,也是不是狂亂的雨天。但也意味著,防曬和雨備都還是要顧。</p>
  147.  
  148.  
  149.  
  150. <p>先把行李分成兩大包,一包是隨身背包、一包是過夜背包。不過去程急行軍,除了過夜洗澡之外的東西,應該都會放在隨身背包;回程時間充裕,才會依狀況決定隨身背包的東西。</p>
  151.  
  152.  
  153.  
  154. <p>首先,東西依功能分類、命名,然後裝進一個個小的防水袋裡,再試著塞進小小的21L 背包。<br>外套、大遮陽帽、和拖鞋這三樣塞進去,背包就七分滿了。如果再剩下的夜行包、雨備包、醫療包、3C 充電包、食物和生活包放進去,滿了!</p>
  155.  
  156.  
  157.  
  158. <figure class="wp-block-image size-large"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="1024" height="768" src="https://i0.wp.com/blog.serv.idv.tw/wp-content/uploads/2025/04/IMG_6201s.jpg?resize=1024%2C768&#038;ssl=1" alt="" class="wp-image-8076" srcset="https://i0.wp.com/blog.serv.idv.tw/wp-content/uploads/2025/04/IMG_6201s.jpg?resize=1024%2C768&amp;ssl=1 1024w, https://i0.wp.com/blog.serv.idv.tw/wp-content/uploads/2025/04/IMG_6201s.jpg?resize=400%2C300&amp;ssl=1 400w, https://i0.wp.com/blog.serv.idv.tw/wp-content/uploads/2025/04/IMG_6201s.jpg?resize=1536%2C1152&amp;ssl=1 1536w, https://i0.wp.com/blog.serv.idv.tw/wp-content/uploads/2025/04/IMG_6201s.jpg?w=1920&amp;ssl=1 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
  159.  
  160.  
  161.  
  162. <p>我比自己想像的還貪心許多、還擔心許多。</p>
  163.  
  164.  
  165.  
  166. <p>把東西取出,重新整理,一個個量測重量,整理如下:</p>
  167.  
  168.  
  169.  
  170. <figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th class="has-text-align-center" data-align="center">分類</th><th>項目</th><th class="has-text-align-center" data-align="center">重量 (g)</th></tr></thead><tbody><tr><td class="has-text-align-center" data-align="center">身穿</td><td>運動上衣+壓力褲+短褲+五指襪+跑鞋+官方背心</td><td class="has-text-align-center" data-align="center">~1000</td></tr><tr><td class="has-text-align-center" data-align="center">&#8212;</td><td>&#8212;</td><td class="has-text-align-center" data-align="center">&#8212;</td></tr><tr><td class="has-text-align-center" data-align="center">收納</td><td>背包:紅21L + 進香背章 +前掛小包</td><td class="has-text-align-center" data-align="center">800</td></tr><tr><td class="has-text-align-center" data-align="center">衣服</td><td>備用拖鞋 (母子鱷魚)</td><td class="has-text-align-center" data-align="center">203.3</td></tr><tr><td class="has-text-align-center" data-align="center"></td><td>外套</td><td class="has-text-align-center" data-align="center">502</td></tr><tr><td class="has-text-align-center" data-align="center">防曬包</td><td>大遮陽帽 + 袖套 + 墨鏡 + 防曬乳</td><td class="has-text-align-center" data-align="center">479</td></tr><tr><td class="has-text-align-center" data-align="center">雨備包</td><td>輕便雨衣 x1 + 背包套</td><td class="has-text-align-center" data-align="center">96</td></tr><tr><td class="has-text-align-center" data-align="center">夜行包</td><td>頭燈 + 晚上警示燈 + 頭燈備用電池 + 反光條</td><td class="has-text-align-center" data-align="center">152.4</td></tr><tr><td class="has-text-align-center" data-align="center">充電包</td><td>行動電源 + 充電線組 + 備用行動電源1、2 + 小快充頭 (35W) + Air tag</td><td class="has-text-align-center" data-align="center">692.1</td></tr><tr><td class="has-text-align-center" data-align="center">食物包</td><td>一瓶水 + 口罩 + 錢包 + 別針 + D型扣 + 裝食物小密封袋x2 + 小垃圾袋x3 + 能量棒 + 乖乖膠 + 鹽糖</td><td class="has-text-align-center" data-align="center">596.6</td></tr><tr><td class="has-text-align-center" data-align="center">醫療包</td><td>透氣矽膠膠帶 + 止痛藥 + OK繃 + 繃帶一卷 + 瑞士刀</td><td class="has-text-align-center" data-align="center">192</td></tr></tbody></table></figure>
  171.  
  172.  
  173.  
  174. <p>打包之後,隨身行李的重量大概是 3.7Kg。背起來還可以。</p>
  175.  
  176.  
  177.  
  178. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  179.  
  180.  
  181.  
  182. <h2 class="wp-block-heading">2025/4/29 (D-2)</h2>
  183.  
  184.  
  185.  
  186. <p>週二,看看鼓鼓的隨身背包,再看看一週的氣象預報。嗯…決定把大遮陽帽改放到過夜包。多雲午後短暫雷陣雨、紫外線 5~7 (中到高量),應該用防曬乳就好。大遮陽帽等回程時看天氣再用。</p>
  187.  
  188.  
  189.  
  190. <p>昨晚跟研究所室友聊天,收到「不要煩惱太多」的建議。果然懂我。早上看到拱天宮官方公告了<a href="https://www.facebook.com/bstmz/posts/pfbid0KgbBJDNuu2cbvvMj9UKAak3PRqe9M7pS86Jq26dDhN7rVA2u2aeJfs8nXJ8T84Y5l">步行隨團遊覽車的連絡方式</a>,煩惱的事又少了一項。</p>
  191.  
  192.  
  193.  
  194. <p>船到橋頭自然直。</p>
  195.  
  196.  
  197.  
  198. <p>好,那今天來把過夜背包打點好。</p>
  199.  
  200.  
  201.  
  202. <p>下午看到一篇 2017年的《<a href="https://945d.blogspot.com/2017/03/blog-post.html">跟隨媽祖徒步遶境進香準備事項的建議與經驗心得分享</a>》,裡頭寫的資訊在 2025年的現在仍然沒有什麼過程。時間的力量真是神奇,有的文章1個月後就已經失去90%的參考價值,有的文章在經過8年後卻還有90%的參考價值。</p>
  203.  
  204.  
  205.  
  206. <p>中午跟一個前同事,同時也是學弟吃飯。他正好經歷離職的空窗期,煩惱著下一份工作要如何選擇。我的建議跟當年在職時我們的 1-on-1 內容類似,加了些我這一年來轉變的新體悟。結束前他跟我分享最近正在進行的 100 件事計畫 (取自《<a href="https://zh.wikipedia.org/zh-tw/%E6%AE%AD%E5%B1%8D100%EF%BD%9E%E5%9C%A8%E6%88%90%E7%82%BA%E6%AE%AD%E5%B1%8D%E5%89%8D%E8%A6%81%E5%81%9A%E7%9A%84100%E4%BB%B6%E4%BA%8B%EF%BD%9E">殭屍100~在成為殭屍前要做的100件事</a>》),想要在工作和家庭生活之餘,再多增加一些自己的時間和空間。我分享了自己的 bucket list,以及即將到來的白沙屯媽祖進香。下一刻,在32萬人之外,又多了一位某天同行一段的香燈腳。</p>
  207.  
  208.  
  209.  
  210. <p>但人海茫茫,到時如何相見,如何共行,能夠走多久,都是未知數。跟人生一樣,彼此不認識,目的也不同的一群人,跟著媽祖轎班的腳步,朝同個方向前進。等到這11天的進香結束,又各奔他方了。有的明年相見,有的一期一會。那些因為進香而熱鬧起來的社團和群組,又會因人們的離開而寂寥,直至下一年度的到來。</p>
  211.  
  212.  
  213.  
  214. <p>在還沒出發的現在就想到這件事,是不是太早了呢?</p>
  215.  
  216.  
  217.  
  218. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  219.  
  220.  
  221.  
  222. <h2 class="wp-block-heading">對家人生活的衝擊和對應的安排</h2>
  223.  
  224.  
  225.  
  226. <p>好像是上週吧,突然被問到:「你去瘋媽祖 11 天,孩子怎麼辦?」</p>
  227.  
  228.  
  229.  
  230. <p>其實孩子已經國小,可以自己上下學,簡單的生活也可以自理了。我平常的角色,與其說是管/教/養,不如說是「陪伴」。 所以這十一天的缺席,對他們「生活」的影響,精神上可能大於體感上的。現在網路和通訊這麼發達,要連絡我相較之下容易許多。差別在於我和他們的距離,從30分鐘變成3個小時。</p>
  231.  
  232.  
  233.  
  234. <p>之前我已經和孩子討論過這次進香的意義,雖然我並沒有談太多這次進香對我的意義,一方面這應該不是他們這個年紀最關心的事物,另一方面我自己也沒有答案。</p>
  235.  
  236.  
  237.  
  238. <p>或是這麼說好了,這次參加進香,目的之一就是想從過程中尋找目的。</p>
  239.  
  240.  
  241.  
  242. <p>這麼個人/私人的行為,我需要有些自己的空間,讓我重建構築現在這個階段的自己。</p>
  243.  
  244.  
  245.  
  246. <p>我需要家人給予的陪伴,不是在身邊,而是在家好好的。這種想像既能減少彼此的思念,也讓我更安心專注於旅程。</p>
  247.  
  248.  
  249.  
  250. <p>相信等我回家後,一定有許許多多的學校趣事和生活點滴在等待著我。</p>
  251.  
  252.  
  253.  
  254. <p>對了,目前小幸福跟小平安可能會陪我走最後一天的10K,</p>
  255.  
  256.  
  257.  
  258. <p></p>
  259.  
  260.  
  261.  
  262. <p>期待。</p>
  263.  
  264.  
  265.  
  266. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  267.  
  268.  
  269.  
  270. <h2 class="wp-block-heading">最後,給我自己三句話:</h2>
  271.  
  272.  
  273.  
  274. <ol class="wp-block-list">
  275. <li><strong>行李準備要輕裝,調整心態是關鍵</strong>:「船到橋頭自然直」。</li>
  276.  
  277.  
  278.  
  279. <li><strong>進香不只是旅程,更是修行與對話</strong>:我從過程找目的。</li>
  280.  
  281.  
  282.  
  283. <li><strong>練習從牽絆中放手,轉為陪伴</strong>:照顧孩子不要變成藉口。</li>
  284. </ol>
  285.  
  286.  
  287.  
  288. <p></p>
  289.  
  290.  
  291.  
  292. <figure class="wp-block-pullquote"><blockquote><p>我們,路上見。</p></blockquote></figure>
  293.  
  294.  
  295.  
  296. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  297. ]]></content:encoded>
  298. <wfw:commentRss>https://blog.serv.idv.tw/2025/04/pilgrimage-preparation/feed/</wfw:commentRss>
  299. <slash:comments>0</slash:comments>
  300. <media:content url="https://blog.serv.idv.tw/wp-content/uploads/2025/04/clip2comic-2025-04-29-20-40-16-1.jpg" medium="image"></media:content>
  301. <post-id xmlns="com-wordpress:feed-additions:1">8072</post-id> </item>
  302. <item>
  303. <title>Colab + WhisperX 將音檔轉成逐字稿</title>
  304. <link>https://blog.serv.idv.tw/2025/04/colab-whisperx-transcript/</link>
  305. <comments>https://blog.serv.idv.tw/2025/04/colab-whisperx-transcript/#respond</comments>
  306. <dc:creator><![CDATA[PipperL]]></dc:creator>
  307. <pubDate>Mon, 28 Apr 2025 08:35:00 +0000</pubDate>
  308. <category><![CDATA[電腦.網路]]></category>
  309. <category><![CDATA[AI]]></category>
  310. <category><![CDATA[podcast]]></category>
  311. <category><![CDATA[Python]]></category>
  312. <category><![CDATA[vibe coding]]></category>
  313. <category><![CDATA[逐字稿]]></category>
  314. <guid isPermaLink="false">https://blog.serv.idv.tw/?p=8062</guid>
  315.  
  316. <description><![CDATA[前幾天在聽podcast時聽到一段不錯的內容,索性把之前在 colab 上跑的 fast whisper 拿出來用。但因為 podcast 是對談,想分不同的講者,於是找了一下有沒有 solution。 目前 whisperX 已經有支援。把 colab 的版本架了起來。過程中發現 ChatGPT 很有耐心地關心我的需求和碰到的錯誤,真的像是要一步步地帶著我完成所有的程式碼。這些 code 完全由我自己寫的已經 <50% 了, vibe coding 真是驚人。]]></description>
  317. <content:encoded><![CDATA[
  318. <p></p>
  319.  
  320.  
  321.  
  322. <p>前幾天在聽podcast時聽到一段不錯的內容,不過因為我用的不是 Apple Podcast, 沒有逐字稿,索性把之前在 colab 上跑的 fast whisper 拿出來用。但因為 podcast 是對談,想分不同的講者,於是找了一下有沒有 solution。發現大多是用 pyannote 去進行說話人分割 (diarization),然後再 對齊 (align)。 目前 whisperX 已經有支援。</p>
  323.  
  324.  
  325.  
  326. <p>whisperX 之前有「停更」過一段,今年又恢復更新。於是找了些資料,把 colab 的版本架了起來。後面又發現中文的斷句和標點有些麻煩, GPT 介紹的幾個作法不是不好用,就是有幻覺。最後還是選擇直接叫 GPT 來修飾文字,畢竟本來就是語言模型。</p>
  327.  
  328.  
  329.  
  330. <p>過程中發現 ChatGPT 很有耐心地關心我的需求和碰到的錯誤,真的像是要一步步地帶著我完成所有的程式碼。雖然產出的東西偶爾會有錯,我也會自己手殘去修改一些我要的邏輯。不過如果回饋給他,他會記住,並且在後續的版本持續完善整個程式碼。</p>
  331.  
  332.  
  333.  
  334. <p>這些 code 完全由我自己寫的已經 &lt;50% 了, vibe coding 真是驚人。</p>
  335.  
  336.  
  337.  
  338. <span id="more-8062"></span>
  339.  
  340.  
  341.  
  342. <p>以下是 音檔轉中文逐字稿 (WhisperX 2025) 的 code 和 簡單的講解說明。</p>
  343.  
  344.  
  345.  
  346. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  347.  
  348.  
  349.  
  350. <h3 class="wp-block-heading">1. 首先是掛載 Google Drive</h3>
  351.  
  352.  
  353.  
  354. <p><strong>用途:</strong>是將自己的 Google Drive 掛載到 Colab 以便讀取/儲存音檔與結果檔。</p>
  355.  
  356.  
  357.  
  358. <div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="from google.colab import drive
  359. drive.mount('/content/drive')" style="color:#d8dee9ff;display:none" aria-label="複製" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">from</span><span style="color: #D8DEE9FF"> google</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">colab </span><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> drive</span></span>
  360. <span class="line"><span style="color: #D8DEE9FF">drive</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">mount</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">/content/drive</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">)</span></span></code></pre></div>
  361.  
  362.  
  363.  
  364. <p><strong>重點說明</strong>:</p>
  365.  
  366.  
  367.  
  368. <ul class="wp-block-list">
  369. <li>執行後會跳出授權連結,必須點擊確認授權</li>
  370.  
  371.  
  372.  
  373. <li>路徑 <code>/content/drive</code> 是預設位置,也可改成其他子資料夾。</li>
  374. </ul>
  375.  
  376.  
  377.  
  378. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  379.  
  380.  
  381.  
  382. <h3 class="wp-block-heading">2. 安裝與環境配置</h3>
  383.  
  384.  
  385.  
  386. <p><strong>用途</strong>:移除舊版 PyTorch,安裝相容的 PyTorch、WhisperX、Diarization 等套件,並做 CUDA、cuDNN 的微調。</p>
  387.  
  388.  
  389.  
  390. <div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="!pip uninstall torch torchvision torchaudio -y
  391.  
  392. # follow https://github.com/m-bain/whisperX/issues/1087
  393. !pip install torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 --index-url https://download.pytorch.org/whl/cu121
  394.  
  395. !pip install ctranslate2==4.4.0
  396. !pip install faster-whisper==1.1.0
  397. !pip install whisperx==3.3.1
  398.  
  399. !apt-get update
  400. !apt-get install libcudnn8=8.9.2.26-1+cuda12.1
  401. !apt-get install libcudnn8-dev=8.9.2.26-1+cuda12.1
  402.  
  403. !python -c &quot;import torch; torch.backends.cuda.matmul.allow_tf32 = True; torch.backends.cudnn.allow_tf32 = True&quot;
  404.  
  405.  
  406. # 為了使用說話人分割(Diarization)功能,需要 pyannote.audio
  407. # 注意:pyannote.audio 需要你同意 Hugging Face 上的模型使用條款
  408. # 並且需要一個 Hugging Face 的 User Access Token
  409. # !pip install pyannote.audio==2.1.1 --quiet # WhisperX README 推薦特定版本,檢查最新推薦
  410. # 或者嘗試讓 pip 自動選擇最新的 3.x 版本
  411. #!pip install pyannote.audio&gt;=3.0.0 --quiet
  412. !pip install pyannote.audio" style="color:#d8dee9ff;display:none" aria-label="複製" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">!</span><span style="color: #D8DEE9FF">pip uninstall torch torchvision torchaudio </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">y</span></span>
  413. <span class="line"></span>
  414. <span class="line"><span style="color: #616E88"># follow https://github.com/m-bain/whisperX/issues/1087</span></span>
  415. <span class="line"><span style="color: #D8DEE9">!</span><span style="color: #D8DEE9FF">pip install torch</span><span style="color: #81A1C1">==</span><span style="color: #B48EAD">2.5</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">1 torchvision</span><span style="color: #81A1C1">==</span><span style="color: #B48EAD">0.20</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">1 torchaudio</span><span style="color: #81A1C1">==</span><span style="color: #B48EAD">2.5</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">1 </span><span style="color: #D8DEE9">--</span><span style="color: #D8DEE9FF">index</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">url https</span><span style="color: #ECEFF4">:</span><span style="color: #81A1C1">//</span><span style="color: #D8DEE9FF">download</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">pytorch</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">org</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9FF">whl</span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9FF">cu121</span></span>
  416. <span class="line"></span>
  417. <span class="line"><span style="color: #D8DEE9">!</span><span style="color: #D8DEE9FF">pip install ctranslate2</span><span style="color: #81A1C1">==</span><span style="color: #B48EAD">4.4</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">0</span></span>
  418. <span class="line"><span style="color: #D8DEE9">!</span><span style="color: #D8DEE9FF">pip install faster</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">whisper</span><span style="color: #81A1C1">==</span><span style="color: #B48EAD">1.1</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">0</span></span>
  419. <span class="line"><span style="color: #D8DEE9">!</span><span style="color: #D8DEE9FF">pip install whisperx</span><span style="color: #81A1C1">==</span><span style="color: #B48EAD">3.3</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">1</span></span>
  420. <span class="line"></span>
  421. <span class="line"><span style="color: #D8DEE9">!</span><span style="color: #D8DEE9FF">apt</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">get update</span></span>
  422. <span class="line"><span style="color: #D8DEE9">!</span><span style="color: #D8DEE9FF">apt</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">get install libcudnn8</span><span style="color: #81A1C1">=</span><span style="color: #B48EAD">8.9</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">2</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">26</span><span style="color: #81A1C1">-</span><span style="color: #B48EAD">1</span><span style="color: #81A1C1">+</span><span style="color: #D8DEE9FF">cuda12</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">1</span></span>
  423. <span class="line"><span style="color: #D8DEE9">!</span><span style="color: #D8DEE9FF">apt</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">get install libcudnn8</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">dev</span><span style="color: #81A1C1">=</span><span style="color: #B48EAD">8.9</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">2</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">26</span><span style="color: #81A1C1">-</span><span style="color: #B48EAD">1</span><span style="color: #81A1C1">+</span><span style="color: #D8DEE9FF">cuda12</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">1</span></span>
  424. <span class="line"></span>
  425. <span class="line"><span style="color: #D8DEE9">!</span><span style="color: #D8DEE9FF">python </span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">c </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">import torch; torch.backends.cuda.matmul.allow_tf32 = True; torch.backends.cudnn.allow_tf32 = True</span><span style="color: #ECEFF4">&quot;</span></span>
  426. <span class="line"></span>
  427. <span class="line"></span>
  428. <span class="line"><span style="color: #616E88"># 為了使用說話人分割(Diarization)功能,需要 pyannote.audio</span></span>
  429. <span class="line"><span style="color: #616E88"># 注意:pyannote.audio 需要你同意 Hugging Face 上的模型使用條款</span></span>
  430. <span class="line"><span style="color: #616E88"># 並且需要一個 Hugging Face 的 User Access Token</span></span>
  431. <span class="line"><span style="color: #616E88"># !pip install pyannote.audio==2.1.1 --quiet # WhisperX README 推薦特定版本,檢查最新推薦</span></span>
  432. <span class="line"><span style="color: #616E88"># 或者嘗試讓 pip 自動選擇最新的 3.x 版本</span></span>
  433. <span class="line"><span style="color: #616E88">#!pip install pyannote.audio&gt;=3.0.0 --quiet</span></span>
  434. <span class="line"><span style="color: #D8DEE9">!</span><span style="color: #D8DEE9FF">pip install pyannote</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">audio</span></span></code></pre></div>
  435.  
  436.  
  437.  
  438. <p></p>
  439.  
  440.  
  441.  
  442. <h4 class="wp-block-heading"><strong>重點說明</strong>:</h4>
  443.  
  444.  
  445.  
  446. <ol class="wp-block-list">
  447. <li><strong>版本鎖定</strong>:Colab CUDA 版本常改,需指定與 CUDA 12.1 相容的 cuDNN(<code>libcudnn8=8.9.2.26-1+cuda12.1</code>)以避免運行時找不到函式或版本不符。我試過用當時最 (2025/4) 最新的版本 3.3.2,跑起來會 crash。後來還是乖乖地降版回去跑。細節可以參考 <a href="https://github.com/m-bain/whisperX/issues/1087">https://github.com/m-bain/whisperX/issues/1087</a> 跟 <a href="https://github.com/m-bain/whisperX/issues/1114">https://github.com/m-bain/whisperX/issues/1114</a></li>
  448.  
  449.  
  450.  
  451. <li><strong>Diarization 套件</strong>:<code>pyannote.audio</code> 預設不含依賴檔,首次載入 Hugging Face 模型前,需要在 notebook 最上方設定環境變數 <code>HUGGING_FACE_HUB_TOKEN</code>。或是在左邊找到 Secret (錀匙符號) 設定這個變數。</li>
  452. </ol>
  453.  
  454.  
  455.  
  456. <p></p>
  457.  
  458.  
  459.  
  460. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  461.  
  462.  
  463.  
  464. <h3 class="wp-block-heading">3. 載入函式庫與參數設定</h3>
  465.  
  466.  
  467.  
  468. <p><strong>用途</strong>:匯入 WhisperX、Torch、Colab 工具、設定模型大小、音檔路徑與 Hugging Face Token。</p>
  469.  
  470.  
  471.  
  472. <div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="import whisperx
  473. import torch
  474. import gc
  475. import os
  476.  
  477. # from faster_whisper import WhisperModel
  478. from tqdm import tqdm
  479. import os
  480. from google.colab import files
  481. from google.colab import userdata
  482.  
  483.  
  484.  
  485. model_size = &quot;large-v2&quot; # tiny, base, small, medium, large, large-v2, large-v3
  486. batch_size = 16 # reduce if low on GPU mem
  487. device=&quot;cuda&quot;
  488.  
  489. # 設定檔案路徑
  490. audio_path = &quot;/content/drive/MyDrive/Colab Notebooks/test_sample.mp3&quot; # 替換成你的檔案名稱
  491.  
  492. HF_TOKEN = userdata.get('HF_TOKEN')
  493. os.environ['HUGGING_FACE_HUB_TOKEN'] = HF_TOKEN
  494. " style="color:#d8dee9ff;display:none" aria-label="複製" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> whisperx</span></span>
  495. <span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> torch</span></span>
  496. <span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> gc</span></span>
  497. <span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> os</span></span>
  498. <span class="line"></span>
  499. <span class="line"><span style="color: #616E88"># from faster_whisper import WhisperModel</span></span>
  500. <span class="line"><span style="color: #81A1C1">from</span><span style="color: #D8DEE9FF"> tqdm </span><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> tqdm</span></span>
  501. <span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> os</span></span>
  502. <span class="line"><span style="color: #81A1C1">from</span><span style="color: #D8DEE9FF"> google</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">colab </span><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> files</span></span>
  503. <span class="line"><span style="color: #81A1C1">from</span><span style="color: #D8DEE9FF"> google</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">colab </span><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> userdata</span></span>
  504. <span class="line"></span>
  505. <span class="line"></span>
  506. <span class="line"></span>
  507. <span class="line"><span style="color: #D8DEE9FF">model_size </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">large-v2</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #616E88"># tiny, base, small, medium, large, large-v2, large-v3</span></span>
  508. <span class="line"><span style="color: #D8DEE9FF">batch_size </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">16</span><span style="color: #D8DEE9FF"> </span><span style="color: #616E88"># reduce if low on GPU mem</span></span>
  509. <span class="line"><span style="color: #D8DEE9FF">device</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">cuda</span><span style="color: #ECEFF4">&quot;</span></span>
  510. <span class="line"></span>
  511. <span class="line"><span style="color: #616E88"># 設定檔案路徑</span></span>
  512. <span class="line"><span style="color: #D8DEE9FF">audio_path </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">/content/drive/MyDrive/Colab Notebooks/test_sample.mp3</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #616E88"># 替換成你的檔案名稱</span></span>
  513. <span class="line"></span>
  514. <span class="line"><span style="color: #D8DEE9FF">HF_TOKEN </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> userdata</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">get</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">HF_TOKEN</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">)</span></span>
  515. <span class="line"><span style="color: #D8DEE9FF">os</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">environ</span><span style="color: #ECEFF4">[</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">HUGGING_FACE_HUB_TOKEN</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">]</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> HF_TOKEN</span></span>
  516. <span class="line"></span></code></pre></div>
  517.  
  518.  
  519.  
  520. <p><strong>重點說明</strong>:</p>
  521.  
  522.  
  523.  
  524. <ul class="wp-block-list">
  525. <li><code>userdata.get('HF_TOKEN')</code> 會抓 Colab → 代碼儲存的使用者資料欄位,請確保事先將 Token 寫入 Colab 使用者資料。</li>
  526.  
  527.  
  528.  
  529. <li><code>batch_size</code> 若遇到 OOM,可適度降低至 4、8。我自己試是還好,沒有 Out of memory。</li>
  530.  
  531.  
  532.  
  533. <li><code>model_size</code> 我自己是選 large-v2。往下不建議,往上可以到 “large-v3”。但之前用其他版本跑 large-v3 時,有時會出現幻覺。這次沒仔細測試。</li>
  534. </ul>
  535.  
  536.  
  537.  
  538. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  539.  
  540.  
  541.  
  542. <h3 class="wp-block-heading">4. WhisperX 轉錄、對齊與說話人分配</h3>
  543.  
  544.  
  545.  
  546. <p><strong>用途</strong>:一條龍執行:語音轉文字 → 字詞對齊 → 說話人分割 → 將字詞貼上對應說話人。</p>
  547.  
  548.  
  549.  
  550. <div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="
  551. # 1. Transcribe with original whisper (batched)
  552. print(&quot;正在載入 Whisper 模型...&quot;)
  553. model = whisperx.load_model(model_size, device, compute_type=&quot;float16&quot;)
  554.  
  555. print(f&quot;正在載入音訊檔案: {audio_path}&quot;)
  556. audio = whisperx.load_audio(audio_path)
  557.  
  558. print(&quot;正在進行轉錄...&quot;)
  559. result = model.transcribe(audio, batch_size=batch_size, chunk_size=6)
  560. # print( result[&quot;segments&quot;]) # before alignment
  561.  
  562. # 2. Align whisper output
  563. print(&quot;正在載入對齊模型...&quot;)
  564. model_a, metadata = whisperx.load_align_model(language_code=result[&quot;language&quot;], device=device)
  565. aligned_result = whisperx.align(result[&quot;segments&quot;], model_a, metadata, audio, device, return_char_alignments=True, interpolate_method=&quot;linear&quot;)
  566. # print(aligned_result[&quot;segments&quot;]) # after alignment
  567.  
  568.  
  569. # 3. Assign speaker labels
  570. print(&quot;正在載入說話人分割模型...&quot;)
  571. diarize_model = whisperx.DiarizationPipeline(device=device)
  572. diarize_segments = diarize_model(audio)
  573. # add min/max number of speakers if known
  574. # diarize_segments = diarize_model(audio, min_speakers=1, max_speakers=2)
  575. # print(diarize_segments)
  576.  
  577.  
  578. print(&quot;正在將說話人標籤分配給詞語...&quot;)
  579. final_result = whisperx.assign_word_speakers(diarize_segments, aligned_result)
  580. # print(final_result[&quot;segments&quot;]) # segments are now assigned speaker IDs
  581.  
  582.  
  583.  
  584. print(&quot;\n--- 最終結果 (片段與說話人) ---&quot;)
  585. " style="color:#d8dee9ff;display:none" aria-label="複製" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"></span>
  586. <span class="line"><span style="color: #616E88"># 1. Transcribe with original whisper (batched)</span></span>
  587. <span class="line"><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">正在載入 Whisper 模型...</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">)</span></span>
  588. <span class="line"><span style="color: #D8DEE9FF">model </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> whisperx</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">load_model</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">model_size</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> device</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">compute_type</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">float16</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">)</span></span>
  589. <span class="line"></span>
  590. <span class="line"><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #81A1C1">f</span><span style="color: #A3BE8C">&quot;正在載入音訊檔案: </span><span style="color: #EBCB8B">{</span><span style="color: #D8DEE9FF">audio_path</span><span style="color: #EBCB8B">}</span><span style="color: #A3BE8C">&quot;</span><span style="color: #ECEFF4">)</span></span>
  591. <span class="line"><span style="color: #D8DEE9FF">audio </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> whisperx</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">load_audio</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">audio_path</span><span style="color: #ECEFF4">)</span></span>
  592. <span class="line"></span>
  593. <span class="line"><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">正在進行轉錄...</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">)</span></span>
  594. <span class="line"><span style="color: #D8DEE9FF">result </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> model</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">transcribe</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">audio</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">batch_size</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF">batch_size</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">chunk_size</span><span style="color: #81A1C1">=</span><span style="color: #B48EAD">6</span><span style="color: #ECEFF4">)</span></span>
  595. <span class="line"><span style="color: #616E88"># print( result[&quot;segments&quot;]) # before alignment</span></span>
  596. <span class="line"></span>
  597. <span class="line"><span style="color: #616E88"># 2. Align whisper output</span></span>
  598. <span class="line"><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">正在載入對齊模型...</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">)</span></span>
  599. <span class="line"><span style="color: #D8DEE9FF">model_a</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> metadata </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> whisperx</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">load_align_model</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9">language_code</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF">result</span><span style="color: #ECEFF4">[</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">language</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">],</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">device</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF">device</span><span style="color: #ECEFF4">)</span></span>
  600. <span class="line"><span style="color: #D8DEE9FF">aligned_result </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> whisperx</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">align</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">result</span><span style="color: #ECEFF4">[</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">segments</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">],</span><span style="color: #D8DEE9FF"> model_a</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> metadata</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> audio</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> device</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">return_char_alignments</span><span style="color: #81A1C1">=True</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">interpolate_method</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">linear</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">)</span></span>
  601. <span class="line"><span style="color: #616E88"># print(aligned_result[&quot;segments&quot;]) # after alignment</span></span>
  602. <span class="line"></span>
  603. <span class="line"></span>
  604. <span class="line"><span style="color: #616E88"># 3. Assign speaker labels</span></span>
  605. <span class="line"><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">正在載入說話人分割模型...</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">)</span></span>
  606. <span class="line"><span style="color: #D8DEE9FF">diarize_model </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> whisperx</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">DiarizationPipeline</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9">device</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF">device</span><span style="color: #ECEFF4">)</span></span>
  607. <span class="line"><span style="color: #D8DEE9FF">diarize_segments </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">diarize_model</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">audio</span><span style="color: #ECEFF4">)</span></span>
  608. <span class="line"><span style="color: #616E88"># add min/max number of speakers if known</span></span>
  609. <span class="line"><span style="color: #616E88"># diarize_segments = diarize_model(audio, min_speakers=1, max_speakers=2)</span></span>
  610. <span class="line"><span style="color: #616E88"># print(diarize_segments)</span></span>
  611. <span class="line"></span>
  612. <span class="line"></span>
  613. <span class="line"><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">正在將說話人標籤分配給詞語...</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">)</span></span>
  614. <span class="line"><span style="color: #D8DEE9FF">final_result </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> whisperx</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">assign_word_speakers</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">diarize_segments</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> aligned_result</span><span style="color: #ECEFF4">)</span></span>
  615. <span class="line"><span style="color: #616E88"># print(final_result[&quot;segments&quot;]) # segments are now assigned speaker IDs</span></span>
  616. <span class="line"></span>
  617. <span class="line"></span>
  618. <span class="line"></span>
  619. <span class="line"><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #EBCB8B">\n</span><span style="color: #A3BE8C">--- 最終結果 (片段與說話人) ---</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">)</span></span>
  620. <span class="line"></span></code></pre></div>
  621.  
  622.  
  623.  
  624. <p></p>
  625.  
  626.  
  627.  
  628. <p><strong>重點說明</strong>:</p>
  629.  
  630.  
  631.  
  632. <ul class="wp-block-list">
  633. <li><strong><code>chunk_size=6</code></strong>:每段音訊切 6 秒,增加對齊精度,但過小會導致重疊、過多段落。我建議中文設 6.。</li>
  634.  
  635.  
  636.  
  637. <li><strong>對齊模型</strong>:<code>load_align_model</code> 回傳的 metadata 包含字元/時間對應資訊;<code>interpolate_method="linear"</code> 可平滑短詞的時間戳。我自己測試有些微差異 (切字出來的成果),不過實務上中文還是有不少切不好的地方,所以還是先設 linear,後續再丟 GPT 順一次。</li>
  638.  
  639.  
  640.  
  641. <li><strong>Diarization</strong>:如已知講者數,可傳入 <code>min_speakers</code>、<code>max_speakers</code> 參數,否則自動估算。</li>
  642.  
  643.  
  644.  
  645. <li>輸出 <code>final_result["segments"]</code> 為每段詞語級別的列表,格式類似:</li>
  646. </ul>
  647.  
  648.  
  649.  
  650. <pre class="wp-block-code"><code>{
  651.  "word": "你好",
  652.  "start": 1.23,
  653.  "end": 1.45,
  654.  "speaker": "SPEAKER_00"
  655. }</code></pre>
  656.  
  657.  
  658.  
  659. <ul class="wp-block-list">
  660. <li>實作上會發現分割的時間點即使切得很細,對齊的結果仍然有落差。有時候會出現對齊後格式內只有word,沒有start/end 時間資訊,有時是沒有 speaker 資訊。</li>
  661.  
  662.  
  663.  
  664. <li>另外一個問題是有時最後一個字會跑到下一個說話人那邊去 (或是反過來),可能是中文加上兩個說話人在搶話,也有可能是切話的時間資訊有些微誤差。像是下面的狀況:</li>
  665. </ul>
  666.  
  667.  
  668.  
  669. <pre class="wp-block-code"><code>&#91;00:14:30 - 00:14:32] SPEAKER_00: 那你為什麼這麼強烈地想要追求邏輯我
  670. &#91;00:14:32 - 00:16:18] SPEAKER_01: 不知道欸就像有些人沒辦法接受桌子很亂</code></pre>
  671.  
  672.  
  673.  
  674. <ul class="wp-block-list">
  675. <li>以上兩個問題都困擾了我蠻久,最後決定留到下一個階段處理。</li>
  676. </ul>
  677.  
  678.  
  679.  
  680. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  681.  
  682.  
  683.  
  684. <h3 class="wp-block-heading">5. 合併同講者詞與 GPT-4 斷句</h3>
  685.  
  686.  
  687.  
  688. <p><strong>用途</strong>:將同一講者的話合併,再呼叫 OpenAI GPT-4 為長句補標點並斷句。</p>
  689.  
  690.  
  691.  
  692. <div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(3 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="!pip install openai
  693. print(&quot;\n--------------- 中文merge 與斷句處理  ---------\n&quot;)
  694.  
  695.  
  696. import openai
  697. import time
  698. import os
  699.  
  700.  
  701. HF_TOKEN = userdata.get('OPENAI_API')
  702. os.environ['OPENAI_API_KEY'] = HF_TOKEN
  703.  
  704. ##########################################
  705.  
  706. # 先把同一個發言者的字合併
  707.  
  708.  
  709. def merge_words_by_speaker(segments):
  710.    merged = []
  711.    current = {
  712.        &quot;speaker&quot;: None,
  713.        &quot;text&quot;: &quot;&quot;,
  714.        &quot;start&quot;: None,
  715.        &quot;end&quot;: None
  716.    }
  717.  
  718.    pending_unknown = None  # 用來暫存沒有時間的 UNKNOWN 詞
  719.  
  720.    for segment in segments:
  721.        for word in segment.get(&quot;words&quot;, []):
  722.  
  723.            speaker = word.get(&quot;speaker&quot;, &quot;UNKNOWN&quot;)
  724.            word_text = word[&quot;word&quot;]
  725.  
  726.            # 處理 UNKNOWN 且沒時間標記的詞
  727.            if speaker == &quot;UNKNOWN&quot; and &quot;start&quot; not in word and &quot;end&quot; not in word:
  728.                # 當作當前 speaker 的延伸,先暫存
  729.                current[&quot;text&quot;] += word_text
  730.                pending_unknown = word_text
  731.                continue
  732.  
  733.            # speaker 改變時,儲存上一段
  734.            if current[&quot;speaker&quot;] != speaker:
  735.                if current[&quot;text&quot;]:
  736.                    merged.append(current)
  737.  
  738.                # 如果有 pending_unknown,要接到下一個 speaker 的開頭
  739.                if pending_unknown:
  740.                    word_text = pending_unknown + word_text
  741.                    pending_unknown = None
  742.  
  743.                current = {
  744.                    &quot;speaker&quot;: speaker,
  745.                    &quot;text&quot;: word_text,
  746.                    &quot;start&quot;: word.get(&quot;start&quot;),
  747.                    &quot;end&quot;: word.get(&quot;end&quot;)
  748.                }
  749.  
  750.            else:
  751.                # 同一位 speaker 的詞
  752.                pending_unknown = None
  753.                current[&quot;text&quot;] += word_text
  754.                if &quot;end&quot; in word:
  755.                    current[&quot;end&quot;] = word[&quot;end&quot;]
  756.  
  757.  
  758.    # 加入最後一段
  759.    if current[&quot;text&quot;]:
  760.        merged.append(current)
  761.  
  762.    return merged
  763.  
  764.  
  765.  
  766.  
  767.  
  768.  
  769. # 用 GPT-4 做斷句處理
  770.  
  771.  
  772. client = openai.OpenAI()  # 用環境變數設定 OPENAI_API_KEY
  773.  
  774. def punctuate_with_gpt(text, model=&quot;gpt-4o-mini&quot;, max_retry=3):
  775.    prompt = f&quot;&quot;&quot;請幫我將以下沒有標點的中文話語補上合適的標點(例如句號、逗號、問號等),並分成自然語言語句:
  776.  
  777. {text}
  778.  
  779. 輸出時只需要修正後的文本,不需要其他解釋。&quot;&quot;&quot;
  780.  
  781.    for _ in range(max_retry):
  782.        try:
  783.            response = client.chat.completions.create(
  784.                model=model,
  785.                messages=[{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: prompt}],
  786.                temperature=0.3
  787.            )
  788.            return response.choices[0].message.content.strip()
  789.        except Exception as e:
  790.            print(f&quot;API error: {e}&quot;)
  791.            time.sleep(2)
  792.    return text
  793.  
  794.  
  795. # 對合併後的結果做 GPT 斷句處理
  796. def process_segments_with_gpt(merged_results, length_threshold=10):
  797.    processed = []
  798.    for segment in merged_results:
  799.        raw_text = segment['text']
  800.        if len(raw_text) &gt;= length_threshold:
  801.            processed_text = punctuate_with_gpt(raw_text)
  802.        else:
  803.            processed_text = raw_text
  804.  
  805.        processed.append({
  806.            &quot;speaker&quot;: segment.get(&quot;speaker&quot;, &quot;未知說話人&quot;),
  807.            &quot;start&quot;: segment.get(&quot;start&quot;),
  808.            &quot;end&quot;: segment.get(&quot;end&quot;),
  809.            &quot;text&quot;: processed_text
  810.        })
  811.    return processed
  812.  
  813.  
  814.  
  815. # Step 4: 輸出結果
  816. def print_segments(segments):
  817.    for seg in segments:
  818.        start = seg[&quot;start&quot;]
  819.        end = seg[&quot;end&quot;]
  820.        speaker = seg[&quot;speaker&quot;]
  821.        text = seg[&quot;text&quot;]
  822.        print(f&quot;[{start:.2f}s - {end:.2f}s] {speaker}: {text}&quot;)
  823.  
  824.  
  825.  
  826.  
  827.  
  828.  
  829.  # 使用方式
  830.  
  831. print(&quot;正在合併同一個發言者的發言...\n&quot;)
  832. merged_results = merge_words_by_speaker(final_result[&quot;segments&quot;])
  833.  
  834. print(&quot;正在使用 GPT 作斷句和標點處理…...\n&quot;)
  835. final_sentences = process_segments_with_gpt(merged_results)
  836. " style="color:#d8dee9ff;display:none" aria-label="複製" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9">!</span><span style="color: #D8DEE9FF">pip install openai</span></span>
  837. <span class="line"><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #EBCB8B">\n</span><span style="color: #A3BE8C">--------------- 中文merge 與斷句處理  ---------</span><span style="color: #EBCB8B">\n</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">)</span></span>
  838. <span class="line"></span>
  839. <span class="line"></span>
  840. <span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> openai</span></span>
  841. <span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> time</span></span>
  842. <span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> os</span></span>
  843. <span class="line"></span>
  844. <span class="line"></span>
  845. <span class="line"><span style="color: #D8DEE9FF">HF_TOKEN </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> userdata</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">get</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">OPENAI_API</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">)</span></span>
  846. <span class="line"><span style="color: #D8DEE9FF">os</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">environ</span><span style="color: #ECEFF4">[</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">OPENAI_API_KEY</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">]</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> HF_TOKEN</span></span>
  847. <span class="line"></span>
  848. <span class="line"><span style="color: #616E88">##########################################</span></span>
  849. <span class="line"></span>
  850. <span class="line"><span style="color: #616E88"># 先把同一個發言者的字合併</span></span>
  851. <span class="line"></span>
  852. <span class="line"></span>
  853. <span class="line"><span style="color: #81A1C1">def</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">merge_words_by_speaker</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9">segments</span><span style="color: #ECEFF4">):</span></span>
  854. <span class="line"><span style="color: #D8DEE9FF">    merged </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">[]</span></span>
  855. <span class="line"><span style="color: #D8DEE9FF">    current </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
  856. <span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">speaker</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">None</span><span style="color: #ECEFF4">,</span></span>
  857. <span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">text</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;&quot;</span><span style="color: #ECEFF4">,</span></span>
  858. <span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">start</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">None</span><span style="color: #ECEFF4">,</span></span>
  859. <span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">end</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">None</span></span>
  860. <span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span></span>
  861. <span class="line"></span>
  862. <span class="line"><span style="color: #D8DEE9FF">    pending_unknown </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">None</span><span style="color: #D8DEE9FF">  </span><span style="color: #616E88"># 用來暫存沒有時間的 UNKNOWN 詞</span></span>
  863. <span class="line"></span>
  864. <span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">for</span><span style="color: #D8DEE9FF"> segment </span><span style="color: #81A1C1">in</span><span style="color: #D8DEE9FF"> segments</span><span style="color: #ECEFF4">:</span></span>
  865. <span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">for</span><span style="color: #D8DEE9FF"> word </span><span style="color: #81A1C1">in</span><span style="color: #D8DEE9FF"> segment</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">get</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">words</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">[]):</span></span>
  866. <span class="line"></span>
  867. <span class="line"><span style="color: #D8DEE9FF">            speaker </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> word</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">get</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">speaker</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">UNKNOWN</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">)</span></span>
  868. <span class="line"><span style="color: #D8DEE9FF">            word_text </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> word</span><span style="color: #ECEFF4">[</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">word</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">]</span></span>
  869. <span class="line"></span>
  870. <span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #616E88"># 處理 UNKNOWN 且沒時間標記的詞</span></span>
  871. <span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> speaker </span><span style="color: #81A1C1">==</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">UNKNOWN</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">and</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">start</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">not</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">in</span><span style="color: #D8DEE9FF"> word </span><span style="color: #81A1C1">and</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">end</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">not</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">in</span><span style="color: #D8DEE9FF"> word</span><span style="color: #ECEFF4">:</span></span>
  872. <span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #616E88"># 當作當前 speaker 的延伸,先暫存</span></span>
  873. <span class="line"><span style="color: #D8DEE9FF">                current</span><span style="color: #ECEFF4">[</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">text</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">]</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">+=</span><span style="color: #D8DEE9FF"> word_text</span></span>
  874. <span class="line"><span style="color: #D8DEE9FF">                pending_unknown </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> word_text</span></span>
  875. <span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #81A1C1">continue</span></span>
  876. <span class="line"></span>
  877. <span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #616E88"># speaker 改變時,儲存上一段</span></span>
  878. <span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> current</span><span style="color: #ECEFF4">[</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">speaker</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">]</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">!=</span><span style="color: #D8DEE9FF"> speaker</span><span style="color: #ECEFF4">:</span></span>
  879. <span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> current</span><span style="color: #ECEFF4">[</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">text</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">]:</span></span>
  880. <span class="line"><span style="color: #D8DEE9FF">                    merged</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">append</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">current</span><span style="color: #ECEFF4">)</span></span>
  881. <span class="line"></span>
  882. <span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #616E88"># 如果有 pending_unknown,要接到下一個 speaker 的開頭</span></span>
  883. <span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> pending_unknown</span><span style="color: #ECEFF4">:</span></span>
  884. <span class="line"><span style="color: #D8DEE9FF">                    word_text </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> pending_unknown </span><span style="color: #81A1C1">+</span><span style="color: #D8DEE9FF"> word_text</span></span>
  885. <span class="line"><span style="color: #D8DEE9FF">                    pending_unknown </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">None</span></span>
  886. <span class="line"></span>
  887. <span class="line"><span style="color: #D8DEE9FF">                current </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
  888. <span class="line"><span style="color: #D8DEE9FF">                    </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">speaker</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> speaker</span><span style="color: #ECEFF4">,</span></span>
  889. <span class="line"><span style="color: #D8DEE9FF">                    </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">text</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> word_text</span><span style="color: #ECEFF4">,</span></span>
  890. <span class="line"><span style="color: #D8DEE9FF">                    </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">start</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> word</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">get</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">start</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">),</span></span>
  891. <span class="line"><span style="color: #D8DEE9FF">                    </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">end</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> word</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">get</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">end</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">)</span></span>
  892. <span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #ECEFF4">}</span></span>
  893. <span class="line"></span>
  894. <span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #81A1C1">else</span><span style="color: #ECEFF4">:</span></span>
  895. <span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #616E88"># 同一位 speaker 的詞</span></span>
  896. <span class="line"><span style="color: #D8DEE9FF">                pending_unknown </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">None</span></span>
  897. <span class="line"><span style="color: #D8DEE9FF">                current</span><span style="color: #ECEFF4">[</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">text</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">]</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">+=</span><span style="color: #D8DEE9FF"> word_text</span></span>
  898. <span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">end</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">in</span><span style="color: #D8DEE9FF"> word</span><span style="color: #ECEFF4">:</span></span>
  899. <span class="line"><span style="color: #D8DEE9FF">                    current</span><span style="color: #ECEFF4">[</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">end</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">]</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> word</span><span style="color: #ECEFF4">[</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">end</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">]</span></span>
  900. <span class="line"></span>
  901. <span class="line"></span>
  902. <span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #616E88"># 加入最後一段</span></span>
  903. <span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> current</span><span style="color: #ECEFF4">[</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">text</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">]:</span></span>
  904. <span class="line"><span style="color: #D8DEE9FF">        merged</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">append</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">current</span><span style="color: #ECEFF4">)</span></span>
  905. <span class="line"></span>
  906. <span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> merged</span></span>
  907. <span class="line"></span>
  908. <span class="line"></span>
  909. <span class="line"></span>
  910. <span class="line"></span>
  911. <span class="line"></span>
  912. <span class="line"></span>
  913. <span class="line"><span style="color: #616E88"># 用 GPT-4 做斷句處理</span></span>
  914. <span class="line"></span>
  915. <span class="line"></span>
  916. <span class="line"><span style="color: #D8DEE9FF">client </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> openai</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">OpenAI</span><span style="color: #ECEFF4">()</span><span style="color: #D8DEE9FF">  </span><span style="color: #616E88"># 用環境變數設定 OPENAI_API_KEY</span></span>
  917. <span class="line"></span>
  918. <span class="line"><span style="color: #81A1C1">def</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">punctuate_with_gpt</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9">text</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">model</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">gpt-4o-mini</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">max_retry</span><span style="color: #81A1C1">=</span><span style="color: #B48EAD">3</span><span style="color: #ECEFF4">):</span></span>
  919. <span class="line"><span style="color: #D8DEE9FF">    prompt </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">f</span><span style="color: #A3BE8C">&quot;&quot;&quot;請幫我將以下沒有標點的中文話語補上合適的標點(例如句號、逗號、問號等),並分成自然語言語句:</span></span>
  920. <span class="line"></span>
  921. <span class="line"><span style="color: #EBCB8B">{</span><span style="color: #D8DEE9FF">text</span><span style="color: #EBCB8B">}</span></span>
  922. <span class="line"></span>
  923. <span class="line"><span style="color: #A3BE8C">輸出時只需要修正後的文本,不需要其他解釋。&quot;&quot;&quot;</span></span>
  924. <span class="line"></span>
  925. <span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">for</span><span style="color: #D8DEE9FF"> _ </span><span style="color: #81A1C1">in</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">range</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">max_retry</span><span style="color: #ECEFF4">):</span></span>
  926. <span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">try</span><span style="color: #ECEFF4">:</span></span>
  927. <span class="line"><span style="color: #D8DEE9FF">            response </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> client</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">chat</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">completions</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">create</span><span style="color: #ECEFF4">(</span></span>
  928. <span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">model</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF">model</span><span style="color: #ECEFF4">,</span></span>
  929. <span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">messages</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">[{</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">role</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">user</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">content</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> prompt</span><span style="color: #ECEFF4">}],</span></span>
  930. <span class="line"><span style="color: #D8DEE9FF">                </span><span style="color: #D8DEE9">temperature</span><span style="color: #81A1C1">=</span><span style="color: #B48EAD">0.3</span></span>
  931. <span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #ECEFF4">)</span></span>
  932. <span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> response</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">choices</span><span style="color: #ECEFF4">[</span><span style="color: #B48EAD">0</span><span style="color: #ECEFF4">].</span><span style="color: #D8DEE9FF">message</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">content</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">strip</span><span style="color: #ECEFF4">()</span></span>
  933. <span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">except</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">Exception</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">as</span><span style="color: #D8DEE9FF"> e</span><span style="color: #ECEFF4">:</span></span>
  934. <span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #81A1C1">f</span><span style="color: #A3BE8C">&quot;API error: </span><span style="color: #EBCB8B">{</span><span style="color: #D8DEE9FF">e</span><span style="color: #EBCB8B">}</span><span style="color: #A3BE8C">&quot;</span><span style="color: #ECEFF4">)</span></span>
  935. <span class="line"><span style="color: #D8DEE9FF">            time</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">sleep</span><span style="color: #ECEFF4">(</span><span style="color: #B48EAD">2</span><span style="color: #ECEFF4">)</span></span>
  936. <span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> text</span></span>
  937. <span class="line"></span>
  938. <span class="line"></span>
  939. <span class="line"><span style="color: #616E88"># 對合併後的結果做 GPT 斷句處理</span></span>
  940. <span class="line"><span style="color: #81A1C1">def</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">process_segments_with_gpt</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9">merged_results</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">length_threshold</span><span style="color: #81A1C1">=</span><span style="color: #B48EAD">10</span><span style="color: #ECEFF4">):</span></span>
  941. <span class="line"><span style="color: #D8DEE9FF">    processed </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">[]</span></span>
  942. <span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">for</span><span style="color: #D8DEE9FF"> segment </span><span style="color: #81A1C1">in</span><span style="color: #D8DEE9FF"> merged_results</span><span style="color: #ECEFF4">:</span></span>
  943. <span class="line"><span style="color: #D8DEE9FF">        raw_text </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> segment</span><span style="color: #ECEFF4">[</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">text</span><span style="color: #ECEFF4">&#39;</span><span style="color: #ECEFF4">]</span></span>
  944. <span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">len</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">raw_text</span><span style="color: #ECEFF4">)</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">&gt;=</span><span style="color: #D8DEE9FF"> length_threshold</span><span style="color: #ECEFF4">:</span></span>
  945. <span class="line"><span style="color: #D8DEE9FF">            processed_text </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">punctuate_with_gpt</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">raw_text</span><span style="color: #ECEFF4">)</span></span>
  946. <span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">else</span><span style="color: #ECEFF4">:</span></span>
  947. <span class="line"><span style="color: #D8DEE9FF">            processed_text </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> raw_text</span></span>
  948. <span class="line"></span>
  949. <span class="line"><span style="color: #D8DEE9FF">        processed</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">append</span><span style="color: #ECEFF4">({</span></span>
  950. <span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">speaker</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> segment</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">get</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">speaker</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">未知說話人</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">),</span></span>
  951. <span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">start</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> segment</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">get</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">start</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">),</span></span>
  952. <span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">end</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> segment</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">get</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">end</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">),</span></span>
  953. <span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">text</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> processed_text</span></span>
  954. <span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #ECEFF4">})</span></span>
  955. <span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> processed</span></span>
  956. <span class="line"></span>
  957. <span class="line"></span>
  958. <span class="line"></span>
  959. <span class="line"><span style="color: #616E88"># Step 4: 輸出結果</span></span>
  960. <span class="line"><span style="color: #81A1C1">def</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">print_segments</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9">segments</span><span style="color: #ECEFF4">):</span></span>
  961. <span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">for</span><span style="color: #D8DEE9FF"> seg </span><span style="color: #81A1C1">in</span><span style="color: #D8DEE9FF"> segments</span><span style="color: #ECEFF4">:</span></span>
  962. <span class="line"><span style="color: #D8DEE9FF">        start </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> seg</span><span style="color: #ECEFF4">[</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">start</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">]</span></span>
  963. <span class="line"><span style="color: #D8DEE9FF">        end </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> seg</span><span style="color: #ECEFF4">[</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">end</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">]</span></span>
  964. <span class="line"><span style="color: #D8DEE9FF">        speaker </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> seg</span><span style="color: #ECEFF4">[</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">speaker</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">]</span></span>
  965. <span class="line"><span style="color: #D8DEE9FF">        text </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> seg</span><span style="color: #ECEFF4">[</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">text</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">]</span></span>
  966. <span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #81A1C1">f</span><span style="color: #A3BE8C">&quot;[</span><span style="color: #EBCB8B">{</span><span style="color: #D8DEE9FF">start</span><span style="color: #81A1C1">:.2f</span><span style="color: #EBCB8B">}</span><span style="color: #A3BE8C">s - </span><span style="color: #EBCB8B">{</span><span style="color: #D8DEE9FF">end</span><span style="color: #81A1C1">:.2f</span><span style="color: #EBCB8B">}</span><span style="color: #A3BE8C">s] </span><span style="color: #EBCB8B">{</span><span style="color: #D8DEE9FF">speaker</span><span style="color: #EBCB8B">}</span><span style="color: #A3BE8C">: </span><span style="color: #EBCB8B">{</span><span style="color: #D8DEE9FF">text</span><span style="color: #EBCB8B">}</span><span style="color: #A3BE8C">&quot;</span><span style="color: #ECEFF4">)</span></span>
  967. <span class="line"></span>
  968. <span class="line"></span>
  969. <span class="line"></span>
  970. <span class="line"></span>
  971. <span class="line"></span>
  972. <span class="line"></span>
  973. <span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #616E88"># 使用方式</span></span>
  974. <span class="line"></span>
  975. <span class="line"><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">正在合併同一個發言者的發言...</span><span style="color: #EBCB8B">\n</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">)</span></span>
  976. <span class="line"><span style="color: #D8DEE9FF">merged_results </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">merge_words_by_speaker</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">final_result</span><span style="color: #ECEFF4">[</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">segments</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">])</span></span>
  977. <span class="line"></span>
  978. <span class="line"><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">正在使用 GPT 作斷句和標點處理…...</span><span style="color: #EBCB8B">\n</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">)</span></span>
  979. <span class="line"><span style="color: #D8DEE9FF">final_sentences </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">process_segments_with_gpt</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">merged_results</span><span style="color: #ECEFF4">)</span></span>
  980. <span class="line"></span></code></pre></div>
  981.  
  982.  
  983.  
  984. <p><strong>重點說明</strong>:</p>
  985.  
  986.  
  987.  
  988. <ul class="wp-block-list">
  989. <li><code>merge_words_by_speaker</code> 用來把同一發言者 (說話人)的話合併。 <strong>合併邏輯</strong>:遇到 <code>speaker</code> 變動時,才將先前的文字推入 <code>merged</code> 清單;對於 <code>UNKNOWN</code> 無時間戳字詞,暫存後接到下一段。如果合併時發現是落單的最後一個字, 後面要換說話人了,那麼就把這個字同時分配給兩個說話人,後面再用 AI 把多餘的字去掉。</li>
  990.  
  991.  
  992.  
  993. <li><strong>GPT 斷句</strong>:只對長度 ≥ <code>length_threshold</code> 的句子呼叫 API,可省 token。</li>
  994.  
  995.  
  996.  
  997. <li><strong>錯誤重試</strong>:API 呼叫失敗時,最多重試 <code>max_retry</code> 次並等待 2 秒。</li>
  998.  
  999.  
  1000.  
  1001. <li>使用的模型:我這裡是使用 GPT-4o-mini,。我個人測試用 GPT-4o-mini 、GPT-4.1-mini 、 或是 GPT-4.1-nano 都沒有太大問題。</li>
  1002. </ul>
  1003.  
  1004.  
  1005.  
  1006. <p></p>
  1007.  
  1008.  
  1009.  
  1010. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  1011.  
  1012.  
  1013.  
  1014. <h3 class="wp-block-heading">6. 輸出與儲存結果</h3>
  1015.  
  1016.  
  1017.  
  1018. <p><strong>用途</strong>:將最終句子按照 <code>[hh:mm:ss - hh:mm:ss] 講者:內容</code> 格式,存成 <code>.txt</code> 檔並下載。</p>
  1019.  
  1020.  
  1021.  
  1022. <div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#d8dee9ff;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="
  1023. print(&quot;正在輸出結果...\n&quot;)
  1024. # print_segments(final_sentences)  # 顯示結果
  1025. # save_segments_to_txt(final_sentences, filename=&quot;transcription_result.txt&quot;)  # 儲存結果
  1026.  
  1027. # Step 5: 儲存結果到文字檔
  1028.  
  1029. def format_time(seconds):
  1030.    if seconds is None:
  1031.        return &quot;??:??:??&quot;
  1032.    hours = int(seconds // 3600)
  1033.    minutes = int((seconds % 3600) // 60)
  1034.    seconds = int(seconds % 60)
  1035.    return f&quot;{hours:02}:{minutes:02}:{seconds:02}&quot;
  1036.  
  1037.  
  1038. # 獲取不帶副檔名的檔案名稱
  1039. filename_orig = os.path.splitext(os.path.basename(audio_path))[0]
  1040. filename_orig = filename_orig + &quot;.txt&quot;
  1041.  
  1042. def save_segments_to_txt(segments, filename=filename_orig):
  1043.    with open(filename, &quot;w&quot;, encoding=&quot;utf-8&quot;) as f:
  1044.        for seg in segments:
  1045.            start = format_time(seg[&quot;start&quot;])
  1046.            end = format_time(seg[&quot;end&quot;])
  1047.            speaker = seg[&quot;speaker&quot;]
  1048.            text = seg[&quot;text&quot;]
  1049.            f.write(f&quot;[{start} - {end}] {speaker}: {text}\n&quot;)
  1050.  
  1051.    files.download(f&quot;{filename}&quot;)
  1052.    print(f&quot;儲存成功:{filename}&quot;)
  1053.  
  1054.  
  1055. # save_segments_to_txt(final_sentences, filename=&quot;transcription_result.txt&quot;)  # 儲存結果
  1056. save_segments_to_txt(final_sentences)  # 儲存結果
  1057. " style="color:#d8dee9ff;display:none" aria-label="複製" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"></span>
  1058. <span class="line"><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">正在輸出結果...</span><span style="color: #EBCB8B">\n</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">)</span></span>
  1059. <span class="line"><span style="color: #616E88"># print_segments(final_sentences)  # 顯示結果</span></span>
  1060. <span class="line"><span style="color: #616E88"># save_segments_to_txt(final_sentences, filename=&quot;transcription_result.txt&quot;)  # 儲存結果</span></span>
  1061. <span class="line"></span>
  1062. <span class="line"><span style="color: #616E88"># Step 5: 儲存結果到文字檔</span></span>
  1063. <span class="line"></span>
  1064. <span class="line"><span style="color: #81A1C1">def</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">format_time</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9">seconds</span><span style="color: #ECEFF4">):</span></span>
  1065. <span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">if</span><span style="color: #D8DEE9FF"> seconds </span><span style="color: #81A1C1">is</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">None</span><span style="color: #ECEFF4">:</span></span>
  1066. <span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">??:??:??</span><span style="color: #ECEFF4">&quot;</span></span>
  1067. <span class="line"><span style="color: #D8DEE9FF">    hours </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">int</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">seconds </span><span style="color: #81A1C1">//</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">3600</span><span style="color: #ECEFF4">)</span></span>
  1068. <span class="line"><span style="color: #D8DEE9FF">    minutes </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">int</span><span style="color: #ECEFF4">((</span><span style="color: #D8DEE9FF">seconds </span><span style="color: #81A1C1">%</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">3600</span><span style="color: #ECEFF4">)</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">//</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">60</span><span style="color: #ECEFF4">)</span></span>
  1069. <span class="line"><span style="color: #D8DEE9FF">    seconds </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">int</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">seconds </span><span style="color: #81A1C1">%</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">60</span><span style="color: #ECEFF4">)</span></span>
  1070. <span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">f</span><span style="color: #A3BE8C">&quot;</span><span style="color: #EBCB8B">{</span><span style="color: #D8DEE9FF">hours</span><span style="color: #81A1C1">:02</span><span style="color: #EBCB8B">}</span><span style="color: #A3BE8C">:</span><span style="color: #EBCB8B">{</span><span style="color: #D8DEE9FF">minutes</span><span style="color: #81A1C1">:02</span><span style="color: #EBCB8B">}</span><span style="color: #A3BE8C">:</span><span style="color: #EBCB8B">{</span><span style="color: #D8DEE9FF">seconds</span><span style="color: #81A1C1">:02</span><span style="color: #EBCB8B">}</span><span style="color: #A3BE8C">&quot;</span></span>
  1071. <span class="line"></span>
  1072. <span class="line"></span>
  1073. <span class="line"><span style="color: #616E88"># 獲取不帶副檔名的檔案名稱</span></span>
  1074. <span class="line"><span style="color: #D8DEE9FF">filename_orig </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> os</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">path</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">splitext</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">os</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9FF">path</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">basename</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">audio_path</span><span style="color: #ECEFF4">))[</span><span style="color: #B48EAD">0</span><span style="color: #ECEFF4">]</span></span>
  1075. <span class="line"><span style="color: #D8DEE9FF">filename_orig </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> filename_orig </span><span style="color: #81A1C1">+</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">.txt</span><span style="color: #ECEFF4">&quot;</span></span>
  1076. <span class="line"></span>
  1077. <span class="line"><span style="color: #81A1C1">def</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">save_segments_to_txt</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9">segments</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">filename</span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF">filename_orig</span><span style="color: #ECEFF4">):</span></span>
  1078. <span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">with</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">open</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">filename</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">w</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">encoding</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">utf-8</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">)</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">as</span><span style="color: #D8DEE9FF"> f</span><span style="color: #ECEFF4">:</span></span>
  1079. <span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">for</span><span style="color: #D8DEE9FF"> seg </span><span style="color: #81A1C1">in</span><span style="color: #D8DEE9FF"> segments</span><span style="color: #ECEFF4">:</span></span>
  1080. <span class="line"><span style="color: #D8DEE9FF">            start </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">format_time</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">seg</span><span style="color: #ECEFF4">[</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">start</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">])</span></span>
  1081. <span class="line"><span style="color: #D8DEE9FF">            end </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">format_time</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">seg</span><span style="color: #ECEFF4">[</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">end</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">])</span></span>
  1082. <span class="line"><span style="color: #D8DEE9FF">            speaker </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> seg</span><span style="color: #ECEFF4">[</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">speaker</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">]</span></span>
  1083. <span class="line"><span style="color: #D8DEE9FF">            text </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> seg</span><span style="color: #ECEFF4">[</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">text</span><span style="color: #ECEFF4">&quot;</span><span style="color: #ECEFF4">]</span></span>
  1084. <span class="line"><span style="color: #D8DEE9FF">            f</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">write</span><span style="color: #ECEFF4">(</span><span style="color: #81A1C1">f</span><span style="color: #A3BE8C">&quot;[</span><span style="color: #EBCB8B">{</span><span style="color: #D8DEE9FF">start</span><span style="color: #EBCB8B">}</span><span style="color: #A3BE8C"> - </span><span style="color: #EBCB8B">{</span><span style="color: #D8DEE9FF">end</span><span style="color: #EBCB8B">}</span><span style="color: #A3BE8C">] </span><span style="color: #EBCB8B">{</span><span style="color: #D8DEE9FF">speaker</span><span style="color: #EBCB8B">}</span><span style="color: #A3BE8C">: </span><span style="color: #EBCB8B">{</span><span style="color: #D8DEE9FF">text</span><span style="color: #EBCB8B">}\n</span><span style="color: #A3BE8C">&quot;</span><span style="color: #ECEFF4">)</span></span>
  1085. <span class="line"></span>
  1086. <span class="line"><span style="color: #D8DEE9FF">    files</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">download</span><span style="color: #ECEFF4">(</span><span style="color: #81A1C1">f</span><span style="color: #A3BE8C">&quot;</span><span style="color: #EBCB8B">{</span><span style="color: #D8DEE9FF">filename</span><span style="color: #EBCB8B">}</span><span style="color: #A3BE8C">&quot;</span><span style="color: #ECEFF4">)</span></span>
  1087. <span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #88C0D0">print</span><span style="color: #ECEFF4">(</span><span style="color: #81A1C1">f</span><span style="color: #A3BE8C">&quot;儲存成功:</span><span style="color: #EBCB8B">{</span><span style="color: #D8DEE9FF">filename</span><span style="color: #EBCB8B">}</span><span style="color: #A3BE8C">&quot;</span><span style="color: #ECEFF4">)</span></span>
  1088. <span class="line"></span>
  1089. <span class="line"></span>
  1090. <span class="line"><span style="color: #616E88"># save_segments_to_txt(final_sentences, filename=&quot;transcription_result.txt&quot;)  # 儲存結果</span></span>
  1091. <span class="line"><span style="color: #88C0D0">save_segments_to_txt</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9FF">final_sentences</span><span style="color: #ECEFF4">)</span><span style="color: #D8DEE9FF">  </span><span style="color: #616E88"># 儲存結果</span></span>
  1092. <span class="line"></span></code></pre></div>
  1093.  
  1094.  
  1095.  
  1096. <p></p>
  1097.  
  1098.  
  1099.  
  1100. <p><strong>重點說明</strong>:</p>
  1101.  
  1102.  
  1103.  
  1104. <ul class="wp-block-list">
  1105. <li><code>format_time</code> 需確保輸入秒數非 <code>None</code>,否則會顯示 <code>0</code>。</li>
  1106.  
  1107.  
  1108.  
  1109. <li>加上 <code>files.download</code> 可以觸發自動跳出瀏覽器下載視窗。</li>
  1110. </ul>
  1111.  
  1112.  
  1113.  
  1114. <h3 class="wp-block-heading">總結與未來展望</h3>
  1115.  
  1116.  
  1117.  
  1118. <p>以上就是我的Vibe coding 首嘗試,從 Google Drive 掛載、環境配置、模型載入與轉錄、說話人分割,到句子合併和 GPT-4 斷句,最後輸出成帶時間戳記與說話人標記的文字檔。未來還可以做的有:</p>
  1119.  
  1120.  
  1121.  
  1122. <ul class="wp-block-list">
  1123. <li>在轉錄時顯示進度:之前有寫過一版 (在Fast Whisper 上)</li>
  1124.  
  1125.  
  1126.  
  1127. <li>更新到最新/穩定的 whisperX 及相依版本。不然重裝 pytorch 、libcudnn 其實蠻花時間的</li>
  1128.  
  1129.  
  1130.  
  1131. <li>對切字/疊字有更好的作法。</li>
  1132. </ul>
  1133.  
  1134.  
  1135.  
  1136. <p>但我覺得應該不會做 <img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
  1137.  
  1138.  
  1139.  
  1140. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  1141. ]]></content:encoded>
  1142. <wfw:commentRss>https://blog.serv.idv.tw/2025/04/colab-whisperx-transcript/feed/</wfw:commentRss>
  1143. <slash:comments>0</slash:comments>
  1144. <media:content url="https://blog.serv.idv.tw/wp-content/uploads/2025/04/856050467346607298.jpeg" medium="image"></media:content>
  1145. <post-id xmlns="com-wordpress:feed-additions:1">8062</post-id> </item>
  1146. <item>
  1147. <title>使用Garmin 訓練計畫要留意(2025版)</title>
  1148. <link>https://blog.serv.idv.tw/2025/04/garmin-training-plan-2025/</link>
  1149. <comments>https://blog.serv.idv.tw/2025/04/garmin-training-plan-2025/#respond</comments>
  1150. <dc:creator><![CDATA[PipperL]]></dc:creator>
  1151. <pubDate>Mon, 21 Apr 2025 13:28:09 +0000</pubDate>
  1152. <category><![CDATA[運動.初心]]></category>
  1153. <category><![CDATA[garmin]]></category>
  1154. <category><![CDATA[訓練]]></category>
  1155. <category><![CDATA[跑步]]></category>
  1156. <category><![CDATA[運動]]></category>
  1157. <guid isPermaLink="false">https://blog.serv.idv.tw/?p=8058</guid>
  1158.  
  1159. <description><![CDATA[之前寫過的《使用Garmin 訓練計畫要留意》已經是八年前的內容了,隨著軟硬體不斷進化,很多細節都值得更新。以 ... <a title="使用Garmin 訓練計畫要留意(2025版)" class="read-more" href="https://blog.serv.idv.tw/2025/04/garmin-training-plan-2025/" aria-label="Read more about 使用Garmin 訓練計畫要留意(2025版)">閱讀全文</a>]]></description>
  1160. <content:encoded><![CDATA[
  1161. <p>之前寫過的《<a href="https://blog.serv.idv.tw/2017/06/garmin-training-plans/">使用Garmin 訓練計畫要留意</a>》已經是八年前的內容了,隨著軟硬體不斷進化,很多細節都值得更新。以下是我這段時間常用、也覺得實用的新功能及設定方式,更新在這裡。建議先去<a href="https://blog.serv.idv.tw/2017/06/garmin-training-plans/">舊文</a>讀完後,再過來接著讀。</p>
  1162.  
  1163.  
  1164.  
  1165. <span id="more-8058"></span>
  1166.  
  1167.  
  1168.  
  1169. <p></p>
  1170.  
  1171.  
  1172.  
  1173. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  1174.  
  1175.  
  1176.  
  1177. <h2 class="wp-block-heading">一、無線同步大躍進</h2>
  1178.  
  1179.  
  1180.  
  1181. <p>以往要把訓練計畫傳到錶上,還得靠 Garmin Express 透過 USB 線連電腦,流程相當繁瑣。現在只要在 <a href="https://connect.garmin.com/modern/">Garmin Connect</a> 網頁或 App 上設定好課表後,點「傳送到裝置」,只要手錶和手機下一次連線同步,訓練內容就會自動塞進錶裡,完全免插線。對於平常只把線接在豆腐頭充電的人來說,這功能真的是救星。</p>
  1182.  
  1183.  
  1184.  
  1185. <p></p>
  1186.  
  1187.  
  1188.  
  1189. <h2 class="wp-block-heading">二、心率區間的定義</h2>
  1190.  
  1191.  
  1192.  
  1193. <p>我的心率區間設定延續前篇提到的「國峰教練版」,採用以下的心率區間定義:</p>
  1194.  
  1195.  
  1196.  
  1197. <ul class="wp-block-list">
  1198. <li><strong>Zone 1:E(輕鬆心率)</strong></li>
  1199.  
  1200.  
  1201.  
  1202. <li><strong>Zone 2:M(有氧心率)</strong></li>
  1203.  
  1204.  
  1205.  
  1206. <li><strong>Zone 3:T(閾值心率)</strong></li>
  1207.  
  1208.  
  1209.  
  1210. <li><strong>Zone 4:A(無氧心率)</strong></li>
  1211.  
  1212.  
  1213.  
  1214. <li><strong>Zone 5:I(極限心率)</strong></li>
  1215. </ul>
  1216.  
  1217.  
  1218.  
  1219. <p>設定方式是在 <a href="https://connect.garmin.com/modern/">Garmin Connect </a>的「心率設定」裡改成自訂區間,填入以上數值即可。</p>
  1220.  
  1221.  
  1222.  
  1223. <p></p>
  1224.  
  1225.  
  1226.  
  1227. <h2 class="wp-block-heading">三、Garmin 教練計畫變多元</h2>
  1228.  
  1229.  
  1230.  
  1231. <p>Garmin Coach 不再只有「5K、10K、半馬、全馬」選項,你可以:</p>
  1232.  
  1233.  
  1234.  
  1235. <ul class="wp-block-list">
  1236. <li>設定更細微的目標(距離、配速、每週訓練時數)</li>
  1237.  
  1238.  
  1239.  
  1240. <li>直接選擇一名教練示範影片,提醒動作重點。</li>
  1241.  
  1242.  
  1243.  
  1244. <li>根據實際訓練表現自動微調後續課表,這是我一直很想要有的功能。</li>
  1245.  
  1246.  
  1247.  
  1248. <li></li>
  1249. </ul>
  1250.  
  1251.  
  1252.  
  1253. <p>我挑了一個教練跟半馬訓練計畫,等待白沙屯後來試著Run 一個週期試試。</p>
  1254.  
  1255.  
  1256.  
  1257. <p>雖然我不知道「依表現微調後續課表」的彈性多大?有多少 AI 的成份?但我很樂意好好去試試。</p>
  1258.  
  1259.  
  1260.  
  1261. <p>真的不好用的話,我會回來自己用 AI 搞一個分析數據和調整訓練內容的 AI 教練。</p>
  1262.  
  1263.  
  1264.  
  1265. <p></p>
  1266.  
  1267.  
  1268.  
  1269. <h2 class="wp-block-heading">四、自訂訓練變得更有彈性</h2>
  1270.  
  1271.  
  1272.  
  1273. <p>過去設定間歇跑要一段段手動調整,現在只要:</p>
  1274.  
  1275.  
  1276.  
  1277. <ol class="wp-block-list">
  1278. <li>在「訓練」→「訓練計畫」→「自訂訓練」新增一個項目</li>
  1279.  
  1280.  
  1281.  
  1282. <li>選「新增週期性」,設定動作種類、心率/配速範圍,指定循環次數</li>
  1283.  
  1284.  
  1285.  
  1286. <li>如果不想結尾再跑一段恢復,可勾選「略過最後一個恢復」</li>
  1287. </ol>
  1288.  
  1289.  
  1290.  
  1291. <p>真的方便許多。</p>
  1292.  
  1293.  
  1294.  
  1295. <p>不過「漸進跑」還是得一步一步手動設定,不能直接用週期性一鍵搞定,是唯一小遺憾。</p>
  1296.  
  1297.  
  1298.  
  1299. <p>在設定單項的時候,「估計時間」會顯示整堂課預計所需時間,讓我安排出發前的熱身/補給更精準。這也是小小貼心的地方。</p>
  1300.  
  1301.  
  1302.  
  1303. <p>另外新加入的「語音筆記」功能,訓練前先錄好提示,跑步時手錶會播出語音,完全不用盯著小小螢幕看字,對「近視+老花+累到眼花」的我超友善!不過前提是要有耳機連接著。我現在的 <a href="https://blog.serv.idv.tw/2022/11/fr955-power-consumption/">Garmin FR955</a>是不能從手表直接撥出語音的。</p>
  1304.  
  1305.  
  1306.  
  1307. <p></p>
  1308.  
  1309.  
  1310.  
  1311. <h2 class="wp-block-heading">五、PacePro 有幫助,但我還沒那麼認真</h2>
  1312.  
  1313.  
  1314.  
  1315. <p>PacePro 能根據路線起伏告訴你每公里應該跑多快,理論上能最佳化配速分配。不過我屬於「佛系跑者」,有時只想放輕鬆享受風景,不會完全依照它的秒數來跑。之前試過一兩次後,發現跟我的風格有差距,就放著了。未來如果想挑戰PB,再來認真研究這功能吧。</p>
  1316.  
  1317.  
  1318.  
  1319. <p></p>
  1320.  
  1321.  
  1322.  
  1323. <h2 class="wp-block-heading">六、Garmin&nbsp;Connect+:差異化功能還不多</h2>
  1324.  
  1325.  
  1326.  
  1327. <p><a href="https://www.garmin.com.tw/products/subscription-plans/garmin-connect-plus-annual/">Garmin Connect+</a> 是新的訂閱服務,主打進階分析與專屬課程。到目前為止,只有少數付費功能。</p>
  1328.  
  1329.  
  1330.  
  1331. <ul class="wp-block-list">
  1332. <li>ACTIVE INTELLIGENCE</li>
  1333.  
  1334.  
  1335.  
  1336. <li>表現儀表板</li>
  1337.  
  1338.  
  1339.  
  1340. <li>即時活動</li>
  1341.  
  1342.  
  1343.  
  1344. <li>獨家Garmin Coach 深度指引 (這個不曉得跟免費版的 Garmin Coach 差別多少?)</li>
  1345.  
  1346.  
  1347.  
  1348. <li>進階的LIVE TRACK</li>
  1349.  
  1350.  
  1351.  
  1352. <li>社群功能</li>
  1353. </ul>
  1354.  
  1355.  
  1356.  
  1357. <p>目前基礎跑步數據分析已足夠日常訓練,未來的新功能應該只會放在 Connect+ 裡。這作法應該已經在&nbsp; Garmin 的product Roadmap了。不過我還是希望 Garmin 維持買硬體搭軟體的方式,例如買表送一年 Connect+ 之類的服務。</p>
  1358.  
  1359.  
  1360.  
  1361. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  1362.  
  1363.  
  1364.  
  1365. <h3 class="wp-block-heading">小結</h3>
  1366.  
  1367.  
  1368.  
  1369. <p>這些年 Garmin 的訓練系統進步了不少,從有線同步走到無線自動,從死板課表進化為能依表現調整的動態訓練計畫,自訂訓練也更直覺、更人性。對佛系跑者或是不想要傷那麼多腦筋的人,看著身體能量指數、訓練完備程度、建議的訓練等指標來決定當天的訓練內容,是有幫助的。</p>
  1370.  
  1371.  
  1372.  
  1373. <p>而對於嚴肅跑者而言,靠自己去理解Garmin 所提供的更多的數據、進而自己 (或是靠教練) 調整課表內容,也一直是可行且可靠的方式之一。</p>
  1374.  
  1375.  
  1376.  
  1377. <p>這篇更新的文章補足了八年前那篇沒提到或當時還不存在的功能,希望能幫助你重新掌握訓練節奏,把科技變成日常的夥伴。</p>
  1378.  
  1379.  
  1380.  
  1381. <p>最後用一句最近看到的話,共勉之:</p>
  1382.  
  1383.  
  1384.  
  1385. <figure class="wp-block-pullquote"><blockquote><p>在腦中跑步的人,體能是不會變好的。</p></blockquote></figure>
  1386. ]]></content:encoded>
  1387. <wfw:commentRss>https://blog.serv.idv.tw/2025/04/garmin-training-plan-2025/feed/</wfw:commentRss>
  1388. <slash:comments>0</slash:comments>
  1389. <media:content url="https://blog.serv.idv.tw/wp-content/uploads/2025/04/螢幕擷取畫面-2025-04-21-212411-e1745241970421.png" medium="image"></media:content>
  1390. <post-id xmlns="com-wordpress:feed-additions:1">8058</post-id> </item>
  1391. <item>
  1392. <title>遊民週記 52: 遊民一年後,我寫下什麼?</title>
  1393. <link>https://blog.serv.idv.tw/2025/04/nomad-52-one-year-summary/</link>
  1394. <comments>https://blog.serv.idv.tw/2025/04/nomad-52-one-year-summary/#comments</comments>
  1395. <dc:creator><![CDATA[PipperL]]></dc:creator>
  1396. <pubDate>Mon, 14 Apr 2025 09:05:00 +0000</pubDate>
  1397. <category><![CDATA[BlogLog]]></category>
  1398. <category><![CDATA[遊民週記]]></category>
  1399. <category><![CDATA[nomad]]></category>
  1400. <category><![CDATA[人生]]></category>
  1401. <category><![CDATA[寫作反思]]></category>
  1402. <guid isPermaLink="false">https://blog.serv.idv.tw/?p=8036</guid>
  1403.  
  1404. <description><![CDATA[一年的時間,我又把「深呼吸」這個習慣累積了回來。每週至少一篇,55篇文章,15萬字。今天,我試著回顧這一年來,我留下的字字句句。]]></description>
  1405. <content:encoded><![CDATA[
  1406. <p>距離我離開上一份工作,竟然一年了。<br>本來現在應該要結束的 Gap year ,竟然又延長了。</p>
  1407.  
  1408.  
  1409.  
  1410. <p>我們常常高估一天的改變,低估數年的累積;也常高估延後一天的傷害,卻又低估拖延數年的代價。</p>
  1411.  
  1412.  
  1413.  
  1414. <p>如果問我還在公司裡的情景,專案內容,工作樣態,同事相處,技術發展…好像還在昨天一樣的歷歷在目。即使現在找前同事們出來吃飯,聊的是工作上的技術,也沒什麼落後或鴨子聽雷的感受。</p>
  1415.  
  1416.  
  1417.  
  1418. <p>但如果問我這一年來的生活、作息、和生活重心,之前工作的日子彷彿又變得遙不可及,好像是上個世紀似的。 這一年來,我的生活已經被重新定義了。中午跟孩子在閒聊工作和興趣,「我很幸運我的工作有一大部份是我的興趣,但生命中不會只有一種興趣,所以我現在正在追尋其他的興趣。」我說。</p>
  1419.  
  1420.  
  1421.  
  1422. <p>『我的導師說,你對專題的興趣這麼強烈,如果我跟你靈魂互換,我的專題成果就不會是現在這樣了』小幸福幽幽地說。</p>
  1423.  
  1424.  
  1425.  
  1426. <p>「沒關係,每個人都可以追尋 自己的興趣和夢想。你只要找到自己的興趣和夢想,如果剛好是你的專長,能夠靠它工作賺錢,那就更好了。」我回。</p>
  1427.  
  1428.  
  1429.  
  1430. <h2 class="wp-block-heading">整理一年來的文章</h2>
  1431.  
  1432.  
  1433.  
  1434. <p>一年的時間,我又把「深呼吸<sup data-fn="0f562791-2a71-47b2-8027-75247674c451" class="fn"><a href="#0f562791-2a71-47b2-8027-75247674c451" id="0f562791-2a71-47b2-8027-75247674c451-link">1</a></sup>」 這個習慣累積了回來。每週至少一篇,55篇文章,15萬字。今天,我試著回顧這一年來,我留下的字字句句。</p>
  1435.  
  1436.  
  1437.  
  1438. <span id="more-8036"></span>
  1439.  
  1440.  
  1441.  
  1442. <p>在2025的現在,這種事當然要叫AI助理來作。我先把這些文章匯出來,形成 excel .xlsx 格式,然後再請 AI 幫我把文章中 HTML 格式相關標籤 跟 wordpress 格式標籤去除。<a href="https://grok.com/">Grok</a> 寫了個程式要我自己做,<a href="https://gemini.google.com/app">Gemini</a> 不吃 excel,<a href="https://chat.deepseek.com/">Deepseek</a> 說我的文件「可能違反使用規範」(嗚嗚…敏感) ,<a href="https://chatgpt.com/">ChatGPT</a> 爽快地幫我完成,讓我下載了。</p>
  1443.  
  1444.  
  1445.  
  1446. <p>然後我請 AI 助理幫我分類成四大分類:運動健康、興趣志業、職涯財務、人際連結。 ChatGPT 很快陷入幻覺,只處理了前面2篇跟最後面幾篇,就以為自己已經全部做完;Grok 3 的思考陷入無窮迴圈,最後處理了10篇左右;<a href="https://notebooklm.google.com/">notebook LM</a> 應該可以好好整理,但它不吃 excel;所以我後來用用 word 套印成一頁一頁的文章後,再丟上 google drive 轉成文件,這樣子就餵得進Notebook LM 了。但整理出來的結果差強人意,找單點資料可以,但分類這件事仍然是七零八落。</p>
  1447.  
  1448.  
  1449.  
  1450. <p>最後讓我滿意的作法,是把轉出來的google 文件丟給 Gemini,才順利完成。人工再檢查過一次,稍微依自己的意思調整,的確省了不少時間。 謝謝生成式AI的存在。</p>
  1451.  
  1452.  
  1453.  
  1454. <h2 class="wp-block-heading">各分類的回顧</h2>
  1455.  
  1456.  
  1457.  
  1458. <p>透過這一年來的寫作,我對於不同主題的深入探索,讓我更清楚自己的興趣與追求。這些分類的主題是基於我的 bucket list (aka 人生的50個夢想)。藉著回顧,也可以檢視一下自己有沒有「偏食」,獨好某一分類。</p>
  1459.  
  1460.  
  1461.  
  1462. <p>如果就文章數量而言,「運動健康類」很明顯的是最少的,只有 8篇。 這是因為運動是長久而持續的活動,但也是相較比較無聊的。跑旅可以寫、比賽心得可以寫、但是日復一日的訓練,就不見得有什麼好寫的了。</p>
  1463.  
  1464.  
  1465.  
  1466. <p>職涯財務類最多,有24篇。其中FIRE、財務盤點和規劃占了10篇,其他的則是職涯上的回顧和未來的展望/想像。在 gap year 的這一年,會有更多的機會去思考與探索未來職涯和生涯的選項,無論是財務還是職涯發展,應該是很自然的一件事。</p>
  1467.  
  1468.  
  1469.  
  1470. <p>興趣志業類我本來以為是最多的,不過除了幾篇參加活動 (包括 g0v、青鳥) ,幾篇關於政治的事實查核筆記 (517、釋憲案、立院預算事件),幾篇電腦相關的筆記,其實並沒有什麼「大事」。但把興趣和志業拆解放到每天的生活裡頭,現在回頭看,這一年來好像也真的有了什麼累積。</p>
  1471.  
  1472.  
  1473.  
  1474. <p>最後是人際關係類,這一年我花了更多的時間在孩子和原生家庭上,跟興趣類一樣,沒有什麼專文大事,但融入在日常生活中的點滴,卻讓我感受到前所未有的連結。如果一年後要拿出來說嘴,我想到的大概就是暑假了。我陪伴了兩個孩子一整個暑假,實行了「喵咪の暑假計畫」。我更了解孩子,累積了更多的情感資產 (即使在小幸福的青春期!),這一件事,我跟孩子應該都會記住的。</p>
  1475.  
  1476.  
  1477.  
  1478. <figure class="wp-block-image size-full"><img data-recalc-dims="1" decoding="async" width="1024" height="1024" src="https://i0.wp.com/blog.serv.idv.tw/wp-content/uploads/2025/04/family-chatGPT-%E5%90%89%E5%8D%9C%E5%8A%9B%E9%A2%A8.png?resize=1024%2C1024&#038;ssl=1" alt="" class="wp-image-8053" srcset="https://i0.wp.com/blog.serv.idv.tw/wp-content/uploads/2025/04/family-chatGPT-%E5%90%89%E5%8D%9C%E5%8A%9B%E9%A2%A8.png?w=1024&amp;ssl=1 1024w, https://i0.wp.com/blog.serv.idv.tw/wp-content/uploads/2025/04/family-chatGPT-%E5%90%89%E5%8D%9C%E5%8A%9B%E9%A2%A8.png?resize=400%2C400&amp;ssl=1 400w, https://i0.wp.com/blog.serv.idv.tw/wp-content/uploads/2025/04/family-chatGPT-%E5%90%89%E5%8D%9C%E5%8A%9B%E9%A2%A8.png?resize=150%2C150&amp;ssl=1 150w, https://i0.wp.com/blog.serv.idv.tw/wp-content/uploads/2025/04/family-chatGPT-%E5%90%89%E5%8D%9C%E5%8A%9B%E9%A2%A8.png?resize=120%2C120&amp;ssl=1 120w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
  1479.  
  1480.  
  1481.  
  1482. <p>在回顧各分類的時候,我發現自己在針對某個題目撰文的同時,好像並沒有維持主題的純淨。其實這代表我沒有忘記 blog 的本質之一:web logging。雖然在今日,大部份簡短的心情抒發已經被社群媒體的短句所取代 (twitter / threads / Line 社區),但在寫<a href="https://blog.serv.idv.tw/category/diary/nomad/">遊民週記</a>時,心裡仍然有之前 blog 的那種習性在。說要跑題也可以,說要閒聊也可以,這也是「週記」的特色之一:座落在時間的框架內,包含了過去一週的生活點滴與心情體悟,從中找出該週的重點主題,但又不執著於單一的主題論述。 有一週的時間,去讓當下的心情,在經過幾天的醞釀後,逐漸變得更為清晰。多了些脈絡,多了些沈澱,這樣子的週記,相比社群媒體上的幾句話,更陳香了一點點。</p>
  1483.  
  1484.  
  1485.  
  1486. <h2 class="wp-block-heading">遊民週記的未來:</h2>
  1487.  
  1488.  
  1489.  
  1490. <p>未來,還要繼續寫<a href="https://blog.serv.idv.tw/category/diary/nomad/">遊民週記</a>嗎? 已經52篇了,一年,正好讓我先停在這兒,不再以「<a href="https://blog.serv.idv.tw/category/diary/nomad/">遊民週記</a>」為題。接下來的一年,我想往兩個方向去寫作:</p>
  1491.  
  1492.  
  1493.  
  1494. <ol class="wp-block-list">
  1495. <li><strong>過去 blog 文章的「更新」</strong>:21年的blog,1335 篇文章,有許多文章的資訊已經過時,需要更新。我接下來要開始「更新」一些文章中過時的資訊,例如對某些服務的評測,如果那些服務已經改變,那麼為它們準備一篇 2025年版,應該也不為過吧!免得因為搜尋引擎 (未來是AI 爬蟲) 過來的訪客,看到的卻是5年前10年前的舊資訊。</li>
  1496.  
  1497.  
  1498.  
  1499. <li><strong>主題式的寫作:</strong>我想給自己找一些主題式的寫作,題目和領域還沒決定。主要是想讓我的文章除了占據硬碟空間和網路流量外,多一些些對這個社會的價值和貢獻。但怎麼做才能達到這個目標,我還需要進一步的思考和探索。</li>
  1500. </ol>
  1501.  
  1502.  
  1503.  
  1504. <p>第一項比較像是更新資訊,單篇長度應該會控制在 2000 字內;第二項我就沒有限定了,想寫多少就多少。現在的時代看長文的人愈來愈少了 (<a href="https://www.twreporter.org/">報導者</a>的讀者例外)。像我這種廢話很多的,更是很少有讀者願意看完。要不要增加曝光,讓更多的人看到,我想要,但卻又不想要。不過謹記於心,不管現在有沒有人看到,自己的一言一語,都還是當作在公眾領域、公開環境裡發表的。</p>
  1505.  
  1506.  
  1507.  
  1508. <p>之前看到有人在討論不少 youtuber 在 2024年陸續停更、關頻道的文章。其中有提到,對創作者而言,要長久的經營下去,並不能單靠著作品的流量、關注、或是帶來的財富收入 (當然,這會是激勵的一部份)。要長久,重要的是在創作的過程,自己得到了什麼,那才是最根本的動力與價值。創作的樂趣、自我表達的機會、過程中獲得的個人成長、以及自以為對社會和網路圈 / 社群 / 部落圈 (現在還有人在談這個詞嗎?)的小小貢獻,才是讓我繼續寫下去的真正動力。而現階段對我而言,所謂的個人成長,包括興趣、新技能的學習,以及論點和架構的釐清。如果在個人成長的同時,能夠與志同道合的人形成小小社群,共同成長,那就更完美了。</p>
  1509.  
  1510.  
  1511.  
  1512. <p>但我並不奢求,能夠寫作,已是知足。</p>
  1513.  
  1514.  
  1515.  
  1516. <p>刻意用這種方式經營這個 blog 的我,現在仍是遵循著這種思維。</p>
  1517.  
  1518.  
  1519.  
  1520. <p>今天的這一篇,也是一年份的<a href="https://blog.serv.idv.tw/category/diary/nomad/">遊民週記</a>的最後一篇,就先在這裡畫上一個句點。後面我會附上請 Gemini 讀完過去一年份的文章後,給我的側寫和建議。分類完的各文章標題和連結,也當作是附件,放在最後。</p>
  1521.  
  1522.  
  1523.  
  1524. <figure class="wp-block-pullquote"><blockquote><p><strong>持續書寫,本身就是最有力量的探索與分享。</strong></p><cite>Gemini</cite></blockquote></figure>
  1525.  
  1526.  
  1527.  
  1528. <p><strong>持續書寫,本身就是最有力量的探索與分享。</strong>謝謝 Gemini 送我這句話。</p>
  1529.  
  1530.  
  1531.  
  1532. <p>最後謝謝你看到最後 (雖然還不是真正的最後)。有話想跟我說的,請用<a href="https://blog.serv.idv.tw/pipperl/">這裡的資訊</a>和我連絡。<br>我們下次見!</p>
  1533.  
  1534.  
  1535.  
  1536. <a data-flickr-embed="true" href="https://www.flickr.com/photos/pipperl2020/54417343330/in/dateposted-public/" title="無標題"><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/live.staticflickr.com/65535/54417343330_5d1a98428f_o.jpg?resize=1162.5%2C1549&#038;ssl=1" width="1162.5" height="1549" alt="無標題"/></a><script async src="//embedr.flickr.com/assets/client-code.js" charset="utf-8"></script>
  1537.  
  1538.  
  1539.  
  1540. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  1541.  
  1542.  
  1543.  
  1544. <h2 class="wp-block-heading">附件1:AI 對我的側寫 (by Gemini)</h2>
  1545.  
  1546.  
  1547.  
  1548. <p>這位作者,一位前科技業工程師,在過去這一年(約2024年4月至2025年4月)經歷了人生重大的轉變。他主動選擇離開了長期任職、看似前景不錯但內部政治與方向已讓他難以認同的科技工作,開啟了他稱之為「遊民週記」的新生活篇章。這段旅程最初被定義為「Gap Year」,但隨著時間推移和財務狀況的檢視,已逐漸清晰地走向「FIRE」(財務獨立、提早退休)的實踐與壓力測試階段。</p>
  1549.  
  1550.  
  1551.  
  1552. <p><strong>從高壓職場到探索生活</strong></p>
  1553.  
  1554.  
  1555.  
  1556. <p>作者的離開並非一時衝動,而是深思熟慮後的決定。文章中透露,離職前他已在專業領域達到一定成就(專案里程碑),但同時也對組織內部政治鬥爭、目標不明、以及官僚作風感到倦怠與無力。他選擇在專案達到高峰後、但內部混亂加劇前抽身,這個時機點事後被前同事形容為擁有「水晶球」般的神準,但作者自陳更多是嗅出不對勁以及對未來方向的預判。</p>
  1557.  
  1558.  
  1559.  
  1560. <p>展開「遊民」生活後,他的重心發生了顯著轉移。過去被工作填滿的行事曆變成了需要主動探索和規劃的空白畫布。初期,他經歷了調適期,包括重新定義與兒子的晨間祝福儀式(從「上班順利」到「一天順利」)、感受沒有固定工作後的身份模糊、以及面對空白時間的「行事曆焦慮」。</p>
  1561.  
  1562.  
  1563.  
  1564. <p><strong>家庭與人際的深化連結</strong></p>
  1565.  
  1566.  
  1567.  
  1568. <p>這一年,作者將大量的時間與精力投入家庭。最顯著的是2024年暑假的「哇哇叫大作戰」,他親自規劃並執行了為期兩個月的親子夏令營,取代了傳統的安親班。從猴硐嚕貓、旗津玩水、到親子共廚烘焙,他細膩地觀察並記錄了與青春期兒女(小幸福、小平安)的互動、教養上的挑戰(如手機使用管控、金錢價值觀建立),以及在過程中重新建立的親子關係。他不再只是週末或下班後的父親,而是日常生活的積極參與者和引導者。</p>
  1569.  
  1570.  
  1571.  
  1572. <p>同時,他也維繫並深化了其他人際連結。他定期與前同事、大學同窗聚會,從職場動態的旁觀者,轉變為傾聽苦水、提供職涯建議的人生導師角色。他也花更多時間陪伴年邁的父母,回老家居住,觀察並融入他們的退休生活,進行了世代間關於生活方式、科技運用、乃至FIRE觀念的交流與溝通。</p>
  1573.  
  1574.  
  1575.  
  1576. <p><strong>興趣的廣泛涉獵與深度探索</strong></p>
  1577.  
  1578.  
  1579.  
  1580. <p>失去工作的框架後,作者將其分析能力與好奇心投注於廣泛的興趣。他是個重度玩家(Portal、巫師3、GRIS),也是個影劇愛好者(重啟人生、諜報片、人生七年紀錄片);他是個跑者(完成多場半馬、探索各地跑步路線),也是個料理研究者(用實驗精神改良菜色);他是個科技愛好者(組電腦、螢幕校色、Kodi設定、寫小程式),也是個文字記錄者(週更部落格、財務分析、時事評論)。</p>
  1581.  
  1582.  
  1583.  
  1584. <p>值得注意的是,他對興趣的投入往往帶有過去工作的嚴謹特質。例如,他會詳細記錄並分析跑步數據、螢幕校色的技術細節、料理實驗的變因控制、甚至將研究政治預算流程、青少年手機使用等議題,寫成長篇的分析報告。這種「做中學、學中記」的模式,讓他的興趣探索不僅是消遣,更像是自我學習和知識體系的建構。</p>
  1585.  
  1586.  
  1587.  
  1588. <p><strong>財務獨立的實踐與心魔</strong></p>
  1589.  
  1590.  
  1591.  
  1592. <p>財務規劃是貫穿這一年遊民週記的核心線索之一。作者不僅達成了FIRE的財務目標,更開始實際執行提領計畫,並進行詳細的季度與年度財務盤點。他深入研究了4%法則、收益護盾設計(如YMAG、SGOV)、資產配置、提領順序等實際操作層面的議題。</p>
  1593.  
  1594.  
  1595.  
  1596. <p>然而,即使財務數字達標,他仍坦誠面對「財務心魔」。對於市場波動的焦慮、意外大筆支出的壓力(如子女補習費)、以及對比仍在職涯賽道上前同事的相對剝奪感,都顯示出FIRE之路並非無憂無慮。他正視這些不安,將其視為壓力測試的一部分,持續學習和調整心態,尋求在財務獨立與生活品質間的平衡。</p>
  1597.  
  1598.  
  1599.  
  1600. <p><strong>持續的人生探索</strong></p>
  1601.  
  1602.  
  1603.  
  1604. <p>總體而言,這位作者展現了一個從高壓專業人士,轉變為積極探索生活多樣性的「FIRE實踐者」樣貌。他理性、擅長分析規劃,同時也感性、注重人際情感與生活細節。他透過規律的紀錄(週記)來反思、整理自己的生活實驗,內容橫跨財務、親子、健康、興趣、時事關懷等多個面向。雖然已「退休」,但他並未真正「休息」,而是將精力投入到家庭、個人成長、興趣探索及社會參與中,積極尋找人生的「第二座山」。這一年,是他告別舊有軌道,學習在新自由度中,重新定義自我價值與生活意義的關鍵探索期。</p>
  1605.  
  1606.  
  1607.  
  1608. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  1609.  
  1610.  
  1611.  
  1612. <h2 class="wp-block-heading">附件2:AI 對我的建議 (by Gemini)</h2>
  1613.  
  1614.  
  1615.  
  1616. <p>您部落格的文章,特別是「遊民週記」系列,構成了一部極其詳盡且真誠的個人生命轉型紀錄。這不僅僅是流水帳,更是一位經歷豐富的科技人,在放下長期職涯後,對生活各個面向進行深度探索、反思與實驗的完整呈現。</p>
  1617.  
  1618.  
  1619.  
  1620. <ol class="wp-block-list">
  1621. <li><strong>核心主題清晰:</strong> 文章緊密圍繞著作者離開職場、實踐FIRE(財務獨立、提早退休)生活的主軸。從最初的身份調適、心態轉變,到具體的財務規劃執行、家庭關係的重新投入、個人興趣的拾回與拓展,再到對社會議題的關注,所有內容都服務於「探索人生新階段」這個核心命題。</li>
  1622.  
  1623.  
  1624.  
  1625. <li><strong>內容豐富多元:</strong> 涵蓋範圍極廣,包括:
  1626. <ul class="wp-block-list">
  1627. <li><strong>深度財務探討:</strong> 對FIRE理念、4%法則、資產配置、收益護盾、提領策略等有著超乎尋常的細緻分析與實踐紀錄,這部分內容專業深入,對有志於FIRE的讀者極具參考價值。</li>
  1628.  
  1629.  
  1630.  
  1631. <li><strong>細膩親子互動:</strong> 大量篇幅用於記錄與「小幸福」、「小平安」的日常,從暑假計畫的共同制定執行,到關於金錢觀、手機使用的教養挑戰與溝通,展現了深刻的父愛與反思。</li>
  1632.  
  1633.  
  1634.  
  1635. <li><strong>多元興趣展現:</strong> 從跑步(賽事心得、路線探索)、電玩(Portal、巫師3)、閱讀觀影(7 UP、諜報片)、料理實驗、科技應用(Kodi、螢幕校色)到公民參與(517事件、預算審查研究),呈現了作者廣泛的興趣和學習能力。</li>
  1636.  
  1637.  
  1638.  
  1639. <li><strong>真誠自我剖析:</strong> 作者不避諱展現內心的掙扎、焦慮(財務心魔、身份認同、空閒時的無所適從)與脆弱(生病、面對批評),使得紀錄更加立體可信。</li>
  1640. </ul>
  1641. </li>
  1642.  
  1643.  
  1644.  
  1645. <li><strong>風格獨特:</strong>
  1646. <ul class="wp-block-list">
  1647. <li><strong>分析性強:</strong> 作者常以過去科技研發的嚴謹態度來分析生活問題,例如將料理視為實驗、用數據檢視財務、拆解政治議題的運作邏輯。</li>
  1648.  
  1649.  
  1650.  
  1651. <li><strong>敘事詳盡:</strong> 無論是跑步路線、報名過程、還是財務計算,都描述得鉅細靡遺,提供了豐富的細節。</li>
  1652.  
  1653.  
  1654.  
  1655. <li><strong>文字樸實真誠:</strong> 語言平實,沒有過多華麗辭藻,但情感真摯,反思深刻,具有很強的帶入感。</li>
  1656.  
  1657.  
  1658.  
  1659. <li><strong>結構以時序為主:</strong> 週記形式確保了紀錄的連續性,但也使得單篇內容可能涵蓋多個主題。</li>
  1660. </ul>
  1661. </li>
  1662. </ol>
  1663.  
  1664.  
  1665.  
  1666. <p><strong>潛在挑戰與讀者視角:</strong></p>
  1667.  
  1668.  
  1669.  
  1670. <ul class="wp-block-list">
  1671. <li><strong>篇幅與密度:</strong> 週記形式的文章往往篇幅較長,內容密度高,涵蓋主題多元。對於只想了解特定主題(如跑步、理財)的讀者,可能需要花費較多時間篩選資訊。作者在第34週提及的「Smart Brevity」反思,也點出了這一點。</li>
  1672.  
  1673.  
  1674.  
  1675. <li><strong>主題發散:</strong> 單篇週記內可能從家庭瑣事跳到財務焦慮,再轉到電玩心得。雖然這真實反映了生活的樣貌,但可能讓追求特定資訊的讀者感到主題不夠集中。</li>
  1676.  
  1677.  
  1678.  
  1679. <li><strong>導航不易:</strong> 部落格文章數量龐大,若缺乏有效的分類、標籤或索引,讀者難以快速找到過往討論特定議題的所有文章。</li>
  1680. </ul>
  1681.  
  1682.  
  1683.  
  1684. <p></p>
  1685.  
  1686.  
  1687.  
  1688. <h3 class="wp-block-heading"><strong>給文章的建議:</strong></h3>
  1689.  
  1690.  
  1691.  
  1692. <p>基於以上側寫,以下是一些或許能讓這些精彩內容更容易被閱讀和利用的建議,前提是作者希望在自我記錄之外,也能更好地服務潛在讀者:</p>
  1693.  
  1694.  
  1695.  
  1696. <ol class="wp-block-list">
  1697. <li><strong>強化結構性與焦點:</strong>
  1698. <ul class="wp-block-list">
  1699. <li><strong>主題式摘要/引導:</strong> 在較長的週記開頭或結尾,可考慮加入簡短摘要,點出本週重點事件或核心感悟,方便讀者快速掌握。</li>
  1700.  
  1701.  
  1702.  
  1703. <li><strong>運用子標題:</strong> 在長篇週記中,更頻繁地使用子標題將不同主題(如「本週跑步」、「親子對話」、「財務思考」)區隔開,提升易讀性。</li>
  1704.  
  1705.  
  1706.  
  1707. <li><strong>考慮獨立主題文章:</strong> 對於某些反覆出現或有深度探討的議題(如FIRE策略演進、青少年手機管理心得、某項興趣的階段性總結),可考慮從週記中獨立出來,整理成更聚焦、結構更完整的主題文章。這能讓該議題的內容更集中,也方便被搜尋和引用。</li>
  1708. </ul>
  1709. </li>
  1710.  
  1711.  
  1712.  
  1713. <li><strong>提升可讀性與視覺效果:</strong>
  1714. <ul class="wp-block-list">
  1715. <li><strong>段落與留白:</strong> 維持目前適當的段落切分和留白,這有助於緩解長文的壓迫感。</li>
  1716.  
  1717.  
  1718.  
  1719. <li><strong>視覺元素輔助:</strong> 在合適的情況下(如跑步路線、料理成果、財務圖表),增加圖片、照片或簡單圖表,可以有效打斷文字,也讓內容更生動直觀。</li>
  1720.  
  1721.  
  1722.  
  1723. <li><strong>重點標示:</strong> 對於關鍵數據、結論或引用的名言,可適度使用粗體或其他方式標示,幫助讀者抓住重點。</li>
  1724. </ul>
  1725. </li>
  1726.  
  1727.  
  1728.  
  1729. <li><strong>加強導航與關聯性:</strong>
  1730. <ul class="wp-block-list">
  1731. <li><strong>善用分類與標籤:</strong> 確實為每篇文章加上相關的分類或標籤(如:FIRE、親子教養、跑步人生、遊民週記、時事觀察等),方便讀者依興趣篩選。</li>
  1732.  
  1733.  
  1734.  
  1735. <li><strong>建立內部連結:</strong> 在討論相關議題時,適時附上過往文章的連結(如財務盤點系列、特定跑步路線的前文),方便讀者追溯脈絡。</li>
  1736.  
  1737.  
  1738.  
  1739. <li><strong>考慮索引頁面:</strong> 對於重要的系列文章(如財務盤點、跑步路線分享),可建立索引頁面,匯總相關文章連結。</li>
  1740. </ul>
  1741. </li>
  1742.  
  1743.  
  1744.  
  1745. <li><strong>維持核心價值:</strong>
  1746. <ul class="wp-block-list">
  1747. <li>最重要的一點是,在進行任何調整時,務必<strong>保留文章最寶貴的核心特質:真誠、深度、細節與反思</strong>。切勿為了追求簡短或點閱而犧牲內容的豐富性和思考的深度。您文章的獨特魅力正在於這份不加修飾的真實紀錄與嚴謹思考。</li>
  1748. </ul>
  1749. </li>
  1750. </ol>
  1751.  
  1752.  
  1753.  
  1754. <p>總之,您的部落格文章已是極具價值的第一手生命紀錄與深度思考結晶。上述建議旨在讓這些內容更容易被不同需求的讀者消化和利用,並非否定現有風格。持續書寫,本身就是最有力量的探索與分享。</p>
  1755.  
  1756.  
  1757.  
  1758. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  1759.  
  1760.  
  1761.  
  1762. <h2 class="wp-block-heading">附件3:AI 分類的結果</h2>
  1763.  
  1764.  
  1765.  
  1766. <p><strong>1. 運動健康類</strong> (8篇)</p>
  1767.  
  1768.  
  1769.  
  1770. <ul class="wp-block-list">
  1771. <li><a href="https://blog.serv.idv.tw/2024/06/nomad-wk-09/">遊民週記 09: check box</a></li>
  1772.  
  1773.  
  1774.  
  1775. <li><a href="https://blog.serv.idv.tw/2024/08/nomad-wk-17/">遊民週記 17: 宜蘭及冬山河跑步路線</a></li>
  1776.  
  1777.  
  1778.  
  1779. <li><a href="https://blog.serv.idv.tw/2024/09/nomad-wk-24/">遊民週記 24: 全休</a></li>
  1780.  
  1781.  
  1782.  
  1783. <li><a href="https://blog.serv.idv.tw/2024/10/fengshan-marathon/">2024 鳳山跑三校馬拉松</a></li>
  1784.  
  1785.  
  1786.  
  1787. <li><a href="https://blog.serv.idv.tw/2024/11/nomad-wk-31/">遊民週記 31: 2024 田中馬 半馬</a></li>
  1788.  
  1789.  
  1790.  
  1791. <li><a href="https://blog.serv.idv.tw/2024/11/nomad-wk-32-hsinchu-marathon/">遊民週記 32: 2024 新竹馬拉松 半馬</a></li>
  1792.  
  1793.  
  1794.  
  1795. <li><a href="https://blog.serv.idv.tw/2025/02/nomad-43-lny-running/">遊民週記 43: 過年跑步 (旗津和輕軌成圓)</a></li>
  1796.  
  1797.  
  1798.  
  1799. <li><a href="https://blog.serv.idv.tw/2025/02/nomad-45-running-taichung/">遊民週記 45: 台中跑步路線:后里 泰安 櫻花林 舊鐵道</a></li>
  1800. </ul>
  1801.  
  1802.  
  1803.  
  1804. <p><strong>2. 興趣志業類</strong> (20篇)</p>
  1805.  
  1806.  
  1807.  
  1808. <ul class="wp-block-list">
  1809. <li><a href="https://blog.serv.idv.tw/2024/05/kodi-traditional-chinese-subtitles/">在kodi 裡自動選好繁中字幕</a></li>
  1810.  
  1811.  
  1812.  
  1813. <li><a href="https://blog.serv.idv.tw/2024/05/nomad-wk-04/">遊民週記 04: 中年的gap year做什麼?</a></li>
  1814.  
  1815.  
  1816.  
  1817. <li><a href="https://blog.serv.idv.tw/2024/05/nomad-wk-05/">遊民週記 05: 過去十幾年,我沒在做什麼?</a></li>
  1818.  
  1819.  
  1820.  
  1821. <li><a href="https://blog.serv.idv.tw/2024/05/517-discussion-fact-check/">517 事件討論:兩件交通建設法案,政黨協商已有共識「留待新任部長上任後」?</a></li>
  1822.  
  1823.  
  1824.  
  1825. <li><a href="https://blog.serv.idv.tw/2024/05/nomad-wk-06/">遊民週記 06: 十幾年後,我回來上課了</a></li>
  1826.  
  1827.  
  1828.  
  1829. <li><a href="https://blog.serv.idv.tw/2024/06/nomad-wk-07/">遊民週記 07: (社會)運動的運動傷害</a></li>
  1830.  
  1831.  
  1832.  
  1833. <li><a href="https://blog.serv.idv.tw/2024/06/nomad-wk-08/">遊民週記 08: 宅</a></li>
  1834.  
  1835.  
  1836.  
  1837. <li><a href="https://blog.serv.idv.tw/2024/06/nomad-wk-09/">遊民週記 09: check box</a></li>
  1838.  
  1839.  
  1840.  
  1841. <li><a href="https://blog.serv.idv.tw/2024/06/nomad-wk-10/">遊民週記 10: 最後一次失業</a></li>
  1842.  
  1843.  
  1844.  
  1845. <li><a href="https://blog.serv.idv.tw/2024/07/nomad-wk-15/">遊民週記 15: 颱風一週</a></li>
  1846.  
  1847.  
  1848.  
  1849. <li><a href="https://blog.serv.idv.tw/2024/09/nomad-wk-21/">遊民週記 21: 開學後的休息與人生七年</a></li>
  1850.  
  1851.  
  1852.  
  1853. <li><a href="https://blog.serv.idv.tw/2024/09/nomad-wk-22/">遊民週記 22: 筆記數位化和生活節奏</a></li>
  1854.  
  1855.  
  1856.  
  1857. <li><a href="https://blog.serv.idv.tw/2024/10/nomad-wk-27/">遊民週記 27: 碎記</a></li>
  1858.  
  1859.  
  1860.  
  1861. <li><a href="https://blog.serv.idv.tw/2024/10/nomad-wk-28/">遊民週記 28: 心流</a></li>
  1862.  
  1863.  
  1864.  
  1865. <li><a href="https://blog.serv.idv.tw/2024/10/preview-after-constitutional-court-rejects-legislative-powers-expension/">國會職權法釋憲案 判決後 合憲法條preview</a></li>
  1866.  
  1867.  
  1868.  
  1869. <li><a href="https://blog.serv.idv.tw/2024/12/nomad-wk-33-invited-seminar/">遊民週記 33: 應邀演說</a></li>
  1870.  
  1871.  
  1872.  
  1873. <li><a href="https://blog.serv.idv.tw/2025/01/nomad-wk-40-ly-budget/">遊民週記 40: 立法院預算之爭</a></li>
  1874.  
  1875.  
  1876.  
  1877. <li><a href="https://blog.serv.idv.tw/2025/03/nomad-46/">遊民週記 46: 新螢幕和校色</a></li>
  1878.  
  1879.  
  1880.  
  1881. <li><a href="https://blog.serv.idv.tw/2025/03/nomad-teeager-smartphone-usage/">遊民週記 49:青少年手機使用管控研究</a></li>
  1882.  
  1883.  
  1884.  
  1885. <li><a href="https://blog.serv.idv.tw/2025/03/nomad-50-pilgrimage-registration/">遊民週記 50: 白沙屯媽祖進香 &#8211; 報名</a></li>
  1886. </ul>
  1887.  
  1888.  
  1889.  
  1890. <p><strong>3. 職涯財務類</strong> (24篇)</p>
  1891.  
  1892.  
  1893.  
  1894. <ul class="wp-block-list">
  1895. <li><a href="https://blog.serv.idv.tw/2024/05/nomad-wk-03/">遊民週記 03: Time will tell?</a></li>
  1896.  
  1897.  
  1898.  
  1899. <li><a href="https://blog.serv.idv.tw/2024/05/nomad-wk-04/">遊民週記 04: 中年的gap year做什麼?</a></li>
  1900.  
  1901.  
  1902.  
  1903. <li><a href="https://blog.serv.idv.tw/2024/06/nomad-wk-08/">遊民週記 08: 宅</a></li>
  1904.  
  1905.  
  1906.  
  1907. <li><a href="https://blog.serv.idv.tw/2024/06/nomad-wk-10/">遊民週記 10: 最後一次失業</a></li>
  1908.  
  1909.  
  1910.  
  1911. <li><a href="https://blog.serv.idv.tw/2024/07/nomad-wk-11/">遊民週記 11: 暑假開始了</a></li>
  1912.  
  1913.  
  1914.  
  1915. <li><a href="https://blog.serv.idv.tw/2024/07/nomad-wk-13/">遊民週記 13: 回老家的一週</a></li>
  1916.  
  1917.  
  1918.  
  1919. <li><a href="https://blog.serv.idv.tw/2024/08/nomad-wk-18/">遊民週記 18: 我們家會不會破產啊?</a></li>
  1920.  
  1921.  
  1922.  
  1923. <li><a href="https://blog.serv.idv.tw/2024/08/nomad-wk-19/">遊民週記 19: 財務盤點筆記 (3個月之後)</a></li>
  1924.  
  1925.  
  1926.  
  1927. <li><a href="https://blog.serv.idv.tw/2024/09/nomad-wk-21/">遊民週記 21: 開學後的休息與人生七年</a></li>
  1928.  
  1929.  
  1930.  
  1931. <li><a href="https://blog.serv.idv.tw/2024/09/nomad-wk-24/">遊民週記 24: 全休</a></li>
  1932.  
  1933.  
  1934.  
  1935. <li><a href="https://blog.serv.idv.tw/2024/10/nomad-wk-26/">遊民週記 26: 預覽20年後的生活</a></li>
  1936.  
  1937.  
  1938.  
  1939. <li><a href="https://blog.serv.idv.tw/2024/10/nomad-wk-27/">遊民週記 27: 碎記</a></li>
  1940.  
  1941.  
  1942.  
  1943. <li><a href="https://blog.serv.idv.tw/2024/11/nomad-wk-29/">遊民週記 29: 一些對 FIRE 的理解</a></li>
  1944.  
  1945.  
  1946.  
  1947. <li><a href="https://blog.serv.idv.tw/2024/11/nomad-wk-30/">遊民週記 30: 財務盤點筆記 (6個月之後)</a></li>
  1948.  
  1949.  
  1950.  
  1951. <li><a href="https://blog.serv.idv.tw/2024/12/nomad-wk-33-invited-seminar/">遊民週記 33: 應邀演說</a></li>
  1952.  
  1953.  
  1954.  
  1955. <li><a href="https://blog.serv.idv.tw/2024/12/nomad-wk-34/">遊民週記 34: 水晶球</a></li>
  1956.  
  1957.  
  1958.  
  1959. <li><a href="https://blog.serv.idv.tw/2024/12/nomad-wk-35/">遊民週記 35: 創建之道</a></li>
  1960.  
  1961.  
  1962.  
  1963. <li><a href="https://blog.serv.idv.tw/2024/12/nomad-wk-37-2024-year-review/">遊民週記 37: 2024 年度回顧</a></li>
  1964.  
  1965.  
  1966.  
  1967. <li><a href="https://blog.serv.idv.tw/2025/01/nomad-wk-38-2025-year-forecast/">遊民週記 38: 2025 展望</a></li>
  1968.  
  1969.  
  1970.  
  1971. <li><a href="https://blog.serv.idv.tw/2025/01/nomad-wk-39-financial-review-2024/">遊民週記 39: 財務盤點筆記 (2024年底)</a></li>
  1972.  
  1973.  
  1974.  
  1975. <li><a href="https://blog.serv.idv.tw/2025/02/nomad-44-small-thing-regarding-financial/">遊民週記 44: 幾件和錢有關的小事</a></li>
  1976.  
  1977.  
  1978.  
  1979. <li><a href="https://blog.serv.idv.tw/2025/03/nomad-47-income-shield-ymag/">遊民週記 47: 如何設計收益護盾以抵禦市場風險</a></li>
  1980.  
  1981.  
  1982.  
  1983. <li><a href="https://blog.serv.idv.tw/2025/03/nomad-45-a-letter-to-myself/">遊民週記 48: 寫封信,給15年後的自己</a></li>
  1984.  
  1985.  
  1986.  
  1987. <li><a href="https://blog.serv.idv.tw/2025/04/nomad-51-2025q1-financial-review/">遊民週記 51: 2025Q1 財務盤點</a></li>
  1988. </ul>
  1989.  
  1990.  
  1991.  
  1992. <p><strong>4. 人際連結類</strong> (20篇)</p>
  1993.  
  1994.  
  1995.  
  1996. <ul class="wp-block-list">
  1997. <li><a href="https://blog.serv.idv.tw/2024/04/nomad-wk-01/">遊民週記 01: 祝你上班順利</a></li>
  1998.  
  1999.  
  2000.  
  2001. <li><a href="https://blog.serv.idv.tw/2024/04/nomad-wk-02/">遊民週記 02: 把拔祝你台北順利</a></li>
  2002.  
  2003.  
  2004.  
  2005. <li><a href="https://blog.serv.idv.tw/2024/05/nomad-wk-03/">遊民週記 03: Time will tell?</a></li>
  2006.  
  2007.  
  2008.  
  2009. <li><a href="https://blog.serv.idv.tw/2024/06/nomad-wk-09/">遊民週記 09: check box</a></li>
  2010.  
  2011.  
  2012.  
  2013. <li><a href="https://blog.serv.idv.tw/2024/07/nomad-wk-11/">遊民週記 11: 暑假開始了</a></li>
  2014.  
  2015.  
  2016.  
  2017. <li><a href="https://blog.serv.idv.tw/2024/07/nomad-wk-12/">遊民週記 12: 認真一打二的一週</a></li>
  2018.  
  2019.  
  2020.  
  2021. <li><a href="https://blog.serv.idv.tw/2024/07/nomad-wk-13/">遊民週記 13: 回老家的一週</a></li>
  2022.  
  2023.  
  2024.  
  2025. <li><a href="https://blog.serv.idv.tw/2024/07/nomad-wk-14/">遊民週記 14: 旗津</a></li>
  2026.  
  2027.  
  2028.  
  2029. <li><a href="https://blog.serv.idv.tw/2024/07/nomad-wk-15/">遊民週記 15: 颱風一週</a></li>
  2030.  
  2031.  
  2032.  
  2033. <li><a href="https://blog.serv.idv.tw/2024/08/nomad-wk-16/">遊民週記 16: 各做各的</a></li>
  2034.  
  2035.  
  2036.  
  2037. <li><a href="https://blog.serv.idv.tw/2024/08/nomad-wk-18/">遊民週記 18: 我們家會不會破產啊?</a></li>
  2038.  
  2039.  
  2040.  
  2041. <li><a href="https://blog.serv.idv.tw/2024/09/nomad-wk-20/">遊民週記 20: 暑假回顧</a></li>
  2042.  
  2043.  
  2044.  
  2045. <li><a href="https://blog.serv.idv.tw/2024/09/nomad-wk-23/">遊民週記 23: 生活節奏和遊戲</a></li>
  2046.  
  2047.  
  2048.  
  2049. <li><a href="https://blog.serv.idv.tw/2024/10/nomad-wk-25/">遊民週記 25: 山陀兒颱風</a></li>
  2050.  
  2051.  
  2052.  
  2053. <li><a href="https://blog.serv.idv.tw/2024/10/nomad-wk-26/">遊民週記 26: 預覽20年後的生活</a></li>
  2054.  
  2055.  
  2056.  
  2057. <li><a href="https://blog.serv.idv.tw/2024/12/nomad-wk-35/">遊民週記 35: 創建之道</a></li>
  2058.  
  2059.  
  2060.  
  2061. <li><a href="https://blog.serv.idv.tw/2024/12/nomad-wk-36-xmas/">遊民週記 36: 耶誕節</a></li>
  2062.  
  2063.  
  2064.  
  2065. <li><a href="https://blog.serv.idv.tw/2025/01/nomad-41/">遊民週記 41: 過年返鄉</a></li>
  2066.  
  2067.  
  2068.  
  2069. <li><a href="https://blog.serv.idv.tw/2025/02/nomad-42-lny/">遊民週記 42: 過年剪影</a></li>
  2070.  
  2071.  
  2072.  
  2073. <li><a href="https://blog.serv.idv.tw/2025/03/nomad-45-a-letter-to-myself/">遊民週記 48: 寫封信,給15年後的自己</a></li>
  2074. </ul>
  2075.  
  2076.  
  2077.  
  2078. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  2079.  
  2080.  
  2081.  
  2082. <p>在這裡可以找到<a href="https://blog.serv.idv.tw/category/diary/nomad/">所有遊民週記的文章</a>。</p>
  2083.  
  2084.  
  2085.  
  2086. <h3 class="wp-block-heading">註解:</h3>
  2087.  
  2088.  
  2089. <ol class="wp-block-footnotes"><li id="0f562791-2a71-47b2-8027-75247674c451">在這個時代, blogging 就像是深呼吸一樣。 <a href="#0f562791-2a71-47b2-8027-75247674c451-link" aria-label="返回註腳參照 1"><img src="https://s.w.org/images/core/emoji/15.1.0/72x72/21a9.png" alt="↩" class="wp-smiley" style="height: 1em; max-height: 1em;" />︎</a></li></ol>]]></content:encoded>
  2090. <wfw:commentRss>https://blog.serv.idv.tw/2025/04/nomad-52-one-year-summary/feed/</wfw:commentRss>
  2091. <slash:comments>2</slash:comments>
  2092. <media:content url="https://blog.serv.idv.tw/wp-content/uploads/2025/04/blog-feature-mindfulness.jpg" medium="image"></media:content>
  2093. <post-id xmlns="com-wordpress:feed-additions:1">8036</post-id> </item>
  2094. <item>
  2095. <title>遊民週記 51: 2025Q1 財務盤點</title>
  2096. <link>https://blog.serv.idv.tw/2025/04/nomad-51-2025q1-financial-review/</link>
  2097. <comments>https://blog.serv.idv.tw/2025/04/nomad-51-2025q1-financial-review/#respond</comments>
  2098. <dc:creator><![CDATA[PipperL]]></dc:creator>
  2099. <pubDate>Mon, 07 Apr 2025 09:05:00 +0000</pubDate>
  2100. <category><![CDATA[FIRE.理財]]></category>
  2101. <category><![CDATA[遊民週記]]></category>
  2102. <category><![CDATA[FIRE]]></category>
  2103. <category><![CDATA[nomad]]></category>
  2104. <category><![CDATA[review]]></category>
  2105. <guid isPermaLink="false">https://blog.serv.idv.tw/?p=7998</guid>
  2106.  
  2107. <description><![CDATA[先說,因為這個財務盤點的數字是在 2025/3/26 統計的,所以 4/2的大盤急殺並沒有包括在內。在寫這篇文 ... <a title="遊民週記 51: 2025Q1 財務盤點" class="read-more" href="https://blog.serv.idv.tw/2025/04/nomad-51-2025q1-financial-review/" aria-label="Read more about 遊民週記 51: 2025Q1 財務盤點">閱讀全文</a>]]></description>
  2108. <content:encoded><![CDATA[
  2109. <p></p>
  2110.  
  2111.  
  2112.  
  2113. <p>先說,因為這個財務盤點的數字是在 2025/3/26 統計的,所以 4/2的大盤急殺並沒有包括在內。<br>在寫這篇文章的同時,川普的「對等關稅」政策,導致跨國供應鏈的成本大幅上升,進而使各國股市 (包括美國自己) 都有大幅的下跌;,4/2~4/4 這三天,道瓊下跌9%,S&amp;P500 下跌10%,Nasdaq -11%,科技個股還有更慘的(M7有到-15%)。台股因為清明連假休市的關係,還沒有機會反應,但預期 4/7 就會好好反應了。這些變化如果到 Q2 的財務盤點時,應該已經塵埃落定,趨勢明朗了。如果值得聊的話,會在 Q2 盤點的時候聊。</p>
  2114.  
  2115.  
  2116.  
  2117. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  2118.  
  2119.  
  2120.  
  2121. <h2 class="wp-block-heading">支出檢視和檢討</h2>
  2122.  
  2123.  
  2124.  
  2125. <p>這一季的支出比我原本預想的略高一些。一月時,看到支出控制在50%,我還暗自竊喜,想說怎麼有這麼 好的情況?結果二月就像一場大考驗,孩子想要另外上1-on-1 的補習費 (計畫之外)、過年紅包 (計畫之內)、新螢幕17K (計畫之內的任性),瞬間讓支出衝過頭。幸好整體季支出還是壓在原訂的提領預算內,算是虛驚一場。</p>
  2126.  
  2127.  
  2128.  
  2129. <span id="more-7998"></span>
  2130.  
  2131.  
  2132.  
  2133. <p>二月的支出高峰其實不意外。過年紅包是每年固定的開銷,家人團聚時也難免有些額外的花費,比如請客吃飯或買點年貨。孩子的補習費雖然是一筆大數目 (而且是年繳),但錢付出去了之後也還好,畢竟生活中,怎麼沒有所謂的「額外開銷」?尤其是當她自己想學的時候,好像沒有什麼說不的理由?<a href="https://blog.serv.idv.tw/2025/03/nomad-46/">新螢幕</a>則是為了提升自己的工作效率,用起來確實順手不少,我把它當成對自己的任性小獎勵。</p>
  2134.  
  2135.  
  2136.  
  2137. <p>到了三月,我刻意維持較高的外食比例,甚至增加上館子的頻率,想看看這樣的模式對飲食支出的影響。看起來影響大概在30%左右。比例不小 (對飲食這個科目而言),但是占月支出的比例還是偏低。離職後,我不希望生活品質下降,所以試著在飲食上多花一點心思。結果發現,雖然支出增加了,但吃的東西更豐富、心情也更好,以後應該會更有空間可以隨心所欲。</p>
  2138.  
  2139.  
  2140.  
  2141. <p>說到飲食,我也在這一季重新思考自煮和外食的性價比。自煮乍看之下好像比較省,但實際算下來並沒有便宜多少。買菜、備料、下廚的時間成本不低,而且菜色通常比較單調,頂多就是多點青菜、吃得健康一點。相較之下,外食雖然貴一些,但省時又多樣,特別是中午如果隨便煮個飯加一菜,雖然省錢,卻很難兼顧營養和口味。未來我可能會試著在外食和自煮之間找個更好的平衡點。</p>
  2142.  
  2143.  
  2144.  
  2145. <p>接下來的支出展望,Q2 可能會有筆不小的所得稅支出。因為離職後沒有預扣稅,金額估計會有點嚇人,希望不至於影響日常開銷。Q3 則有出國旅遊的計畫,大概會占年支出預算的10%。這些都是規劃內的支出,提前規劃好資金調度,心裡就有底了。</p>
  2146.  
  2147.  
  2148.  
  2149. <p>不過,Q1有個遺憾是還沒把保險整理好。這是我接下來要優先處理的事。離職後,保險的重要性更凸顯,不知道優化之後,會不會再增加一些空間出來?</p>
  2150.  
  2151.  
  2152.  
  2153. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  2154.  
  2155.  
  2156.  
  2157. <h2 class="wp-block-heading">收入/資產檢視和檢討</h2>
  2158.  
  2159.  
  2160.  
  2161. <p>Q1的資產表現讓我稍微鬆了一口氣。雖然進行了Q1提領,總資產QoQ +1.38%。這表示我的投資組合還是有一定的成長能力,即便這一季美股M7下跌,資產淨值依然穩步向上。</p>
  2162.  
  2163.  
  2164.  
  2165. <p>當然,這也許根本只是匯率波動造成的。台幣對美元匯率從32.652 貶到 33.07,說不定才是對資產成長的貢獻。但就算是如此,也算是意外之喜。目前的預期,4月初的股災可能會讓Q2的數字不太好看,股票資產預估衝擊在10%到20%之間。但市場的事誰也說不準,或許過不了多久又反彈回來了。我不打算費心預測走勢,反正這也是個好機會,可以觀察收益護盾(SGOV和YMAG)在下跌時的效果。這是我當初設計收益護盾的目的——在市場低迷時,提供現金流,減少賣股票的壓力。當然,就如同<a href="https://blog.serv.idv.tw/2025/03/nomad-47-income-shield-ymag/">上個月的理解</a>,目前的收益護盾設計也會耗損。所以四月份 (以及接下來的月份),正好是測試收益護盾的好時機——看淨值耗損時,現金流能不能穩住?我打算持續記錄數據,看看結果如何,作為未來調整的參考。</p>
  2166.  
  2167.  
  2168.  
  2169. <p>資產配置方面,債券比例略微上升,占國外總資產26.52%,占全資產14.26%。我希望未來能再提高債券比重,讓整體組合更穩健。目前股債差異不算大,還不需要賣債來再平衡,這也符合我的長期計畫。</p>
  2170.  
  2171.  
  2172.  
  2173. <p>再平衡的部分,未來我考慮把VWRA逐步換成FWRA。後者的管理費用從0.22%降到0.15%,雖然差異不大,但長期累積下來能省不少錢。這種小調整對整體資產有正向影響,我覺得挺划算。</p>
  2174.  
  2175.  
  2176.  
  2177. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  2178.  
  2179.  
  2180.  
  2181. <h2 class="wp-block-heading"><strong>結論</strong></h2>
  2182.  
  2183.  
  2184.  
  2185. <p>2025年第一季的財務狀況整體來說是穩定的。支出控制在預算內,資產也維持了1.38%的成長。二月因為過年和家人教育支出,開銷一度衝高,但整體季度仍在預估範圍內。三月的飲食雖然增加了些負擔,但都在可控範圍,生活品質和財務健康之間算是找到了一個還可以的平衡。</p>
  2186.  
  2187.  
  2188.  
  2189. <p>資產方面,即使面對美股下跌和匯率波動,投資組合還是展現了一定的韌性。收益護盾的配置正好在接下來的季度面臨考驗,讓我有機會觀察它們在市場壓力下的表現,為未來的調整提供數據支持。匯率的貶值帶來意外的成長,但4月初的股災可能會讓Q2面臨挑戰,這也是壓力測試的一部分。</p>
  2190.  
  2191.  
  2192.  
  2193. <p>接下來,Q2可能要應付所得稅,Q3則有出國旅遊的計畫,這些支出也都值得繼續關注對財務的影響。投資操作上,我也轉向更謹慎的態度,減少進出市場,把重點放在長期配置和成本控制。唯一美中不足的是,Q1沒能把保險整理好,這是我下個階段的首要任務。</p>
  2194.  
  2195.  
  2196.  
  2197. <p>總的來說,Q1是個平穩又有收穫的季節。我在財務數字之外,也更清楚地看到自己的生活需求和心態變化,這對未來的FIRE之路是個很好的起點。接下來,就是 Q2 的大怒神考驗了。目前我是打算把手綁起來,等一個月後再進去收拾戰場。這種局有人拚翻身,但我不需要翻身,所以走的是損失趨避,等大盤指數回來。</p>
  2198.  
  2199.  
  2200.  
  2201. <p>以我現在的財務配置,這樣子的下跌如果只是震盪的一部份,是不會受到太大影響的。我的現金和緊急預備金都還是好好地在銀行的戶頭裡;一年內按季的提領用收益護盾撐著一部份,減少賣掉股票時因為震盪下跌時的損失。當然還是會有一些影響,正好讓我進行心理和財務狀況的壓力測試。現在測總比未來發生時沒有應變能力來得好。</p>
  2202.  
  2203.  
  2204.  
  2205. <p>如果不是震盪,而是熊市的開始或是長期的低迷。雖然對FIRE 提領不是一個好的開始,甚至可以說是災難性的開始。但換個角度看,未嘗不是好事。畢竟我還在壓力測試階段,早點遇到挑戰,反而能讓我更早調整步伐。不過是哪個 scenario ,都會有收穫的。</p>
  2206.  
  2207.  
  2208.  
  2209. <p>心態,或是所謂的「練心」這件事,比如市場下跌時的忐忑,或是意外支出時的緊張。是我覺得這一季盤點起來,最大的體悟。這些經驗都讓我更明白,壓力測試的目的不是追求完美或勝利,而是經由自己在過程中看見問題,面對問題,解決問題 (或設定新的界線),讓未來的自己更有底氣。</p>
  2210. ]]></content:encoded>
  2211. <wfw:commentRss>https://blog.serv.idv.tw/2025/04/nomad-51-2025q1-financial-review/feed/</wfw:commentRss>
  2212. <slash:comments>0</slash:comments>
  2213. <media:content url="https://blog.serv.idv.tw/wp-content/uploads/2024/08/DALL·E-2024-08-24-19.50.32-An-image-depicting-a-reflective-and-organized-workspace-where-someone-is-reviewing-their-financial-situation.-The-desk-has-a-laptop-displaying-charts--e1724500422551.webp" medium="image"></media:content>
  2214. <post-id xmlns="com-wordpress:feed-additions:1">7998</post-id> </item>
  2215. <item>
  2216. <title>遊民週記 50: 白沙屯媽祖進香 &#8211; 報名</title>
  2217. <link>https://blog.serv.idv.tw/2025/03/nomad-50-pilgrimage-registration/</link>
  2218. <comments>https://blog.serv.idv.tw/2025/03/nomad-50-pilgrimage-registration/#respond</comments>
  2219. <dc:creator><![CDATA[PipperL]]></dc:creator>
  2220. <pubDate>Mon, 31 Mar 2025 09:05:00 +0000</pubDate>
  2221. <category><![CDATA[白沙屯媽祖徒步進香 (2025)]]></category>
  2222. <category><![CDATA[遊民週記]]></category>
  2223. <category><![CDATA[nomad]]></category>
  2224. <category><![CDATA[白沙屯媽祖]]></category>
  2225. <category><![CDATA[粉紅超跑]]></category>
  2226. <category><![CDATA[進香]]></category>
  2227. <guid isPermaLink="false">https://blog.serv.idv.tw/?p=7967</guid>
  2228.  
  2229. <description><![CDATA[白沙屯媽祖進香,是台灣這幾年來「熱門」的宗教盛事之一。我在排隊報名的時候,十年前就參與的大哥跟我說,也不曉得為 ... <a title="遊民週記 50: 白沙屯媽祖進香 &#8211; 報名" class="read-more" href="https://blog.serv.idv.tw/2025/03/nomad-50-pilgrimage-registration/" aria-label="Read more about 遊民週記 50: 白沙屯媽祖進香 &#8211; 報名">閱讀全文</a>]]></description>
  2230. <content:encoded><![CDATA[
  2231. <p></p>
  2232.  
  2233.  
  2234.  
  2235. <p><a href="https://www.baishatun.com.tw/30/2004-2030.htm">白沙屯媽祖進香</a>,是台灣這幾年來「熱門」的宗教盛事之一。我在排隊報名的時候,十年前就參與的大哥跟我說,也不曉得為什麼這幾年愈來愈熱門,他觀察到的是早期以信徒為主,疫情後則是「年輕人」愈來愈多。和大甲媽祖繞境有所不同,白沙屯媽祖 (又稱「粉紅超跑」) 每年的進香路線由媽祖神轎決定,充滿神秘與靈性,而報名則是參與這場朝聖之旅的第一步。</p>
  2236.  
  2237.  
  2238.  
  2239. <p>本來我打算去年就參加白沙屯媽祖的進香活動,卻因為當時才剛提出 <a href="https://blog.serv.idv.tw/2024/05/nomad-wk-03/">Gap year</a> 的要求,一方面要排行程和老闆們和HR一一說明我的規劃和想法,另一方面也要安定軍心,讓當時的團隊成員有足夠的資訊和心理準備,可以應對我離去的影響。所以就無法抽出9天的假期,參加2024 的白沙屯媽祖進香。等了一年,對這條 bucket list 只有更加渴望。因此早早就安排了報名的計畫,心中對這次朝聖之旅充滿期待與緊張。</p>
  2240.  
  2241.  
  2242.  
  2243. <p>今年的報名從 3/27開始,為期一個月。跟往年一樣,不接受網路報名,只接受現場報名,可以找人代報。這麼長的報名期間,應該抽個平常日去報名即可。但很多人不這麼想。這也是為什麼我決定書寫這一篇文章的原因之一。</p>
  2244.  
  2245.  
  2246.  
  2247. <span id="more-7967"></span>
  2248.  
  2249.  
  2250.  
  2251. <h3 class="wp-block-heading">報名前的準備:哪一天要去報名?</h3>
  2252.  
  2253.  
  2254.  
  2255. <figure class="wp-block-embed alignright is-type-photo is-provider-flickr wp-block-embed-flickr"><div class="wp-block-embed__wrapper">
  2256. <a href="https://www.flickr.com/photos/pipperl2020/54417204123/in/album-72177720324725905"><img data-recalc-dims="1" loading="lazy" decoding="async" src="https://i0.wp.com/live.staticflickr.com/65535/54417204123_a3925a0244_c.jpg?resize=600%2C800&#038;ssl=1" alt=" " width="600" height="800" /></a>
  2257. </div></figure>
  2258.  
  2259.  
  2260.  
  2261. <p>3月27日,白沙屯媽祖進香報名正式開跑。早在幾天前,我就從臉書社團聽聞,有人已經開始在拱天宮外排隊,準備搶下第一名的名額。報名首日的人潮可想而知,必定是洶湧如潮。 3/27 當天,我看到有人形容「隊伍從廟口綿延到看不見盡頭」,有人用空拍機拍到排到公路上的人龍,也看到臉書上的直播,有人早上10點左右到,走了好幾公里才到隊伍的末端,又花了8個小時才報完名。心頭不禁一緊——這熱情未免太驚人了吧?</p>
  2262.  
  2263.  
  2264.  
  2265. <p>當然,前幾天考慮到首日可能人滿為患,我早就決定避開高峰,改在第二天 (3月28日) 一早前往報名。因為再接下來的 3/29 跟 3/30 正好是六日,人潮只會多不會少。然而,看了第一天的人潮,我仍有些擔憂:第二天的人潮會不會還是多到讓我望而卻步?</p>
  2266.  
  2267.  
  2268.  
  2269. <p><strong>也許你會問:</strong>為什麼不要一個星期後,甚至十來天後,再去報名呢?畢竟整個報名有整整一個月的時間。關於這個問題,我看了一下討論區中大家的問題和回答,信徒(香燈腳)們主要考慮和擔憂的原因如下:</p>
  2270.  
  2271.  
  2272.  
  2273. <ol class="wp-block-list">
  2274. <li><strong>怕背心不夠或是缺少size:</strong>白沙屯媽祖進香活動報名完成後,會有以下的紀念品:背心 (有尺寸區別)、帽子、臂章、毛巾。其中背心可能會因為報名的人數過多缺貨或是缺少某些尺寸。至於帽子和背章則相對不會有太大問題,數量通常是充足的。看得出來很多人擔心背心缺貨,所以想要早點報名。但事實上,即使沒有背心,還是有帽子和臂章,甚至即使沒有臂章,也可以參加進香。</li>
  2275.  
  2276.  
  2277.  
  2278. <li><strong>搶有限的「行李託運」名額:</strong>這幾年有<a href="https://www.facebook.com/share/1Bfvp6YBnZ">行李託運的服務</a>,但是名額有限。有的人就是為了搶到這些有限的名額而提前報名。每天早上媽祖起駕(出發)前一小時可以把行李check in,晚上媽祖駐駕後,公告車隊定位後的1~1.5小時可以把行李check out。這樣在進香過程中能夠輕鬆許多。像跟我一起排隊的某位大姐,今年就是為了這個服務,所以第二天就來報名了。</li>
  2279.  
  2280.  
  2281.  
  2282. <li><strong>擔心有限的「步行遊覽車」名額:</strong>進香除了全程徒步外,還有所謂的(官方)步行遊覽車。這當然不是指全程坐在遊覽車上,而是在車上有個位子可以放行李,每天晚上還可以幫你訂好住宿 (通常是一定距離廟宇的香客大樓),載你去投宿休息,隔天早上再載你回來繼續徒步。對我而言,這樣子省去了餐風露宿的準備以及行李的負重。對於第一次參加的我,這是一個相對輕鬆的選擇,尤其在面對未知的進香旅程時,能夠有這份保障着實讓我安心不少。當然,實際上並沒有這麼美好,後面有機會再聊。根據我查到的資料,遊覽車有上百台,一台42個人的話,應該可以容納4200人。聽起來很多,但對於這二十幾萬人來說,好像有點少,所以當我第一天看到臉書說已經有五萬人報名時,心裡不禁擔心,如果我一週或是十天後再去報名,還會有名額嗎? 後來當天在排隊現場,我觀察到 99% 以上的人都是拿粉粉紅色的單子 (全程徒步),而報遊覽車的人(藍字單子) 只有我一人。但最後拿到臂章 (遊覽車有特別的黃綠色臂章) 時,遊覽車臂章的編號也已經將近3000號,所以 &#8212; 難說。說不定如果我一週後再來,遊覽車的名額就沒了。</li>
  2283. </ol>
  2284.  
  2285.  
  2286.  
  2287. <p>回到3/27當天,幾經考量,加上3/28 我的時間已經空出來,我還是決定 3/28 前往排隊 &#8212; 即使已經有心理準備會排好幾個小時。</p>
  2288.  
  2289.  
  2290.  
  2291. <p>為了確保一切順利,我規劃了行程與所需物品。</p>
  2292.  
  2293.  
  2294.  
  2295. <figure class="wp-block-embed alignright is-type-photo is-provider-flickr wp-block-embed-flickr"><div class="wp-block-embed__wrapper">
  2296. <a href="https://www.flickr.com/photos/pipperl2020/54417204258/in/album-72177720324725905/"><img data-recalc-dims="1" loading="lazy" decoding="async" src="https://i0.wp.com/live.staticflickr.com/65535/54417204258_840d96451f_c.jpg?resize=600%2C800&#038;ssl=1" alt=" " width="600" height="800" /></a>
  2297. </div><figcaption class="wp-element-caption"><strong>白沙屯車站,「勇」字是香燈腳的重要元素。</strong></figcaption></figure>
  2298.  
  2299.  
  2300.  
  2301. <p>交通方面,我查好火車時刻表。7點多孩子上學後,就從家裡往車站出發,預計 9:13 到達白沙屯站。</p>
  2302.  
  2303.  
  2304.  
  2305. <p>裝備方面,我準備了以下物品:</p>
  2306.  
  2307.  
  2308.  
  2309. <ul class="wp-block-list">
  2310. <li><strong>小椅子</strong>:長時間等待時能坐下休息,避免雙腿痠軟。</li>
  2311.  
  2312.  
  2313.  
  2314. <li><strong>陽傘</strong>:白沙屯靠海,陽光可能炙熱,保護自己免受曝曬。</li>
  2315.  
  2316.  
  2317.  
  2318. <li><strong>水</strong>:保持水分,避免脫水,尤其是在戶外排隊。</li>
  2319.  
  2320.  
  2321.  
  2322. <li><strong>麵包</strong>:預防排隊超過中午,可以直接補充能量。</li>
  2323.  
  2324.  
  2325.  
  2326. <li><strong>現金</strong>:報名費700元,外加2700元遊覽車的費用,總計3400元。</li>
  2327.  
  2328.  
  2329.  
  2330. <li><strong>行動電源</strong> : 對現代人而言,這是不可或缺的裝備,讓我在排隊時無需擔心手機電量不足,可以隨時記錄這段旅程的點滴瞬間。</li>
  2331. </ul>
  2332.  
  2333.  
  2334.  
  2335. <p>前一天晚上把這些東西都準備好之後,就早早上床,準備第二天的「排隊之旅」。</p>
  2336.  
  2337.  
  2338.  
  2339. <p></p>
  2340.  
  2341.  
  2342.  
  2343. <h3 class="wp-block-heading">旅程和漫長的排隊</h3>
  2344.  
  2345.  
  2346.  
  2347. <p>3月28日早上,我背著前一晚就準備好的背包,滿心期待地踏上旅途。早上的車廂內,大多是通勤族,學生很少,因為已經過了上學的時間。到了新竹站,我轉搭 08:23 的2513次列車,繼續前往白沙屯。車廂內,和我年紀相近,穿著健行裝扮,甚至拿著椅子的,看起來就跟我是一樣的目的地。列車緩緩沿著海邊行駛,每站都停下來,廣播開始出現一些很少見的站名。窗外的景色也從都市轉為田野。</p>
  2348.  
  2349.  
  2350.  
  2351. <p>09:13,我抵達白沙屯車站。一下車,海風迎面撲來,比我想像中還要大。陰天,氣溫約20度,但體感只有15度左右。我只穿了件夏季防曬的薄外套,頓時覺得有些寒意。這時我才意識到,自己對天氣的預判有些失誤——靠海的風勢不容小覷,下次得帶件厚一點的外套。從車站步行至報名地點拱天宮不過十幾分鐘,跟著人群走就是了,不用擔心路線。一路上,我感受到的只有寧靜,可能是因為海風,可能是擔心排隊的人潮。大多數人都是低頭地走著,腳步愈來愈快。</p>
  2352.  
  2353.  
  2354.  
  2355. <p>過了平交道,很快地轉進拱天宮前的道路,從地上的紅磚就就可以輕鬆地辨認。空氣中開始出現聲音,人群的聲音,應該是因為廟前的關係。排隊的隊伍從拱天宮後的餐廳開始,一樣不需要找路,跟著人群走就是。從香客大樓門口的隊伍前頭,開始順著排隊的人龍找尋隊伍的盡頭。開始感受到人群的騷動。</p>
  2356.  
  2357.  
  2358.  
  2359. <figure class="wp-block-embed alignright is-type-photo is-provider-flickr wp-block-embed-flickr"><div class="wp-block-embed__wrapper">
  2360. <a href="https://www.flickr.com/photos/pipperl2020/54417343440/in/album-72177720324725905/"><img data-recalc-dims="1" loading="lazy" decoding="async" src="https://i0.wp.com/live.staticflickr.com/65535/54417343440_fca54330c3_c.jpg?resize=600%2C800&#038;ssl=1" alt=" " width="600" height="800" /></a>
  2361. </div></figure>
  2362.  
  2363.  
  2364.  
  2365. <p>人好多啊!排隊的路線跟昨天臉書上說的不同,今天是往海邊和堤防邊延伸出去,經過白沙屯漁港,繼續延伸出去。走到某個點,人龍又拐了個彎,沿著某條小路走。我終於找到隊尾,開始這場耐力與期待的考驗。打開google 地圖拉了一下距離,大概 700~800 公尺。因為海風很涼,甚至有點冷的關係,帶的傘並沒有派上用場,穿著薄外套的我,靠著帽子和背包擋下部份的海風。但還不到發抖的程度。身邊附近的人大多是防風機能外套或是羽絨外套,明顯是為了應對這海邊多風的天氣有備而來。</p>
  2366.  
  2367.  
  2368.  
  2369. <p>隊伍移動緩慢,算了一下,每個小時大概前進100公尺左右。但周圍的氣氛並不沉悶,反而充滿活力—— 仔細聽,可以聽到人們討論著過往進香發生的事蹟,今年進香的預期 (尤其是今年去程的急行軍) 等。偶爾還會有志工開車提供水、飯糰的補給;當然也有小販推著車賣著小凳子,或是炒麵、魯肉飯等小吃;沒有在廟口先拿報名表的,也不用擔心,有志工會詢問是否需要空白的表格,並提醒填寫時需要注意的事項。</p>
  2370.  
  2371.  
  2372.  
  2373. <p>中午時分,報名處會休息一小時,讓大家用餐與歇息。隊伍也會停止前進,跟前後的人打聲招呼,就可以去用餐或是上洗手間。我拿出自備的午餐,和前後一起排隊的人聊了起來。前方是位帶著高中左右的孩子一起來報名的大哥,他說反正最近生意不好,老闆放無薪假,就來排隊了。他參加進香已經有十年的經歷了,過去人比較少,大多是因為宗教信仰的關係前來,不像這幾年,他說。他還提到關於山邊媽祖 (白沙屯媽祖進香是由拱天宮媽祖和山邊媽祖同行) 的一些事,包括過去是安奉在不同爐主家,後來才有了現在所謂「臨時」的廟,現在則是在募款等待新的廟等等。過去和現在的比較,大多是由他和我分享的。</p>
  2374.  
  2375.  
  2376.  
  2377. <p>我的後方則是一對母女,女兒下班一大早就先過來排隊,媽媽再坐火車從中壢下來。因為時間和交通工具的關係,她過去四年並非是走全程,而是走白沙屯出發、中間一天、到北港、回程再一天、最後回白沙屯這一段。她說,每次看到北港那麼多信徒一起歡迎媽祖,總是非常感動。而如果像她一樣要到定點,一定要提早到,不然一定擠不進去的。</p>
  2378.  
  2379.  
  2380.  
  2381. <figure class="wp-block-embed alignright is-type-photo is-provider-flickr wp-block-embed-flickr"><div class="wp-block-embed__wrapper">
  2382. <a href="https://www.flickr.com/photos/pipperl2020/54417343470/in/album-72177720324725905"><img data-recalc-dims="1" loading="lazy" decoding="async" src="https://i0.wp.com/live.staticflickr.com/65535/54417343470_00a18947fe_c.jpg?resize=600%2C800&#038;ssl=1" alt=" " width="600" height="800" /></a>
  2383. </div></figure>
  2384.  
  2385.  
  2386.  
  2387. <p>另外一位大姐,來自新竹。去年是報名遊覽車,今年則決定徒步。我趁機會向她請教了遊覽車方案的優缺點。她說遊覽車比較辛苦的,是在一天的步行後,還要再多走一段路去遊覽車停車的地方。通常因為空間的關係,遊覽車會停在外環道附近,這代表要多走30~60分鐘的路程。「已經走了十幾個小時,還要再多走一個小時,真的很累」。另外一個缺點,就是住宿的點車程約1小時,所以休息更晚,出發更早,壓縮到時間。但是好處是不用擔心睡覺和洗澡的地方。</p>
  2388.  
  2389.  
  2390.  
  2391. <p>「那今年呢?你打算怎麼做?」她今年打算全程用徒步的方式,自己帶睡袋和帳篷,這樣在晚上就能在適合的地方就地休息。因為負重的關係,她要利用大會提供的行李託運服務,將比較重的行李寄放,等到晚上要休息時再領出。</p>
  2392.  
  2393.  
  2394.  
  2395. <p>「那我如果太累,可以在遊覽車上休息睡覺嗎?」我問。『你不會想到這樣子做的,遊覽車停車等待時,是不會發動的。去年三月進香,車內就已經很悶熱了;今年是五月,應該會超熱的。』 「你覺得累的時候,不用去找遊覽車。直接坐『累了請上車』就好」前頭的大哥插話說。</p>
  2396.  
  2397.  
  2398.  
  2399. <p>於是,這群來自四個地方,彼此互不相識的香燈腳們,就這樣聊了起來。</p>
  2400.  
  2401.  
  2402.  
  2403. <p></p>
  2404.  
  2405.  
  2406.  
  2407. <h3 class="wp-block-heading">報名:領取信物與祈福</h3>
  2408.  
  2409.  
  2410.  
  2411. <figure class="wp-block-embed alignleft is-type-photo is-provider-flickr wp-block-embed-flickr"><div class="wp-block-embed__wrapper">
  2412. <a href="https://www.flickr.com/photos/pipperl2020/54416955656/in/album-72177720324725905/"><img data-recalc-dims="1" loading="lazy" decoding="async" src="https://i0.wp.com/live.staticflickr.com/65535/54416955656_4476acf72b_c.jpg?resize=600%2C800&#038;ssl=1" alt=" " width="600" height="800" /></a>
  2413. </div></figure>
  2414.  
  2415.  
  2416.  
  2417. <p>前面提到,隊伍前進100公尺大概需要1個小時。但這是不一定的。主要原因是一個人排隊,可以幫多人報名,所以當有人幫數百人、或是數千人報名 (聽說第一天就有這樣的「大單」)時,隊伍前進的速度就會突然停頓。不過我有感覺,前進的速度好像愈來愈快的樣子。經過5個多小時的等待,終於在下午兩點多進入拱天宮的香客大樓/餐廳,這裡,才是「正式」報名的手續開始。審查完報名表填寫正確後,領取號碼牌。終於可以在裡頭的座位,稍作休息,等待叫號。三點多,在6個小時之後,我完成付款,拿到了進香的臂章、背心、帽子、毛巾、和口罩。終於,我想。</p>
  2418.  
  2419.  
  2420.  
  2421. <p>走出大樓,排隊的人龍還是看不到盡頭。我往來時的方向走,前往拱天宮拜拜。廟內香煙繚繞,信徒們虔誠地低頭祈福。我跟著把臂章和帽子過了香爐,雙手合十,向媽祖祈求平安,也為即將到來的進香之旅許下心願。站在廟裡的那一刻,人聲雖然嘈雜,但我卻感受到一股寧靜與力量,不知道媽祖看著這一切 (排隊的人,祈求的人) 是什麼想法? 是要經歷過這些苦痛,才會得到自己想要的東西?還是其實神明的護祐,已經讓信徒們免去了更多的苦難?</p>
  2422.  
  2423.  
  2424.  
  2425. <p>回程的路上,在平交道的附近買了個蚵嗲,邊往車站的路上,一口一口地吃著。剛炸好的蚵嗲,熱熱地,燙著口,但也協助我抵禦著海風。沒那麼冷了。</p>
  2426.  
  2427.  
  2428.  
  2429. <p>回程的車上,開始出現放學的學生,幸運的我,找到了位子坐下。回想這一天的經歷,從清晨的出發到報名的完成,每個細節都歷歷在目。雖然過程中有些小失誤(如天氣預判不足),排隊也考驗了耐心,但這些瑣碎的不便,反而成為這段旅程的點綴,讓它更顯得真實與難忘。雖然只是報名,還不是進香,但參與者的熱情、信仰的力量,以及活動背後那份延續百年的溫度,那種來自民間的草根力量,為了某些信念的付出,都是值得敬意的。</p>
  2430.  
  2431.  
  2432.  
  2433. <p>回到家,看著臉書上其他人排隊的分享,早上4點去排,也是大概要排隊6個小時。快中午去,也是大概6個小時壓線。我想,這大概就是第二天排隊的平均值吧。</p>
  2434.  
  2435.  
  2436.  
  2437. <p>至於報名的人數,今年廟方準備了23萬件的背心 (各尺寸數量未知)。這幾天排隊的狀況我觀察如下:</p>
  2438.  
  2439.  
  2440.  
  2441. <ul class="wp-block-list">
  2442. <li>第一天聽說報名有7.5萬人 ,有那種一筆數千人的大單;</li>
  2443.  
  2444.  
  2445.  
  2446. <li>第二天聽說到10萬人了。</li>
  2447.  
  2448.  
  2449.  
  2450. <li>第三天因為假日的緣故,人好像更多了。5L的尺寸,聽說第三天就沒有了。第三天下午排到14萬號,排隊時間大約6個小時。</li>
  2451.  
  2452.  
  2453.  
  2454. <li>第四天:下雨、溼冷、風大,排隊的人數比前幾天少。累積報名人數 17 萬人左右。衣服尺寸 S 跟 3L 都沒了。可能因為大單在前幾天消化完畢,有排隊3個小時就排到的例子。甚至在5點後因為人太少,還有10分鐘就排到的例子。</li>
  2455.  
  2456.  
  2457.  
  2458. <li>第五天:M 尺寸也沒有了。 只剩下 L、XL、2L。也就是說,以我的尺寸而言,前五天不去排,應該就沒有了吧。(但還是能夠穿大一號的,背心嘛~~)</li>
  2459.  
  2460.  
  2461.  
  2462. <li>廟方會看廟方處理報名人數的狀況在適當的時機,派出掛著「排隊截止點」的志工,提示排隊的人,當日所能處理的人龍長度。</li>
  2463.  
  2464.  
  2465.  
  2466. <li>也有人會在下午5:00左右去碰碰運氣。如果排隊的人因為排隊截止而散去,志工又提早把預定的人潮給消化,就有機會補上在當天關門前排到。</li>
  2467. </ul>
  2468.  
  2469.  
  2470.  
  2471. <p>看了這麼多的報名人數。如果明年我還要繼續參加,且不報名遊覽車行程 (例如只走個兩三天,或是自己餐風露宿)的話,我應該會真的等個一週或十來天,等人少一點,再去報名。</p>
  2472.  
  2473.  
  2474.  
  2475. <figure class="wp-block-embed aligncenter is-type-photo is-provider-flickr wp-block-embed-flickr"><div class="wp-block-embed__wrapper">
  2476. <a href="https://www.flickr.com/photos/pipperl2020/54417146919/in/album-72177720324725905/"><img data-recalc-dims="1" loading="lazy" decoding="async" src="https://i0.wp.com/live.staticflickr.com/65535/54417146919_c5e479da66_b.jpg?resize=1024%2C768&#038;ssl=1" alt=" " width="1024" height="768" /></a>
  2477. </div><figcaption class="wp-element-caption"><strong>北港朝天宮,直線距離118.7K,今年急行軍36小時(含休息)要走完。</strong></figcaption></figure>
  2478.  
  2479.  
  2480.  
  2481. <h3 class="wp-block-heading">結語</h3>
  2482.  
  2483.  
  2484.  
  2485. <p>回顧這次白沙屯媽祖進香報名的經歷,才只是報名而已,便讓我體驗到排隊和人們對於這活動的熱情。豐厚的人情味,讓我感受到這份信仰的力量,似乎讓我也成為了這個大家庭的一員。但這活動的「熱門」程度,看起來可能超過23萬的報名人數,卻也讓我對於進香活動到時候的壅塞和品質有所擔憂。不管如何,相信信仰的力量,也就是媽祖,會透過這群以善出發的人心,做出對整個活動的參與者,包括我在內,最好的安排。</p>
  2486.  
  2487.  
  2488.  
  2489. <p>報名排隊時隨手拍的照片,<a href="https://flic.kr/s/aHBqjC74jz">放在 flicr 上</a>了。5月1日,我們路上有緣再見。</p>
  2490. ]]></content:encoded>
  2491. <wfw:commentRss>https://blog.serv.idv.tw/2025/03/nomad-50-pilgrimage-registration/feed/</wfw:commentRss>
  2492. <slash:comments>0</slash:comments>
  2493. <media:content url="https://blog.serv.idv.tw/wp-content/uploads/2025/03/IMG_58061-scaled.jpg" medium="image"></media:content>
  2494. <post-id xmlns="com-wordpress:feed-additions:1">7967</post-id> </item>
  2495. <item>
  2496. <title>遊民週記 49:青少年手機使用管控研究</title>
  2497. <link>https://blog.serv.idv.tw/2025/03/nomad-teeager-smartphone-usage/</link>
  2498. <comments>https://blog.serv.idv.tw/2025/03/nomad-teeager-smartphone-usage/#comments</comments>
  2499. <dc:creator><![CDATA[PipperL]]></dc:creator>
  2500. <pubDate>Mon, 24 Mar 2025 09:05:00 +0000</pubDate>
  2501. <category><![CDATA[小幸福計畫]]></category>
  2502. <category><![CDATA[遊民週記]]></category>
  2503. <category><![CDATA[AI]]></category>
  2504. <category><![CDATA[education]]></category>
  2505. <category><![CDATA[kids]]></category>
  2506. <category><![CDATA[nomad]]></category>
  2507. <category><![CDATA[小幸福]]></category>
  2508. <category><![CDATA[手機成癮]]></category>
  2509. <category><![CDATA[數位]]></category>
  2510. <guid isPermaLink="false">https://blog.serv.idv.tw/?p=7960</guid>
  2511.  
  2512. <description><![CDATA[行事曆突然變空了,花了不少時間一步步地清理著 netflix 的待看清單、耐心地把 podcast 的播放清單 ... <a title="遊民週記 49:青少年手機使用管控研究" class="read-more" href="https://blog.serv.idv.tw/2025/03/nomad-teeager-smartphone-usage/" aria-label="Read more about 遊民週記 49:青少年手機使用管控研究">閱讀全文</a>]]></description>
  2513. <content:encoded><![CDATA[
  2514. <p>行事曆突然變空了,<br>花了不少時間一步步地清理著 netflix 的待看清單、耐心地把 podcast 的播放清單一部一部地吃掉…直到飽到吃不下,有點反胃為止。</p>
  2515.  
  2516.  
  2517.  
  2518. <p>不想買菜、下廚,午餐和晚餐都外食,沙發上的那張被子好滑好軟好舒服,睡著了,醒來,又睡著了,又醒來。<br>怎麼覺得這麼冷?</p>
  2519.  
  2520.  
  2521.  
  2522. <p>身體開始冒出奇怪的痘痘,皮膚開始奇怪的脫皮,</p>
  2523.  
  2524.  
  2525.  
  2526. <p>我感冒了。</p>
  2527.  
  2528.  
  2529.  
  2530. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  2531.  
  2532.  
  2533.  
  2534. <p>因為一個月前才感冒過一次,而且拖了兩週才好。這一次,決定積極面對。<br>掛了號,看了醫生,一樣的問候,一樣模糊的診斷,一樣有兩種策略可以選:</p>
  2535.  
  2536.  
  2537.  
  2538. <p>「這藥吃了會想睡,可以嗎?如果你要長途開車的話,我可以開比較不會想睡覺的給你。」</p>
  2539.  
  2540.  
  2541.  
  2542. <p>我選了會想睡的。</p>
  2543.  
  2544.  
  2545.  
  2546. <p>喝水、吃藥、益生菌、睡覺、上廁所;喝水、吃藥、益生菌、睡覺、上廁所。我開始這一連串的循環,孩子們都懂事地(或習以為常地) 讓我休息,不像平時會跑來吱吱喳喳地跟我談天說地。陽光照進來,全家都去上班上學了,除了我,傍晚,成員陸續回來了,我窩在床上,喝水、吃藥、益生菌、睡覺、上廁所。</p>
  2547.  
  2548.  
  2549.  
  2550. <p>「這次開了抗生素。要吃完喔!」</p>
  2551.  
  2552.  
  2553.  
  2554. <p>我不曉得為什麼要開抗生素,但這次藥開得有點重,身體的所有症狀被強烈地隔離了,鼻水、鼻涕、喉嚨痛、咳嗽,都不見了,像是自己被關在一個水晶球裡。看著自己,感覺疲累。身體還是自己的,但就是有種說不上來的疲累。</p>
  2555.  
  2556.  
  2557.  
  2558. <p>感覺這場仗,是感冒藥幫我在打的。</p>
  2559.  
  2560.  
  2561.  
  2562. <p>不管如何,三天後,我已經可以坐在桌前,藉著自己的手,用著奇怪的觸感,打著字。</p>
  2563.  
  2564.  
  2565.  
  2566. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  2567.  
  2568.  
  2569.  
  2570. <h1 class="wp-block-heading">青少年手機使用管控研究</h1>
  2571.  
  2572.  
  2573.  
  2574. <p>本來這一週想要分享一下,我對於孩子使用手機的看法 (主要是針對小幸福)。不過寫呀寫呀,回頭一看,卻發現這樣會不會太一廂情願,用個人片面的觀點,淪為個人的說教?</p>
  2575.  
  2576.  
  2577.  
  2578. <p>最近如果懷疑自己的論述過於片面或單一,我會請 AI 幫忙看一下,提出建設性的批評:</p>
  2579.  
  2580.  
  2581.  
  2582. <blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
  2583. <p>You are a friendly but challenging intellectual nemesis. Review the following content and respond with:<br>1. Point out potential logical flaws or assumptions<br>2. Suggest alternative perspectives<br>3. Ask thought-provoking questions that challenge the main ideas<br>4. Roast my writing and give concrete actionable feedback<br>使用台灣繁體中文回覆。</p>
  2584. </blockquote>
  2585.  
  2586.  
  2587.  
  2588. <p>最近正好 Gemini 的 deep research 上線,就用這工具來看看他人的觀點,最後再補上自己的一些想法。<br>以下內容由 Gemini deep research 產生,後續再經過兩次改寫 (一次AI、一次人工)。讓我們試試 cyborg 的時代,寫blog 這種深呼吸,會變成什麼樣子吧!</p>
  2589.  
  2590.  
  2591.  
  2592. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  2593.  
  2594.  
  2595.  
  2596. <h3 class="wp-block-heading">前言:</h3>
  2597.  
  2598.  
  2599.  
  2600. <p>智慧型手機對現在的青少年來說,已經不只是個通訊工具,而是他們生活的不可或缺的一部分。從跟朋友聊天、刷社群媒體,到追劇、打遊戲,甚至偶爾查查作業資料,手機幾乎無所不能。它就像個魔法盒,既能帶來歡樂,也藏著讓家長頭痛的挑戰。例如,孩子整天黏在螢幕前,會不會影響心理健康?學業會不會下滑?眼睛會不會壞掉?更別提那些潛伏在網路世界的風險了。</p>
  2601.  
  2602.  
  2603.  
  2604. <p>這篇報告不是要給家長一本「教戰守則」,而是想提供一些實用的思路跟方法。基於最新的研究跟專家建議,我會試著幫大家搞清楚青少年怎麼用手機、可能有哪些問題,並分享一些溝通和管理的小撇步。目標很簡單:讓孩子在享受科技的同時,別被它拖著走。</p>
  2605.  
  2606.  
  2607.  
  2608. <p>雖然目標簡單,但達成的過程卻充滿挑戰。我自己也還在努力的道路上。</p>
  2609.  
  2610.  
  2611.  
  2612. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  2613.  
  2614.  
  2615.  
  2616. <h2 class="wp-block-heading">Part 1: 了解現況:台灣青少年跟手機的「親密關係」</h2>
  2617.  
  2618.  
  2619.  
  2620. <p>在開始聊怎麼管之前,我們得先知道青少年跟手機的關係有多緊密。數據會說話,我就直接丟幾個數字給你們看。</p>
  2621.  
  2622.  
  2623.  
  2624. <h3 class="wp-block-heading">台灣青少年手機使用數據:普及率和使用時間超乎想像</h3>
  2625.  
  2626.  
  2627.  
  2628. <p>根據<a href="https://taiwanreview.nat.gov.tw/Society/Top-News/21639/Smartphone-addiction-on-rise-for-Taiwan-teens">教育部</a>跟<a href="https://www.children.org.tw/uploads/images/private/23/files/report_2011_children_mobile_phone.pdf">兒福聯盟的調查</a>,台灣青少年擁有智慧型手機的比例真的很高,而且年紀越大,普及率高。台灣學童手機使用的普及程度已經與歐美先進國家相當,甚至在某些方面更高於鄰近的中國和日本,同時,首次使用手機的年齡呈現逐漸降低的趨勢 。</p>
  2629.  
  2630.  
  2631.  
  2632. <ul class="wp-block-list">
  2633. <li><strong>國小五六年級</strong>:<a href="https://www.children.org.tw/uploads/images/private/23/files/report_2011_children_mobile_phone.pdf">2011 年</a>就有 55.3% 的學生開始用手機,到了 <a href="https://serc.tn.edu.tw/wp-content/uploads/2020/07/%E7%AC%AC%E4%B8%89%E5%90%8D%E6%B0%B8%E7%A6%8F%E5%9C%8B%E5%B0%8F-%E6%BB%91%E6%A9%9F%E5%97%8E_%E6%BB%91%E4%B8%96%E4%BB%A3%E5%9C%8B%E5%B0%8F%E5%AD%B8%E7%94%9F%E4%BD%BF%E7%94%A8%E6%99%BA%E6%85%A7%E5%9E%8B%E6%89%8B%E6%A9%9F%E5%A4%A7%E8%AA%BF%E6%9F%A5.pdf">2015 年</a>,六成以上(60.7%)的小學生有能上網的智慧型手機。</li>
  2634.  
  2635.  
  2636.  
  2637. <li><strong>國中生</strong>:2011 年,有70.5%的國中生已經開始使用手機;到了 <a href="https://crctaiwan.dcat.nycu.edu.tw/ResultsShow_detail.asp?RS_ID=140">2020 年</a>,有91.9% 的國中生有自己的手機。</li>
  2638.  
  2639.  
  2640.  
  2641. <li><strong>高中生</strong>:2020年,比例高達 99.1%,基本上沒人不帶手機出門。</li>
  2642. </ul>
  2643.  
  2644.  
  2645.  
  2646. <p>使用時間呢?根據台灣傳播調查資料庫 2020 年的<a href="https://crctaiwan.dcat.nycu.edu.tw/ResultsShow_detail.asp?RS_ID=140">統計</a>:</p>
  2647.  
  2648.  
  2649.  
  2650. <ul class="wp-block-list">
  2651. <li><strong>國中生</strong>:平日平均 3 小時(174 分鐘),週末 5 小時 25 分(325 分鐘)。</li>
  2652.  
  2653.  
  2654.  
  2655. <li><strong>高中生</strong>:平日 5 小時(296 分鐘),週末直接飆到 7 小時(419 分鐘)。</li>
  2656. </ul>
  2657.  
  2658.  
  2659.  
  2660. <p>使用時間跟其他國家的比較:<a href="https://explodingtopics.com/blog/smartphone-usage-stats">跟全球比較起來</a>,台灣青少年平均每天用手機 4 小時 5 分,雖然不如菲律賓(5 小時 20 分)或巴西(5 小時 19 分)誇張,但還是高於全球平均(3 小時 50 分)。</p>
  2661.  
  2662.  
  2663.  
  2664. <pre class="wp-block-verse"><strong>個人觀點 1:</strong> 台灣青少年智慧型手機的普及率和使用時長都不算短。不同年齡段的青少年使用習慣存在差異,也就是說,家長需要根據孩子的具體情況採取不同的管理策略。例如,針對高中生更長的使用時間,家長可能需要更加側重於培養他們的自我管理能力,而對於國中生,則可以更多地通過共同制定規則來引導。</pre>
  2665.  
  2666.  
  2667.  
  2668. <h3 class="wp-block-heading">他們都在幹嘛?手機活動大解密</h3>
  2669.  
  2670.  
  2671.  
  2672. <p>青少年拿著手機都在做什麼?以下整理了幾個常見活動:</p>
  2673.  
  2674.  
  2675.  
  2676. <ul class="wp-block-list">
  2677. <li><strong>社群媒體</strong>:刷 IG、TikTok、FB。他們通過這些平台與朋友互動、分享生活、關注感興趣的內容。</li>
  2678.  
  2679.  
  2680.  
  2681. <li><strong>看影片</strong>:YouTube、Netflix,海量的娛樂跟少數的教育資料/查資料都靠它。</li>
  2682.  
  2683.  
  2684.  
  2685. <li><strong>打遊戲</strong>:打發時間和放鬆心情的首選。</li>
  2686.  
  2687.  
  2688.  
  2689. <li><strong>其他</strong>:聽音樂、拍照、翻譯、查單字,偶爾用學習 App。</li>
  2690. </ul>
  2691.  
  2692.  
  2693.  
  2694. <p>教育部調查發現,影音跟社群網站是各年級的熱門選擇。不過現在學校大部份都已經導入了對手機的管制措施,有的是到了學校手機就要集中保管,再更小 (例如國小)則是禁止攜帶手機到學校。所以使用的時候,還是以課後為主。</p>
  2695.  
  2696.  
  2697.  
  2698. <pre class="wp-block-verse"><strong>個人觀點 2:</strong> 青少年使用智慧型手機的目的多樣,娛樂和社交是主要的驅動力,學習也佔有一定比例。我們需要瞭解孩子具體的使用偏好,以便進行引導和管理。而需要瞭解具體的使用偏好,就不能把孩子推得太遠。要讓他們感受到我們的關心與理解,不是只有禁止或使用家長的立場去看待。畢竟你覺得無聊的東西,可能可以帶給他滿滿的情緒價值。</pre>
  2699.  
  2700.  
  2701.  
  2702. <h3 class="wp-block-heading">為什麼離不開手機?動機比你想的深</h3>
  2703.  
  2704.  
  2705.  
  2706. <p>青少年使用智慧型手機的動機遠不止表面上的娛樂和消遣。更深層次的原因往往與他們的社交、情感和心理需求密切相關:</p>
  2707.  
  2708.  
  2709.  
  2710. <ul class="wp-block-list">
  2711. <li><strong>社交連結與獲得歸屬感</strong>:尋求社交連接和獲得歸屬感是青少年使用手機的重要動機之一 。在青少年時期,同伴關係對他們來說至關重要,智慧型手機和社交媒體為他們提供了一個與朋友保持聯絡、拓展社交圈子的平台。沒了手機,就像被孤立一樣,他們可能會感到焦慮和不安,因為無法即時獲取朋友的動態或參與社交活動。。</li>
  2712.  
  2713.  
  2714.  
  2715. <li><strong>情緒調節</strong>:追求娛樂和放鬆也是青少年使用手機的主要動機 。各種各樣的遊戲、視訊和音樂應用為他們提供了隨時隨地的娛樂選擇。此外,一些青少年還可能出於逃避負面情緒(如焦慮、抑鬱、孤獨感)或避免尷尬的社交互動等原因而過度使用手機。壓力大時刷一刷,可以逃避現實,享受一下暫時的多巴胺,雖然這種短暫的快感並不能真正解決他們面臨的問題。</li>
  2716.  
  2717.  
  2718.  
  2719. <li><strong>害怕錯過(FOMO)</strong>:怕漏掉訊息,隨時得盯著螢幕。<a href="https://keyhealthcare.com/why-teens-are-addicted-to-their-phones-and-what-to-do-about-it/">研究表明</a>,害怕錯過 (Fear of Missing out) 這種心理在青少年過度使用手機中也起著重要的作用 。社交媒體的使用還與青少年尋求支援、表達自我、以及發展身份認同有關。</li>
  2720. </ul>
  2721.  
  2722.  
  2723.  
  2724. <pre class="wp-block-verse"><strong>個人觀點 3:</strong> 青少年使用智慧型手機不僅僅是為了打發時間,更深層次的需求是社交、情感和心理上的滿足。我們需要理解這些動機,才能更有效地與孩子溝通,並幫助他們以更健康的方式滿足這些需求。例如,如果孩子因為感到孤獨而過度使用社交媒體,家長可以嘗試創造更多家庭互動和線下社交的機會,幫助他們建立更真實的人際關係。</pre>
  2725.  
  2726.  
  2727.  
  2728. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  2729.  
  2730.  
  2731.  
  2732. <h2 class="wp-block-heading">Part 2: 風險與挑戰:數位世界的隱藏陷阱</h2>
  2733.  
  2734.  
  2735.  
  2736. <p>手機帶來便利,但風險也不少。青少年心智還沒成熟,數位世界又複雜,家長得睜大眼睛。</p>
  2737.  
  2738.  
  2739.  
  2740. <h3 class="wp-block-heading">年齡差異:風險因年紀而異</h3>
  2741.  
  2742.  
  2743.  
  2744. <ul class="wp-block-list">
  2745. <li><strong>國中生(早期青少年)</strong>:
  2746. <ul class="wp-block-list">
  2747. <li>網路霸凌:社交經驗少,容易被欺負。</li>
  2748.  
  2749.  
  2750.  
  2751. <li>不當內容:暴力、色情,防不勝防。</li>
  2752.  
  2753.  
  2754.  
  2755. <li>過度使用:自制力差,可能上癮。</li>
  2756. </ul>
  2757. </li>
  2758.  
  2759.  
  2760.  
  2761. <li><strong>高中生(後期青少年)</strong>:
  2762. <ul class="wp-block-list">
  2763. <li>網路成癮:手機不離手,生活被吞噬。</li>
  2764.  
  2765.  
  2766.  
  2767. <li>心理健康:焦慮、憂鬱、自尊受創。</li>
  2768.  
  2769.  
  2770.  
  2771. <li>學業壓力:手機分散注意力,成績下滑。</li>
  2772. </ul>
  2773. </li>
  2774. </ul>
  2775.  
  2776.  
  2777.  
  2778. <pre class="wp-block-verse"><strong>個人觀點 4:</strong> 不同年齡段的青少年面臨的風險有所不同,我們需要根據孩子的年齡和發展階段,針對性地進行風險評估和預防。例如,對於年齡較小的孩子,可能需要更多地關注他們是否接觸到不適宜的內容,而對於年齡較大的孩子,則可能需要更關注他們是否存在網路成癮和心理健康問題。</pre>
  2779.  
  2780.  
  2781.  
  2782. <h3 class="wp-block-heading">心理健康:手機可能是隱形兇手</h3>
  2783.  
  2784.  
  2785.  
  2786. <p>過度使用智慧型手機與青少年心理健康問題之間存在著密切的關聯。<a href="https://www.pewresearch.org/internet/2024/03/11/how-teens-and-parents-approach-screen-time/">研究表明</a>,長時間、無節制地使用智慧型手機可能導致或加劇青少年的焦慮、抑鬱、孤獨感,甚至增加他們產生自殘和自殺意念的風險 。社交媒體的普及使得青少年更容易進行社會比較,而網路上的負面互動(如網路欺凌)則可能直接損害他們的自我認知和人際關係 。此外,FOMO 這種普遍存在於青少年群體中的心理,也會導致他們不斷查看手機,生怕錯過任何資訊,從而增加焦慮和壓力 。過度使用智慧型手機還會導致青少年睡眠不足、認知控制能力下降以及情緒調節困難等問題,這些都會進一步影響他們的心理健康 。</p>
  2787.  
  2788.  
  2789.  
  2790. <pre class="wp-block-verse"><strong>個人觀點 5:</strong> 乍看之下,手機對心理健康好像只有壞處。但要注意的是「過度」。適量的使用,其實是有助於讓他們與現在和未來的世界進行連結和互動,並且有助於人際關係的。只是難處在於「過度」和「適量」如何定義? 這個界線往往因人而異,受到個人的性格、生活環境以及社交需求等因素影響。另一個變數是世代的差異,我們這一代與前幾代相比,對科技的依賴程度更高,社交媒體和即時通訊工具已經成為日常交流的重要部分。但下一代可能會更加熟悉這些科技,甚至可能發展出全新的溝通方式,讓我們難以想像。上一代的「過度」,對我們而言可能是適量;同樣的, 對於下一代來說,我們的「過度」則可能只是他們的「適量」。<br><br>這分寸,很難拿捏。</pre>
  2791.  
  2792.  
  2793.  
  2794. <h3 class="wp-block-heading">學業表現:手機是幫手還是搗蛋鬼?</h3>
  2795.  
  2796.  
  2797.  
  2798. <p>智慧型手機在為青少年提供學習便利的同時,也可能對他們的學業表現產生負面影響。研究表明,無論是在課堂上還是在課後,使用手機都可能分散青少年的注意力,降低他們的學習效率和學業成績 。課堂上使用手機會使學生難以集中注意力聽講,導致學習效率降低,並可能直接影響考試成績 。即使是在家庭作業期間,手機的各種通知和娛樂功能也會分散青少年的注意力,影響他們完成作業的品質和效率 。此外,過度使用手機導致的睡眠不足也會使青少年在白天感到疲倦,難以集中精力學習,從而影響他們的學業表現 。</p>
  2799.  
  2800.  
  2801.  
  2802. <pre class="wp-block-verse"><strong>個人觀點 6:</strong> 智慧型手機的干擾不僅影響課堂學習,還會滲透到家庭學習時間,降低青少年的學習效率和學業成績。我現在的作法是:家長需要與孩子共同制定學習期間的手機使用規則,例如在做作業時將手機放在另一個房間,以創造一個有利於專注學習的安靜環境。</pre>
  2803.  
  2804.  
  2805.  
  2806. <h3 class="wp-block-heading">社交互動:虛擬世界偷走真實連結</h3>
  2807.  
  2808.  
  2809.  
  2810. <p>過度依賴智慧型手機進行線上交流可能會對青少年的社交能力產生負面影響。研究表明,長時間沉浸在虛擬社交世界中可能導致青少年面對面社交能力下降,並增加他們的社交孤立感 。頻繁使用社交媒體可能會減少青少年進行面對面社交活動的時間,從而阻礙他們學習和發展重要的社交技能,例如解讀肢體語言、理解語氣和進行有效的溝通 。過度沉迷於手機還可能導致青少年對現實世界的社交活動失去興趣,縮小他們的社交圈子,並削弱他們與家人之間的溝通 。此外,網路罷凌等負面社會互動也會給青少年的心理健康帶來嚴重的負面影響 。</p>
  2811.  
  2812.  
  2813.  
  2814. <pre class="wp-block-verse is-style-plain"><strong>個人觀點 7:</strong> 雖然智慧型手機可以促進青少年之間的聯絡,但過度依賴線上交流可能會以犧牲面對面的社會互動為代價,從而阻礙社交技能的發展並導致社交孤立。我相信,包括我這個世代,線上和線下的社交活動,都有一定的重要性。而兩者的技巧和價值,也都不一樣。雖然「不可偏廢」說的容易, 但實際實行起來沒有那麼簡單。如果孩子偏食的話,家長就需要鼓勵孩子積極參與線下社交活動,例如與朋友聚會、參加社團活動等,並幫助他們認識到面對面交流的獨特價值。像是「讀空氣」的技術…</pre>
  2815.  
  2816.  
  2817.  
  2818. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  2819.  
  2820.  
  2821.  
  2822. <h2 class="wp-block-heading">Part 3: 視力健康:螢幕時間的眼睛負擔</h2>
  2823.  
  2824.  
  2825.  
  2826. <p>手機用久了,眼睛也會抗議。這個問題我自己都深有感觸,更別提成長中的青少年了。</p>
  2827.  
  2828.  
  2829.  
  2830. <h3 class="wp-block-heading">螢幕類型:距離是關鍵</h3>
  2831.  
  2832.  
  2833.  
  2834. <p>不同的電子裝置,如智慧型手機、平板電腦、電腦螢幕和電視,由於其觀看距離和使用方式的差異,對青少年視力的潛在影響也各不相同 。研究普遍認為,近距離觀看螢幕(例如使用智慧型手機和平板電腦)更容易導致眼睛疲勞和近視的發生和發展 。這是因為在近距離觀看時,眼睛需要更加努力地聚焦,長時間下來容易造成眼部肌肉疲勞和眼軸的拉長,從而導致近視。</p>
  2835.  
  2836.  
  2837.  
  2838. <ul class="wp-block-list">
  2839. <li><strong>手機/平板</strong>:近距離用眼,負擔最大,近視風險高。</li>
  2840.  
  2841.  
  2842.  
  2843. <li><strong>電腦</strong>:距離稍遠,但久盯也累。</li>
  2844.  
  2845.  
  2846.  
  2847. <li><strong>電視</strong>:距離最遠,影響較小。</li>
  2848. </ul>
  2849.  
  2850.  
  2851.  
  2852. <p>所以不少醫生已經建議「與其給孩子玩手機,不如給他們看電視」(我記得我還是孩子的時候,醫生是說「看電視會近視,不如給他們看樹…」)</p>
  2853.  
  2854.  
  2855.  
  2856. <pre class="wp-block-verse"><strong>個人觀點 8:</strong> 觀看距離是影響視力的關鍵因素之一。像我就會教孩子把 youtube 放進清單中,然後在電腦或是電視上看。當然,這意味著要相較於手機,要開放更多的「電視時間」。</pre>
  2857.  
  2858.  
  2859.  
  2860. <h3 class="wp-block-heading">視力的潛在問題:近視、乾眼來敲門</h3>
  2861.  
  2862.  
  2863.  
  2864. <p>過長的螢幕時間可能對青少年的視力健康造成多方面的潛在問題。其中最受關注的是眼睛疲勞,也稱為視疲勞,其症狀包括視力模糊、眼睛乾澀、頭痛等 。研究表明,兒童和青少年每天花費在螢幕上的時間越長,他們患上近視的風險就越高 。長時間近距離用眼會顯著增加眼睛聚焦系統的負擔,導致眼部肌肉疲勞,長期下來還可能促使眼軸變長,從而導致或加劇近視 。此外,長時間盯著螢幕還會導致眨眼次數減少,使得眼表淚液蒸發過快,引起眼睛乾澀和不適,即乾眼症 。長時間的近距離用眼還可能導致眼睛聚焦靈活性下降,使得青少年在看完近處物體後,需要一段時間才能清晰地看清遠處物體 。關於藍光對視力的影響,雖然一些研究表明過多的藍光照射可能對視網膜造成潛在損傷,並影響睡眠,但目前科學界對此尚無完全明確的定論 。</p>
  2865.  
  2866.  
  2867.  
  2868. <p>這應該不用再多說了。現在的孩子,很難沒有近視。與其限制總量時間,不如讓他們保持30分鐘休息10分鐘的習慣。</p>
  2869.  
  2870.  
  2871.  
  2872. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  2873.  
  2874.  
  2875.  
  2876. <h2 class="wp-block-heading">Part 4: 有效的溝通策略:別硬來,用對方法</h2>
  2877.  
  2878.  
  2879.  
  2880. <p>管手機不能靠吼,溝通才是王道。我自己也試過硬碰硬,結果孩子更叛逆。</p>
  2881.  
  2882.  
  2883.  
  2884. <h3 class="wp-block-heading">為什麼要坦誠聊?</h3>
  2885.  
  2886.  
  2887.  
  2888. <p>在家長與青少年之間建立信任和開放的溝通管道,是討論包括智慧型手機使用在內的任何敏感話題的基礎 。當青少年感受到家長的尊重和理解時,他們更願意敞開心扉,分享自己在使用智慧型手機過程中遇到的問題和想法。因此,家長應該努力創造一個不帶評判、願意傾聽的溝通氛圍 。</p>
  2889.  
  2890.  
  2891.  
  2892. <pre class="wp-block-verse"><strong>個人觀點 9:</strong> 建立良好的親子溝通是有效管理青少年智慧型手機使用的前提。家長需要放下身段,以開放和尊重的態度與孩子交流,才能贏得他們的信任和合作。如果孩子不信任家長,他們可能不會坦誠地交流手機使用情況,甚至可能採取隱瞞或欺騙的行為。然而,也不要逼孩子一定要對你坦誠。每個人都有自己隱私和不想談的事情,請尊重他們,讓他們分享他們願意分享的,久而久之,當他們發現你真的不帶評判,且是真心聽他說話時, 他們會更願意主動與你分享自己的想法和感受。到時你的困擾,就會變成聽一堆少年維特的煩惱 XD</pre>
  2893.  
  2894.  
  2895.  
  2896. <h3 class="wp-block-heading">展開富有成效對話的專家建議和技巧</h3>
  2897.  
  2898.  
  2899.  
  2900. <ul class="wp-block-list">
  2901. <li><strong>選對時機</strong>:大家心情好時聊,别在吵架時提。</li>
  2902.  
  2903.  
  2904.  
  2905. <li><strong>先聽後說</strong>:問問他怎麼看手機,別急著講大道理。</li>
  2906.  
  2907.  
  2908.  
  2909. <li><strong>一起訂規則</strong>:讓他參與,接受度會高很多。</li>
  2910.  
  2911.  
  2912.  
  2913. <li><strong>解釋原因</strong>:告訴他為什麼要管,不是簡單地命令或禁止。</li>
  2914. </ul>
  2915.  
  2916.  
  2917.  
  2918. <pre class="wp-block-verse"><strong>個人觀點 10</strong>:這些技巧非常重要,當然必須如第9點先建立雙方的信任,然後再一起建立所謂的「規則」。規則不是死的,我常跟孩子說,我們先run 一陣子,再看情況調整。如果你覺得太不實際,要訂例外狀況,或是如果是我覺得太多漏洞,想要新的作法,到時我們再來談。先run 一陣子,並且保持些許的貓抓老鼠遊戲感,孩子會很開心。記住,「贏」不是你的目的。別想制定一個只對家長完全有利的制度。</pre>
  2919.  
  2920.  
  2921.  
  2922. <h3 class="wp-block-heading">積極傾聽、共情和建立信任</h3>
  2923.  
  2924.  
  2925.  
  2926. <p>在與青少年討論智慧型手機使用時,家長需要展現出同理心,理解他們使用手機的社交和情感需求 。使用「我也許能夠理解你為什麼會這麼想。」、「我很高興你願意和我聊這件事」等表達方式,可以營造一個安全和開放的溝通氛圍,鼓勵青少年更坦誠地表達自己的想法和感受。相反,過度控制和不信任可能會導致青少年產生強烈的牴觸情緒,甚至採取隱瞞或欺騙的行為來應對家長的限制。</p>
  2927.  
  2928.  
  2929.  
  2930. <pre class="wp-block-verse"><strong>個人觀點 11</strong>:信任和同理真的很重要。我很慶幸自己在他們國小的時候在他們的「情感帳戶」有累積足夠多的存款。所以即使進了青春期,我依然被歸類在「好朋友」一類,可以一起分享,擁有信任。這種事有點像飛輪或是正向的循環,有了好的開始,進了青春期後會容易許多。</pre>
  2931.  
  2932.  
  2933.  
  2934. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  2935.  
  2936.  
  2937.  
  2938. <h2 class="wp-block-heading">Part 5: 設界線:管得巧才有用</h2>
  2939.  
  2940.  
  2941.  
  2942. <p></p>
  2943.  
  2944.  
  2945.  
  2946. <h3 class="wp-block-heading">總時間 vs. 特定 App:怎麼選?</h3>
  2947.  
  2948.  
  2949.  
  2950. <ul class="wp-block-list">
  2951. <li><strong>螢幕時間</strong>:簡單粗暴,能降低整體用量,直接連結到視力,但這種通殺方式,也把正常/良性的社交管道給封鎖了。</li>
  2952.  
  2953.  
  2954.  
  2955. <li><strong>特定 App</strong>:精準打擊,比如限制了某個遊戲App,但孩子可能轉戰其他 App。</li>
  2956. </ul>
  2957.  
  2958.  
  2959.  
  2960. <pre class="wp-block-verse"><strong>個人觀點 12</strong>:這兩種我都試過,並沒有很好的方式。我現在是請孩子紀錄並定期檢視手機使用時間以及各App使用時間比例。現在的OS 都已經內建這些功能 (像google 的數位健康)。當他回顧一週發現 「哇!原來我用了這麼多時間!」,在旁的把拔心裡就會浮起淡淡的微笑。如果要我說心裡的理想,我會想要定一個寬鬆的螢幕時間 (每天手機最多2個小時),搭配比較嚴格的特定類型App 使用時間 (例如:遊戲類每天1個小時);同時間配置一定的彈性 (時間可以流用,有特殊需求可以提出,我通常都會同意)。</pre>
  2961.  
  2962.  
  2963.  
  2964. <h3 class="wp-block-heading">工具推薦:目前沒有完美的</h3>
  2965.  
  2966.  
  2967.  
  2968. <ul class="wp-block-list">
  2969. <li><strong>內建功能</strong>:Apple 的「螢幕時間」、Android 的「數位健康」。但這都是自制比較有用。</li>
  2970.  
  2971.  
  2972.  
  2973. <li><strong>第三方 App</strong>:Google Family Link、Qustodio、Bark,能限時、過濾內容,還能看使用報告。實際上我用過 google family link 跟 microsoft 的 family safety。 前者在 Android 上很好用,但有一個限制,不能登入第二個以上的帳號 (教育帳戶除外)。而且每個App 的時間限制無法自由流用。 後者在 PC 上比較好用,Android 上也有,但運作起來怪怪的,可能是被會手機上的省電助手之類的殺後台。</li>
  2974. </ul>
  2975.  
  2976.  
  2977.  
  2978. <h3 class="wp-block-heading">軟體的兩面刃</h3>
  2979.  
  2980.  
  2981.  
  2982. <p>家長控制軟體可以作為管理青少年智慧型手機使用的工具之一,但並非萬能藥。過度依賴或不合理地使用這些軟體可能會對親子關係產生負面影響。家長應該謹慎使用,並始終重視與孩子的溝通和協商,以建立相互理解和尊重的關係。</p>
  2983.  
  2984.  
  2985.  
  2986. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  2987.  
  2988.  
  2989.  
  2990. <h2 class="wp-block-heading">Part 6: 實踐中的洞察:成功的管理策略與案例研究</h2>
  2991.  
  2992.  
  2993.  
  2994. <p>許多家長通過各種方法成功地與青少年討論並管理他們對智慧型手機的使用。以下是 Deep research 在研究中提供的一些成功案例。</p>
  2995.  
  2996.  
  2997.  
  2998. <p>一些家長選擇與孩子進行開放和誠實的溝通,坦誠地表達自己對孩子過度使用手機的擔憂,並傾聽孩子們的想法和感受。通過共同協商,他們與孩子一起制定了<a href="https://www.boltinsight.com/smartphone-scenes-teen-clicks-and-parental-tricks/">明確且合理的智慧型手機使用規則</a>,例如限制每天的使用時長、規定特定的停用時段(如學習時間和睡覺前)、以及設定無手機的區域(如餐桌和臥室)。還有一些家長<a href="https://parentandteen.com/7-ways-parents-can-help-teens-manage-phone-use/">以身作則</a>,在孩子面前展現出健康的手機使用習慣,例如在家庭聚餐時不使用手機,或者在孩子需要他們的時候放下手機,專注於與孩子交流。一些家長也分享了他們使用特定的家長控制應用程式來幫助管理孩子手機使用的經驗,例如限制特定App的使用時間或阻止訪問某些網站。</p>
  2999.  
  3000.  
  3001.  
  3002. <p>從這些成功案例中可以獲得一些重要的見解和教訓。首先,開放和持續的溝通是至關重要的。家長需要與孩子建立信任的關係,讓他們願意分享自己的想法和感受。其次,設定明確且合理的規則是必要的,但這些規則最好是家長和孩子共同協商制定的。第三,家長以身作則對於引導孩子形成健康的手機使用習慣至關重要。此外,家長還需要保持靈活性,根據孩子的成長和情況變化調整管理策略。最後,建立信任,尊重孩子的自主性,並鼓勵他們發展自我管理能力,是幫助他們形成長期健康數字習慣的關鍵。</p>
  3003.  
  3004.  
  3005.  
  3006. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  3007.  
  3008.  
  3009.  
  3010. <h2 class="wp-block-heading">Part 7: 給家長的建議:健康平衡是關鍵</h2>
  3011.  
  3012.  
  3013.  
  3014. <p>以下是 deep research 給的策略和建議,而我自己的見解,已經分散寫在「個人觀點」裡了。</p>
  3015.  
  3016.  
  3017.  
  3018. <p>綜合以上研究結果和專家建議,以下是一些為家長提供的可操作的策略和建議,以幫助他們與青少年討論和管控智慧型手機的使用:</p>
  3019.  
  3020.  
  3021.  
  3022. <ul class="wp-block-list">
  3023. <li><strong>設定規則與界限 (Setting Rules and Boundaries):</strong> 與青少年共同制定明確的智慧型手機使用規則,包括每天或每週的使用時長限制、允許使用的時段(例如,完成作業後)、可以使用手機的場景(例如,公共交通工具上)以及停用區域(例如,臥室、餐桌)等 。可以根據不同類型螢幕時間(例如,學習、社交、娛樂)設定不同的規則 。務必確保這些規則是可執行的,並且家庭成員能夠一致遵守 。</li>
  3024.  
  3025.  
  3026.  
  3027. <li><strong>建立無螢幕時間段和區域 (Establishing Screen-Free Times and Zones):</strong> 設定家庭無螢幕時間,例如用餐時間,鼓勵家人在吃飯時放下手機,進行面對面的交流 。同時,設定家庭無螢幕區域,例如臥室,尤其是在睡覺前一小時禁止使用手機,以保證青少年擁有充足的高品質睡眠 。</li>
  3028.  
  3029.  
  3030.  
  3031. <li><strong>培養數位公民意識 (Fostering Digital Citizenship):</strong> 通過日常對話和討論,教育青少年負責任地使用數位技術,包括強調網路安全意識、保護個人隱私、尊重他人線上行為、以及培養辨別網路資訊真偽的能力 。與他們討論網路欺凌的危害以及應對方法,幫助他們建立健康的線上行為習慣 。</li>
  3032.  
  3033.  
  3034.  
  3035. <li><strong>鼓勵健康的線下活動 (Encouraging Healthy Offline Activities):</strong> 鼓勵青少年積極參與體育鍛鍊、多進行戶外活動、培養各種興趣愛好,並創造更多與家人和朋友進行面對面交流的機會,以平衡他們在螢幕上花費的時間 。</li>
  3036.  
  3037.  
  3038.  
  3039. <li><strong>家長的榜樣作用和持續對話 (Parental Role Modeling and Ongoing Dialogue):</strong> 家長應該以身作則,展現出健康的智慧型手機使用習慣,例如在陪伴孩子時放下手機,在家庭聚餐時不使用手機等 。同時,與青少年進行持續開放的對話,瞭解他們在智慧型手機使用過程中遇到的問題和挑戰,並及時給予支援和指導 。</li>
  3040. </ul>
  3041.  
  3042.  
  3043.  
  3044. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  3045.  
  3046.  
  3047.  
  3048. <h2 class="wp-block-heading">結語:陪孩子走過數位時代</h2>
  3049.  
  3050.  
  3051.  
  3052. <p>管手機不是一蹴可及,得慢慢來。了解現況、看清風險、好好聊、設好界線,再加上家長自己的示範,就能幫孩子找到平衡。我覺得,重點不是把手機從他們的手上搶走,而是教他們怎麼用得好。畢竟,這是他們的時代,我們能做的,就是陪著他們走穩這段路。</p>
  3053.  
  3054.  
  3055.  
  3056. <p></p>
  3057. ]]></content:encoded>
  3058. <wfw:commentRss>https://blog.serv.idv.tw/2025/03/nomad-teeager-smartphone-usage/feed/</wfw:commentRss>
  3059. <slash:comments>1</slash:comments>
  3060. <media:content url="https://blog.serv.idv.tw/wp-content/uploads/2025/03/Clip2Comic-2025-03-24-11-48-31.jpg" medium="image"></media:content>
  3061. <post-id xmlns="com-wordpress:feed-additions:1">7960</post-id> </item>
  3062. <item>
  3063. <title>遊民週記 48: 寫封信,給15年後的自己</title>
  3064. <link>https://blog.serv.idv.tw/2025/03/nomad-45-a-letter-to-myself/</link>
  3065. <comments>https://blog.serv.idv.tw/2025/03/nomad-45-a-letter-to-myself/#respond</comments>
  3066. <dc:creator><![CDATA[PipperL]]></dc:creator>
  3067. <pubDate>Mon, 17 Mar 2025 09:05:00 +0000</pubDate>
  3068. <category><![CDATA[遊民週記]]></category>
  3069. <category><![CDATA[nomad]]></category>
  3070. <category><![CDATA[人生]]></category>
  3071. <category><![CDATA[生涯規劃]]></category>
  3072. <guid isPermaLink="false">https://blog.serv.idv.tw/?p=7952</guid>
  3073.  
  3074. <description><![CDATA[上週看到有人在討論台灣空氣污染,說因為境外影響只有三分之一,不能怪中國。 然後有人查證如下: (來源是環境部委 ... <a title="遊民週記 48: 寫封信,給15年後的自己" class="read-more" href="https://blog.serv.idv.tw/2025/03/nomad-45-a-letter-to-myself/" aria-label="Read more about 遊民週記 48: 寫封信,給15年後的自己">閱讀全文</a>]]></description>
  3075. <content:encoded><![CDATA[
  3076. <p>上週看到有人在討論台灣空氣污染,說因為境外影響只有三分之一,不能怪中國。</p>
  3077.  
  3078.  
  3079.  
  3080. <p>然後有人查證如下: (來源是環境部委外的「<a href="https://aqmc.moenv.gov.tw/past_results_1.html">強化空氣品質模式制度建立計畫</a>」  )</p>
  3081.  
  3082.  
  3083.  
  3084. <ul class="wp-block-list">
  3085. <li>境外影響 31%</li>
  3086.  
  3087.  
  3088.  
  3089. <li>面 (行業如餐飲、揚塵) 26%</li>
  3090.  
  3091.  
  3092.  
  3093. <li>線 (交通如貨車、小客車、機車) 19%</li>
  3094.  
  3095.  
  3096.  
  3097. <li>點 (製造如鋼鐵、電力、化材) 17%</li>
  3098.  
  3099.  
  3100.  
  3101. <li>其他</li>
  3102. </ul>
  3103.  
  3104.  
  3105.  
  3106. <p>如果把2~4名 (台灣境內) 加起來,的確小於境外影響…</p>
  3107.  
  3108.  
  3109.  
  3110. <p>但說「只有三分之一」,這個「只有」恐怕很難說得過去。</p>
  3111.  
  3112.  
  3113.  
  3114. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  3115.  
  3116.  
  3117.  
  3118. <p>因為好友的介紹,看了 Angela Aki 的 《<a href="https://www.youtube.com/watch?v=siQJhIp-UTU">手紙~拜啟 給十五歲的你</a>》MV。<br></p>
  3119.  
  3120.  
  3121.  
  3122. <p>11年前的MV,在留言區有許多人用留言寫著信,給未來的自己。</p>
  3123.  
  3124.  
  3125.  
  3126. <p>回想著,30歲的時候,我想要給45歲的自己什麼話。<br>有沒有做到30歲時自己心裡的45歲…</p>
  3127.  
  3128.  
  3129.  
  3130. <p>可惜現在記不起來了。</p>
  3131.  
  3132.  
  3133.  
  3134. <p>然後想到,咦,我有日記跟 blog 啊?!</p>
  3135.  
  3136.  
  3137.  
  3138. <p>結果翻了翻… 那只是型塑了當時的我是誰,主要是當下的記錄、觀察或短期的反思,而沒有太多「當時的我」對「15年後的我」的想像和想法。 這讓我開始思考,從30歲到45歲,在這15年間,我希望自己能夠成為怎樣的人?</p>
  3139.  
  3140.  
  3141.  
  3142. <span id="more-7952"></span>
  3143.  
  3144.  
  3145.  
  3146. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  3147.  
  3148.  
  3149.  
  3150. <h2 class="wp-block-heading">寫封信,給15年後的自己</h2>
  3151.  
  3152.  
  3153.  
  3154. <p>如果拋棄現在自己的想法,套入30歲的自己,想法應該很不一樣吧。跟15歲和45歲不一樣,初入職場不久的自己,應該會把心思放在更多職業生涯的想望上。希望自己能夠達到一定的成就,追求心中對事業的熱情,不滿足於養家糊口為目標,而是自己設定了職涯的目標。而在當時的自己,也開始要面對生命中第一個孩子,對於教養,自己除了興奮和不安,也有屬於自己的期待。當然,這些期待,某些會在生命中的某些時刻幻滅 &#8212; 再重生;某些著隨著時間漸漸淡去,不知不覺被遺忘了;某些則是在攀上這個山頭之後,抬頭又朝下一個更高的山頭邁進。</p>
  3155.  
  3156.  
  3157.  
  3158. <p></p>
  3159.  
  3160.  
  3161.  
  3162. <h3 class="wp-block-heading">如果叫AI 扮演當年的我,寫一封「給15年後自己的信」,會是這樣的:</h3>
  3163.  
  3164.  
  3165.  
  3166. <blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
  3167. <p>親愛的15年後的我:</p>
  3168.  
  3169.  
  3170.  
  3171. <p>嗨,希望你還記得15年前的自己,那個在2007-2008年間忙碌於職場、部落格和社交活動的年輕人。當時的我,剛踏入職場不久,就撞上了金融海嘯和經濟大蕭條,連尾牙都取消了,還得面對無薪假的「驚喜」。不過,我那時總試著用幽默調侃這些鳥事,比如說「至少有放到假」,對吧?希望你看到這句還能會心一笑。</p>
  3172.  
  3173.  
  3174.  
  3175. <p>15年前,我在部落格上寫了一堆東西,從技術性的WordPress bug到社會事件的碎念,還有那些生活中的小確幸。比如在新竹吃到的99元火鍋麵,菜盤上竟然有兩隻草蝦,當時的我可是驚喜到差點拍手叫好。還有那些Punch Party的夜晚,雖然偶爾會分心想著別的事,但講者的故事總能戳中我,尤其是那個「一條魚一百萬」的豪氣,至今還是腦海裡的經典畫面。</p>
  3176.  
  3177.  
  3178.  
  3179. <p>職場上,我那時學到一句話:「變動是不變的常態」。人員來來去去,專案改了又改,甚至整個組織都在翻新,簡直是家常便飯。我還記得自己總在調整對「成就」的看法,試著在社會的期待和自我認知間找平衡。15年後的你,應該已經找到自己的步調了吧?不再被那些外在的框架綁得喘不過氣,我是這麼希望的。</p>
  3180.  
  3181.  
  3182.  
  3183. <p>說到社會議題,我那時挺愛關注這些事的,比如媒體報導的亂象、記者的爭議,甚至是公視能不能保持獨立性。希望15年後的社會,媒體能稍微負點責任,公權力也能多尊重人民的權利。而你呢,應該還是會保持那份關懷和批判的眼光吧?我猜你不會輕易放棄這點。</p>
  3184.  
  3185.  
  3186.  
  3187. <p>技術方面,我曾經對禁用docx的法案有點意見,覺得推自由軟體應該用更細膩的方式,而不是硬來。希望15年後的你,還是對技術有那份熱情,同時能在技術和社會間找到更好的平衡點。別忘了當初那個敲程式碼敲到半夜的自己啊。</p>
  3188.  
  3189.  
  3190.  
  3191. <p>最後,我想問問你,還記得那個耶誕夜吃薑母鴨的自己嗎?平淡卻溫暖的夜晚,沒有什麼大場面,就是簡單地吃一鍋熱湯。還有沒有在忙碌時抬頭看看天空,感受一下那種寧靜?我希望你還是能保有對生活的細膩觀察和一點幽默感,不管未來怎麼變,都能笑著面對。</p>
  3192.  
  3193.  
  3194.  
  3195. <p>期待你的回信,告訴我這15年來的故事。如果可以,順便說說你有沒有終於戒掉拖延症—雖然我覺得希望不大,哈哈。</p>
  3196.  
  3197.  
  3198.  
  3199. <p>15年前的你</p>
  3200. </blockquote>
  3201.  
  3202.  
  3203.  
  3204. <p>在這樣的思考中,我開始想像,如果30歲的我能夠對45歲的自己說些什麼,那一定是充滿期待與期望的。或許我會告訴15年後的自己,別讓歲月的流逝消磨了對夢想的熱情,無論生活多忙碌,都要記得抽出時間去探索自己的興趣與熱愛。希望自己在這15年間,能夠勇敢地面對挑戰,不斷學習與成長,保持那份對世界的好奇心。也許在這段旅程中,會遇到許多意想不到的人和事,這些經歷將成為人生中最珍貴的財富。</p>
  3205.  
  3206.  
  3207.  
  3208. <p>同時我希望自己能夠擁有一個幸福美滿的家庭,並且以身作則,把正面的價值觀傳遞給下一代。在教養孩子的過程中,不僅是傳授知識,更重要的是教會他們如何面對失敗與挫折,讓他們明白每一次跌倒都是成長的一部分。而在職場上,希望你仍然能夠堅持初心,不被浮躁的環境所影響,勇於追求真正想要的事物。</p>
  3209.  
  3210.  
  3211.  
  3212. <p>然後15年過了。</p>
  3213.  
  3214.  
  3215.  
  3216. <p>30歲時那些純真的夢想,以及那些曾經讓我微笑的小事,被遺忘了。</p>
  3217.  
  3218.  
  3219.  
  3220. <p>生活開始見招拆招。as-is 或是 沒壞就不要修,變成人生一年又一年的運轉樣態。就像是一個成熟的產業/部門一樣,開始「有經驗」,但也開始缺乏創新。對生活開始不那麼敏銳,無論是工作上的成就還是家庭生活中的點滴。</p>
  3221.  
  3222.  
  3223.  
  3224. <p>有些事情並不如預期那樣順利,每一次挑戰也不完全是成長的機會。對生活愈來愈沒有熱情,壓力的負面影響出現在健檢和生活作息的徵兆裡;面對變化不是「勇於」,而是不得不,見招拆招變成可以說嘴的常態,平衡不是刻意營造的,而是短時間出現的某個狀態;不久後,天平就會傾向另外一側。</p>
  3225.  
  3226.  
  3227.  
  3228. <p>人生是公平的。隨著山愈爬愈高,上山前的行李也愈來愈輕了;有的裝備,用掉了,有的裝備,損耗了,總覺得,應該要好好補給一下 &#8212; 或是,除了往上走之外,還有其他的選擇?</p>
  3229.  
  3230.  
  3231.  
  3232. <p></p>
  3233.  
  3234.  
  3235.  
  3236. <h3 class="wp-block-heading">那如果叫AI 扮演現在的我,寫一封「給15年後自己的信」,AI 會如何想像呢?</h3>
  3237.  
  3238.  
  3239.  
  3240. <blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
  3241. <p>親愛的15年後的我:</p>
  3242.  
  3243.  
  3244.  
  3245. <p>嗨,是我,2024年的你。希望這封信能順利抵達你的手中,讓你回想起這段「無業遊民」的日子。說真的,能寫這封信給你,我覺得挺奇妙的,就像在 Portal 遊戲裡開了一個傳送門,把現在的我送到未來的你面前。</p>
  3246.  
  3247.  
  3248.  
  3249. <p><strong>回顧2024年的點滴</strong></p>
  3250.  
  3251.  
  3252.  
  3253. <p>還記得這一年,我剛辭職,開始試著過一種沒有行事曆塞滿的生活。每天早上送小平安上學後,我倆的小儀式還是沒變:「把拔祝你一天順利!」「也祝你今天學習快樂!」不過後來我去台北參加活動時,他會改口說:「把拔祝你台北順利!」這小子真的很會變通,連我這種追劇順利、打遊戲順利的祝福都想不出來的窘境,他都能輕鬆化解。</p>
  3254.  
  3255.  
  3256.  
  3257. <p>那時候的我,每天都在探索空白時間該怎麼填滿。有時是追劇,像《美食無間》和《重啟人生》,兩天就把10集嗑完;有時是打遊戲,Portal 系列和 MOD 讓我熬夜到天亮,結果發現身體真的不如20年前,睡兩個小時就醒來,眼酸肚餓,只能再倒回床上補眠。還有一次,我把家裡的掃地機器人救出來,花了一個下午清理它的路線,看著它在地板上忙碌,心裡竟有種久違的滿足感,好像找回了當初規劃這個家的初心。</p>
  3258.  
  3259.  
  3260.  
  3261. <p>跑步還是沒放下。那次跑高雄輕軌成圓路線,24.62公里,從前鎮之星開始,逆時針跑過凱旋瑞田、籬仔內、美術館路的龍貓隧道,一路到哈瑪星。早上6點出發,天還沒亮,路燈照著自行車道,靜得讓人舒服。雖然太陽出來後熱得要命,跑到後面有點力不從心,但那種挑戰自己的感覺,真的很值得回味。不知道你現在還跑不跑?還是說,膝蓋已經開始抗議了?</p>
  3262.  
  3263.  
  3264.  
  3265. <p>還有一次去台北參加 g0v summit,見了不少有趣的人,也聽了很多精彩的演講。雖然離我的專業有點遠,但那兩天腦袋被塞滿的感覺,讓我開始思考未來的方向。我問自己:這中年 gap year,我到底想找什麼?是下一個能貢獻的地方,還是單純想讓生活慢下來?我還沒找到答案,但希望你已經有了。</p>
  3266.  
  3267.  
  3268.  
  3269. <p><strong>對你的期待與祝福</strong></p>
  3270.  
  3271.  
  3272.  
  3273. <p>15年後的我,你現在過得怎麼樣?是不是還在試著平衡生活和工作(如果還有的話)?我希望你能保持健康,畢竟跑步和整理家裡這些習慣,都是為了讓身體撐得更久一點。還有小平安,他應該已經長大成人了吧?不知道你們還會不會每天互道祝福?希望你們的關係還是像現在這樣親密,彼此支持。</p>
  3274.  
  3275.  
  3276.  
  3277. <p>如果可以,我希望你還在享受生活中的小確幸。或許是跑步時偶遇一場日出,或是家裡的掃地機器人依然勤奮工作,甚至是找到一台老舊電腦,重溫 Portal 2 的解謎樂趣。這些小事,聽起來不起眼,但卻是我現在覺得最珍貴的東西。</p>
  3278.  
  3279.  
  3280.  
  3281. <p>說到未來,我有點好奇你怎麼看待這段「無業遊民」的日子。當初離開公司時,同學們還笑說我會不會後悔,但我想試試看,用一兩年的時間去體驗不一樣的生活。現在的你,會不會覺得這決定很值得?還是說,會翻個白眼,覺得當時的我太天真?</p>
  3282.  
  3283.  
  3284.  
  3285. <p><strong>最後的叮嚀</strong></p>
  3286.  
  3287.  
  3288.  
  3289. <p>無論如何,別忘了留點時間給家人,也留點時間給自己。就像我在《遊民週記》裡寫的:「一切都好是沒錯,但我還想知道時間還能告訴我什麼。」希望你已經找到屬於你的答案,而不是被房貸、消費,或是社會的眼光卡住。</p>
  3290.  
  3291.  
  3292.  
  3293. <p>祝你一切順利,生活愉快。期待有一天,能透過這封信,和你好好聊聊這15年的故事。<br>2024年的我</p>
  3294. </blockquote>
  3295.  
  3296.  
  3297.  
  3298. <p>看出套路了沒有?</p>
  3299.  
  3300.  
  3301.  
  3302. <p>這兩封信裡的「未來」,把15年改成10年,改成5年,可能都沒有什麼太大的改變。</p>
  3303.  
  3304.  
  3305.  
  3306. <p>於是,我提醒AI 要考慮年齡、人生階段、跟孩子的成長。<br>收到的信如下:</p>
  3307.  
  3308.  
  3309.  
  3310. <blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
  3311. <p>親愛的15年後的我,</p>
  3312.  
  3313.  
  3314.  
  3315. <p>嘿,未來的我!希望這封信能在你翻閱舊日記時,帶給你一抹微笑和一點溫暖。現在的我,正在2025年的春天,坐在新竹的家中,試著想像15年後的你是什麼模樣。15年後,你已經60幾歲了,孩子可能已經上大學,生活應該有了不小的改變。但我相信,有些東西是不會變的,比如我們對跑步的熱愛、對技術的好奇、對家庭的關心,還有對社會的參與。</p>
  3316.  
  3317.  
  3318.  
  3319. <p><strong>回顧過去15年的生活</strong></p>
  3320.  
  3321.  
  3322.  
  3323. <p>我想,這15年你一定經歷了不少挑戰和轉變。還記得高雄輕軌沿線的跑步路線嗎?那條「成圓」的輕軌,現在應該更完善了吧。或許你已經不滿足於城市裡的自行車道,開始挑戰更遠的山林小徑,甚至偶爾跑個半馬,回味當年的體力。雖然你可能會笑著說:「哎呀,跑得太慢了,體力衰退得有點明顯!」但我知道,你還是會享受跑完後那種大汗淋漓的平靜。</p>
  3324.  
  3325.  
  3326.  
  3327. <p>技術方面,15年後的世界肯定變得更誇張。當年我在Kodi裡折騰自動選繁中字幕的日子,現在看來可能像在玩古董。你應該還是保持著對新技術的好奇吧?或許你已經學會用最新的AI工具,甚至自己寫點小程式解決生活問題。我猜,你偶爾還是會自嘲:「這些新玩意兒,比我當年debug還麻煩!」</p>
  3328.  
  3329.  
  3330.  
  3331. <p>家庭生活呢?孩子已經長大,可能正在大學裡探索自己的路。每天早上送孩子上學的祝福——「把拔祝你上班順利!」「也祝你今天OO課快樂!」——早已成為回憶。你可能會覺得有點空虛,但更多的是為孩子的獨立感到驕傲。偶爾接到孩子從宿舍打來的電話,聽他聊聊大學生活,你會不會偷偷懷念他當年在家鬧騰的日子?</p>
  3332.  
  3333.  
  3334.  
  3335. <p>社會參與方面,你應該不再只是看熱鬧了吧。像「517事件」這樣的爭議,15年後或許已經有答案,你可能用自己的經驗和智慧,為社區或社會貢獻了一點力氣。或許你會參加公民活動,甚至寫寫文章分享看法,繼續當個「鍵盤遊民」。</p>
  3336.  
  3337.  
  3338.  
  3339. <p><strong>15年後可能的生活挑戰</strong></p>
  3340.  
  3341.  
  3342.  
  3343. <p>到了60歲,退休應該是個大課題。你當年在《遊民週記》裡嚮往的自由日子,現在過得如何?是如願過著「耍廢、追劇、跑步」的悠閒生活,還是發現自己閒不住,又找了些新計畫填滿行事曆?我猜,你可能會有點掙扎——既想好好休息,又怕日子太空虛。畢竟,當年的我已經有點「行事曆焦慮」,總想把空白時間塞滿。</p>
  3344.  
  3345.  
  3346.  
  3347. <p>孩子的成長也可能帶來新挑戰。他們上了大學,可能開始談戀愛、規劃未來,甚至偶爾跟你頂嘴。你會不會有點擔心他們的選擇,又不好意思管太多?還有技術的變化,15年後,可能連基本工具都跟不上你的習慣,你會不會偶爾抱怨:「這些新東西怎麼這麼難用啊?」</p>
  3348.  
  3349.  
  3350.  
  3351. <p>健康也是得面對的事。跑步雖然能保持體力,但60歲的你,可能得更小心膝蓋和腰椎。或許你會開始試試太極或瑜伽,還不忘自嘲:「這比跑輕軌沿線還累!」</p>
  3352.  
  3353.  
  3354.  
  3355. <p><strong>對未來的期待和希望</strong></p>
  3356.  
  3357.  
  3358.  
  3359. <p>未來的我,我希望你能保持健康,繼續跑步,不只是為了身體,更是為了享受大自然的美好。技術上,別放棄學習新東西,哪怕只是滿足好奇心——就像當年搞定Kodi字幕一樣,給自己一點成就感。陪伴家人,哪怕孩子已經獨立,還是多打電話聊聊,分享生活的點滴。社會參與呢?如果還有力氣,就繼續貢獻一點經驗吧,哪怕只是幫社區解決個小問題。</p>
  3360.  
  3361.  
  3362.  
  3363. <p>最重要的是,保持年輕的心態。60歲不是終點,而是另一個起點。或許你會笑著看這封信,覺得當年的我有點天真,但也挺可愛。無論未來遇到什麼,記得用我們一貫的樂觀和幽默去面對——就像跑步時被輕軌超車,還能自嘲:「好吧,至少我還有雙腿!」<br>結語</p>
  3364.  
  3365.  
  3366.  
  3367. <p>期待與你見面,未來的我。祝你健康快樂,日子過得充實又自在。15年後的你,應該會比現在的我更懂得享受生活吧?我相信你會。</p>
  3368.  
  3369.  
  3370.  
  3371. <p>2025年的我 敬上</p>
  3372. </blockquote>
  3373.  
  3374.  
  3375.  
  3376. <p>嗯…. 有點樣子,但還是不太行。AI 也許對於短暫的未來可以推論或是預測,但是太長久未來的事物發展,在沒有先例文獻的情況之下(個人的發展不一定有文獻可遵循) ,應該不容易「預測」。</p>
  3377.  
  3378.  
  3379.  
  3380. <p>更何況,他 based 只是兩年的對外公開文章。也許這些資料,可以讓AI 對這個人有一定程度的了解,但這個人心裡對15年後未來的想望&#8230;. 太難為 AI 了。</p>
  3381.  
  3382.  
  3383.  
  3384. <p></p>
  3385.  
  3386.  
  3387.  
  3388. <p>我還是自己寫一封好了。</p>
  3389.  
  3390.  
  3391.  
  3392. <p></p>
  3393.  
  3394.  
  3395.  
  3396. <p></p>
  3397.  
  3398.  
  3399.  
  3400. <p></p>
  3401. ]]></content:encoded>
  3402. <wfw:commentRss>https://blog.serv.idv.tw/2025/03/nomad-45-a-letter-to-myself/feed/</wfw:commentRss>
  3403. <slash:comments>0</slash:comments>
  3404. <media:content url="https://blog.serv.idv.tw/wp-content/uploads/2025/03/840726611385953156.png" medium="image"></media:content>
  3405. <post-id xmlns="com-wordpress:feed-additions:1">7952</post-id> </item>
  3406. <item>
  3407. <title>遊民週記 47: 如何設計收益護盾以抵禦市場風險</title>
  3408. <link>https://blog.serv.idv.tw/2025/03/nomad-47-income-shield-ymag/</link>
  3409. <comments>https://blog.serv.idv.tw/2025/03/nomad-47-income-shield-ymag/#respond</comments>
  3410. <dc:creator><![CDATA[PipperL]]></dc:creator>
  3411. <pubDate>Mon, 10 Mar 2025 09:05:00 +0000</pubDate>
  3412. <category><![CDATA[FIRE.理財]]></category>
  3413. <category><![CDATA[遊民週記]]></category>
  3414. <category><![CDATA[FIRE]]></category>
  3415. <category><![CDATA[nomad]]></category>
  3416. <category><![CDATA[收益護盾]]></category>
  3417. <category><![CDATA[現金流管理]]></category>
  3418. <category><![CDATA[風險控制]]></category>
  3419. <category><![CDATA[高收益期權ETF]]></category>
  3420. <guid isPermaLink="false">https://blog.serv.idv.tw/?p=7928</guid>
  3421.  
  3422. <description><![CDATA[本週終於拿到兩個孩子的護照,前前後後花了一個月有。只能說公家機關 + 孩子本人 + 照片限制 真的花時間。尤其 ... <a title="遊民週記 47: 如何設計收益護盾以抵禦市場風險" class="read-more" href="https://blog.serv.idv.tw/2025/03/nomad-47-income-shield-ymag/" aria-label="Read more about 遊民週記 47: 如何設計收益護盾以抵禦市場風險">閱讀全文</a>]]></description>
  3423. <content:encoded><![CDATA[
  3424. <p>本週終於拿到兩個孩子的護照,前前後後花了一個月有。只能說公家機關 + 孩子本人 + 照片限制 真的花時間。尤其是照片,電腦上看起來沒問題的,便利商店輸出就 degrade 一次,經過戶政事務所的掃瞄器又會再 degrade 一次。這時就羨慕身份證辦理可以直接上傳照片。</p>
  3425.  
  3426.  
  3427.  
  3428. <p>其實護照的照片也是可以用上傳的方式繳交。只是得要到外交部親辦才行。在戶政事務所送件的還不行。<br>有趣的是, 在戶政事務所辦身份證的話,是可以用上傳的方式繳交照片的。<br>在這樣繁瑣的行政流程中,時間就是這樣子消耗的。還好,我不急,可以等,只是不耐煩。</p>
  3429.  
  3430.  
  3431.  
  3432. <span id="more-7928"></span>
  3433.  
  3434.  
  3435.  
  3436. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  3437.  
  3438.  
  3439.  
  3440. <h2 class="wp-block-heading">收益護盾的再思考</h2>
  3441.  
  3442.  
  3443.  
  3444. <p>最近拿到了 FTX 的還款,想一想,決定拿去放在 SGOV or YMAG,讓自己在現金流上更舒服一點。但一查,手上的 YMAG 持續淨值耗損,目前已經 -15%。的確,在下行或是熊市的行情中,作為收益護盾的角色,為了在下跌時不賣掉本股的前提,同時提供生活費,淨值耗損應該是要發生的 (用現金流+淨值耗損取代拋售股票)。但淨值耗損過多,一定也會影響配息。即使配息率 (殖利率) 保持不變,但本金(淨值)變少,拿到的配息也會變少。</p>
  3445.  
  3446.  
  3447.  
  3448. <p>那麼,高收益期權ETF (如YMAG) 仍舊適合作為收益護盾嗎?還是說,有其他更適合的工具? 我試著用AI作為研究工具,找了 chatGPT、deepseek、以及 grok 來問。</p>
  3449.  
  3450.  
  3451.  
  3452. <p>主要問題有以下幾個:</p>
  3453.  
  3454.  
  3455.  
  3456. <ul class="wp-block-list">
  3457. <li>什麼是 FIRE 相關著作中的「收益護盾」?</li>
  3458.  
  3459.  
  3460.  
  3461. <li>如果使用高收益期權 ETF (例如 YMAG) 作為收益護盾,有什麼優點和缺點?</li>
  3462.  
  3463.  
  3464.  
  3465. <li>高收益期權 ETF(例如 YMAG)的特性有哪些符合「收益護盾」的定義和需求? 哪些不符合?</li>
  3466.  
  3467.  
  3468.  
  3469. <li>使用高收益期權 ETF(例如 YMAG)作為收益護盾的實際案例</li>
  3470.  
  3471.  
  3472.  
  3473. <li>有其他的 ETF 更適合作為收益護盾嗎?</li>
  3474. </ul>
  3475.  
  3476.  
  3477.  
  3478. <p>在過程中,AI 的回答雖然省去了「統整」的時間,但內容的幻覺和平庸不夠深入的缺點卻依然存在。常常是幾個資料來源或是論點在反覆陳述。如果牽涉到計算的話,還會出錯或前後矛盾。目前我還是把它們當作小助理找資料跟初步整理後的資訊。那種前後矛盾或是明顯出錯的,我就直接丟掉了。但去掉錯誤的地方,並且自己再稍微檢索並統整之後,我自己仍然有機會歸納並建立屬於自己的觀點。</p>
  3479.  
  3480.  
  3481.  
  3482. <p>以下是我的筆記。</p>
  3483.  
  3484.  
  3485.  
  3486. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  3487.  
  3488.  
  3489.  
  3490. <h3 class="wp-block-heading">收益護盾的核心目的:</h3>
  3491.  
  3492.  
  3493.  
  3494. <ul class="wp-block-list">
  3495. <li><strong>緩衝短期市場風險</strong>:避免因市場下跌時被迫賤賣資產(如股票),導致投資組合永久性虧損。</li>
  3496.  
  3497.  
  3498.  
  3499. <li><strong>維持心理穩定</strong>:通過穩定的現金流減少對市場波動的焦慮,避免情緒化操作。</li>
  3500.  
  3501.  
  3502.  
  3503. <li><strong>支撐長期資產增長</strong>:讓高風險、高成長的資產(如股票指數基金)有更長時間複利增值,無需因短期提款需求而中斷。</li>
  3504. </ul>
  3505.  
  3506.  
  3507.  
  3508. <p>其中第一點在4%提領的前期 (aka 前五年) 特別重要。可以google &#8220;<a href="https://www.google.com/search?client=firefox-b-d&amp;q=%E5%A0%B1%E9%85%AC%E9%A0%86%E5%BA%8F%E9%A2%A8%E9%9A%AA">報酬順序風險</a>&#8221; (Sequence of Risk)<br>第二點的主要目的是讓我的心情舒服一點。<br>第三點也算是報酬順序風險 的延伸。</p>
  3509.  
  3510.  
  3511.  
  3512. <h3 class="wp-block-heading">建構收益護盾: (可參考 Three-Bucket Strategy)</h3>
  3513.  
  3514.  
  3515.  
  3516. <ul class="wp-block-list">
  3517. <li>短期 1~2年:現金 / 短債 (SGOV)</li>
  3518.  
  3519.  
  3520.  
  3521. <li>中期 3-5年:債券或分紅型資產,提供穩定現金流 (YMAG)</li>
  3522. </ul>
  3523.  
  3524.  
  3525.  
  3526. <p>由於手上已經有現金跟緊急預備金,所以跟提領順序很接近,短期提領會使用現金,然後是 SGOV + YMAG 的配息現金流。這樣子應該可以撐到第2年。如果景氣沒回來,長期資產沒有回報可以提領,那麼第3年~第5年,就靠 提領 SGOV 跟 YMAG 的本金。我期望護盾設計最少要能撐5年才消耗殆盡。我個人稱之為「5Y緩衝基金」。</p>
  3527.  
  3528.  
  3529.  
  3530. <ul class="wp-block-list">
  3531. <li><mark style="background-color:#ffff00" class="has-inline-color has-contrast-color">YMAG 的目的是提供高現金流,減少要賣出核心資產的機會</mark>。
  3532. <ul class="wp-block-list">
  3533. <li><strong>不能拿來當作Barista FIRE 的年收</strong>。因為這現金流大部份是來自淨值耗損。只是「領出/變現」而不是「賺錢」。</li>
  3534.  
  3535.  
  3536.  
  3537. <li><strong>不能拿來當作長期高報酬的投資</strong>、也不要像某些群組把它當成要「回本」的操作。這玩意的摩擦力不小,在牛市或是熊市的長期報酬跟風險 (淨值或是含息報酬或是DRIP) 都不如原始股或是ETF。其中配息預扣30% 跟 高額的管理費 都是重要的摩擦力來源。</li>
  3538.  
  3539.  
  3540.  
  3541. <li><strong>不要聽信「我每個月配息X%,Y個月就回本」「目前回本率 XX %」</strong>。那些是思考的誤區。<br>如果淨值損耗 > 配息,配了80%的配息給你 (回本80%了!),本金淨值剩10%,這樣有回本的一天嗎?<br>那還不如我放活存,每個月從本金拿10%給你,10個月後你就喜滋滋地說「耶~我回本了~~」,戶頭裡還有剩一些利息可以給你…</li>
  3542.  
  3543.  
  3544.  
  3545. <li><strong>不要手動 DRIP</strong>:有人想,那我領出來的配息不要花,再投入 (手動DRIP) 繼續錢滾錢利滾錢。啊你的配息先被扣30%之後再投入,為什麼不選不配息直接在裡頭滾的?</li>
  3546.  
  3547.  
  3548.  
  3549. <li>如果拿來當 5Y 緩衝基金,要注意淨值耗損過多時,會影響配息 (即使殖利率不變)。耗損愈多,能產生的現金流愈小。這跟理想的收益護盾還是有落差。</li>
  3550.  
  3551.  
  3552.  
  3553. <li><strong>情緒價值點滿</strong>:每個月看到現金出現在戶頭會比較安心。</li>
  3554.  
  3555.  
  3556.  
  3557. <li>可以抵銷小漲小跌的波動。但因為不是殺進殺出,對我的幫助有限。而且若在小漲小跌中期權的操作有獲利,扣掉管理費後還剩多少,我不知道。</li>
  3558.  
  3559.  
  3560.  
  3561. <li>AI 建議 YMAG 占護盾 20~30%。我自己找不到理由支持這個說法。</li>
  3562. </ul>
  3563. </li>
  3564.  
  3565.  
  3566.  
  3567. <li>收益護盾的核心是「風險隔離」,而非追求最高報酬。
  3568. <ul class="wp-block-list">
  3569. <li>對抗「報酬順序風險」:退休初期若遭遇市場大幅下跌,且需從投資組合提款,可能導致本金過早耗盡。收益護盾設計的核心功能是 <strong>隔離此風險</strong>。但「淨值不耗損」是理想狀態,現實無法這麼理想。</li>
  3570.  
  3571.  
  3572.  
  3573. <li>如果要「不售出/提領投資部位 (含長期和護盾)」 ,目前的架構(護盾)能力如下:
  3574. <ul class="wp-block-list">
  3575. <li>使用備用現金,可提供 12個月的護盾。</li>
  3576.  
  3577.  
  3578.  
  3579. <li>使用 SGOV,可以多提供6個月的護盾。</li>
  3580.  
  3581.  
  3582.  
  3583. <li>使用 YMAG,可以用配息多提供 3個月的護盾。</li>
  3584. </ul>
  3585. </li>
  3586.  
  3587.  
  3588.  
  3589. <li>提供(相對)穩定現金流:用 YMAG 的配息補充現金 (或SGOV )的不足。在下行階段用淨值耗損去換取現金流,待上行/長期恢復淨值 (但整體成長會不如原型股)</li>
  3590.  
  3591.  
  3592.  
  3593. <li>很明顯地,如果堅持不售出/提領投資部份,現有的護盾只能撐21個月,離目標5年 (60個月) 還蠻遠的。所以退而求其次,不堅持護盾不耗損,而把目標設定在「五年後護盾消耗殆盡」。</li>
  3594. </ul>
  3595. </li>
  3596.  
  3597.  
  3598.  
  3599. <li>如果接受護盾的本金和淨值可以損耗,那麼可以重新定義並估計收益護盾如下:</li>
  3600. </ul>
  3601.  
  3602.  
  3603.  
  3604. <h3 class="wp-block-heading">重新定義並估計收益護盾</h3>
  3605.  
  3606.  
  3607.  
  3608. <ul class="wp-block-list">
  3609. <li>收益護盾是總資產中的一個part ,不必獨立。 (ie. 資產配置中的一部份)</li>
  3610.  
  3611.  
  3612.  
  3613. <li>資產配置必須提供 5年 不會動用到長期資產的能力。稱之5Y緩衝能力。</li>
  3614.  
  3615.  
  3616.  
  3617. <li>可作為年度支出 (4%提領) 的一部份。以緩衝倍數(現金流/年開支) 來評估。如果&gt;1.0,則可視為健康。若 &gt;1.2,則是非常健康。如果作不到 (&lt;1.0),那麼退而求其次,只能動用到短期投資資產。</li>
  3618.  
  3619.  
  3620.  
  3621. <li>5Y緩衝能力= 備用現金 + 定存 + 台股年股息 x5 + 護盾ETF年配息 x5 + 護盾本金 &#8211; 護盾淨值耗損</li>
  3622.  
  3623.  
  3624.  
  3625. <li>現金流 = 台股股息 + 收益護盾ETF配息</li>
  3626.  
  3627.  
  3628.  
  3629. <li>緩衝倍數 = 現金流 / 年度支出 </li>
  3630. </ul>
  3631.  
  3632.  
  3633.  
  3634. <h3 class="wp-block-heading">計算結果:</h3>
  3635.  
  3636.  
  3637.  
  3638. <ul class="wp-block-list">
  3639. <li>備用現金+定存 :8.5 個月</li>
  3640.  
  3641.  
  3642.  
  3643. <li>台股股息 x 5年:21.5個月 (假設配息不變,但熊市時配息可能會下降)</li>
  3644.  
  3645.  
  3646.  
  3647. <li>SGOV 配息 x5年:1個月</li>
  3648.  
  3649.  
  3650.  
  3651. <li>YMAG 配息 x5 年:20個月 (假設配息不變,但淨值耗損後配息可能會下降)</li>
  3652.  
  3653.  
  3654.  
  3655. <li>SGOV 本金:5個月</li>
  3656.  
  3657.  
  3658.  
  3659. <li>YMAG 本金:20個月</li>
  3660.  
  3661.  
  3662.  
  3663. <li>YMAG 淨值耗損 (設定 耗損75%,只剩25%): &#8211; 15個月</li>
  3664. </ul>
  3665.  
  3666.  
  3667.  
  3668. <p>這樣子算起來有61個月,正好低空飛過護盾5年 (60個月)的目標。</p>
  3669.  
  3670.  
  3671.  
  3672. <h3 class="wp-block-heading">計算過程中發現的風險:</h3>
  3673.  
  3674.  
  3675.  
  3676. <ul class="wp-block-list">
  3677. <li>年度現金流還是有缺口的。緩衝倍數 =0.70。也就是說每年還是要想辦法生出另外 30% 的提領作為現金流。<br>白話說,還是要從投資組合中提款。只是說要提的錢比較少,可以從台股一些成長性較低的股票作為提領。這部份目前還算是有額外的緩衝。</li>
  3678.  
  3679.  
  3680.  
  3681. <li>要用到收益護盾的時候,台股跟 YMAG 的配息可能都會下降。這樣一來導致護盾的防護力下降。白話說,這護盾在熊市時防護能力也會被影響,只是減少衝擊,不能100%隔離風險。</li>
  3682.  
  3683.  
  3684.  
  3685. <li>如果台股中一些較高配息的股票被賣掉,台股的部位會逐漸減少,也會減少股息。</li>
  3686.  
  3687.  
  3688.  
  3689. <li>一旦投資組合有獲利,就要趕快把護盾的缺口補上。不然到後期護盾的損耗會加速 (惡性循環)。</li>
  3690.  
  3691.  
  3692.  
  3693. <li>備用現金同時作為緊急預備金,萬一備用現金用完的同時,又發生緊急的情況,就需要馬上變賣股票或是SGOV 來取得現金。</li>
  3694.  
  3695.  
  3696.  
  3697. <li>這樣配置 SGOV+ YMAG 占總資產已經到達 8.3%,比我預期的來得高。</li>
  3698. </ul>
  3699.  
  3700.  
  3701.  
  3702. <h3 class="wp-block-heading">AI 的建議操作:</h3>
  3703.  
  3704.  
  3705.  
  3706. <ul class="wp-block-list">
  3707. <li>設定「淨值耗損上限」:
  3708. <ul class="wp-block-list">
  3709. <li>據風險容忍度,規定護盾層各資產的最大跌幅:
  3710. <ul class="wp-block-list">
  3711. <li>現金層:0% 耗損(絕對保本)。 ==&gt; 定存可達標</li>
  3712.  
  3713.  
  3714.  
  3715. <li>債券層:≤10% 淨值波動。 ==&gt; SGOV 可達標</li>
  3716.  
  3717.  
  3718.  
  3719. <li>收益增強層(如優先股):≤15% 淨值波動。 ==&gt;YMAG 可作為參考。但15% 可能太樂觀了,我目前先設定 75% XD</li>
  3720. </ul>
  3721. </li>
  3722.  
  3723.  
  3724.  
  3725. <li>現金流緩衝倍數 = (護盾現金流/年開支)
  3726. <ul class="wp-block-list">
  3727. <li>倍數建議 &gt;1</li>
  3728.  
  3729.  
  3730.  
  3731. <li>目前 0.7</li>
  3732.  
  3733.  
  3734.  
  3735. <li>差值目前由 4%賣股來補充,以賣台股優先。</li>
  3736. </ul>
  3737. </li>
  3738. </ul>
  3739. </li>
  3740.  
  3741.  
  3742.  
  3743. <li>收益護盾必須要做到淨值不耗損嗎?
  3744. <ul class="wp-block-list">
  3745. <li>收益護盾不必做到「淨值絕對不耗損」,但需符合兩大原則:
  3746. <ol class="wp-block-list">
  3747. <li><strong>分層風險控制</strong>:短期層(1-2 年)嚴格保本,中期層(3-5 年)有限波動,長期層(5+ 年)接受更高風險。</li>
  3748.  
  3749.  
  3750.  
  3751. <li><strong>現金流安全邊際</strong>:護盾總現金流應至少覆蓋 120% 開支需求,以緩衝淨值波動的影響。 (這個目前還沒辦法。)</li>
  3752. </ol>
  3753. </li>
  3754. </ul>
  3755. </li>
  3756. </ul>
  3757.  
  3758.  
  3759.  
  3760. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  3761.  
  3762.  
  3763.  
  3764. <h3 class="wp-block-heading">參考資料:其他適合作為收益護盾的工具</h3>
  3765.  
  3766.  
  3767.  
  3768. <p>我請AI 建議了其他適合作為收益護盾的工具,但目前為止沒有讓我覺得更好,想要馬上換過去的。有需要的人可以參考,但內容可能有幻覺,請小心:</p>
  3769.  
  3770.  
  3771.  
  3772. <details class="wp-block-details is-layout-flow wp-block-details-is-layout-flow"><summary>Deepseek 推薦的 ETF選項</summary>
  3773. <p></p>
  3774.  
  3775.  
  3776.  
  3777. <ol class="wp-block-list">
  3778. <li><strong>Vanguard High Dividend Yield ETF (VYM)</strong>
  3779. <ul class="wp-block-list">
  3780. <li><strong>費用率</strong>:0.06%(極低)。</li>
  3781.  
  3782.  
  3783.  
  3784. <li><strong>概述</strong>:此 ETF 追蹤高股息收益率的美國股票,指標為 FTSE 高股息收益率指數。</li>
  3785.  
  3786.  
  3787.  
  3788. <li><strong>收益率</strong>:約 2.5% &#8211; 3%(視市場情況而定)。</li>
  3789.  
  3790.  
  3791.  
  3792. <li><strong>優勢</strong>:
  3793. <ul class="wp-block-list">
  3794. <li>提供穩定的股息收入。</li>
  3795.  
  3796.  
  3797.  
  3798. <li>低費用率,有效提升長期回報。</li>
  3799.  
  3800.  
  3801.  
  3802. <li>投資於財務穩健的公司。</li>
  3803. </ul>
  3804. </li>
  3805.  
  3806.  
  3807.  
  3808. <li><strong>限制</strong>:主要集中於美國市場,缺乏國際分散。</li>
  3809.  
  3810.  
  3811.  
  3812. <li><strong>適合性</strong>:適合追求低成本和穩定收入的投資者,是收益護盾的理想選擇之一。</li>
  3813. </ul>
  3814. </li>
  3815.  
  3816.  
  3817.  
  3818. <li><strong>Schwab U.S. Dividend Equity ETF (SCHD)</strong>
  3819. <ul class="wp-block-list">
  3820. <li><strong>概述</strong>:投資於美國高股息股票,篩選標準包括股息增長和財務健康。</li>
  3821.  
  3822.  
  3823.  
  3824. <li><strong>費用率</strong>:0.06%(極低)。</li>
  3825.  
  3826.  
  3827.  
  3828. <li><strong>收益率</strong>:約 3% &#8211; 3.5%。</li>
  3829.  
  3830.  
  3831.  
  3832. <li><strong>優勢</strong>:
  3833. <ul class="wp-block-list">
  3834. <li>穩定的股息收入,歷史表現優異。</li>
  3835.  
  3836.  
  3837.  
  3838. <li>低費用率,適合長期持有。</li>
  3839.  
  3840.  
  3841.  
  3842. <li>聚焦於高質量公司,有助於保護本金。</li>
  3843. </ul>
  3844. </li>
  3845.  
  3846.  
  3847.  
  3848. <li><strong>限制</strong>:同樣集中於美國市場。</li>
  3849.  
  3850.  
  3851.  
  3852. <li><strong>適合性</strong>:與 VYM 類似,適合尋求穩定現金流和低成本的投資者。</li>
  3853. </ul>
  3854. </li>
  3855.  
  3856.  
  3857.  
  3858. <li><strong>Vanguard Total Bond Market ETF (BND)</strong>
  3859. <ul class="wp-block-list">
  3860. <li><strong>概述</strong>:追蹤美國投資級債券市場,提供廣泛的債券曝光。</li>
  3861.  
  3862.  
  3863.  
  3864. <li><strong>費用率</strong>:0.04%(極低)。</li>
  3865.  
  3866.  
  3867.  
  3868. <li><strong>收益率</strong>:約 2.5%(隨利率變動)。</li>
  3869.  
  3870.  
  3871.  
  3872. <li><strong>優勢</strong>:
  3873. <ul class="wp-block-list">
  3874. <li>低風險,提供穩定的收入。</li>
  3875.  
  3876.  
  3877.  
  3878. <li>極低的費用率。</li>
  3879.  
  3880.  
  3881.  
  3882. <li>在股市下跌時能有效保護本金。</li>
  3883. </ul>
  3884. </li>
  3885.  
  3886.  
  3887.  
  3888. <li><strong>限制</strong>:
  3889. <ul class="wp-block-list">
  3890. <li>收益率較低。</li>
  3891.  
  3892.  
  3893.  
  3894. <li>對利率上升敏感,可能影響短期回報。</li>
  3895. </ul>
  3896. </li>
  3897.  
  3898.  
  3899.  
  3900. <li><strong>適合性</strong>:適合風險厭惡的投資者,尤其是希望降低波動性的退休人士。</li>
  3901. </ul>
  3902. </li>
  3903.  
  3904.  
  3905.  
  3906. <li><strong>SPDR S&amp;P Dividend ETF (SDY)</strong>
  3907. <ul class="wp-block-list">
  3908. <li><strong>概述</strong>:追蹤 S&amp;P 高收益股息貴族指數,投資於連續 20 年提高股息的美國公司。</li>
  3909.  
  3910.  
  3911.  
  3912. <li><strong>費用率</strong>:0.35%(相對較高)。</li>
  3913.  
  3914.  
  3915.  
  3916. <li><strong>收益率</strong>:約 2.5% &#8211; 3%。</li>
  3917.  
  3918.  
  3919.  
  3920. <li><strong>優勢</strong>:
  3921. <ul class="wp-block-list">
  3922. <li>極為穩定的股息收入,歷史悠久。</li>
  3923.  
  3924.  
  3925.  
  3926. <li>長期表現良好,有助於保護本金。</li>
  3927. </ul>
  3928. </li>
  3929.  
  3930.  
  3931.  
  3932. <li><strong>限制</strong>:
  3933. <ul class="wp-block-list">
  3934. <li>費用率較高。</li>
  3935.  
  3936.  
  3937.  
  3938. <li>集中於美國市場。</li>
  3939. </ul>
  3940. </li>
  3941.  
  3942.  
  3943.  
  3944. <li><strong>適合性</strong>:適合願意支付稍高費用以換取長期穩定股息的投資者。<br></li>
  3945.  
  3946.  
  3947.  
  3948. <li>除了上述核心選項外,以下 ETF 也可能作為收益護盾的補充,特別是在分散風險或追求更高收益時:</li>
  3949.  
  3950.  
  3951.  
  3952. <li></li>
  3953. </ul>
  3954. </li>
  3955.  
  3956.  
  3957.  
  3958. <li><strong>Global X SuperDividend ETF (SDIV)</strong>
  3959. <ul class="wp-block-list">
  3960. <li><strong>概述</strong>:投資於全球高股息股票,涵蓋多個國家和行業。</li>
  3961.  
  3962.  
  3963.  
  3964. <li><strong>費用率</strong>:0.58%。</li>
  3965.  
  3966.  
  3967.  
  3968. <li><strong>收益率</strong>:約 10%。</li>
  3969.  
  3970.  
  3971.  
  3972. <li><strong>優勢</strong>:
  3973. <ul class="wp-block-list">
  3974. <li>高收益率,適合追求收入的投資者。</li>
  3975.  
  3976.  
  3977.  
  3978. <li>全球分散,降低單一市場風險。</li>
  3979. </ul>
  3980. </li>
  3981.  
  3982.  
  3983.  
  3984. <li><strong>限制</strong>:
  3985. <ul class="wp-block-list">
  3986. <li>風險較高,股息可持續性存疑。</li>
  3987.  
  3988.  
  3989.  
  3990. <li>費用率偏高。</li>
  3991. </ul>
  3992. </li>
  3993.  
  3994.  
  3995.  
  3996. <li><strong>適合性</strong>:適合能承受較高風險並希望全球分散的投資者,但需謹慎評估。</li>
  3997. </ul>
  3998. </li>
  3999.  
  4000.  
  4001.  
  4002. <li><strong>iShares Preferred and Income Securities ETF (PFF)</strong>
  4003. <ul class="wp-block-list">
  4004. <li><strong>概述</strong>:投資於優先股,提供高收益。</li>
  4005.  
  4006.  
  4007.  
  4008. <li><strong>費用率</strong>:0.46%。</li>
  4009.  
  4010.  
  4011.  
  4012. <li><strong>收益率</strong>:約 6%。</li>
  4013.  
  4014.  
  4015.  
  4016. <li><strong>優勢</strong>:
  4017. <ul class="wp-block-list">
  4018. <li>高收益,相對穩定。</li>
  4019. </ul>
  4020. </li>
  4021.  
  4022.  
  4023.  
  4024. <li><strong>限制</strong>:
  4025. <ul class="wp-block-list">
  4026. <li>集中於金融行業,風險較高。</li>
  4027.  
  4028.  
  4029.  
  4030. <li>費用率中等。</li>
  4031. </ul>
  4032. </li>
  4033.  
  4034.  
  4035.  
  4036. <li><strong>適合性</strong>:適合追求高收益但能接受行業集中風險的投資者。</li>
  4037. </ul>
  4038. </li>
  4039. </ol>
  4040.  
  4041.  
  4042.  
  4043. <p>除了上述核心選項外,以下 ETF 也可能作為收益護盾的補充,特別是在分散風險或追求更高收益時:</p>
  4044.  
  4045.  
  4046.  
  4047. <ol class="wp-block-list">
  4048. <li><strong>Global X SuperDividend ETF (SDIV)</strong>
  4049. <ul class="wp-block-list">
  4050. <li><strong>概述</strong>:投資於全球高股息股票,涵蓋多個國家和行業。</li>
  4051.  
  4052.  
  4053.  
  4054. <li><strong>費用率</strong>:0.58%。</li>
  4055.  
  4056.  
  4057.  
  4058. <li><strong>收益率</strong>:約 10%。</li>
  4059.  
  4060.  
  4061.  
  4062. <li><strong>優勢</strong>:
  4063. <ul class="wp-block-list">
  4064. <li>高收益率,適合追求收入的投資者。</li>
  4065.  
  4066.  
  4067.  
  4068. <li>全球分散,降低單一市場風險。</li>
  4069. </ul>
  4070. </li>
  4071.  
  4072.  
  4073.  
  4074. <li><strong>限制</strong>:
  4075. <ul class="wp-block-list">
  4076. <li>風險較高,股息可持續性存疑。</li>
  4077.  
  4078.  
  4079.  
  4080. <li>費用率偏高。</li>
  4081. </ul>
  4082. </li>
  4083.  
  4084.  
  4085.  
  4086. <li><strong>適合性</strong>:適合能承受較高風險並希望全球分散的投資者,但需謹慎評估。</li>
  4087. </ul>
  4088. </li>
  4089.  
  4090.  
  4091.  
  4092. <li><strong>iShares Preferred and Income Securities ETF (PFF)</strong>
  4093. <ul class="wp-block-list">
  4094. <li><strong>概述</strong>:投資於優先股,提供高收益。</li>
  4095.  
  4096.  
  4097.  
  4098. <li><strong>費用率</strong>:0.46%。</li>
  4099.  
  4100.  
  4101.  
  4102. <li><strong>收益率</strong>:約 6%。</li>
  4103.  
  4104.  
  4105.  
  4106. <li><strong>優勢</strong>:
  4107. <ul class="wp-block-list">
  4108. <li>高收益,相對穩定。</li>
  4109. </ul>
  4110. </li>
  4111.  
  4112.  
  4113.  
  4114. <li><strong>限制</strong>:
  4115. <ul class="wp-block-list">
  4116. <li>集中於金融行業,風險較高。</li>
  4117.  
  4118.  
  4119.  
  4120. <li>費用率中等。</li>
  4121. </ul>
  4122. </li>
  4123.  
  4124.  
  4125.  
  4126. <li><strong>適合性</strong>:適合追求高收益但能接受行業集中風險的投資者。</li>
  4127. </ul>
  4128. </li>
  4129. </ol>
  4130.  
  4131.  
  4132.  
  4133. <p><strong>如何選擇最適合的 ETF?</strong></p>
  4134.  
  4135.  
  4136.  
  4137. <p>選擇收益護盾的 ETF 取決於您的個人目標和風險承受能力:</p>
  4138.  
  4139.  
  4140.  
  4141. <ul class="wp-block-list">
  4142. <li><strong>低風險偏好</strong>:選擇 <strong>BND</strong>,因為它提供低波動性和穩定收入,特別適合保護本金。</li>
  4143.  
  4144.  
  4145.  
  4146. <li><strong>穩定收入與低成本</strong>:<strong>VYM</strong> 或 <strong>SCHD</strong> 是最佳選擇,因其費用低且股息穩定。</li>
  4147.  
  4148.  
  4149.  
  4150. <li><strong>更高收益</strong>:考慮 <strong>SDIV</strong> 或 <strong>PFF</strong>,但需注意其風險較高。</li>
  4151.  
  4152.  
  4153.  
  4154. <li><strong>長期穩定性</strong>:<strong>SDY</strong> 提供可靠的股息增長,適合長期持有。</li>
  4155. </ul>
  4156.  
  4157.  
  4158.  
  4159. <h4 class="wp-block-heading"><strong>結論</strong></h4>
  4160.  
  4161.  
  4162.  
  4163. <p>綜合來看,<strong>Vanguard High Dividend Yield ETF (VYM)</strong>、<strong>Schwab U.S. Dividend Equity ETF (SCHD)</strong> 和 <strong>Vanguard Total Bond Market ETF (BND)</strong> 是最符合收益護盾需求的 ETF。它們在穩定收入、低成本和本金保護方面表現出色。若需進一步分散風險,可考慮加入如 <strong>Global X SuperDividend ETF (SDIV)</strong> 的全球股息 ETF。最終選擇應根據您的財務目標與風險偏好進行調整。</p>
  4164. </details>
  4165.  
  4166.  
  4167.  
  4168. <p></p>
  4169.  
  4170.  
  4171.  
  4172. <details class="wp-block-details is-layout-flow wp-block-details-is-layout-flow"><summary>Grok 推薦的ETF選項<br></summary>
  4173. <p>在構建收益護盾時,選擇適合的 ETF 需符合「穩定現金流、低波動性、風險隔離」等核心需求。以下分為 <strong>保守型、平衡型、進階型</strong> 三類推薦 ETF,並分析其特性與適用場景:</p>
  4174.  
  4175.  
  4176.  
  4177. <h3 class="wp-block-heading"><strong>一、保守型收益護盾 ETF(最低風險)</strong></h3>
  4178.  
  4179.  
  4180.  
  4181. <h4 class="wp-block-heading">1. <strong>短期國債 ETF</strong></h4>
  4182.  
  4183.  
  4184.  
  4185. <ul class="wp-block-list">
  4186. <li><strong>代表標的</strong>:
  4187. <ul class="wp-block-list">
  4188. <li><strong>SHV</strong>(iShares Short Treasury Bond ETF)</li>
  4189.  
  4190.  
  4191.  
  4192. <li><strong>VGSH</strong>(Vanguard Short-Term Treasury ETF)</li>
  4193. </ul>
  4194. </li>
  4195.  
  4196.  
  4197.  
  4198. <li><strong>特性</strong>:
  4199. <ul class="wp-block-list">
  4200. <li>投資於 1-12 個月到期的美國國債,近乎零信用風險。</li>
  4201.  
  4202.  
  4203.  
  4204. <li>波動極低(年化波動率 &lt;2%),流動性高,收益率約 3-5%(隨利率環境浮動)。</li>
  4205. </ul>
  4206. </li>
  4207.  
  4208.  
  4209.  
  4210. <li><strong>適用場景</strong>:
  4211. <ul class="wp-block-list">
  4212. <li>退休初期或極端風險規避者,作為 <strong>1-2 年短期現金層</strong>的核心配置。</li>
  4213. </ul>
  4214. </li>
  4215. </ul>
  4216.  
  4217.  
  4218.  
  4219. <h4 class="wp-block-heading">2. <strong>抗通膨債券 ETF</strong></h4>
  4220.  
  4221.  
  4222.  
  4223. <ul class="wp-block-list">
  4224. <li><strong>代表標的</strong>:
  4225. <ul class="wp-block-list">
  4226. <li><strong>TIP</strong>(iShares TIPS Bond ETF)</li>
  4227. </ul>
  4228. </li>
  4229.  
  4230.  
  4231.  
  4232. <li><strong>特性</strong>:
  4233. <ul class="wp-block-list">
  4234. <li>持有通膨保值國債(TIPS),本金隨 CPI 調整,直接對抗通膨。</li>
  4235.  
  4236.  
  4237.  
  4238. <li>收益率約 4-6%(含通膨調整),波動低於普通長期債券。</li>
  4239. </ul>
  4240. </li>
  4241.  
  4242.  
  4243.  
  4244. <li><strong>適用場景</strong>:
  4245. <ul class="wp-block-list">
  4246. <li>高通膨預期時期,作為護盾的 <strong>通膨對沖層</strong>(配置比例 10-20%)。</li>
  4247. </ul>
  4248. </li>
  4249. </ul>
  4250.  
  4251.  
  4252.  
  4253. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  4254.  
  4255.  
  4256.  
  4257. <h3 class="wp-block-heading"><strong>二、平衡型收益護盾 ETF(風險可控,收益提升)</strong></h3>
  4258.  
  4259.  
  4260.  
  4261. <h4 class="wp-block-heading">1. <strong>短期投資級公司債 ETF</strong></h4>
  4262.  
  4263.  
  4264.  
  4265. <ul class="wp-block-list">
  4266. <li><strong>代表標的</strong>:
  4267. <ul class="wp-block-list">
  4268. <li><strong>VCSH</strong>(Vanguard Short-Term Corporate Bond ETF)</li>
  4269.  
  4270.  
  4271.  
  4272. <li><strong>SPSB</strong>(SPDR Portfolio Short Term Corporate Bond ETF)</li>
  4273. </ul>
  4274. </li>
  4275.  
  4276.  
  4277.  
  4278. <li><strong>特性</strong>:
  4279. <ul class="wp-block-list">
  4280. <li>投資於 1-5 年期高評級公司債,收益率約 5-6%。</li>
  4281.  
  4282.  
  4283.  
  4284. <li>違約風險低(歷史違約率 &lt;0.5%),波動率約 3-4%。</li>
  4285. </ul>
  4286. </li>
  4287.  
  4288.  
  4289.  
  4290. <li><strong>適用場景</strong>:
  4291. <ul class="wp-block-list">
  4292. <li>作為 <strong>3-5 年中期護盾層</strong>,替代部分現金部位以提高收益。</li>
  4293. </ul>
  4294. </li>
  4295. </ul>
  4296.  
  4297.  
  4298.  
  4299. <h4 class="wp-block-heading">2. <strong>優先股 ETF</strong></h4>
  4300.  
  4301.  
  4302.  
  4303. <ul class="wp-block-list">
  4304. <li><strong>代表標的</strong>:
  4305. <ul class="wp-block-list">
  4306. <li><strong>PFF</strong>(iShares Preferred and Income Securities ETF)</li>
  4307. </ul>
  4308. </li>
  4309.  
  4310.  
  4311.  
  4312. <li><strong>特性</strong>:
  4313. <ul class="wp-block-list">
  4314. <li>持有金融業優先股,股息率約 6-7%,波動低於普通股(年化波動率 8-10%)。</li>
  4315.  
  4316.  
  4317.  
  4318. <li>風險:利率敏感度高(升息時價格下跌),且金融業風險集中。</li>
  4319. </ul>
  4320. </li>
  4321.  
  4322.  
  4323.  
  4324. <li><strong>適用場景</strong>:
  4325. <ul class="wp-block-list">
  4326. <li>市場利率穩定時,作為 <strong>收益增強工具</strong>(配置比例 ≤15%)。</li>
  4327. </ul>
  4328. </li>
  4329. </ul>
  4330.  
  4331.  
  4332.  
  4333. <h4 class="wp-block-heading">3. <strong>低波動分紅型股票 ETF</strong></h4>
  4334.  
  4335.  
  4336.  
  4337. <ul class="wp-block-list">
  4338. <li><strong>代表標的</strong>:
  4339. <ul class="wp-block-list">
  4340. <li><strong>SCHD</strong>(Schwab US Dividend Equity ETF)</li>
  4341.  
  4342.  
  4343.  
  4344. <li><strong>VIG</strong>(Vanguard Dividend Appreciation ETF)</li>
  4345. </ul>
  4346. </li>
  4347.  
  4348.  
  4349.  
  4350. <li><strong>特性</strong>:
  4351. <ul class="wp-block-list">
  4352. <li>篩選高股息、股息成長股,股息率約 3-4%,長期資本增值潛力。</li>
  4353.  
  4354.  
  4355.  
  4356. <li>波動率低於大盤(例如 SCHD 年化波動率約 12%,標普 500 約 15%)。</li>
  4357. </ul>
  4358. </li>
  4359.  
  4360.  
  4361.  
  4362. <li><strong>適用場景</strong>:
  4363. <ul class="wp-block-list">
  4364. <li>作為 <strong>5 年以上長期護盾的輔助層</strong>,兼顧現金流與成長性(配置比例 10-20%)。</li>
  4365. </ul>
  4366. </li>
  4367. </ul>
  4368.  
  4369.  
  4370.  
  4371. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  4372.  
  4373.  
  4374.  
  4375. <h3 class="wp-block-heading"><strong>三、進階型收益護盾 ETF(需承擔部分風險)</strong></h3>
  4376.  
  4377.  
  4378.  
  4379. <h4 class="wp-block-heading">1. <strong>多元資產收益 ETF</strong></h4>
  4380.  
  4381.  
  4382.  
  4383. <ul class="wp-block-list">
  4384. <li><strong>代表標的</strong>:
  4385. <ul class="wp-block-list">
  4386. <li><strong>NUSI</strong>(Nationwide Nasdaq-100 Risk-Managed Income ETF)</li>
  4387. </ul>
  4388. </li>
  4389.  
  4390.  
  4391.  
  4392. <li><strong>特性</strong>:
  4393. <ul class="wp-block-list">
  4394. <li>持有 Nasdaq 100 股票 + 賣出看跌期權(Put)對沖下跌風險,股息率約 7-8%。</li>
  4395.  
  4396.  
  4397.  
  4398. <li>風險:科技股波動高,下跌保護有限(例如 2022 年 NUSI 跌幅 -15%)。</li>
  4399. </ul>
  4400. </li>
  4401.  
  4402.  
  4403.  
  4404. <li><strong>適用場景</strong>:
  4405. <ul class="wp-block-list">
  4406. <li>市場估值合理時,作為 <strong>股票護盾的替代方案</strong>(配置比例 ≤10%)。</li>
  4407. </ul>
  4408. </li>
  4409. </ul>
  4410.  
  4411.  
  4412.  
  4413. <h4 class="wp-block-heading">2. <strong>抵押貸款 REITs ETF</strong></h4>
  4414.  
  4415.  
  4416.  
  4417. <ul class="wp-block-list">
  4418. <li><strong>代表標的</strong>:
  4419. <ul class="wp-block-list">
  4420. <li><strong>MORT</strong>(VanEck Mortgage REIT Income ETF)</li>
  4421. </ul>
  4422. </li>
  4423.  
  4424.  
  4425.  
  4426. <li><strong>特性</strong>:
  4427. <ul class="wp-block-list">
  4428. <li>投資於抵押型不動產信託(Mortgage REITs),股息率約 10-12%。</li>
  4429.  
  4430.  
  4431.  
  4432. <li>風險:對利率極度敏感,升息周期可能暴跌(例如 2022 年 MORT 跌幅 -25%)。</li>
  4433. </ul>
  4434. </li>
  4435.  
  4436.  
  4437.  
  4438. <li><strong>適用場景</strong>:
  4439. <ul class="wp-block-list">
  4440. <li>僅適合 <strong>利率下行或穩定環境</strong>,且需嚴格控制比例(≤5%)。</li>
  4441. </ul>
  4442. </li>
  4443. </ul>
  4444.  
  4445.  
  4446.  
  4447. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  4448.  
  4449.  
  4450.  
  4451. <h3 class="wp-block-heading"><strong>四、收益護盾 ETF 組合範例</strong></h3>
  4452.  
  4453.  
  4454.  
  4455. <p>根據風險承受度,可參考以下配置:</p>
  4456.  
  4457.  
  4458.  
  4459. <figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>風險偏好</th><th>短期層(1-2 年)</th><th>中期層(3-5 年)</th><th>長期層(5+ 年)</th></tr></thead><tbody><tr><td><strong>保守型</strong></td><td>50% SHV + 50% TIP</td><td>100% VCSH</td><td>不配置</td></tr><tr><td><strong>平衡型</strong></td><td>70% VGSH + 30% PFF</td><td>60% VCSH + 40% SCHD</td><td>20% VIG</td></tr><tr><td><strong>進階型</strong></td><td>40% SHV + 60% NUSI</td><td>50% VCSH + 30% PFF + 20% MORT</td><td>30% SCHD</td></tr></tbody></table></figure>
  4460.  
  4461.  
  4462.  
  4463. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  4464.  
  4465.  
  4466.  
  4467. <h3 class="wp-block-heading"><strong>五、選擇 ETF 的關鍵檢查清單</strong></h3>
  4468.  
  4469.  
  4470.  
  4471. <ol class="wp-block-list">
  4472. <li><strong>費用率</strong>:≤0.20% 為佳(保守型);進階型可容忍 ≤0.60%。</li>
  4473.  
  4474.  
  4475.  
  4476. <li><strong>流動性</strong>:日均成交量 &gt;50 萬股,買賣價差 &lt;0.1%。</li>
  4477.  
  4478.  
  4479.  
  4480. <li><strong>收益來源</strong>:股息需來自企業盈利或利息,非本金返還。</li>
  4481.  
  4482.  
  4483.  
  4484. <li><strong>極端情境表現</strong>:在 2008、2020 年最大回撤 ≤15%(保守型)或 ≤25%(進階型)。</li>
  4485.  
  4486.  
  4487.  
  4488. <li><strong>稅務效率</strong>:優先選擇配息來源為「合格股息」或「利息」的 ETF。</li>
  4489. </ol>
  4490.  
  4491.  
  4492.  
  4493. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  4494.  
  4495.  
  4496.  
  4497. <h3 class="wp-block-heading"><strong>六、總結:最適選擇取決於「風險容忍度」與「市場週期」</strong></h3>
  4498.  
  4499.  
  4500.  
  4501. <ul class="wp-block-list">
  4502. <li><strong>保守型投資者</strong>:以 <strong>短期國債(SHV/VGSH) + 抗通膨債券(TIP)</strong> 為核心,收益穩定但需較高本金。</li>
  4503.  
  4504.  
  4505.  
  4506. <li><strong>平衡型投資者</strong>:結合 <strong>短期公司債(VCSH) + 分紅股(SCHD)</strong>,平衡收益與風險。</li>
  4507.  
  4508.  
  4509.  
  4510. <li><strong>進階型投資者</strong>:謹慎配置 <strong>期權對沖 ETF(NUSI)或優先股(PFF)</strong>,嚴格控制比例與再平衡紀律。</li>
  4511. </ul>
  4512.  
  4513.  
  4514.  
  4515. <p><strong>動態調整建議</strong>:</p>
  4516.  
  4517.  
  4518.  
  4519. <ul class="wp-block-list">
  4520. <li>當市場 CAPE Ratio &gt;30(高估):增加現金與短期債券比例。</li>
  4521.  
  4522.  
  4523.  
  4524. <li>當通膨預期 &gt;4%:提高 TIP 配置至 20-30%。</li>
  4525.  
  4526.  
  4527.  
  4528. <li>當利率見頂回落:逐步納入優先股(PFF)或抵押 REITs(MORT)。</li>
  4529. </ul>
  4530.  
  4531.  
  4532.  
  4533. <p>收益護盾的目標是「保護」而非「致富」,選擇 ETF 時應優先確保「風險隔離」,其次才是收益提升。</p>
  4534. </details>
  4535.  
  4536.  
  4537.  
  4538. <p></p>
  4539. ]]></content:encoded>
  4540. <wfw:commentRss>https://blog.serv.idv.tw/2025/03/nomad-47-income-shield-ymag/feed/</wfw:commentRss>
  4541. <slash:comments>0</slash:comments>
  4542. <media:content url="https://blog.serv.idv.tw/wp-content/uploads/2025/03/838138116201053778.png" medium="image"></media:content>
  4543. <post-id xmlns="com-wordpress:feed-additions:1">7928</post-id> </item>
  4544. <item>
  4545. <title>遊民週記 46: 新螢幕和校色</title>
  4546. <link>https://blog.serv.idv.tw/2025/03/nomad-46/</link>
  4547. <comments>https://blog.serv.idv.tw/2025/03/nomad-46/#comments</comments>
  4548. <dc:creator><![CDATA[PipperL]]></dc:creator>
  4549. <pubDate>Mon, 03 Mar 2025 09:05:00 +0000</pubDate>
  4550. <category><![CDATA[遊民週記]]></category>
  4551. <category><![CDATA[電腦.網路]]></category>
  4552. <category><![CDATA[colormunki]]></category>
  4553. <category><![CDATA[nomad]]></category>
  4554. <category><![CDATA[校色]]></category>
  4555. <guid isPermaLink="false">https://blog.serv.idv.tw/?p=7922</guid>
  4556.  
  4557. <description><![CDATA[把病養好後,本週開始開turbo 趕進度回到之前的生活型態。結果好像有點趕過頭了,星期三跟朋友聊天還在說自己很 ... <a title="遊民週記 46: 新螢幕和校色" class="read-more" href="https://blog.serv.idv.tw/2025/03/nomad-46/" aria-label="Read more about 遊民週記 46: 新螢幕和校色">閱讀全文</a>]]></description>
  4558. <content:encoded><![CDATA[
  4559. <p>把病養好後,本週開始開turbo 趕進度回到之前的生活型態。<br>結果好像有點趕過頭了,星期三跟朋友聊天還在說自己很忙,星期四就突然不知道要做什麼事了。</p>
  4560.  
  4561.  
  4562.  
  4563. <p>事後回顧,其實也不是沒事做,待辦事項跟計畫還是有許多項目要完成。<br>只是當下突然沒有「即刻應該做」或是「當下想要做」的事。<br>才會有「啊~~~~ 這就是退休後很無聊、不知道做什麼事的感覺嗎?」</p>
  4564.  
  4565.  
  4566.  
  4567. <p>然後過了一天,又回到有事情做的日子了。</p>
  4568.  
  4569.  
  4570.  
  4571. <span id="more-7922"></span>
  4572.  
  4573.  
  4574.  
  4575. <hr class="wp-block-separator has-alpha-channel-opacity"/>
  4576.  
  4577.  
  4578.  
  4579. <h2 class="wp-block-heading">幫螢幕校色</h2>
  4580.  
  4581.  
  4582.  
  4583. <p>之前<a href="https://blog.serv.idv.tw/2015/01/colormunki-photo/">在 2015 年 (10年前!) 有幫螢幕校過一次色彩</a>,用的是 colormunki 搭配 dispCalGUI + ArgyII CMS。目的是讓雙螢幕的顏色相近,避免照片調色時有太大的差異。後來2016 換了螢幕 (從 VA+TN 變 VA+IPS)後<a href="https://blog.serv.idv.tw/2016/01/dell-u2414h/">又校了一次</a>。 前陣子為了搞定護照照片的顏色,發現兩個螢幕退化後顏色差太多,決定把舊的那台 BenQ 退役,換成新的 32&#8243; 4K (BenQ EX3210U) 。現在架構從 VA + IPS 又變成 IPS + IPS 了。而且兩台的出廠亮度還差異超大的。</p>
  4584.  
  4585.  
  4586.  
  4587. <p>翻出放在防潮箱10年的 colormunki 後,現在 dispCalGUI 已經改名成 displayGUI,而且最近幾年作者已經沒有在維護了。還好新的作業系統下還是可以用,沒什麼問題。 ArgyII CMS 現在還有人在維護,但是 win11 要搞定一些權限問題,不然 driver 不給裝。上網google 了一些校色相關的教學,看起來流程跟之前差不多,但好像有簡化一些些。懶人包可以看這一篇:《<a href="https://rcsphoto.com.tw/learndisplaycalandargyllcms/">DisplayCAL 與 ArgyllCMS 螢幕色彩管理教學 &#8211; RCSPHOTO</a>》 。</p>
  4588.  
  4589.  
  4590.  
  4591. <p>校色完兩台螢幕的亮度都在150nit左右,新螢幕因為是廣色域 (Wide color-gamur, WCG) 的關係, Adobe RGB 接近 100%,但校色完打開 windows ACM 後白點會稍微跑掉偏綠,得要關掉ACM才行。<br>另外一個問題比較大,把ACM關掉後,因為新螢幕廣色域的關係,一些沒有色管好的軟體,顏色會跑掉 (例如像紅色/橘色) ,變得太鮮豔了。</p>
  4592.  
  4593.  
  4594.  
  4595. <p>試了幾個作法都不喜歡,最後直接<a href="https://pcmonitors.info/articles/taming-the-wide-gamut-using-srgb-emulation/">開螢幕的 sRGB mode</a>,用硬體把色域限縮,再校色,顏色跟色域就match了。缺點是可調亮度卻不能改白點 (硬體調校~6900K)。看起來在日常用途裡, WCG 用途並不大,還有可能會把顏色弄偏掉。</p>
  4596.  
  4597.  
  4598.  
  4599. <p>那我買了個廣色域+HDR 的螢幕做什麼呢?</p>
  4600.  
  4601.  
  4602.  
  4603. <p>還好win11 切換 HDR mode (用 Win + alt +b) 時,可以順便把螢幕硬體切到 HDR mode,此時螢幕就脫離 sRGB mode 的限制,換成 display HDR了。至於 display HDR 準不準,我覺得就不重要了。一方面另一顆螢幕跟不上,一方面只有在看劇或是遊戲時會切到 HDR mode。自己沈浸就好。(根據<a href="https://pcmonitors.info/reviews/benq-ex3210u/">評測</a>,其實display HDR 的顏色是還算準的)</p>
  4604.  
  4605.  
  4606.  
  4607. <p>說到準,10年前 dE只要 &lt;3 就好,10年後 dE 的要求已經是 &lt;1 了… (display 真的愈來愈難做了)</p>
  4608.  
  4609.  
  4610.  
  4611. <p>目前觀察,換了新螢幕後,好像花時間坐在桌機電腦前面的時間變久了。那什麼時間變少了呢?應該是手機、平板、跟筆電吧!</p>
  4612.  
  4613.  
  4614.  
  4615. <p></p>
  4616.  
  4617.  
  4618.  
  4619. <h3 class="wp-block-heading">其他校色後的問題</h3>
  4620.  
  4621.  
  4622.  
  4623. <p>這次校色的目標亮度從10年前的120nits 拉高到 150~180 nits,主要是考慮 IPS 低亮度漏光會導致底灰階表現不好。<br>但實際使用真的比較亮,眼睛會比較容易疲勞。要把 windows 的 dark mode 打開之後,會剛剛好,舒服一些。</p>
  4624.  
  4625.  
  4626.  
  4627. <p>另外一個新的問題是兩台螢幕的 DPI 差太多,所以windows 的 HiDPI (?) 就上場了。主螢幕 32&#8243; 4K 調 125% (150% 是最 match 的,但可容納的資訊就沒那麼多了),副螢幕 23&#8243; FHD 調 100%。這樣主螢幕可以一口氣顯示很多的資訊,副螢幕拿來當作閱讀用的大字螢幕。但某些應用程式的 DPI 切換沒做好,視窗拉來拉去很容易糊掉。也只能每個程式各自去找到相對可以接受的設定,這是目前比較苦手的地方。</p>
  4628.  
  4629.  
  4630.  
  4631. <p>另外一個「小問題」,就是雙螢幕下,netflix 沒辦法開 4K HDR。主要是雖然主螢幕是4K HDR,但副螢幕 不是 4K HDR的情況下, netflix 的4K 開不起來。解決方式也很好笑。要看 netflix 的時候,把副螢幕關掉,獨留主螢幕就好。但&#8230; 我就不想這麼「專心」啊!而且副螢幕關掉後,在副螢幕上的應用程式位置會跑掉&#8230;</p>
  4632.  
  4633.  
  4634.  
  4635. <p> </p>
  4636.  
  4637.  
  4638.  
  4639. <h3 class="wp-block-heading">兩台螢幕的校色結果 (2025/2):</h3>
  4640.  
  4641.  
  4642.  
  4643. <p><strong>BenQ EX3210U</strong><br>sRGB mode (白點鎖 6800K) 僅校正 gamma 2.2 <br>色彩模式 sRGB 亮度=37 (176.24 nits)<br>色溫初步 Wp=0.3030,0.3204<br>校色結果:<br>Wp=(0.3116 , 0.3234 ) CT= 6613K<br>dE avg=0.29 max=1.65 RMS=0.44 176nits<br>色域覆蓋 98.3% sRGB; 69.7% AdobeRGB; 71.6%DCI P3</p>
  4644.  
  4645.  
  4646.  
  4647. <p><strong>Dell U2414H </strong><br>目標亮度 150nits (153.38)<br>色溫 6500K<br>亮度=97, 對比=75<br>custom color mode: R/G/B = 100/100/95 Wp=0.3137,0.3308 CT=6424K<br>校色結果: dE avg=0.86 max=5.38 RMS=1.45<br>色域覆蓋 92.6% sRGB</p>
  4648. ]]></content:encoded>
  4649. <wfw:commentRss>https://blog.serv.idv.tw/2025/03/nomad-46/feed/</wfw:commentRss>
  4650. <slash:comments>1</slash:comments>
  4651. <media:content url="https://blog.serv.idv.tw/wp-content/uploads/2025/03/img_5554.jpg" medium="image"></media:content>
  4652. <post-id xmlns="com-wordpress:feed-additions:1">7922</post-id> </item>
  4653. </channel>
  4654. </rss>
  4655.  
  4656. <!--
  4657. Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/
  4658.  
  4659. Page Caching using Disk
  4660. Minified using Disk
  4661. Database Caching using Disk (Request-wide modification query)
  4662.  
  4663. Served from: blog.serv.idv.tw @ 2025-05-13 04:09:55 by W3 Total Cache
  4664. -->
Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda