2025 年終投資回顧

雖然一早起床發現美股跌了不少,還好也不算嚴重,就當作是降低 2026 年成長的壓力。結算這整年只成長 19.6%,算是近三年來新低,甚至愈來愈低。做為參考,QQQ 整年漲了 19.75% [1],VT 漲了 22.15 % [2],台股含息的報酬率更高達 29.47% [3]。

因為我年紀大怕會餓死,所以自從聽到所得替代率這個觀念後,我都會去算它:

  • 月所得替代率 – 配息部份達到月薪的 80.92%,創歷年新高。
  • 年所得替代率 – 資產成長約為年薪 3.83 倍 ,為歷年次高。

投資內容和去年相比,增加了兩筆 5~7 年美債 (Treasure Note),數字不大,主要是讓投資目標明確。同步也把屬性介於成長和配息兩者之間的 NOBL、VIG、KO (可口可樂) 這些標的物賣掉。可樂後來只倒掉半罐,等價格好匯率好的時候還是會賣它。總之,現在做到成長型比配息型配置約為 80:20 左右。

BTW,最近演算法推給我不少吳淡如的理財資訊,她主張不論什麼年紀都 all in 指數型 ETF。她大我半歲,完全不相信 “股債配置要隨年紀調整" 那一套。這個想法和我不謀而合,但我的配息就好比她的副業,all 是 all,非 all all。

假設我沒有賣掉 NOBL、VIG,整年大約成長 8.56%。它們會拉低整體成長率 (8.56% < 19.6%)。若是比配息的話,又拉低配息率 (兩者稅後配息率都小於 1.5%,債券還有 4% 以上)。若是 NOBL、VIG 以股息再投入,複合成長大約 11.7%;這樣也沒多出色。所以我的調整應該是對的。

目前的資產配置如下圖,SGOV 占比太少,無法進位, 所以顯示為 0。

誰的貢獻大呢? 當然還是 QQQ。另外,美金、日幣在 2025 年都貶值 4% 左右。配息股的殖利率原本也就是 4% 附近,且股價比較牛皮,導致整體報酬大概就是 0%,甚至小幅虧損。這個是配息資產的匯率風險,次年我會設法改善。

基於 buy and hold、成長vs配息為 80:20 的大前提下,2026 的策略會是:

  • 逢高賣出 KO,明確區分投資類型。
  • 增加台灣本土的配息 ETF。
  • 增加全球或歐洲的市值型 ETF,例如 VT。

更長遠的布局是:美債到期就不續買,以籌措未來的財源。

最後還是複習一下累積的重要性。投資大盤指數型基金,不太容易讓你賺一倍以上,甚至偶而會腰斬,但是長期一定是值得等待的。2025 年是我邁入 60 歲的第一年,投資成績幸運地還不錯,比上不足比下有餘。這是全世界菁英的努力,加上我選擇的結果。當然也有可能未來有幾年大盤是倒退的,不過那也沒關係;最終還是將回歸到均值。穩穩地賺我就滿足了。

[REF]

  1. QQQ ETF Stock Price & Overview
  2. VT ETF Stock Price & Overview
  3. 發行量加權股價報酬指數 – TWSE 臺灣證券交易所

2025 年大事記

2025 年倒數 24 小時,除非老共突然登陸台灣,不然該發生的都發生了。這一年的重大里程碑如下。

  • 投資績效續創新高
    • 2025 年的總收益大約是 20 歲~49 歲這三十年的儲蓄總和。符合滾雪球理論。
    • 投資在成長和配息的比例約 80:20 (78.31% : 21.69%)。
    • 壓力測試 1: 爽爽過也可以撐過連續五年的暴跌 (-40.66%),跌到第六年才破產。
    • 壓力測試 2: 只動用股息的話 ,每年只花總投資的 (1-78.31%)*4%,AI 說安全。
    • 依據個人在 QQQ、SPY、0050、TOPIX 的權重試算如下。
