五層 AI 開發體系:SPEC、Harness、Agent 到正道腦與 A2A

市面上的 AI(ChatGPT/Claude)本質上是一個很聰明、但會失憶、沒有紀律、也沒進過你公司廚房的實習生。這篇不從技術架構講起,而是照「一般人怎麼真的用起來」的順序,拆給不寫程式、但要做決策的主管聽:① 先從聊天框升級到會幫你做事的 agent、用起來就算得出 ROI;② 要認真做、要穩定,才需要那套鷹架(SPEC/Harness/Workflow);③ 再讓 agent 接上你的知識(RAG/GraphRAG/CAG)與系統(A2A);④ 最後是企業落地、治理、還有怎麼用一個請來的人輕度用,你看前面就夠;重度才往下。

重點摘要(TL;DR)

  • 先分清楚:聊天框(問一句答一句、每步你驅動)vs agent(給它一個目標、它自己跑多步+用工具+把整件事做完)。一般人先用一個唯讀 agent 幫你做「最煩、最多步」的活、你核准,就能算 ROI(省多少工時)。
  • ROI 用你本來就會算的數:省工時/卸掉 % 工作量/省下不用開發。導入順序別搞反——先有人用出效益 → 再收整成知識庫 → 最後才換自己的算力省 token(知識庫是「結果」不是砸下去的「起點」)。
  • 只有要「認真做、要穩定、開團隊」才需要那套鷹架:SPEC → Harness → Workflow → Agent → 大腦,由下往上疊;輕度可跳過。(其中 Harness 價值最高最被忽略——讓 AI 不失憶;本地小模型關鍵決策要寫死契約,否則它偷偷把 bcrypt/JWT 改成明文還說做好了。)
  • 方向反過來了:過去「資料 → 煉出模型」;現在模型是現成起點,反過來吃你的資料去產出。你的知識才是護城河。
  • 讓 agent 接上你的知識:看知識形狀選——問答固定→CAG、一堆文件→RAG、講關係與流程→GraphRAG;接舊系統/ERP 用 A2A/MCP
  • ⭐ 企業落地的分水嶺(全篇重點):把三個門檻壓低——引用(MCP 一行連、零檢索碼)、建立(老手「改」不是從零寫+charge 幾秒改一條)、理解(附出處、可追溯);再配上成本/ROI、上線後維運、治理與資安(給 agent 裝了手就要人閘),以及怎麼用一個請來的人(信任靠結構、不靠賭人品)。
↑ 目錄
PART 1 / 5
第一部 · 先動起來:從聊天框到 agent,先有感、先算帳
📑 目錄(點了直接跳章節)
第一部 · 先動起來:從聊天框到 agent,先有感、先算帳
第二部 · 想「認真做」才需要的鷹架(SPEC/Harness/Workflow)——輕度可跳過
第三部 · 讓 agent 接上你的知識與系統(RAG/GraphRAG/CAG/A2A)
第四部 · 企業落地:收斂 CAG、設計 A2A、治理與請人
第五部 · 控制台:把四顆腦收成一層控制平面

從聊天框到 agent:先用起來(一般人這步就夠)

↑ 回目錄  ·  下一節 ↓

大多數人第一次碰 AI 是「聊天框」——問一句、答一句,每一步還是你在驅動。真正改變工作的是 agent:你給它一個目標,它自己跑多步、用工具、把整件事做完。這一部先讓你「動起來、算得出帳」,不用先懂後面那一整套鷹架

💬 聊天框
問一句答一句;複製、貼到下一步、決定下一步——都你自己來。適合「單輪:幫我想/幫我寫」。
🤖 agent
給目標,它自己跑多步+用工具+會動手。適合「多步驟、重複、要跨系統搬資料」的活。

怎麼開始(就三步):下載一個 co-working/agent 工具 → 挑你最煩、最多步、現在都手動的一件活 → 讓它做給你看。它幫你把 5 步做完,就是 agent 特有的「有感」(聊天框給不了)。

怕它「亂搞」?別跳,爬梯子——越爬越放手:

agent 能做什麼為什麼敢用
1 唯讀/只提議跑多步「讀+整理+起草」,但不動手,最後你按核准不能亂搞——草稿錯你不送就沒事
2 帶工具、在沙盒給它真工具,但在副本/非關鍵做錯很便宜、傷不到正式
3 會動手,危險步要人閘能動作,但不可逆/高風險的一步要你確認有人核准閘(後面「治理與資安」會講)
4 熟了才自主已驗證的固定流程,放它自己跑有履歷、有 log 才升級
第一個 agent 一定是第 1 階(唯讀/提議)——這是拆「怕它亂搞」的關鍵。
🎯 一般人到這一步就夠了。挑最煩的多步活、用一個唯讀 agent 幫你起草、你核准——然後下一節就能算 ROI(省了多少工時)。
只有「要認真做、要穩定、要開一支團隊」的重度使用,才需要第二部那一整套鷹架(SPEC/Harness/Workflow)。非重度,第二部整段可以跳過,不影響你先用起來。

導入要花多少、多久回本?(成本與 ROI)

↑ 回目錄  ·  下一節 ↓

前面都在講「怎麼做」。老闆真正要三件事:花多少、多久回本、什麼時候該升級——三個都給你能對照的東西,而且都不用懂 AI

🎯 從實戰經驗:導入順序別搞反(知識庫是「結果」,不是砸下去的「起點」)
別一開始就砸錢建知識庫、Gateway、治理層。真正跑得起來的順序是「先用出效益、再收整成庫、最後才省算力」:
  1. 領域內先有人「真的用 AI 處理自己的工作」(個人、探索,先不談平台)。
  2. 跟「這件事本來要花多少時間」比對 → 這時才量得出效益(ROI 從這裡才有意義,不是一開始)。
  3. 確定能放大 → 把做法收斂、標準化
  4. 把這個人的經驗往上收整——關鍵一步:避免經驗跟著人走
  5. 這時才建知識庫 → 讓公司服務穩定化、持久化(換誰接都在)。
  6. 最後換成自己的算力 → 把 token 穩定省下
所以底下先示範步驟 1 怎麼點火,再進入第 2 步之後的成本/回本/升級判斷;知識庫(第 5 步)是把「已被驗證、值得留」的經驗固化,不是一開始的賭注。
⚠️ 邊界(誠實,這套對照「先試點再擴」「把內隱經驗外顯化」的知識管理、「自架要到量才划算」的成本模型,都站得住,但):① 純 bottom-up 少了一位有預算/授權的高層 sponsor 會卡(步 1 前先找到他——這是變革管理最強的成功因子);② 受管制/個資重的領域,步 1 前要先有最低治理護欄;③ 成敗押在兩步——步 2 要先手記「本來花多少時間」的基準(沒基準=量不出效益),步 4→5指定專人收整(默會經驗幾乎無法完全 codify、又不是誰的職責就不會發生,這是 KM 專案的墳場)。

步 1 怎麼點火:讓非 IT 人快速上手(這步最難)

六步裡步 1 最難——非 IT 人要先「有感」才會動。訣竅就三個字:降門檻(像問同事一樣打字)、挑真痛(他最煩的一件重複活)、帶做一次(在他自己的活上、當場做給他看)。

六個做法(照這個點火):
給聊天框、不給專案——像問同事一樣打字,零安裝零設定(要架給全公司用的聊天框,見後面「落地兩件事」那節)。
挑他「最煩的重複活」、不是炫技——重寫同類 email、整理會議記錄成待辦、答同一種客訴。除掉真痛點才有感。
帶著做一次、不辦訓練——20 分鐘在他自己的一件真工作上做給他看,他才會信。
給模板、不給空白框——每個角色先備 3–5 條現成 prompt(「改」比「從零寫」容易起步)。
拆「飯碗恐懼」(採用最大的牆)——不只「資料可試、試錯沒關係」,主管要明說「省下的時間歸你、AI 是幫手不是替補、不因此縮編」。
找種子人、給他「受保護的工時+公開表揚」——同部門的人信同事勝過信 IT;但沒有工時與認可,種子人「這不是我的 KPI」就會燒完即停(這正是 Citi 案例的真支柱)。

ROI 用他的單位算(一個月約 3000 元,三種他一聽就懂的講法):

講法怎麼算(以 3000/月 為例)判斷
省工時每天省 1 小時 → 月省 ~20 小時;只要他時薪 > 150 元就回本(多數白領遠高於此)明顯賺
卸掉 % 工作量解決他 20% 的量 → 月薪 5 萬的人=釋放 ~1 萬產能。但這 20% 的時間要真的被挪去做更高價值的事(或減量)才算數,否則只是紙上帳。對員工要講白:省下的時間歸你、去做只有你能做的事挪用才賺
省下不用開發用 AI+現成工具就解決 → 省掉一整套內部軟體的開發+維護(常幾十萬起),還讓整體迭代更快大賺(最常被低估)
關鍵:讓他當場自報一句「這件事我平常花 __、剛剛花 __」——那句同時是「有感」+ 步 2 的基準,ROI 自己就浮出來。
這不是空談——業界有個名字叫「AI Champions」,也有真實數字(各自出處見連結):最有效的種子人常來自非技術部門(可信度來自真工作,不是技術)。有 vendor 分析(Worklytics)指出:69% 的人把同事列為學 AI 的首要來源、peer-led 的持續使用率是純上令的 2.1×。實例:Citi 佈了 4000 名 AI Accelerators(+約 25–30 名 Champions)/18.2 萬員工 → 70%+ 採用Zapier 一年把採用從 65% 拉到 97%(走「全員 hackathon+部門推手」的文化強推路線,不純是 champion 制)。省時實測:Vodafone 每人每週省 ~3 小時(Microsoft/Vodafone 官方案例)、M365 Copilot 每月省 ~9 小時、ROI 116%、約 10 個月回本(Forrester TEI)。方向一致的是:只買 license 不「帶著做」回報差很多(角色化培訓 67% 持續採用 vs 泛用 23%)。
來源:2.1×/69%(Worklytics via aiassemblylines)Citi(Lead with AI)Zapier 97%(官方)Copilot 9h/月・116%(Forrester TEI)

一、花多少:分級成本表

不是報價,是幫你抓量級、避免被「先做個 PoC」拖成無底洞:

階段一次性成本經常性成本(每月)先證明什麼
PoC(1 個部門、1 個痛點)把 1 塊知識做成 RAG/圖 + 接一個聊天框(人月級)雲端 token(小)或一台夠用的機器單一流程真的被加速、且用戶願意用
部門級(幾條線上線)Gateway/前端建置、初期知識萃取+校準(領域老手時間)token 或本地 GPU 機攤提、Neo4j/向量庫/Gateway 維運、知識策展人力跨流程可複用、維護撐得住
全公司(聯邦式)治理層(registry/權限/稽核)、各單位建圖上面全部 ×N 單位 + 平台團隊治理與資安過關、各單位有人維護
兩筆最容易漏的一次性成本:使用者教育/change management(工具做好沒人用=專案陣亡頭號主因)、跟既有系統整合(SSO、資料源接入)——常比技術建置還貴。

二、多久回本、省多少:量這幾個你本來就會算的數

全是人時與人數,不用懂 AI:
單次省下人時(導入前 X 小時 → 後 Y);② 月省人時=(X−Y)×每月被做幾次;③ 需人工修正率(要人回頭改的比例)——真正決定正負的是偵錯+修正的耗時 vs 省下的時間,不是單看比例;>~20% 只是「先別擴」的經驗值,還要看每次改多貴、錯得多隱蔽(沒被抓到的錯最傷);+ 採用率(每週真的在用的人/目標人數——沒人用,再省時都是 0)。
回本點=「(月省人時 × 採用率 − 修正耗時) × loaded 時薪」累計 ≥ 建置+月維運(用可實現的省時、別只算毛值);粗抓:PoC 週級見效、部門級以季計、全公司以年計。
兩句心法:最大的經常性成本是「」(知識策展+維運)不是 token;先做能量測的 PoC 再擴,跳過 PoC 直接全公司是最貴的錯。

三、什麼時候該升級(不用你懂技術,看症狀就好)

你不用懂 CAG/RAG/GraphRAG/A2A 是什麼。你只要認得下面這些症狀——大多數主管本來就分得出來——看到了,把中間那句話丟給工程師,換什麼是他的事。

你(主管)實際遇到的你只要跟工程師說這句(工程師會做什麼,你可略過)
「它常一本正經亂編我們公司的事、答不出內部或最新的」「先把我們自己的資料接上」建知識庫
「有份大家一直問、又很少改的手冊/規定」「這份能不能讓它整份先記著、答快一點」CAG
「答案越來越慢、越來越貴,而且那份資料常在改「這塊改成用到才查」換 RAG
「問到牽一髮動全身/跨部門的,它答得零落、要人自己拼」「這種要能照關係一路查下去」GraphRAG
「同一件事,員工要在好幾個系統之間手動搬資料「讓這幾個系統自己對接、別靠人搬」評估 A2A
你的活是「認出症狀」,不是「選技術」。技術是工程師的活——這就是全篇那句「人出判斷、AI/工程師出實作」。
PART 2 / 5
第二部 · 想「認真做」才需要的鷹架(SPEC/Harness/Workflow)——輕度可跳過

一張圖看懂:五層堆疊,把實習生變成一支團隊

↑ 回目錄  ·  下一節 ↓

AI 開發體系是什麼?它是把「一個天才但會失憶、沒有紀律的實習生」,改造成「一支有菜單規格、有廚房水電、有出菜 SOP、有記憶、還會被師傅當場糾正的團隊」的一整套設計。先看這張堆疊圖,五層由下往上疊,愈下面愈是地基、愈上面愈換得起:

5 大腦/模型 🧠 廚師的腦袋 — 雲端聰明貴、本地便宜資料不外流
4 Agent(廚師) 👩‍🍳 真的下鍋的 AI — Claude Code/Pi/Aider
3 Workflow(出菜 SOP) 🔁 誰切、誰炒、誰驗菜 — 品質不靠賭運氣
2 Harness(廚房水電) 🔌 讓 AI 不失憶、自動帶規則、接管工具層 價值最高、最被忽略
1 SPEC(菜單規格) 📝 把「要什麼」寫到機器能驗 — 地基

同樣一張表,供你快速對照每一層「是什麼、為什麼要它」:

廚房比喻 它是什麼 為什麼要它
1. SPEC 點菜的菜單規格 需求規格 沒寫清楚,做出來一定不是要的
2. Harness 廚房水電瓦斯、冰箱 基礎工具設施 讓 AI 不失憶、自動帶規則、接管工具層
3. Workflow 出菜 SOP:誰切、誰炒、誰驗菜 工作流程 讓品質不靠某個資深廚師的直覺
4. Agent 廚師本人(主廚/學徒) 實際動手的 AI(Claude Code/Aider/Pi) 有人真的下鍋
5. 大腦/模型 廚師的腦袋 雲端大腦 vs 本地小腦 決定廚師多聰明、貴不貴、資料外不外流

先用你熟悉的老架構,接上 AI 時代

↑ 回目錄  ·  下一節 ↓

如果你做過系統,這一段最快讓你「接上」——因為骨架其實沒變,只是多疊了一層腦,而且有個方向整個反過來了。先看我們都熟的傳統三層:

傳統・簡單版
🖥️ 前端
⚙️ 後端 API
🗄️ DB
傳統・複雜版
🖥️ 前端
⚡ 快取
⚙️ 後端 API
📨 Kafka
🔧 後端 Job
🗄️ DB

AI 時代,這條交易線一條都沒消失——前端還是前端、API 還是 API、DB 還是 DB。它只是多長出一條平行的「智能線」

交易線(照舊,管 CRUD/流程)
🖥️ 前端
⚙️ 後端 API
🗄️ DB
+ 疊上 +
智能線(新的,管理解/生成)
🤖 Agent
查知識 →
🔎 GraphRAG(知識庫,像 DB)
🤖 Agent
要它想 →
⚙️ Ollama/vLLM(模型伺服器)
🧠 Model(運算核心)

這條線的中樞是 Agent——它負責發起與 orchestrate(決定要查什麼、問模型什麼、答案怎麼用)。它做事時往兩邊接:一邊查 GraphRAG(新的「知識庫」,像 DB,但放的是判斷與關係)當根據,一邊透過後端 API(Ollama/vLLM)Model(運算核心)幫它想跟生成。你原本的交易線沒被丟掉,只是多了這條「管理解與生成」的智能線。(Agent 到底怎麼透過 API 叫模型,下一段細講。)

講清楚定位:Agent + Model,中間就是一層 API(Ollama)

