人工智慧

design token 是什麼?讓 AI 設計系統認得品牌

多數團隊以為,AI 生成的畫面一次比一次走樣、顏色又跟品牌對不上,問題出在 prompt 寫得不夠細。其實再細的描述都救不了,真正的原因是 AI 對你的品牌根本沒有一份「讀得懂的規則」。它認得「藍色」,卻不認得「你的藍色只能出現在主要按鈕、不能拿去當背景」;於是每次生成,它都在憑最接近的通用值猜,猜久了自然愈飄愈遠。

補上這份規則的關鍵,就是 design token(設計權杖)。它不是設計師關起門來自己整理的內部術語,而是一套把品牌決策寫成結構化資料、讓機器讀得懂的規範。當 AI 設計系統要「認得你的品牌」,靠的不是更長的 prompt,而是這一層能被穩定引用的 token。這也是為什麼這一兩年,design token 從設計流程裡的加分項,變成 AI 生成介面能不能守住品牌的基礎設施。

先從 design token 到底是什麼、為什麼 AI 生成內容時特別需要它講起,再一路拆到怎麼分層、怎麼餵給工具、生成完怎麼驗。

Design Token 是什麼?為什麼 AI 生成介面需要它?

先給一個精準的定義。design token 不是色碼,也不是某個數值本身,而是一筆「被命名、可重用、承載了設計決策」的資料。舉個具體的例子,你不會在介面裡直接寫 #2563EB,而是寫 color.action.primary(主要動作的顏色)。前者只是一串顏色代碼,後者則說清楚了這個顏色「代表什麼、該用在哪」。W3C 底下的 Design Tokens Community Group 把 design token 定義成一種「vendor-neutral」、可跨工具共享的設計決策格式,講的就是把設計背後的規則抽出來,變成一份機器與人都能引用的資料。

這裡要先分清 token 跟一般「變數」的差別,兩者長得像,用途卻不同。變數存的是純數值,你給它一個名字、塞一個數字進去,它就只記得那個數字。token 存的則是有語意的設計決策,像 color.action.primary 這個名字本身就在告訴讀它的人「這是主要動作用的顏色」,數值只是它的內容之一。換句話說,變數回答「這是多少」,token 回答「這是什麼、拿來做什麼」。對 AI 來說,後面這個資訊才是它守住品牌的依據。

為什麼 AI 生成內容時特別需要這一層?因為 AI 模型對任何品牌都沒有天生的知識。它從海量資料裡學到了「什麼是藍色、什麼是圓角、什麼叫留白」,卻完全不知道你的品牌規則,像是你的主色只能用在哪、標題字級跟內文差幾階、卡片內距固定是多少。這些是你團隊內部才有的約定,模型不可能猜到。

沒有結構化的 design token 時,會發生什麼?你只能靠 prompt 每次重新把品牌規則描述一遍。問題是文字描述本身很不穩。這次寫「深藍色,偏正式」,下次可能寫成「品牌藍,穩重一點」,換個人寫又是另一套形容詞。這種「prompt 漂移」,也就是不同人、不同時間對同一個品牌規則寫出不一致的描述,會讓 AI 抓到的目標一直晃動。結果就是顏色出現微妙偏移、間距抓錯了幾個像素、整體樣式跟品牌對得起來卻又哪裡怪怪的。你以為是 prompt 不夠精準,實際上是這套規則從一開始就沒有一個穩定、可引用的形式讓模型讀。

Design Token 要涵蓋哪些視覺規則

一提到 design token,很多團隊第一個做的是顏色,做完就以為系統建好了。其實顏色只是其中一類,一套真正能讓 AI 守住品牌的 token 系統,要管到的視覺規則比想像中多。把它攤開來看,大致有這幾類:

  1. 顏色:這是最常被做、也最容易只做一半的類別。除了主色、輔色,還包含文字色、背景色、狀態色(成功、警示、錯誤)等各種用途。DTCG 的穩定版規範甚至把色彩空間擴展到 Display P3 與 Oklch,對齊 CSS Color Module 4。意思是連「同一個藍在不同螢幕、不同平台怎麼呈現」都納進了標準管理範圍,而不只是丟一個十六進位色碼了事。
  2. 字體:不是一個 token,而是一整組:字體家族(font family)、字重(font weight)、字級(font size)、行高(line height)都要各自命名。例如 font.heading.size 對應標題字級、font.body.lineHeight 對應內文行高。少了行高與字重的 token,AI 很容易把標題和內文的層次感弄歪。
  3. 間距:元件之間、內容與邊界之間的距離,像 spacing.card.padding(卡片內距)這種。間距是介面節奏感的來源,卻最常被漏掉,因為它「看不太出來」,可是一旦亂掉,整個版面就會顯得鬆散或擁擠。
  4. 圓角:按鈕、卡片、輸入框的圓角半徑,例如 radius.button。同一個品牌通常有一套統一的圓角語言,做成 token 才不會這裡圓一點、那裡方一點。
  5. 陰影:這是台灣團隊特別容易漏做的一類。陰影決定了介面的層次與立體感,shadow.cardshadow.modal 這種 token 沒定好,AI 生成的元件很容易「浮」得不一致,有的重、有的輕,看起來就不像同一套系統。
  6. 圖示風格:線條粗細、填色或線框、圓角或方角,這些一致性規則同樣可以用 token 或規範描述來管。這也是常被忽略的一類,結果 AI 東拼一個實心圖示、西湊一個線框圖示,風格立刻散掉。

