🗺️ agent 的能力邊界:自訂工具是接活系統的橋
flowchart LR
A(("🤖 Agent")):::a
A --> C["💬 Chat
模型舊知識"]:::dim
A --> S["🔎 搜尋
公開網路"]:::dim
A --> R["📄 RAG
靜態文件"]:::dim
A ==>|"接活系統"| T["🔌 自訂工具 / MCP"]:::hot
T ==> SYS[("🗄️ 你的活系統
ERP · 訂單 · 庫存")]:::sys
T -.->|"當使用方"| D1["你的 agent 用別人的系統"]:::d
T -.->|"當提供方"| D2["開放給別的 agent 用"]:::d
classDef a fill:#dbeafe,stroke:#2563eb,color:#17335e
classDef dim fill:#eef2f7,stroke:#94a3b8,color:#475569
classDef hot fill:#fee2e2,stroke:#dc2626,color:#7f1d1d
classDef sys fill:#dcfce7,stroke:#16a34a,color:#14532d
classDef d fill:#fef3c7,stroke:#d97706,color:#78350f
Chat 只有模型舊知識、搜尋只到公開網路、RAG 只到靜態文件——「這張訂單出貨了嗎」這種即時、會變的答案,只活在你的系統裡。自訂工具 / MCP 就是接它的橋。而 MCP 有兩端:你當使用方(去用別人的),或當提供方(開放給別的 agent 用)。
📋 包成工具 = 給一份 OpenAPI 說明書(只講四件事)
| 說明書要講的 | 對應 | 為什麼 agent 需要 |
| ① 系統在哪 | servers.url | 要知道去哪打 |
| ② 有什麼動作 | GET /order | 這是「查訂單」這個能力 |
| ③ 要給什麼參數 | id(訂單編號) | 要知道該帶什麼 |
| ④ 這動作叫什麼、幹嘛 | description | agent 靠這句判斷「該不該用這工具」——寫含糊就會自己亂編 |
🔎 鐵律:別信答案,要三方獨立驗證
| 證據來源 | 看什麼 |
| 你系統的存取紀錄 | 請求「真的進來了嗎」——來源 IP 對不對 |
Dify 資料庫 message_agent_thoughts | 工具「真的被呼叫了嗎」、observation 拿回什麼 |
| agent 的答案 | 有沒有出現「它編不出來的真資料」(如一組追蹤碼 SF9931002) |
為什麼要三方對:模型可能沒呼叫工具就亂編(查 DB 一眼看穿)、也可能有呼叫、有拿到真資料,卻在總結時改寫——後者表面全對,只有把「工具原始回傳」跟「最終答案」擺一起才抓得到。三邊時間、內容都對上,才算真的通。
🚧 接真系統會撞到的牆(以及怎麼解)
| 坑 | 現象 | 解法 |
| SSRF 擋內網 | Dify 預設封鎖對私有 IP 的呼叫;你的 ERP 幾乎都在內網 → 一定撞 | 放行信任的內網位址,或走「有效憑證的公開網域」(HTTPS 443) |
| 非 443 的 HTTPS | 內部服務跑在 8443 之類的埠,代理只放行 443 的 CONNECT → 連不上 | 用公開網域(443)最順,順帶避開自簽憑證問題 |
| token 會過期 | 真系統要先登入拿 token,貼死一個 → 約一小時後斷 | 找系統的「長效整合金鑰」(不過期),或做一層自動換 token 的代理 |
| 工具成功 ≠ 答案正確 | 工具有呼叫、有拿到真資料,弱模型總結時仍改寫——最陰險 | 錯不得的資料改用 Chatflow 忠實呈現(見下) |
| 模型略過工具 | 有些模型收到工具卻不呼叫,直接空答或憑舊知識答 | 換 function-calling 可靠的模型,或改 Chatflow 寫死流程 |
⚖️ 錯不得的資料:Agent vs Chatflow
flowchart LR
Q(["🙋 同一個問題"]):::q
Q --> AT["🔧 工具查到真資料"]:::proc
Q --> CT["🔧 工具查到真資料
(參數寫死)"]:::proc
subgraph AG["Agent:模型自由總結"]
AT --> AL["🧠 模型總結"]:::warn --> A1["⚠️ 真資料被改寫
看似正常,其實假的"]:::bad
end
subgraph CF["Chatflow:忠實呈現"]
CT --> CD["📤 直接回覆原文"]:::good --> C1["✅ 一字不差
零改寫 · 零幻覺"]:::good
end
classDef q fill:#dbeafe,stroke:#2563eb,color:#17335e
classDef proc fill:#eef2f7,stroke:#64748b,color:#334155
classDef warn fill:#fff3e0,stroke:#a85a00,color:#7c2d12
classDef bad fill:#fdecea,stroke:#c0392b,color:#7f1d1d
classDef good fill:#dcfce7,stroke:#16a34a,color:#14532d
命脈:Chatflow 忠實版只要三個節點 開始 → 工具(參數寫死) → 直接回覆,而且「直接回覆」一定要指向「工具的輸出」,不是模型節點——這是最容易接錯的地方。要排版就再加一個模板轉換節點純格式化,一個字都不改。這樣中間完全沒有模型總結的空間,得到的就是你系統裡的真資料,原封不動。
🧭 什麼時候用哪個
| Agent(模型自由呼叫+總結) | Chatflow(寫死流程+忠實呈現) |
| 特性 | 彈性大、能對話 | 一字不差、流程固定 |
| 風險 | 總結那步可能改寫/幻覺 | 零改寫 |
| 適合 | 探索式、容錯、要來回對話 | 財務 / 醫療 / 法遵等「錯不得」的資料 |
一句話心法:把系統包成工具不難,難在別被漂亮的答案騙了。接得到是第一步,更要驗得穿——用系統紀錄、平台資料庫、還有「模型編不出來的真資料」去確認它是真查還是唬爛。對錯不得的資料,寧可用最笨、最忠實的 Chatflow,也不要一個會改字的聰明 agent。
📚 回課綱總表 →