← 回首頁 WHAT IF AI LACKS CONTEXT, NOT CAPABILITY?

AI 缺的不是能力,
而是這家公司的常識

AI 工具 · 2026.08 – 至今 · 產品、架構決策、開發、維運

起點是每天的後勤維運。營運遇到訂單、規則或數據問題,第一反應就是貼到工程群組;每一題都會打斷一位工程師。工具其實並不少:公司已有知識助手、資料庫唯讀權限,大家也會用 Claude Code。問題是文件會過期,口語問法常搜不到;直接查資料庫,又可能算出一個「錯得很像對的」業績數字。

我判斷缺的不是另一個聊天介面,而是公司脈絡:AI 讀不到 code,也不知道每個數字的正確口徑。因此我沒有再寫一份查詢手冊,而是把「這家公司該怎麼查才對」固化成 12 支唯讀工具。每次查詢都會自動套用正確查法,營運自己問 AI,就能得到原本得排隊問工程師的答案。

AI 不缺寫 SQL 的能力,缺的是這家公司的常識。
這個專案做的,就是把常識變成基礎設施。

0 上線 14 天的工具呼叫
0 實際自助查詢的同仁
0 唯讀工具
0 單日呼叫峰值
404 8/18 9/1 FRUITWEB DIAGNOSTIC MCP TOOL CALLS / DAY 1,702 總呼叫次數 14 實際使用者 12 唯讀工具
FRUITWEB DIAGNOSTIC MCPTOOL CALLS / DAY
1,702總呼叫次數
14實際使用者
12唯讀工具

CHALLENGE 01

有權限、有 AI,為什麼數字還是錯的?

「這個月業績多少」聽起來只要一句 SQL,實際上藏著一串業務口徑:金額必須用明細視圖,不能拿訂單總價;資料要按產線分組;訂購日期看建單時間,不是訂閱續扣日;公益捐款單還要排除。漏掉任何一項,查詢仍會跑出一個看似合理、其實錯誤的數字。營運就曾因為算出的業績與後台對不上,請工程師花半天重新對帳。

這不是權限問題,而是業務邏輯沒有跟著查詢一起執行。我的做法是把業績算法鎖進 MCP:不論誰來問同一個問題,都會走同一套口徑、得到同一個數字。

THE PROBLEM SAME DB · SAME PERMISSIONS 營運 A · 裸查 營運 B · 裸查 營運 C · 裸查 答案 A 答案 B 答案 C ≠ 後台儀表板 三個都說得通的數字,一次對帳,半天工程師時間
THE PROBLEMSAME DB · SAME PERMISSIONS
營運 A · 裸查
→
答案 A
營運 B · 裸查
→
答案 B
營運 C · 裸查
→
答案 C
≠
後台儀表板

三個都說得通的數字,一次對帳,半天工程師時間

CHALLENGE 02

每個人手上都有工具,為什麼路還是不通?

動手前,我先沿用 UX 的方法盤點使用者。這次不先列功能,而是先看每一種人手上有什麼、真正卡在哪裡:

使用者手上有缺的於是
營運SQL 唯讀權限、Claude Code、知識助手正確查法、code 存取裸查算錯,或排隊問工程師
客服知識助手文件的新鮮度搜不到就回頭問人
工程師全部時間一天被打斷好幾次

沒有人缺權限或工具,缺的是一條能把既有能力接起來、而且值得信任的路。
這個判斷決定了後面所有設計。

START WITH THE USERS WHAT THEY HAD · WHAT WAS MISSING 營運本來就有 SQL 唯讀權限 CLAUDE CODE 知識助手 (文件過期 · 檢索不準) 缺的是什麼 程式碼存取 正確的查法 於是他們自己裸查,或貼到工程群組等回覆
START WITH THE USERSWHAT THEY HAD · WHAT WAS MISSING

營運本來就有

SQL 唯讀權限
CLAUDE CODE
知識助手
(文件過期 · 檢索不準)
↓