把這六類擺在一起,你會發現,所謂「品牌規範」,具體拆解下來就是這些可以被命名、被引用的規則。只做顏色 token,等於只給了 AI 品牌的四分之一。陰影跟圖示風格這兩塊常常被跳過,偏偏它們又最影響「整體看起來像不像同一個品牌」,補齊它們,AI 才有機會把畫面做得像出自同一雙手。

為什麼同一句 prompt,AI 每次生成的畫面不一樣?

理解了 token 的價值,還有一個更根本的問題要弄清楚。同一句 prompt,AI 每次吐出來的畫面卻不一樣,根源在設計系統跟生成模型是兩種性質完全不同的系統。

設計系統(design system)本質上是確定性(deterministic)的規則,主色就是這個色碼、標題字級就是這一階、卡片內距就是這個數字,一是一、二是二,不會今天這樣明天那樣。但 LLM 這類生成模型本質上是機率性(probabilistic)的,它在每個環節挑的是「最可能」的下一步,而不是「品牌唯一正確」的那一步。當你只丟一段品牌形容詞、沒有給它一個可以強制對齊的錨點時,模型就會往它學過的、最普遍的通用值靠攏。於是你會發現,同一句 prompt 生成的結果一次比一次飄。不是模型壞了,是它從頭到尾都在機率分布裡取樣,而你的品牌規則從來不在它必須遵守的那一格裡。

這個落差不是靠「把話講清楚」就能補起來的,因為問題不在措辭,在於確定性的規則遇上了機率性的生成。這也解釋了一個業界普遍觀察到的現象。AI 寫程式碼、畫介面已經很普及,但大家對它的信任度卻遠遠跟不上。Figma 一份 AI 報告的數字很能說明這件事。已經有 68% 的開發者用 AI 來寫程式碼,可是只有 32% 的設計師與開發者信任這些輸出。用得多、卻信不過,這中間的落差,很大一部分就是輸出不穩定造成的。

還有一個反直覺的陷阱,叫做 context rot(脈絡腐化)。直覺上你會想,那我把整包 token 庫、加上一長串歷史對話,全部塞進 prompt,資訊愈多模型不就愈準嗎?實際上剛好相反。當你一次丟進去的內容太多、太雜,真正關鍵的那幾條規則反而會被淹沒、被稀釋,模型從一大堆資訊裡抓到的,往往是離它最近、最省力的通用值,而不是你埋在中間那條「主色只能用在主要按鈕」的關鍵限制。塞得愈多,訊號愈弱,這就是 context rot,不是餵得不夠,而是餵得太雜,把重點餵糊了。所以問題從來不是「給 AI 的資訊夠不夠」,而是「有沒有用它讀得進去、抓得住的方式給」。

Design Token 怎麼分層,AI 才不會抓錯值

AI 老是往通用值靠攏,關鍵就在 token 的結構安排。分層分得好,AI 每次都能穩穩抓到「該用的那個值」,而不是最底層的原始色碼。一套經得起 AI 使用的 token 系統,通常會拆成三層:原始值、語意層、元件層。這樣分不是為了複雜,而是為了讓 AI 讀的永遠是「有用途說明的那一層」,不是一堆沒有語意的裸數字。DTCG 的穩定版規範也明訂了 token 之間可以有繼承(inheritance)、別名(alias)與元件層級引用(component-level references)的關係,這套分層做法有官方標準背書,不是哪一家工具自己發明的。

底下用三個子步驟,把這三層一層一層拆開講。

Design Token 三層架構:Primitive 原始值往上疊出 Semantic 語意層,再收斂到 Component 元件層
AI 該讀的是中間的語意層,因為只有 color.action.primary 這種用途命名才告訴模型該用在哪。

第一層:先建原始值(Global/Primitive Token)

