先架構(gòu):Coding Agent 驅(qū)動 AI UI 生成工作流實戰(zhàn))
1. 為什么本地優(yōu)先架構(gòu)才是 AI UI 生成的正確打開方式先說結(jié)論Open Design 是一個本地優(yōu)先、可接入現(xiàn)有 Coding Agent、基于 Skill 與 Design System 驅(qū)動的開源設(shè)計工作流。它能做什么把「幫我做個好看的頁面」這種隨機 Prompt變成有任務(wù)邊界、有視覺約束、有檢查清單的結(jié)構(gòu)化工程流程。適合誰適合那些已經(jīng)在用 Claude Code、Codex CLI、Cursor Agent 這類編碼工具又希望 UI 產(chǎn)物能進 Git、能審查、能復(fù)用的開發(fā)者。我見過太多團隊在 AI UI 生成上踩同一個坑模型明明會寫 CSS生成出來的東西卻總是「AI 味」很重——滿屏紫色漸變、隨機 Emoji 圖標、圓角卡片堆疊、編造的 KPI 數(shù)字。問題不在模型能力而在工作流缺失。你給模型一句「做個 Dashboard」它只能靠猜你給它一個 dashboard Skill 加一份 design.md它才知道邊界在哪。傳統(tǒng)云端 AI 設(shè)計工具有三個硬傷。第一強綁定云端生態(tài)設(shè)計能力鎖死在某個平臺里沒法接進你現(xiàn)有的開發(fā)環(huán)境。第二不可本地化運行團隊私有代碼庫和內(nèi)部設(shè)計規(guī)范根本沒法安全喂進去。第三輸出風(fēng)格不穩(wěn)定同一個需求跑三次視覺體系、組件層級、交互重點可能完全不同你沒法做版本對比。Open Design 的思路不是重新訓(xùn)練一個設(shè)計模型而是構(gòu)建一個 Design Shell。它在本地啟動守護進程檢測你機器 PATH 里可用的 Coding Agent把這些 Agent 當作設(shè)計執(zhí)行引擎。整個鏈路是用戶需求 → Open Design 本地應(yīng)用 → 選擇 Skill / Design System → 調(diào)用本地 Coding Agent → 生成 HTML / React / Deck / Markdown 產(chǎn)物 → 本地預(yù)覽與編輯。這個架構(gòu)的價值在于三點。產(chǎn)物可以進 Git 版本管理每次生成都是一個可 diff 的 commit團隊可以維護自己的 Skill 和 design.md把審美沉淀成文本規(guī)則輸出文件可審查、可測試、可重構(gòu)而不是停留在聊天窗口里的一坨文本。項目本身采用 Apache 2.0 License 開源實際成本取決于底層 Agent 或模型消耗。Skill 解決的是任務(wù)邊界問題。Open Design 內(nèi)置了 Web Prototype、SaaS Landing Page、Dashboard、Pricing Page、Docs Page、Mobile App、Magazine-style Deck、PM Spec、Runbook、Finance Report、Kanban Board 等可組合 Skill。選 dashboard 時模型被約束為數(shù)據(jù)密集型管理后臺風(fēng)格選 magazine_ppt 時偏向雜志式版面與視覺敘事。每個 Skill 提供任務(wù)邊界、組件結(jié)構(gòu)、視覺重點、輸出格式和檢查清單。Design System 解決的是穩(wěn)定性問題。內(nèi)置 70 份 design.md借鑒了 Linear、Stripe、Airbnb、Notion、Apple、Cursor、Supabase、Raycast、Sentry、MongoDB 等產(chǎn)品的視覺語言。它把抽象審美轉(zhuǎn)成文本化規(guī)則比如「使用 12 柵格布局」「避免過度圓角」「KPI 卡片必須包含指標來源和更新時間」。模型不再憑直覺生成而是在穩(wěn)定視覺系統(tǒng)里完成任務(wù)。2. TaoToken 統(tǒng)一 Key/API 通道的前置準備在本地跑通 Open Design 工作流繞不開一個現(xiàn)實問題底層 Coding Agent 要調(diào)模型而多模型切換、Key 管理、額度監(jiān)控這些事如果每個 Agent 單獨配一遍維護成本會迅速失控。我的做法是引入一個統(tǒng)一 API 層把模型調(diào)用收斂到一個入口。TaoToken 采用 OpenAI 兼容模式開發(fā)者只需要配置 Base URL、Key 和模型名稱三件套即可接入。它的技術(shù)價值在于聚合主流大模型統(tǒng)一接口降低多模型切換成本對需要同時評估代碼能力、設(shè)計推理能力、長上下文能力的場景比較友好。官網(wǎng)入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 端點是 https://taotoken.net/api 。為什么 Open Design 場景特別需要統(tǒng)一通道因為 UI 生成任務(wù)對模型能力的要求是分層的。規(guī)劃頁面結(jié)構(gòu)、理解 design.md 約束、生成 React 代碼這幾步對模型的長上下文和指令遵循能力要求不同。你可能想用強模型做結(jié)構(gòu)規(guī)劃用性價比模型做批量組件生成。如果每個 Agent 都直連不同廠商Key 散落在各處切換一次要改五六個配置文件。統(tǒng)一通道的另一個好處是額度與調(diào)用可觀測。本地跑 UI 生成流水線時一次完整任務(wù)可能觸發(fā)多輪 Agent 調(diào)用成本容易失控。通過統(tǒng)一入口你能在一個地方看到調(diào)用量而不是在 Claude Code、Codex CLI、Cursor 各自的賬單里拼湊。具體到配置你需要先拿到 Key。訪問 https://taotoken.net/api-keys 創(chuàng)建 API Key然后在控制臺 https://taotoken.net/console 確認額度狀態(tài)。模型對話調(diào)試入口在 https://taotoken.net/chat 接入文檔在 https://taotoken.net/doc 。如果你打算長期跑編碼和 Agent 任務(wù)Coding Plan 頁面 https://taotoken.net/coding-plan 有對應(yīng)的套餐說明。這里要強調(diào)一個原則TaoToken 是模型調(diào)用的統(tǒng)一通道不是替代你的編輯器或 Agent 工具。Open Design 負責(zé)設(shè)計工作流編排Coding Agent 負責(zé)執(zhí)行TaoToken 負責(zé)把模型調(diào)用收斂成一條可管理的鏈路。三者職責(zé)清晰不要混為一談。配置前先確認本地環(huán)境。你需要 Node.js 18、一個可用的 Coding AgentClaude Code、Codex CLI、Cursor Agent、Gemini CLI、OpenCode 任一以及一個能寫入的工作目錄。工作目錄的選擇很關(guān)鍵后面會講權(quán)限控制。先把這些前置條件備齊再進入下一節(jié)的配置環(huán)節(jié)。3. 可復(fù)制的 Coding Agent 與本地服務(wù)配置片段這一節(jié)給可直接復(fù)制的配置。核心是把 Coding Agent 的模型調(diào)用指向統(tǒng)一通道同時把 Open Design 的本地服務(wù)跑起來。先配 Coding Agent 側(cè)。以 Claude Code 為例它的配置走環(huán)境變量和 settings 文件。在項目根目錄創(chuàng)建.claude/settings.json{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的TaoToken密鑰, ANTHROPIC_MODEL: claude-opus-4-6 }, permissions: { allow: [ Read, Write, Bash(npm run *), Bash(npx *) ] } }三件套對應(yīng)關(guān)系要記牢Base URL 是https://taotoken.net/apiKey 是你在 API Keys 頁面創(chuàng)建的那串Model ID 按你實際要用的填。Claude Code 走 Anthropic 協(xié)議所以用ANTHROPIC_前綴的環(huán)境變量。如果你用 Codex CLI配置走~/.codex/auth.json和~/.codex/config.toml。先寫auth.json{ OPENAI_API_KEY: sk-你的TaoToken密鑰 }再寫config.tomlmodel gpt-5.4 model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api wire_api chatCodex 走 OpenAI 兼容協(xié)議wire_api填chat表示用 chat completions 接口。Model ID 換成你要用的即可。如果你用 Cline 或帶 MCP 的 Agent配置走 MCP server 定義。在 Cline 的 MCP 設(shè)置里加{ mcpServers: { taotoken-bridge: { command: npx, args: [-y, taotoken/mcp-bridge], env: { TAOTOKEN_BASE_URL: https://taotoken.net/api, TAOTOKEN_API_KEY: sk-你的TaoToken密鑰, TAOTOKEN_MODEL: claude-opus-4-6 } } } }同樣三件套Base URL、Key、Model ID一個都不能少。Agent 側(cè)配好后跑 Open Design 本地服務(wù)。先克隆并安裝git clone https://github.com/open-design/open-design.git cd open-design npm install npm run build啟動本地守護進程npm run dev -- --port 4317 --workdir ./workspace--workdir指定 Agent 的工作目錄這一步是權(quán)限控制的關(guān)鍵。不要把--workdir指向你的家目錄或包含密鑰的目錄。建議單獨建一個workspace目錄只放 UI 生成相關(guān)的輸入輸出文件。啟動后 Open Design 會掃描 PATH 里的 Coding Agent。你可以在終端看到類似輸出[open-design] scanning agents... [open-design] found: claude-code (v1.x) [open-design] found: codex-cli (v0.x) [open-design] local server listening on http://localhost:4317如果某個 Agent 沒被檢測到檢查它的可執(zhí)行文件是否在 PATH 里用which claude或which codex確認。接著配置 Skill 和 Design System 的加載路徑。在workspace下建兩個目錄mkdir -p workspace/skills workspace/design-systems把你常用的 design.md 放進去。比如從內(nèi)置設(shè)計系統(tǒng)里復(fù)制一份 dashboard 風(fēng)格cp -r node_modules/open-design/design-systems/linear-dashboard workspace/design-systems/Skill 文件是 Markdown 格式一個 dashboard Skill 長這樣# Dashboard Skill ## 目標 生成企業(yè)級數(shù)據(jù)分析 Dashboard。 ## 輸出要求 1. 使用 React Tailwind CSS。 2. 包含側(cè)邊導(dǎo)航、頂部狀態(tài)欄、KPI 區(qū)域、趨勢圖占位、數(shù)據(jù)表格、任務(wù)列表。 3. 禁止紫色漸變、隨機 Emoji、編造夸張指標。 4. 組件需具備清晰信息層級。 5. 單文件 React 組件默認導(dǎo)出 App。 ## 檢查清單 - [ ] 信息層級是否清晰 - [ ] 是否避免過度裝飾 - [ ] 代碼是否可直接運行把這些文件放好后Open Design 在生成時會讀取 Skill 和 Design System拼進發(fā)給 Agent 的 Prompt 里。Agent 再通過你配好的統(tǒng)一通道調(diào)模型。整條鏈路就通了。4. 從需求描述到 UI 產(chǎn)物的完整驗證請求配置就緒后跑一次端到端驗證。目標是確認「需求 → Skill Design System → Agent → 模型 → UI 產(chǎn)物」這條鏈路真的能產(chǎn)出可運行代碼。先確認本地服務(wù)在跑curl http://localhost:4317/health返回{status:ok,agents:[claude-code,codex-cli]}說明服務(wù)正常且檢測到了兩個 Agent。然后準備需求文件。在workspace下建requirement.md為一個 AI Agent 運行監(jiān)控平臺生成 Dashboard。 需要展示 - Agent 運行次數(shù) - 平均響應(yīng)延遲 - 工具調(diào)用成功率 - 最近失敗任務(wù) - 模型調(diào)用成本趨勢 - 團隊成員任務(wù)分布發(fā)起生成請求。Open Design 提供 HTTP 接口用 curl 觸發(fā)curl -X POST http://localhost:4317/generate \ -H Content-Type: application/json \ -d { skill: dashboard, designSystem: linear-dashboard, requirementFile: ./workspace/requirement.md, agent: claude-code, output: ./workspace/App.jsx }服務(wù)會返回一個任務(wù) ID然后你可以輪詢狀態(tài)curl http://localhost:4317/tasks/task-id生成過程中Open Design 會把 Skill、Design System、需求拼成完整 Prompt交給 Claude Code 執(zhí)行。Claude Code 通過你配的ANTHROPIC_BASE_URL把請求發(fā)到統(tǒng)一通道模型返回 React 代碼Agent 寫入workspace/App.jsx。任務(wù)完成后檢查產(chǎn)物ls -la workspace/App.jsx head -50 workspace/App.jsx你應(yīng)該能看到一個完整的 React 組件包含側(cè)邊導(dǎo)航、KPI 卡片、表格等結(jié)構(gòu)。如果產(chǎn)物里出現(xiàn)了紫色漸變或 Emoji 圖標說明 Design System 沒被正確加載回去檢查design-systems目錄路徑。把產(chǎn)物放進 Vite 項目跑起來npm create vitelatest ai-dashboard -- --template react cd ai-dashboard npm install npm install tailwindcss tailwindcss/vite把workspace/App.jsx復(fù)制到src/App.jsx配置 Tailwind然后npm run dev瀏覽器打開http://localhost:5173你應(yīng)該能看到一個信息密度合理、風(fēng)格克制的 Dashboard。這就是一次完整的驗證動作從需求描述到可預(yù)覽的 UI 產(chǎn)物。驗證成功的標志有三個。第一產(chǎn)物代碼結(jié)構(gòu)完整能直接運行不報錯。第二視覺風(fēng)格符合 Design System 約束沒有 AI 味套路。第三產(chǎn)物文件在 Git 里可 diff你能看到每次生成的差異。如果這一步跑通了你可以把requirement.md換成真實業(yè)務(wù)需求把 Skill 換成團隊自定義的把 Design System 換成內(nèi)部規(guī)范。整條流水線就具備了可復(fù)現(xiàn)性。5. 本篇常見錯誤排查401、local proxy failed 與 reading choices跑這條鏈路時報錯集中在幾個地方。這一節(jié)按真實報錯逐個拆。401 Unauthorized。這是最常見的。原因通常是 Key 沒配對或沒生效。檢查三處.claude/settings.json里的ANTHROPIC_API_KEY是否是完整的sk-開頭字符串環(huán)境變量是否被 shell 覆蓋用echo $ANTHROPIC_API_KEY確認Key 是否在控制臺被禁用或額度耗盡。如果用的是 Codex檢查~/.codex/auth.json里的OPENAI_API_KEY字段名是否正確Codex 對字段名敏感。local proxy failed。這個報錯說明 Agent 嘗試連本地代理但失敗了。Open Design 本身不啟代理它直連 Agent。如果你看到這個錯檢查是不是在 Agent 配置里誤填了http://localhost:xxxx作為 Base URL。Base URL 應(yīng)該是https://taotoken.net/api不是本地地址。另一個可能是 Open Design 的--port和 Agent 配置里的端口沖突換個端口重試。reading choices 報錯。典型信息是Cannot read properties of undefined (reading choices)。這說明模型返回體結(jié)構(gòu)不符合預(yù)期通常是 Base URL 或協(xié)議類型配錯了。Claude Code 走 Anthropic 協(xié)議Base URL 用https://taotoken.net/apiCodex 走 OpenAI 兼容協(xié)議wire_api填chat。如果協(xié)議和端點不匹配返回體里就沒有choices字段。檢查你的 Agent 用的是哪套協(xié)議對應(yīng)填對。OAuth 相關(guān)報錯。如果你之前用 Claude Code 登錄過官方賬號本地可能殘留 OAuth token它會覆蓋你配的 API Key。清理方法刪除~/.claude/下的憑據(jù)緩存或者顯式設(shè)置ANTHROPIC_API_KEY環(huán)境變量優(yōu)先級高于 OAuth。Codex 同理檢查~/.codex/下是否有舊的登錄態(tài)。Agent 未被檢測到。Open Design 啟動時掃描 PATH如果which claude沒輸出說明 Agent 沒裝或不在 PATH。用npm install -g anthropic-ai/claude-code重裝或把可執(zhí)行文件路徑加進 PATH。產(chǎn)物為空或只有注釋。這通常是 Prompt 拼裝出了問題。檢查 Skill 文件是否是合法 MarkdownDesign System 目錄名是否和請求里的designSystem字段一致。Open Design 找不到對應(yīng)文件時會靜默跳過導(dǎo)致 Prompt 里缺少約束模型輸出質(zhì)量下降。生成超時。UI 生成任務(wù) Prompt 較長如果模型響應(yīng)慢會超時。檢查統(tǒng)一通道的額度狀態(tài)或在請求里加大timeout參數(shù)。另外確認--workdir目錄有寫權(quán)限Agent 寫不進文件也會表現(xiàn)為超時。排查順序建議先curl http://localhost:4317/health確認服務(wù)活著再單獨測 Agent 能否調(diào)通模型最后才查 Open Design 的 Prompt 拼裝。分層定位比一上來就翻日志快得多。6. 把統(tǒng)一通道接進你的本地 UI 生成流水線跑通一次驗證只是起點。真正有價值的是把這條鏈路固化成團隊可復(fù)用的流水線。核心動作是把模型調(diào)用統(tǒng)一到一條通道上讓 Open Design、Coding Agent、模型三者解耦。具體做法所有 Agent 的 Base URL 都指向https://taotoken.net/apiKey 統(tǒng)一從 API Keys 頁面管理Model ID 按任務(wù)類型分配。結(jié)構(gòu)規(guī)劃用長上下文強模型批量組件生成用性價比模型切換只改一個字段不動 Agent 配置。接入文檔在 https://taotoken.net/doc 里面有各協(xié)議的端點說明和參數(shù)對照。模型對話調(diào)試入口 https://taotoken.net/chat 可以快速驗證某個 Model ID 是否可用不用每次都跑完整流水線。長期跑編碼和 Agent 任務(wù)的話Coding Plan 頁面 https://taotoken.net/coding-plan 有套餐說明控制臺 https://taotoken.net/console 看額度。一個實用技巧把workspace目錄納入 Git但把design-systems和skills做成 submodule 或獨立倉庫。這樣團隊共享設(shè)計規(guī)范但每個項目的產(chǎn)物獨立版本管理。每次生成都是一次 commitdiff 出來就是設(shè)計演進史。最后提醒權(quán)限控制。Open Design 給 Agent 分配工作目錄Agent 有讀寫能力。--workdir只指向workspace不要指向包含密鑰、生產(chǎn)配置、客戶數(shù)據(jù)的目錄。這是本地優(yōu)先架構(gòu)的安全底線別圖省事跳過。