缺的是什麼

程式碼存取
正確的查法

於是他們自己裸查,或貼到工程群組等回覆

CHALLENGE 03

改上線半年的知識助手,還是做新工具?

專案初期爭論最久的,是要擴充既有知識助手,還是另做一個工具。前者已有使用者與介面,看起來最省;我最後仍選擇拆開,理由有三個:

一、正式服務不該承擔實驗風險。 知識助手是客服每天在電話中使用的正式服務。若把查 DB、讀 code 等全新能力直接掛上去,每次迭代都可能影響既有工作。後來唯一一次為了共用能力調整部署,就造成兩次短暫中斷。

二、介面必須跟著工作方式走。 知識助手住在 Teams,適合一問一答;但目標使用者已經在 Claude Code 工作。他們需要的不是另一個輸入框,而是讓手上的 AI 直接取得能力。MCP 提供的是 AI 可呼叫的介面,因此營運、工程與未來更換的模型都能共用,不會綁死在單一聊天視窗。

三、能力可以共用,不必複製。 我讓知識助手對內開兩個小 API,新工具直接重用它的檢索與寫入能力。這樣全公司的文件寫入邏輯只維護一份,不會兩邊各自演進。

改舊的還是做新的,不能只看開發成本,也要看誰在承擔上線風險。

THE FIRST FORK THE LONGEST DEBATE OF THE PROJECT 擴充上線中的助手? 客服每天在用 正式服務不是實驗場 介面選錯:Teams ≠ Claude Code 新工具 借用助手能力 助手用兩支小 API 出借知識庫搜尋與編輯 單一寫入路徑 —— 邏輯不會分岔 判準不是成本,是誰在承擔風險。 MCP 對接任何 AI —— 不綁一個聊天視窗
THE FIRST FORKTHE LONGEST DEBATE OF THE PROJECT

擴充上線中的助手?

知識助手
  • 客服每天在用
  • 正式服務不是實驗場
  • 介面選錯:Teams ≠ Claude Code
↓

新工具

借用助手能力
  • 助手用兩支小 API 出借知識庫搜尋與編輯
  • 單一寫入路徑 —— 邏輯不會分岔

判準不是成本,是誰在承擔風險。

MCP 對接任何 AI —— 不綁一個聊天視窗

APPROACH

一個核心、兩個出口

最後的方案是一個唯讀 MCP,把業務邏輯固化成 AI 可以直接呼叫的工具。資料庫存取權早就存在;真正新增的價值,是讓每次查詢自動套用正確口徑。同一個業績問題,不再因為提問者不同而得到不同答案。

規劃上是一個核心、兩個出口:同一套工具,Phase 1 先讓營運在 Claude Code 自助查詢、養成習慣;Phase 2 給工程部的自動 triage 用——報錯訊息進來,機器人用同一套工具查完、產出交接文件。核心做穩一次,兩邊受益。

THE IDEA LOCK THE METHOD INTO THE TOOL 營運 工程師 任何 AI MCP 12 支唯讀工具 業務邏輯鎖在裡面 一個 答案 價值不在存取權 —— 那早就有了。價值在每次查詢都自動帶上正確的查法。
THE IDEALOCK THE METHOD INTO THE TOOL
營運
工程師
任何 AI
↓
MCP12 支唯讀工具業務邏輯鎖在裡面
↓
一個答案

價值不在存取權 —— 那早就有了。價值在每次查詢都自動帶上正確的查法。

FEATURES