這裡有個一定要講清楚、不然定位會很模糊的點:Agent 不是「直接」跟模型講話的。AI 的運作其實就三段——Agent → 模型伺服器(Ollama/vLLM)→ Model

🤖
Agent
決定要問什麼、答案怎麼用
⚙️
模型伺服器 Ollama/vLLM
把模型跑起來、對外開一個接口
🧠
Model
真正的權重與運算
Ollama/vLLM 是什麼?就是「模型伺服器」。就像網站要跑在 Web Server(Apache/Nginx/IIS)上、Java 程式要跑在 Tomcat 上——你的模型也要有一台伺服器把它跑起來、對外開一個接口。Ollama、vLLM 就是這種「模型伺服器」(Ollama 適合在自己機器上輕量跑,vLLM 適合高流量的正式環境)。

跟傳統架構一模一樣的道理:前端不直接碰 DB,要透過後端 API;AI 這邊,Agent 也不直接碰模型,要透過 Ollama/vLLM 這一層 API。三者定位對照如下:

AI 元件 傳統對照 它到底是什麼
🤖 Agent 前端(發起請求的那端) 決定要問什麼、拿到答案怎麼用
⚙️ Ollama/vLLM 後端 API 把模型跑成一台「模型伺服器」(像網站的 Web Server),對外開接口
🧠 Model DB/資源 真正的權重與運算,被 API 載入執行
一句話記:Agent + Model,中間就是一層 API(Ollama/vLLM)。先前說「LLM 是運算核心」講得更精準一點就是:運算核心是 Model,但你操作它、把它跑起來的入口,是 Ollama/vLLM 這層 API。

Agent 是「身體」、模型是「腦」——兩邊要相襯

再往下看 Agent 到底在做什麼。過去,我們自己就是那顆「腦」:寫 crontab 排好固定時間跑、寫 bash 或程式把每一步寫死、甚至動態產生 Python 再執行——指令都是「人」事先寫好的。AI 時代換模型當腦:

過去(人當腦):crontab/bash/動態產生的 Python 指令是人事先寫死的,機器照跑
現在(模型當腦):模型即時吐回一段 JSON 指令(要呼叫哪個工具、參數是什麼) Agent 讀了照做

所以Agent 的角色,是「聽」後面那顆模型(透過 API)吐回來的 JSON 指令,然後忠實執行。模型當場寫腳本、Agent 當場照做。模型是出主意的,Agent 是動手的身體

關鍵:腦跟身體要相襯,才能相輔相成。配不好會出現兩種毛病:

🚫 腦強身弱
指令高強、身體不行
🧠 很聰明的模型 + 🤖 工具太少/harness 太弱 → 模型叫你做的事,Agent 根本做不到。
🚫 身強腦弱
身強體壯、聽不懂指令
🤖 一堆工具的 Agent + 🧠 太弱的模型 → 工具再多,模型給不出正確指令去指揮。
✅ 相襯
腦與身能力相配
🧠 模型 ⟷ 🤖 Agent 難度相當 → 指令做得到、工具用得上,相輔相成。
所以選模型和選 Agent/harness,要一起選。這也是為什麼前面說「重量級的 Claude Code 配小模型太重、Pi 配本地 8b 剛好」;而本地小模型「偷偷把 bcrypt 降級」則是另一種失配——身體想做,但腦子不夠。腦與身相襯,整條 Agent → API → Model 才跑得順。

AI 時代最重要的轉變:方向反過來了

↑ 回目錄  ·  下一節 ↓

這是整個 AI 時代最該搞懂的一件事。過去二十年,資料庫的世界從交易(OLTP)、分析(OLAP)一路走到機器學習(ML)。OLTP/OLAP 本來是給人看報表、做決策;ML 是後來(2010 年代)才疊上來、想「從自己的資料煉出一個模型」的野心——而模型一直是最難、最貴、最後才拿得到的東西。

過去:資料 → 模型(辛苦挖,終點是「做出一個模型」)
🗄️ 交易資料 OLTP
📊 分析 OLAP
🤖 機器學習 ML
🎯 MODEL(終點)
⟲ 方向反轉 ⟲
現在:模型 → 產出(模型是現成起點,反過來吃資料)
🎯 LLM 現成 MODEL(起點)
🔧 用 Ollama/vLLM 架一台模型伺服器
📥 吃你的資料/上下文
✅ 產出
一句話:以前是「資料 → 模型」,現在是「模型 → 產出」。模型從「最後才煉得出來的珍寶」,變成「別人花幾億訓練好、你直接拿來用的基礎建設」。你不用再從零煉模型;你要做的,是用 Ollama/vLLM 這類「模型伺服器」把模型跑起來,反過來餵它你的資料和上下文去產出。這也正是為什麼本文一直強調「真相在圖(GraphRAG)不在模型、模型是可替換的嘴」——模型變成人人有的基礎建設,你的資料和知識才是差異化的護城河。

第 1 層 SPEC:把「要什麼」蒸餾成機器能驗的規則

↑ 回目錄  ·  下一節 ↓

SPEC 就是需求規格,也是最常被跳過、最致命的一步。一般人給 AI 的需求是「幫我做個登入功能」——這對 AI 等於沒說,它會自己腦補。我們的做法是把模糊需求,一路蒸餾成「機器可以驗證對錯」的規則(我們叫 INV,invariant/不變量):

💬
模糊需求
「做個登入」
🧠
逼問題
brainstorm 定錨
📄
定錨規格
說清楚要什麼
機器可驗規則
違反就亮紅燈

判斷一條規格好不好,標準很簡單:

規格寫法 例子 能不能驗
好規格 「沒登記的手機號,絕對不能換到登入權限」 ✅ 可以寫測試,違反就亮紅燈
壞規格 「登入要安全」「要順」 🚫 「安全」是什麼?驗不了=等於沒說

關鍵心法:規格的金礦不在「要做什麼」(happy path),而在「絕對不准發生什麼」(負空間)。安全問題幾乎都藏在沒寫出來的禁止事項裡。

▶ 動手 Sample — 把需求蒸餾成機器可驗的規則(INV)
跟 AI 這樣說:
「把這份需求逐句掃一遍。對每一句問:為了它成立,什麼 MUST 永遠為真、什麼 MUST NOT 發生,而且『機器查得到』?每條寫成一句 MUST/MUST NOT + 一個會違反它的反例輸入,特別挖沒寫出來的『禁止事項』。不要幫我寫程式,只列規則。」

第 2 層 Harness:廚房的水電,讓 AI 不失憶

↑ 回目錄  ·  下一節 ↓

這是最容易被外行忽略、但價值最高的一層。AI 的致命傷是每次對話都失憶。Harness 就是一組自動化機關(技術上是 hooks +把 hook 接到工具層的橋接腳本),幫 AI 顧三件事:

🧠
不失憶
每次開工自動把「規則、踩過的坑」灌回它腦子
📏
自動帶規則
一進廚房就知道家規,不用每次提醒
🔧
接管工具層
AI 下的指令先過一層腳本,改寫、擋危險、記帳

這層幾乎是一次性建好、之後所有專案共用。它不讓 AI 變聰明,它讓 AI 不會蠢。要把 Harness 換輕量一點、接本地模型的實戰細節,可以看 本地 Agent 踩坑實錄:Claude Code 接 Ollama 為何要換輕量 Harness

Harness 裡面到底裝了什麼:hooks 與橋接程式

講白一點,hook(掛鉤)就是「在 AI 工作的某個時刻,自動幫你執行一段小程式」的機制。你不去改 AI 本身,只在它的生命週期上裝感應器和開關。設定寫在一個設定檔(settings.json)裡,AI 平台會在對的時刻自動觸發。AI 一次任務的生命週期,大概是這幾個時刻:

🟢 開對話 🔧 用工具前 🔧 用工具後 🗜️ 壓縮記憶前 🔴 回應結束

我們在每個時刻掛一段小程式,讓 AI「自動守規矩」:

時刻(hook) 我們掛上去做什麼 解決什麼
開對話 自動把公司家規+踩過的坑灌進它腦子 ✅ 不失憶
用工具前 跑測試前先把「上萬行冗長輸出」改寫成只留失敗那幾行 省錢、不塞爆記憶
用工具後 偵測到「修了一個 bug」就提醒把教訓寫回 BUG 腦 知識不流失
壓縮記憶前 先把目前進度存檔,免得壓縮後忘記做到哪 接得回去
回應結束 每輪記一筆帳(花了多少 token)、檢查有沒有漏更新腦 花費看得到

hook 只是「時刻」,它本身不做事——真正動手的是它在那個時刻去呼叫的一段 shell 腳本。這段夾在「hook 事件」和「AI 真正要跑的 Bash 指令」中間的黏合腳本,就是橋接程式。它把 AI 想下的指令攔下來改寫(例如把 npm test 改寫成「輸出導到暫存檔、只回傳失敗那幾行、保留原本的結束代碼」),再讓工具去跑改寫後的那條指令——等於在 AI 和它的工具(終端機、Bash)之間插了一層可控的關卡。(技術上 Claude Code 的 hook 是用 updatedInput 改寫指令、讓工具只跑一次,不是 hook 自己跑一遍再把結果塞回去。)

最實用的例子就是「跑測試」。AI 想下 npm test,如果直接跑,上萬行輸出會一次灌進它的記憶、又貴又把腦塞爆。橋接腳本在指令真正執行前把它接管掉:

🤖 AI 想下指令 npm test
▼ 用工具前 hook 攔截
🔧 橋接腳本改寫指令:完整輸出導到暫存檔 → 只挑「失敗那幾行」→ 保留真正的成功/失敗代碼
▼ 交回
AI 只收到幾百字精簡結果 (上萬行 → 幾百字,錯誤偵測仍然準)

這一層要小心一條紀律:只對「會噴一大堆字」的窄名單指令(跑測試、編譯)動手,一般讀檔、撈資料的指令原封不動放行。不然把 AI 需要的完整內容也截掉,反而害它拿到殘缺資訊。同樣的橋接,也能拿來擋危險動作、或在指令跑完後記一筆帳。

一句話:hooks 是裝在 AI 生命週期上的自動感應器(決定「什麼時刻」要出手),橋接腳本是把這些時刻接到真正 Bash 工具層的黏合劑(決定「出手時對指令做什麼」)。這兩個合起來,AI 的每個動作都在可控的關卡裡跑——這就是 Harness 這層的價值。
▶ 動手 Sample — hooks:開對話注入規則 + 跑測試前砍冗長輸出
~/.claude/settings.json 掛兩個 hook(要打開的就這兩個):
{
  "hooks": {
    "SessionStart": [
      {"hooks":[{"type":"command","command":"cat ~/.claude/rules.md"}]}
    ],
    "PreToolUse": [
      {"matcher":"Bash","hooks":[{"type":"command","command":"~/.local/bin/trim-verbose.sh"}]}
    ]
  }
}
橋接腳本的核心 — 只對 test/build 這種會噴一大堆字的命令動手,其餘原封放行:
# PreToolUse hook(掛在 Bash):不自己跑指令,只「改寫」AI 要下的那條,讓工具跑改寫後的版本一次。
# 只對 test/build 這種會噴大量輸出的動手;其餘原封放行。用 updatedInput 換掉指令:
{
  "hookSpecificOutput": {
    "hookEventName": "PreToolUse",
    "permissionDecision": "allow",
    "updatedInput": { "command": "npm test 2>&1 | grep -E 'FAIL|ERROR' | tail -50" }
  }
}
# ← 工具實際只跑「改寫後」這條一次;成功/失敗由這條指令自己的結束碼決定(hook 不自己跑、不塞結果)

第 3 層 Workflow:出菜 SOP,用「對抗迴圈」保品質

↑ 回目錄  ·  下一節 ↓

一個廚師從頭做到尾,你不知道哪一步會出包。所以我們設一條「產出 → 找錯 → 打回重做」的對抗迴圈,外加兩道人工關卡

👩‍🍳
產出 AI
動手做菜
🕵️
驗貨 AI
專門找它的錯
🚪
兩道人工關卡
過關才 merge
↺ 有錯就打回重做,直到達成「機器可驗的過關條件」才放行
  • 動手的 AI 做完,另一個 AI 專門找它的錯,打回去重做(這叫 Generator-Verifier,產出者 vs 驗貨者)。
  • 關鍵:驗貨的那個不能跟產出的那個共用同一套想法,不然等於自己改自己考卷,一定看不出錯。
  • 要有明確的「什麼條件才算做完」(stop 條件),否則 AI 會無限迴圈——我們真的燒過一整天,就是 QA 沒有停止條件、找 bug 找了 21 輪停不下來。

那條迴圈為什麼不會空轉一整天?關鍵是有一個「PM 角色」把守兩道閘。少任何一道,迴圈就會發散、永遠收不完。完整流程長這樣:

🚪 PM 第一道閘:先寫清楚「要做什麼」+「絕對不能違反的紅線」
沒有這份契約,驗貨的 AI 沒有比對基準,會把每個觀察都當 bug 報
👩‍🍳 工程師 AI:動手做 + 開一份「我改了什麼、對應哪條紅線」的清單
🕵️ 驗貨 AI 群(並行,各驗 1~3 條紅線):只准回三種結果
✅ 通過 ❌ 違反(附重現步驟) ⚠️ 怪怪的說不上來
🚪 PM 第二道閘:把每個「怪怪的」分成四類 — 真 bug / 新需求 / 使用者不會用 / 其實沒問題
工程師只修「真 bug」那類 → 回頭重跑,直到全部紅線變綠、兩個 AI 結論一致才收工

幾條反直覺、但用血換來的規則:

規則 為什麼
驗貨 AI 不准自己蓋章「這是嚴重 bug」,只能標三種結果 不然它會把「規格根本沒寫的需求」也當 bug,工程師被牽著鼻子走、永遠修不完
派兩個驗貨 AI、第二個不准看第一個的報告 兩個獨立都說綠=真綠;結論不一致=規格還有洞,該回去補規格,不是狂派更多人
「派 10 個都能挑到問題」不是工程師爛 ⚠️ 是規格還沒長硬 → 回頭把紅線寫清楚,別再加人
真人親手點過一遍,永遠是最後一道防線 🚫 AI 驗貨跟 AI 做事同一個腦系,會一起漏;真人實測才抓得到

還有一個關鍵:這套流程靠三份分開的文件撐著,混在一起就會亂——規格(要做什麼,改得慢)、紅線清單(絕不能違反的事,每修一個 bug 補一條)、SOP(誰在什麼時候做什麼,方法論成熟後鎖死)。

▶ 動手 Sample — 派驗貨 AI:只驗 1–3 條紅線、只准回三種結果
跟驗貨 AI 這樣說:
「你只驗這幾條 INV:INV-AUTH-001、INV-IDEM-002。每條給我:✅ 通過/❌ 違反(附重現步驟)/⚠️ 說不上來。不要順便找任何其他 bug、不要提修法。你沒有權限標 P0/P1。」
工程師開 PR 的 header 模板(必填):
## INV 宣告
- INV-AUTH-001: 未登記手機號不可換到 session
- 驗證層: L3(resolver)
- 反例測試: TestOTP_UnregisteredPhone_Rejected
給主管的重要警訊:別把 AI 團隊搞成組織圖
很多人把 AI 團隊命名成「PM Agent、架構師 Agent、QA Agent」,搞得像公司部門。這是幻覺。職稱標籤對 AI 沒有「讓它更專業」的效果,只有「讓它拒絕越界」的壞處。Stanford 有一篇資訊理論的論文指出:在多跳推理任務、同算力預算下,單一 AI 常打平或勝過一堆分工的 AI(每次 agent 交接只會流失資訊)。很多「多 agent 比較強」的宣稱,只是偷偷花了更多錢(token)而已。所以我們拆團隊是看資訊邊界拆,不是看職稱拆

第 4 層 Agent:一張決策樹決定「這件事派給誰」

↑ 回目錄  ·  下一節 ↓

Agent 就是「動手的廚師」,差別在貴不貴、聰不聰明、資料外不外流。同樣一顆會用 GPT 的腦,差別只在有沒有手(工具)——這個觀念在 會用 GPT 就會用 Agent:同一顆腦,差在有沒有手 講得更白。到底一件事該派給誰?照這張決策樹走:

① 這件事是關鍵或牽涉安全嗎?(登入、金流、資料保護)
是 → 雲端主廚 Claude Code(最聰明,關鍵決策要它扛)
否 → ② 規格夠明確、範圍夠小嗎?
是 → 本地學徒 Pi / Aider(不用錢、資料不外流)
否 → 還是先回雲端主廚(模糊的活別丟弱腦)
廚師 定位 適合的活
Claude Code(CC) 雲端主廚,最聰明,但貴+資料要送出去 ✅ 架構、安全設計、複雜邏輯
Pi / Aider 本地學徒,跑在自己機器上,資料不外流、不用錢 規格明確的小事(腦子小)

實測結論:在我們這台機器上,配本地小模型時 Pi 表現最好,CC 對小模型反而太重。

▶ 動手 Sample — 把規格明確的小事派給本地學徒 Pi
本地模型跑在 Ollama 上,用 Pi 當 agent 驅動它(資料不外流、不用錢);關鍵決策寫死進 prompt、逐檔委派:
pi -p -a --thinking off --provider ollama --model qwen3:8b \
   "照 SPEC.md 產生 hash.ts;只准用 bcrypt,別改其他檔"

第 5 層 大腦:換腦袋能力天差地別,本地小腦會偷偷降級

↑ 回目錄  ·  下一節 ↓
誠實補一句(模型可換,但…):「換任何模型都能讀你的知識」講的是知識層(GraphRAG/MCP/A2A 都跨模型)。但 Harness 那層(hooks、CLAUDE.md、claude mcp add)目前綁 Claude Code——換別家 agent 這層要重做。這是可接受的取捨,不是「零鎖定」。

同一個廚師(agent),換不同腦袋(模型),能力天差地別。雲端大腦(Claude 的 Opus/Sonnet/Haiku)聰明,但貴+資料外流;本地大腦(Ollama 跑的 qwen3:8b 等)免費、資料留在公司內,但小、慢。要落地一台自己的私密 AI 分身,可以參考 DGX Spark 打造私密 AI 分身:選一台、跑哪個模型、Day 1 落地

我們用 A2A 實驗驗過一件對企業很重要的事:把一份「production 等級的登入系統設計稿」丟給本地小模型做,它會分岔成兩種結果——

把 production 設計稿整包丟給本地小模型
╱     ╲
⚠️ 可接受
誠實超時
做不完,至少沒騙你
🚫 高風險
偷偷降級腦補
嫌 bcrypt、JWT 太難,自作主張全丟掉、改成明文存密碼,還跟你說「做好了」
一定要記的一條:本地小模型能用,但關鍵決策——尤其是安全——必須「寫死在契約裡」,而且要逐個檔案派給它、不能整包丟。便宜的腦不是不能用,是不能讓它自己做承重判斷
▶ 動手 Sample — 架一台「模型伺服器」把模型跑起來
單人/本地用 Ollama,多人高併發用 vLLM(差別是「同時多少人打」,不是「模型大小」),兩者都是把模型 serve 成一個接口:
# 本地、單人用:Ollama(好裝、低併發,資料不出門)
export OLLAMA_KEEP_ALIVE=30m   # 關鍵:模型別一直被卸載
ollama serve                   # 開伺服器
ollama run qwen3:8b            # 載入一顆模型

# 很多人同時打、要高併發吞吐:改用 vLLM(重點是併發,不是模型大小)
vllm serve Qwen/Qwen3-32B --port 8000   # 有 GPU 就上更大顆的腦;8B 也能跑,看你要多大

進階:什麼時候該從「一個廚師」升級成「一支團隊」?

↑ 回目錄  ·  下一節 ↓

前面說 Agent 是動手的廚師。但有些菜一個廚師就做得完,有些要一整個團隊。「什麼時候開團隊、怎麼開」本身就是 SPEC 和 Workflow 的變種——決定「派幾個人、各做哪一小塊、做完怎麼算數」,就是在寫一份規格和流程。這件事我們做過非常多次,也失敗過非常多次:開了團隊反而越改越亂、改了一整天收不了尾,甚至為了收拾平行改檔的爛攤子動用到特殊的版本控制工具。這一段把踩過的坑講白。

先搞懂:「開很多代理」不等於「Agent Team」

先破一個超常見的誤會。很多人跟 AI 說「幫我開很多代理」,看到一堆代理在跑,就以為這是 Agent Team。其實不是。「一堆各做各的代理」跟「一支真正的團隊」,差在四件事:

❌ 很多人以為的「一堆代理」
🧑 你
🤖🤖🤖 一堆子代理(每個都扛「一樣重」的全部工作)
💸 各做各的、成本爆高、不收斂
✅ 真正的 Agent Team
🎯 控球中心(定一個目標+分工)
✂️ 切成小任務
🤖 各拿一小塊(範圍清楚)
✅ 交回統整、省、收斂
開一堆子代理(很多人以為的) 真正的 Agent Team
有沒有指揮 沒有,各做各的 有「控球中心」統籌
開工前 直接開,沒定目標分工 先定一個共同目標 + 分工
每個代理拿到的工 一樣重(都扛全部) 小而清楚(一小塊、範圍鎖死)
處理方式 各自平行硬幹 分段處理、各司其職、做完交回
Cost 很高(每個都燒一份完整) 省(小任務、用完即拋)
一句話:團隊的靈魂不是「人多」,是「有指揮、有共同目標、有分工、任務切小」。打個比方——真正的團隊像 CPU 有一個排程器(控球中心),把工作切成小任務、分派給底下的執行單元分段處理,每個人拿到的指令都少而清楚;而不是叫一堆人各自扛一份「全部」硬幹。人多而無指揮 = 一盤散沙 + 帳單爆炸。

這個差異,正好解釋一個很多人碰過、卻講不出所以然的怪現象——

同樣叫 AI「開團隊」,有人做得超順、有人做到崩潰,而且兩邊都說不出為什麼。因為他們其實開的是不同東西:順的那個(常常是不自覺地)剛好搭出了「控球中心+目標+分工+小任務」的結構;崩潰的那個,是一堆各扛全部工作的代理在互相打架。可怕的是——他們都只盯著「AI 到底行不行」,卻沒看到真正的變因是「結構」。於是做不順的人只會做一件事:一直加錢、一直加代理,想硬做出「用這種方式根本做不到」的事,燒到最後回來怪「這是 AI 的問題」。
成敗不是 AI 的品質問題,是你有沒有(哪怕不自覺)搭出團隊的結構。看不到結構,就只能怪工具、然後無止盡地燒錢。這也是為什麼這篇一直強調「控球中心、可驗證目標、分工、任務切小」——它們不是理論,是「做得成」跟「燒錢崩潰」之間的分水嶺。

先破迷思:多找幾個 AI,不是免費的

直覺會覺得「人多好辦事」,但這在 AI 身上常常反過來。幾個實測證據:

證據 結論
Stanford:同樣算力預算比較 需要「一步接一步推理」的題目,單一 AI 常打平或勝過一堆分工的 AI
Google×MIT:180 種組合實測 可平行的任務 +81%;但要照順序的任務退化 39~70%
錯誤放大效應 🚫 各自為政的 AI 把錯誤放大到 17 倍;有協調者也還有 4.4 倍
7 套業界多代理系統實測 ⚠️ 失敗率 41~86.7%,多數是「設計問題」不是模型不夠強
來源:Stanford《Single-Agent LLMs Outperform Multi-Agent…》arXiv:2604.02460;Google × MIT《Towards a Science of Scaling Agent Systems》arXiv:2512.08296(180 組合、+81%/退化 39~70%、錯誤放大 17.2×/4.4×);《Why Do Multi-Agent LLM Systems Fail?》arXiv:2503.13657(MAST,1600+ traces、失敗率 41~86.7%)。
我們親身踩過的:開了一個多角色團隊,彼此互相檢查、互相回報,結果「一直冒錯誤、一直改、改了一整天」還收不完。根因不是工程師爛,是沒有一個機器可驗的「做完」定義,加上一堆 agent 互相製造工作——不是收斂,是放大。

Agent Team:一個人,還是一支團隊?

↑ 回目錄  ·  下一節 ↓

不要預設「大專案就開團隊」。照這張閘一路問下來:

① 一個 AI 的腦袋(記憶容量)裝得下、又能一條龍做完嗎?
是 → 一個 agent 就好,別開團隊
否 → ② 是「只讀不改」的活嗎?(稽核、找 bug、掃描)
是 → 可平行開多個(讀不會打架),但只准回報告
否(要動手改檔)→ ③ 各塊工作能切乾淨、互不踩線嗎?
是 → 開團隊,但每人一塊獨立工作區
否 → 別平行寫,改成一個人一條龍寫、其他 AI 只在旁邊給意見

我們自己歸納出來的判準(不是論文結論):只有三種情況真的值得拆團隊——① 有一堆髒資訊會污染主腦(派子代理去做髒活、只回幾十字摘要);② 要同時探索多個獨立方向(目標是「蓋得廣」不是「跑得快」);③ 工具太多或人設衝突。而且要按「資訊邊界」拆,不是按「工作類型」拆——寫功能的 AI 就該順手寫它自己的測試,因為它已經有完整脈絡;硬把功能和測試拆給兩個人,只會逼對方重新搞懂一次。

怎麼編團隊:看「視角」,不是看「頭銜」

  • 不要問「我有 3 個位子,塞哪些角色」,要問「這件事需要哪些視角想過」。人數是算出來的結果,不是一開始就定的輸入。
  • 每個視角打分(有多重要 × 涉及多廣):高分給專人、中分兩個視角共用一人、低分塞進別人的任務說明裡順便戴帽子。
  • 反直覺:越小的任務越需要資深視角。一個 3 行的「健康檢查」端點,寫程式的風險≈1,但「這個端點決定要不要重啟正式主機」的維運視角≈6——所以那 3 行該給一個維運腦來寫,不是隨手丟給打字快的。
  • 受機器記憶體限制:一台 32GB 的機器,扣掉系統,大概同時跑十幾到二十幾個混合模型的 agent。超了就把最不重要的兩個併起來。
踩過的坑:別把編制寫成「死文件」。列了「8 個職稱+預估工時」的團隊編制表,跑幾輪就過時、沒人讀、也沒人更新,變成殭屍。真正該寫死的是不會變的部分(預算上限、視角分類);「這次誰做哪一塊」要寫在每個回合都會被重讀、重更新的活文件裡。

動態派工:用完即拋、小而專注的 agent(這是解藥)

「改一整天收不完」的解藥,是不要養一排常駐團隊,改成每個回合依當下任務臨時生出、範圍鎖死、做完即丟的 agent

🎯
依任務生一個
臨時、當下需要才生
🔒
範圍鎖死
只驗 1~3 條紅線
「不要順便找別的」
🗑️
做完即丟
不常駐、不累積
  • 範圍鎖死是關鍵:每個 agent 只驗 1~3 條紅線、被明令「不要順便找任何其他 bug」。這樣每個 agent 有邊界、會收斂;不鎖範圍,就是「找到天荒地老」的無限迴圈。
  • 現在的工具還能自動分層:主腦用最聰明的模型負責「想」跟統整,一堆掃描小工自動派便宜快速的模型負責「找」,不用手動配。
  • 硬限制要知道:同時大約最多 16 個(8 核機器實測約 7 個)——注意這是平台本身的併發上限,跟前面「記憶體能撐十幾廿幾個」是兩件事、兩個都要滿足(取小的);單次累計上限約 1000 個、而且中途不能停下來問你——需要你臨場拍板的題目,別丟進這種自動流程。

Agent Team:合併,以及為什麼會用上 jj

↑ 回目錄  ·  下一節 ↓

一支團隊平行改檔,最後要把成果合在一起。這一關最容易爆,也是 Tom 提到「甚至動用到 jj」的地方。問題的本質不是工具好不好,而是「衝突發生時,需不需要你人在現場」

工具 遇到合併衝突時 你能不能離開現場
git 卡住,整個停下來等人手動解 ⚠️ 得盯著(同步注意力)
jj(jujutsu) 衝突變成一筆「之後再批次處理」的紀錄,合併不中斷 ✅ 人可以先走,回來一次收(非同步)

所以 jj 的價值不是「比較快」,是「讓系統在你睡覺時照跑」——你不可能盯著 3 個 agent 即時解衝突。但底層有兩件事要先做對:

🧑‍🍳 Agent A
自己的工作區
🧑‍🍳 Agent B
自己的工作區
🧑‍🍳 Agent C
自己的工作區
▼ 各自做完,進合併關卡 ▼
🔀 合併關卡:git 逐一合、遇衝突就卡;jj 全部先合、衝突留著晚點批次解
  • 每個 agent 一定要有自己的獨立工作區(各自的資料夾)。兩個 agent 同時寫同一個檔=檔案層的搶位子,這是 VCS 救不了的,得先隔離。
  • 日常還是用 git,只有團隊合併那一刻才切 jj(少數幾個指令),零綁定、隨時拆掉、git 專案照樣完整。判準很簡單:這些 agent 需要動手寫檔嗎?純稽核/review=只讀=用 git 就好;平行開發、debug 試假設=要寫=jj 才划算。
  • 踩過的血雷:解完衝突別把一長串指令串一起跑。其中一步默默失敗(例如工具說「檔案已被改」你卻當沒事)會被後面成功的指令蓋掉,結果把「衝突標記」原封不動送上去。鐵則:解完衝突、`git add` 之前,先用 grep 確認檔案裡沒有 <<<<<<< 這種標記,才准往下走。
開團隊前先問三題:①「一個 agent 是不是真的不夠?」(先證明瓶頸在哪,不是為多而多)②「工作能不能切乾淨、互不踩線?」③「做完的定義是不是機器可驗?」三個都 yes 才開團隊;任一個 no,一個專注的 agent 通常又快又穩。多找人不是免費的——它換來的是協調成本和合併地獄。
▶ 動手 Sample — 讓 AI 正確分工的 prompt + 流程
先決定要不要開(三個都 yes 才開):
① 一個 agent 真的不夠嗎?
② 各塊工作能切乾淨、互不踩線嗎?
③ 完成條件能寫成一句機器可驗(例如 go test ./... 全綠)嗎?
要開的話,跟主控 AI(控球中心)這樣下 prompt,逼它「先切好分工、再動手」:
目標:寫一句可驗證的話,例如「db/ 下每張表都要有完整 RLS,且 make test 全綠」。

照這個流程做,不要一次全做
① 先把目標切成『互不重疊』的小塊,列清單給我確認(先別動手)。
② 我確認後,每一塊各派一個 worker;每個 worker 只給『它那一塊 + 完成標準』,並明令:只做這塊、不要碰別的檔、不要順便找別的問題。
③ 每個 worker 做完把結果回報給你,你負責彙整、檢查有沒有互相衝突。
④ 全部達到完成條件才算完;卡住就停下來問我,不要自己亂加工。」
關鍵就是第 ① 步——先切分工、你確認(=控球中心),而不是一句「幫我開很多代理」讓它各做各的。
PART 3 / 5
第三部 · 讓 agent 接上你的知識與系統(RAG/GraphRAG/CAG/A2A)
⚠️ 先分清楚兩種「腦」(很多人在這裡搞混)
🧠 AI 的腦 = 模型(MODEL)
= 第二部第 5 層那個「大腦」。通用推理引擎、別人訓練好、可替換;很會講,但不記得你家的事。換 Claude/GPT/本地都行。
📚 公司的腦 = 知識/KM
= 本部的正道腦/GraphRAG。你專屬的真相與經驗、可糾正、可追溯;換哪個 AI 都讀同一份。這才是護城河。
一句話:模型是「會想的通用腦」,KM 是「你家的記憶」——腦可以換,記憶不能丟。本部(含底下說的「正道腦/BUG 腦」)講的「腦」,全是指後者(公司的知識),不是第二部的模型。

先搞懂三個詞:RAG、GraphRAG、CAG——以及為什麼要有它們

↑ 回目錄  ·  下一節 ↓

接下來會一直出現 RAG、GraphRAG、CAG。先用一頁把「各是什麼、為了補哪個洞」講清楚,後面幾節才好深入。

根源問題:光一顆模型不夠用。通用模型很會講,但它不知道你公司的事會一本正經地編(幻覺)、而且知識凍結在訓練那一刻。所以你得想辦法「把你的知識餵給它」——這三個詞,全是在解這件事,差別只在「怎麼餵、餵什麼形狀的知識」。