總回報 (%)SPYQQQ0050.TW1475.TTotal / Avg
權重13.00%52.00%11.85%1.46%78.31%
Mean11.60%12.35%14.20%11.77%12.50%
Min-36.81%-41.73%-43.20%-16.01%-40.66%
Max38.07%54.85%74.96%35.12%54.74%
STD18.13%29.49%24.72%16.03%26.63%
統計自1994~2000~2004~2016~
  • 年度獲得專利數創新高
    • 國內專利通過 5 篇。
    • 大陸專利通過 1 篇。
    • 美國專利通過 2 3 篇 (1/30 拉尾盤多一篇)。
    • 有效專利合計 31 32 篇。
    • 過期專利累積到 8 篇。
  • 讀的書很少
  • 原子習慣、人生的五種財富、持續買進、張忠謀自傳(下)、輝達之道
  • 但有行萬里路
  • 去了澳洲、日本、新加坡、義大利、希臘。
  • 獲得星空聯盟金卡一枚。
  • 理論基礎緩緩進步

  • 新的工作領域
  • 入門資料科學家 – 還帶新人 。
    • 學 Product management。
    • 滿有趣的是 – 我在公司這麼久了,以前都沒跟這兩個部門打過交道。
  • 未完成的志業
  • 甚多。在不自虐的前提下,明年打算做更多沒有做過的事。

LCEL 與 Agent

LCEL 全名 LangChain Expression Language, 是一種描述 LangChain 架構的語言。最大的特徵就是看到 A = B | C | D 這種表示法 – 說明了 LCEL 串接多個可執行單元的特性,是 LangChain 的進階實現。而 ‘|’ 的理解和 Linux 的 pipe 很像,它是非同步的串接。

舉例來說,一個 LLM 的 LangChain 可以表示為:

chain = prompt | LLM model | Output Parser

依序做好這三件事:有方向性的提示、強大的大語言模型、友善的輸出格式,就可以提升使用者體驗。

但是顯然這樣還不太夠,比方說,LLM 需要查一筆它沒被訓練過的資料,在上面的 pipe 就無法做到。換個例子,我想幫 AI 助理取個名字,它也會說好。但是一轉眼什麼山盟海誓都忘光了!

顯然,我們要有個負責的 agent,把 function call 的能力加進來;而且 call 完之後,還要餵給 LLM 做 “人性化" 的自然語言潤飾。這是一個循環的路徑,直到 AI 判斷它不再需要任何外部工具,就可以結束迴圈,跟使用者報告最終結果了。

那麼這個 code 長什麼樣子? 首先把基本元件準備好:

# 初始化模型
llm = ChatOpenAI(model="gpt-4o", temperature=0)

# 將工具打包成列表
tools = [get_current_weather] # 以問天氣的函式為例

# 給出配合 function 的 prompt
prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "你是天氣助理,請根據工具的結果來回答問題。"),
        ("placeholder", "{chat_history}"),  # 預留給歷史訊息
        ("human", "{input}"), # 真正的輸入
        ("placeholder", "{agent_scratchpad}"), # 於思考和記錄中間步驟
    ]
)

創建 agent

# 創建 Tool Calling Agent
# 將 LLM、Prompt 和 Tools 組合起來,處理 Function Calling 的所有複雜流程
agent = create_tool_calling_agent(llm, tools, prompt)

執行 agent

# 創建執行器, 跑 模型思考 -> 呼叫工具 -> 再次思考 -> 輸出答案的循環
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

設計人機介面

def run_langchain_example(user_prompt: str):
    print(f"👤 用戶提問: {user_prompt}")
    
    # 使用 invoke 運行 Agent,LangChain 會自動管理多輪 API 呼叫
    result = agent_executor.invoke({"input": user_prompt})
    
    print(f"🌟 最終答案: {result['output']}")

測試案例

# 示範一:Agent 判斷需要呼叫工具
run_langchain_example("請問新竹現在的天氣怎麼樣?請告訴我攝氏溫度。")

# 示範二:Agent 判斷不需要呼叫工具,直接回答
run_langchain_example("什麼是 LLM?請用中文簡短回答。")

這邊要留意的是,第一個問天氣的問題,LLM 顯然要用到 tool 去外面問,第二個問題不需要即時的資料,所以它自己回答就好。

意猶未盡的讀者可能好奇 function 長怎樣? 其實就很一般,主要的特色是用 @tool decorator。這樣可以獲得很多好處,最重要的一點是 agent 都認得它的 JSON 輸出,方便資料異步流動。

# LangChain 會自動將這個 Python 函數轉換成模型可理解的 JSON Schema
from langchain_core.tools import tool