沒有一支工具是先想出來再找理由 —— 每一支都對應一句我真的聽過的話

  1. 這張訂單到底發生什麼事?

    Before

    貼單號到工程群等人撈

    After

    query_sql + query_mongo

    設計理由

    設計時的堅持是 Mongo 一定要收:發票真正的開立結果、客人有沒有走到完成頁、遺失訂單的結帳快照——這些真相 SQL 裡沒有,只接 SQL 就會有一類問題永遠查不到。

  2. 這個規則現在到底怎麼運作?

    Before

    翻文件(可能舊了)、問資深同事(可能記錯)

    After

    search_code

    設計理由

    直接 grep 六個 repo 的遠端預設分支。程式碼是唯一不會過期的文件。

  3. 文件跟系統行為對不上,我要信誰?

    Before

    文件與系統行為對不上,只能再找人確認

    After

    explain_business_rule

    設計理由

    同時 grep 程式碼和語意搜尋文件,把兩邊並列回傳讓 AI 對照。code 是確定性的,它把整個答案的可信度撐起來。

  4. 文件真的舊了,然後呢?

    Before

    查到舊文件,還要另外排時間修改

    After

    propose_kb_update / apply_kb_update

    設計理由

    查到的當下順手產生修改草稿,人確認後發布。把「知識保鮮」從某個人的待辦事項,變成查詢的副作用。

  5. 這類問題每次都要重新想怎麼查

    Before

    每次遇到同類問題,都重新想一次查法

    After

    diagnostic_playbook

    設計理由

    把每一類問題的固定查法沉澱成可讀的 SOP。

  6. 營運寫的需求,工程還是要逐項逼問

    Before

    營運先寫需求,工程再逐項追問

    After

    draft_requirement_guide

    設計理由

    幫營運在寫需求的當下就找到整合點、範本與該回答的完整性問題。

DECISIONS — ADR

動手前的四個架構決策,全部寫進 ADR

每一個決策都有「另一條比較省事的路」,我把當時的取捨原樣寫出來——這些決策後來都進了只能追加的決策紀錄(ADR),讓之後接手的人看得懂當初為什麼這樣蓋。

  • 決策一:先用既有方案驗證,再用數據決定是否擴容

    工程師提議把 MCP 直接做成主站的 /mcp 路由,開發最快;我否決了,因為 search_code 會 clone 六個 repo、執行 git grep,可能與正式站搶資源。Windows 測試方案不支援 Python,也已放了九個站,因此我先部署到既有的 Linux B1 測試方案,額外成本為零。

    我知道這不是長期最穩定的架構,但現階段更重要的是用最低成本驗證需求。先觀察實際使用量與回應速度;若資源不足,或同仁已明顯依賴這套工具,再用數據爭取升級或獨立服務,支撐工程部後續開發全公司共用的 AI 工具。

  • 決策二:權限模型

    資料全面開放,不做角色分層。老闆本來就給了營運唯讀權限,如果 MCP 卡得更嚴,他們只會回頭裸查——那正是我要解決的問題。限制權限不會讓數字變準。

  • 決策三:查詢打哪裡

    query_sql 一律查唯讀副本,不碰正式資料庫。這是「爆炸半徑」思維:即使查詢出問題,最壞也只是副本變慢,不會影響客人結帳。

  • 決策四:寫入邊界

    對正式程式碼、資料庫、雲端資源永遠唯讀。唯一的寫入入口是知識庫,且經人工確認才落地。能讀的工具被騙最多回錯字;能寫的工具出事是另一回事。

架構決策的重點不是選了什麼,是把「沒選什麼、為什麼」寫下來。這四條每一條都擋掉過一次「當初為什麼不直接……」的重新討論。

FOUR DECISIONS ROADS NOT TAKEN 主機 在正式站裡 → 沿用現有 Linux 方案 · $0 存取權 角色分級 → 資料全開 查詢打到 正式資料庫 → 唯讀副本 寫入 開放寫入 → 只碰知識庫 + 人工把關 每一項都寫進只能追加的決策紀錄(ADR)
FOUR DECISIONSROADS NOT TAKEN

主機

在正式站裡
→
沿用現有 Linux 方案 · $0

存取權

角色分級
→
資料全開

查詢打到

正式資料庫
→
唯讀副本

寫入

開放寫入
→
只碰知識庫 + 人工把關

每一項都寫進只能追加的決策紀錄(ADR)

