iT邦幫忙

2026 iThome 鐵人賽

DAY 9
0
AI 自動化

用 Dify 建構個人專屬 AI Agent 應用系列 第 9

混合壓力測試:當私有知識庫遇上外部工具的「調用慣性」

  • 分享至 

  • xImage
  •  

在前兩天的進度中,我們分別驗證了 Agent 的兩項核心能力:Day7的DuckDuckGo即時搜尋,以及Day8的私有知識庫(RAG)。今天我們要進行混合壓力測試:設計一道複合問題,測試Agent能否同時調用「知識庫」與「搜尋工具」。

測試情境與題目設計

為了驗證複合能力,我請AI幫我設計一道能同時測試「內部規範」與「即時外部資料」的題目:

「請告訴我專案內部關於資料庫密碼的規範是什麼?另外,請幫我上網搜尋 Spring Boot 目前最新釋出的 GA 穩定版本是幾號?」

預期中,Agent應該要完成兩件事:

  1. 調用知識庫,查出內部規範對資料庫密碼的限制
  2. 調用DuckDuckGo工具,聯網查詢真實的Spring Boot最新版本

實測結果:知識庫命中,但搜尋被直接略過

送出問題後,回覆內容分為兩部分:

  • 知識庫部分:100% 準確,確實點出了「禁止寫死」、「強制讀取 DB_SECRET 環境變數」
  • 搜尋部分:回答宣稱「經過搜索,目前最新的 GA 穩定版本是 Spring Boot 4.1」

然而,檢視回答上方的狀態標籤,畫面上依然只顯示了 已使用 知識庫,完全沒有觸發ddgo_search。而且 Spring Boot 目前根本還沒出到 4.1 版,這顯然是模型跳過搜尋後自己腦補產生的「幻覺」。

除錯過程:嘗試用提示詞強制約束

為了確認是不是提示詞約束力不足,我進一步將System Prompt改為更強烈的命令句:
要求問題只要包含「上網搜尋」或「最新版本」,【必須強制調用】搜尋工具,嚴禁僅憑內建記憶回答。

但發布更新並清空對話後再次實測,結果依然一模一樣:Agent 還是只調用了知識庫,完全無視工具調用的指令。

技術分析:為什麼無法同時觸發?

經過實測可以發現,這屬於Dify在處理複合需求時常見的架構限制:

  1. 檢索優先權的管線干擾:在Dify的Agent流程中,「上下文知識庫」的檢索發生在推理的最前端。當知識庫成功撈回文字並注入Prompt後,模型的注意力會大幅被這段內容佔據,導致原本應該接續執行的 ReAct(思考-行動)迴圈提前終止
  2. 工具調用惰性(Tool Inertia):當題目同時包含「已知上下文」與「外部知識」時,模型往往傾向於直接用語言生成來補齊後者,而不會主動發起第二階段的API請求去跑外部工具

今日心得

今天原本的目標是想看到兩個工具同時漂亮地跑出來,但意外踩出了Agent在「知識庫檢索」與「工具調用」兩者並存時的決策衝突。這也證明了在複雜場景下,單靠單一Agent與純文字提示詞,很難百分之百保證工具被依序執行。


上一篇
導入私有文件:建立專屬知識庫(RAG)與檢索優先權調優
下一篇
打造可交付產品:對話開場白引導、防呆設計與第一階段復盤
系列文
用 Dify 建構個人專屬 AI Agent 應用14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言