@tool
def get_current_weather(location: str, unit: str = "celsius") -> str:
    if "新竹" in location or "hsinchu" in location.lower():
        return "風大啦! 新竹就是風大啦!"
    else:
        return f"我不知道 {location} 的天氣啦!"

另外,追根究柢的讀者可能想問,code 裡面怎麼沒看到 ‘|’? 它跑那裡去了? 沒錯,上面講的都是 agent,它比較進階,可以動態跑流程。反而 LCEL 只是 LangChain 的實行方式,它就是一個線性的 chain。

我們由奢返儉,回過頭來看 LCEL,它不能跟 agent 比,只能打敗傳統的 LangChain。標為紅色的是 LCEL 特色的 coding style。

def demonstrate_legacy_chain():
 
    # 定義模型
    llm = ChatOpenAI(temperature=0)
    
    # 定義 Prompt Template
    template = "Translate English text to Chinese: {text}"
    prompt = PromptTemplate(template=template, input_variables=["text"])
    
    # 建立 Chain (透過類別組合)
    # 缺點:語法較冗長,看不到資料流向,且 output 通常包含原始 meta data
    chain = LLMChain(llm=llm, prompt=prompt)
    
    # 執行
    input_text = "Make American Great Again!"
    result = chain.run(input_text)

VS

def demonstrate_lcel():
    
    # 定義模型
    model = ChatOpenAI(temperature=0)
    
    # 定義 Prompt Template, 使用更現代的 ChatPromptTemplate
    prompt = ChatPromptTemplate.from_template("Translate English text to Chinese: {text}")
    
    # 定義 Output Parser (將 AI Message 轉為純字串)
    output_parser = StrOutputParser()
    
    # 建立 Chain (使用 Pipe '|' 運算符)
    # 優點:Unix 風格管道,由左至右邏輯清晰,易於修改和擴展
    chain = prompt | model | output_parser
    
    # 執行
    input_text = "Make American Great Again!"
    result = chain.invoke({"text": input_text})

這兩個都是一次性的 Q&A。

  1. Functions, Tools and Agents with LangChain

超學習時代

最近的 Gemini 3 Pro 真的變比較聰明,所以我取消 Monica 的訂閱,改訂 Gemini。現在想要學習最新的技術,不但學校教不了;網路課程也教不了。就算是追著科技網紅,心裡沒有譜的話,也會像個無頭蒼蠅一樣、不會授粉只會傳播細菌,哈!

以 AI 技術來說,訓練模型、微調模型、RAG (檢索增強生成) 都是舊世代的技術。次世代的技術重點在於 Reasoning 和 Agency。雖然這個發展有跡可循、合情合理,但是沒有前面的跌跌撞撞,也絕不可能一步到位。短短一兩年之間,我們有了下面的這些進化。

[觀念改變]

一個 AI model 自己角色扮演 –> 建立認知架構:記憶、規畫、反思。

LangChain –> LangGraph, 線性思考 –> 非線性思考、圖論、立體化。

Funcation call –> Tool call。錯誤檢查和自我校正。

[模型調校]

Supervised Fine-Tuning、 RLHF (reinforcement learning from human feedback) –> DPO (Direct Preference Optimization)、IPO (Identity Preference Optimization)、KTO (Kahneman-Tversky Optimization)。

全能模型 –> SLERP (Spherical Linear Interpolation)、TIES-Merging。

自我對局 (Self-Play) 強化。

[In Model Learning]

Prompt –> DSPy (Declarative Self-improving Language Programs),透過 Compiler 自動尋找 Prompt 組合。

快問快答 –> Chain of Tought、Tree of Thought –> Test-Time Compute (有節制地想久一點,時間換取品質)

[模型評估]

BLEU、ROUGE 考試 –> LLM-as-a-Judge,自動評估

多元評價 – RAGAS

  • R:Retrieval(檢索)
  • A:Accuracy(準確性)
  • G:Generality(通用性)
  • A:Adherence(遵循性)
  • S:Stability(穩定性)

[多模態]

OCR + LLM –> 原生多模態 (Native Multimodel)、audio/video tokenization。

文字到文字 –> any-to-any interaction

