跳至主要内容

選 AI 架構,別只看比較表:我們如何用失敗測試來淘汰方案

· 閱讀時間約 8 分鐘
Ted Chen
專案負責人

這個月,我正在替一個準備正式收費的 AI 助教產品選擇底層架構。

我們的目標並不複雜:希望盡量利用既有 Agent 框架,減少自行開發的部分,讓產品能更快進入市場驗證。但只要產品要同時服務多位使用者,就有一項條件不能妥協——不同使用者的資料必須確實隔離。

在幾個候選方案中,Hermes Agent 原本看起來很有機會。它能替不同使用者建立 profile,也能指定各自的工作目錄。如果共用一個 gateway,再利用 profile 分開使用者,我們或許就能同時兼顧成本與隔離。

我原本認為這個做法應該可行。直到我們做了一項測試,讓 B 使用者去搜尋 A 使用者建立的檔案...


照我的理解,即使多位使用者共用同一個 gateway,系統至少也應該把每個人限制在自己的 child folder 裡。

如果把 gateway 想成一棟共用辦公室,profile 就像每位使用者的身分,workspace 則是分配給他的私人房間。

門牌不同、房間不同,資料理論上也應該分開。

然而,一個失敗測試推翻了這項假設。

比較表幫我們找到候選方案,卻不能證明它真的可用

選擇 AI 架構時,我們做了許多常見的研究:

  • 比較不同框架的功能。
  • 調查是否支援多使用者。
  • 檢查記憶、Skill、工具與工作目錄的設定。
  • 估算開發、部署與運算成本。
  • 實際安裝並建立測試環境。

這些研究並非沒有用。它們幫助我們從許多方案中,找出幾個值得繼續驗證的候選。

但比較表有一個限制:它主要整理「系統宣稱具備什麼能力」,很難直接回答「放進我們的真實使用情境後,最不能接受的事情會不會發生」。

一開始,我們也只是測試正常功能:

  • 不同使用者能否分別對話?
  • Agent 能否使用知識庫?
  • 不同 profile 能否設定不同環境?
  • 關閉記憶後,對話是否仍能正常運作?

這些測試都在證明系統「做得到什麼」。

真正改變架構決策的,卻是一個用來尋找失敗的測試。

一個奇怪的回答,讓我們開始懷疑隔離是否真的成立

最初的異常其實不大。

我們曾經發現,Hermes Agent 在一個 session 中,回答了疑似屬於另一個 session 的 gateway 狀態資訊。

當下第一個懷疑是:會不會是記憶或跨對話搜尋造成的污染?

因此,我原本打算關閉記憶與跨對話搜尋,再看看多位使用者共用 gateway 是否可行。

這時,AI 提醒我:關閉記憶,只能驗證其中一部分。

真正的使用者隔離至少有三層:

  1. 當前對話的上下文有沒有混用?
  2. 過去對話與持久記憶有沒有混用?
  3. 工具、檔案及任務狀態有沒有共用?

第三層尤其容易被忽略。

AI 可能完全不記得 A 使用者說過什麼,卻仍然看得到 A 使用者在工作目錄中建立的檔案。

如果只測對話內容,我們可能會得到「隔離成功」的錯誤結論。

AI 建議放入一個不可能認錯的「污染標記」

為了驗證檔案是否真正隔離,AI 建議使用一組很容易辨識、不太可能偶然出現的測試資料。

測試方式很簡單。

首先,我用 A 使用者的身分要求 Agent 建立一份私人筆記,並在裡面寫入一組特定的測試識別碼。

接著,我切換到 B 使用者,要求 Agent:

  1. 列出目前工作區中所有文字檔。
  2. 搜尋是否有檔案包含 A 的測試識別碼。

如果隔離成立,B 不應該看見 A 的檔名,更不應該搜尋到檔案內容。

結果,B 不只列出了 A 的私人筆記,還成功找到了裡面的識別碼。

我的第一個反應是:

咦?為什麼看得到?不是每個 profile 都有自己的獨立環境嗎?

第一次失敗,我先懷疑是自己設定錯了

第一次測試失敗,還不足以直接判定整個架構不可行。

問題可能只是我們沒有正確指定工作目錄。

因此,我另外替使用者建立專屬 workspace,並在 profile 設定中明確指定 terminal.cwd,讓它指向該使用者的私人目錄。

從設定檔來看,一切都符合預期:

  • profile 不同。
  • workspace 路徑不同。
  • 使用者應該只在自己的目錄中工作。

重新啟動 gateway 後,我再次執行相同的檔案隔離測試。

A 建立新的私人檔案。