最底層叫 global token 或 primitive token,它的功能很單純,只回答「這是什麼值」。這一層放的是純粹的原始數值:一整組色階(color.blue.500color.blue.600)、一整組字級階、一整組間距階,裡面不含任何用途資訊。它就像顏料盤上排好的顏料,只是把可用的原料備齊,還沒說哪個顏料要畫在哪。

關鍵在於,AI 不該被直接餵這一層。如果你把 color.blue.500 這種原始色階直接丟給生成工具,它就會把這個原始色碼硬編(hardcode)進輸出。表面上顏色沒錯,但你的品牌一旦改色,這些寫死的值全部對不上,而且 AI 也無從判斷這個藍該用在按鈕還是背景。原始值是必要的地基,但地基不該直接曝在外面給人踩。

第二層:疊上語意層(Alias/Semantic Token),這是 AI 該讀的那一層

語意層是整套系統裡最關鍵的一層,也是回答「design token 怎麼讓 AI 讀懂品牌規範」的核心。這一層的 token 不用顏色命名,而用用途命名:color.action.primary(主要動作色)、color.text.primary(主要文字色)、color.background.subtle(次要背景色)。它們自己不存原始數值,而是「別名」,指向底層某個 primitive token,例如 color.action.primary 引用 color.blue.500

用途命名為什麼比顏色命名更能讓 AI 判斷?因為名字本身就是使用說明。color.action.primary 這個名字直接告訴模型「這是主要動作要用的顏色」,AI 讀到它就知道該把這個值放在主要按鈕、主要連結上,而不會拿去當背景。相對地,如果只給 color.blue.500,模型只知道這是某個藍,卻不知道它的職責,判斷就得靠猜。

語意層還有一個實務上很甜的好處,就是品牌改色時,名稱不必跟著變。假設哪天品牌主色從藍換成綠,你只要把 color.action.primary 的指向從 color.blue.500 改成 color.green.500,所有引用了 color.action.primary 的地方,不管是介面還是 AI 生成流程,全部自動跟著換,名稱一個都不用動。用途是穩定的,顏色是會變的,讓 AI 讀穩定的那一層,它自然不會抓錯。

第三層:對應到實際元件(Component Token)

最上面一層是 component token,它把語意層再收斂到具體的介面元件上,例如 button.background(按鈕背景色)引用 color.action.primarycard.radius(卡片圓角)引用 radius.md。這一層讓每個元件都有自己一組明確的 token,AI 要做一顆按鈕、一張卡片時,能直接對到這個元件該用哪些值。

不過這一層有個常見的過度設計要提醒你,就是不要太早就把每一個元件都做成獨立 token。設計初期元件還在變,這時就給每顆按鈕、每張卡片各自抽一套 token,系統會迅速膨脹到沒人維護得動,而且很多 token 建了之後根本沒被重複用到。比較務實的節奏,是等某個元件真的穩定下來、在多個地方重複出現了,再把它抽成 component token。先讓語意層扛大部分工作,元件層留給那些反覆用、值得單獨管的元件。

Design Token 怎麼餵給 AI 工具,實際落地五步驟

分層架構懂了,最後一哩路是把它接進 AI 工作流程。這一步最容易被跳過,也是最多人「做完 token 卻沒真的用上」的地方。下面這套五步驟,從盤點既有樣式一路走到把 token 餵進 AI、再驗證輸出,你可以照著做。整條路上有三個關鍵反覆出現:先讓 AI 讀語意層、小範圍生成、事後一定驗證。抓住這三點,才不會做了一堆 token,AI 做出來的東西卻還是我行我素。

步驟一:盤點現有色碼、字級與間距,別急著全部 token 化

第一步是回到你既有的設計稿或網站,把重複出現的樣式值抓出來。你多半會發現同一種東西有好幾個相近的值,像間距一下 23px、一下 24px、一下 25px,其實是不同時間、不同人各自量出來的,彼此沒有真正的意義差異。這時要做的是收斂,把這些相近但無意義差異的數字合併成一個標準值,例如統一收成 24px 的間距階,而不是把每個看到的數字都做成一個 token。

為什麼強調「別急著全部 token 化」?因為盤點的目的是理出秩序,不是把混亂原封不動地搬進 token 系統。如果你把 23、24、25 全部各建一個 token,等於把原本的混亂固定下來,AI 讀到三個幾乎一樣的間距 token,反而更不知道該挑哪個。先合併、再命名,token 系統才會乾淨。

步驟二:把 token 整理成 AI 讀得懂的結構化檔案(JSON)