AI COLLABORATION

我跟 AI 的分工

這個專案的大部分程式碼由 AI 產出,但工具裡的業務判斷、風險邊界與驗證方式,都來自我對公司流程的理解。我的工作不是比 AI 打字快,而是把 code、數據與真實業務場景對起來,讓它產出的程式一開始就走在正確邏輯上。三個例子最能說明這個分工:

教它業績怎麼算。 「訂購日期看建單時間,不是續扣日」這種知識,AI 猜不到,欄位註解也不會告訴它。這是某次對帳失敗、追查半天才確認的規則。以前它只存在我的腦中與聊天紀錄裡;現在鎖進工具層,所有人與所有 AI 都會自動查對。

用真實範例校準它。 draft_requirement_guide 不讓 AI 憑空生成範本,而是比較需求庫裡四個寫得好的、三個被退回的、四個特別複雜的案例,歸納出「範圍、狀態、例外、口徑」四個必要條件。工程 PM 原本要事後追問的內容,就能前移到營運開始寫需求的時候。

接受它的不確定,再用架構補足。 知識庫的查詢展開由 LLM 執行,同一個問題重問,排名就可能變動。我沒有繼續追求不存在的「完美檢索」,而是讓 explain_business_rule 同時取得文件與程式碼,用確定性的 code 補住機率性檢索的限制。

我不訓練模型,我設計工具的邊界。模型會換、對話會斷,寫進工具層的業務邏輯才能留下來。

THE DIVISION OF LABOR EVERY CHAT = TRAINING AI 寫程式 我拿來驗證 真實資料 我回饋 公司的常識 規則鎖定 進工具裡 我不訓練模型,我訓練工具的邊界。
THE DIVISION OF LABOREVERY CHAT = TRAINING
01AI 寫程式↓
02我拿來驗證 真實資料↓
03我回饋 公司的常識↓
04規則鎖定 進工具裡

我不訓練模型,我訓練工具的邊界。

GOVERNANCE

把知識放在對的層級

會變動的知識放在 Markdown,穩定且高風險的能力才留在程式碼裡。diagnostic_playbook 就是這個原則的產物:每類問題的固定查法各寫成一個 .md 檔,工具只負責列出清單與回傳全文。新增查法只要新增檔案,不必改程式或重新部署。

這也是公司 AI 治理的一環。個人對話裡的 know-how,先沉澱成有版控、有審核流程的 skill;其中高風險、高頻,而且所有人必須拿到同一答案的內容,例如業績算法,再往下鎖進 MCP 工具層。越往下越穩定、越不容易出錯,修改成本也越高。先放對層級,才能同時保留速度與控制。

KNOWLEDGE, THREE LAYERS DOWN PUT IT AT THE RIGHT LAYER 聊天 個人的 · 關掉視窗就沒了 技能 Git + PR 審查 · 團隊共用 MCP 工具 鎖定 · 所有人同一個答案 比較好改 比較不會錯 高風險 · 高頻率 · 必須一致 —— 像業績 —— 沉到最底層
KNOWLEDGE, THREE LAYERS DOWNPUT IT AT THE RIGHT LAYER
聊天個人的 · 關掉視窗就沒了
技能Git + PR 審查 · 團隊共用
MCP 工具鎖定 · 所有人同一個答案

高風險 · 高頻率 · 必須一致 —— 像業績 —— 沉到最底層

SECURITY

照「假設一定會出事」來設計

這個工具讓十幾位同仁能直接查詢公司資料,因此安全不能只靠使用者小心。每人使用專屬權杖,沿用後台既有的 PAT 系統,撤銷一人不影響其他人;帳密集中託管,連線字串只留在伺服器端;每次呼叫都寫入稽核 log,記錄誰用了哪支工具、查了什麼、花多久、回傳多大。