B 再次列出檔案並搜尋新的測試識別碼。

結果仍然失敗。

B 依舊能看到 A 的檔案。

設定上的分隔,不等於執行時真的隔離

進一步追查後,我才發現問題所在。

profile 的設定檔雖然指定了獨立 workspace,但實際處理訊息的 session,工作目錄仍然是共用 gateway 啟動時所使用的 root folder。

換句話說,不同使用者雖然有各自的 profile 與 child folder,Agent 真正執行檔案工具時,站的卻還是同一個共用空間。

原本的辦公室比喻需要修正:

每位使用者的確有不同門牌,也名義上分配了自己的抽屜;但實際替他們工作的 Agent,進入的卻一直是同一間沒有分區上鎖的儲藏室。

那一刻,我對「共用 gateway、個別 profile」能夠達成資料隔離的想像,幾乎完全幻滅。

這已經不像是一個只要調整設定值就能解決的小問題,而是我們期待的隔離方式,與實際執行架構並不一致。

這個測試避免的,不只是一個技術 bug

如果沒有執行這項測試,我們可能會因為以下理由選擇這套方案:

  • 功能相對完整。
  • 不需要從零打造 Agent 執行環境。
  • 支援多個 profile。
  • 共用 gateway 可以降低每位使用者的資源成本。
  • 正常對話與知識庫功能都能運作。

接下來,我們可能會繼續投入時間,整合會員、知識庫、計費與正式產品介面。

直到真實使用者上線後,才發現某位使用者可能讀取另一位使用者產生的檔案。

對一個會接觸敏感個人資料的付費產品而言,這不是可以上線後再慢慢改善的問題,而是足以直接淘汰方案的紅線。

因此,這次真正幫我們做出決策的,不是比較表上誰的功能最多,而是:

我們先定義了最不能接受的結果,再主動設計一個測試,確認它會不會發生。

PoC 不只要證明「做得到」

我們很容易把 PoC 理解成:

  • AI 能不能回答?
  • 知識庫能不能搜尋?
  • 工具能不能呼叫?
  • 介面能不能串接?

這些都屬於成功路徑。

但如果一個原型未來要進入真實工作,只測成功路徑是不夠的。

還應該反過來問:

  • 使用者能不能取得不屬於他的資料?
  • 找不到知識依據時,AI 會不會自行編造?
  • 資料不足時,AI 會不會擅自繼續執行?
  • 沒有得到核准時,AI 會不會直接採取行動?
  • 任務失敗後,系統會不會仍然扣款或留下錯誤狀態?

這些測試的共同點是:我們並不希望它們成功。

但只要其中一項真的成功,就可能比十項正常功能都能運作更能影響架構決策。

下次選 AI 架構,可以先設計一個失敗測試

比較表仍然有價值。

它可以幫助我們理解市場、整理候選方案,並判斷哪些工具值得投入驗證。

但比較表不應該是選型的終點。

下次評估 AI 助理、知識庫或工作流架構時,可以多問三個問題:

  1. 這個方案如果不適合我,最可能在哪裡傷害產品或工作?
  2. 什麼結果一出現,我就應該停止採用它?
  3. 我能否設計一個小型測試,主動製造這個最不能接受的情境?

這次是 AI 幫我補上了原本忽略的測試層次,並提出使用污染標記檢查檔案隔離的方法。

但 AI 沒有替我做最後決策。

真正的工作仍然是:執行測試、排除可能的設定錯誤、重新測試,最後判斷這個失敗是否已經碰到產品不可接受的紅線。

這次經驗改變了我看待技術選型的方式:

比較表幫助我們找出值得測試的候選方案;失敗測試,才幫助我們排除不能承擔的風險。

至於這項結論的邊界,我也想說清楚:這次測試只能證明,我們所採用的共用 gateway 配置無法滿足這個專案的使用者隔離需求;它不代表該工具的所有部署方式都無法隔離,也不代表它不適合其他使用情境。

我們淘汰的不是一個工具的所有可能性,而是一個無法通過專案紅線的架構選項。


以上分享的技術選型歷程,來自我們正在進行的真實專案。

也許你正面臨類似的困擾;又或者,你的構想還在 MVP 規劃與初步打樣階段,不確定該從哪裡開始。

目前,我們的【研究與知識工作流原型計畫】正在開放申請。

我們會從你的真實任務與工作痛點出發,透過討論釐清需求,並協助你設計一套專屬的 AI 工作流程原型。

本階段僅開放 3 個名額,申請至 2026 年 8 月 21 日止,額滿將提前截止。

申請表:
https://forms.gle/VZYbbTW6Bymkk1iSA