盤點收斂完,下一步是把這些 token 寫成結構化檔案,目前最通用的格式是 JSON。原因很單純,幾乎所有 AI 工具、所有主流程式語言都能解析 JSON,它是設計端與工程端、人與機器之間最沒有摩擦的交換格式。

這裡有個容易漏掉、卻很關鍵的細節。JSON 檔案裡除了數值,還應該寫上每個 token 的描述文字,也就是這個 token 能用在哪、不能用在哪。AI 會把這段描述當成使用限制來讀。舉例來說,你在 color.action.primary 底下附一句「僅用於主要動作按鈕與主要連結,不可作為大面積背景」,模型生成時就多了一條明確的護欄,而不是只拿到一個色碼自己揣摩。數值告訴 AI「是什麼」,描述告訴 AI「怎麼用」,兩者都給,AI 才守得住規矩。

這件事在 2025 年底有了公認標準可以依循。W3C 底下的 Design Tokens Community Group(DTCG)在 2025 年 10 月發布了 design token 規範的第一個正式穩定版,這是一份 vendor-neutral(不綁單一廠商)的格式,由 Adobe、Google、Microsoft、Meta 等 20 多位編輯共同制定,支援多品牌主題化、還能把同一份 token 輸出成 iOS、Android、Web 各平台的程式碼。目前已有 Figma、Style Dictionary、Tokens Studio、Penpot、Sketch、Framer 等 10 多個工具支援或正在導入。這代表現在談 design token,你不必各家各寫一套格式土法煉鋼,而是有一個大家都認的共同標準,不同工具之間交換 token 檔案,終於能對得起來。

步驟三:讓 AI 設計/程式碼工具直接讀取這份規則檔

有了結構化的 token 檔,就能讓 AI 工具在生成前先讀它,而不是憑空產出。這是目前最前沿的落地做法,而且已經不是理論,各大平台都做出了實際的規格。

一個代表性的例子是 Google 旗下 Stitch 推出、並開源出來的 DESIGN.md 格式。它把「先讀規則再生成」這套邏輯做成一份可以匯出、匯入、跨專案共享的規格檔。AI 代理在動手畫介面之前,先讀這份檔案,就能知道每個顏色是做什麼用的,而不必用猜的。更進一步,Google 說明 AI 代理還能拿自己選的值去對照 WCAG 無障礙規則做驗證,確認顏色對比等條件符合標準。Google 特別強調把它開源成草案規格,是為了讓這套做法能跨任何工具、任何平台使用,不綁在單一產品上。

同樣的邏輯也出現在 Figma 的 MCP server 上。它讓 Claude、Cursor 這類 AI 工具能直接讀取 Figma 檔案裡的元件、樣式與變數,把 design token 自動套用進生成的程式碼,對齊品牌與無障礙標準,而不是各自憑空生成。Figma 在說明裡打了個很到位的比方,說叫 AI 代理在沒有設計系統脈絡的情況下寫程式碼,就像叫一個新工程師還沒 onboarding 就開始出貨。這兩個例子指向同一件事。AI 設計系統的前沿,已經從「怎麼把 prompt 寫得更好」轉向「怎麼讓 AI 直接讀到那份規則檔」。

步驟四:分批餵、別一次把整套系統塞給 AI

規則檔就位後,怎麼餵也有講究,這裡最常見的失敗方式,就是把一整套多品牌 token 庫、加上一長串對話紀錄,一次全丟給 AI。前面談過的 context rot 就是這樣發生的,資訊塞太多、太雜,關鍵規則反而被稀釋,模型抓到的是最省力的通用值。

正確做法是依任務只餵相關的 token 子集。如果這次只是要做一張社群貼文圖,那就只給色彩與字體 token,陰影、動效、表單這些用不到的規則沒必要一起塞進去。而且生成時盡量小範圍、分段來,一次生成一個區塊、一顆元件,而不是一口氣叫 AI 生成整個頁面。範圍愈聚焦,模型能守住的規則就愈多;範圍一大,它又會回頭去抓通用值。少即是準,這一步跟直覺相反,卻是實務上差別最大的地方。

步驟五:生成完一定要驗證,AI 有沒有真的照著 token 用

最後這一步最常被跳過,卻也最重要。生成完,一定要回頭驗證 AI 有沒有照著 token 用。這裡有個要認清的現實。就算 AI 讀了 token,它在生成時還是可能「偷懶」,硬編一個相近但不對的色碼,或是抓了一個沒被定義的間距值。讀了規則不等於守了規則。