驗證機制本身也必須被驗證。接上 PAT 後,我發現即使使用舊的共用密鑰,請求仍會回 200,表面上看不出實際走了哪條驗證路徑。最後我改看健康端點的「已快取身分數」是否增加;只有真正經過 PAT 驗證的請求才會進入快取。

「請求成功」和「走的是你以為的那條路」是兩件事。

DESIGNED FOR THE BAD DAY BLAST RADIUS 唯讀 副本 最壞情況:副本變慢 正式環境 完全不碰 一人一組 PAT · 每次呼叫都留稽核 · 憑證不離開伺服器
DESIGNED FOR THE BAD DAYBLAST RADIUS
唯讀副本最壞情況:副本變慢
正式環境完全不碰

一人一組 PAT · 每次呼叫都留稽核 · 憑證不離開伺服器

CHALLENGE 04

如何讓沒開過終端機的人,裝得起 MCP?

工具完成後,真正的採用問題才開始:怎麼讓十幾位從未開過終端機的同事,把 MCP 裝進自己的電腦?

第一版:操作手冊,加上「讓 AI 帶你裝」。 想法看似合理,實際上 AI 只把手冊轉述成「請打開終端機」「先安裝 git」等指令。對非技術同事而言,每一步都是新的門檻,最後仍由 IT 一台一台陪裝。我原本以為「手冊+AI」就等於有人帶,卻忽略了 AI 只是解釋步驟,沒有消除步驟。

對不會終端機的人來說,「請打開終端機」跟沒有說明是同一件事。門檻不是使用者的問題,是設計者的問題。

第二版:把門檻收進安裝包。 我把原本要使用者處理的環境檢測與安裝步驟全部寫進腳本:它會判斷目前進度,缺什麼就補什麼;中途失敗後重跑,也能從斷點接續。再搭配一支「幫同仁裝公司工具」的 skill,讓 AI 直接執行並用白話回報,而不是把指令丟回給使用者。正式發布當天,就有未經 IT 陪裝的同事自行完成安裝並開始查詢。

採用率是設計出來的,不是宣導出來的。

THE LAST MILE GETTING IT ONTO 17 LAPTOPS V1 · 手冊 +「讓 AI 帶你」 手冊 AI:「打開終端機… 先安裝 Git…」 使用者:??? → 它全程陪跑每一次安裝 V2 · 一支安裝程式,零提問 跑一支腳本 偵測 · 續傳 每一步都說明 使用者:正在用 使用者不需要知道 MCP 是什麼 —— 就像用電不必懂發電廠
THE LAST MILEGETTING IT ONTO 17 LAPTOPS

V1 · 手冊 +「讓 AI 帶你」

手冊→AI:「打開終端機…
先安裝 Git…」
→使用者:???
→ 它全程陪跑每一次安裝

V2 · 一支安裝程式,零提問

跑一支腳本→偵測 · 續傳
每一步都說明
→使用者:正在用

使用者不需要知道 MCP 是什麼 —— 就像用電不必懂發電廠

RESULTS

實際運作數據

8/18 上線,9/1 正式發布給全公司。截至 9/1:累計 1,702 次工具呼叫、14 位同仁實際查詢、17 人完成安裝,單日最高峰達 404 次。query_sql 使用最多(740 次,平均 3.4 秒),其次為 search_code(342 次,平均 7.3 秒)。

使用者組成比總量更能驗證目標是否達成:使用量排名第二、第三的都不是工程師。他們開始自行查會員、訂單與商品設定,不必再把同一類問題貼到工程群組等待回覆。

1,702 CALLS IN 14 DAYS WHO ASKS WHAT query_sql 740 · 平均 3.4 秒 search_code 342 · 平均 7.3 秒 search_kb 72 query_mongo 64 其他 8 支工具 484 14 位實際使用者 · 單日峰值 404 次 · 用最兇的第 2、3 名不是工程師
1,702 CALLS IN 14 DAYSWHO ASKS WHAT
query_sql740 · 3.4S AVG
search_code342 · 7.3S AVG
search_kb72
query_mongo64
8 other tools484