名詞一句話是什麼補哪個洞一句比喻
RAG 外接一份「用時才翻」的資料,把相關段落撈進 prompt 再讓模型答 不知道你的事、幻覺、過時 開書考:答之前先翻相關那幾頁
GraphRAG RAG 的「關係版」:走的是實體與關係的,不是找相似段落 不會精確串關係、看不出全局主題 開書考,但查的是索引與連結:照 A→B→C 走
CAG 知識有界又穩定時,事先「整份先攤進 context」(預載 context/KV 快取)、跳過檢索 每次都要檢索的 overhead 開書考、但整本已翻開攤在桌上:不用臨時翻頁找
為什麼會演化成這三個(一條線看懂):
先有 LLM(通用腦,但有上面那些洞)→ 用 RAG 外接你的知識補洞 → 如果你的知識是「實體+關係」(合規、供應鏈、組織、ESG 框架互相對應)→ 升級成 GraphRAG → 如果某塊知識又薄又穩定、還一直被問 → 用 CAG(整本攤在 context 桌上、不用臨時翻)加速。
它們不是互相取代,是看「你的知識長什麼樣」選工具。下面幾節逐一深入。
🎯 給 domain 專家(不用懂 AI,這段就夠)
你不用懂 RAG/CAG/GraphRAG 是什麼。你只要問自己一句:我這塊知識,長什麼形狀?——這是你的本行,你比誰都清楚。
你的知識長這樣就是這個一句話
答案就那幾條、固定、很少改(手冊、規定、FAQ、規格表)CAG整本攤在桌上
一大堆文件、要翻出對的那幾份(合約庫、案例、報告)RAG翻書
講關係、講流程、什麼牽動什麼(製程、BOM、法規對應、供應鏈)GraphRAG走關係
三種都有?大公司幾乎都是——那就每塊丟給對應的那一個,AI 問到哪種問題就自己走哪條。你只負責把「哪塊是哪種形狀」分好,剩下交給工程師。你的分類判斷才是關鍵,AI 只是執行。

正道腦 / BUG 腦 / GraphRAG:把知識結構化

↑ 回目錄  ·  下一節 ↓

前面五層是「怎麼做事」。這四個是「怎麼讓這套東西越用越聰明、而且不會被 AI 幻覺帶歪」。這才是跟一般「買個 AI 工具來用」最大的差別。

BUG 腦(防錯腦)vs 正道腦:兩種知識分開存

🩹
BUG 腦(防錯腦)
踩過的坑筆記:「上次這樣做燒焦了」
負面知識・容許模糊・被諮詢
正道腦
對的做法:「這道菜正確步驟是這樣」
正面真相・要精確・不容錯

工業、醫療、長照這種錯了會出人命或賠錢的場域,必走正道腦。而最核心的一條設計哲學,是我們用血換來的判斷:把每塊知識切成「事實」和「判斷」兩半——

🧱 事實 = 地基(不會背叛)
「我曾經錯在哪」+「現在資料庫真實是多少」→ AI 引用這個最可靠
🍂 判斷 = 易朽(會背叛)
「正確做法應該是這樣」→ 架構一改就過期,最容易幻覺
事實是地基、判斷會背叛。所以我們讓 AI 優先引用事實,而不是標準答案——AI 引用「你曾錯在哪」最可靠,叫它講「該怎麼做」最容易幻覺。

GraphRAG:真相在「圖」,不在「模型」

↑ 回目錄  ·  下一節 ↓

GraphRAG 是把知識存成一張關係網(圖),而不是塞進 AI 模型裡。最關鍵的一張概念圖:知識放在外面那張圖,模型只是「一張可替換的嘴巴」,嘴換了,腦子不變——

Claude GPT 本地模型 ← 可替換的「嘴」
▼   都讀同一份   ▼
🗺️ 知識圖(真相在這裡)
師傅可幾秒改一條線,並留下「誰改、何時、為什麼」

它有三個殺手級好處:

好處 GraphRAG(知識放外面的圖) fine-tune(把知識訓練進模型)
換模型 ✅ 換誰都讀同一份真相 🚫 綁死在那顆模型
知識過期 ✅ 幾秒改一條線、可追溯 🚫 改不掉、查不到原因
成本 ✅ 改資料就好 🚫 花大錢重訓

餵知識進圖的實務做法,是資深業界獨立驗證過、跟我們架構一致的兩階段加權:

🤖
Pass 1:機器打樣板
把公開資料整理成流程樣板(基準)
🧑‍🔧
Pass 2:老手來改
領域老手「改」不是「從零寫」,所以願意動筆

前提是第一刀要挑「大方向八成像、只改細節」的領域下手,不然老手覺得「全錯不如重寫」,整個崩掉。想看 GraphRAG 跟一般 RAG 的差別、以及一個完整的實作案例,可讀 GraphRAG vs RAG + A2A:後端工程師的請假流程 AI 實作

為什麼 LLM 需要 GraphRAG?它到底幫 LLM 補了什麼

LLM 本身已經很會講話了,為什麼還要接 GraphRAG?因為一顆「單獨的」LLM 有幾個天生的洞,GraphRAG 正好補這幾個。先打個比方:

LLM 像一個讀遍整個網路、很會講、但「沒進過你公司、還會自信亂編」的顧問。你不會讓這種顧問空口回答「我們倉庫現在多少貨、這批卡在哪」——他一定唬爛。GraphRAG 就是在他開口前,把你公司「真實、最新、有關係」的事實攤在他面前,讓他只能照著講。

具體來說,GraphRAG 幫 LLM 補這四個洞:

LLM 天生的洞 GraphRAG 補上的功用
🕳️ 不知道你的事
它學的是公開資料、還有截止日,不含你公司的私有與即時事實
給它「你家的真相」(接地氣)
🕳️ 會自信幻覺
沒把握也會講得像真的一樣
讓它「照事實講、不准亂編」
🕳️ 不會精確串關係/給正確數字
多跳推理、精確數字是它的弱項
先把關係走完、數字算好,它只負責講人話
🕳️ 學到的改不動、會過期
模型權重固定,重訓又貴又慢
改一條關係就即時更新、可追溯,不用重訓
只有 LLM
❓ 問題
🧠 LLM(憑記憶+腦補)
⚠️ 過期/幻覺/不知你家事
LLM + GraphRAG
❓ 問題
🗺️ GraphRAG 給真實事實
🧠 LLM 照著講
✅ 正確・接地・可追溯
一句話:LLM 提供「會講話的通用腦」,GraphRAG 提供「你專屬、最新、可追溯的真相」。合起來才是「講得又對、又是你家的」。這也接回前面的方向反轉——模型是人人都有的基礎建設,你的知識(GraphRAG)才是差異化的護城河。

一個實例:有接、沒接 GraphRAG,答覆差多少

先看一小段「知識圖」長什麼樣——圓框是實體(節點),連線是關係(邊)。GraphRAG 回答時就是照著這些關係「走」,而不是找最像的一段文字:

reports_with maps_to commits_to 本公司 GRI SASB net-zero by 2050
真的從 hr-graph 撈的一小段:本公司 —reports_with→ GRI、—maps_to→ SASB、—commits_to→ net-zero 2050…(共 8 條關係)。要問「本公司怎麼連到 CDP」,圖直接走出最短路徑:本公司 → SASB → IFRS S2 → scenario analysis → CDP

現在拿同一個問題,比較「沒接圖」跟「接了圖」的答覆:

問:「幫本公司做 ESG 報告——它跟 IFRS S2、CDP 這些框架怎麼連?我該從哪準備?」
❌ 沒接 GraphRAG(LLM 憑記憶)
「IFRS S2 是 ISSB 的氣候揭露準則、CDP 是碳揭露平台…建議先讀官方框架文件、盤點排放數據。」
→ 泛泛的框架介紹,沒講「本公司自己怎麼連、走哪條」
✅ 接了 GraphRAG(照圖走)
「本公司到 CDP 的連法:本公司 → SASB → IFRS S2 → scenario analysis → CDP。本公司直接關係:reports_with GRI、commits_to net-zero 2050、top5pct_in TWSE 公司治理評鑑、constituent_of FTSE4Good…」
→ 是本公司自己的連法、精確、附 cypher 出處、直接能動手。

GraphRAG vs 普通 RAG,怎麼接

↑ 回目錄  ·  下一節 ↓

這裡也給一個「一定懂」的類比,因為很多人到現在還用舊的 RAG 認知去想 GraphRAG,結果就想歪了。先把兩個擺在你熟的東西旁邊:

🔍
普通 RAG ≈ 語意相似搜尋
把知識切成一段一段,問問題時找語意最像的幾段丟給 AI(比對的是「意思」不是關鍵字,所以不是全文/關鍵字搜尋)。
🗺️
GraphRAG ≈ 查關聯式資料庫
把知識做成有實體、有關係的圖(像資料表 + 外鍵),查的時候照關係精確地「走」出答案。就像下一句 SQL JOIN。
最常見的誤解:用舊的 RAG 認知去想 GraphRAG。很多人把 GraphRAG 當成「換一個資料庫的 RAG」,做出來還是「切塊 + 找相似」那一套 → 只是換湯不換藥的相似度搜尋,完全沒拿到 GraphRAG 的價值。差別不在「知識存哪裡」,在「找答案的方式根本不同」:一個是找「最像的」,一個是照「關係」走。
普通 RAG:找最像的
❓ 問題
🔍 找最像的幾段文字
🗣️ 丟給 AI 講
GraphRAG:照關係走
❓ 問題
🗺️ 照關係走(A→B→C)
✅ 精確答案
普通 RAG(≈語意相似) GraphRAG(≈查關聯資料庫)
知識怎麼存 切成一段段文字塊 實體+關係(節點+邊)
怎麼找答案 找「最像」的幾段(相似度) 照關係精確走(路徑/JOIN)
擅長 模糊找相關、單段就能回答 串多個關係、要精確、要正確數字
最大風險 抓到「看起來像、其實不對」的段落 前期要先定義實體與關係(建圖成本)

那「以前用 RAG」和「現在該用 GraphRAG」的場景,差在哪?

🔍 普通 RAG 就夠
客服 FAQ、找相似文件、內部文件問答——答案通常「一段話就講得完」,找到相關段落丟給 AI 潤飾就好,錯一點無傷。
🗺️ 要升級 GraphRAG
答案要「串起好幾個事實才答得出來」(這個錯誤是哪個零件造成、牽動哪條 SOP?),或「錯了會出事」(醫療、長照、金流、法規)——這時找最像的段落會漏、會抓到像但不對的,必須照精確關係走。
一句話判斷:答案在「單一段落」裡、容錯 → 普通 RAG 夠;答案要「串多個關係」、不可錯、要正確數字 → GraphRAG。呼應前面:普通 RAG 是防錯腦(容錯、模糊、被諮詢),GraphRAG 是正道腦(精確、不容錯、被行走)。很多時候兩個一起用——先用普通 RAG 撈相關,再用 GraphRAG 確認關鍵路徑。

怎麼把「腦」接到 AI 上:RAG 的三種接法

知識做好了,怎麼讓 AI 用到?答案是 RAG——讓 AI 開口回答之前,先去外面的知識查一遍,把查到的東西當根據再講。RAG 三個字就是這三步:Retrieval(檢索,去查)→ Augment(把查到的塞給 AI 當根據)→ Generate(AI 據此生成答案)。流程長這樣:

🙋
使用者問題
🔎
檢索器去知識查
撈出相關事實
🗣️
AI 把事實講成人話
只負責潤飾,不負責記憶

差別在「檢索器怎麼查」。我們實作過三種接法,對應不同需求:

接法 怎麼查 適合
向量檢索
(對應 BUG 腦)
「語意相近」就撈,容錯、模糊 找相關經驗、踩過的坑
圖查詢
(對應正道腦)
精確走關係、要正確數字 ✅ 這個錯誤對應哪條 SOP、不可錯
工具型
(進階)
給 AI 幾個檢索器,讓它自己選用哪個 問題型態多變的成熟系統

接的時候有三個用血換來的紀律,不守就會踩雷:

  • 關鍵路徑別讓小模型自己寫查詢語法。本地小模型常把關係方向寫反(該查「A 導致 B」寫成「B 導致 A」),語法對、卻查回 0 筆。正解是用「事先驗證過的固定查詢模板」,只讓它填空。
  • 先把「確定性的事實」印出來,AI 只當潤飾層。這樣就算 AI 那張嘴當機了,核心答案照樣成立——因為真相在圖裡,不在 AI 的記憶裡。
  • 查詢繞太多層就「攤平」。三段關係(A→B→C)小模型接不動,就把常查的答案直接掛在節點上,查詢從三段降成兩段,穩很多。
糾正(charge)怎麼運作:老手發現某條知識過期,就到圖上改那一條線,同時系統自動記一筆「誰改的、何時、為什麼」的紀錄。幾秒鐘搞定、可追溯、不用重訓任何模型——這就是知識放在圖裡、而不是訓練進模型的最大好處。
▶ 動手 Sample — 起一個知識圖 + 用固定查詢模板
起 Neo4j(記憶體吃緊要限制)+ 打開 APOC plugin(關鍵):
docker run -d --name neo4j -p 127.0.0.1:7687:7687 \
  -e NEO4J_PLUGINS='["apoc"]' \
  -e NEO4J_server_memory_heap_max__size=512m neo4j:5
關鍵路徑用「驗證過的參數化查詢模板」,別讓小模型自由生成 Cypher(它會把關係方向寫反 → 查 0 筆):
MATCH (c:Channel {name:$ch})-[:SYNC_FAILED]->(e:ErrorType)
RETURN e.name, e.root_cause, e.action

CAG vs RAG:知識放模型「外面」還是「裡面」?

↑ 回目錄  ·  下一節 ↓

把公司知識餵給 AI 有兩條路,差別在知識住在哪——搞清楚這個,才知道什麼時候用哪個。

📤 RAG/GraphRAG(拉)
知識在模型外面(向量庫/Neo4j)。問的時候才撈相關那幾條進 prompt。就是本文前面 hr-graph 那套。
📥 CAG(注入)
知識事先塞進模型 context、算好 KV 快取。問的時候不檢索、直接用「已經在腦裡的」答。
面向RAG/GraphRAG(拉)CAG(注入)
知識住哪模型外面的 store模型 context(KV 快取)
檢索步驟有:用時才撈沒有:事先塞好、直接答
適合的知識大、常變、要跨關係有界、穩定、塞得進 context
出處/可追溯✅ 強(可附來源)⚠️ 弱(混在 context)
速度特性每查小 prompt、快首次讀整份慢、之後快取命中極快
統一更新的地方改 store 一次(如 Neo4j)改 Gateway 一次(見下節)

光講不夠——我真的在地端把兩個都跑了一遍,量速度也量對錯:

▶ 實測 · 我真的在地端跑了(qwen3:14B,Ollama/CPU,~900-token 手冊,4 問,temp 0)
已排除冷啟動:測前先 ollama stop 清 KV 快取、再用「與手冊無關的填充文」暖機到穩態才量。這是「快速驗證」不是嚴謹 benchmark:4 題、n=1、單人序列、且「沒有 CAG」那列其實是 CAG 自己的冷 Q1(同一招、快取還沒熱)。看趨勢就好、別把小數點當定論。
模式prefill(讀資料)總延遲正確
沒有 CAG:每題冷讀整份108.4s118.6s
CAG:第 2 題起(快取命中)6.5s29.9s
RAG:只給檢索到的相關段(完美檢索、未計檢索延遲)8.2s19.1s
① CAG 的本體被證實:同一份手冊,第 1 題冷讀整份要 108s,第 2 題起快取命中 → prefill 6.5s = 16.8× 快。代價:第一次得先付一次 108s「讀整份」,靠後續狂問才攤提得回來。
② 但 RAG 總延遲反而最低(19.1s)、而且一樣全對:它送進模型的只有 ~80 token(vs CAG 的 ~900)。註:RAG 的 prefill 其實跟暖 CAG 相當(8.2 vs 6.5s),它贏在 decode——context 短,每個 token 的 attention 都更輕;CAG 帶著整份 ~900 token,連生成都稍慢,這也是它總延遲反而輸的原因。
③ 四種模式正確率都 4/4——但這其實測不出品質差異:題目全是單句事實查找、又給了 RAG 完美檢索,三家手上都有答案。真正會分勝負的(跨段綜合、檢索漏 top-k)沒測到,所以別把「4/4」讀成「品質一樣」。
結論(誠實):CAG 真正省的很窄——「單人、對同一份固定文件連續狂問、快取又沒被驅逐」時,省掉重複 prefill(此例 prefill 16.8×,換算整體約 4×)。 註:多人並發時共用前綴快取會被不斷驅逐、退回冷讀;14B 在 CPU 上 prefill 特別重(900 token 要 108s),換 GPU 這種小 doc 本來就次秒級、省下的差距幾乎蒸發(CAG 真正回本是數萬 token 的大 context)。 RAG 那列是手動餵完美段落、未計 embedding/檢索延遲,真實 RAG 會更慢也可能撈錯。
咦——上面 RAG 又快又準,那為什麼還要 CAG?(其實 RAG 是預設,CAG 是例外,但它有三個真的贏的點)
① RAG 最會出錯的就是「檢索」那步,CAG 直接省掉。chunk 切壞、embedding 沒對上、該段沒排進 top-k → 撈錯就答錯。上面實測我其實給了 RAG「完美檢索」(手動餵對段落),真實世界不會這麼準——這是 RAG 的隱藏成本。CAG 整份都在 context,沒有「沒撈到」這個失敗模式。
② 不用養一整套檢索基建。RAG 要 chunking+embedding+向量庫+retriever+reranker,要建要調要維護;CAG 就把文件塞進 context,零基建。為一份 30 頁手冊架向量庫,不划算。
③ 需要「讀完整份才能答」時。要跨段綜合、總結整份規章,RAG 的 top-k 幾段可能漏;CAG 整份都在、看得到全部,也更一致(RAG 每次撈的可能不同→答案會漂)。
(澄清:CAG「在模型內」不是改模型/fine-tune,是把知識預載進 context+快取,模型本身沒動。)
一句話判斷法:先問「一份文件就能答嗎?語料多大?多久變一次?要不要精確引用?」——要出處/會變/大 → RAG/GraphRAG;有界+穩定+不用逐條出處 → CAG
而且兩者不互斥:多數企業拿 RAG/GraphRAG 當骨幹(合規、跨關係、要引用),CAG 只加速手冊類、凍結版的子集——再靠一個 Gateway 把兩者統一管(下一節)。