上述有很多新的東西,也有一些半新半舊,我打算加強 Agentic、MCP 這方面的知識,然後快速進入 DSPy 的領域。

附帶一提,雖然退訂 Monica 可以省錢,但是我還不打算把 Coursera 停掉。因為上面還是有很多 Andrew Ng 開的短課程。愈長的課程愈容易過時、短課程甚至像  Andrej Karpathy 的 Youtube 都可能有一些最新的東西。至於 ArXiv 肯定好料滿滿,但是可能要叫 NoteLLM 幫我讀了。

我讀 «原子習慣»

Atomic Habits – 本書的作者是詹姆斯克里爾 (James Clear),我讀的版本是蔡仕偉先生翻譯,方智出版社發行。作者能夠跟大家談習慣養成的底氣在於親身的經歷。高二那年在棒球賽中,他被同學甩棒打中門面,造成骨折、複視、癲癇…等傷害,幾乎斷送運動生命。然而六年後,他在大四成為 ESPN 全明星隊投手、總統獎章得主。這個艱苦的復健過程,應證了養成好習慣並持之以恆的可能性。

好習慣的養成有四個法則 – 類似管理上的 PDCA [1] 這樣反覆加強,分別是提示、渴望、回應、獎賞 (cue, craving, response, and reward)。渴望這個詞,我理解為渴求;不然太文謅謅了,其實就是 “想要" 某個東西。擴充幾句就是: (1) 提示一個目標,(2) 激起達到目標的渴望,(3) 做出能達到目標的某件事,(4) 並獲得獎賞。

習慣的緣起是很細微的事情,所以作者才會用 atomic 來描述它。而習慣造成的影響剛開始可能影響微小,像是冰塊加熱到 0 度才突然變成水,竹子雨後突然爆長,甚至只要六週就長到 90 英呎高 (p.18~p.19)。以前國文課讀過劉蓉的 «習慣說»,大家也都知道 “習慣成自然" 這個成語。它說明好習慣也會有一段沒有回報的潛伏期 (p.19),假設大家都能接受這件事,就可以減少一些挫折感。像是運動了好幾週也沒變瘦。

在上面的論述中,作者已經悄悄地把習慣養成和目標設定做了聯結。這本書不只是要教大家怎麼養成好習慣,而是要講如何達成目標。通常我們會為自己訂目標,做出規劃,然後進入需要反覆操作的階段,順便在不知不覺中獲得一些好習慣。例如為了準備考試,早上 6 點起床讀書。或者我們了解到某些好習慣對身體有益無害,例如每週運動三次。於是作者認為與其緊盯著偉大的目標,不如堅持過程 (process),靠著不斷進步 (progress) 去達成它 (p.21)。

擴大而言,我們完成目標需要一套系統,這個系統有目標也有過程。例如目標是職棒年度總冠軍,我們要拆解系統成為可以回饋的子系統,如果只有大目標,卻沒有建立系統,並不一定會成功。因為,你的對手的目標跟你一模一樣 (p.20),為什麼偏偏是你奪冠呢? 顯然大家對於系統的設計就有不同的看法,然後才是比執行力,以及能否堅持到成為一種習慣。

作者舉出反例說,假如我們眼裡只有目標,大目標前面放個中目標,例如先得個上半季冠軍吧! 球隊可能也真的做到了,但是下半季發生溜溜球效應 [3],球隊忽然失去打球的動力,結果離目標更遠。我想富邦悍將或許是把熱身賽得第一當作小目標吧,以至於每年都第一個被淘汰!? 哈!

作者說大目標只是你想要改變的結果。深入一層去看,你應該要改變過程。再更深入地去理解,則是你要改變身分認同 – 你心裡希望成為什麼樣的人 (p. 23)。有人遞菸給甲,甲說我在戒菸;遞給乙,乙說我不抽菸。甲是個正在戒菸的人,乙是個已經戒菸的人 (或者從不抽菸)。作者舉這個例子說明身分認同是什麼? 我們的行動代表一個信念系統,有信仰可以讓習慣更持久。習慣也讓你成為理想的自己。

