作者: kerwin77106

  • 本地 AI 代理寫程式,也要有 AI 幫你審 PR

    本地 AI 代理寫程式,也要有 AI 幫你審 PR

    📌 本文重點

    • AI 寫程式一定要搭配 AI 審查流程
    • adamsreview 提供多代理、分階段 PR 審查
    • React Doctor 專治 AI 產出的 React 小雷
    • 組合成「AI 寫 + AI 審 + 人類決策」完整 workflow

    當你開始大量用 AI 寫程式時,真正的風險不在「寫不出來」,而在「錯誤、壞味道、性能坑」靜靜被合進主幹,所以現在比起寫程式,更需要好的 AI 審查與補救工具。

    下面用兩個最近爆紅的開源工具 adamsreviewReact Doctor,帶你組一條「AI 寫程式 + AI 審 PR/修 bug」的實戰流程。


    核心功能:兩個工具,一條龍

    工具總覽

    名稱 核心功能 免費方案 適合誰
    adamsreview 多代理分工的 PR 審查,深度檢查邏輯與安全 完全開源 用 GitHub / GitLab、有 PR 流程的後端或全端團隊
    React Doctor 自動檢測、修正 AI 產出的 React 程式碼 完全開源 用 Claude/ChatGPT 產生 React/TSX 的前端團隊

    接下來分別講清楚:

    1. adamsreview 怎麼把 PR 審查拆給多個 AI 代理,使錯誤更難漏掉。
    2. React Doctor 怎麼專門處理「AI 產生 React code 一堆小雷」這件事。
    3. 最後用這兩個工具,組裝一條可直接抄走的開發 workflow。

    一、adamsreview:多代理分工的嚴謹 PR 審查

    核心功能

    adamsreview 是一個專為 Claude Code 設計的插件(slash commands),重點是:

    1. 多階段、多代理 PR 審查
    2. 不是一次跑完,而是分成好幾個階段:整體變更 → 文件/測試 → 安全/性能 → 修正建議。
    3. 每個階段可啟動平行子代理(sub-agents),例如一個看 API 變更,一個看錯誤處理。
    4. 審查狀態存在本地 JSON 裡,可以在不同命令之間保持上下文。

    5. 更少漏網 bug、更少誤報

    作者在 HN 上提到,它在實戰中比:

    • Claude 內建 /review/ultrareview
    • CodeRabbit、Greptile

    更常抓到真實 bug,同時少講廢話。

    實際上常被抓到的包括:

    • 新增邏輯沒有對錯誤狀況做邊界檢查
    • 漏更新單元測試或 fixture
    • API 變更與文件不一致
    • 可預期的性能問題(例如重複查詢、無 cache)

    💡 關鍵: 多階段、多代理的拆解方式,讓 adamsreview 比一般單次 /review 更容易抓到真正 bug,且減少冗長誤報。

    1. 直接嵌入現有 PR 工作流
    2. 提供像 /review/codex-review/fix 等命令,照著你原本用 Claude Code 的習慣延伸。
    3. 可搭配 Codex CLI 與 PR bot,在 PR 上直接留下 AI 審查留言。
    4. 狀態存在檔案裡,方便在 CI 或本地反覆跑不同階段的檢查。

    適合誰用

    幾個具體場景:

    • 有正式 PR 流程的後端/平台團隊

    例如:用本地 LLM 或 Claude 幫你生成 service / handler,透過 adamsreview 做一輪「AI 審 PR」,再交給人類最後確認。

    • 資深工程師很忙的小團隊

    初階工程師用 AI 寫功能,先交給 adamsreview 初審,減少 reviewer 花時間抓基礎錯誤。

    • 正在導入 AI coding,但怕品質失控的團隊

    讓「AI 生成程式碼」必須經過「AI 多代理審查」,有規則可循,而不是全憑 reviewer 心情。

    怎麼開始:最小安裝步驟

    原始專案:https://github.com/adamjgmiller/adamsreview

    以下是一個「最短路徑」,讓你在現有 GitHub PR 流程中接上 adamsreview:

    1. 準備環境

    2. 需要:

      • 有權使用 Claude Code 並可安裝插件(通常是付費方案)。
      • 本機有 git + Node.js(或作者指定的執行環境)。
    3. 安裝與設定

    在你的開發機或開發容器中:

    bash
    git clone https://github.com/adamjgmiller/adamsreview
    cd adamsreview
    # 若有提供安裝腳本
    npm install # 或 pnpm/yarn

    • 依照 repo README 設定環境變數(通常包含 Claude/Codex API key)。

    • 在 Claude Code 中載入插件

    • 打開 Claude Code(或支援的 IDE 插件)。

    • 依 README 說明匯入 slash commands。
    • 你會看到新增的命令,例如:/review/fix

    • 在 CI / PR 流程中接上(GitHub Actions 範例)

    .github/workflows/pr-review.yml 增加一個簡化版 workflow:

    “`yaml
    name: AI PR Review

    on:
    pull_request:
    types: [opened, synchronize]

    jobs:
    ai-review:
    runs-on: ubuntu-latest

       steps:
         - name: Checkout
           uses: actions/checkout@v4
    
         - name: Setup Node
           uses: actions/setup-node@v4
           with:
             node-version: '20'
    
         - name: Install adamsreview
           run: |
             git clone https://github.com/adamjgmiller/adamsreview
             cd adamsreview && npm install
    
         - name: Run adamsreview
           env:
             CLAUDE_API_KEY: ${{ secrets.CLAUDE_API_KEY }}
           run: |
             cd adamsreview
             # 依專案提供的 CLI 指令
             npm run review -- ../
    

    “`

    這樣每次有人開 PR,就會自動觸發 AI 審查並在 PR 留言(實際指令依 repo 說明調整)。


    二、React Doctor:專治 AI 產出的 React 小雷

    官方 repo:https://github.com/millionco/react-doctor

    它在 README 的第一句就是:「Your agent writes bad React. This catches it」。重點就是:AI 幫你產生的 React/TSX 常常「能跑,但不安心」。

    核心功能

    1. 針對 React/TSX 的靜態檢測與修復

    2. 專門用來掃描 React 專案(JSX/TSX),找到常見的壞味道與 bug。

    3. 例如:
      • useEffect 中漏依賴
      • 不必要的 re-render
      • 不穩定的 key
      • props 型別不一致
    4. 部分問題可以自動產生修正 patch,直接套用。

    5. 和 AI 代理配合運作

    它假設你已經在用 AI(Claude、ChatGPT、Cursor 等)生成元件或 hook

    • 先讓 AI 產出 code
    • commit 前跑 React Doctor:快速找出「AI style 錯誤」
    • 必要時讓 React Doctor 幫你修補。

    • TypeScript 友善

    • 專案本身用 TypeScript 寫,也善用現有型別資訊。

    • 如果你本來就用 TS + React,導入成本很低,直接把現有 tsconfig、型別檔當基礎。

    💡 關鍵: React Doctor 把「AI 寫得能跑」提升到「依 React/TS 最佳實務可維護」,特別適合大量由 AI 生成的 UI 程式碼。

    適合誰用

    幾個典型情境:

    • 用 Claude/ChatGPT 幫你生 UI 元件

    例如設計稿轉 React Component:

    • AI 負責「寫得出來」。
    • React Doctor 負責「寫得對、好維護」。

    • React 新手 + AI 輔助開發

    新手可能看不出 AI 產生的 code 有哪些壞習慣,React Doctor 可以當成「自動 code review 老師」。

    • 已有大型 TypeScript + React 專案

    部分模組開始用 AI 重構或新增功能,用 React Doctor 當 Safety Net,避免 AI 把舊 code 改壞。

    怎麼開始:在 TS 專案快速啟用

    假設你有一個現成的 React + TypeScript 專案:

    1. 安裝 React Doctor

    專案目錄下:

    bash
    npm install react-doctor --save-dev
    # 或
    pnpm add -D react-doctor

    1. 新增設定檔(若有需要)

    參考 repo 中的樣板(實際檔名跟範例以官方 README 為準):

    bash
    npx react-doctor init

    這通常會產生一個設定檔,例如 react-doctor.config.ts,你可以指定:

    • 要掃描的資料夾(例如 src
    • 要啟用的規則

    • package.json 加上腳本

    json
    {
    "scripts": {
    "doctor": "react-doctor check src",
    "doctor:fix": "react-doctor fix src"
    }
    }

    1. 在 Git hooks / CI 中啟用

    2. 透過 Huskylint-staged,在 pre-commitpre-push 跑:

      bash
      npx react-doctor check src

    3. 或在 GitHub Actions 加一個 job:

      yaml
      - name: React Doctor
      run: npm run doctor

    這樣每次有人把 AI 產的 React code 推上來,就會被 React Doctor 先掃過一次。


    三、組裝一條「AI coding + AI code review/repair」工作流

    最後用文字幫你拼成一個可以直接採用的流程,從「AI 寫 code」到「AI 審查 + 修正」:

    1. 開發階段:AI 寫程式

    2. 使用本地 LLM、Claude Code 或 ChatGPT:

      • 讓 AI 產出後端 handlerservice、React 元件。
      • 人類工程師只負責寫 prompt + 調整架構。
    3. 前端部分:React Doctor 抓小雷

    4. 每次 AI 生成或修改 React/TSX 檔案:

      • 本地跑 npm run doctor 檢查。
      • 對於可自動修正的問題,跑 npm run doctor:fix
    5. 把這個步驟固定在:

      • pre-commit hook
      • 或 VS Code Task / npm script
    6. 提交 PR:adamsreview 做多階段 PR 審查

    7. 開 PR 後,GitHub Actions 觸發 adamsreview

      • 階段 1:總覽差異,找出風險區域。
      • 階段 2:針對測試、錯誤處理、安全性做專門檢查。
      • 階段 3:產生具體修正建議或 patch
    8. PR 上自動留下 AI comment,方便 reviewer 快速聚焦真正問題。

    9. 人類最後把關

    10. Reviewer 看:

      • React Doctor 的報告(前端)
      • adamsreview 的 PR 評論(後端/全端)
    11. 決定哪些建議要採用,哪些視情況忽略。
    12. 合併前至少確保:
      • 所有必跑的 React Doctor / adamsreview 任務都綠燈。

    💡 關鍵: 重點不是「全自動合併」,而是用 AI 把最耗時、最容易忽略的細節掃一遍,再由人類做最後決策。

    這條工作流的重點不是「全自動」,而是:

    • 把 AI 寫程式變成可控的流程,而不是隨意貼 paste code。
    • 把最耗時、最容易忽略的細節(React 小雷、邊界條件、安全性)交給專門的 AI 工具來抓。

    實作上,你可以先選一個小模組試行:

    • 前端導入 React Doctor。
    • 後端/全端導入 adamsreview。
    • 兩週後檢查:PR 審查時間、有 bug 的 PR 比例是否下降,再決定要不要擴大到整個 repo。

    用 AI 寫程式已經變成常態,下一步是在你的團隊裡,建立一套 「AI 寫 + AI 審 + 人類決策」的固定流程,讓速度與品質可以同時兼顧。

    🚀 你現在可以做的事

    • 打開 GitHub,分別把 adamsreviewReact Doctor repo 加到你的星標與閱讀清單
    • 在一個側專案或小模組上,先實驗接上 React Doctornpm run doctor / doctor:fix 腳本
    • 在現有 repo 新增一個簡單 GitHub Actions workflow,試跑一次 adamsreview 的 AI PR 審查流程
  • Google 要把 OS 變成 Agent 平台嗎?

    Google 要把 OS 變成 Agent 平台嗎?

    📌 本文重點

    • Google 企圖把 OS 重寫為 Agent 優先的平台
    • 平台競爭從「搶入口」轉向「搶工作流程」
    • 開發者需同時服務「人類」與「Agent」兩條產品線

    Google I/O 2026 的真正賭注,不在於 Gemini 4 有多強,而是要把作業系統重寫成一個為 Agent 服務的「新 API 平台」。如果這一步成功,應用程式的單位將從「App」變成「工作流程」,OS 的主戰場也會從桌面 UI 轉移到 Agent 流程調度。**

    這次的產品組合——Gemini 4、Aluminium OS、Android XR、AI 眼鏡,再加上與 Apple 的合作——本質上是 Google 在打同一場仗:把 Agent 拉到「系統層」而不是「App 層」來運作,並試圖重寫平台規則。


    一、Google 的真正企圖:把 Agent 變成「新一代 App」

    從開發者視角看,這場 I/O 有三個關鍵訊號:

    1. 模型:Gemini 4 的定位從「聊天模型」轉向「行動執行引擎」

    不管 Google 怎麼包裝 Gemini 4 的推理能力提升,最重要的不是 SOTA benchmark,而是:

    • 它被綁在 Aluminium OS 的系統層,
    • 被接到 Android XR 的跨裝置 runtime,
    • 被塞進 AI 眼鏡這種「長時間在場」的介面。

    這意味著:Google 不再把模型當雲端 API,而是當 OS 的核心 runtime

    1. OS:Aluminium OS 是「Agent-first OS」,不是 Chrome OS 2.0

    Aluminium OS 的關鍵不在 UI,而在 系統 API 結構

    • OS 內建 Agent 層:檔案、行程、通知、網路權限都可以被 Agent 調度;
    • 支援 離線/邊緣推理:在端上跑縮小版 Gemini 4,減少對雲端的依賴;
    • 更細緻的 權限與審計機制:讓 Agent 能在可監管的軌道內運作。

    這對開發者意味著:

    • 你不再只是寫前端 UI 或後端 API,而是寫「可被 Agent 調用的能力模組」;
    • 你的 App 可能沒有使用者介面,只有被 Agent 呼叫的 workflows
    • 「寫給人用」與「寫給 Agent 用」 會分成兩種產品線。

    • 跨端:Android XR 不是新系統,是新「執行邏輯」

    Android XR 被描述成「跨手機、機器人、車載、眼鏡」的統一平台。從 Agent 角度看,它在做的是:

    • 把不同終端的 感知能力(感測器、鏡頭、麥克風)行動能力(通知、撥號、支付、控制設備) 抽象成一組可調用的 API;
    • 讓同一個 Agent 可以跨裝置持續任務,而不是每一台裝置都跑一個孤立 chatbot

    💡 關鍵: Google 正在把 OS 從「人點按的介面」重構為「Agent 調用的能力平台」,讓模型變成系統級 runtime,而非單純雲端 API。

    結論是:Google 正在把 OS 從「人點按的介面」重構為「Agent 調用的能力平台」。 這也是為什麼這次 I/O 會被視為一次真正的「平台嘗試」,而不只是模型發表會。


    二、入口 vs. 工作流程:Google、Apple、OpenAI、Anthropic 的路徑分叉

    產業策略上,現在 AI 平台分成兩條線:搶入口 vs. 搶工作流程

    1. Google × Apple:誰掌控 iPhone 的預設 Agent?

    最敏感的一步,是 Google 與 Apple 的合作。若 Gemini 成為 Siri 背後的推理引擎,或至少成為 iOS 上的某種預設 AI 選項,這會帶來幾個後果:

    • 入口層主權切割

    • Apple 繼續掌控 UI、隱私策略、系統權限與「預設選擇」;

    • Google 則掌控背後的語言推理與部分 Agent 能力。

    這讓 iPhone 的 AI 體驗變成「Apple 皮 + Google 大腦」。

    • 預設選擇戰升級為「預設 Agent 戰」

    這已不是預設搜尋引擎的戰爭,而是預設 日常任務被誰的 Agent 接管

    • 你在 iPhone 上說「幫我安排明天行程」,是 Apple 的本地 Agent 處理?還是交給 Google 的雲端 Agent
    • Apple 會限制第三方 Agent 的系統權限,保持「入口控制權」,但這次不得不讓出部分「推理能力」給 Google。

    換句話說:Apple 在守入口,Google 在滲透工作流程——雙方是互相利用,也是在預設 AI 的控制權上互相牽制。

    2. OpenAI:用 DeployCo 搶「企業工作流程」

    對比之下,OpenAI 走的是另一條線:從 ChatGPT 入口做到 DeployCo 這種深度整合。根據 The Decoder 對 DeployCo 的分析:

    • OpenAI 借鏡 Palantir,把 AI 深度嵌入企業運營,
    • 透過顧問+實作,打造「實務工作流程壁壘」,
    • 重點不在 OS,而在「把模型變成企業習慣的工作方式」。

    再對照 OpenAI 官方在「How enterprises are scaling AI」強調的:

    • 信任機制、治理架構、工作流設計、質量監控——這些都是 Agent 真正落地的前提;
    • 企業端看的是 可控性與治理,而不是模型多聰明。

    OpenAI 的策略是:不搶裝置入口,而是搶企業的業務流程。入口可能在 Microsoft、在瀏覽器、在第三方 App,但最後的「AI 工作流內核」由它主導。

    3. Anthropic & AWS:把 Agent 變成「企業級服務層」

    Anthropic 則靠著 Claude 平台在 AWS 一般可用,把自己鎖定在 企業雲端層

    • 透過 Claude Managed Agents,提供多 Agent、代碼執行、網頁搜尋、Files API 等完整能力;
    • Amazon Bedrock 並行,滿足不同地區、不同治理要求的企業;
    • 搭配 AWS 的認證、計費與 SLA,變成企業 IT 生態中的「安全 Agent 層」。

    AWS 自己也沒有閒著:Reddit 上討論熱烈的 Amazon Bedrock AgentCore Payments,直接給 Agent 一個可控的錢包,透過 x402 協定讓 Agent 能自主支付 API、資料、甚至其他 Agent 的服務費。這把 Agent 正式推入 「自我消費」的商業模式

    總結這三家:

    • Google:從 OS 下手,搶「消費者端日常工作流程」;
    • Apple:死守入口與預設控制權,把 AI 當系統功能而非平台;
    • OpenAI / Anthropic / AWS:深挖「企業工作流程」與治理,讓 Agent 成為企業內部的服務層。

    💡 關鍵: 平台之戰已從「誰的模型最強」轉變為「誰能掌控日常與企業工作流程中的預設 Agent 與服務層」。

    真正的分水嶺不再是「誰模型比較強」,而是:誰能把 Agent 變成穩定、可信、可治理的「新 OS / 新雲 API」


    三、Agentic OS 的技術門檻:開發者面對的是一個「後 RAG 時代」

    從技術與生態來看,Google 這次要做的 Agentic OS,其實踩在幾個未爆彈上。

    1. 離線推理 + 隱私:OS 級 Agent 的必要條件

    要讓 Agent 住在 OS 裡,而不是只在雲端跑聊天介面,至少要滿足:

    • 端上推理能力:部分任務不再需要雲,這對行動裝置與眼鏡尤為關鍵;
    • 隱私與合規:日常操作由 Agent 接管,意味著它會接觸:

    • 郵件、檔案、行事曆、訊息、甚至感測器資料;

    • 如果沒有系統級的權限沙箱與審計軌跡,企業與監管不可能買單。

    Google 想用 Aluminium OS + Android XR 把這些變成 default capability,這對開發者的意味是:

    • 你必須設計 可部分端上、部分雲端運行 的 Agent 工作流;
    • 必須考慮 資料分界線:哪一段邏輯可以交給端上模型,哪一段要上雲端;
    • 隱私與權限將從「App = 沙箱」變成「Agent = 受控但跨 App 的 orchestrator」。

    2. 後 RAG 時代:Agent 不是大型 chatbot,而是長鏈任務調度器

    Towards AI 上那篇 〈RAG Was Built for Chatbots. Agents Are Breaking It〉 已經說得很白:

    • 傳統 RAG 在 Agent 場景下,85% 的算力被消耗在檢索
    • 任務完成率僅 50–60%,瓶頸不在模型,而在架構;
    • Agent 的需求不是「找幾段文件放進 context」,而是:

    • 多步決策;

    • 多工具、多 API 協同;
    • 長時間狀態管理。

    💡 關鍵: 當 85% 算力被卡在檢索、任務完成率只有 50–60% 時,問題已不在模型,而在整個 RAG 架構與任務調度設計。

    如果 Google 要在 OS 裡跑 Agent,勢必要提供一套 取代 RAG 的新基礎架構

    • 面向 Agent 的記憶、工具調度、工作流引擎;
    • 不只是向量資料庫,而是 任務狀態存儲+決策快取
    • 對開發者來說,這會變成新的「Agent SDK / Runtime」,類似當年的 Android SDK——只不過這次是給 Agent 不是給人類使用者。

    若這一層沒有被做好,所謂 Agentic OS 就只是「在 OS 裡執行一個聊天程式」而已。


    四、這波變化對開發者與使用者的實際意義

    對開發者:把產品線拆成「給人用」與「給 Agent 用」

    接下來 2–3 年,開發者會遇到幾個具體決策:

    1. 設計「Agent-friendly API」

    2. 你的服務需要提供乾淨的 API、明確的 schema、錯誤碼,方便 Agent 理解與重試;

    3. 支援細緻的權限與計費,甚至要預留 Agent 自付費 的接口(對接像 AgentCore Payments 這種機制)。

    4. 把「工作流程」變成主要產品

    5. 不要只想「做一個 App」,而要想「做一個 Agent 能代你完成的 end-to-end workflow」;

    6. 多思考如何讓自己的服務嵌進 Gemini / Claude / OpenAI 的 Agent 流程,而不是只做獨立前端。

    7. 投入治理與可監管性設計

    8. 企業客戶會問的不是「你用了哪個模型」,而是:

      • 誰審核 prompt
      • 誰可以查看執行紀錄?
      • 失誤怎麼追責?
    9. 這正是 OpenAI、Anthropic、AWS 正積極提供的能力,也是 Google 目前相對弱的一環——這也剛好是開發者可以補位的地方。

    對一般使用者:你的日常操作即將被「默默接管」

    對一般使用者來說,這一波不是某個 App 升級,而是「你與裝置互動的基本單位」要變了

    • 你不再是點開十個 App;你是說「幫我處理這件事」,然後 Agent 幫你:

    • 看信、回信、訂票、排程、填表、付款;

    • 你甚至不一定知道哪個 App 在背後運作,因為它們變成被 Agent 調用的「服務模組」。

    這會帶來兩個風險與一個現實:

    1. 風險一:控制權更難感知

    2. 誰是預設 Agent?

    3. 它用哪個模型?
    4. 它把你的資料送到哪裡?
    5. 你可能只看到一個看似溫和的系統助理,背後卻是 Google / Apple / OpenAI 的治理博弈。

    6. 風險二:錯誤與偏差變成「系統層問題」

    7. 過去是一個 App 做錯;

    8. 未來是一個 Agent 在 OS 層做錯——影響範圍更廣,責任歸屬也更模糊。

    9. 現實:你很難完全不參與

    10. 工作場所會導入企業 Agent;

    11. 手機 OS 會推送系統級 AI 功能;
    12. 你能做的不是「不用」,而是:

      • 理解哪一些任務適合交給 Agent;
      • 認真看一次權限與預設設定;
      • 在關鍵決策上保持人工覆核。

    最後一句話:

    Google I/O 2026 是 Google 最接近重新定義「作業系統是什麼」的一次嘗試,但真正的勝負不在模型 SOTA,而在能否把 Agent 變成穩定、可信、可監管的「新 OS API」。

    對開發者而言,現在就該開始把產品拆成「給人用」與「給 Agent 用」兩條線,把自己的服務設計成可被 Agent 調度的能力;對使用者而言,則要學會把「預設 AI」視為系統級選項,像看待隱私設定一樣認真檢視——因為這次被改寫的,不只是你裝了哪個 App,而是你每天怎麼操作電腦與手機這件事本身。

    🚀 你現在可以做的事

    • 檢視現有服務的 API 設計,調整為適合 Agent 調用的「能力模組」
    • 追蹤 Gemini 4Android XRAluminium OSClaude Managed Agents 的開發文件與 SDK
    • 打開手機與工作環境中的預設 AI/Agent 設定,逐一檢查權限與預設選項
  • 低延遲語音 AI 架構實戰解析

    低延遲語音 AI 架構實戰解析

    📌 本文重點

    • 目標是在 200–400ms 內提供高品質雙向語音互動
    • 關鍵在通訊管線穩定與三模型 streaming 並行
    • 難點是 tail latency 與企業網路環境下的可用性
    • 先用 WebRTC/WS + 開源模型做 MVP 再優化

    要把GPT‑5 級推理塞進即時通話,最大痛點是:總延遲必須壓在 200–400ms 內,還要撐住大量並發。這篇用 OpenAI 近期的語音架構做藍本,從通訊層、模型層、系統層拆解,並給出一個用「常見雲 + WebRTC/WS + 開源語音模型」的最小可行方案(MVP),協助你評估:

    • 專案能不能做到「類 GPT-Realtime-2」的體驗
    • 目前架構要改哪些地方
    • 延遲預算怎麼抓、實測怎麼調

    重點說明:三層拆解你應該先想清楚什麼

    1. 通訊層:WebRTC / Streaming API 管線

    核心結論:語音幀越小、管線越穩定,LLM 才有操作空間。

    關鍵設計:

    • 雙通道設計
    • WebRTC:負責雙向音訊(RTP),盡量 P2P,失敗時回退 TURN/Relay
    • WebSocket / gRPC streaming:負責把編碼後音訊送進推理後端,收 TTS 音訊回來
    • 幀大小與編碼
    • 單向 20ms 幀是常見折衷(Opus 20ms/packet),RTT + 解碼後約 40–60ms
    • OpenAI 類似設計:低 bit‑rate Opus / 自家 codec + 小幀 + 伺服端聚合
    • 回退策略
    • NAT/防火牆下 P2P 常失敗,要有 ICE + TURN,並在 handshake 階段就降級到「WebRTC → TURN relay → 伺服器」模式

    💡 關鍵: 前端小幀 + 後端穩定回退(ICE + TURN)是把延遲壓到 200–400ms 的第一道門檻

    2. 模型層:語音↔文字↔推理鏈路的裁剪與並行

    核心結論:不要把語音→文字→LLM→TTS 串成一條同步鏈,要做 streaming 並行。

    典型 full pipeline:

    1. 語音 ASR:Speech → Text
    2. 文字 LLM:Text → Response tokens
    3. TTS:Text → Speech

    在低延遲場景下可以這樣優化:

    • 早啟動推理
    • ASRstreaming 模式,每 100–200ms 一個 partial transcript
    • 當句子結構「大致明朗」時(看到疑問詞或語尾),就把目前 transcript 丟給 LLM不用等語音結束
    • 分段生成 + streaming tokens
    • LLM 開啟 streaming,邊出 token 邊餵給 TTS
    • 控制 max_tokens / per-turn token budget,避免一次生成長篇大論造成尾端延遲
    • TTS 緩衝策略
    • 不要等完整句子才播,通常 150–300ms 音訊緩衝就可以開始播放
    • 但也不能太小,避免「一卡一卡」;常見做法是根據 網路 jitter + 解碼時間 動態調整

    OpenAI 最新的 GPT-Realtime-2 / -Translate / -Whisper 其實就是把這條鏈路收斂成幾個特化模型,讓內部共享語音表徵與推理能力,減少中間編碼/解碼開銷。你在自建時不一定能做到單一多模態模型,但至少要做到三模型 streaming 並行

    💡 關鍵: 把 ASR、LLM、TTS 並行 streaming,通常能把首次開口時間從秒級壓到 300ms 左右

    3. 系統與部署層:分布式推理與 tail latency 控制

    核心結論:平均延遲不難,難的是 99th percentile。

    設計要點:

    • 模型路由與排程
    • 輕量語音模型(ASR/TTS)可以 多實例 + 每 GPU 多 worker,吃滿 GPU
    • LLM 建議走 集中式推理叢集 + router,依 session 粘性綁定同一实例
    • GPU 利用率
    • 啟用 batching + token 并行,但要對語音場景限縮 batch size,避免增加 tail latency
    • 長回應可切段生成:先生成 1–2 秒的語音對應文字,再補充後半段
    • tail latency 監控
    • 重要指標:錄音開始 → 第一個回傳音訊 的 p50/p95/p99
    • 以 tracing 把 pipeline 切開:上傳 / ASR / LLM queue / LLM compute / TTS / 下行網路
    • 一旦 p99 失控,先檢查 排程佇列(排隊時間)而不是模型本身

    💡 關鍵: 真正破壞體驗的是 p99 延遲而不是平均值,監控時要把 queue time 單獨拉出來看


    實作範例:一個最小可行架構(MVP)

    架構概覽

    • 前端:Browser WebRTC(音訊 capture) + WebSocket(控制訊息)
    • 後端:
    • Signaling + API GatewayNode / Go 都可
    • gRPC streaming 到推理服務
    • 推理服務:Python + 開源 Whisper streaming + 開源 LLM + VITS/TTS(示意)

    前端:WebRTC + WebSocket 管線

    // 簡化版:建立 WebRTC 傳音訊 + WS 傳控制
    const pc = new RTCPeerConnection({
      iceServers: [{ urls: 'stun:stun.l.google.com:19302' }]
    });
    
    const ws = new WebSocket("wss://your-api.example.com/signaling");
    
    async function startCall() {
      const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
      stream.getAudioTracks().forEach(t => pc.addTrack(t, stream));
    
      pc.onicecandidate = e => {
        if (e.candidate) ws.send(JSON.stringify({ type: 'candidate', data: e.candidate }));
      };
    
      pc.ontrack = e => {
        // 收到 TTS 音訊(伺服端用 WebRTC 回推)
        const audio = document.getElementById('remote') as HTMLAudioElement;
        audio.srcObject = e.streams[0];
      };
    
      const offer = await pc.createOffer({ offerToReceiveAudio: true });
      await pc.setLocalDescription(offer);
    
      ws.onopen = () => {
        ws.send(JSON.stringify({ type: 'offer', data: offer }));
      };
    
      ws.onmessage = async (msg) => {
        const { type, data } = JSON.parse(msg.data);
        if (type === 'answer') {
          await pc.setRemoteDescription(data);
        }
      };
    }
    

    注意:

    • 幀大小主要在伺服端設定 Opus encoder(例:20ms),前端維持預設即可
    • 若 WebRTC 被防火牆擋住,signaling 伺服端要下指令讓前端切換為 WebSocket 直接上傳 PCM/Opus 模式

    後端:gRPC streaming 推理服務(示意)

    假設有一個 SpeechService 接收 Opus 幀,回傳已編碼好的音訊幀:

    // speech.proto
    service SpeechService {
      rpc Converse(stream AudioFrame) returns (stream AudioFrame) {}
    }
    
    message AudioFrame {
      bytes data = 1;      // Opus 或 raw PCM
      int64 timestamp = 2; // client capture ts
    }
    

    伺服端 Python(簡化,忽略實際音訊處理細節):

    class SpeechService(servicer_pb2_grpc.SpeechServiceServicer):
        async def Converse(self, request_iterator, context):
            # 1) 啟動 ASR/LLM/TTS 協程
            asr_queue = asyncio.Queue()
            llm_queue = asyncio.Queue()
            tts_queue = asyncio.Queue()
    
            async def asr_worker():
                async for frame in request_iterator:
                    # 解碼 Opus -> PCM -> ASR partial text
                    text_partial = asr_model.transcribe_stream(frame.data)
                    await llm_queue.put(text_partial)
    
            async def llm_worker():
                async for partial in llm_queue:
                    # 送入 LLM streaming,邊出 token 邊丟給 TTS
                    async for chunk in llm.stream(partial, max_tokens=64):
                        await tts_queue.put(chunk.text)
    
            async def tts_worker():
                async for txt in tts_queue:
                    # 生成短語音片段(200–300ms)
                    audio_bytes = tts_model.synthesize(txt)
                    yield speech_pb2.AudioFrame(
                        data=audio_bytes,
                        timestamp=int(time.time() * 1000)
                    )
    
            await asyncio.gather(asr_worker(), llm_worker(), tts_worker())
    

    實務上你會:

    • 更細緻的 queue 協調(包含會話 ID、句子邊界)
    • 控制 llm.stream 的 token 長度與 stop 條件,避免超長句
    • 在 TTS 部分先緩衝幾個 frame,再開始透過 WebRTC/WS 推到 client

    延遲 budget 規劃(示意)

    在穩定網路下可以先抓:

    • 上行錄音 + 傳輸:40–80ms20ms 幀 + RTT
    • ASR streaming:40–80ms(小模型 + GPU)
    • LLM 推理:80–150ms(取決於 token 數與模型大小)
    • TTS 生成 + 下行傳輸:60–120ms

    整體 p50 目標:220–350ms 第一個回應音訊開始播放

    優化策略:

    • 第一輪回應:用 較短回應模板(像「嗯、好的,我來看一下…」)快速回覆,爭取後面長推理時間
    • 持續對 ASR/LLM/TTS 做 A/B test:看哪一段是主要瓶頸,優先調那裡的 model size / batch / GPU 排程

    建議與注意事項:幾個常見坑

    1. NAT / 防火牆導致 WebRTC P2P 失敗

    • 坑點:只測局域網或開放網路,實際部署到企業網路立刻掛掉
    • 建議:
    • 一開始就部署 TURN server,並在前端暴露 ICE 連線狀態,回報到後端
    • 若連線失敗,API 層切到 純 WebSocket 音訊通道,雖然成本高但能保證可用性

    2. 語音切段過粗,造成「打斷感」

    • 坑點:以 1 秒幀或整句才送 ASR,LLM 只在句尾發言,對話像對講機
    • 建議:
    • 200ms 以內 的 audio chunk;ASR 使用 partial result callback
    • 根據語氣停頓(VAD)+ 標點預測,判斷何時啟動 LLM 回應

    3. TTS 緩衝策略不當,導致「一卡一卡」

    • 坑點
    • 緩衝太短 → 網路 jitter 就卡
    • 緩衝太長 → 首次開口延遲拉高
    • 建議:
    • 先以 250ms 緩衝 做 baseline,再按實測 jitter 動態調整在 200–400ms
    • 在 client 端維護一個小 buffer,利用 AudioContext / Web Audio API 自行排程播放,而不是一次性丟給 <audio>

    4. GPU 利用率 vs tail latency 的拉扯

    • 坑點:最大化 batch size 很爽,但 p99 延遲爆炸
    • 建議:
    • 把語音場景的推理服務與一般 chat/RAG 分開,語音路徑限制 max batch size
    • 使用 token-level scheduling(類似 OpenAI 做法),避免長上下文會話拖累短 query

    對專案的實際好處

    • 如果你現在線上只有「按鈕錄音 → 傳檔 → 回文字」,這套設計可以讓你在 1–2 週內做出可 demo 的雙向語音助理
    • 用 WebRTC/WS + 開源模型的 MVP,可以先驗證:
    • 使用者對 latency 敏感度
    • 需要多強的推理(是否真的要 GPT‑5 級推理)
    • 實際 GPU 成本與擴展上限
    • 後續要接上 OpenAI 類似 GPT-Realtime-2 的託管服務時,這套三層思路與接口方式幾乎可以直接沿用,只是把內部 ASR/LLM/TTS 換成單一多模態 API。

    🚀 你現在可以做的事

    • 在現有專案中畫出完整語音管線,標註各節點預估延遲(上傳、ASR、LLM、TTS、下行)
    • 用 WebRTC + WebSocket 加上任一開源 Whisper + TTS,實作一個能雙向講話的最小 demo
    • 部署基本的 tracing(例如在每一階段打 log),實測並記錄「錄音開始 → 第一個回應音訊」的 p50/p95/p99 數據
  • 本地跑 Microsoft 級語音 AI:vibevoice.cpp 入門

    本地跑 Microsoft 級語音 AI:vibevoice.cpp 入門

    📌 本文重點

    • 全本地 TTS + 長語音 ASR + 語者分離,無需雲端
    • 約 30 秒錄音即可 voice clone 自己聲線
    • C++ 實作、支援多後端,推論階段完全不用 Python
    • 很適合會議逐字稿、客服分析與離線語音助手

    一句話先說清楚:vibevoice.cpp 是一套「全本地」的 TTS + 長語音 ASR + 語者分離工具,不用 Python、不上雲,就能在自己機器裡跑出接近 Microsoft VibeVoice 等級的語音 AI

    原始專案與說明:https://github.com/mudler/vibevoice.cpp(C++ 移植自 Microsoft VibeVoice: https://github.com/microsoft/VibeVoice


    核心功能:你能馬上用來做什麼

    1. 24kHz 高品質 TTS + 30 秒聲音就能 voice clone

    vibevoice.cpp 內建 TTS 引擎,支援 24kHz 輸出,適合旁白、影片解說、產品語音回應等場景。最大的亮點是:

    • 約 30 秒的語音樣本.wav / .mp3 都可,建議乾淨無 BGM)
    • 用專案提供的轉換腳本,把你的聲音轉成 gguf voice 檔
    • 之後輸入文字,就能用你的聲線合成語音

    💡 關鍵: 約 30 秒乾淨錄音就能完成 voice clone,是進入個人化 TTS 的最低門檻之一

    實作步驟(voice clone 概念流程):

    1. 準備一段約 30 秒的個人口播,儘量在安靜環境錄製。
    2. 取得原始 VibeVoice 的 .pt 聲音權重(或官方樣例聲音)。
    3. 使用 vibevoice.cpp repo 裡的 scripts/convert_voice_to_gguf.py 將聲音轉成 .gguf 語音檔。
    4. 在 TTS 命令中指定這個 voice 檔,就能生成你的聲線。

    提示:沒有 Python 推論,但轉換 .pt.gguf 這一步需要一次性使用 Python。轉好後推論階段完全不用 Python。


    2. 長語音 ASR + 語者分離,一次處理十幾分鐘錄音

    vibevoice.cpp 背後是約 7 億參數的模型,實測可以處理長達十幾分鐘的錄音(作者在 Reddit 提到測到約 17 分鐘),並做到:

    • 自動逐字稿(ASR)
    • 自動切段(按時間區段)
    • 自動標註不同說話者(Diarization)

    💡 關鍵: 7 億參數模型可穩定處理約 17 分鐘長錄音,適合會議與客服等實際業務場景

    也就是:丟一整段會議錄音進去,輸出就會像這樣:

    [00:00.0 - 00:12.3] Speaker 1: 大家好,今天會議主要討論 Q3 產品排程…
    [00:12.3 - 00:25.7] Speaker 2: 我先更新一下研發這邊的進度…
    ...
    

    快速實作想法:

    • 會議錄音 → 丟給 vibevoice.cpp → 拿回文字 + 誰在說話 → 直接貼進 Notion、Confluence 或公司內網系統。
    • 客服錄音 → 一批檔案跑 ASR + 語者分離 → 拿到客服與客戶對話文字,後續再用本地 LLM 做情緒分析或關鍵字統計。

    3. 跨平台、本地推論、無 Python 推論依賴

    vibevoice.cpp 用 C++ + ggml 實作,支援多種硬體後端:

    • CPU(x86 / ARM)
    • CUDA(NVIDIA GPU)
    • Metal(Apple Silicon / macOS)
    • Vulkan(支援 Vulkan 的 GPU 平台)

    這幾件事對實際部署很關鍵:

    • 不需要在伺服器上裝一大堆 Python/conda,推論階段就是一個二進位 + gguf 模型檔。
    • 更容易嵌入既有系統:C ABI 讓你在 C/C++、Rust、Go、甚至 Node.js(透過 FFI)裡都能呼叫。
    • 適合沒有外網、或對資料保密要求高的內網環境。

    💡 關鍵: 推論只靠一個二進位加模型檔,無 Python 依賴,讓部署與嵌入式整合簡化許多


    適合誰用:4 個具體場景

    1. 公司會議錄音 → 自動逐字稿 + 誰講了什麼

    適合:產品經理、工程主管、專案管理。

    操作路線:

    1. 用任意錄音工具錄下整場會議(建議單軌錄音即可)。
    2. 丟給 vibevoice.cpp,輸出成文字 + 語者標註。
    3. 再加工:
    4. 手動整理重點;或
    5. 丟進本地 LLM(如 ollama 上的 Llama 3)做摘要。

    好處:不必把敏感會議內容丟上雲端,也不必自己搭一整套 ASR 服務。


    2. 內網客服錄音分析

    適合:客服主管、合規/法務、營運分析。

    做法:

    1. 將客服中心錄音批次輸出成檔案(常見為 WAV/MP3)。
    2. vibevoice.cpp 跑 ASR + 語者分離,取得客服與客戶逐字對話。
    3. 輸出文字再交給內網數據分析或 NLP 模組做:
    4. 關鍵字搜尋(是否有爭議用語、是否說明退款規則等)
    5. 投訴分析(常見問題、情緒偏負面段落)。

    3. 在自己產品裡內建語音輸入 / 語音輸出

    適合:SaaS 產品、內部工具、遊戲或交互式應用開發者。

    可行玩法:

    • 用 ASR 做語音輸入:
    • 使用者對麥克風說話 → 即時轉文字 → 傳給你原有的系統邏輯。
    • 用 TTS 做語音輸出:
    • 系統產生訊息 → 用 vibevoice.cpp 合成語音 → 播放給使用者聽。

    因為有 C ABI,你可以:

    • 在 C/C++ 專案直接連結
    • 在 Rust/Go 透過 FFI 呼叫
    • 在 Node.js 透過 node-ffi 或自寫 native addon 包一層

    4. 做一個完全離線的語音助手

    適合:喜歡 DIY 的工程師、Maker、隱私敏感場景。

    粗略架構:

    1. 麥克風輸入 → vibevoice.cpp ASR → 文字指令
    2. 文字指令 → 本地 LLM(例如 LocalAI / Ollama)→ 回覆文字
    3. 回覆文字 → vibevoice.cpp TTS(可用自建 voice clone)→ 喇叭播出

    整條鏈路都在本機或內網,沒有任何雲端依賴。


    怎麼開始:最短路徑從 0 到能跑

    官方 repo:https://github.com/mudler/vibevoice.cpp

    1. 下載二進位檔(最快上手)

    1. 打開 GitHub Releases:https://github.com/mudler/vibevoice.cpp/releases
    2. 依自己的平台下載對應壓縮檔,例如:
    3. vibevoice-darwin-arm64.zip(Apple Silicon)
    4. vibevoice-linux-x86_64.zip
    5. vibevoice-windows-x86_64.zip
    6. 解壓縮後,裡面會有:
    7. 主程式二進位,例如 vibevoice
    8. 範例模型 / 語音配置(依版本而定)

    在 Linux/macOS,給執行權限:

    chmod +x vibevoice
    

    2. 用 CMake 自行編譯(需要客製或特定後端時)

    環境需求:

    • CMake
    • C++17 編譯器(gcc / clang / MSVC
    • 選用:CUDA / Vulkan / Metal SDK

    基本編譯步驟(以 Linux/macOS 為例):

    git clone https://github.com/mudler/vibevoice.cpp.git
    cd vibevoice.cpp
    mkdir build && cd build
    cmake .. -DCMAKE_BUILD_TYPE=Release
    cmake --build . --config Release
    

    完成後,build/ 底下會出現可執行檔(名稱以實際 repo 為準)。


    3. 第一次跑 ASR:把一段錄音轉成逐字稿

    假設你已經有:

    • 主程式 vibevoice
    • 已下載好的 ASR 模型 model.gguf(官網會提供下載連結)
    • 一段錄音 meeting.wav

    執行(命令格式可能會隨版本略有不同,請以 --help 為主,這裡示範典型用法):

    ./vibevoice \
      --mode asr \
      --model model.gguf \
      --input meeting.wav \
      --output transcript.txt \
      --diarization
    

    跑完後,你會拿到一個 transcript.txt,裡面包含時間戳與說話者標記。


    4. 第一次跑 TTS:從文字合成語音

    準備:

    • TTS 模型 tts-model.gguf
    • 一個 voice 檔(可用官方 sample voice,例如 voice-en.gguf

    命令範例:

    ./vibevoice \
      --mode tts \
      --model tts-model.gguf \
      --voice voice-en.gguf \
      --text "你好,這是 vibevoice.cpp 的測試。" \
      --output out.wav
    

    成功後你會得到一個 out.wav,用任意播放器就能聽見合成結果。


    5. 準備 30 秒聲音做 voice clone(概念流程)

    1. 錄一段約 30 秒的清晰朗讀(內容隨意,重點是發音自然、環境安靜)。
    2. 取得對應的 voice 訓練權重,依官方 README 指示執行:

    bash
    python scripts/convert_voice_to_gguf.py \
    --input your_voice.pt \
    --output your_voice.gguf

    1. 之後在 TTS 命令中改成:

    bash
    --voice your_voice.gguf

    即可以你的聲音合成語音。


    6. 怎麼嵌到自己的專案:用 C ABI 呼叫

    vibevoice.cpp 提供 C 語言 ABI,因此只要能呼叫 C 函式的語言,都能整合。

    簡化示意(實際函式名稱請以官方 include/ 中的 header 為準):

    #include "vibevoice.h"
    
    int main() {
        vv_context *ctx = vv_init("model.gguf");
    
        vv_asr_params params = {0};
        params.diarization = 1;
    
        vv_result result = vv_run_asr(ctx, "meeting.wav", &params);
    
        // 在這裡處理 result.text / result.segments
    
        vv_free_result(&result);
        vv_free(ctx);
        return 0;
    }
    

    在其他語言(例如 Rust、Go)你可以:

    • 透過 extern "C" 聲明這些函式
    • 用 FFI 封裝成 idiomatic 的 API

    這樣你的應用程式就能直接呼叫 vibevoice.cpp,無需啟動額外的 HTTP 服務或 Python 進程。


    小結:什麼時候該試試 vibevoice.cpp?

    如果你符合以下任一條,很值得花一個下午跑起來:

    • 想在本地處理會議、客服錄音,不想把資料丟到雲端
    • 想做一個離線語音助手或內網語音介面
    • 需要在產品裡嵌入 TTS / ASR,但又不想綁特定雲服務
    • 想要一套 CPU/GPU 都能跑、無 Python 推論依賴的語音引擎

    從 Releases 下載二進位、跑一次 ASR 和 TTS,大概半小時內就能完成。之後你就有一顆可嵌入任何系統的本地「語音核心」。

    🚀 你現在可以做的事

    • 打開 GitHub Releases,下載適合自己平台的 vibevoice.cpp 二進位並跑一次 ASR 測試
    • 錄一段約 30 秒的個人聲音,照 README 用 convert_voice_to_gguf.py 做一次 voice clone
    • 在你現有的工具(例如內部專案或腳本)中,嘗試用命令列或 C ABI 把 vibevoice.cpp 串成一個簡單語音流程
  • 用 goose AI Agent 開一隻全能小幫手

    用 goose AI Agent 開一隻全能小幫手

    📌 本文重點

    • goose 是用 Rust 寫的開源 AI Agent 框架
    • 讓 LLM 真的能跑指令、改檔案、寫測試而不只聊天
    • 可接任意 LLM,並透過 workflow 自動化多步驟任務
    • 很適合 DevOps / 開發者做日常開發與部署自動化

    用一句話說清楚:goose 是一個用 Rust 寫的開源 AI Agent 框架,可以讓 LLM 不只聊天,而是真的幫你在電腦上安裝套件、跑指令、改程式碼、寫測試,變成一個可以自動執行任務的「全能小幫手」。

    GitHub 專案:https://github.com/aaif-goose/goose


    goose 和一般聊天機器人有什麼不同?

    一般 ChatGPT / Claude 類工具,多半停在「給你建議」:

    • 產生程式碼片段
    • 幫你想測試案例
    • 告訴你下一步可以怎麼做

    goose 的差別在於:它可以自己動手做。

    透過 goose,你可以讓模型:

    • 在你的環境裡 執行殼層指令(shell commands)
    • 直接修改專案檔案、重構程式碼
    • 跑測試、根據結果再修正
    • 用 plugin / tool 的形式接上你自己的 API 或腳本

    換句話說,它比較像一個「可編程的 AI 工具人」,而不是純聊天機器人。

    💡 關鍵: goose 不只回覆文字,而是能在你的實際環境中「讀檔案、下指令、改程式」,真正把建議變成動作。


    核心功能:你可以拿 goose 來做什麼?

    1. 調用殼層指令:讓 LLM 幫你按命令行上的按鈕

    goose 內建「可以執行 shell 指令」的能力。

    你可以叫 agent 做這些事:

    • 安裝套件:apt-get, brew, pip, cargo
    • 拉專案:git clone、切分支、pull 最新版
    • 跑工具:npm testcargo testpytestmake build

    你要做的行動:

    • 想一件你平常常打的一串指令(例如部署前要跑的 3–5 個步驟)
    • 把它寫成一句自然語言任務,交給 goose,觀察它如何自己拆解並下指令

    2. 程式碼編輯與測試:真的會改你專案的那種

    goose 支援對檔案系統操作,讓 LLM 直接:

    • 開啟 / 讀取專案中的檔案
    • 修改檔案內容(插入、刪除、重構)
    • 新增測試檔、更新 README

    常見用法:

    • 讓 agent 自動幫你 加 log / exception handling
    • 要它針對某個 module 補齊單元測試
    • 改 config、更新版本號、調整 CI 設定檔

    你要做的行動:

    • 選一個「可以放心被 AI 改壞」的小 side project
    • 用 goose 給它一個任務,例如:「在這個 Rust 專案裡,新增一個 health check endpoint,並幫我補上測試」

    3. 自訂工具擴充:把你自己的腳本、API 變成 agent 的能力

    goose 的設計重點是 「可擴充的工具」。你可以:

    • 把現有的 Python / Bash 腳本包裝成一個 tool
    • 把團隊內部 API(如 issue tracker、部署服務)接進來
    • 讓 agent 用「呼叫工具」的方式,連續完成更複雜的流程

    實際效果:

    • LLM 不用自己「想像」怎麼部署,而是呼叫你提供的 deploy_api
    • 你可以限制它只能用你認可的工具,控制風險

    你要做的行動:

    • 列出你工作中最常手動跑的 2–3 個腳本
    • 想像它們如果變成一個 deploy_service / create_release 的工具,agent 可以怎麼自動串起來

    4. 接任意 LLM:OpenAI、DeepSeek、本地模型都行

    goose 標榜 「with any LLM」,實際上就是可以在設定中自由切換 backend:

    • OpenAI(如 gpt-4.1
    • DeepSeek API(如 deepseek-coder
    • 透過 OpenAI-compatible API 的本地模型(Ollama、LM Studio…)

    這讓你可以:

    • 開發時用免費 / 便宜模型測試流程
    • 上線到正式環境時再換成更穩定的雲端模型

    你要做的行動:

    • 先挑一個你現有就有 API Key 的 LLM(例如 OpenAI 或 DeepSeek)
    • 決定:
    • 「實驗階段」用哪個模型
    • 「正式跑自動化」時要不要升級到較貴的模型

    💡 關鍵: 透過切換 GOOSE_MODEL 等設定,你可以在成本(本地 / 便宜模型)與效果(雲端高階模型)之間彈性取捨。


    適合誰用?三種典型場景

    1. DevOps/SRE:日常腳本自動化

    例如:

    • 部署前:拉最新程式碼 → 跑測試 → build → health check
    • 緊急修補:切 branch → 套 patch → 跑 smoke test → 發一版 hotfix

    用 goose 的做法:

    • 把這些步驟包成一個「任務腳本」(workflow)
    • 讓 agent 自己決定下一步要跑哪個指令、根據輸出結果調整

    2. 開發者:專案 boilerplate 生成與重構

    適用情境:

    • 開一個新服務:想要快速產生「專案骨架 + 基本路由 + CI 檔案」
    • 老專案:想系統性把某種寫法換成新的 pattern

    用 goose 可以這樣玩:

    • 指定專案資料夾給 agent
    • 給一個任務:「初始化一個 NestJS API 專案,幫我加上 Dockerfile 和 GitHub Actions CI」

    3. 團隊工程流程:CI 前自動檢查與修修補補

    在 CI 跑之前,先讓 goose 幫你:

    • 檢查程式格式、lint 問題
    • 嘗試自動修正簡單的錯誤
    • 對 PR 產生簡短變更說明

    做法:

    • 在 CI pipeline 裡加入「goose agent 步驟」
    • 給它權限在 CI runner 上修改檔案並 push(或開新 PR)

    💡 關鍵: 把 goose 放進 CI / pre-commit,可以在錯誤進到主線分支之前,自動完成一輪整理與簡單修補。


    怎麼開始:最快速的上手路徑

    1. 用 Docker 跑起官方範例(最快測試)

    前提:

    • 已安裝 Docker
    • 手邊有一個 LLM API Key(例:OPENAI_API_KEY

    步驟:

    # 1. 拉專案
    git clone https://github.com/aaif-goose/goose.git
    cd goose
    
    # 2. 建一個 .env,放你的模型設定(簡化示意)
    cat << 'EOF' > .env
    OPENAI_API_KEY=your_key_here
    GOOSE_MODEL=openai/gpt-4.1
    EOF
    
    # 3. 用 docker compose 跑起來(實際以 repo 裡的 compose 指令為準)
    docker compose up --build
    

    跑起來後,通常會有:

    • 一個 CLI / HTTP 介面
    • 你可以丟:
    • 「在這個容器裡安裝 curl 並測試對 google.com 發送請求」

    行動建議:先在容器內做「無害」的事情,例如安裝一個套件、建立一個測試檔案,確認 goose 真的有在動你環境。


    2. 本機安裝(Rust 使用者)

    前提:

    • Rust toolchain(rustup

    步驟:

    # 1. 安裝依賴
    cargo install --path .  # 實際請以 README 為準
    
    # 2. 設定環境變數
    export OPENAI_API_KEY=your_key_here
    export GOOSE_MODEL=openai/gpt-4.1
    
    # 3. 跑 CLI
    goose run
    

    你可以在終端機裡對 agent 下指令,例如:

    • 「列出目前資料夾的檔案,幫我找出所有含有 TODO 的檔案並列出行號」

    3. 接上常見模型(OpenAI / DeepSeek / 本地 LLM)

    以下是假設性的設定方向(實際請對照 goose README):

    OpenAI

    export OPENAI_API_KEY=your_key
    export GOOSE_MODEL=openai/gpt-4.1
    

    DeepSeek

    通常會提供 OpenAI 相容 API:

    export OPENAI_BASE_URL=https://api.deepseek.com/v1
    export OPENAI_API_KEY=your_deepseek_key
    export GOOSE_MODEL=deepseek-chat
    

    本地 LLM(以 Ollama 為例)

    啟動 Ollama 後:

    export OPENAI_BASE_URL=http://127.0.0.1:11434/v1
    export OPENAI_API_KEY=dummy
    export GOOSE_MODEL=ollama/llama3.1
    

    行動建議:先用最簡單、你現在就有的 API Key 接上,確認 goose 的流程跑得通,再考慮搬到本地模型節省成本。


    寫一個自己的「任務腳本」:讓 agent 連續完成幾個步驟

    goose 的強項在於可以定義「多步驟任務」。概念上,你會有一個 workflow 設定(格式依官方為準,這裡用 pseudo-code 示意):

    # workflows/dev_check.toml
    name = "dev_precommit_check"
    
    [[steps]]
    type = "shell"
    command = "git status"
    
    [[steps]]
    type = "agent"
    prompt = "閱讀 git status,決定要先格式化哪一些檔案,並執行對應指令。"
    
    [[steps]]
    type = "shell"
    command = "cargo test"
    
    [[steps]]
    type = "agent"
    prompt = "根據測試結果,如果有簡單錯誤可以直接修,並再次執行對應測試。"
    

    用法:

    goose run-workflow workflows/dev_check.toml
    

    這樣,你可以一行命令啟動一個「會看情況調整動作」的前置檢查流程。

    你要做的行動:

    • 先定義一個超簡單的 workflow:
    • Step1:ls 專案
    • Step2:請 agent 根據專案結構生成一段簡短說明,寫入 PROJECT_SUMMARY.md

    實戰:從零做一個小型自動化 workflow

    目標:在一個現有專案裡,做「提交前自動整理 + 簡單修補」流程。

    我們要達成:

    1. 檢查目前分支變更檔案
    2. 對變更檔案跑 formatter / linter
    3. 如果有明顯錯誤,由 agent 嘗試自動修改
    4. 重新跑測試

    Step 1:準備專案與權限

    1. 找一個你熟悉、可以接受被改動的專案資料夾
    2. 新開一個分支,如 feat/goose-auto-fix
    3. 確保 goose 有權限:
    4. 讀寫這個資料夾
    5. 執行必要的指令(例:npm testcargo test

    Step 2:定義 workflow(示意)

    依 goose 支援的格式建立一個 workflow 檔(假設是 YAML):

    name: precommit-helper
    steps:
      - type: shell
        command: git diff --name-only
      - type: agent
        prompt: |
          你看到的是目前分支有變更的檔案清單。
          目標:
          1. 對這些檔案執行合適的 formatter / linter 指令(依照檔案類型判斷)。
          2. 若 formatter/linter 回報可自動修復的問題,請修改檔案並重新執行檢查。
      - type: shell
        command: npm test  # 或你專案的測試指令
      - type: agent
        prompt: |
          根據測試輸出,
          - 若是小型邏輯/型別錯誤,嘗試修改相關檔案後再次執行測試。
          - 若錯誤較複雜,請產生簡短說明寫入 precommit_report.md。
    

    Step 3:實際執行與調整

    1. 在專案根目錄跑:

    bash
    goose run-workflow precommit-helper.yaml

    1. 觀察它的行為:
    2. 有沒有亂跑你不想要的指令?
    3. 修改的檔案是否合理?

    4. 根據結果調整:

    5. 限制能用的指令範圍(例如只允許 npm test, npm run lint
    6. 在 prompt 裡多加一些「安全護欄」,例如「不要刪除檔案」。

    完成後,你就有了一個:

    • 可以在提交前幫你「整理 + 修補 + 產生報告」的小型 AI 助理
    • 海豚式改進:遇到痛點就稍微改一下 workflow / 工具清單,越用越貼近你團隊習慣

    小結:下一步可以怎麼玩?

    如果你看到這裡,建議接下來這樣走:

    1. 先跑官方範例容器一次,確認 goose 在你機器上可以正常跑指令。
    2. 選一個專案資料夾,做一個超小 workflow:只做檔案摘要或自動補 README。
    3. 把你現有的一個腳本包成 tool,讓 agent 可以呼叫(例如部署或打包腳本)。
    4. 等你有信心後,再把它接進 CI / pre-commit 流程。

    完整專案與最新用法請看:https://github.com/aaif-goose/goose

    把 goose 想成一個「可編程的 ChatGPT + 指令列機器人」,先從最小、風險最低的自動化開始,你會很快找到適合自己工作流的用法。

    🚀 你現在可以做的事

    • 打開 <https://github.com/aaif-goose/goose>,用 Docker 照著 README 跑一次官方範例
    • 選一個 side project,讓 goose 幫你完成「新增一個 endpoint + 補上測試」的小任務
    • 把日常最常用的一個部署或檢查腳本包成 tool,寫一個只包含 2–3 個步驟的簡單 workflow
  • OpenAI 變身顧問公司,是升級還是掠奪?

    OpenAI 變身顧問公司,是升級還是掠奪?

    📌 本文重點

    • 模型公司正下沉吃下「部署層+顧問層」
    • 雲端、SI、傳統顧問的話語權被擠壓
    • 企業短期加速,長期恐被 AI 供應商鎖死
    • 技術人需保留多模型與技術主權

    OpenAI 拉來超過 40 億美元 成立 「The Deployment Company」,而 Anthropic 則與 Goldman Sachs、Blackstone、Hellman & Friedman 合資開企業 AI 公司,真正訊號不是「AI 很熱」,而是:光有 SOTA 模型賣不動,他們決定連「部署層+顧問層」一起吃下來。 對產品與技術領導者來說,這不是一個新工具的發布,而是一場產業結構改寫的開端。


    一、為什麼模型巨頭同時變身「顧問公司」?

    表面上,The Deployment Company 和 Anthropic 新創是「幫企業導入 AI」。但從資本結構與合作對象看,本質是:模型公司往下整合到最後一公里的變革工程

    • OpenAI:募資 >40 億美元,專門做企業部署,從銷售、方案設計到落地運維一條龍,直接瞄準大企業預算盤。
    • Anthropic:不是自己養一支龐大顧問隊,而是與 華爾街私募+系統整合商 成立新公司,先吃 中型企業 的 Claude 導入需求。
    • 同一時間,雲端三巨頭的 AI 帶動雲收入爆衝Google Cloud +63%、Azure +40%、AWS +28%,而頂尖模型公司對雲的承諾層級動輒百億甚至 Anthropic 對 Google Cloud 的 2000 億美元五年承諾,把整個故事鎖定在「算力+部署」雙重賭注。

    💡 關鍵: 從「>40 億募資」到「2000 億承諾」,顯示資本已從單買模型,轉向重押「算力+部署一體化」的變革工廠。

    這裡有三個關鍵認知轉向:

    1. 模型不再是產品,而是原料。
      企業買的不是「一個 API」,而是「能讓組織 KPI 動起來的變革專案」。模型只是原料,真正能開票的是顧問方法論+成功案例庫。

    2. 銷售 AI 的瓶頸,不在演算法,而在組織。
      很多企業 CTO 的真實痛點是:合規、流程重設、權限治理、舊系統整合、員工再訓練——這些全部是「部署層」問題,傳統模型供應商不碰,現在 OpenAI/Anthropic 決定親自下場。

    3. 資本不再只買參數量,而是買「變革工廠」。
      Blackstone、Goldman Sachs 這些玩家進來,不是因為愛 AI,而是看到:如果能把「導入 AI」變成一套可複製、可擴展的工廠流程,就可以在投資組合公司裡批量複製生產力提升與成本削減,等於是新的金融槓桿工具。

    結論:從 OpenAI 與 Anthropic 同步動作可以確定,下一輪競爭不在模型排行榜,而在「誰掌握企業 AI 的部署層與顧問話語權」。


    二、部署層吃進來,誰被擠到邊緣?

    當模型公司變成「顧問+SI」,原本的價值鏈會發生三件殘酷的事:

    1. 雲服務商:從「平台」變成「賣算力」的上游供應商

    在這波布局裡,OpenAI/Anthropic 緊抱 Azure / Google Cloud,但他們不是幫雲賣方案,而是吸走應用層的策略主導權

    • 雲廠仍然賺得到錢,但越來越像 「電力公司」
    • Capex 繼續狂飆(TAI 報告提到大廠未來幾年資本支出接近 千億美元級別)。
    • 卻無法掌控企業的 AI 路線圖與數據策略,因為那些是掌握在部署公司手裡。
    • 這對雲端原本期待的「平台 lock-in」是反向的:
    • Lock-in 發生在模型與部署方法論上,而不是在雲平台 API 上。

    2. 系統整合商(SI):風險是被巨頭「外包化」

    對傳統 SI 來說,最糟糕的劇本是:

    • OpenAI/Anthropic 設計方案、掌握客戶關係與資料策略
    • SI 只做:
    • 接舊系統
    • 寫 Glue code
    • 做客製化前端

    也就是說,SI 被變成部署巨頭的「勞務外包工程隊」:有 revenue,沒話語權;有工時,沒資產累積。

    更糟的是,部署公司會接觸大量真實場景,形成橫跨產業的「用例資料庫+最佳實踐模板」,下一個客戶就可以直接複用,進一步壓縮 SI 的方案設計價值。

    3. 傳統顧問公司:PowerPoint 壕溝正在被 AI 侵蝕

    McKinsey、BCG 等顧問過去最大的 moat 是:

    • 巨量案例與產業 know-how
    • 能幫 CEO 把變革寫成 PowerPoint 與路線圖

    但現在:

    • AI 可以自動生成決策報告與方案草稿
    • 部署公司握有真實運行中的 AI 系統數據,可以給出「在 200 家類似公司裡,這樣調整流程平均能提升 18% 生產力」這種高可信度的量化建議

    💡 關鍵: 當顧問報告可由 AI+跨客戶數據自動生成,傳統顧問公司的核心「案例與洞察壕溝」正在被系統性稀釋。

    當顧問的洞察不再是專屬資產,而是 AI+跨客戶數據庫的副產品,他們的 PowerPoint moat 正在被系統性稀釋。


    三、對企業端:短期好處,長期鎖死?

    從 CIO/CTO 角度看,這波「部署公司」有明顯的短期甜頭,也有被低估的長期風險。

    短期:風險轉移與導入效率暴增

    • 一站式整合
    • 模型選型、架構設計、PoC、合規、變革管理,一個團隊搞定,比自己組織內部拉專案組要快得多。
    • 最佳實踐快取
    • 部署公司帶著跨產業成功案例與模板,等於把別人踩過的坑全部 productize 成 SOP,企業可以跳過大量 trial-and-error。
    • 對董事會的說法好交代
    • 「我們與 OpenAI / Anthropic 合作」本身就是一張政治保險單,萬一專案失敗,也可以說是「產業標準尚未成熟」。

    長期:技術路徑與核心能力被「外包」的風險

    1. 技術與數據路徑被鎖死
    2. 部署公司會自然偏好自家模型與雲合作夥伴,
    3. 企業在資料標註、流程重構、權限設計上,全部繞著某家模型 API 打造。
    4. 轉向開源或本地方案的成本會隨時間指數上升。

    5. AI 能力被外包,內部只剩「使用者」

    6. 若關鍵的 Prompt 設計、Agent 架構、評估基準、風險治理全交給外部,
    7. 公司內部將缺乏真正懂 AI 系統行為與 trade-off 的技術決策者,
    8. 最終變成:AI 是一個黑箱服務,組織只會「發需求」而不會「設計系統」。

    9. 議價權與數據主權弱化

    10. 當企業營運越來越依賴一組「外部 AI 工作流」,
    11. 模型供應商調價、變更政策、限制遷移時,
    12. 企業的可選項只剩「吞下去」或「砍掉重練」。

    💡 關鍵: 部署公司幫企業快轉 3 年,同時也可能把技術路徑和資料綁死 10 年,代價是長期議價權與技術主權。

    簡單說:部署公司幫你加速 3 年,也可能幫你鎖死 10 年。


    四、這是雲戰 2.0,還是壟斷前奏?

    Anthropic 對 Google Cloud 5 年 2000 億美元承諾、OpenAI 與 Azure 的深度綁定,加上大廠動輒 千億級 capex,共同構成了一個事實:

    算力戰已經進入「模型巨頭+雲巨頭」的聯盟戰,部署層是他們建立新壟斷的前線。

    這對 中端開發者、本地/開源方案 的擠壓會出現在三個層面:

    1. 心智空間被「標準方案」佔滿
    2. 當 OpenAI/Anthropic 的部署團隊變成「企業 AI 的預設選項」,
    3. 中小型開發公司變成「補洞」角色,只在標準方案以外的小角落接外包。

    4. 資源與資料紅利集中

    5. 部署公司看到跨產業的真實運行數據,
    6. 能比任何開源社群更快迭代出穩定可用的模板與工具,
    7. 長期形成資料與方法論的雙重 Compounding 優勢

    8. 監管與合規成本成為護城河

    9. 未來若監管要求更嚴(模型審計、數據本地化、風險報告),
    10. 大型部署公司反而樂見其成:因為他們可以吸收這些成本,
    11. 開源與本地方案則被迫面對合規成本,進一步邊緣化。

    這更像是雲戰 2.0:第一輪比的是 IaaS/PaaS;第二輪比的是「誰把部署層與變革方法論變成標準件」。


    五、技術人與創業者:要避的坑與可守的位置

    如果你是產品/技術領導者或創業者,面對這波「部署公司化」,有三件事必須立刻做決策:

    1. 拒絕把核心能力完全交給外包
    2. 即使與 OpenAI/Anthropic 合作,也要在內部建立:
      • 模型評估與選型能力(能比較封閉模型與開源模型的 trade-off);
      • Prompt/Agent 設計與評測框架
      • 資料治理與風險管理的自有準則
    3. 把外部部署公司視為「加速器」,而不是「大腦」。

    4. 刻意設計「可替換性」與「多模型」的架構

    5. API 層一開始就做抽象,不讓任何單一模型供應商寫死你的業務邏輯;
    6. 核心業務流程盡量用可自託管的開源模型建立備援路徑;
    7. 把「切換供應商」視為必要工程,而不是罕見事件。

    8. 創業者的價值定位:避開「被巨頭吃掉的層」

    9. 不要去做「幫 OpenAI 寫客製化前端」這種註定被內建的工具;
    10. 尋找巨頭不願碰或碰不了的區域:
      • 高度垂直的行業流程與合規細節(醫療、政府、製造 OT 等);
      • 本地部署+極高隱私要求的場景;
      • 幫企業建立 「多模型治理與觀測層」 的工具與平台。

    最後的判斷是:企業 AI 的勝負不再看誰的模型跑分高,而是看誰控制「部署層+變革方法論」;但對技術人與創業者來說,真正能防守的價值,將來自你能否在巨頭主導的部署生態中,建立一個不依賴單一模型供應商、仍保有技術主權與議價權的位置。現在不做架構與策略上的防禦,兩三年後,你只剩簽約的份。


    🚀 你現在可以做的事

    • 盤點公司內部 AI 專案與供應商,畫出目前的「部署層+模型」依賴圖,標出潛在鎖死點
    • 設計一層抽象的 AI API 或「多模型路由層」,先在一個業務流程上實驗切換不同模型供應商
    • 若你是創業者,挑一個垂直行業(如醫療或製造),訪談 5 家企業,找出巨頭部署公司尚未解的高合規或本地化痛點,以此為題做 PoC
  • Symphony 與自管 Agent 的技術拆解

    Symphony 與自管 Agent 的技術拆解

    📌 本文重點

    • 讓 Agent 主動拉工單並自排程,減少工程師 babysit
    • 採用混合 Multi-Agent 模式與明確權限邊界
    • 透過 Task Queue + Worker + 審批閘門串起從工單到 PR 的全流程

    人類注意力已經成為工程團隊採用 AI 助手的主要瓶頸:Agent 能寫 code,但你要一直盯著它。Symphony 類的自管 Agent 系統,直接改變的是這件事:

    從「工程師 babysit 多個 Agent」→「Agent 自己從 Linear / Jira 拉工單、自排程、跑完整個 CI/CD pipeline,只在關鍵節點請你按一次 Approve」。

    下面從實作角度拆解:如何設計任務拉取、Multi-Agent workflow、與 CI/CD 權限邊界;最後給一個「自動修 bug → 開 PR → 回寫 Linear 狀態」樣板。


    重點說明

    1. 工單拉取與任務自排程

    核心是讓 Agent 變成一個長壽命 worker,定期從任務池拉工單,而不是被動等待 API 呼叫。

    工單來源

    • Linear: /issues, /webhooks, /comments
    • Jira: /rest/api/3/search, /rest/api/3/webhook

    Polling vs Webhook

    • Polling(簡單好 Debug)
    • 優點:
      • 實作簡單,只要定時 cron + API token
      • 不怕 webhook misconfig / 防火牆問題
    • 缺點:

      • 有延遲(30s–5min)
      • 需要自己做去重 / 任務狀態同步
    • Webhook(推薦長期方案)

    • 優點:
      • 事件即時觸發,適合高優先 bug / incident
      • 可根據事件類型直接分路由(bug vs feature)
    • 缺點:
      • 需要公開 endpoint + 驗簽
      • 部署與權限設定更複雜

    實務上常用 混合策略

    • Webhook 處理新建 / 更新事件
    • Polling 每隔 5–10 分鐘做 reconcile,修正漏觸發 / 失敗同步

    💡 關鍵: 用「Webhook 即時 + 每 5–10 分鐘 Polling 校正」的混合策略,可以在保持即時性的同時降低漏事件風險。

    任務分派與併發控制

    • 任務表核心欄位建議:
    • id, source(issue_id), priority, status(queued/running/failed/done), agent_type, lock_owner, lock_expires_at
    • 分派策略可以簡化成:
    • 優先級隊列:依 Linear priority / label 映射成數值
    • 技能匹配:根據 label → agent_type(例如 frontend, backend, infra

    併發與重試控制的關鍵:樂觀鎖 + visibility timeout

    -- 簡化的任務鎖定 SQL
    UPDATE tasks
    SET status = 'running', lock_owner = :agent_id, lock_expires_at = NOW() + interval '15 minutes'
    WHERE id = (
      SELECT id FROM tasks
      WHERE status IN ('queued', 'failed')
        AND (lock_expires_at IS NULL OR lock_expires_at < NOW())
      ORDER BY priority DESC, created_at ASC
      LIMIT 1
      FOR UPDATE SKIP LOCKED
    )
    RETURNING *;
    

    好處

    • 避免多個 Agent 搶同一張工單
    • Agent 崩潰 / timeout 時,lock 過期後可被其他 Agent 接手(類似 SQS visibility timeout)

    2. Multi-Agent:中心協調 vs 任務接力

    現代多 Agent 系統基本都落在兩種模式上(參考 Agents as Tools vs Handoffs)。

    模式 A:中心協調(Agents as Tools)

    • 一個「指揮官」Agent + 多個「工具」Agent
    • 主 Agent 保留全局 context 與決策權,子 Agent 像 function call

    • 示意(虛擬 code):

    const orchestrator = new OrchestratorAgent({
      tools: {
        codeAgent: callCodeAgent,
        testAgent: callTestAgent,
        infraAgent: callInfraAgent,
      }
    });
    
    await orchestrator.run({
      goal: "Fix bug #123 in service A and deploy to staging",
      constraints: { require_approval_for_deploy: true }
    });
    

    適合

    • 需求不明確,需要動態拆解子任務
    • 需要統一治理(quota、安全策略、審計)

    模式 B:任務接力(Handoffs)

    • 任務隨流程在 Agent 之間流動
    • 每個 Agent 處理完就寫結果 + 下一步指派
    // task.payload 示例(存在 DB / Task Queue)
    {
      "status": "code_fixed",
      "next_agent": "test_agent",
      "artifacts": {
        "branch": "fix/BUG-123-null-pointer",
        "diff_summary": "..."
      }
    }
    

    適合

    • Pipeline 已穩定(bugfix → test → PR → notify)
    • 易於水平擴展,每個 Agent 是一組 worker

    實務建議:多數專案採用 混合

    • 一個 中心協調 Agent,但遇到標準化步驟(跑測試、開 PR、通知 Slack)時,交給 固定 handoff stage 的 worker;類似「主流程由 LLM 控制,heavy lifting 由 deterministic step 執行」。

    💡 關鍵: 把「決策」交給中心協調 Agent,把「重複且標準化的步驟」交給固定 worker,可以在保持靈活度的同時確保穩定性與成本可控。


    3. 與 CI/CD、code review、事故流程整合

    自管 Agent 的威力,取決於你如何設計 權限邊界 + 審批閘門

    權限邊界設計

    • Repo 層級:
    • 建立專用 GitHub App / GitLab Token,只開放:
      • repo:contents:write(但限制特定 org / repo)
      • pull_request:write
    • 禁止直接 push main / production branch
    • 環境層級:
    • Agent 只允許:
      • Deploy 到 staging / preview env
      • 觸發 read-only incident tooling(查 log、查 metrics),不要一開始就給 rollback / scale 權限

    審批閘門(approval gate)

    • 在 CI pipeline 加一個手動 stage,例如 GitHub Actions:
    jobs:
      tests:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v4
          - run: npm test
    
      deploy_staging:
        needs: tests
        if: github.actor == 'agent-bot'
        environment:
          name: staging
          # GitHub Environments 的 Reviewers 即是 approval gate
        steps:
          - run: ./deploy-staging.sh
    

    審計 log

    • 每個關鍵行為都應落地:
    • 取得工單(issue_id, agent_id, reason, time
    • 對 repo 的修改(branch, commit_sha, diff_summary, tests_run
    • 任何 CI/CD trigger(workflow_id, inputs, result

    • 建議統一經過一個 AuditService.log(event)

    await AuditService.log({
      actor: "agent-bot",
      action: "CREATE_PR",
      metadata: {
        issue_id: "ENG-1234",
        repo: "org/service-a",
        branch: "fix/ENG-1234-null-pointer",
        pr_url: "https://github.com/..."
      }
    });
    

    💡 關鍵: 把權限鎖在「staging + PR 層級」並配合審批閘門與審計 log,可以在不影響生產安全的前提下,讓 Agent 最大化自動化範圍。


    實作範例:從 Linear 抓 bug → 開分支 → 修 code → 開 PR → 回寫狀態

    以下是一個縮小版 blueprint,你可以直接改成自家 stack。

    1. 任務入口:Linear Webhook + 任務表

    Linear Webhook 指向你的 /linear/webhook

    // Express 風格
    app.post('/linear/webhook', async (req, res) => {
      const event = req.body;
    
      if (event.type === 'IssueCreated' || event.type === 'IssueUpdated') {
        const issue = event.data;
    
        // 僅處理 bug + 特定 team
        if (issue.team.key === 'ENG' && issue.labelNames.includes('bug')) {
          await TaskRepo.enqueue({
            source: 'linear',
            source_issue_id: issue.id,
            priority: mapLinearPriority(issue.priority),
            agent_type: 'bugfix',
            status: 'queued'
          });
        }
      }
    
      res.sendStatus(200);
    });
    

    2. Bugfix Agent Worker(核心 loop)

    async function bugfixWorkerLoop() {
      while (true) {
        const task = await TaskRepo.acquireNext('bugfix', process.env.AGENT_ID);
        if (!task) {
          await sleep(5000);
          continue;
        }
    
        try {
          const issue = await LinearApi.getIssue(task.source_issue_id);
          const repo = mapIssueToRepo(issue);
          const branch = `fix/${issue.identifier}-${slug(issue.title)}`;
    
          await GitService.createBranch({ repo, from: 'main', branch });
    
          const diff = await CodeAgent.fixBug({
            repo,
            branch,
            issue_description: issue.title + '\n\n' + issue.description,
            files_hint: inferRelatedFiles(issue)
          });
    
          await GitService.commitAndPush({ repo, branch, message: `fix: ${issue.identifier}` });
    
          const pr = await GitService.createPR({
            repo,
            branch,
            base: 'main',
            title: `[Agent] Fix ${issue.identifier}: ${issue.title}`,
            body: renderPRBody(issue, diff)
          });
    
          await LinearApi.updateIssue(task.source_issue_id, {
            state: 'In Review',
            descriptionAppend: `\n\nLinked PR: ${pr.url}`
          });
    
          await TaskRepo.markDone(task.id);
        } catch (err) {
          await TaskRepo.markFailed(task.id, { error: String(err) });
        }
      }
    }
    

    關鍵點

    • CodeAgent.fixBug 本身可以是一個 Symphony / Claude Managed Agent:
    • 有自己的工具:get_file, apply_diff, run_tests
    • 有自己的「Outcomes」條件(例如:測試必須綠燈、diff 不能超過 500 行)
    • Worker loop 要能容錯:task failure 不要直接 crash process

    3. 錯誤恢復與常見坑

    (1) stale context / 版本衝突

    • 現象:Agent 基於舊 commit 生成 patch,push 時發現 remote 已有新 commit
    • 對策:
    • createBranch 前先 git fetch + 檢查 main 是否有新 commit
    • 若有衝突,改用 rebase + 再跑一次 CodeAgent,或直接加標籤請人工處理

    (2) 任務飢餓(某些工單一直排不到)

    • 常見原因:
    • 單純用 FIFO,長工時任務卡住隊列
    • 高 priority 任務一直插隊
    • 對策:
    • 採用 優先級 + aging:等待時間越久,自動提高 effective priority
    • 給長任務單獨的 queue 或 agent_type

    (3) 被動等待人工決策,Agent 資源被佔住

    • 例如:Agent 開 PR 後要等 Reviewer,期間 worker 就 idle with lock
    • 對策:
    • 把「等待人工」拆出成另一個狀態:
      • 任務設為 status = waiting_human
      • PR merge / Linear 狀態變更時再由 webhook 建下一個 task(例如 deploy)

    (4) AI 決策不穩(修了錯問題)

    • 這是現在 Agent 最大痛點之一(參考「AI is getting better at doing things, but still bad at deciding what to do」)。
    • 對策:
    • CodeAgent 設定明確 Outcome 定義
      • 測試要準備好一組 reproduction test
      • 用獨立 Evaluator Agent 根據 log / diff 給出 pass / needs-clarification
    • 讓 Agent 更常問問題:若重現步驟不完整,直接在 Linear 開 comment 要求補充,而不是盲修。

    建議與注意事項

    1. 從「觀察型 Agent」開始,不要一開始就給寫入權限

    2. 先只允許:讀工單 → 產生修復方案 / diff 草稿 → 貼回 Linear。穩定後再打開 PR 寫入、最後才接 CI/CD。

    3. 集中化審計與開關

    4. 所有 Agent 行為走一個 Agent Gateway / Orchestrator,集中:

      • 配額控制
      • 風險開關(feature flag 一鍵關掉所有 auto-deploy)
      • log / metrics / alert
    5. 明確定義「哪一段流程可以 0 人工」

    6. 常見安全配置:

      • bugfix PR 可以由 Agent 全自動產生,但 merge 必須人工
      • staging deploy 可自動,production deploy 必須經 Slack / PagerDuty approve
    7. 將 Agent 視為「非穩定服務」而非傳統微服務

    8. 接受它偶爾會做奇怪決策,因此整個系統必須:

      • 有清楚的 rollback 路徑
      • 任務永遠由 queue 控制,不綁死在單一 process
      • 重要資源(code、infra)永遠有 versioning + 審批

    如果你已經有 Linear / Jira + GitHub + CI/CD 的基本骨架,其實不用重建世界:

    只要加上一個 Task Queue + Agent Worker + 守門的 Orchestrator/Approval Gate,你就能讓 Symphony 類的自管 Agent 為團隊接手一條完整的「從工單到 PR」流水線,真正從盯著 Agent 寫 code,變成只盯少數關鍵決策點。

    🚀 你現在可以做的事

    • 在現有 Linear / Jira 加一個 Webhook,寫入自建的 tasks 資料表作為任務池
    • 實作一個最小版 bugfixWorkerLoop,先只產生修復方案與 diff 草稿貼回工單
    • 在 CI/CD 中加入只對 agent-bot 生效的 staging deploy job,並配置 GitHub Environments 審批閘門
  • 用 Deer-Flow 自建長跑 AI SuperAgent

    用 Deer-Flow 自建長跑 AI SuperAgent

    📌 本文重點

    • Deer-Flow 把長時間任務拆成可控模組
    • 透過記憶體與子代理協作支援長期、多階段任務
    • 搭配沙盒與工具調用,可快速做出實用自動化 Pipeline

    只要先把任務切成模組、再讓 Agent 自己排程與記憶,Deer-Flow 能幫你把「要跑幾小時」的專案變成一條可控又可復用的自動化流程。

    專案連結:bytedance/deer-flow


    核心功能:把「長時間任務」拆成可控模組

    這一節先講概念,但每個小節都會對應到你可以馬上去做的事。


    1. 任務調度:讓 Agent 分段跑,而不是一口氣硬撐

    Deer-Flow 的定位是「long-horizon SuperAgent harness」,核心就是任務調度(scheduler):

    • 把大任務拆成多個 stage(例如:資料收集 → 清洗 → 分析 → 報告)
    • 每個 stage 由一個或多個子代理(subagents)負責
    • 調度器會決定:
    • 什麼時候喚醒哪個子代理
    • 什麼時候暫停、重試、或改走另一條路徑

    你可以把它想像成「AI 版本的 Airflow + 任務導向的聊天界面」。

    💡 關鍵: 把長任務拆成多個 stage,讓 scheduler 分段調度 subagents,可以大幅降低單次失敗風險並提升整體可控性。

    你可以馬上做的事:

    1. 打開專案的 examples/ 資料夾,看官方提供的 flow 定義(多半是 YAML 或 Python pipeline)。
    2. 想一個你日常會重複做的 3–4 步驟任務(例如:抓資料 → 存 DB → 寫 summary),在筆記上先畫出 3–4 個方框,對應到未來的 stage 名稱。

    2. 記憶體管理:讓 Agent 記得「之前做過什麼」

    長時間任務的難點,不是算力,而是「上下文會爆掉」。

    Deer-Flow 幫你管的是:

    • 短期記憶(working memory:某個子任務當下需要的上下文
    • 長期記憶(long-term memory:歷史任務紀錄、重要結果、被標記的關鍵中間產物
    • 記憶裁剪:把不重要的對話 / log 丟掉,只保留後續階段會用到的東西

    這樣一來,你可以讓同一個 Agent:

    • 早上先跑一輪資料爬取
    • 下午再接續早上的結果繼續清洗與分析

    你可以馬上做的事:

    1. 在官方 demo 裡,找到記憶相關設定(通常會指定儲存路徑或使用向量資料庫)。
    2. 先用預設的本地檔案儲存方式,觀察它怎麼把多輪任務寫進 log / memory,了解自己之後可以在哪裡接入自己的資料庫。

    3. 子代理協作 + 工具調用:像組一隊虛擬實習生

    Deer-Flow 支援多個 subagents,每個都可以:

    • 使用不同的 LLM(例如:一個負責寫程式,一個負責資料分析)
    • 綁不同的工具(HTTP、資料庫、內部 API
    • 透過 message gateway 互相傳遞任務與結果

    同時,它內建「工具調用」的框架:

    • LLM 輸出「要用哪個工具 + 參數」
    • Deer-Flow 幫你實際執行(例如發 HTTP 請求、查 DB
    • 把結果再丟回 LLM 繼續推理

    你可以馬上做的事:

    1. toolsskills 相關的範例中,找到 HTTP request 或資料庫工具的例子。
    2. 把它改成呼叫你公司內部一個可公開測試的 API(例如:/health/status),確認整條「LLM 決定 → 工具執行 → LLM 使用結果」流程可用。

    4. 沙盒執行程式碼:讓 Agent 先在安全盒子裡試錯

    Deer-Flow 特別強調 sandboxes

    • Agent 產生或修改程式碼時,不會直接在主機上執行
    • 而是丟到隔離環境(容器 / sandbox 子進程)裡跑
    • 出現錯誤時,log 會被收集回來給 LLM 參考,做下一輪修正

    這一點非常適合以下情境:

    • 讓 Agent 自動寫爬蟲、清洗腳本
    • 讓 Agent 幫你布署一個小型服務(只在 sandbox 測試通過後才進正式環境)

    你可以馬上做的事:

    1. 在官方 demo 裡跑一個「code sandbox」相關示例,看它怎麼把程式碼丟到沙盒執行。
    2. sandbox 內部要執行的腳本換成你平常會用的簡單任務,例如:讀取一個 CSV,輸出 JSON

    適合誰用:3 個具體場景


    場景 1:長時間資料爬取與整理

    典型流程:

    1. Agent A:負責定義爬取策略(網站列表、節奏控制)
    2. Agent B:實際發 HTTP 請求、解析 HTML / API
    3. Agent C:清洗資料、存進資料庫
    4. Agent D:最後產出摘要報告(例如每天一份 Markdown 摘要)

    Deer-Flow 的用法:

    • 每個 Agent 是一個 subagent
    • 任務調度器負責安排「今天要爬哪些」、「昨天失敗的要重試」
    • 記憶體管理幫你記住爬過哪些 URL,避免重複

    行動建議:

    • 選一個你每天都會看的公開資料來源(例如某政府開放資料 API),用 Deer-Flow 做一個「每日抓取 + insert DB + 產出報表」的 pipeline

    場景 2:從需求到部署的自動化小專案

    你可以把它當成一個「AI junior developer」:

    1. Agent 讀取你的需求(功能描述、預期輸入輸出)
    2. sandbox 裡生成與跑單元測試
    3. 修正錯誤
    4. 最後產出可部署的腳本或 Dockerfile

    搭配本地 LLM(例如 Qwen 3.6 27B,搭配 MTP 加速,參考:這篇 Reddit 分享),你可以完全在內網完成這一串。

    💡 關鍵: 搭配 Qwen 3.6 27BMTP,有實務經驗分享可達到推理速度約「2.5×」提升,使本地端長任務也具備實用性。

    行動建議:

    • 挑一個小腳本需求,例如:
    • 定期掃描資料夾,壓縮過期檔案
    • 監控某個 API latency,超標就寄信
    • 讓 Deer-Flow 的 Agent 在 sandbox 中生成並測試這個腳本,再由你審核後部署。

    場景 3:定期報表生成(營運、行銷、IT 系統狀態)

    想像每週要手工做的:

    • 把資料庫中的數據抓出來
    • 做一些聚合 / 分析
    • 輸出 PowerPointMarkdown 報告

    Deer-Flow 可以這樣組:

    1. 工具:資料庫查詢工具(連到你的 PostgreSQL / MySQL
    2. Agent:
    3. 一個負責定義查詢與聚合邏輯
    4. 一個負責把結果轉成自然語言與圖表描述
    5. 調度:排成 cron-like 任務,每週執行一次

    行動建議:

    • 從一個最簡單的報表開始,例如「每週新用戶數」,用 Deer-Flow 將流程自動化,先做到:
    • Agent 查 DB → 產出一份 Markdown 報告存檔 → 你手動審閱

    怎麼開始:最小可行 Pipeline

    下面是一條「週末就能跑起來」的最簡路線。


    步驟 1:環境與安裝

    1. 準備一台有 Python 3.10+ 的機器(本機或雲端皆可)。
    2. 進入命令列:
    git clone https://github.com/bytedance/deer-flow.git
    cd deer-flow
    python -m venv .venv
    source .venv/bin/activate  # Windows 用 .venv\Scripts\activate
    pip install -r requirements.txt
    
    1. 確認可以跑官方 demo(通常在 examples/):
    python examples/basic_flow.py
    

    目標:先看到一個完整任務從「開始 → 調用 LLM → 調用工具 → 結束」的 log


    步驟 2:接上一個開源 LLM(本機或雲端)

    你有兩條路:

    • 本機模型:用 llama.cppOllamaQwen 3.6 之類的模型
    • 雲端 API:用 OpenAIAnthropic 或其他 OpenAI-compatible 服務

    OpenAI 介面為例,Deer-Flow 通常會在設定檔或程式中要求:

    llm_config = {
        "endpoint": "https://your-openai-compatible-endpoint/v1",
        "api_key": "YOUR_KEY",
        "model": "qwen-3.6-32b-instruct"  # 或其他你有的模型名
    }
    

    行動建議:

    • 如果你已經有在用本地模型,直接把你熟悉的 OpenAI-compatible endpoint(例如 vLLM、自建 server)填進來,確認 Deer-Flow 可以正常發出 completion / chat 請求。

    步驟 3:串一個最簡單的工具(HTTP / 資料庫 / 內部 API)

    HTTP 工具為例,你可以新增一個 tool

    from deer_flow.tools import register_tool
    import requests
    
    @register_tool("get_status")
    def get_status(url: str):
        resp = requests.get(url, timeout=10)
        return {"status_code": resp.status_code, "body": resp.text[:1000]}
    

    然後在 Agent 的工具清單中加入 get_status,讓 LLM 可以呼叫它:

    • Prompt 裡描述:「有一個工具 get_status(url) 用來檢查服務狀態」
    • 將你的內部 /health API 當成第一個測試目標

    行動建議:

    • 先讓 Agent 自己決定:
    • 什麼時候要呼叫 get_status
    • 呼叫後如何解讀結果(例如:狀態碼非 200 就記錄成 incident

    週末練習腳本:從官方 demo 改成你的業務任務

    把以上步驟變成一個可執行的「週末計畫」:

    1. 跑起官方 demo
    2. 目標:看到完整的 log 與結果
    3. 換成你的 LLM
    4. 本地 Qwen / 雲端 API 任一種
    5. 串一個工具
    6. HTTP 或資料庫擇一
    7. 改寫 flow
    8. 讓 Agent 幫你跑一個真實業務任務,例如:
      • 每日抓一個內部 API 的統計數據
      • 存到一個簡單的 SQLite / CSV
      • 產出一行 summary

    做到這裡,你就已經擁有一個「專門幫你跑重複工作幾小時」的長跑 AI SuperAgent 雛型,接下來再慢慢加 stage、加子代理,就能讓它接手越來越多的例行任務。

    💡 關鍵: 先完成最小可行 pipeline,再逐步增加 stage 和工具,可以在風險可控下循序擴張自動化範圍。


    🚀 你現在可以做的事

    • 到 GitHub 下載並跑一次 bytedance/deer-flow 的官方 examples/basic_flow.py
    • 挑一個你日常 3–4 步驟的例行任務,畫出對應 stage,準備改寫成 Deer-Flow pipeline
    • 接上你的第一個實際工具(例如內部 /health API),驗證「LLM 決策 → 工具執行 → LLM 消化結果」這條鏈路在你環境中可用
  • Cloudflare AI 一鍵開站實戰指南

    Cloudflare AI 一鍵開站實戰指南

    📌 本文重點

    • Cloudflare + AI Agent 把建站流程變成一條指令
    • Agent 幫你自動處理帳號、網域、DNS 與部署
    • 透過細分工具與沙盒權限控制降低風險

    用一句話講清楚:這套 Cloudflare + AI Agent 的做法,就是讓「註冊帳號、買網域、設 DNS、部署前端/反向代理」整包變成一條指令搞定的自動流程。

    參考:Cloudflare 官方示範 AI Agent 如何創建帳號、購買網域並部署專案:https://blog.cloudflare.com/agents-stripe-projects/


    核心功能:AI 幫你做掉的「雲端雜事」

    把這個 Agent 想成會上 Cloudflare 幫你跑腿的「小助理」,它擅長三件事:


    1. 自動開帳號與綁付款

    能做什麼

    • 依照你的輸入,幫你在 Cloudflare 建新帳號或登入既有帳號
    • 透過 API 綁定 Stripe 等付款方式(在 Cloudflare 文中是 demo Stripe)

    你可以立刻做的事

    • 先準備一組「測試用帳號 + 測試信用卡」(例如:Stripe test mode)
    • 在 Agent 的設定檔裡,只給它測試環境的 API Key,避免直接動到正式金流

    2. 自動買網域 + DNS 設定

    能做什麼

    • 搜尋可用網域,根據你描述的站點主題幫你推薦(如:blog、landing page)
    • 幫你在 Cloudflare Registrar 購買網域
    • 自動建立對應 DNS 記錄(A、CNAME、TXT 等)

    你可以立刻做的事

    • 先選一個你願意「當實驗品」的便宜網域(.dev、.xyz)
    • 把「搜尋網域」「購買網域」拆成兩個獨立步驟,先讓 Agent 只做搜尋與列出候選,購買時再由你點選確認

    3. 一鍵部署 Pages / Workers / 反向代理

    能做什麼

    • 建立 Cloudflare Pages 專案,從 GitHub/GitLab 拉前端程式碼並自動部署
    • 建立 Workers 當 API gateway 或反向代理,轉發到你的後端
    • 將網域 CNAME / A 設到對應的 Pages 或 Workers,整站自動串起來

    你可以立刻做的事

    • 先準備一個最簡單的範例 repo:只有 index.html 的靜態站
    • 在 Agent 裡把「部署 Pages」設計成可重複執行的腳本,之後要開新站只換 repo URL 與網域即可

    適合誰用:幾個實際場景


    1. 產品團隊:十個 Landing Page 反覆 A/B test

    • 你只需要寫清楚:產品描述、目標市場、想測的方案數
    • Agent 幫你:
    • 從模板庫挑版型
    • 幫你生成靜態文案 + 分版本
    • 各建一個 Pages 專案 + 子網域(如 v1.、v2.、v3)

    2. 個人開發者:接案每次都要幫客戶開新站

    • 預先寫好「開新客戶站」腳本:
    • 建 Cloudflare 帳號 + Project
    • 關聯 Git repo
    • 設 DNS + SSL
    • 真正接案時,只要把客戶資訊填進表單,Agent 幫你跑完流程

    3. 小團隊 SRE / DevOps:想把「開新環境」變成自助服務

    • 把目前手動 run 的 Terraform / CLI 流程,包成幾個固定步驟
    • 用 Agent 把這些步驟串成「對話式自助開環境」,讓工程師只回答幾個問題就能有 dev / staging 站

    怎麼設計安全的 Agent 流程與權限

    這類 Agent 一旦拿到金流與 DNS 權限,風險就很實際,所以要先設計好「它能做什麼」與「什麼一定要人按確認」。

    💡 關鍵: 把高風險操作拆成小工具並加人類確認,是在維持自動化效率下控管金流與 DNS 風險的核心做法。


    步驟 1:把任務拆成幾個明確能力(tools)

    建議至少拆:

    1. search_domains:搜尋可用網域
    2. purchase_domain:購買指定網域
    3. create_cf_account:建立 Cloudflare 帳號
    4. deploy_pages_project:建立 + 部署 Pages
    5. create_worker_and_route:建立 Worker 並設定路由
    6. update_dns_record:新增 / 修改 DNS

    每個能力對應一個 API client 或 script,Agent 只能呼叫這些「包裝好」的函式,不直接拿到 raw API key。


    步驟 2:為每個能力標示「是否需要人類確認」

    一個簡單實作方式:在工具定義中加一個 flag:

    {
      "name": "purchase_domain",
      "human_approval_required": true,
      "max_amount": 20
    }
    

    然後在你的 Agent orchestrator 裡:

    • 若工具標示 human_approval_required,就把呼叫參數(例如網域名稱、價格)顯示在後台或發 Slack/Email
    • 只有當你點「批准」後,才真的讓後端執行這個工具

    步驟 3:使用「細分 API Key」與沙盒環境

    實務上避免「一把鑰匙開全公司」。

    • Cloudflare:
    • 建一個 專門給 Agent 用的 Account,只能管特定 zone
    • 使用 Scoped API Tokens,只開啟 DNS / Workers / Pages 所需權限
    • 金流(如 Stripe):
    • 一開始只給 test mode key
    • 等流程穩定後,再引入正式金流 + 嚴格人類審批

    實際腳本示範:從一句話需求到站點上線

    下面是一條「可複製」的流程。假設你在自建的 Agent 平台上,給模型這個任務:

    幫我開一個介紹 AI 工具評測的個人網站,用最便宜的可用網域,前端用現成靜態模板,掛在 Cloudflare Pages,上線後回報網址與部署細節。

    可以拆成以下幾步(你在 orchestrator 裡實作):


    1. 理解需求(LLM 自己完成)

    • 抽取:主題(AI 工具評測)、語言(繁中)、預算(便宜網域)、託管方式(Pages)

    2. 搜尋網域(需人確認)

    • Agent 呼叫 search_domains,傳入關鍵字:ai-tool-review, aitoolnotes
    • 回傳候選清單(名稱 + 價格)
    • 顯示在 UI 讓你勾選要買哪一個

    3. 購買網域(強制人類確認)

    • 你勾選後,才允許 Agent 呼叫 purchase_domain
    • 成功後記錄網域 ID,存入任務上下文

    4. 部署 Cloudflare Pages

    • 先由 Agent 幫你選模板+生成內容
    • 基於 GitHub 上某個 starter template(設定在系統 prompt 裡)
    • 產生 index.html 內容(標題、關於我、最新評測文章列表 placeholder)
    • 呼叫 deploy_pages_project
    • repo_url: 你預先準備好的 template repo
    • build_command: “npm run build” 或空字串(純靜態)
    • output_dir: dist / build

    5. 設定 DNS 與路由

    • Pages 部署完成後會有一個預設子網域
    • Agent 呼叫 update_dns_record
    • 把剛買的網域的 @www CNAME 指到 Pages 網址

    6. 回報結果

    • Agent 最後整理:
    • 站點網址
    • 使用的網域價格
    • Pages 專案名稱與部署歷史連結
    • 你可以點進去檢查,如果沒問題,下次只要換一句需求就能複製整套流程

    想看 Cloudflare 官方更進階的案例(含 Stripe、Workers 整合),可參考:https://blog.cloudflare.com/agents-stripe-projects/


    實務風險與如何加上「人類確認」

    在 Reddit / Medium 上已經有很多討論,尤其是當 Agent 直接碰資料庫或金流時,風險會被放大。像 Vishesh Rawal 就分析了 AI Agent 連 PostgreSQL 時,因為連線被占住 6 秒而不是 5ms,讓連線池吞吐量掉了 1200 倍:https://medium.com/@visheshrawal/what-really-happens-inside-your-database-when-an-ai-agent-starts-querying-6d5254aeaa78

    💡 關鍵: AI Agent 對基礎設施與資料庫的「慢操作」,可能把吞吐量放大到原本的 1/1200,必須用節流與審批機制保護系統。

    對於 Cloudflare 這種「基礎設施類操作」,建議至少做三件事:


    1. 所有「花錢」的操作都要人工二次確認

    • 買網域、綁定正式金流、升級付費方案
    • 透過:Email、Slack bot、後台 Dashboard 的 Approve 按鈕

    2. 所有「改路由」的操作都要記錄審計

    • Log:誰下指令、Agent 呼叫了哪些工具、前後 DNS / Routing 差異
    • 發生事故時可以回溯,避免「Agent 胡亂改設定但找不到原因」

    3. 分環境:先在「沙盒帳號」驗證流程

    • 先在一個完全獨立的 Cloudflare 帳號跑完整流程
    • 確認行為符合預期後,才把相同腳本接到正式帳號,但權限再縮一級

    最低成本實驗指南:用現成工具在沙盒重現自動部署

    如果你想在一個週末內實際玩到這套「一鍵開站」流程,可以照這個極簡路線走:


    步驟 1:準備一個 Cloudflare 沙盒帳號

    1. 用新的 email 註冊一個 Cloudflare 帳號
    2. 建立一個 API Token
    3. Template 選「Edit Cloudflare Workers」或「Edit Cloudflare Pages」
    4. Scope 只給某一兩個 zone(或一開始先不管 zone,只玩免費二級網域)

    步驟 2:選一個可以自訂 Tools 的 Agent 平台

    你可以用以下任一種方式:

    • 開源 / 自架:如基於 LangChain、LlamaIndex 或自寫 Python + OpenAI API
    • 商用平台:選一個支援「自訂工具 / Actions」的聊天式 Agent 介面

    關鍵是:你要能把「call Cloudflare API」包成一個工具,給模型呼叫。


    步驟 3:先做「最小可用流程」

    在沙盒帳號裡,先只讓 Agent 做兩件事:

    1. 建立一個 Cloudflare Pages 專案(用你現成的 GitHub 靜態站 repo)
    2. 回報部署網址給你

    這代表你只需要實作一個工具:deploy_pages_project,以及一個很簡單的 system prompt:

    你是一個幫助使用者在 Cloudflare Pages 部署靜態網站的助理。
    使用者只會提供 GitHub repo 連結與專案說明。
    你應該:
    1. 確認使用者需求
    2. 呼叫 deploy_pages_project 工具
    3. 回報部署後的網址與任何錯誤訊息。
    不要購買網域,只使用預設的 Cloudflare Pages 網址。
    

    等這條 pipeline 穩定後,再逐步加入:搜尋網域 → DNS 設定 → Workers 反向代理 → 網域購買(最後才加)。


    快速整理:這套做法的價值

    • 把「開新站」變成一條指令:從建帳號、買網域到部署,都由 Agent 操作 Cloudflare 完成
    • 可複製的腳本化流程:不同產品/客戶只改描述與 repo,其餘通用
    • 安全可控:透過細分工具、Scoped Token、人工審批,把風險鎖在沙盒與少數關鍵節點

    💡 關鍵: 先用 Pages 自動部署當起點,再逐步接入網域、Workers 與金流,是導入 Cloudflare Agent 化的漸進路線。

    如果你手上已經有穩定的 Git 部署流程,下一步就可以試著讓 Agent 幫你「接手 Cloudflare 那一段」,從最簡單的 Pages 自動部署開始,慢慢走向真正的一鍵開站。

    🚀 你現在可以做的事

    • 在 Cloudflare 開一個沙盒帳號並建立專用 Scoped API Token
    • 準備一個只含 index.html 的 GitHub 靜態站 repo,作為 Pages 測試專案
    • 在任一支援自訂 Tools 的 Agent 平台上實作 deploy_pages_project,跑通最小可用一鍵部署流程
  • Chrome 偷塞 4GB 模型,踩到瀏覽器戰爭的新雷區

    Chrome 偷塞 4GB 模型,踩到瀏覽器戰爭的新雷區

    📌 本文重點

    • Chrome 默默塞入 4GB 本地 AI 模型,瀏覽器正變成隱形 OS
    • 本地 AI 等於新一層追蹤與權限風險,缺乏透明度問題巨大
    • 監管將從「模型安全」走向「部署與預設值」治理,透明與可關閉成新護城河

    第一時間就先把立場講明白:Chrome 在未經明確告知與同意的情況下,默默塞進 4GB 本地 AI 模型,代表瀏覽器正式走向「隱形 OS」——也正式踩進用戶權益與監管紅線。 這不是單一產品決策,而是整個 AI 產業競賽邏輯,被擠壓到瀏覽器這個前線的結果。


    為什麼 Google 非得把 AI 塞進瀏覽器?

    先理解動機,才能理解這次為何如此「硬上」。

    1. 成本壓力逼出本地推論
      雲端推論一問一答都在燒錢。Google 要把 AI 整合進搜尋、Workspace、Chrome,如果全部丟雲端推,等於在自家核心業務上加了一層永久稅。把 約 4GB 的模型直接塞進 Chrome,就是把一部分推論成本,轉嫁到用戶 CPUGPUSSD 上——而且不必問你願不願意。

    💡 關鍵: 把約 4GB 模型塞進 Chrome,是把原本在雲端燒的 AI 成本,直接轉嫁到使用者的個人硬體與儲存空間上。

    1. 瀏覽器是唯一全平台「強入口」
      終端 OSAppleMicrosoft 卡死,行動端還要面對 App Store gatekeeping。瀏覽器是 Google 唯一能在 Windows、macOS、Android、甚至 iOS 上,直接「下放能力」到終端的通道。要把 AI 變成「基本設施」,Chrome 就一定會被當成系統級 runtime 來用。

    2. 和 OpenAI/Anthropic/Apple 的賽局
      今天 OpenAI 可以透過桌面 App、API 變成開發者的默認 AI runtime;Apple 則在 WWDC 把「Apple Intelligence」綁死在裝置與 OS 層。Google 若不在瀏覽器層直接「預裝 AI」,就等於把入口讓給別人。這是一場誰先占領「用戶默認環境」的戰爭,而 Chrome 是 Google 手上最後一塊最大棋盤。

    所以,從商業與技術角度看,Google 做「本地模型深度嵌入 Chrome」幾乎是必然。但這不代表它可以默默下載 4GB 模型,還假裝這只是例行更新


    瀏覽器變「隱形 OS」:AI bloatware 與追蹤地獄的起點

    這次爭議最糟糕的地方,不是「模型有多大」,而是它被當成一個不用解釋、不用選擇的系統組件。這宣告了瀏覽器的新角色:

    瀏覽器不再只是裝網頁的容器,而是 AI 的隱形作業系統。

    問題是,OS 級元件如果沒有 OS 級透明度與控制權,後果會非常醜。

    從「外掛」變「預載」:bloatware 的歷史重演

    PC 時代,我們痛恨電腦一開機就塞滿預載軟體:吃資源、難移除、還常常在背後傳資料。今天 Chrome 偷塞 4GB 模型,本質是一樣的邏輯,只是換了 AI 皮。

    差別在於:

    • 模型可以持續更新變大,不是一次性安裝
    • 模型推論過程本身可能 生成、蒐集高敏感度語境資料
    • 模型輸出的行為,又會反過來影響你在網頁上的決策與行為

    如果瀏覽器變成「不可關的 AI 後台」,那不是功能加值,而是結構性風險。

    過去十年我們在跟 Cookie、第三方追蹤碼、指紋辨識打游擊戰。現在,瀏覽器內建模型等於多了一層「在你畫面上思考的程式」,它可以:

    • 看你打的每一行字(輸入法式的監聽問題再現)
    • 理解你看的每一個頁面內容(語意層追蹤)
    • 根據這些語境優化建議、搜索、甚至廣告

    如果這一切都是在「你以為只是打開一個瀏覽器」的前提下默默進行,那跟我們過去批評的黑箱推薦演算法、暗黑模式,完全是同一脈絡,只是換了一個更聰明也更難看懂的殼。

    💡 關鍵: 內建 AI 模型讓瀏覽器可以理解「你在看什麼、打什麼」,從追蹤點擊與 Cookie,升級到直接監聽完整語境。

    AI 模型進政府預審,瀏覽器卻免「知情同意」?

    有趣的對比是:Google、Microsoft、xAI、OpenAI、Anthropic 這些公司,已經和美國商務部旗下 CAISI(Center for AI Standards and Innovation) 合作,允許政府在模型公開前做前置審查與國家安全測試,甚至提供降低安全柵欄的版本來驗證風險。

    同一批公司在國安層面願意接受預審,卻在消費者端直接把 4GB 模型塞進百萬台終端,連一個清楚的彈窗選項都沒有

    這對監管者來說,是非常明顯的訊號:業者知道 AI 有風險,知道要在高風險情境前置審查,卻在最貼近用戶生活的環境選擇「先上車再說」。 這就是未來被立法「修理」的最佳素材。


    Siri 誇大被罰、AI 模型預審上路:監管已在給市場畫線

    Chrome 塞模型這件事,若放在近期幾個案例旁邊看,脈絡會更清楚。

    Apple 因 Siri 誇大 AI 功能被求償 2.5 億美元

    Apple 因為在 Siri 的 AI 功能上過度行銷、實際落地嚴重延遲,最後選擇以 2.5 億美元和解。這案子傳遞的訊號是:

    • AI 功能不是「講爽的」,功能成熟度與溝通內容不匹配,會直接變成法律與金錢風險
    • 用戶對 AI 的期待,一旦被引導到某個高度,就會被法院視為「合理期待」

    Apple 是因為「說太多」被罰,而 Google Chrome 這次是「說太少」——甚至不說。兩者看似相反,實際上在監管者眼中是一體兩面:都在處理 AI 部署的誠實與透明問題。

    💡 關鍵: Siri 被罰 2.5 億美元,顯示「AI 能力講過頭」要付現金代價;Chrome 這種「不講清楚就部署」同樣是另一種高風險不誠實。

    模型國安預審:AI 變成「類核技術」級別基礎設施

    美國政府透過 CAISI,已經拿到 Anthropic、OpenAI、Google DeepMind、Microsoft、xAI 等公司最新模型的「預發布存取權」,用於國家安全測試。 White House 甚至討論要導入更廣泛的模型上線前政府審查流程

    這種做法本質上是在宣告:

    • 大型 AI 模型不再被視為一般軟體,而是類戰略物資
    • 高風險能力必須在部署前,對「可能傷到誰」做出交代

    如果模型都要在國家安全層面預審,那麼當模型被默默部署到十億用戶的瀏覽器裡,卻沒有清楚的知情同意與關閉機制,監管者遲早會追問:為何在國家安全面前可以謹慎,在消費者權益面前卻可以粗暴?

    監管下一步:從模型審查走向「部署治理」

    目前的政策焦點還在「模型本身危不危險」。但這次 Chrome 事件會加速一個轉向:監管會開始管「模型怎麼被塞進用戶環境」。可能的方向包括:

    • 要求本地 AI 組件層級的顯示與管理界面(就像系統權限頁面)
    • 強制標示模型大小、資源占用、資料流向
    • 禁止在預設開啟狀態下收集特定敏感資料,除非有明確 opt-in

    一句話:模型審查只是上半場,下半場是部署與默認值的治理。


    開發者與企業:別再迷信「預設開啟」,透明+可關閉才是新護城河

    這件事對開發者與企業的真正啟示是:「預設開啟的 AI 能力」在監管與市場上都會越來越貴。 具體可以歸納成三點行動建議:

    把「AI 開關」當成一級產品需求,而不是設定頁腳的一行字

    • 任何會在本地常駐、持續監聽(鍵盤、麥克風、螢幕內容)或會吞大量資源的 AI 功能,一律需要顯性開關與清楚說明
    • 不要只給「關閉推薦」這種模糊選項,而是拆成:
    • 是否下載/保留本地模型
    • 是否允許背景啟動
    • 是否允許上傳使用記錄作為訓練資料

    設計「最小可用 AI」而非「最大可見 AI」

    • 少用「一刀切全局代理」,多用場景式、任務式 AI 功能(例如:只在你按下 summarise 時才啟動模型)。
    • 本地模型可以是選配,而非隱形預載:先提供雲端模式+明確提示本地模式優劣,讓用戶自行選擇是否下載那 4GB。

    把「透明+可關閉」變成品牌資產,而不是合規負擔

    • 未來監管與集體訴訟只會比 Siri 那案更兇。誰先把 AI 部署的透明度、可關閉、可刪除資料流程做清楚,誰才有資格談「信任護城河」。
    • 對開發者而言,這不只是風險控管,也是差異化機會:敢在設定頁清楚寫出模型版本、大小、更新頻率、資料走向的產品,在一片黑箱裡會顯得非常不一樣。

    對使用者來說,短期內也只有一個務實建議:

    • 能選擇瀏覽器就別只用一個,把 AI 嵌入策略最「誠實」、開關最清楚的那個,當你的主力工具。 用行為投票,比在社群上抱怨更有效。

    Chrome 偷塞 4GB AI 模型,真正畫出的底線是:AI 不再是雲端玩具,而是本地基礎設施;但誰把它當黑箱塞進來,誰就會在下一輪監管與市場修正裡付出代價。


    🚀 你現在可以做的事

    • 打開你常用瀏覽器的設定頁,檢查是否有本地 AI、隱私與資料上傳相關選項,逐一確認與關閉不必要功能
    • 嘗試安裝第二個瀏覽器,實際比較各家對 AI 功能的說明透明度與開關粒度,再決定主力工具
    • 若你是開發者或產品負責人,列出產品中所有「預設開啟」的 AI 功能,為每一項設計清楚的說明文案與顯性開關頁面