A2A:agent 之間怎麼互通

↑ 回目錄  ·  下一節 ↓

A2A(Agent-to-Agent)是「讓一顆腦去呼叫另一顆腦」的協定。要講清楚它,最快的方式是先跟大家比較熟的 MCP 對照——這兩個常被搞混,但方向不一樣:

MCP:腦 → 工具(垂直往下接)
🧠 一顆腦 🔧 工具/資料庫/檔案
對面是被動的工具,你叫它查什麼、做什麼,它就照做,自己不會判斷。
A2A:腦 → 腦(水平往旁邊接)
🧠 一顆腦 🧠 另一顆會思考的腦
對面是有自己腦、會自己判斷的獨立單位,可能多步驟、可能要授權、可能反問你。

兩者不衝突、是互補:MCP 讓一顆腦長出手去用工具,A2A 讓一顆腦去指揮另一顆腦。而 A2A 本身,又有兩種用法——差別在對面是「講完就散」還是「開一件任務跟你來回」。

A2A 的兩種用法:訊息模式 vs 任務模式

照 A2A 官方規格(Life of a Task),對面 agent 收到你的話之後,有兩種回應方式:

用法一:訊息模式(類似呼叫 Skill)
🙋 一句話 💬 一個回答,結束
單次、self-contained、講完就散、不追蹤狀態。對面就是「包了一顆小腦+工具」的 Skill,你問它答,像呼叫一個函式。適合簡單問答、單一能力呼叫。
用法二:任務模式(真正的 Agent-to-Agent)
📋 開一件「任務」 🧠 有狀態、可多輪
對面開一個有 id、有生命週期的任務,可長時間追蹤、中途能要求你補資料、能來回 follow-up。這才是「agent 對 agent」的完整型態。

任務模式的「生命週期」長這樣——一件任務會在這些狀態間移動,一旦走到終點(完成/取消/失敗)就不能重啟,要改只能開一件新任務連回去:

📥 已收到 ⚙️ 進行中 ✋ 需要你補資料/授權 ✅ 完成(終點,不可重啟)

官方的「follow-up 範例」最好懂:你先請它畫一艘帆船(任務 A 完成)→ 你說「幫我把它改個顏色」,這句帶著「參考任務 A」的標記(規格叫 referenceTaskIds)→ 它開一件新任務 B、掛在同一段對話(contextId)下、產出同一張圖的新版本。三個識別碼各司其職:

識別碼 作用
contextId 綁「同一段對話/同一個 session」,把相關來回串在一起
taskId 指「同一件事」,後續訊息帶上它=延續那件任務
referenceTaskIds 指回「舊任務」,在它的基礎上開新任務做精修
一句話分辨:要「一問一答、拿了就走」用訊息模式(把它當 Skill 呼叫);要「交辦一件會跑一陣子、還能追進度、能來回」用任務模式(這才是真 agent 對 agent)。同一個 A2A,兩種深度,看你要多少狀態管理。

A2A:把舊系統「包成一顆腦」

↑ 回目錄  ·  下一節 ↓
🎯 給 domain 專家:該開什麼 A2A?別問「我有哪些 API」
工程師會從「我系統有什麼功能、什麼資料表」想——那是錯的起點。你要從你最懂的地方想:「大家每天來拜託我系統的人,做哪幾件事?」
別人常拜託你系統的人…你就開這個 A2A
「幫我查這張訂單到哪了」查訂單狀態
「這料還有沒有貨」查可用庫存(把你算庫存的規矩包進去)
「幫我開一張請購」開請購單(會跑簽核那種)
把「那件被拜託的事」開出來,不是把資料表開出來——你最懂大家為什麼來找你,那就是最有價值的 A2A。這件事只有 domain 專家想得出來,工程師想不到。

這是 A2A 最實用、對企業最值錢的用法。一個跑了十年的舊系統是「死」的,它不會自己長出技能;A2A 就是補這個洞——把舊系統的能力包裝成幾個 Skill、掛上一張「Agent Card(名片)」,讓任何 AI agent 直接發現它會什麼、直接呼叫。這其實是歷史重演第三次:

時代 系統開放給誰用 能力說明書
① 只有畫面 人(自己點 UI) 靠人自己摸
② 開 API 程式/前端 Swagger/OpenAPI
③ 開 A2A AI Agent ✅ Agent Card(就是 A2A 的 Swagger)

關鍵推論:這一層可以省掉很多「做給人點的畫面」。系統的能力直接暴露成 Skill 給 agent 呼叫,很多時候就不必再做一套 UI。要看一張真實的 Agent Card 長怎樣、以及跟 MCP 的白話對照,可讀 會用 GPT 就會用 Agent:同一顆腦,差在有沒有手

安全分層:名片公開 ≠ 大門敞開

不管是訊息模式還是任務模式,都會碰到一個最常被誤會、務必講清楚的授權分層:

🪪 讀名片(Agent Card)公開、免憑證
名片放在固定路徑,本來就該公開;不公開別人根本不知道你會什麼。讀名片=看菜單,沒有任何副作用。
▼ 想真的動手 ▼
🔐 呼叫動作 API要憑證、可逐項分權
真正無敏感的唯讀(例如「要填哪些欄位」)可以免憑證;但只要觸及分級/個資的讀取,以及寫入、傳檔、動作,一律要帶「使用者身分」的 token才放行——這樣才做得到 row-level 授權與「誰查了哪筆」的稽核。
一句話破解常見恐懼:「名片公開」不等於「大門敞開」。名片是給人看的說明(公開)、動作 API 是給機器做的事(要憑證),兩層分開設計。聽到「Agent Card 是公開的」就怕系統被亂動,是把這兩層混在一起了。
但——現在先別急著綁。A2A 是「很多 agent 已經各自跑得很好、需要互相講話」時才需要的層。如果你的知識庫(正道腦)都還在樣板階段就先綁 A2A =過早搞複雜,先把腦做扎實。真要做跨系統協作,那是「AI 治理」的議題,去用現成的公開標準(Google 提出、現由 Linux Foundation 治理的 A2A protocol、NIST 的 AI 風險管理框架 AI RMF),不要自己發明一套。相關實作對照可看 GraphRAG vs RAG + A2A:後端工程師的請假流程 AI 實作
▶ 動手 Sample — Agent Card 有兩種:訊息型 vs 任務型(同一個「請假」情境)
兩張卡都放在固定路徑 /.well-known/agent-card.json、公開可讀。差別在這支 skill 回的是「一個答案(Message)」還是「一件任務(Task)」
① 訊息型(類似 Skill,一問一答)
GET /.well-known/agent-card.json
{
  "name": "請假規則查詢 Agent",
  "capabilities": { "streaming": false },  // 不推播,agent 自己 poll
  "skills": [
    { "id": "get_leave_policy",            // 查規則 → 立刻回答案
      "auth": "none" }                      // 唯讀 → 公開
  ]
}
② 任務型(真 Agent-to-Agent,有生命週期)
GET /.well-known/agent-card.json
{
  "name": "請假申辦 Agent",
  "capabilities": { "streaming": true },   // 有 SSE 推播進度(可選)
  "skills": [
    { "id": "apply_leave",                 // 送審 → 開一件任務
      "auth": "invite-token" }              // 寫入 → 要憑證
  ]
}
一眼看出關鍵的三個地方:
看這裡 ① 訊息型 ② 任務型
回的是什麼
(看描述或呼叫才確定)
Message:一個答案 Task:taskId + 狀態
這個 skill 做什麼 查詢,立刻回答案 開一件有狀態的任務、可 follow-up
授權(auth none(唯讀 → 公開) 要憑證(寫入)
兩張都名片公開,但寫入型一律要憑證 —— 名片公開 ≠ 大門敞開。(不過「哪支是 async」光看卡其實分不清楚,見下方提醒。)
⚠️ 現實提醒:光看卡片,其實常常分不出哪支是 async。A2A 沒有一個欄位直接寫「這支是 sync 還是 async」。capabilities.streaming 只代表「有沒有用 SSE 推播(push vs poll)」,不是 sync/async 的判準——真實的卡可能 streaming:false,但某支 skill 照樣回傳 Task(你自己 poll 就好)。真正要判斷只有兩招:① 看 skill 的描述(會寫「回傳 stateful Task」);② 直接呼叫它,看回的是 Message(一問一答)還是 Task(有 taskId + status)。至於 queue/worker——卡上永遠看不到,而且這是對的:卡只描述「契約」,不描述你家的「引擎」。

A2A:會不會卡死你、正名、部署

↑ 回目錄  ·  下一節 ↓

這是接 A2A 時最該問的一句:「對我來說這就是一個 API 端,會不會被你的 AI agent 佔住、把我的 thread host 卡死?」答案:訊息型不會;任務型做對不會、做錯才會。

✅ 主 pattern(大多數)
同步:function + status + DB
查詢、甚至多輪填表(input-required)都走這。收到就同步算完回你——秒回、不用 worker、不會卡你
🔶 備案(少數)
單次要跑很久的長運算
報表、批次那種一次做不完的——才加 queue + worker,丟背景做、請求秒回、你之後 poll。下面講的「卡死疑慮」只發生在這種。
  • 訊息型(message):短連線、秒回、執行緒立刻釋放,跟一般 REST 一樣,不會卡。
  • 任務型(task):危險只發生在你把它做成「開著連線、一直等任務跑完才回」。正確做法是不要 hold 連線——
❌ 阻塞式(做錯 → 會卡死你)
🤖 agent 打 apply_leave
⏳ 你開一條 thread 一直等任務跑完
💥 N 個 agent=N 條 thread 被佔死 → host 卡死
✅ 非阻塞式(做對 → 佔不住你)
🤖 agent 打 apply_leave
⚡ 秒回一個 taskId(202)+工作丟背景 queue
🧵 thread 立刻釋放
🔁 agent 之後自己 GET /tasks/{id} 查進度

要打開/守住的幾個關鍵(就是防「被佔住」的護欄):

  • 立刻回 taskId、工作進 queue:背景 worker 去做,不佔請求執行緒——這正是 A2A「任務有 id + 狀態」存在的理由。
  • 每個請求都有逾時:慢 agent 不能永遠佔一條 thread。
  • 每個 token 的併發上限 + rate limit:一個 agent 不能狂開一萬個任務。
  • queue 滿了回 429(限流),不是把人卡住:正好呼應前面那個 HTTP 429 的例子。
  • 要用 SSE 推進度就限量 + 心跳逾時,別讓連線無限開著。
一句話:任務型「回一個 taskId、之後自己來查」的設計,本來就是為了「不佔住你」。會卡死你的不是 AI,是把長任務寫成「同步阻塞呼叫」——那是實作的錯,不是 A2A 的錯。你的 API 端照舊掌握逾時、併發、限流,agent 只是另一種會照規矩排隊的呼叫方。

A2A 正名:嚴格講,是「Agent → API」

↑ 回目錄  ·  下一節 ↓

你這句點得很準。我們一直說 A2A 是「Agent-to-Agent(腦對腦)」,但拆到底層,它的實體就是「Agent → API」

「Agent-to-Agent」(名字)
拆開看 →
🤖 Agent
🪪 Agent Card(說明書)
🌐 一個 HTTP API 端點

你(agent)打的就是一個 HTTP API 端點,那個端點用一張 Agent Card「自我介紹」它會什麼。之所以叫「agent 對 agent」,只是因為 API 背後那端可能自己會思考、會跑多步驟任務——但從你這條線看,就是 agent 在打 API。

所以它沒比 REST 神秘:auth、逾時、rate limit、queue 全部照舊管得到(這就是上一段能回答「不會卡死你」的原因)。而且那端的「agent」常常根本就是你把舊系統包一張 Agent Card 而已(見前面「把舊系統「包成一顆腦」」)。更精準的說法:Agent → API,只是這個 API 多附了一張給 agent 看的說明書。(不過——這只對了一半,下一段補完。)

那為什麼還是叫 Agent-to-Agent,不是 to-API?「做完」又怎麼判定?

你這一問,正好把上面那句「就是 API」校準成兩層——這也是照 A2A 官方 Life of a Task 的重點:

傳輸層:Agent → API
就是一個 HTTP 呼叫。所以你的 auth/逾時/限流/queue 都管得到,不會卡死你
語意層:Agent → Agent
對面不是「無狀態的 API」,而是一個有生命週期、會自己跑、還會回頭問你的 agent。名字取 to-Agent 就是指這一層。

差別的核心,就是你點的「對方 agent 有 life cycle」。普通 API:HTTP 回 200 = 這次呼叫結束,它不記得你、也沒有「進行中」這回事。A2A 的 task 不一樣——你拿到 taskId 後,它會在自己的狀態機裡移動,走到「終點狀態」才算做完:

📥 已收到 submitted
⚙️ 進行中 working
✋ 需要你補資料 input-required(可選)
🏁 completed/failed(終點,不可重啟)
↑ 「做完」=走到終點狀態;中途還能停在 input-required 回頭跟你要東西

那「你」怎麼知道做完了?兩種:① 定時 GET /tasks/{id} 查狀態;② 訂閱串流(SSE)讓它把狀態變化推給你。一旦狀態是終點(completed/failed…)就是做完;終點不可重啟,要改就開一件新任務、用 referenceTaskIds 連回舊的。

一句話:會回頭跟你要資料、有自己的狀態機、做完會有終點——這是 agent,不是 API。普通 API 你問一句它答一句、不記得你;A2A 的 task 那端「活著」直到任務走到終點。所以傳輸上是 Agent → API,行為上是 Agent → Agent,兩個都對,只是講的是不同層。
▶ 動手 Sample — 伺服器端:即時 vs 非同步(會不會真的跑背景 thread?)
會,真的跑背景 worker——但它在「另一個 worker 池」,不是你的 web 請求執行緒。兩種模式:
① 即時(message/sync):收到就做完、當場回
POST /skills/get_leave_policy
  → 直接查、直接回答案(同一個 response)
  # 請求執行緒只佔一下下,跟一般 REST 一樣
② 非同步(task/async):回 taskId,丟 queue,背景 worker 做
POST /skills/apply_leave
  taskId = queue.enqueue(job)        # 丟進工作佇列
  return 202 { "taskId": taskId }    # 秒回、請求執行緒立刻釋放

# 另一組「worker 池」(不是 web 執行緒)在背景跑:
worker:
  job = queue.pop()
  存狀態到 DB: working →(input-required?)→ completed
  # ← 這裡才是「真的在做事的 thread」,但跟 web 請求池分開、有上限

GET /tasks/{taskId}
  → 從 DB 讀狀態回給 agent(submitted / working / completed…)
🌐 Web 請求池:收到 → 回 taskId(202)→ 立刻釋放
│ 丟進 ▼
📥 Job Queue → 🧵 Worker 池(另一組、有上限)→ 做事、更新狀態到 🗄️ DB
▲ agent 之後 GET /tasks/id 讀 DB 狀態
*上面用 REST(POST /skills/…、202、GET /tasks/id)是為了好讀;實際 A2A 走 JSON-RPC:只有一個 message/send,要叫哪支 skill 由訊息內容路由,非同步是在正常回應裡直接回一個帶狀態的 Task 物件、再用 tasks/get 查(不是 202+GET)。概念(即時 vs 有生命週期)一樣,只是線路格式是 JSON-RPC。
你講的「可接續的 JOB」感覺完全對:taskId + 存在 DB 的狀態就是一張「可接續的工作單」,兩邊靠它對帳、可 follow-up。真正做事的 thread 在 worker 池(有上限);web 請求池永遠秒回、不被佔——這就是為什麼 agent 佔不住你。(狀態存 DB 還有個好處:伺服器重啟、agent 斷線,工作單都還在,接得回去。)
收斂成一句:A2A 的 stateful task = 每個 skill 一個 function + 一個 status + 一張 DB 表。A2A 只要求「回一個有 id + 狀態的 task、能用 tasks/get 查」,你把狀態算出來存 DB 就兌現了——這是主 pattern,同步、不用 worker(查詢、多輪填表都走這)。queue + worker 是備案:只有「單次做不完」(跑報表、批次那種長運算)才補,由 worker 非同步去更新同一張 DB 的 status。所以 DB+status 是骨幹,queue+worker 只是選配引擎——A2A 也沒規定一定要有 queue(背景執行緒/cron/serverless 都行)。說穿了這就是業界行之有年的「非同步作業(async job)」pattern——回 id、存狀態、輪詢查;A2A 的增量價值只是把這個信封標準化 + 配一張自我描述名片(Agent Card),不是行為上升格成新東西。所以很多場景其實 MCP/一般 REST 也做得到,A2A 的甜蜜點是「跨組織、對面 agent 你無法控制其實作」時的共同語言。

即時 vs 非同步,差異重點一張表看完:

面向 即時(sync/message) 非同步(async/task)
適合的活 短、馬上算得完(查規則、查狀態) 長、要跑一陣子(送審、跑報表、多步驟)
回什麼 直接回答案(同一個 response) 先回一個 taskId(202)
後面要不要引擎 不用,就是單純 API 要背景引擎(常見 queue + worker 池)
佔不佔你 web 執行緒 只佔一下(跟 REST 一樣) 秒回就釋放,做事在另一個 worker 池
怎麼知道做完 response 回來就是做完 task 狀態走到終點(poll/訂閱)
能不能接續/follow-up 不能(講完就結束) 能(taskId + referenceTaskIds 接續)
對面比較像 一個「API」 一個「agent」(有生命週期)
一句話抓重點:能不能「接續」,就是這兩者的分水嶺。即時的做完就散、不記得你;非同步的靠 taskId + 存 DB 的狀態活成一張「可接續的工作單」——這也正是它為什麼像 agent、而不只是 API。

A2A 部署:掛在系統前面的轉接層

↑ 回目錄  ·  下一節 ↓

這個理解完全正確,而且正是推薦做法:A2A 跟你本身的系統是解耦的。你不用改你的 ERP(SAP、鼎新 Digiwin、iDempiere… 都一樣),只要另外寫一層「轉接層(adapter)」掛上去——它一邊講 A2A、一邊去呼叫你的系統。這層可以放在另一支程式、甚至另一台機器/另一個 domain

🤖 別的 Agent
呼叫方
— A2A —
(HTTP) →
🔌 A2A 轉接層 · Domain B(可獨立一台機器)
🪪 Agent Card /.well-known/agent-card.json(公開)
🌐 A2A API + 🔐 auth sync/async skills
🗄️ Task 狀態 DB taskId + 狀態(=主 pattern 的核心)
選配·備案(只有「單次長運算」才要)
📥 Job Queue
🧵 Worker 池(有上限)
— 呼叫 —
REST API →
🏢 你的 ERP
Domain A、不動
SAP/鼎新/iDempiere…
↑ 系統不動;核心就是名片 + API + 狀態 DB(=主 pattern);queue/worker 只有長運算才加(備案)

轉接層裡每個元件在幹嘛:

元件 角色
🪪 Agent Card 名片/說明書,公開讓別的 agent 發現「你會什麼」
🌐 A2A API + auth 門面+門禁:收 sync/async 呼叫,寫入型驗 token
📥 Queue + 🧵 Worker 池 背景引擎:長工作丟這裡跑,跟 web 執行緒分開、有上限
🗄️ Task 狀態 DB 可接續的工作單:存 taskId + 狀態,重啟/斷線都接得回
🏢 ERP(Domain A) 真正幹活的系統,只透過它自己的 API 被呼叫(不動、不繞 DB)

一條請求怎麼走完(對照前面 sync/async 兩種模式):

即時(sync)
① agent 讀 Agent Card → 打 get_status
② 轉接層驗 auth → 呼叫 ERP 的 API
③ 拿到結果 → 同一個 response 回 agent
非同步(async)
① agent 打 apply_leave
② 轉接層驗 auth → enqueue → 秒回 taskId(202)
③ worker 取 job → 呼叫 ERP API → 更新 Task DB(working→completed)
④ agent 之後 GET /tasks/{id} → 從 Task DB 讀狀態直到終點

所以你的 ERP 本體乾乾淨淨、根本不知道 A2A 存在——這正是前面「把舊系統「包成一顆腦」」的落地拓撲:系統不動,轉接層另外長

一個關鍵提醒:轉接層優先走 ERP 自己的 API/service 層,別直接戳它的 DB。直連 DB 會繞過它的商業邏輯與驗證、schema 一改就爆(不管 SAP、鼎新、iDempiere 都一樣——別繞過它自己的業務邏輯層);真要讀也儘量唯讀。走它自己的 API,才不會把「掛上去」變成「挖個洞破壞它」。另外,轉接層自己要顧好 A2A 那端的授權(per-skill token),別讓它變成繞過 ERP 權限的後門。

共用知識服務(MCP):別讓每個人重寫

↑ 回目錄  ·  下一節 ↓

知識做好了,agent 到底怎麼「用到」它?先分清楚走哪一層:「給 agent 一個知識來源」走的是 MCP(腦 → 工具),不是 A2A(腦 → 腦)。A2A 是「你的 agent 去呼叫另一個會思考的 agent」;而 RAG/知識比較像「一個工具、一個資料源」,這正是 MCP 的守備範圍。

你擔心的「難道每個 agent 都自己寫一套 RAG?那不是很怪?」——完全正確,那就是要避免的反模式。如果每個 agent 各自寫檢索碼(連向量庫、寫查詢、處理 auth、管更新),就是每一隊重造一次輪子。企業做法是把知識做成「一個大家共用的服務」,寫一次、所有 agent 連上去用

🤖 Claude Code
🤖 GPT agent
🤖 本地 agent
🤖 客服 bot
— 都連 —
(MCP)→
🧩 一個共用知識服務
MCP server(檢索邏輯只寫這裡一次)
🔎 RAG/GraphRAG 引擎
向量庫 + 知識圖
↑ 每個 agent 只要「連上這個 MCP server」(一行設定),零檢索碼

檢索邏輯(連線、查詢模板、GraphRAG 走關係、auth、新鮮度)只寫在服務端一次;每個 agent 只是連上去用。知識更新也一次(charge 圖)→ 所有 agent 立刻看到新真相(呼應前面「真相在圖不在模型」)。(提醒:圖保證「事實不背叛」,但「照著講對」仍吃模型的對點與生成品質——弱模型撈對了也可能說錯。)三種做法一比就清楚:

做法 誰寫檢索 適合
每個 agent 自己內嵌 RAG 🚫 每隊各寫一份 只有一個小專案、玩票
共用知識服務 + MCP ✅ 寫一次(知識團隊) 企業內部、多 agent 共用(=一次性導入)
包成 A2A 知識 agent 寫一次 跨組織,或知識那端本身要會多步推理
所以「企業一次性導入」的答案:把 RAG/GraphRAG 做成一個知識服務、用 MCP 暴露成工具、中央註冊治理(誰能查什麼、資料分級、版本、新鮮度)。連資料匯入(建圖/建索引)也是中央做一次(前面說的「公開資料打樣板 → 領域老手校準」)。消費端每個 agent 都是純使用者,不碰檢索實作;要跨組織才升級成 A2A 知識 agent。
▶ 動手 Sample — 把 GraphRAG 包成 MCP 工具(寫一次)+ agent 一行連上
① 知識服務端:整個公司寫這一次
# graph_service.py — 檢索寫一次(全唯讀 Cypher、回傳附 cypher 當出處)
def path(self, source, target, scope="esg", max_hops=6):
    cy = f"MATCH p=shortestPath((a:{lbl} {{id:$a}})-[:REL*..{max_hops}]-(b:{lbl} {{id:$b}})) RETURN [n IN nodes(p)|n.id]"
    rows = self._read(cy, a=source, b=target)     # 純 Cypher,跟 LLM 無關
    return self._wrap(scope, lbl, cy, rows, note) # 回 {cypher,rows,note};cypher=出處

# mcp_server.py — FastMCP 薄包,一個 decorator 就開放給任何 agent
@mcp.tool()
def graph_path(source, target, scope="esg", max_hops=6):
    """兩實體之間怎麼連 — 最短路徑;vector RAG 做不到的『沿線走』。"""
    return svc.path(source, target, scope=scope, max_hops=max_hops)
② agent 端:一行連上(stdio;換 Claude/GPT/本地都一樣,零檢索碼)
# agent 一行連上(本機 stdio、用完即起)
claude mcp add hr-graph -- .venv/bin/python graph-demo/mcp_server.py
# 之後直接問「本公司到 CDP 怎麼連」,它自己會叫 graph_path/… — 零檢索碼
PART 4 / 5
第四部 · 企業落地:收斂 CAG、設計 A2A、治理與請人

實戰:把知識圖包成 MCP(hr-graph)

↑ 回目錄  ·  下一節 ↓
實戰:這段不是紙上談兵——我真的把它做出來了(hr-graph MCP server)。把 ESG 知識圖(43 實體/55 關係)+請假流程圖的「沿著線走」確定性檢索(最短路徑/樞紐/社群/鄰居)包成 MCP 工具:檢索邏輯寫一次graph_service.py,全唯讀、scope 走固定 label 防注入、實體名一律 $param)、跟 LLM 無關(純 Cypher 對 live Neo4j、秒回)、每個回傳都附實際跑的 cypher 當出處Cypher=圖資料庫的查詢語言,作用像 SQL)。
*規模上這是教學 demo:43 節點遠低於前面說的「GraphRAG 才回本」門檻,它示範的是「把圖包成 MCP + 出處可追溯」的工程手法,不是 GraphRAG 在大語料上的效益——別把 demo 當規模驗證。
# 位置:onboarding-system/graph-demo/(檢索層 graph_service.py+薄包 mcp_server.py)
# 本機 agent:一行加進 Claude Code(stdio,用完即起、非常駐)
claude mcp add hr-graph -- .venv/bin/python graph-demo/mcp_server.py
#   之後對話直接問:「用 hr-graph 查 本公司 到 CDP 怎麼連」

# 別台/遠端 agent:走 HTTP(實測連法)
claude mcp add --transport http hr-graph https://neo4j.tomting.com/mcp \
  --header "Authorization: Bearer hrg_xxxxxxxx" -s user
#   MCP /mcp 併進 graph-demo/app.py、重用既有 tunnel、Bearer token、全唯讀(免 SSE)
tool 問什麼(每個回傳都附 cypher=出處)
list_scopes有哪些圖可查(esg/hr…)
graph_search打錯字時對到正確實體
graph_hubs誰最關鍵(中心性)
graph_pathA 跟 B 怎麼連(多跳最短路徑)
graph_community整體有哪些主題面向
graph_neighborsX 直接牽涉什麼(local search)
這就把前面的三個門檻一次兌現:🔌 引用——claude mcp add 一行、換誰都連(別台就走 HTTP+token);✍️ 建立——多一個知識領域只要在 SCOPES 多一列;🔍 理解——回答附 cypher 出處、可追溯、跟哪個模型無關。寫一次、所有 agent 共用同一張圖——「共用知識服務」從理論變成跑得起來的東西。
「建立門檻↓」不是講講而已——這張圖第 43 個節點就是這樣長出來的。hr-graph 除了唯讀查詢,還有寫入工具(graph_propose_entitygraph_propose_relationgraph_ingest),但關鍵是:agent 只能「提議」、進暫存,不能直接改圖;要人在 UI 審核頁按「核准」才落庫(=charge,有人閘、可追溯誰核准)。實測就這樣加了第 43 個節點 TOM(concept,關係 TOM —contributes_to→ Scope 3):agent 透過 MCP 提議 → 人在 UI 核准 → 它成了圖裡真的第 43 個節點、查得到。老手不用從零寫、只要「按核准」;agent 幫你抽、你把關——這就是低建立門檻 + 可信任的 charge。
一個容易講得太理想、務必講清楚的點:工具「連上」不等於 agent「會自己用」。實測(拿給不知道設定的同事)——agent 常常不會自動去叫,它就用自己的一般知識答你。原因:MCP 只給了「工具」,沒給「什麼時候該用它」的政策;像「做 ESG 報告要準備什麼」這種開放型問題,在模型眼裡不一定對應到某個 tool。但公司層面要務實:政策不是去改每個人的 CLAUDE.md(那不可能)。它要放在伺服器端、隨連線自動下發給每個 agent——因為 MCP 的 tool descriptionserver instructions 都是你(知識服務 owner)控制的:把「什麼情況叫我、先 list_scopes → graph_search 對點」寫進去,寫一次,全公司連上就自動帶過去,不用碰任何人的本機。(務實提醒:tool description 較可靠;server instructions 在 MCP 規格裡是「建議性」的,client 可能不注入模型——跨不同 agent 別當 100% 保證,真的非用不可的路由仍要在統一佈署那層補。)你發給大家的那條「連線+key」指令,連進來就順便把「何時用、怎麼用」一起帶過去了。真的「非用不可」的路由,才在公司統一佈署的 agent(managed 設定/共用 repo 的 CLAUDE.md,一次改、git 發全部)加——仍不是去動每台機器;「明確點名工具」則是正常的臨時 fallback。回到 Harness(規則層):政策要跟著工具走(server 端),不是塞進每個使用者的本機。

補充:要「強制、不可繞過」——Enterprise Managed Settings

上面「description + server instructions 隨連線發全公司」是寫一次、隨連線走的做法——但它本質是「盡力」:模型仍可能不照做,而且只管得到 MCP 工具怎麼用。要做到「必須遵守、使用者繞不過」,Claude Code 有原生的一層:Enterprise managed settings

claude.ai 管理主控台設一次 → 全公司機器登入自動抓、每小時刷新、零本機設定;managed 層優先最高,使用者/專案無法覆寫。這正是前面那句「不去動每台機器」的官方解答。
機制 強制力 怎麼發 定位
MCP description/instructions 盡力(模型自決) 隨連線、零設定 引導
Enterprise managed settings 強制(不可繞過) claude.ai 主控台/MDM 合規·資安必守

關鍵開關allowManagedMcpServersOnlyallowedMcpServers(MCP 白名單強制,把你上面 hr-graph 那套從「盡力」升級成「強制」)、claudeMd(全公司 CLAUDE.md,使用者刪不掉)、strictKnownMarketplaces(鎖 plugin 只能從核准來源裝)。檔案在系統層(/Library/Application Support/ClaudeCode//etc/claude-code/C:\Program Files\ClaudeCode\),或直接用主控台推。

但老實說——企業真要做到,超難。技術上寫一頁 JSON 很簡單;難的是組織:要 IT 用 MDM(Jamf/Intune/GPO)推到每台、要主控台管理權限、目前還只能「全公司統一」不支援分組、更別說推動各部門照做的文化成本。工具是一回事,落地是另一回事。
▶ 動手 Sample — 政策寫在 server,一條指令發全公司
# 政策就寫在每個 tool 的 docstring(=MCP description;mcp_server.py,寫一次)
@mcp.tool()
def list_scopes():
    """列出可查的知識領域…先叫這個看有哪些圖(esg / hr…)。"""      # ← 教它「先叫我」
@mcp.tool()
def graph_search(term, scope="esg"):
    """在圖裡模糊找實體 id…不確定實體正確名稱時先用它對點。"""       # ← 教它「先對點」

# 發給全公司的就這一行;連進來,上面的 docstring 自動成為該 agent 的工具說明
claude mcp add --transport http hr-graph https://neo4j.tomting.com/mcp \
  --header "Authorization: Bearer hrg_xxxxxxxx" -s user
🏛️ 知識服務(server,你控制)
tool description + server instructions = 使用政策(寫一次)
▼ 一條連線指令(+key)發給全公司;連進來就自動帶政策
🤖 員工 A 的 agent
🤖 員工 B 的 agent
🤖 員工 C 的 agent
↑ 每台本機零設定,連上就知道「何時用、怎麼用」——你沒去動任何人的 CLAUDE.md
實測踩到的坑:為什麼一開始「找不到、亂找」。把 hr-graph 給同事用,第一時間 agent 要嘛不去叫、要嘛叫了亂找。三個原因:
① 沒規則 → 不去叫(用自己的知識答,如上)。
② 去叫了、卻猜錯 node 名 → 查空。圖裡的節點是精確 idIFRS S2Scope 3CDPGHG inventory…);agent 直接拿使用者口語的「碳排放」「碳揭露」去 search,對不上節點 → 回空 → 看起來就像「亂找」。
③ 少了「先對點」這步。正解順序要寫進規則:list_scopes(有哪些圖)→ graph_search(把口語詞對到正確 node id)→ 再 graph_pathgraph_neighbors。少了中間「對點」,agent 就只能亂猜。