驗證分兩種輸出來看。程式碼輸出相對好查,直接比對它用的是正確的 token 名稱(color.action.primary),還是寫死了一個裸數值(#2563EB)。如果看到寫死的值,就代表這裡沒守住 token,要抓回來改。視覺輸出(例如生成的圖或畫面)就沒辦法純靠比對名稱了,得靠人工、或是另一個檢視步驟,去對照畫面是否符合品牌規則。前面提到 Stitch 讓 AI 對照 WCAG 驗證顏色對比,就是把「事後驗證」這件事往流程裡再往前收的一種做法。把驗證變成固定習慣,而不是有空才做,這套 token 系統才真的兜得起來,不然前面四步做得再漂亮,最後沒人檢查,AI 一偷懶就前功盡棄。

導入 Design Token 前,團隊該避開的常見錯誤

走完五步驟,最後把幾個最容易讓「做了 token 系統,AI 卻還是亂生成」的地雷整理出來,當作導入前的自我檢核。這些錯誤有個共通點,它們不是技術做不到,而是治理上的疏忽,偏偏 AI 對這類疏忽特別敏感。

第一個地雷是命名只寫顏色、不寫用途。如果你的 token 全叫 bluedarkBluelightGray,那 AI 讀到的只是一堆顏色,卻完全沒有判斷依據,它不知道 blue 該用在按鈕還是背景。命名要落在語意層,用途寫進名字裡(color.action.primary),AI 才有規則可循。這是本篇一路強調的核心,也是最多人做錯的一步。

第二個地雷是設計端與程式碼端的 token 各自維護、兩邊對不起來。設計工具裡有一套 token,工程程式碼裡又手動維護另一套,時間一久兩邊必然漂移,設計改了顏色,程式碼那邊沒同步,AI 讀到的到底是哪一套就成了謎。這也正是 DTCG 想解決的問題,用一份 vendor-neutral 的共同格式當單一真相來源,讓設計與工程讀的是同一份 token,而不是各自維護、各自漂移。

第三個地雷是一次把所有樣式都做成獨立 token,系統膨脹到沒人維護得動。前面談元件層時提過這點,太早、太細地把每個元件、每個數值都抽成 token,最後會養出一個龐大、重複、沒版本控制的怪物,維護成本高到大家乾脆繞過它。DTCG 穩定版規範很強調版本化與多品牌主題管理,正是因為一套沒有版本控制、無限膨脹的 token 系統,反而違背了規範一開始想解決的問題。少而準,永遠勝過多而亂。

design token 已經從「設計師關起門來的內部整理習慣」,變成現階段 AI 能不能認得你品牌的基礎設施。DTCG 在 2025 年底把它推上第一個正式穩定版、Google 把 DESIGN.md 開源成人人可用的規格,這兩件事指向同一個訊號。讓 AI 讀懂品牌這件事,已經有了公認的做法,不再是各家自己摸索。所以接下來該做的,其實不是等工具更成熟、等 AI 更聰明,而是先動手把品牌的顏色、字體、間距,整理成一份語意清楚、用途寫明的規則。工具再前沿,也得先有一份讀得懂的規範可讀。把那份規範備好,AI 才有機會真的替你守住品牌。

常見問答

本區問答由 AI 依文章內容自動整理,僅供快速參考,正式內容仍以全文為準。

design token 跟一般的「變數」有什麼差別?

變數只記錄一個數值,design token 則存放帶有語意的設計決策,數值只是它的內容之一。變數回答「這是多少」,token 回答「這是什麼、拿來做什麼」,這層用途資訊就是 AI 判斷品牌規則的依據。

design token 系統最常被忽略的是哪兩類?

陰影與圖示風格是最容易被忽略的兩類 design token。陰影決定介面的層次與立體感,沒定好,元件會顯得浮動、不一致。圖示風格則涉及線條粗細與填色方式,兩者一旦漏做,畫面就容易看起來不像出自同一個品牌。

什麼是 context rot(脈絡腐化)?

context rot(脈絡腐化)指的是把整套 token 庫和一長串對話紀錄一次全部塞進 prompt,關鍵規則反而被淹沒。AI 抓到的往往是離它最近、最省力的通用值,而不是你想要的那條限制。

為什麼 AI 不該直接讀 global token?

因為 global token 只是沒有用途說明的原始數值,AI 若直接讀取,會把色碼等原始值直接寫死在輸出裡。日後品牌一旦改色,這些寫死的值就對不上,AI 也無法判斷該用在按鈕還是背景。

為什麼 design token 的命名不能只寫顏色?

因為顏色本身沒有用途資訊,如果 token 全部叫 blue、darkBlue 這類顏色名稱,AI 只知道顏色是什麼,卻不知道該用在按鈕還是背景。把用途寫進名字(例如 color.action.primary),AI 才有規則可循。