財務工程:Code 工具精算
上一章讓 Agent 自己挑工具;這一章反過來,把工具當成 Workflow 的一個節點,由我們精準指定。而且我們要解決 LLM 的一個致命弱點——它不會算數。做法是:把需要精確計算的部分交給「Code 工具節點」跑真正的 Python,再讓 LLM 只負責解讀。
凡是牽涉金額與公式的場景——房貸試算、投報率、報價毛利、折舊攤提——都不能讓 LLM「憑感覺算」。大型語言模型擅長文字,卻常在多步算術上出錯,差一位小數在財務場景就是災難。傳統做法要嘛寫死一個計算程式(不會解讀)、要嘛人工用 Excel(慢又易錯)。理想解法是:精確計算交給程式、白話解讀交給 AI,各司其職。
本章目標
- 解決什麼
- 用 Code 工具做精確的房貸試算,再由 LLM 白話解讀並給理財建議
- 用到的技術
- 第 7 章的 Code Interpreter 工具,作為 Workflow 的一個節點;工具輸出接給 LLM
- 難度
- ★★★★☆ 學會「把算術交給工具、把語言交給 LLM」的黃金分工
先看做完長什麼樣——這樣你就知道自己在往哪裡前進。跟著本章做,你也能生出下面這個結果:
貸款金額(元):10000000
年利率(%):2.1
貸款年數:30
房貸試算解讀
📊 數字說明
您申請貸款 1,000 萬元,利率 2.1%,期限 30 年(360 期),試算結果如下:
| 項目 | 金額 |
|---|---|
| 每月應繳本息 | 37,464 元 |
| 總還款金額 | 13,487,047 元 |
| 總利息支出 | 3,487,047 元 |
| 利息佔本金比例 | 34.9% |
簡單來說:借 1,000 萬元,30 年下來要多付出約 348.7 萬元的利息,相當於本金的 34.9%。這個比例在目前 2.1% 的低利率環境下,其實算是相對友善的,若利率更高(例如 3~4%),這個比例通常會拉高到 50~70% 以上。
💡 實用建議
1️⃣ 觀察「利息佔比」隨時間遞減的特性
房貸還款初期,每月繳款中「利息」占比較高,「本金」占比較低;隨著時間推移,本金攤還比例會逐漸增加。若手頭寬裕,在還款前期(尤其前 5~10 年)多繳一些提前還本金,能有效縮短總繳息期間,效果比後期還款更顯著。
2️⃣ 縮短年限 vs. 拉長年限的取捨
- 若改成 20 年期,每月負擔會提高,但總利息會明顯下降(因為攤還本金速度加快、計息基礎縮小更快)。
- 若您現金流穩定、沒有更高報酬的資金去處,縮短年限是降低利息成本最直接的方法。
- 反之,若您有其他投資報酬率高於 2.1% 的機會,拉長年限、把多餘資金拿去投資,可能更划算——但需承擔投資風險。
3️⃣ 善用「部分提前還款」而非全額增貸繳款
多數銀行提供部分提前還本金的彈性,不需要一次還清,也能達到「縮短年限」或「降低月付額」的效果。建議:
- 每年有年終獎金或閒錢時,可撥一部分指定沖還本金;
(完整結果更長,這裡先看重點——下載本章 DSL 自己跑就看得到全部)
👇 在 Dify 裡實際執行、長這樣

不想從頭做?下載本章的 DSL 檔,到你的 Dify「工作室 → 匯入 DSL 檔案」上傳,就能一鍵複製這個範例、改成自己的。
22.1設計思路:讓程式算、讓 AI 說
流程是四個節點:開始 → Code 精算 → LLM 解讀 → 輸出。開始節點收三個數字(貸款金額、年利率、年數);Code 工具節點用標準的本息攤還公式算出每月應繳、總利息等(這是不容出錯的部分);LLM 節點拿到精算結果後,只做一件事——把冷冰冰的數字翻成人話並給建議。
22.1.1節點①「開始」:設計輸入表單
房貸試算收三個數字:金額、年利率、年數。點「開始」節點,在「輸入字段」按「+」新增欄位(設變數名、顯示標籤、型別):
principal「貸款金額(元)」——數字(例:10000000)。rate「年利率(%)」——數字(例:2.1)。years「貸款年數」——數字(例:30)。
22.2Code 工具節點:把公式寫進去
點 Code 節點,語言選 python3,貼上本息攤還公式。程式用 {{#開始.principal#}} 這種語法把使用者輸入的數字帶進來,最後用 print 輸出計算結果。
principal、rate、years。這段程式在 Dify 的沙箱裡真的被執行,回傳精確數字。Code 欄位的完整內容直接給你({{#開始.principal#}} 等變數用「/」插入變數選單帶入,不要手打):
p = float("{{#開始.principal#}}") # 貸款本金
r = float("{{#開始.rate#}}") / 100 / 12 # 月利率
n = int("{{#開始.years#}}") * 12 # 總期數(月)
if r == 0:
m = p / n
else:
m = p * r * (1 + r)**n / ((1 + r)**n - 1) # 本息攤還月付公式
total = m * n
print(f"每月應繳本息:{m:,.0f} 元")
print(f"還款期數:{n} 期({n // 12} 年)")
print(f"總還款金額:{total:,.0f} 元")
print(f"總利息支出:{total - p:,.0f} 元")
print(f"利息佔本金比例:{(total - p) / p * 100:.1f}%")
本息攤還公式含次方與連除,LLM 手算極易出錯且不可驗證。Code 節點跑的是確定性的程式,同樣輸入永遠同樣輸出、可稽核。這就是「工具」存在的意義——把 LLM 不擅長的事,交給擅長的程式。
22.3測試運行:1000 萬、2.1%、30 年
需要算數的 AI 應用不再怕算錯——精確度交給程式擔保;使用者拿到的不只是冷數字,還有能懂的解讀與建議;同一套骨架換個公式,馬上變成投報試算、報價毛利、折舊計算。
輸出、發布與使用:把成果交付出去
做好的應用要能發布、分享給別人用才有價值。以下是這個應用的輸出設定與發布/使用畫面:
text)對應成整條流程的最終結果——決定使用者最後拿到什麼。
22.4本章回顧
- LLM 不擅長精確算術;把計算交給 Code 工具節點,結果確定、可稽核。
- 黃金分工:程式負責算、LLM 負責解讀與建議,各展所長。
- 工具節點用
{{#節點.變數#}}接收上游資料,輸出再接給下游 LLM。