導對之後的真實使用經驗(下面是真的從這張 43 節點的 ESG 圖撈出來的)——問「幫本公司做 ESG 報告要準備什麼」,agent(被規則導去 hr-graph):

工具 從圖撈到的(真實)
graph_community
有哪些主題
四大主題群:碳盤查/減碳(CDP、Scope 1/2/3、GHG inventory、SBTi)、揭露框架(IFRS S1/S2、SASB、TCFD、ISSB、double materiality)、外部評級(MSCI、DJSI、Sustainalytics、S&P CSA、FTSE4Good)、在地法規(GRI、TWSE、金管會、net-zero 2050、conflict minerals)
graph_hubs
誰最關鍵
本公司(母體節點,連 8 條,最樞紐)、IFRS S2(6)、Scope 3(6)→ 報告重心先圍這幾個
graph_path
A 跟 B 怎麼連
本公司 → CDP 怎麼連(多跳最短路徑,附實際 cypher)
「準備什麼知識」就從「憑感覺」變成「照主題群 + 樞紐去備」,而且每一步都附實際跑的 cypher 當出處。前提是先把 agent 導對(規則 → list_scopesgraph_search 對點)——這才是把「亂找」變「照圖走」的關鍵。

實戰復盤 · 某企業專利 GraphRAG:知識怎麼「塞」進圖,圖又怎麼「修」

↑ 回目錄  ·  下一節 ↓

前面講的都是「該怎麼做」,這章真的做了一次——把某企業的智財管理培訓投影片,變成一顆工程師與發明人都能問、主管能審的 GraphRAG。一顆圖能不能長期用,只看三件事、而且有先後順序:怎麼「塞」→ 怎麼「驗」→ 怎麼「修」。下面按順序拆,每一步用黃底標出「該怎麼做」的重點。

① 建置
把知識塞進圖
② 驗證
確認圖是對的
③ 維護
charge 修正、不腐化
① 建置 · 把知識「塞」進圖
順序:
1. agent 直接看圖、理解語意 → 手工萃取成「節點+關係」(量小要精確,不用 OCR、不用 LLM 自動抽:中文投影片 OCR 不穩、量小自動化省 10 分卻埋一顆錯)。
2. 用 MERGE 播種——重播不會產生重複節點。
3. 分兩類塞:流程資訊→帶方向語意的邊(例如「下一步是」「由誰負責」「需要哪些文件」——關係名要指出動作方向,不是「有連到」而已);術語定義→節點但天然孤立(沒有邊 ≠ 壞掉)。
放大成整個部門一起餵 = 兩階段加權:
Pass 1 機器把公開/通用資料整理成「流程樣板」(基準權重) Pass 2 領域老手「改」成公司真流程(高權重 ground truth)
✎ 該怎麼做:第一刀挑「骨架八成像、只改細節」的領域(差太遠,老手會嫌全錯、不如重寫,飛輪就崩);圖裡只放實體+關係+判斷,原文別全倒進去
② 驗證 · 確認圖是對的
塞完不是就好,要驗三件事:
1. 邊的方向對不對——關係語意是「動作方向」,不是「有連到」。查得到卻回空,第一個嫌疑就是關係接反了
2. 孤立節點是「本該孤立的 term」還是「漏連」——先分類再判定,別看到沒邊就急著補。
3. 用使用者真的會問的問句跑一遍,看答得對不對。
✎ 該怎麼做:驗證用「使用者問句」(例:「申請新型專利要準備什麼」)去問,不是用「照資料庫欄位名硬湊的查詢」。工具也照這個原則命名——對齊問題、不對齊 schema。
③ 維護 · charge 修正,讓圖不腐化
知識塞進去只是第一天。維護時把知識切兩半:
事實(踩過的坑=過去式、現況=此刻真實)→ 當地基,不背叛
判斷(正解/SOP)→ 會過期,架構一變就錯,要標「當下最佳、可能過期」。
判斷背叛那天:charge 改一條邊(幾秒),並寫一筆審計 ChargeLog(誰改/何時/為何)。
手不能亂動 = Pending 人閘: 發明人提案 → 「待審緩衝區」(碰不到正式圖) 主管 approve 才轉正 / reject
✎ 該怎麼做:維護不是堆更多正解,是「判斷背叛時幾秒糾正它 + 留下為什麼過期」;charge 一定要寫審計節點,否則文件講的「可追溯」只是空話。
為什麼這樣做?——把真相放圖裡、用 charge 修,勝過把知識 fine-tune 進模型
✅ 圖 + charge
・改一條邊幾秒、不弄壞別的
・每筆改動有出處可追溯
・可設權限(老手能改、徒弟只能提案)
・真相在圖,換哪個模型都讀同一份
⚠️ 把知識 fine-tune 進模型
・要改?改不掉、得重訓
・當初為何這樣學?查不到
・知識綁死在某個模型,換模型就失傳
・沒有「誰能改」的權限邊界
工程備註(不佔本章重點):對外用 Streamable HTTP(JSON-RPC 2.0)不用 SSE;登入 JWT+兩個硬編碼角色,不必上 RBAC framework。另一個與 GraphRAG 無關但很痛的教訓:dev-loop 的 QA 只打 HTTP、沒開瀏覽器,結果 checkpoint 全過、頁面卻從沒正確顯示過——curl 200 不等於畫面出現,HTML 頁一定要用 Playwright 或人工實看

一句話收:塞得準(機器打樣板+老手矯正)、驗得出(用問句不用查表)、修得動(charge + Pending 人閘),圖才會活。這也正是整篇的主張——真相在圖、判斷可糾正、手有人閘。

企業 AI vs 玩票 AI:分水嶺

↑ 回目錄  ·  下一節 ↓

講到這裡,把整個知識這塊的價值收成一句:不是「知識越多越好」,是「相關的知識、被低門檻地取用/貢獻/信任」。

🧪 玩票 AI
知識塞進 prompt、每人自己一套;要嘛沒知識,要嘛「所有坑全灌進去」→ 又貴又是噪音,agent 被淹死、還常自相矛盾。
🏢 企業 AI
踩過的坑沉澱成共享知識(不重複踩);但檢索只回相關那一小片(不是全灌);寫一次、大家共用、可治理、可追溯。

而真正的重點,是把三個門檻降下來——這才是 A2A + GraphRAG 的價值所在:

🔌
引用門檻 ↓
MCP 一行連、零檢索碼;換 Claude/GPT/本地都能用。
✍️
建立門檻 ↓
老手「改」不是「從零寫」+ charge 幾秒改一條,活化能低、願意動筆。
🔍
理解門檻 ↓
答案附出處、走圖可追溯 → 人信得過,不是黑箱。
一句話:玩票的把一坨東西塞進 prompt;企業的是「結構化 + 精準取用 + 可治理」,還把「用它、貢獻它、信任它」的門檻都壓低。踩過的坑不重複踩,但也不把所有人所有坑一次全灌進來——只在對的時候、給對的 agent、回對的那一小片。這就是 A2A + GraphRAG 真正在解的事。

企業藍圖:各單位自維護、agent 來組合

↑ 回目錄  ·  下一節 ↓

把前面全部串起來,一家公司該長成這樣——各單位把自己領域的知識榨出來、自己維護;agent 在上面組合、跨單位取知識+辦事

🤖 AI Agent(組合者)
一個問題 → 跨單位取知識 + 辦事
▼ 分兩條通道 ▼
🔎 查知識 → MCP(腦 → 工具)
各單位的知識服務:HR 圖 / ESG 圖 / ERP 圖…
各單位自己「榨知識 → RAG/GraphRAG → 包 MCP」、自己維護。
🤝 辦事 → A2A(腦 → 腦)
各系統:請假 / 採購 / 財務…
掛 Agent Card + 開有生命週期的任務(送簽、開單、跑批)。
🏛️ 治理層(一定要有):registry(跨單位可發現、不撞名)+ 命名/id 規約 + 使用政策寫進 server 端的 tool 描述/instructions,隨連線自動下發(不碰使用者本機)

你的藍圖方向完全正確(這叫「聯邦式企業知識架構」)。落地時記住五點:

要點 怎麼做
別過度包 MCP 本身就是「給 agent 的 API 契約」。給 agent 用 → MCP 就夠;有程式/前端也要用才另開 REST API。
加治理層 registry + 命名規約 + 使用政策——沒這層=你同事「亂找」問題 × 全公司。
對號入座 查知識/唯讀=MCP;跨系統辦一件有狀態的事=A2A。別混用。
先小後大 先挑 1–2 個「骨架八成像」的領域做成 MCP 知識服務、跑通、量到價值,再聯邦擴張;A2A 等 MCP 穩了再上。
資料品質定生死 「榨知識」那步的 node 命名/關係要乾淨,否則 agent 亂找。兩段式:機器打樣板 → 領域老手校準(propose/approve/reject 的 charge 審核)。

落地兩件事:知識放哪、不會用 agent 的員工怎麼用

↑ 回目錄  ·  下一節 ↓

前面的 claude mcp add 是給工程師的路。真到全公司,你會撞到兩個現實問題:①知識到底集中在哪個「一個地方」統一改?②多數員工連 agent 都不會用。兩個都有乾淨解。

知識有兩種,各有「一個中心」——別散進每個人的 prompt

拉式知識(GraphRAG) 注入式知識(CAG)
那一個地方 知識圖資料庫(如 Neo4j) 一個 LLM Gateway(proxy)
怎麼被用 client 的模型打 API 拉回來 Gateway 集中把知識注入每個請求(快取在後端 vLLM/各雲端)
更新 改資料庫一次 改 Gateway 一次
前面的 client 五花八門都無所謂(Claude Code/GPT/地端…)
關鍵:知識住哪 = 誰能改它。住 API/Gateway 後面 → 你一個地方改;一旦烤進每個 client 的 prompt → 散掉、改不動(就是「幫每個人改 CLAUDE.md」那個坑)。

Gateway 長這樣——前面各種 client 用 API 連進來,後面各種模型連出去,CAG(知識注入+快取)就掛在中間那一個位,改一次全員生效:

前面 · 各種 client(連進來)
Claude Code · Aider · 內部聊天 App · Foundry · 任何 OpenAI-SDK app
中間 · 一個 Gateway
★ CAG 知識注入 ★
(快取跑在後端;就改這一個地方)
後面 · 各種模型(連出去)
Anthropic · OpenAI · 你的地端 vLLM/Ollama
開源現成的:LiteLLM Proxy(自架、OpenAI 相容、能路由多模型)。講清楚兩層別混:Gateway 本身是無狀態路由層,它做的是「把共用知識注入每個請求 + 統一發 key/管政策」;真正的 KV cache 不在 Gateway,在後面——接你自己的 vLLM(開 prefix caching)時 KV cache 在 vLLM 的 GPU 裡(多副本還要 sticky routing 才命中得穩),接雲端則靠各家 prompt caching。所以「一個地方統一」指的是知識注入與治理這個控制點,不是「Gateway 握著快取」。注入通常要寫一段 pre-call callback,不是純 config 開關。唯一條件:client 的 base_url 要指到 Gateway(個人訂閱網頁繞不過 → 那種人只用下面的聊天框;且 base_url 是慣例,要真收斂還得靠網路 egress 管制 + key 只從 Gateway 發)。

多數員工連 agent 都不會用——那就別給 agent,給一個聊天框

「Agent + MCP + claude mcp add」是給會寫程式的少數人。給全公司電腦白癡的,是一個聊天輸入框——內部網頁/Teams/LINE bot——員工只打中文、看答案,看不到 agent、MCP、CLI。所有複雜度都在後端:那個聊天 App 背後就接上面兩個中心(Neo4j 拉關係、Gateway 注入手冊)。現成前端:Dify/AnythingLLM/Open WebUI(自架、能接你的 API)。注意:它們「內建的 RAG」是向量的,要吃到 GraphRAG/hr-graph 得把它當外部 tool/API 掛進去(走「能接你的 API」那條),不是靠它的內建向量 RAG;各家對 MCP/自訂圖工具支援度不一,先驗過。員工端=一個網址 + 公司帳號登入,就這樣(怎麼讓非 IT 人真的開始用,見前面「步 1 怎麼點火」)。

誠實的反方:什麼時候你其實不需要(或別急)

↑ 回目錄  ·  下一節 ↓

只聽支持自己的聲音會翻車。這裡把最強的反方攤開——很多情況它們是對的。核心一句:RAG/GraphRAG/A2A 都是「門檻之上才回本」的工具,不是預設。

① RAG 未必要——長 context 可能就夠
2M token context 讓「全塞進去」變可行。RAG 仍贏在成本(每查便宜約 1250×)、可追溯、去幻覺;但 <100 篇、靜態、原型時,長 context 更簡單。「RAG is dead」不成立,但「一定要 RAG」也不成立。
② CAG:知識塞得進就別檢索
論文標題就嗆《Don’t Do RAG》:知識有界+穩定+塞得進 context 時,把知識預載進 KV cache、跳過檢索,更快更簡單、甚至贏 RAG。大/快變語料才回頭用 RAG。
③ GraphRAG 常常是 overkill(最該記)
建圖貴(百萬 token 語料數百鎂);抽象 QA 上比普通 RAG 多 57× 時間、210× token(來源見文末「反方與邊界」的 TDS/Medium);簡單查詢(「退費政策是什麼」)反而更差。只有語料 >10 萬份 + 多跳是常態(合規/合約)+ 引用是硬需求,才值得;否則先做更好的 chunking/reranker(reranker=把粗選出的候選段再精排一次的模型)。
④ A2A 可能過度標準化
業界不乏質疑聲音(連 Docker 創辦人 Solomon Hykes 都對「有了 MCP 為何還需要 A2A」表達過保留,見文末反方連結)。A2A 有用但範圍比炒作窄;協定太多(MCP/A2A/ACP/ANP)有過早標準化之嫌。先把 MCP(查知識)做穩,A2A(跨系統辦事)等真有多 agent 要互通再上。
邊界心法:這些反方不是叫你別做,是幫你把「什麼時候值得」的線畫清楚。大多數情況,更好的 chunking + 一顆好模型 +(夠用的)長 context 就夠了;GraphRAG/A2A 是「特定門檻之上」才回本的工具,不是預設。(RAG 跟 CAG 到底怎麼選,見前面「CAG vs RAG」章的實測;來源見文末「反方與邊界」)

上線後怎麼監控與維護(生命週期)

↑ 回目錄  ·  下一節 ↓

導入不是終點。這套東西會腐化——而且腐化的圖比沒有圖更危險:agent 拿到過期的關係、還附「出處」,變成更可信的錯。所以上線那天起,要有人、有流程、有回滾。