14 位實際使用者 · 單日峰值 404 次 · 用最兇的第 2、3 名不是工程師

LESSONS

會騙人的從來不是紅色的錯誤

正式環境暴露了測試階段看不到的問題:上線前兩天,SQL 全域連線快取一旦被 Azure 閘道切斷,就只會回傳「Not connected」,無法自行復原;容器沒有 git,導致 search_code 每次重啟後會有 1~2 分鐘無法使用;另有兩個必要設定缺少時,錯誤訊息完全沒有提示;備份排程也曾在半夜連續失敗六次才被發現。

最嚴重的是發布當天揪出四個「系統回報成功、實際上壞掉」的問題——其中一個是伺服器同步指令參數錯誤,意味著過去所有查法更新其實一次都沒生效,而系統從頭到尾都回報成功。

「沒有錯誤訊息」不等於「正常運作」。會騙人的從來不是紅色的錯誤,而是綠色的成功。

從那之後,每做完一項變更,我都會再問 AI:先假設它其實沒有生效,要用什麼證據證明它真的動了?

FIVE GREEN FAILURES EVERYTHING REPORTED SUCCESS OK SQL 斷線 兩天 OK 沒有 Git 容器 OK 無聲 421 / 連線中斷 OK 備份失敗 6 個晚上 OK 從未同步 跑了 「沒有錯誤」 ≠ 「正常運作」 會讓你付出代價的從來不是紅色的錯誤,是綠色的。
FIVE GREEN FAILURESEVERYTHING REPORTED SUCCESS
OKSQL 斷線兩天
OK沒有 Git容器
OK無聲 421 /連線中斷
OK備份失敗6 個晚上
OK從未同步跑了

「沒有錯誤」 ≠ 「正常運作」

會讓你付出代價的從來不是紅色的錯誤,是綠色的。

NEXT

下一步計畫

將稽核 log 接入 Log Analytics(目前僅輸出到容器、三天即清除);從查詢紀錄回推工具設計——大家實際輸入的問題,就是下一批 playbook 的題目來源;工程部的自動 triage(Phase 2)——錯誤訊息進來,用同一套工具自動查詢完成、產出交接文件,工程師接手,不自動執行任何修改。

NEXT 稽核紀錄 → LOG ANALYTICS playbook 來自 真實查詢 自動分流給 工程 分流不執行任何變更 —— 它只把查的部分做完
NEXTAUDIT LOG →
01LOG ANALYTICS↓
02playbook 來自 真實查詢↓
03自動分流給 工程

分流不執行任何變更 —— 它只把查的部分做完

STACK

技術架構

Python 3.13、FastMCP(Streamable HTTP)、Azure App Service(Linux B1,複用既有方案、零額外成本)、Azure SQL 唯讀副本、Cosmos DB for MongoDB、Bitbucket(六個 repo 鏡像 clone + 定時 fetch)、知識庫透過後勤知識助手的內部 API 重用、PAT 驗證與稽核 log、架構決策紀錄(ADR)。內部工具,原始碼不公開。

ARCHITECTURE READ-ONLY BY DESIGN CLAUDE 用戶端 ×17 PAT 稽核 MCP SERVER PYTHON · FASTMCP AZURE LINUX B1 12 支工具 SQL 唯讀副本 COSMOS DB · MONGO 6 個 Git repo · 鏡像 知識庫 寫入 = 人工把關 正式站程式/資料庫/雲端:永久唯讀 · 唯一的寫入路徑終點是人
ARCHITECTUREREAD-ONLY BY DESIGN
CLAUDE用戶端 ×17
PAT稽核
↓
MCP SERVERPYTHON · FASTMCPAZURE LINUX B112 支工具
↓
SQL 唯讀副本
COSMOS DB · MONGO
6 個 Git repo · 鏡像
知識庫寫入 = 人工把關

正式站程式/資料庫/雲端:永久唯讀 · 唯一的寫入路徑終點是人