這四個法則都有正反兩面,既可以做正向加強、並做負向削減。例如:我們讓養成好習慣的物件顯而易見、讓養成壞習慣的物件隱而不見。假設想戒菸,就最好整天都看不到菸 (讓提示隱而不顯);想要讀書,書就放在垂手可得的地方 (讓提示顯而易見) (p. 33)。或者說,環境、情境比激勵更重要 (p. 44)。這也解釋了為何孟母要三遷,人類在新環境中比較容易改變習慣,戒毒也是如此 (p. 47)。還有模仿的對象也很重要 (p. 57)。

要提升自己,就要注意自己已經感覺不到的習慣是好是壞? 然後決定保持或是戒掉。書上說從一早開始做了哪些事? 可以詳細記錄 “習慣計分卡" 來做檢查 (p. 37, p. 89)。至於要養成一個好習慣,除了明確知道要做什麼,還要知道何時何地去做。例如自己宣告要在某個時間地點運動,執行力比只決定要運動好 2 倍以上 (p. 39)。

好習慣還可以疊加,造成鏈結。例如每次做完 A 之後,就固定做 B。習慣 A –>B 之後,可以在培養 B –> C 的習慣,這樣每件事都暗示著下一件事,整個生活都可以步上新的軌道 (p. 40)。

改變行為的第二條法則在於讓習慣有吸引力 (p. 52)。多巴胺測量實驗證明,想到快要達成目標的感覺比實際達成目標時更快樂! 所以想要 (craving) 的感覺可以幫助我們養成習慣。作者說我們可以綁定獎賞和一個待養成的好習慣,例如拿出手機就先做十下波比跳 [4] (需要) 再看臉書 (想要)。至於要戒掉壞習慣,就是要讓它變得毫無吸引力 (p.63)。

既然是習慣,養成的重點在於重複,而不是完美 (p. 66)。例如寫日記或是 Youtube 日更這種習慣。行為改變的第三法則是讓行動變得輕而易舉 (p. 70)。書上說農業技術的傳播對於同個緯度的地區比較容易,因此東西向傳播很快,但南北向傳遞速度只有 1/2~1/3。

追求輕鬆,最小努力是人類的本能,在每個決定性的瞬間我們要讓環境引導我們自然而然選擇好習慣,想都不用想 (p.75)。為了瞬間可以做出好的選擇,我們的目標可以定在 2 分鐘就可以做到的小段落。像是每晚就寢前讀書,先簡化為讀一頁就好 (p. 77)。

再來談到獎賞。眾所周知,重賞之下必有勇夫,而且即時獎勵效果更好 (p. 86)。這對別人適用,對自己也適用。特別值得一提的是 – 作者說父母鼓勵小孩時,可以給予代幣 (星星或其他的 token),讓小孩受到正向的鼓勵。在小孩做錯事情,例如說髒話,優先冷處理,輕描淡寫地說 “那樣說話不好。" 而不是去扣掉他的代幣或是劃掉小星星,因為負向的增強也是增強 (p. 128~p.129),衝擊到價值觀的純淨性。或許此時可以給一道閃電做出區隔 [5]。

本書在第 18 章有一記回馬槍,提到基因影響習慣 (p. 97)。不要違反你的天賦去培養沒好處的習慣,例如長不高想打籃球、虎背熊腰去跑馬拉松之類的 。第 19 章也稍微有點歪樓 (p. 100)。它說要在生活與工作中維持動力,只要求達到剛好難度的目標,否則培養 CP 值很低的習慣也沒有好處。書上提到這個金髮女孩原則,就是小時候讀的金捲兒闖入三隻熊家裡偷吃東西、偷睡床鋪的那個故事。當小偷還要挑三揀四選剛剛好的。

第 20 章回頭講養成好習慣的潛伏期 (p.104),只是更強調心理建設。書上說我們要對自己警覺,不要氣餒或是過於自滿。透過更有效率的指標來檢視自己的進步程度,例如棒球有很多進階數據,比單純看勝率、打擊率更有意義。

再後面本書就沒有章節了,取而代之的是一些補充、範本、手冊。總之,這本書相當有名,一面講習慣,也一面講目標設定。在這個範疇內,作者已經反覆論證完他的觀點了,是本不錯的書。

[REF]

  1. https://www.managertoday.com.tw/articles/view/55730
  2. 習慣說(清代劉蓉創作的一篇散文)
  3. 溜溜球效應
  4. 如何正確地波比跳 (中文字幕)
  5. SPY×FAMILY間諜家家酒