環節要做什麼
誰維護(人)最小啟動編制:1 個平台 owner + 各單位 1 個兼職 curator。誰核准 propose(提議寫入)、用誰的預算,要在導入前就講定——沒人維護的圖三個月就 stale(過期、沒人更新)。
上線前 eval建一組真實 regression 題庫(含跨段綜合、會撈漏的題),走真檢索量正確率與幻覺率——不是 demo 那種餵完美段落的 4/4。
上線後監控品質drift 監控(正確率退化告警)、存取稽核(誰在何時查了哪筆,PII 必留痕)、命中率/延遲/成本。
失敗與回滾知識圖/文件版本化;charge(=變更留痕)已記「誰改的」,還要能退回上一版;答錯要有回報→修圖→回歸驗證的閉環。
權限與資料分級別用一把共用 token 當授權:帶使用者身分做 per-user 授權 + 資料分級(薪資/個資 row-level 管control);機密知識強制走地端模型、公開的才可上雲。
換模型/升級換底層模型或版本=一次改動:重跑 regression eval、確認答案沒壞才切上線——這就是「模型可換」在維運面的代價。
備份/DR知識圖、向量庫、Gateway 設定定期備份;要有災難復原計畫,別只有「知識版本回滾」。
一句話:能建,不代表養得起。導入前先問「這塊知識誰持續策展、誰核准、答錯誰負責回滾」——答不出來的那塊,先別上,否則你會養出一座「附出處的錯誤來源」。

治理與資安:給 agent 裝了「手」,就得管好

↑ 回目錄  ·  下一節 ↓

這套東西=給 agent 一顆(知識)+一雙(A2A 動作技能)+餵它外部語料。腦+手+外部輸入三合一,是傳統資安沒完全涵蓋的新攻擊面。裝手之前,先把這五條想清楚。

風險該做什麼
授權與身分別用一把共用 token 當授權。end-user 身分要穿透 Gateway(它無狀態,但得把使用者身分帶進去、不能抹平)做 per-user + row-level;「免憑證」只限無敏感的名片/菜單,任何觸及分級資料的讀取都要身分。
讀取稽核誰在何時查了哪筆(PII 必留痕);稽核日誌 append-only、獨立保存、有保存期——沒有真實 per-user 身分,「誰查的」就是空話(跟第 1 條綁死)。
動作技能人閘不可逆的動作(採購/財務/送簽)不能只靠 token 認證——token 只證明「是誰」,不等於「准做多大」。要金額/範圍上限 + 人工核可閘(比照知識圖寫入的 charge)。
間接提示注入最該防、也最容易漏:被污染的文件/圖節點可夾帶指令,驅使「有手」的 agent 去做未授權動作、或把機密(薪資)外送。檢索內容一律當不可信輸入;「讀知識 → 觸發動作」之間要授權隔離(工具白名單/確認閘)。
Gateway 單點它掛=全公司 AI 斷;被攻破=所有模型 key +注入知識全量外洩。要多副本+LB(它無狀態,可水平擴)、key 進 vault 可輪替、Gateway 自身要 authn/authz +限流+稽核。
一句話:腦可以錯(charge 糾正)、但手不能亂動(人閘)、輸入不能全信(注入防護)。「機密資料不上個人 AI」只是最低標;真正上企業,這五條每一條都得有人負責。

怎麼用一個「請來做 AI 導入」的人

↑ 回目錄  ·  下一節 ↓

多數老闆不是自己做,是請人做。那「怎麼用這個人」才是真問題:我怎麼信任他?有些資料他不能看,怎麼辦?解法只有一句:信任靠「結構」,不靠「賭人品」——把情境設計成「就算他不可信、就算 AI 出錯,也傷不到你」。

① 有些資料他不能看 → 用「建 vs 用」分離,他根本不用碰機密。他用假資料/遮罩資料來「搭」(建工具、方法);你內部本來就有權限的人拿真資料「跑」。他的產出是「一套會動的方法」,不是你的機密答案。
② 信任靠三道結構:最小權限+從非機密、小處開始(你看結果、零風險,好了再開權限);沙盒先行(碰不到正式系統);全程留痕+NDA(他知道有 log=嚇阻+可歸責,NDA 是底線不是保護)。
③ 他的活不是「懂你的生意」,是:搭水電(工具/流程)、配一個你的懂業務的人一起做(他出「怎麼做」、你的人出「做什麼+碰真資料」)、教會你的人(他走了你的人還在)、小題先證明再放大。
✅ 好訊號(不用懂技術也看得出)🚩 紅旗
提議一個小 pilot、給可量的贏要全部資料+一年+大預算才動
堅持教會你的人只有他會操作(讓你依賴他)
用假/遮罩資料就能做、不吵著要機密「我要全權限才能幫你」
用你聽得懂的話講、拿工時算 ROI一堵術語牆
4 週給一個真結果一直在「規劃/建平台」,看不到東西
第一步(這週就能做):給他一個「小+非機密+大家最煩」的痛點,配一個懂那塊業務的人,約定「4 週內看到:這件事本來花 X、現在花 Y」。做到=信任+效益一起拿到、且零機密風險;做不到或吵著要更多權限=你不用懂技術就知道該踩煞車。
一句話:你不用「信任」他,你只要把他放進一個「四週見真章、他碰不到機密、他走了你的人還在」的結構裡。

一張圖總結:從模糊需求到交付的完整流程

↑ 回目錄  ·  下一節 ↓
💬 模糊需求
▼ ① brainstorm 逼出問題(領域判斷留在人身上,不是 AI 蓋章)
📄 SPEC(定錨的規格)
▼ ② 蒸餾成「機器可驗」的規則 INV(重點在「絕對不准發生什麼」)
📚 規則書就位
【正道腦 + BUG 腦 + GraphRAG 都在這層供 AI 隨時查】
▼ ③ 進 Workflow:動手的 AI + 專門找錯的 AI 對抗 + 兩道人工關卡
交付(merge)
派工原則:聰明貴的事 → 雲端 CC;規格明確的小事 → 本地 Pi/Aider。
關鍵/安全決策一定寫死進契約,不讓便宜的腦自己判斷。

鐵律:順序不能亂——規則書還沒就位就先開工,就是災難。骨架可以一天搭好,但規則內容是一坑一坑累積出來的,不可能一天到位。

對「公司」的落地意義

↑ 回目錄
決策點 重點
護城河在哪 不是買一個 AI 工具就完事——工具只是第 4、5 層的「廚師和腦袋」。真正的護城河在 1~3 層(規格紀律、水電、SOP)和後面那幾個「腦」。
資料安全 資料敏感的東西留在公司內——本地模型讓病歷/名冊/內部資料不出門,代價是笨一點、關鍵決策要盯緊。
知識歸屬 知識是公司資產,不是 AI 的——用 GraphRAG,老員工的經驗變成一張公司自己擁有、可糾正、換任何 AI 都能讀的地圖。人走了,腦子留下。
別照抄大廠 Google 敢讓 AI 自主,是因為它有一千人接錯、賭注只是 demo。你的工作點不一樣(錯了不可逆、你就是最後一道防線),預設應是「人把關 + 機器可驗 + 關鍵決策人拍板」。
🤝 這才是現在的 AI 協作:人出判斷,AI 出實作
別再問「我的員工要不要學會用 AI/agent」。真正的分工是:domain 專家出「判斷」,AI 跟工程師出「實作」。
・你的 domain 專家不用懂 RAG/CAG/A2A——他只要出本行判斷:「這塊知識長什麼形狀?」「大家每天來拜託我做哪幾件事?」
・這些判斷,只有最懂業務的人給得出——AI 給不出、工程師也想不到
・把判斷接成跑得起來的東西,那才是 AI 跟工程師的活。
所以你該投資的不是「把每個人變成 AI 高手」,而是「讓最懂業務的人,把判斷講清楚」。domain 專家離 agent 很遠,一點關係都沒有——他出的本來就不是 AI 知識,是判斷。

第四部到這裡:市面上的 AI 是廚師和腦袋,但一家餐廳能不能穩定出好菜,靠的是菜單規格、廚房水電、出菜 SOP,還有那本傳給徒弟、可以當場糾正的食譜。把這五層加四顆腦搭起來,你買的就不再是「一個會失憶的實習生」,而是一支越用越強的團隊——但團隊一大,還缺最後一層:那張管住它們的控制台。這就是第五部。

PART 5 / 5
第五部 · 控制台:把四顆腦收成一層可管理的控制平面

一張 Cisco 海報,逼我問了一個問題

↑ 回目錄  ·  下一節 ↓

前面四部,把五層加四顆腦搭起來了。但東西一多,會冒出一個新問題:誰來管這些腦?我是在展場看到一張 Cisco 的 agentic AIOps 架構圖,才被逼著把這個問題講清楚。那張圖由上到下是:自然語言 → 多個 agent ↔ LLM(雲端或地端)→ 中間一層掛著四個 Manager:LLM Manager、Skill Manager、KB Manager、MCP Manager → 底下接 Splunk、ThousandEyes、一排網路設備。

先講三句誠實話(免得你把行銷當事實):
① 這四個「Manager」的命名不是 Cisco 官方術語——官方講的是四個核心元件(AI agent、Skills、MCP servers、human-in-the-loop gates),這張海報是簡報方的再包裝。
② 圖上「省 25–40% 成本、降 30–50% 停機」這種數字,我查不到公開出處,當作願景、別當實證
③ 但撇開包裝,這張圖點破了一件我一直在做、卻沒替它命名的事。

那件事是:當腦、工具、模型都變多,你需要一層控制台——agent 不該自己到處亂抓模型、技能、知識、工具,中間要有一層管「誰能用什麼、怎麼路由、健不健康」。這層現在業界正在給它取名:Agent Gateway / AI Gateway / control plane(AI 的控制平面)。名稱已經在收斂(Kong、AWS、Cloudflare 到 Linux Foundation 的 agentgateway 專案都在用同一組詞),但多數產品還在早期預覽。換句話說:方向對,工具還在長。

四個 Manager:你如果照前四部做,其實已經散做了

↑ 回目錄  ·  下一節 ↓

把四個 Manager 拆開看,你會發現前面幾部其實已經各做了一塊雛形,只是散著、沒收成一層。每一塊都有現成的開源/標準可以抄:

Manager它在管什麼現成的做法(可抄)
LLM Manager(模型總機)哪種任務用哪顆模型、雲端 vs 地端切換、成本/延遲路由、掛掉自動 fallback「LLM Gateway」這類方案,開源的 LiteLLM 可自架,還能把地端 Ollama/vLLM 跟雲端模型掛在同一個 gateway 後面——正好做雲/地端切換
Skill Manager(技能登記處)有哪些技能、怎麼被發現與選用Anthropic Agent Skills(一個含 SKILL.md 的資料夾+漸進揭露:先只載名稱+描述,需要時才展開);技能一多時用 Tool Search 的 defer_loading 省 context
KB Manager(知識管家)檢索、更新、版本、來源託管型 RAG(LlamaCloud、Vectara,後者含版本/生命週期治理);或你自己的 GraphRAG/正道腦
MCP Manager(工具門房)有哪些 MCP、註冊、發現、健康、治理MCP 協定本身內建 tools/listlistChanged 發現機制;再加 registry(官方/Kong,仍 preview)+ gateway(AWS AgentCore、Docker MCP)做治理

看懂這張表,重點不是「Cisco 好厲害」,而是:控制平面不是要你從零建一個平台,是把你手上四塊散的東西,收成一層可管理的介面。模型選擇散在各支腳本裡→收進 LLM Manager 一份 config;工具散在各個 MCP→收進 MCP Manager 一張註冊+健康表。收斂本身就是價值。

補一句最容易被跳過的:「可管理」的關鍵字是「可收回」。
用「複製一個資料夾給大家」的方式共享技能,其實不算管理——因為拷貝出去就收不回來了。真正的管理有三個條件:集中、可授權、可收回。一個技能/工具要能「給了還能拿回」,就得放在一個帶權杖(token)的服務後面,收回=砍掉那把 token。這也是為什麼上面每個 Manager 的成熟形態,都會往「一個帶身分驗證的服務」收——散在各處、拷貝出去的東西,天生管不住。

但這張圖有個高度,看漏了會做錯:它是「公司層級」的架構。四個 Manager 是一層集中維護的平台,由少數懂設定的人顧一次;其他所有人——尤其非工程師——看海報最上面那格「自然語言交流」,只是講話,不碰任何設定檔。

「為什麼是 MCP」的答案就在這裡:MCP 是那道「標準消費介面」——有了它,用的人不必知道後面每顆模型、每個知識庫、每個工具怎麼配,只要呼叫。設定被關在 Manager 層裡,外面零設定消費。這也是它在公司能省成本的真正原因:不是讓每個人都變 config 工程師,是讓「會設定的少數」顧一次,「只會講話的多數」直接用。別期待每個人都會弄設定檔——這一層存在,就是為了讓他們不用。

反過來看個人:如果你自己早就在管一堆 skill、知識庫、模型選擇、一排 MCP(很多重度使用者玩幾個月後其實都到了這步),那你已經在跑一個個人版的控制平面了——只是散在各處,而你自己就是那個「會設定的少數」。所以這不是「要不要建」的問題,是同一套 Manager、兩個高度:個人版的功課是把你已經在管的收乾淨;公司版的功課是把它集中、再用 MCP 讓多數人零設定消費。

同一件事,一個人做 vs 一間公司做

把這四個 Manager 換個角度看會更清楚:一個重度使用者,自己就管得動這四樣(散著管,反正自己人);一間公司要給全體用,就得把每一樣「集中成一個服務」。差別不是規模大小,是前面那句——可不可收回

Manager一個人怎麼做一間公司怎麼做
LLM(模型)各工具手動指定用哪顆模型、自己切雲/地一個中央閘道,所有應用打同一入口、集中路由、可砍金鑰撤權
KB(知識)自己養一套知識庫、每個答案附出處各部門各養一套,上面一層統管命名/機密分級/版本
Skill(技能)一個資料夾裝著、自己用就夠得放進帶權杖的服務後面——才能授權給人、又能收回
MCP(工具)少數工具自己接、自己就是會設定的那個人中央登記,讓不會設定的多數人用聊天框「零設定」消費

看整張表,同一條線再出現一次:一個人不必跟自己撤銷權限,所以「散著、拷貝、手動配」都行;一間公司每一格都被「要能收回」這條,逼成「一個帶身分驗證的集中服務」。其中變化最大的是技能——一個人一個資料夾就夠,一間公司卻非得把它服務化不可,因為資料夾一旦拷貝出去就收不回來了。

連 Cisco 都把「人閘」當核心,不是選配

↑ 回目錄  ·  下一節 ↓

這張圖最讓我在意的,不是那四個 Manager,而是 Cisco 官方版四個核心元件裡的最後一個:human-in-the-loop gates(人在迴圈的閘門)。這跟本文一路在講的那句話,是同一件事——腦可以錯(可以糾正),手不能亂動(要人閘)

一家做網路自動化的公司,把 agent 接到防火牆、路由器、交換器這種一改錯就可能全網斷線的地方,卻仍然把「人閘」列進地基四件之一——這反過來說明:越是有副作用、越不可逆的動作,人閘越不能省。這不是保守,是責任。控制平面除了管「路由與發現」,還要管「人到底在哪一步把關」。給 agent 裝了手,就一定要有閘。

所以如果你只從這一部帶走一句話:控制平面 = 讓能力可管、可換,再加上一道「動作前人要點頭」的閘。前者省你重工,後者保你不出大事。

落地:別建平台,先收成薄薄一層

↑ 回目錄

最後講落地。個人跟公司兩個高度,功課不一樣:個人版——你若已經在手動管這些(很多人玩幾個月就到了),落地是把散的收乾淨、別急著上一整套治理產品(多半還在預覽,押身家太早);公司版——落地的難點不是設定檔,是「誰集中維運這層、怎麼讓非工程師零設定消費」。兩邊共通的一點是:每個 Manager 的「最小可用」形態其實很輕——LLM Manager 可能就是一份「哪種任務用哪顆」的設定;MCP Manager 可能就是一張「有哪些工具、健不健康」的清單。

  1. 先做最痛的那個——通常是 MCP Manager,因為工具一多最容易亂(誰在哪、還活著嗎、誰能連)。
  2. 再把模型選擇收成一處——用 LiteLLM 之類把散在各腳本的「用哪顆模型」收進一份 config,馬上省重複。
  3. 知識與技能通常已經比較成熟,後補——你若已有 GraphRAG 和一套 skill,這兩塊先維持,等前兩個穩了再收。

整篇一句話收尾:菜單規格、廚房水電、出菜 SOP、可糾正的食譜、四顆腦——那些是「能力」;控制平面是「讓這些能力可管、可換、可把關」的那張出菜口的桌子。先把能力搭起來、真的用出效益;等腦多到開始亂了,再收成薄薄一層控制台——別為了架構對稱,先蓋一個沒人坐的控制室。能力先行、治理隨後,順序不能反。這才是把「一個會失憶的實習生」,變成「一支越用越強、而且管得動的團隊」的完整那條路。

留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *