標籤: AI Agent

  • 用 Gemini Managed Agents 落地可控生產級 Agent

    用 Gemini Managed Agents 落地可控生產級 Agent

    📌 本文重點

    • Managed Agents 提供內建任務分解與狀態管理
    • hooks 讓治理、審計與風險控管更容易
    • 透過 scope 與 proxy 控制 Agent blast radius

    Gemini Managed Agents 解決的痛點很直接:你不必再自己拼一套 Agent orchestrator,卻仍然能拿到任務分解、長任務狀態管理、工具調用與可審計的事件流;同時把 blast radius、憑證外洩、錯誤恢復這些在 LangChain / 自建框架裡很容易踩到的雷收斂在一個可控的管理層裡。


    重點說明

    1. Managed Agents 的執行模型:從 session 到 hooks

    以 Gemini API 的設計來看,一個 Managed Agent 核心會用到:

    • Agent session + state 管理:官方幫你維護長任務的對話狀態、工具結果與任務進度,你只需要保存 session_id,不用自己設計 conversation store 或 workflow DAG。
    • 任務分解與工具調用:你給一個高階任務描述(例如「關閉工單並同步到 Jira」),Agent 會自行拆解成子步驟並透過你註冊的 tools 呼叫外部系統。
    • hooks 事件流:新版提供 hooks,在「工具呼叫前後」、「任務階段切換」、「錯誤發生」等時刻觸發事件,讓你可以做觀察、風險控管與自訂治理邏輯,而不必重寫整個 orchestrator。

    💡 關鍵: Managed Agents 把你原本在 LangChain / 自建 orchestrator 中分散實作的 planner、tool router、memory 與 logging middleware,收斂成一層統一管理。

    這整套等於把你平常在 LangChain / custom orchestrator 裡自己寫的:planner、tool router、memory、logging middleware,通通變成 Managed Agents 的內建能力。

    2. 為什麼不再自己從零拼 Agent 架構?

    自建 Agent 架構(LangChain 或自製 workflow engine)在 PoC 很爽,但一上生產通常會卡在幾件事:

    • 長任務與錯誤恢復
    • 自建:要自己處理 multi-step 任務的 checkpoint、重試邏輯、worker crash 後如何恢復。常見結果是「任務一半死掉,使用者不知道發生什麼事」。
    • Managed Agents:session/state、tool step 都在雲端管理,透過 hooks 你可以在每一步記錄 trace 或重試特定工具,不用自己實作 saga pattern。

    • 審計與可觀測性

    • 自建:LLM prompt/response、tool 呼叫散在各 microservice,事後要還原「Agent 當時在想什麼」很困難。
    • Managed Agents:事件流集中在 Agent 層,可以利用 hooks 把所有 decision log 打到你的 observability stack(如 BigQuery / Prometheus / OpenTelemetry)。

    • blast radius 控制與憑證管理

    • 自建:如果把雲端 root token 或 GitHub PAT 直接塞進 tool config,一個「失控 Agent」就能亂改一堆東西(OpenAI rogue agent 事件就是警示)。
    • Managed Agents:你註冊 tools 時就可限制作用域(只讀 / 特定資源)、憑證透過 secrets manager 管理,並用 hooks 做額外的風險檢查(例如禁止在非白名單 repo 寫入)。

    💡 關鍵: Managed Agents 把長任務可靠性、審計與權限治理這些生產級問題,從應用程式層搬到共用的管理平面處理。

    3. Hooks 對治理與風險控管的意義

    近期業界對「Agentic Blast Radius」討論很熱:真正危險的不是單一錯誤,而是錯誤決策被當成正常狀態寫入企業系統,後面所有流程照規格運作,卻建立在錯誤前提上。

    Managed Agents 的 hooks 剛好對應這問題:

    • before_tool_call hook,可以實作策略:
    • 檢查這次操作是否符合對應使用者的權限與當前工作流狀態。
    • 做「dry-run 模式」,先記錄 Agent 意圖,再決定是否允許真正執行。

    • after_tool_call / error hook,集中紀錄這一步的輸入、輸出與錯誤,替後續審計與調查提供完整 trace,而不是只看到最終 API error。

    💡 關鍵: 透過 hooks,你可以在「執行前」與「錯誤當下」插入治理邏輯,而不是事後才從零碎 log 裡回推 Agent 發生了什麼事。


    實作範例

    以下用兩個場景:客服流程自動化企業工單處理,用 Python SDK 為例(結構接近實際 Gemini Managed Agents API,細節以官方文件為準)。

    範例一:客服流程自動化 Agent

    目標:收到客戶訊息後,Agent 會:

    • 分類問題
    • 查詢內部知識庫
    • 若需要人工介入則建立工單
    • 把整個過程記錄在 hooks 中,方便審計

    定義 Agent 與工具

    from google.ai.generativelanguage import AgentsClient
    
    client = AgentsClient()
    
    # 定義外部工具:查詢 FAQ 與建立 Zendesk 工單
    faq_tool = {
      "name": "search_faq",
      "description": "從內部 FAQ 知識庫搜尋答案",
      "openapi_spec": "https://internal.example.com/tools/faq-openapi.json",
    }
    
    zendesk_tool = {
      "name": "create_ticket",
      "description": "在 Zendesk 建立客服工單",
      "openapi_spec": "https://internal.example.com/tools/zendesk-openapi.json",
    }
    
    # 建立 Managed Agent
    agent = client.create_agent({
      "display_name": "customer-support-agent",
      "model": "models/gemini-3.6-flash",  # **Flash** 用於快速互動場景
      "tools": [faq_tool, zendesk_tool],
      "task_spec": {
        "goal": "根據客戶訊息自動回覆或建立工單",
        "constraints": [
          "不得修改客戶資料",
          "建立工單前必須有明確分類與摘要",
        ],
      },
    })
    
    session = client.create_session({
      "agent": agent.name,
      "user_id": "user-123",  # 方便後續權限與審計
    })
    

    設定 hooks 實作觀察與風險控管

    # 假設 hooks 以 callback URL 或 Pub/Sub topic 形式註冊
    client.register_hooks({
      "agent": agent.name,
      "hooks": [
        {
          "event": "before_tool_call",
          "endpoint": "https://ops.example.com/hooks/before_tool",
        },
        {
          "event": "after_tool_call",
          "endpoint": "https://ops.example.com/hooks/after_tool",
        },
        {
          "event": "error",
          "endpoint": "https://ops.example.com/hooks/error",
        },
      ],
    })
    

    before_tool_call 的 handler,你可以檢查:

    # 伺服器端 hook handler 示意
    
    @app.post("/hooks/before_tool")
    def before_tool_hook(event: dict):
        tool_name = event["tool_name"]
        user_id = event["session_user_id"]
        payload = event["arguments"]
    
        # 權限邊界:只有 VIP 客戶可以建立高優先級工單
        if tool_name == "create_ticket" and payload.get("priority") == "high":
            if not is_vip(user_id):
                return {"allow": False, "reason": "non_vip_high_priority_blocked"}
    
        # 規則通過,允許執行
        return {"allow": True}
    

    這樣工具呼叫前就有一層明確的治理邏輯,而不是讓 Agent 任意決定。

    長任務與重試

    客服場景可能會遇到:外部 Zendesk API 短暫掛掉。Managed Agents 幫你 keep session,你只需要在 hooks 裡做重試策略:

    @app.post("/hooks/error")
    def error_hook(event: dict):
        if event["tool_name"] == "create_ticket" and is_retryable(event["error"]):
            # 觸發外部重試流程,或要求 Agent 改用 fallback 策略
            schedule_retry(event["session_id"], step_id=event["step_id"])
    
        log_to_observability_stack(event)
        return {"ack": True}
    

    範例二:企業內部工單處理工作流

    目標:IT 服務台 Agent:

    • 接收使用者問題
    • 查詢 CMDB / 知識庫
    • 規劃解決步驟
    • 在 Jira 更新工單狀態

    這裡重點在權限邊界與憑證管理

    工具註冊與憑證管理

    你不應該讓 Agent 直接拿到 Jira 的 admin token,而是用受限憑證 + 後端 proxy:

    jira_tool = {
      "name": "update_jira_issue",
      "description": "更新 Jira 工單狀態與評論",
      "openapi_spec": "https://proxy.example.com/tools/jira-openapi.json",
      "auth": {
        "type": "service_account",  # **不要**用個人 PAT
        "scopes": ["jira:issue:write"],
        "role": "it-helpdesk-agent",  # 僅能操作特定 project
      },
    }
    
    agent = client.create_agent({
      "display_name": "it-ticket-agent",
      "model": "models/gemini-3.6-pro",  # 較複雜決策可用 pro
      "tools": [jira_tool],
      "task_spec": {
        "goal": "協助處理 IT 工單並維護 Jira 狀態",
        "constraints": [
          "不得刪除工單",
          "不得變更工單 reporter",
        ],
      },
    })
    

    後端 jira-openapi proxy 再做第二層防護:即使 Agent 誤用工具,也只能變更有限欄位。

    處理長任務超時

    工單處理有時會涉及人工確認,可能是跨多小時甚至多天的 session。Managed Agents 的好處是你可以:

    • session_id 存在工單系統欄位
    • 每次使用者回覆時,用同一個 session 呼叫 continue API
    # 使用者在 Jira 回覆時觸發
    
    session_id = issue.fields.agent_session_id
    
    response = client.continue_session({
      "session": session_id,
      "user_message": latest_comment,
    })
    
    # 若 session 已超時,可設計恢復策略,例如:
    if response["status"] == "SESSION_EXPIRED":
        new_session = client.create_session({"agent": agent.name, "user_id": issue.reporter})
        # 把舊工單摘要作為新 session 的起始 context
    

    你不需要自己處理 session token 過期與狀態重建邏輯,Agent 層會告訴你目前 session 狀態,再透過 hooks 或外部邏輯決定如何恢復。


    建議與注意事項

    1. 控 blast radius:先縮小可寫入面再放手給 Agent

    • 在工具設計上,優先提供 read-only 工具,寫入工具要:
    • 有明確 scope(特定 project/repo/表格)
    • 綁定 service account,而不是廣泛的雲端管理員權限

    • 搭配 hooks 實作:

    • 白名單檢查(只能操作特定資源 ID 範圍)
    • 寫入前的「二次確認模式」(例如需要人為核准才能執行某些寫操作)

    2. 與既有工作流引擎的職責邊界

    很多團隊已經有 Airflow / Temporal / Argo 做批處理或長流程編排,Managed Agents 不應該去取代它們,而是:

    • 工作流引擎:負責確定性的步驟排程、重試、依賴關係管理。
    • Managed Agents:負責「不確定性決策」:
    • 推論要走哪種處理路徑
    • 生成填寫資料或評論內容
    • hooks 形式把決策結果回傳給工作流引擎,再由後者執行關鍵性指令。

    實務上可以讓 Airflow / Temporal 透過 Gemini API 啟動 Agent session,Agent 只負責決策與內容生成,真正的 API 呼叫仍由工作流引擎執行,降低 blast radius。

    3. 可觀測性與 A/B 模型替換策略

    • logging / trace
    • 把每個 hooks event 打進集中式 log(如 GCP Logging + BigQuery),至少紀錄:session_idstep_idtool_name、意圖摘要、結果。
    • 若使用 OpenTelemetry,可以在 hooks 裡附上 trace_id,方便跨服務串接。

    • A/B 模型替換

    • 不要直接在生產環境把 model 換成新版本,先透過 hooks 做 shadow traffic:
      • 真正回應使用者仍用舊模型
      • 同時讓新的 Agent/模型在背景計算建議,記錄差異
    • hooks event 製作評估報表:比較錯誤率、tool 調用次數、平均成本,再決定是否切換正式模型。

    4. 遷移既有 LangChain / 自建 Agent 的建議

    • 先盤點現有架構中:
    • 任務分解(planner)
    • 工具 router
    • 狀態存儲(conversation/memory store)
    • logging / audit middleware

    • 遷移策略:

    • 優先把工具封裝成 Managed Agents 的 tools(API proxy + scope 控制)。
    • 用 Gemini Managed Agents 取代 planner + router + state 部分,保留原本的資料存取與工作流引擎。
    • hooks 把事件打回你原有的 observability stack,避免多套 monitoring。

    結論:如果你的專案已經開始碰到「長任務、錯誤恢復、權限治理、審計」這些生產級問題,Gemini Managed Agents + hooks 能讓你少維護一套自建 orchestrator,同時在 blast radius 控制與風險治理上有更明確的技術支點。

    🚀 你現在可以做的事

    • 盤點現有 LangChain / 自建 Agent 架構中的 planner、router、state 與 logging 元件
    • 挑選一個實際場景,將現有工具封裝成 Managed Agents 的 tools 並接上 hooks
    • 在現有工作流引擎(如 Airflow / Temporal)中試驗以 Managed Agents 處理決策層,並導出 hooks log 進入你的 observability stack
  • Claude Cowork 上手機:養成你的常駐 AI 助理

    Claude Cowork 上手機:養成你的常駐 AI 助理

    📌 本文重點

    • Cowork 讓 Claude 變成可在背景長駐工作的 AI 助理
    • 透過工作區管理跨裝置、跨檔案的長期任務
    • 適合用來做定期摘要、日報整理與開發輔助
    • 從「每天自動幫你完成一件事」開始實作工作流

    用一句話說清楚:Claude Cowork 讓 AI 不再只在聊天室裡回話,而是變成一個能在背景長駐工作、跨裝置接續任務的「常駐助理」

    入口:Claude 官網(含 Cowork 介紹) 👉 https://claude.ai / 官方部落格 Cowork 更新 👉 https://claude.com/blog/cowork-web-mobile/


    從「聊天機器人」到「長駐工作代理」的差異

    一般聊天機器人:
    – 你問,它答;關掉視窗就結束
    – 不會自己記得「每天幫你做什麼」
    – 無法主動在不同裝置延續同一個工作

    Claude Cowork 則是:
    – 可以在背景持續跑任務,即使你把筆電蓋上(參考:The Decoder 報導
    – 任務狀態會在手機與網頁同步顯示,需要你決策時會推送通知
    – 能接觸你的檔案、工具,變成一個真正「在幫你工作」的代理人

    💡 關鍵: Cowork 把 Claude 從「被動聊天」升級成「主動持續執行任務」的長駐工作代理。

    你可以立刻做的事:不是開新聊天,而是創建一個「工作區(workspace)」當成長期任務中心,把「每天要做的事」交給 Cowork。


    核心功能:打造長駐 AI 助理的三件事

    1. 背景任務:筆電蓋上,Cowork 照跑

    根據多家媒體(WiredTechCrunch)的描述,Cowork 的重點是:

    • 任務在雲端執行,不綁定你現在是否開著桌面 App
    • 例如「幫我整理過去一週會議紀錄並產出綜合報告」:
    • 你在辦公室丟給 Cowork
    • 下班路上用手機收到完成通知
    • 回家打開桌機直接接續修改,而不是重跑一次

    可立即行動:
    – 建一個「每週報告」工作區,丟入你的 Google Drive / 本地資料夾連結
    – 給 Cowork 的任務指令範例:

    「每週五下午 4 點,整理本週 meeting-notes 資料夾所有檔案,產出:1)高層摘要 2)各專案進度 3)待決策事項,完成後用行動裝置通知我。」


    2. 跨裝置同步:桌面開始,手機接力

    依照 The Verge 報導,Cowork 已支援:

    • Mac / Windows 桌面 App
    • iOS / Android 手機 App
    • 網頁版介面

    任務和對話在雲端執行,所以:

    • 在公司桌機創建的工作區,可以在手機打開繼續看進度
    • 手機上修改指令(例如追加「附上簡報大綱」),桌面端打開就已是更新後的結果

    可立即行動:
    – 在桌面端設定一個「文件摘要」工作區
    – 通勤時用手機檢查 Cowork 進度,直接在手機上標註「需要修改」「需要補充的資料」


    3. 檔案與工具整合:讓 Cowork 有「工作材料」

    目前完整檔案存取仍以桌面版為主(The Verge 指出本地檔案進階功能偏向桌面),但基本整合可以這樣用:

    • 連結雲端儲存(如 Google Drive、Dropbox,依照 Claude 實際支援情況)
    • 在桌面端授權 Cowork 讀取特定資料夾
    • 用工作區管理不同專案:
    • 專案 A:行銷素材與報表
    • 專案 B:程式碼與技術文件

    可立即行動:
    – 整理一個「給 Cowork 用」資料夾,只放:
    – 報告原始資料
    – 會議紀錄
    – 需求文件
    – 在授權時只開放這一個資料夾,降低風險又方便自動化。

    💡 關鍵: 只授權「專門給 Cowork 用」的資料夾,可以同時享受自動化與較低的資料風險。


    適合誰用?三個可直接上手的場景

    場景一:長文與報告「定期摘要排程」

    用途:讓 Cowork 每天或每週幫你把長文、內部報告整理成可快速閱讀的摘要。

    操作思路:
    1. 建立工作區:daily-summary
    2. 在桌面端讓 Cowork 讀取「今日讀物」資料夾(你把 PDF、長文存進去)。
    3. 給任務模板:

    「每天晚上 9 點,將 daily-reading 資料夾新增的檔案各自產出:1)三點摘要 2)兩個可行行動 3)一段可以分享給團隊的說明。」
    4. 用手機在睡前看摘要,隔天在桌面整理成 Notion / Confluence 條目。


    場景二:簡單 RPA:每日匯總郵件 / 文件

    用途:把「每天重複做的整理工作」交給 Cowork,類似輕量 RPA。

    可做的例子:
    – 每日營運數字匯總
    – 每日客服回覆重點整理
    – 每日待辦事項從不同系統抓出來(視整合能力而定)

    操作思路:
    1. 建立工作區:daily-ops
    2. 把相關 CSV / 報表下載到指定資料夾,或用雲端連結提供給 Cowork。
    3. 給指令:

    「每個工作天 6 點,把今天新增的報表檔案合併成一份日報:包含趨勢圖、異常提醒與需要我決策的三件事,完成後傳行動端通知。」
    4. 下班路上用手機看成品,回家在桌面細調或轉寄主管。


    場景三:程式開發側寫與靈感管理

    這部分可結合類似 Claude Code 的能力(參考 Towards AI 案例),讓 Cowork當作你的「側寫開發夥伴」:

    用法舉例:
    – 把一個 side project 的 repo 和需求文件丟進 Cowork 工作區
    – 讓 Cowork:
    – 每天整理「今天新增 issue 的優先順序」
    – 為新功能產出技術方案和測試案例
    – 把你零碎記在手機裡的點子,歸類回專案 roadmap

    指令範例:

    「持續追蹤 micro-saas 專案 repo 變更,幫我:1)每天產出 commit 摘要 2)標記可能的重構機會 3)把我在手機備忘錄標記 idea 的文字整合成一份 feature backlog。」


    怎麼開始:一步步打造你的第一個常駐工作流

    第一步:註冊 Claude 帳號

    1. 進入 https://claude.ai
    2. 使用 Email 或 Google 帳號註冊
    3. 若你是重度使用者,可留意 Cowork 目前先對 Max 用戶優先開放(依 The Verge 報導)。

    💡 關鍵: 若你是 Claude Max 用戶,能優先體驗 Cowork 提供的長駐任務能力。

    第二步:在桌面端創建 Cowork 工作區

    1. 安裝桌面 App(Mac / Windows),從官網下載。
    2. 登入後,在側邊欄找到「Cowork / Workspaces」入口。
    3. 建立一個新工作區:
    4. 名稱:例如 daily-auto-tasks
    5. 說明:簡短寫上「每天自動幫我完成 X 事」
    6. 在工作區裡上傳或連結必要檔案、資料夾。

    最小工作流範例(每天自動幫你完成一件事):

    目標:每天幫你整理「今日重點三行」並發送到你的手機。

    設定方式:
    – 工作區:today-brief
    – 資料來源:
    – 你白天把重要 Email / 文件存到 today-input 資料夾
    – 或把連結貼進同一工作區的對話裡
    – 給 Cowork 的長期指令:

    「每晚 8 點:1)檢查今天新增的文件與連結;2)整理出『今日三行摘要』(包含決策、風險、進展各一);3)用簡短訊息格式回報,適合在手機上快速閱讀。」

    這樣你每天只要:
    – 白天隨手把重要東西丟進 today-input
    – 晚上打開 Claude 手機 App,就能看到 Cowork 已經整理好的三行重點


    第三步:在手機端接續任務

    1. 下載 Claude App(iOS / Android,依官方提供的商店連結)。
    2. 同帳號登入後,點選剛才建立的工作區 today-brief
    3. 啟用通知:
    4. iOS / Android 系統層級允許通知
    5. 在 App 內確認 Cowork 任務提醒已開啟
    6. 從手機端:
    7. 直接回覆 Cowork:「明天開始也加上 X 指標」
    8. 或新增新任務,例如「幫我把今天摘要轉成明早要用的簡報大綱」。

    第四步:權限與資料安全設定提醒

    為了兼顧便利與安全,建議:

    • 最小授權原則
    • 只讓 Cowork存取「專門給它用」的資料夾,不要整個硬碟打開
    • 雲端服務(Drive / Dropbox)只授權特定目錄
    • 敏感資料拆開
    • 內含客戶個資、公司機密的文件不要直接丟入,改用匿名化摘要
    • 定期檢查工作區內容
    • 每週檢查一次有哪些檔案在授權範圍內
    • 調整已不需要的工作區與任務,避免長期累積風險

    小結:從一個「每天自動幫你完成 X 事」開始

    你不需要一開始就做很複雜的自動化,只要:

    1. 選一件你每天都在重複做的事(整理摘要、日報、程式變更紀錄)。
    2. 建一個 Cowork 工作區,給它穩定的資料來源。
    3. 設定「每天固定時間」的背景任務,打開手機收結果。

    當你習慣讓 Cowork「常駐工作」之後,再慢慢增加:更多資料來源、更多專案工作區,最後你的 AI 助理就真的會在你不看螢幕時持續幫你工作,而不是只在聊天室裡等你開口。

    🚀 你現在可以做的事

    • 立刻到 Claude 官網 註冊並安裝桌面與手機 App,啟用 Cowork
    • 建立第一個工作區 today-brief,設定每天晚上的「三行摘要」任務
    • 整理一個專門給 Cowork 用的資料夾,開始把日常重要文件與連結丟進去讓它長駐幫你處理
  • 讓 AI 直接改你的 Word、Excel、PPT

    讓 AI 直接改你的 Word、Excel、PPT

    📌 本文重點

    • 讓 AI 直接操作 Word/Excel/PPT 檔案
    • OfficeCLI 適合與 Agent+腳本整合自動化流程
    • 先用「不心疼的文件」試跑完整讀改寫流程

    只用聊天讓 AI「給建議」還不夠,OfficeCLI 讓模型真的可以打開你的 Word、Excel、PPT,讀內容、改排版、算公式、生成簡報。

    工具連結:OfficeCLI GitHub


    核心功能:讓模型操作 Office 檔案,而不是你自己手動點

    OfficeCLI 是一個命令列工具(CLI),設計給 AI Agent 使用,但你也可以自己在終端機裡直接用。核心可以分成三類:

    1. 操作 Word:讀字+改內容+調樣式

    你可以讓模型:

    • 讀取 .docx 內容變成純文字,丟給 LLM 做摘要、改寫、翻譯
    • 依照模型輸出的指令,直接修改段落文字(新增、刪除、重寫某一章)
    • 調整樣式:標題層級、粗體、顏色、清單格式

    可行動做法:

    • 把一份報告初稿丟給模型,請它「重寫成給主管看的版本」,再用 OfficeCLI 把修改結果寫回原本 Word 檔,而不是你手動 Copy & Paste。

    2. 操作 Excel:讀表+算公式+生成新表

    OfficeCLI 可以讓 Agent:

    • 讀取多個工作表的資料,轉成結構化格式給模型分析
    • 新增欄位、列出關鍵 KPI、填入公式(SUMAVERAGEVLOOKUP 等)
    • 依照模型的建議建立新的工作表,用來放整理過的結果或圖表資料源

    可行動做法:

    • 給模型一個「原始交易紀錄」Excel,請它:
    • 建一個新工作表 KPI_Report
    • 幫你算出每月營收、客單價、流失率
    • 把結果整理成適合直接插入圖表的格式

    💡 關鍵: 把「讀原始表 → 算 KPI → 生成新表」整個流程交給 OfficeCLI+LLM,可以把每月重複的報表整理工作變成一鍵腳本。


    3. 操作 PowerPoint:生成與微調簡報

    OfficeCLI 支援 PowerPoint 檔案:

    • 讀取每一頁投影片的標題與內容
    • 新增或刪除投影片
    • 更新某一頁的文字方塊(例如換成模型生成的重點整理)

    可行動做法:

    • 把一份 Excel 月報+幾段文字說明給模型,請它先產出「投影片結構與內容草稿」,再用 OfficeCLI 寫進一份新的 .pptx,生成可直接開啟的簡報檔。

    適合誰用:幾個具體場景

    場景 1:自動產出月報簡報

    你現在的流程:

    1. 每月從系統匯出 Excel 報表
    2. 手動整理數字、貼到 PPT
    3. 想標題、寫重點、調整版面

    用 OfficeCLI+LLM 的新流程:

    1. 把原始 Excel 放在固定資料夾
    2. 寫一個簡單腳本:
    3. 用 OfficeCLI 讀 Excel
    4. 把數據丟給模型請它產出「月報重點+簡報大綱」
    5. 用 OfficeCLI 建立新的 PPT,依模型輸出寫入每一頁內容
    6. 最後只需要開啟 PPT,微調設計與少數文字

    可行動做法:先從「只讓 AI 幫你生成大綱與每頁標題」開始,內容可以再自己補,降低信任門檻。


    場景 2:整理一堆 Excel 原始數據成圖表+分析

    典型情境:行銷、產品、營運會有很多:點擊、轉換、工單、留存數據,全在 Excel。難的是「整理出看得懂的表+圖」。

    用 OfficeCLI,你可以:

    • 指定一個資料夾裡所有 Excel 檔,請 Agent 逐一讀取
    • 讓模型決定要留下哪些欄位、怎麼清洗資料(刪除缺漏、轉成正確型態)
    • 生成一個匯總報表工作表,包含:
    • 每個渠道 / 產品線的指標
    • 建議要畫的圖表(折線圖、長條圖等)所需的資料

    可行動做法:先選一個指標(例如「網站流量 x 轉換率」),用 OfficeCLI 做一個自動匯總報表,跑通一次流程,之後再擴展到更多 KPI。

    💡 關鍵: 先從單一指標的自動匯總起步,比一開始就要全覆蓋所有 KPI,更容易驗證數字正確性與提升團隊信任。


    場景 3:讓客服 Agent 直接更新 FAQ 文件

    很多團隊會有一份 Word FAQ 或知識庫檔:

    • 新問題出現,要有人手動編輯文件
    • 內容常常落後實際客服狀況

    用 OfficeCLI,你可以:

    • 讓客服 Agent 在處理完一批工單後,分析常見問題和回答
    • 自動比對現有 FAQ Word 檔:
    • 如果沒有對應條目,就新增一段 Q&A
    • 如果回答過時,就更新文字

    可行動做法:先讓 Agent 提出「修改建議」存成另一份 Word(例如 FAQ_suggested.docx),由人工審核後再整合到正式 FAQ,逐步建立信任再放權直接改正式檔案。


    怎麼開始:從一個指令讓模型讀 Excel 並生成報表

    1. 安裝 OfficeCLI

    前提:已安裝 Python 3.10+ 和 Git。

    在終端機(Terminal / PowerShell)輸入:

    pip install officecli
    

    安裝完可以先輸入:

    officecli --help
    

    確認有指令可用。


    2. 最簡單示範:讀一個 Excel 並生成報表

    假設你有一個 data/sales_raw.xlsx,想讓模型幫你整理成一個 KPI 報表:

    步驟示意(概念):

    1. 用 OfficeCLI 把 Excel 轉出成 CSVJSON 給 LLM
    2. 讓模型決定要生成的欄位與指標
    3. 用 OfficeCLI 新增一個工作表 KPI_Report,把模型結果寫進去

    範例腳本(Python 語意示意):

    from officecli import excel
    from openai import OpenAI
    
    client = OpenAI()
    
    # 1. 讀取原始 Excel
    wb = excel.load_workbook("data/sales_raw.xlsx")
    sheet_data = excel.sheet_to_dicts(wb["Sheet1"])  # 每列變成 dict
    
    # 2. 丟給模型請它設計報表
    prompt = """
    你是一位數據分析師。以下是銷售原始資料,請幫我整理成一份 KPI 報表,包含:
    - 每月總營收
    - 平均客單價
    - 訂單數量
    請回傳 JSON,格式為:
    {
      "columns": ["month", "revenue", "avg_order_value", "orders"],
      "rows": [ ... ]
    }
    """
    
    resp = client.responses.create(
        model="gpt-4.1-mini",
        input=[{"role": "user", "content": prompt + "\n" + str(sheet_data)}]
    )
    
    kpi = resp.output[0].content[0].text
    
    # 3. 寫回新的工作表
    kpi_wb = excel.create_workbook()
    excel.write_json_to_sheet(kpi_wb, "KPI_Report", kpi)
    excel.save_workbook(kpi_wb, "data/sales_kpi.xlsx")
    

    可行動做法:照這個流程改成你自己的欄位與需求,把第一份「自動 KPI 報表」做出來,確認數字沒有問題後,再考慮加入圖表與文字說明。


    3. 串進自己的 Agent:讓排程每天自動更新 KPI 報表

    要讓這套流程每天自動跑,大致分三步:

    1. 寫好一個腳本
    2. 用 OfficeCLI 讀當日最新 Excel
    3. 叫 LLM 算 KPI
    4. 用 OfficeCLI 更新指定報表檔(例如 KPI_daily.xlsx

    5. 加進排程

    6. Windows:用工作排程器(Task Scheduler)每天 09:00 執行腳本
    7. macOS / Linux:用 cron,例如:

    bash
    0 9 * * * /usr/bin/python /path/to/update_kpi.py

    1. 加一層通知
    2. 報表生成後發一封 Email 或 Slack 訊息,提醒同事報表已更新

    可行動做法:先把腳本寫好,在終端機手動執行,確認整個 Excel→LLM→Excel 流程沒問題,再加排程,避免每天自動跑出錯卻沒人注意。

    💡 關鍵: 先人工確認幾次排程腳本的輸出,把錯誤風險壓低,再全面自動化,能避免在正式報表上出現難以察覺的錯誤。


    與其他方式的比較

    很多人會用「AI 外掛」或「手動 Copy & Paste」來改 Office 文件,OfficeCLI 的差異在於它是給 Agent 和腳本用的 CLI 工具,適合自動化流程。

    名稱 核心功能 免費方案 適合誰
    OfficeCLI CLI 操作 Word/Excel/PPT 給 Agent 用 開源、免費 想用程式+Agent 自動化的人
    Office 外掛 AI 在 Word/Excel 內聊天生成內容 部分帳號可免費 只想在文件內用聊天的人
    手動 Copy & Paste 人工搬運 AI 生成文字到文件 永遠免費 不寫程式、量很小的使用者

    如果你已經在寫腳本、用 Agent 處理工作流程,OfficeCLI 是目前比較直接、可控的選擇。


    小結:先讓 AI 改一份你不心疼的文件

    第一次用時,建議選一份「可以錯、可以重來」的文件做實驗:

    1. 準備一個 Excel 或 Word 副本
    2. 用 OfficeCLI 讓模型讀、改、寫回
    3. 看結果是否符合預期,再逐步放到正式流程

    當你跑通第一次,就會發現:AI 不只會「給你建議」,而是可以像實習生一樣,直接幫你動手調整文件——只是這次,你用 OfficeCLI 把它變成可以排程、可以重複使用的自動化流程。


    🚀 你現在可以做的事

    • OfficeCLI GitHub 安裝並在終端機輸入 officecli --help 熟悉可用指令
    • 挑一份「月報用的 Excel 副本」,依文中範例腳本實作你的第一個自動 KPI 報表
    • 寫一個簡單排程腳本,先手動每天跑一次 Excel→LLM→Excel 流程,確認穩定後再用 cronTask Scheduler 全面自動化
  • Claude Sonnet 5 低成本 Agent 實戰指南

    Claude Sonnet 5 低成本 Agent 實戰指南

    📌 本文重點

    • Sonnet 5 適合作為預設 Agent 主力模型
    • 成本遠低於頂級模型且能力接近 Opus
    • 長上下文與工具調用適合多步驟工作流
    • 安全策略偏保守,較利企業導入

    Claude Sonnet 5 解決的痛點很直接:想做多步驟 Agent 工作流,但 Opus / GPT 旗艦太貴、開源模型又不夠穩。Sonnet 5 在長上下文、工具調用和安全策略上已能覆蓋大多數企業場景,同時單 token 成本顯著低於頂級模型,適合作為預設 Agent 基座,只在少數高難度任務再切換到更強模型。


    重點說明:為什麼 Sonnet 5 值得當主力 Agent 模型?

    1. 能力與成本曲線:接近 Opus,價格接近中階

    根據公開基準與 The Decoder 報導,Claude Sonnet 5 在 GDPval-AA v2 知識工作測試上已超過 Opus 4.8,但定價仍是「中階模型」等級。

    💡 關鍵: Sonnet 5 在知識工作表現已追近甚至超過頂級模型,但價格仍是中階,適合作為大多數任務的預設主力。

    實際含義:

    • 一般知識工作 / 文件處理 / 商務決策代理,Sonnet 5 足以勝任,不需要 Opus 級別。
    • 若你現在線上大量跑 GPT-4.5 / GPT-5.5 這類旗艦模型,把 70–80% 任務切到 Sonnet 5,只在高風險、高價值 task 才升級模型,通常能立刻降下 30–50% API 費用。

    2. 長上下文 + 工具調用:更適合多步驟流水線

    實務上 agent 不是一兩輪對話,而是:

    1. 讀長文件 / 多來源資料
    2. 規劃任務
    3. 多輪工具調用(DB / API / Code Interpreter
    4. 產出決策或報告

    Sonnet 5 的優勢:

    • 長上下文:支援巨大 context(依官方規格,多數情境已可覆蓋數十萬 token 級)。對 RAG + workflow 代表:
    • 可以減少 aggressive chunking,讓模型一次看到完整流程 / 合約 / 需求文檔。
    • 可以把多輪工具結果與中間推理保留在同一對話,減少「忘記之前做了什麼」。
    • 工具調用(Tool Use):支援結構化工具 schema,類似 OpenAI functions / tools,並在安全策略上更保守(例如對可疑指令會自動拒絕調用某些敏感工具)。這對企業代理的好處是:
    • 減少「亂調 API」的風險
    • 在合規敏感場景(金融、法務)較容易通過審查

    3. 安全策略:有意識地「不做太強」的資安能力

    Anthropic 明確說 Sonnet 5 在網路攻擊和資安任務上的能力刻意壓低,低於某些已被政府封鎖的模型。這點對企業是加分:

    • 碼農代理 / DevOps Agent場景,可以寫 code、修 bug,但不太會幫你設計攻擊腳本。
    • 對內部稽核來說,可當作「內建安全減速器」,搭配額外安全層更容易說服安全部門。

    實作範例:用 Sonnet 5 搭建多步驟 Agent 工作流

    以下用類 pseudo-code 展示一個文件審閱 + 系統操作的多步驟 Agent pipeline,並示範如何在 Sonnet 5 / Opus / 開源模型間切分任務。

    1. 基本呼叫:帶工具的 Sonnet 5 Agent

    import anthropic
    
    client = anthropic.Anthropic(api_key=ANTHROPIC_API_KEY)
    
    TOOLS = [
      {
        "name": "fetch_contract",
        "description": "依 contract_id 取得最新合約全文",
        "input_schema": {
          "type": "object",
          "properties": {"contract_id": {"type": "string"}},
          "required": ["contract_id"]
        }
      },
      {
        "name": "update_crm",
        "description": "更新 CRM 中的客戶標籤與備註",
        "input_schema": {
          "type": "object",
          "properties": {
            "customer_id": {"type": "string"},
            "tags": {"type": "array", "items": {"type": "string"}},
            "note": {"type": "string"}
          },
          "required": ["customer_id", "note"]
        }
      }
    ]
    
    SYSTEM_PROMPT = """
    你是一個企業合約審閱 Agent:
    - 先閱讀合約與上下文
    - 給出風險摘要與建議
    - 如有需要,呼叫工具 fetch_contract / update_crm 完成任務
    - 僅在確定資訊足夠時才更新 CRM
    """
    
    resp = client.messages.create(
      model="claude-3.7-sonnet-5",  # **核心:以 Sonnet 5 當主力 agent**
      max_tokens=2048,
      temperature=0.2,
      system=SYSTEM_PROMPT,
      tools=TOOLS,
      messages=[{
        "role": "user",
        "content": [
          {"type": "text", "text": "請審閱合約 C-2025-018,並視需要更新 CRM。"}
        ]
      }]
    )
    
    for content_block in resp.content:
      if content_block.type == "tool_use":
        tool = content_block
        if tool.name == "fetch_contract":
          contract = fetch_contract_from_db(tool.input["contract_id"])  # 你的實作
          # 把 tool result 回傳給 Sonnet 5,形成多輪 agent 流程
          resp = client.messages.create(
            model="claude-3.7-sonnet-5",
            max_tokens=2048,
            messages=[
              {"role": "assistant", "content": [tool]},
              {"role": "user", "content": [{
                "type": "tool_result",
                "tool_use_id": tool.id,
                "content": contract
              }]}
            ]
          )
    

    重點設定:

    • model:用 claude-3.7-sonnet-5 當預設 Agent,引導它做規劃 + 工具決策
    • tools:一定要寫清楚用途與輸入 schema,Sonnet 5 的工具調用在描述清晰時會穩定很多。
    • temperature=0.2:工作流類場景建議偏低,避免「創造力」帶來流程偏離。

    2. 多模型架構:什麼給 Sonnet 5,什麼留給 Opus / 開源?

    可採用一個簡單的 routing layer

    from enum import Enum
    
    class TaskClass(Enum):
      KNOWLEDGE_WORK = "knowledge_work"  # 合約審閱、報告撰寫
      HEAVY_REASONING = "heavy_reasoning"  # 複雜架構設計、難題推理
      LIGHT_UTILITY = "light_utility"  # 文本清洗、格式轉換
    
    
    def route_model(task: TaskClass) -> str:
      if task == TaskClass.KNOWLEDGE_WORK:
        return "claude-3.7-sonnet-5"  # **主力:成本與能力平衡點**
      if task == TaskClass.HEAVY_REASONING:
        return "claude-3.7-opus"      # 僅在高價值、關鍵決策時啟用
      if task == TaskClass.LIGHT_UTILITY:
        return "local-llama-3.2-8b"   # 或任一開源模型,跑在自家 GPU
    
    
    # 用法
    model_id = route_model(TaskClass.KNOWLEDGE_WORK)
    resp = client.messages.create(
      model=model_id,
      ...
    )
    

    實務建議:

    • 70–80% 任務:給 Sonnet 5(常駐 Agent、日常工作流)。
    • 10–20% 高難度:需要高可靠 reasoning / 風險極高決策 → 升級到 Opus / GPT-5.5 類。
    • 剩餘雜務:可以用開源模型批量處理(log 清洗、模板生成、簡單分類)。

    3. 記憶系統整合:避免「每次都要重新教」

    參考 Hermes 記憶系統的經驗,問題通常不在模型,而在記憶層設計

    核心做法:

    • Agent 視為「無狀態推理引擎」,持久狀態放在你自己的記憶服務DB + 向量庫)。

    簡化示意:

    # 1) 從 persistent storage 取出該使用者的長期記憶
    memories = memory_store.query(user_id="u_123", top_k=10)
    
    # 2) 把記憶壓縮成 system / context 提示
    memory_context = compress_memories(memories)  # 用另一個 Sonnet 5 批次壓縮也可以
    
    resp = client.messages.create(
      model="claude-3.7-sonnet-5",
      max_tokens=1536,
      system=f"""
    你是長期協助用戶的個人工作助理。
    以下是你對此用戶的長期記憶摘要,請在回應時優先參考:
    {memory_context}
    """,
      messages=[...
      ]
    )
    
    # 3) 回合結束後,把對話摘要寫回記憶系統
    summary = summarize_with_sonnet5(conversation_turn)
    memory_store.upsert(user_id="u_123", content=summary)
    

    重點:不要期待 Sonnet 5 自己「記得」所有歷史;記憶是架構問題,不是換模型就會好的問題


    建議與注意事項:真實專案導入 Sonnet 5 的坑

    1. Token 預算:Agent 能力被低估,成本也容易失控

    英國 AISI 的研究指出:把 token budget 放大 10 倍,軟體工程任務成功率可提升約 25%。這對 Sonnet 5 有兩個實務啟示:

    💡 關鍵: 在多步驟任務中適度提高 token budget,往往能顯著提升成功率,但必須搭配明確的預算控管機制。

    1. 不要用 benchmark 上的「單輪小 budget」結果直接低估 Sonnet 5 的 agent 能力。
    2. 真實系統要 顯式設計 token 過程控管,否則長上下文 + 多輪工具調用會把帳單拉爆。

    實作建議:

    • 在你的 orchestrator 層做全任務 token 上限,例如:
    MAX_TASK_TOKENS = 40_000
    
    state = {
      "tokens_used": 0,
      "steps": 0
    }
    
    while not done:
      resp = client.messages.create(...)
      state["tokens_used"] += resp.usage.input_tokens + resp.usage.output_tokens
      state["steps"] += 1
      if state["tokens_used"] > MAX_TASK_TOKENS:
        raise BudgetExceededError("Agent token budget exceeded")
    
    • 對於單次調用,根據場景設 max_tokens
    • 報告生成:1024–4096
    • 工具決策:256–768
    • 中間思考(chain-of-thought)可用隱式提示 + 上限控制,避免瘋狂自言自語。

    2. 錯誤恢復與重試:不要讓 Agent 一路跑到爆掉

    Sonnet 5 在工具調用上普遍穩定,但實務上仍會遇到:

    • 工具輸入 schema 不符合
    • 工具執行失敗(timeout / 400 / 500
    • Agent 因缺 context 做出錯誤決策

    最佳實踐:

    1. 工具層要有自己的驗證與重試,不要完全相信模型輸入。
    from pydantic import BaseModel, ValidationError
    
    class UpdateCrmPayload(BaseModel):
      customer_id: str
      tags: list[str] = []
      note: str
    
    
    def handle_tool_call(tool):
      try:
        payload = UpdateCrmPayload(**tool.input)
      except ValidationError as e:
        # 把錯誤回傳給 Sonnet 5,請它修正輸入
        return {"status": "invalid_input", "error": str(e)}
    
      try:
        res = call_crm_api(payload)
        return {"status": "success", "result": res}
      except Exception as e:
        return {"status": "tool_error", "error": str(e)}
    
    1. Agent 本身做step-level checkpoint:每完成一個關鍵子任務就落盤,失敗時從最近 checkpoint 重跑,而不是從頭開始。

    3. 任務適配:什麼放 Sonnet 5,什麼不要硬塞給它

    適合用 Sonnet 5 當主力的任務:

    • 多步驟 知識工作代理:合約 / 法遵審閱、財報分析、專案規劃、需求拆解。
    • 工具中樞 Agent:負責 orchestrate 多個內部服務與子 Agent
    • 長上下文流程:需要消化大量規格、流程文件後再操作系統。

    建議留給 Opus / 更強模型的任務:

    • 高風險決策:例如金融交易策略生成、法務最終意見草擬。
    • 需要極高推理深度的算法 / 架構設計題。

    建議留給更小 / 開源模型的任務:

    • 批量格式轉換、log 清洗與標註。
    • 嚴格成本敏感、但容錯率高的場景(例如內部搜尋候選排序)。

    4. 安全防護與供應鏈攻擊:不要只相信模型的「安全訓練」

    近期多個 AI Agent 供應鏈攻擊案例(prompt injection、工具回傳惡意內容、外部 API 回傳帶有攻擊指令的文字)提醒我們:

    • Sonnet 5 的安全性 是加分項,但不是防火牆

    💡 關鍵: 模型層安全訓練無法取代系統層權限控管與審核機制,特別是在 Agent 能直接操作內部系統時。

    • 尤其在 Agent 可以訪問內部系統時,要額外注意:
    • 工具白名單 + 嚴格權限:不同 Agent 只能看 / 改自己該動的系統。
    • 對所有來自外部世界的文字,在餵回模型前做最小化與清洗,避免讓外部 prompt 直接控制 Agent
    • 關鍵操作(轉帳、刪除資料、變更權限)一律加 人類確認 / 多重簽核,不要讓 Sonnet 5 直接下手。

    把 Claude Sonnet 5 當成「預設 Agent 基座」來設計系統,搭配:

    • 明確的多模型路由
    • 顯式的 token 預算與錯誤恢復
    • 外掛記憶系統與安全層

    你可以在不爆成本的前提下,把原本只能在 POC 裡玩的 Agent 工作流,真正放進生產環境跑起來。

    🚀 你現在可以做的事

    • 審視現有 GPT-4.5 / 5.5Opus 使用場景,標記出可降級給 claude-3.7-sonnet-5 的 70–80% 任務
    • 在現有 Agent 架構中加入 route_model() 邏輯,實作多模型路由與 token 預算控管
    • 建立一個簡單的記憶服務(DB + 向量庫),將 Sonnet 5 當作無狀態推理引擎接入現有業務流程
  • Plurality:在家自架你的 AI 中控台

    Plurality:在家自架你的 AI 中控台

    📌 本文重點

    • Plurality 是本地可自架的 AI 中控台
    • 同一介面整合聊天、腳本自動化與多代理協作
    • 透過沙盒與 MCP 打造安全可控的 AI Runbook 系統

    一句話定位:Plurality 是一個裝在你自己電腦或局域網裡的 AI 中控台,用同一個介面處理聊天、腳本自動化和多代理協作,而且完全開源、可本地部署。

    專案連結:https://github.com/azukaar/plurality (建議邊看文邊打開)


    核心功能:把「聊天 + 自動化 + 安全執行」塞進一個面板

    1. 一個介面同時管「聊天」和「背景自動化」

    Plurality 的定位很像「你自己架的 Slack + Jira + Runbook 執行器」,但全部交給 AI 來動。

    你可以在同一個 Web 介面裡:

    • 和 AI 助理聊天
    • 建立長期存在的 Agent(例如「專案助手」「報表助手」)
    • 為每個 Agent 配好自動化流程(Automation Flow),讓它在背景持續跑

    你可以這樣用:

    • 先在 Plurality 裡創一個「專案助理」Agent
    • 在聊天裡下達指令:「幫我建立一個每日 build 檢查流程」
    • 再把這段需求轉成 automation flow:每天定時跑腳本、整理結果、回報到同一個對話 Thread

    實際效果:你不再需要切來切去——一樣是在「跟 AI 聊天」,但對話可以變成「可重複、自動執行的任務」。

    💡 關鍵: 將常用對話轉成 automation flow,可把「會話」變成每天自動跑的固定任務,減少大量手動重複操作。

    行動建議:想像一下你現在最常對 ChatGPT 說的其中一件事(例如「整理日報」「幫我跑某個腳本」),這會是你在 Plurality 裡第一個要做成 Automation 的任務。


    2. 安全的 CLI + 檔案系統沙盒

    Plurality 支援讓代理在「沙盒環境」裡跑 CLI 命令、操作檔案,但重點是:

    • 可控制範圍:你可以只把某個專案資料夾掛載給該 Agent
    • 可審核:代理要執行敏感命令前,可以設成需要你點擊確認
    • 可記錄:所有命令和檔案操作都在介面裡看得到 log

    這意味著:

    • 開發者可以讓 Agent 幫忙跑測試、打包、整理 log
    • 知識工作者可以讓 Agent 在限定資料夾裡整理檔案、產出報告
    • 家用伺服器使用者可以讓 Agent 只碰 backup 資料夾,不碰其他東西

    你可以這樣設定:

    1. 在 Plurality 的設定中,新增一個「Project」或「Workspace」
    2. /home/你/某個專案 或 NAS 的某個共享資料夾掛載給這個 Workspace
    3. 建立 Agent 並指定它只能使用這個 Workspace
    4. 開啟「命令前需要確認」(如果你怕它亂改東西)

    行動建議:先選一個「就算搞壞也不會心痛」的資料夾,當作 Agent 測試用沙盒,把 CLI 操作和檔案操作都限制在這裡。


    3. 搭配 MCP、多代理協作,變成你的「個人 Jira + Runbook 執行器」

    Plurality 支援 MCP(Model Context Protocol)等多代理協作生態,你可以把它當成一個統一入口,接上:

    • 不同工具的 MCP 伺服器(例如資料庫查詢、Issue 管理、監控系統)
    • 多個 Agent 各自負責不同任務

    用白話來說:

    • 「像 Jira 一樣」:你可以把每個自動化流程當成一個 Ticket / 任務
    • 「像 Runbook 一樣」:每個任務裡,是具體的步驟(腳本、API調用、檔案處理)
    • Plurality 的 Agent 負責:讀任務 → 選工具 → 執行 → 回報結果

    實際用法例子:

    • 一個「監控 Agent」:定時讀監控 API → 判斷是否異常 → 若異常就呼叫「Runbook Agent」
    • 「Runbook Agent」:按你寫好的流程,連線伺服器、跑腳本、紀錄在一個對話 Thread 裡

    行動建議:先想一個你現在「寫在 Notion / Wiki 的 Runbook」,例如「網站掛掉怎麼檢查」,把它拆成步驟,交給 Plurality Agent 來執行一次看看。


    適合誰用?三個具體場景

    1. 開發者:用 Plurality 管專案腳本

    適合這樣的人:

    • 手上有一堆 npm script / Makefile / shell script
    • 常常要:跑測試、打包、部署、整理 log

    實際流程可以長這樣:

    • 在 Plurality 裡建立一個「專案 Dev Agent
    • 掛載你的專案資料夾(例如 /projects/my-app
    • 讓 Agent:
    • 用 CLI 跑 npm test,把錯誤訊息整理貼回聊天
    • 根據你的指示修改設定檔或產出新腳本(在沙盒裡)
    • 定時跑 lint + test 並生成報告

    你每天要做的事情,就變成:開 Plurality → 問「今天 CI 有沒有紅?」→ 讓 Agent 調出 log 給你看。

    💡 關鍵: 讓 Agent 接管 npm testlint 等例行腳本,可把日常 CI/開發檢查集中在單一對話介面完成。


    2. 知識工作者:整理檔案 + 做定時報告

    適合這樣的人:

    • 每週要交固定報告(營運簡報、數據摘要、內容整理)
    • 桌面 / NAS 上堆滿 PDF、Word、報表 CSV

    你可以這樣設計一個 Agent:

    • 掛載「報表資料夾」給它(例如 Reports/Weekly
    • 每天或每週固定時間:
    • 掃描新檔案
    • 自動分類命名(根據檔名、內容)
    • 生成一份文字摘要(例如本週營運重點、會議紀錄整理)
    • 寄出 Email 或貼到公司內網

    整套流程變成:你只要把資料丟進資料夾,其它交給 Plurality。


    3. 自架家用伺服器:備份 + 監控

    如果你有自己的 NAS 或家用伺服器(例如和 Livinity 這種 homeserver OS 類似的架構),Plurality 很適合當成「AI 管家」。

    可以做的事情:

    • 每天半夜:
    • 檢查共享資料夾是否有新檔
    • 壓縮後備份到另一顆硬碟或雲端
    • 寫 log + 總結備份結果
    • 每小時:
    • 跑監控腳本(例如檢查 Docker 容器、硬碟空間)
    • 若異常,透過 Email / Telegram 通知你

    這些都可以用 Plurality 的 automation flow + CLI 沙盒來完成,而且所有設定都留在你自己的網路裡。

    💡 關鍵: 把備份與監控自動化放進局域網,能在不依賴外部服務的前提下,建立可審計又可控的「AI 管家」流程。


    15 分鐘入門:從 clone 到第一個 Automation Flow

    下面用一個具體目標來帶你:每天抓 RSS → 總結 → 寄信

    步驟 0:準備環境(2 分鐘)

    需求:

    • 一台可以跑 Docker 的機器(你的電腦、NAS 或家用伺服器)
    • 至少一個可用的模型:
    • 本地:Ollama / LM Studio / 其他本地 LLM 伺服器
    • 雲端:OpenAI / Claude 等(有 API key)

    行動:先確認你有 Docker 和一個模型 API(或已裝好 Ollama)。


    步驟 1:拉 GitHub repo + 啟動(5 分鐘)

    1. 開啟 GitHub 專案:https://github.com/azukaar/plurality
    2. 在你的機器上:
    git clone https://github.com/azukaar/plurality
    cd plurality
    
    1. 使用 Docker(以官方 README 為準,但大致會是):
    docker compose up -d
    
    1. 打開瀏覽器,進入 http://你的機器 IP:PORT(通常 README 會寫預設 port)

    行動:先確認你能看到 Plurality 的 Web 介面,並完成初次設定帳號。


    步驟 2:連上本地或雲端模型(3 分鐘)

    在 Plurality 介面的設定裡(通常是「Models」「LLM Providers」之類):

    • 如果你用本地模型(例如 Ollama):
    • 填入 Ollama 的 URL(例如 http://host.docker.internal:11434
    • 選一個模型(llama3 等)
    • 如果你用雲端模型:
    • 選 OpenAI / Anthropic 等
    • 貼入 API key

    接著:

    • 建立一個「預設 Agent」
    • 開一個新聊天,隨便問一個問題,確認模型回應正常

    行動:測一次聊天,確定模型接上沒問題,再往下做自動化。


    步驟 3:設定第一個 Automation Flow:RSS → 總結 → 寄信(5 分鐘)

    以概念步驟為主,實際操作依 Plurality 當前 UI 為準(版本更新可能略有差異):

    1. 建立一個 Agent(例如叫 RSS Reporter):
    2. 權限:允許網路請求(抓 RSS)
    3. 若需要寄信,先在設定裡填好 SMTP 或 Webhook(視官方檔案支援的方式)

    4. 建立 Automation Flow

    5. 觸發條件:每日某個時間(例如 09:00
    6. 步驟設計(可用自然語言描述給 Agent,再微調):

      1. 抓取指定 RSS(例如科技新聞、公司部落格)
      2. 解析最近 24 小時的新文章
      3. 用模型生成摘要:
        • 列出 3-5 則重點
        • 每則一段話說明「為什麼重要」
      4. 把摘要整理成一封 Email 內容
      5. 呼叫 SMTP/Email 工具寄給你
    7. 測試一次

    8. 不用等明天,先在介面裡手動 Run 這個 Flow
    9. 檢查 log 和 Email 是否如預期

    行動:先用你最常看的其中一個 RSS 做範例,例如你公司部落格或常看的技術網站。


    小結:把「雜事」搬進你自己的局域網裡

    Plurality 的核心價值在於:

    • 一個介面聚合聊天 + 自動化 + 多代理
    • 可以讓 AI 真正「動手」跑 CLI、操作檔案,但仍在你可控的沙盒裡
    • 搭配 MCP、多代理協作,把原本散在各處的腳本、Runbook 和任務,集中到一個你自己掌控的中控台

    如果你本來就有自架 NAS、家用伺服器,或公司內網伺服器,Plurality 很適合直接變成「AI 操作台」;如果你只是想找個比 ChatGPT 更能「實際做事」的工具,也可以先在自己電腦上跑一個 Plurality,從那個 RSS → 總結 → 寄信的 Flow 開始。

    下一步行動:打開 https://github.com/azukaar/plurality,照本文的 15 分鐘流程做出你的第一個 Automation Flow,之後再慢慢把日常重複工作移進去。

    🚀 你現在可以做的事

    • 打開 Plurality 專案頁,用 git clone 把專案拉到本機或 NAS
    • 準備好一個可用模型(例如設定好 Ollama 或貼入 OpenAI / Claude API key),完成第一次聊天測試
    • 挑一個你每天重複做的流程(如 RSS 摘要、報表整理),在 Plurality 裡實作成第一個 Automation Flow
  • GPT‑5.6:從分數戰轉向系統戰

    GPT‑5.6:從分數戰轉向系統戰

    📌 本文重點

    • GPT‑5.6 把競爭從比模型分數轉向比整體系統與治理能力
    • 企業技術部門角色從「工具供應商」變成「治理設計師」
    • 一般使用者的關鍵變成「敢不敢交資料」與是否可被稽核與回滾

    GPT‑5.6 的發布,不只是又一次「模型升級」,而是正式宣告:紅海時代,大模型之間的差距不再只是分數,而是整套系統設計與治理能力的差距。在這個版本之後,誰還在追「跑得更快、答得更準」,其實已經落後;真正的競爭是誰能把模型變成可管、可控、可結算成本的 AI 作業系統。


    一、在已經高度同質化的紅海裡,分數進步到底值多少錢?

    Towards AI 公布的測試來看,GPT‑5.6 Sol 系列在多項 benchmark 上有「顯著提升」:推理更穩、多語言更準、長文本處理更可靠。

    問題是,在 GPT‑4.5ClaudeGemini 已經把主流場景占滿的今天,這種提升不再自動變成「新產品力」,而是逼開發者回答更殘酷的一個問題:你到底要用它做一個「更好的工具」,還是一個「能自己跑流程的系統」?

    💡 關鍵: 在模型表現接近飽和的紅海裡,「能否做成完整系統」比單純分數提升更能創造商業價值

    過去一代的升級,帶來的是:更好的客服機器人、更聰明的程式碼助理、更流暢的多語言寫作。

    GPT‑5.6 這一代的幅度,足以讓產品形態跨一個級距

    • 從「問答型助手」走向「持續運作的 Agent 網絡」,例如自動維護雲端資源、排程行銷活動、跟進未完成任務。
    • 從「單次生成」走向「長期狀態管理」,在多輪對話與多個系統之間維持一致策略與上下文。
    • 從「一個 API 點進去」走向「一套 OS 介面」,模型支援工具調用、工作流編排、權限與審計整合。

    換句話說,GPT‑5.6 真正解鎖的是「可托付責任」的新產品形態——你開始敢讓它接管一整段流程,而不只是用它寫封信、改段程式碼。

    這也是為什麼在紅海裡,性能分數不再是主角,「能否做成完整系統」才是新的價值衡量方式


    二、企業技術部門:從「管基礎設施」到「設計 AI 作業系統」

    MIT Tech Review 指出,Gartner 把 2026 定義為企業 AI 投資的「轉折年」IT 基礎設施成本預計到 2030 年可能成長 2–3 倍,但預算並不會同步翻倍。

    💡 關鍵: 到 2030 年 IT 成本成長 2–3 倍而預算不跟著翻倍,逼企業必須用 Agent 化流程把 AI 投資變成可量化的成本效率

    這個背景,讓 McKinsey 推崇的 Agent 化工作流程變成不是「創新選配」,而是「成本壓力下的必須」。在這個脈絡下看 GPT‑5.6,它真正改變的是技術部門的工作分工與投資優先級。

    第一個改變:技術部門不再只是「服務模型」,而是「編排 Agent」。

    過去:

    • 架構師關心的是雲端成本、微服務切分、資料庫選型。
    • MLOps 團隊關心的是模型部署、版本控制、監控與回滾。

    GPT‑5.6 等級的模型上線後:

    • 架構師得開始設計 「AI OS 層」Agent 如何拿權限、如何調工具、如何記錄行為、如何被審計。
    • 安全與資料治理不再是附屬條款,而要在設計之初就嵌進 Prompt、工具選項與工作流。

    第二個改變:CapEx/OpEx 的算盤會改寫技術部門的權力結構。

    當基礎設施成本走高,而 Agent 能承接更多維運工作,CTOCIO 面對的是三個新的決策:

    1. 投資在「更強的大模型」,還是「更厚的 guardrails 與治理層」?
      只砸錢在 GPT‑5.6 這類旗艦模型,而不投資輸入/輸出管控與審計系統,是把企業暴露在更大規模、更難追蹤的風險之中。

    2. 技術團隊角色的重排:

    3. 開發者少寫業務邏輯,多寫「Agent 行為策略」與「工具適配層」。
    4. 資安與合規人員,不再只是做事後審查,而要參與 prompt 設計與權限模型設計。

    5. 雲端與本地的平衡會被重新談判:

    6. 對延遲與成本不敏感的場景,用 OpenAI 式雲端大模型仍然合理。
    7. 但凡牽涉 個資、健康、位置、交易明細 等高敏感資料,技術部門要開始為本地/開源方案預留預算和人才,避免全盤依賴單一供應商。

    在這個意義上,GPT‑5.6 是把企業技術部門從「工具供應商」推向「治理設計師」的一記催化劑——誰先看懂這個角色轉變,誰就先把 AI 投資從「酷功能」變成「可量化的生產力與風險管理方案」。


    三、一般使用者:模型變強後,真正重要的不是「能不能」,而是「敢不敢給資料」

    對一般使用者而言,GPT‑5.6 這類模型能力躍升後,體感是愉快的:少錯、少胡扯、多語言更平順,甚至能幫你跨 app 完成一整串任務。

    但真正的瓶頸,正在悄悄從「模型能不能」轉向「你敢不敢把資料交出去」。

    第一個張力:雲端超模 vs 本地/開源。

    • OpenAI 式雲端大模型路線:極致性能、最佳工具整合、快速更新,但所有關鍵行為與資料,統一流向少數幾家供應商。這會與各國愈來愈嚴格的 健康與定位數據保護法案 產生直接碰撞。
    • 本地與開源路線:性能略低,但提供更細緻的資料控制——企業可以在自家機房內部做執行,將敏感資料鎖在自己的網路邊界內,只把低敏訊息丟給雲端大模型做推理。對個人來說,這路線意味著:未來你在手機、筆電上的「離線模型」,可能成為你與雲端巨頭之間的第一層防火牆。

    第二個張力:模型能力升級,卻同時放大安全風險。

    Towards AI 的 LLM Guardrails 文章 用航空公司聊天機器人誤導旅客的案例提醒開發者:模型可以非常自信地說錯話,甚至泄漏或被操控

    GPT‑5.6 時代,這種風險只會被放大,因為:

    • 模型更善於「模擬可信語氣」,讓錯誤資訊更不易被人類識破。
    • Agent 具有執行能力,一旦被 jailbreak,不是只說了不當話,而是可能 誤發郵件、刪資料、錯誤下單

    💡 關鍵: 能執行動作的 Agent 一旦被攻破,風險從「說錯話」變成「直接動到真實資產」

    對一般使用者來說,這意味著:你需要的已不只是「好用」,而是「可稽核、可回滾、可拒絕」的 AI 系統

    使用者界面的選擇,會越來越像是在挑銀行而不是挑 app——你會問:

    • 這家服務如何存我的對話與檔案?
    • 有沒有清楚的權限管理與活動紀錄?
    • 發生錯誤時,我有沒有救濟管道?

    結語:看懂 GPT‑5.6,先停下來算風險、成本與治理,而不是急著接 API

    GPT‑5.6 是一個分水嶺:它迫使整個生態系從「比模型分數」轉向「比系統設計與監管適配度」。

    接下來幾年,真正的競爭不在於誰第一個在產品頁面掛上「Powered by GPT‑5.6」,而在於:

    • 誰先把 AI OS設計清楚:權限、審計、工具調用、容錯與回滾策略。
    • 誰能把 Guardrails 內建到產品架構,而不是事後補丁。
    • 誰在雲端旗艦模型與本地/開源方案之間,做出 可持續的資料與成本分層策略

    如果你是開發者或技術管理者,最務實的下一步不是「馬上重寫所有服務接 GPT‑5.6」,而是:

    1. 先畫出你組織的 AI 地圖:哪些流程可以交給 Agent、哪些涉及敏感資料必須留在本地、哪些屬於高風險決策必須有人審核。
    2. 為每一段 AI 流程定義 Guardrails:輸入限制、模型選擇、工具權限、輸出審核與回滾機制,寫成工程設計,而不是憑直覺臨時決定。
    3. 建立「AI 治理委員會」式的責任分工:讓技術、法務、資安與業務共同決定 AI 投資優先級與使用邊界。

    能否善用 GPT‑5.6,不在於你多快集成,而在於你 多早把風險、成本與治理問題想清楚並寫進系統設計

    在紅海時代,真正的護城河不再是誰用到最新模型,而是誰能讓最新模型安全、持久、可被信任地為自己工作。

    🚀 你現在可以做的事

    • 盤點現有專案中所有使用大模型的流程,畫出一張組織內的 AI 地圖
    • 為其中一條關鍵流程撰寫完整的 Guardrails 設計(輸入限制、權限、回滾機制)
    • 與法務與資安部門約一次會議,討論是否成立跨部門的 AI 治理委員會
  • 用 Gemini 3.5 控螢幕:Agent 實戰架構解析

    用 Gemini 3.5 控螢幕:Agent 實戰架構解析

    📌 本文重點

    • Gemini 3.5 直接「看螢幕 + 點 UI」,大幅簡化自動化 Agent
    • 用 DSL 約束操作與多輪回饋,提升穩定性與錯誤恢復能力
    • 安全邊界與權限治理是避免變成「超級巨鼠標」的關鍵

    Gemini 3.5 的 Computer Use 功能直接解決了一個老問題:過去我們寫辦公自動化或 E2E 測試 Agent,必須在「語言模型」和「操作工具」之間做大量 glue code(PlaywrightSelenium、各種 RPA SDK)。現在模型本身就能看螢幕 + 理解 UI + 產生操作事件,實作「會自己點 UI」的 Agent 架構可以大幅簡化,同時在 OSWorld 這類 benchmarks 上已經能接近人類級別的操作能力。

    💡 關鍵: Gemini 3.5 直接讀螢幕與 DOM,讓原本需要大量 glue code 的自動化流程被模型本身吸收,工程複雜度大幅下降。


    重點說明:Gemini 控螢幕的技術斷面

    1. 螢幕感知:Screenshot + DOM 雙通道

    Gemini 3.5 FlashComputer Use 能力裡,核心是讓模型同時看到:

    • 螢幕截圖:提供視覺語意,例如按鈕風格、顏色、位置、Tooltip 等。
    • DOM 或可操作節點樹:提供結構語意,如 aria-labelroleid、階層關係。

    實作上通常會有一個中介層:

    • 你的 Agent Runtime 負責抓取 當前視窗 screenshot、序列化 DOM / widget tree 成結構化 JSON
    • 透過 Gemini API 以多模態輸入丟給模型,模型回傳抽象操作意圖(例如「點選『匯出報表』按鈕」),再轉成具體事件(例如 click(x, y)click(selector))。

    這比傳統 RPA 的「座標點擊」穩健得多,因為模型能根據文字與結構定位元素,不再怕視窗尺寸微調就全掛。

    2. 操作語義到事件映射:從自然語言到 GUI 事件模型

    Gemini 本身不直接產生 OS-level 事件,而是給出操作語義,由你的 Agent 層做事件映射。典型設計是:

    • 模型輸出一組高階指令
    • click element: 「匯出報表」scroll until: 「三月」type in field: 「搜尋」 -> "季報"

    • Agent 將其轉換成具體事件:

    • 瀏覽器端:document.querySelector(...) + element.click()
    • 桌面端:座標點擊(OS API / robot library)

    建議在系統層設計一個 操作 DSL,例如:

    {
      "actions": [
        { "type": "click", "target": { "text": "匯出報表", "role": "button" } },
        { "type": "fill", "target": { "placeholder": "搜尋" }, "value": "季報" },
        { "type": "wait", "condition": { "text": "匯出完成" }, "timeoutMs": 10000 }
      ]
    }
    

    讓 Gemini 的輸出約束在這個 DSL 內,再由你寫 resolverDSL 轉成實際 API 呼叫,如 PlaywrightChromium DevTools 或自製桌面自動化套件。

    3. 權限與安全沙箱:避免做成「超級巨鼠標」

    能「看螢幕 + 點 UI」的 Agent,在安全上本質上是半個遠端操控工具。要避免直接變成超級巨鼠標,需要在設計時就加上:

    • Scope 限制:只允許控制特定應用(例如公司內部 CRM),而不是整個 OS
    • 權限分級:讀取螢幕 ≠ 可以操作所有按鈕,對「刪除」「匯出」「設定」類操作加上額外人為確認。
    • 審計與可回溯:所有操作都要有 log,包括模型輸入、輸出 DSL、最後映射的實際事件。

    Gemini 在雲端側有基本的安全保護,但真正壓力在你自家的 Agent Runtime。核心結論:螢幕控制能力是一把雙面刃,沒安全邊界就等同開放一個高權限自動點擊器。

    💡 關鍵: 把控制範圍鎖在特定應用與低權限環境,是避免「一個 Bug 變成全系統災難」的第一道防線。


    實作範例:會自己點 UI 的辦公自動化 / E2E Agent

    以下用 pseudo-code 示範一個基於 Gemini Computer Use 的 Agent 架構,對比你現在用 PlaywrightRPA 的做法。

    1. Agent 主循環:狀態管理與事件模型

    假設你有一個 Browser Automation Runtime,可以:

    • 抓取 screenshot
    • dump DOMJSON
    • 執行 DSL 動作

    初始化與一次任務呼叫

    # 假設有 gemini_client 已封裝好
    from agent_runtime import get_screenshot, get_dom_tree, execute_actions
    
    SYSTEM_PROMPT = """
    你是一個辦公自動化 Agent。你只能透過提供的 action DSL 操作螢幕。
    目標:根據使用者需求,在瀏覽器完成操作。
    請只輸出 JSON,不要輸出其他文字。
    """
    
    state = {
        "task": "下載最新的月報表並存到桌面",
        "history": []
    }
    
    def run_step(state):
        screenshot = get_screenshot()
        dom = get_dom_tree()  # 結構化 JSON
    
        prompt = {
            "system": SYSTEM_PROMPT,
            "user": {
                "task": state["task"],
                "history": state["history"],
                "screen": screenshot,   # 圖像
                "dom": dom              # 結構化文字
            }
        }
    
        # 透過 Gemini 3.5 Flash 多模態 API
        resp = gemini_client.generate(
            model="gemini-3.5-flash-computer-use",
            input=prompt,
            # 關鍵參數:讓模型遵守 DSL
            tools=[{"name": "ui_action_dsl", "schema": ACTION_SCHEMA}],
            temperature=0.2
        )
    
        actions = resp["actions"]
        result = execute_actions(actions)
    
        state["history"].append({"actions": actions, "result": result})
        return state
    
    # 任務循環(直到模型判斷完成)
    while not state.get("done"):
        state = run_step(state)
    

    關鍵設計點:

    • 使用 多步迭代:每次看最新螢幕 & DOM,再決定下一步 action,類似人類操作流程。
    • 將狀態(history)回饋給模型,讓它能做錯誤恢復與路徑修正。

    2. DSL Schema:限制模型輸出空間

    JSON Schema 方式提供 ui_action_dsl 給 Gemini(伺服器側 Stub 示意):

    export const ACTION_SCHEMA = {
      type: "object",
      properties: {
        actions: {
          type: "array",
          items: {
            type: "object",
            properties: {
              type: { enum: ["click", "fill", "scroll", "wait", "assert"] },
              target: {
                type: "object",
                properties: {
                  text: { type: "string" },
                  role: { type: "string" },
                  selector: { type: "string" },
                  ariaLabel: { type: "string" }
                }
              },
              value: { type: "string" },
              condition: { type: "object" },
              timeoutMs: { type: "number" }
            },
            required: ["type", "target"]
          }
        }
      },
      required: ["actions"]
    };
    

    把這個 schema 當作 tool 定義丟給 Gemini,模型就會傾向輸出符合 schemaJSON,而不是隨意產生指令文字。這比讓模型自己「猜 Playwright API」更穩。

    3. 錯誤恢復策略:從 E2E 測試角度看

    E2E 測試模式下,你可以:

    • 每個 step 後檢查 result 是否有錯誤(DOM element 找不到、timeout 等)。
    • 把錯誤詳細資訊(包含「按鈕找不到」等)回餵給模型,再跑下一個 step,讓 Agent 自己嘗試調整操作策略。

    示意:

    result = execute_actions(actions)
    if result.error:
        state["history"].append({"actions": actions, "error": result.error})
    else:
        state["history"].append({"actions": actions, "ok": True})
    

    這種「模型 + 真實環境回饋」的迭代,比傳統 Playwright 寫死 selector 更有韌性:UI 調整、小改版時,Agent 仍可能靠語意找到正確控件。

    💡 關鍵: 把錯誤結果當成下一輪輸入的一部分,能讓 Agent 自我修正,比單純重試同一段 script 聰明得多。


    建議與注意事項:和 RPA / Playwright 對比,以及安全邊界

    與傳統 RPA / Playwright 的優缺點對比

    優勢:

    • 選擇器韌性更高:不是全靠 #idxpath,模型會綜合文字、位置、上下文理解「這顆按鈕是做什麼的」。
    • 對自然語言任務友善:「幫我下載三月月報表」這種任務,不需要你事先拆成多條 script,Agent 自己規劃路徑。
    • 多模態容錯:螢幕上即使有動態廣告、複雜排版,模型也能分辨主要內容與干擾。

    劣勢 / 需要評估的點:

    • 成本與延遲:每一個 step 都要 call 一次 LLM,比傳統 script 直接執行慢且貴,適合複雜流程,不適合同一動作高頻批量執行。
    • 可預期性Playwright script 是 deterministic;Gemini Agent 則有一定隨機性(雖然可降低 temperature),需要監控與回滾機制。

    真實專案的安全與治理建議

    1. 明確劃定控制範圍

    2. 用獨立瀏覽器容器(例如專用 Chrome profileWebView),讓 Agent 只能看到業務系統,而非整個桌面。

    3. 對不同任務配置不同權限 profile,例如「只讀報表」「允許建立草稿但不可送出」。

    4. 強制人機協同節點

    5. 對敏感操作(刪除資料、匯出大量客戶名單)設計「人工確認」步驟,讓 Agent 停在「準備送出」頁面,由人點最後一個按鈕。

    6. 使用 UI 上的明確標記(例如「需管理員確認」)讓模型也知道哪些步驟不應自動完成。

    7. 完整審計 log + 可回放

    8. 記錄:模型輸入(螢幕縮圖、DOM 摘要)、模型輸出 DSL、實際執行的事件與結果。

    9. 可選擇在安全事件發生時回放整個操作過程,做事後分析。

    10. 避免敏感資料洩露

    11. screenshot 做遮罩(mask),例如遮蓋客戶姓名、金額等,再送給模型。

    12. DOM 摘要可做字段裁剪,只提供必要欄位(如 label、角色、結構),不要直接把完整表格資料送到雲端。

    13. 從小範圍 PoC 起步

    14. 先在「測試環境 + 低權限帳號」上跑 Agent,驗證行為穩定,再逐步提升權限。

    15. 與現有 Playwright / RPA 共存:把 Gemini Agent 用在「探索性操作」與「易變 UI」,穩定的核心流程仍用傳統 script

    總結:Gemini 3.5 的螢幕感知與控制能力,讓我們可以用更少的硬編碼 selector 和流程腳本,實作能「看得懂 UI、自己點按鈕」的辦公自動化 / E2E Agent。真正的工程重點在於:設計好操作 DSL、狀態管理與錯誤恢復機制,並在安全邊界、審計與人機協同上做好防護,讓這個 Agent 是可控的助理,而不是失控的超級巨鼠標。

    🚀 你現在可以做的事

    • 在你現有的 Playwright / Selenium 專案中,先為 1 個流程試做一個 ui_action_dsl,讓 LLM 產生 JSON 再轉成實際指令
    • 建一個測試用瀏覽器容器(低權限帳號 + 測試環境),接上 Gemini 3.5 Flash 多模態 API 做小型 PoC
    • 為預計自動化的系統列出敏感操作,先設計好「人工確認」與操作 log / 回放機制
  • 用瀏覽器跑自己的 AI Agent:peerd 實戰

    用瀏覽器跑自己的 AI Agent:peerd 實戰

    📌 本文重點

    • peerd 把瀏覽器變成本機 AI Agent 執行環境
    • 純前端運作,API Key 不經過第三方伺服器
    • 多 Agent 隔離與瀏覽器自動化,適合個人工作流與 QA 腳本

    用一句話講清楚:peerd 就是把「瀏覽器」變成你的 AI Agent 執行環境,所有腳本、代理邏輯都在本機瀏覽器裡跑,不經過第三方伺服器。

    連結先給你:
    – GitHub / 官方介紹:https://github.com/NotASithLord/peerd
    – Demo / 官網入口:https://peerd.ai


    核心功能:瀏覽器就是沙盒 + 多 Agent 控制台

    1. 純前端 JS,API Key 只在你機器裡

    peerd 是一個瀏覽器擴充套件,用原生 JavaScript 寫成,執行邏輯都在前端:

    • 你自己輸入 OpenAIAnthropicGemini 等 API Key
    • 請求直接從瀏覽器送出,不經過 peerd 的伺服器
    • 不需要額外安裝「AI 瀏覽器」或開一個本地 server

    💡 關鍵: API 呼叫完全在本機瀏覽器完成,你的金鑰與請求內容不會經過第三方後端服務。

    你可以立刻做的事
    1. 打開 https://peerd.ai,依照說明安裝瀏覽器擴充套件(目前以 Chromium / Chrome 系列最佳)。
    2. 安裝後,在擴充圖示裡找到 peerd,開啟設定頁,填入你現有的 OpenAI / Anthropic / Gemini API Key。
    3. 測試呼叫一次簡單指令(例如:讓 Agent 幫你總結目前開啟頁面的內容),確認 Key 有效。

    2. 多 Agent,彼此隔離在不同 sandbox / worker

    peerd 的設計重點是:一個瀏覽器,多個 Agent,各自有自己的工作空間

    它利用:

    • 多分頁 / 多視窗
    • Web Worker / Service Worker

    來把不同 Agent 隔離,例如:

    • Agent A:專門抓資料,跑在一個 Worker
    • Agent B:負責整理與寫摘要,跑在另一個 Worker
    • Agent C:只負責觸發 UI 操作

    彼此透過訊息溝通,但記憶體與腳本隔離,減少互相干擾。

    💡 關鍵: 每個 Agent 在獨立的 worker/sandbox 裡執行,降低互相干擾與權限混用風險。

    你可以立刻做的事
    1. 在 peerd 的控制面板中,建立兩個 Agent:例如「資料收集 Agent」「摘要整理 Agent」。
    2. 設定:「資料收集 Agent」負責打開網站、擷取內容;完成後把文字丟給「摘要整理 Agent」。
    3. 觀察兩個 Agent 的 log(通常 peerd 會有 console / log 面板),確認任務是分開跑的。

    3. 自動化瀏覽、跑 JS 腳本,甚至開 WebAssembly VM

    peerd 不只有「叫模型寫文字」這一招,它可以:

    • 控制瀏覽器行為:
    • 自動打開指定網址
    • 在頁面中執行 DOM 查詢、抓元素文字
    • 觸發按鈕點擊、輸入框填寫
    • 執行 JavaScript 腳本:在 sandbox 內跑程式邏輯,像一個本地化的「Agent 腳本引擎」
    • 啟動 WebAssemblyWASM)虛擬機:甚至可在瀏覽器裡跑一個簡化版的 Linux VM + 網路堆疊

    這代表:

    • 你不用額外架 server 就能做「自動化 QA 腳本」
    • 可以把實驗性 side project 完整關在瀏覽器裡玩,不動你的主機環境

    你可以立刻做的事
    1. 用 peerd 新增一個「任務腳本」,讓它在分頁裡執行以下行為:
    – 打開一個新聞網站
    – 用 document.querySelectorAll('h1, h2') 抓標題
    – 把標題串成一段文字
    2. 把這段文字交給 LLM,請它生成摘要,顯示在 peerd 的面板中。
    3. 如果你熟 JS,可以把這個流程包成一個可重複執行的腳本,日後一鍵跑。


    適合誰用:三種具體場景

    1. 個人資訊整理 / 研究助手

    使用情境:

    • 你每天會看固定幾個新聞網站或技術部落格
    • 想要「早上開機 → 一鍵跑 → 自動抓標題 → 整理成 一頁摘要」

    可以這樣設計一個 peerd Agent:

    1. 設定一個 URL 清單(例如:三個新聞站 + 一個技術站)。
    2. Agent 依序打開每個網站,抓取首頁標題(或特定區塊)。
    3. 把所有標題與小段落交給 LLM,產出:
    4. 一份今日重點摘要
    5. 分類(國際 / 本地 / 技術 / 商業)
    6. 把結果顯示在 peerd 面板,或存成一段 Markdown,傳回你的筆記系統。

    適合:

    • 喜歡自己控制流程、但不想寫一堆後端程式的人
    • 不想讓瀏覽紀錄、研究內容經過第三方服務的人

    2. 產品 / 網頁 QA 腳本、互動 Demo

    peerd 可以把「瀏覽器自動操作 + LLM」組成 QA 工作流:

    範例:

    1. 定義一組 QA 腳本:
    2. 打開測試環境網址
    3. 自動登入測試帳號
    4. 點幾個主要流程(新增、編輯、刪除),截取畫面文字
    5. Agent 檢查:
    6. 是否有錯誤訊息
    7. 版面文字是否符合規格(例如:翻譯是否正確)
    8. 把結果整理成一份 QA 報告,直接在瀏覽器下載或複製。

    適合:

    • 前端工程師、PM、設計師,想要簡單重複測試
    • 需要做互動 Demo,讓 Agent 自動「操作產品給觀眾看」

    3. 不想碰 DevOps 的 side project / workflow 原型

    如果你平常:

    • 有很多「想做個小工具」的點子
    • 但一想到要架 server、部署,就懶了

    peerd 提供一種做法:全部寫成瀏覽器 Agent 腳本

    • 把流程寫在 JS 裡(在 peerd 提供的 sandbox 中)
    • 需要呼叫 LLM,就用自己的 Key
    • 存資料可以暫時放在 LocalStorage、下載檔案、或手動貼回 Notion / Obsidian

    適合:

    • 想先驗證「這個工作流值不值得做成正式產品」的人
    • 想建立個人專用工作流,但不想管理伺服器的人

    怎麼開始:從「自動抓新聞標題摘要」實作一路到客製 Agent

    以下是一條最快速的上手路徑,你可以照做一次,確認 peerd 的使用感覺。

    步驟 1:安裝 peerd 擴充 & 準備 API Key

    1. 打開 https://peerd.ai,找到瀏覽器擴充安裝連結(多為 Chrome Web Store 或手動載入)。
    2. 安裝完成後,點右上角擴充圖示 → 找到 peerd → 打開控制面板。
    3. 準備至少一個 LLM 服務:
    4. OpenAI(或相容 API)
    5. Anthropic
    6. Gemini
    7. 在 peerd 設定頁,填入你的 API Key,並測試一個簡單 prompt(例如:「請用 50 字說明你是誰」)。

    💡 關鍵: 先用簡單 prompt 驗證 API Key 設定無誤,可以避免後續腳本除錯時間。

    步驟 2:建立一個「新聞摘要 Agent」

    目標:自動打開幾個新聞站,抓首頁標題,總結成一段簡報。

    可以照以下邏輯:

    1. 在 peerd 新建一個 Agent,命名為 NewsSummarizer
    2. 設定任務腳本(概念上類似 pseudo-code):

    “`js
    const sites = [
    ‘https://news.ycombinator.com’,
    ‘https://www.bbc.com/news’,
    ‘https://www.ft.com’
    ];

    async function run() {
    const allHeadlines = [];

     for (const url of sites) {
       const page = await openTab(url); // peerd 提供的抽象 API(實際名稱依文件)
       const titles = await page.eval(() => {
         return Array.from(document.querySelectorAll('h1, h2'))
           .map(el => el.innerText)
           .filter(Boolean);
       });
       allHeadlines.push({ url, titles });
     }
    
     const prompt = `請根據以下新聞標題,用繁體中文整理出今日重點摘要,分段列出:\n\n${
       JSON.stringify(allHeadlines, null, 2)
     }`;
    
     const summary = await callLLM(prompt); // 依照你選的 provider
     output(summary);
    

    }

    run();
    “`

    1. 儲存腳本後,按「執行」:
    2. peerd 會依序開啟那些網站
    3. 抓取標題
    4. 呼叫 LLM 總結
    5. 在側邊面板或 console 顯示結果

    你可以依照自己的需求修改:

    • 換成台灣 / 香港 / 日本新聞網站
    • 加上「只保留包含特定關鍵字的標題」
    • summary 轉成 Markdown,方便貼到筆記

    步驟 3:客製自己的 Agent 腳本

    當你跑過一次「新聞摘要 Agent」後,可以開始做這幾件事:

    1. 抽出共用邏輯:例如「開頁+抓標題」寫成一個可重用的 function,日後換站台不用重寫。
    2. 加入排程或手動檔案輸出
    3. 每次執行後自動下載一個 .md.txt
    4. 或直接在 peerd 面板顯示,手動複製
    5. 改成其他任務
    6. 產品價格比價(抓不同電商同一商品)
    7. 技術文章整理(從多個 blog 抓標題+摘要)

    步驟 4:注意權限與安全設定

    雖然 peerd 是純前端、API Key 在你機器上,但仍有幾個安全重點:

    1. 網站權限
    2. 當瀏覽器問「是否允許此擴充存取某些網站」時,只開啟你真的需要的網域。
    3. API Key 保護
    4. 不要在共享電腦上使用 peerd,或至少不要留下儲存的 Key
    5. 若用公用電腦,建議使用臨時 Key,使用完立刻 revoke
    6. 腳本來源
    7. 只執行你自己寫的,或來自可信來源的腳本
    8. 不要隨便貼「網友分享的完整腳本」就直接跑,避免讀寫你不想暴露的資料

    peerd 在 AI Agent 工具裡的位置

    目前市面上有不少「Agent 平台」或「AI 瀏覽器」,peerd 的定位比較特別:

    名稱 核心功能 免費方案 適合誰
    peerd 瀏覽器內純前端多 Agent、自動化操作 開源專案,可自架 不想碰後端,只想用瀏覽器的人
    AutoGen 多 Agent Python 框架 開源 已有後端環境的開發者
    AgentHub 類 雲端 Agent 編排平台 多提供免費額度 喜歡 GUI、無法自管 API Key 的人

    如果你的重點是:「所有東西都在我瀏覽器裡跑,不想任何 A2A(Agent-to-Agent)中介干預」,那 peerd 很值得試一次。


    結論:

    • 想要一個「不碰後端、不開伺服器」的 AI Agent 沙盒,peerd 是目前少見的純瀏覽器方案。
    • 它最適合拿來做:個人資訊整理、簡易 QA 腳本、side project 原型。
    • 你可以從一個「新聞標題摘要 Agent」開始,熟悉後再把自己的工作流程慢慢搬進瀏覽器裡。

    🚀 你現在可以做的事

    • peerd 官網 安裝擴充,填入自己的 OpenAI / Anthropic / Gemini API Key 並跑一次測試 prompt
    • 依照文中的範例,建立一個 NewsSummarizer Agent,實作「自動抓新聞標題+摘要」工作流
    • 把現有的一項重複性瀏覽器流程(例如 QA 點測、價格比價),改寫成 peerd Agent 腳本並在本機瀏覽器中試跑
  • Fugu 式多模型協作實戰拆解

    Fugu 式多模型協作實戰拆解

    📌 本文重點

    • 單一 LLM 容易遇到成本與供應商風險問題
    • Fugu 用任務類型與路由實現多模型協作
    • 多模型需要良好編排、仲裁與可觀測性
    • 建議從抽象 Task 與 adapter 漸進導入

    單一 LLM 做所有事情的痛點很明確:成本不可控、供應商風險高、效能無法對應不同任務類型。Sakana 的 Fugu 路線給了一個很務實的答案:用一層編排(orchestration)把多個模型(雲端 + 本地 + 專用 code model)協作起來,把「選模型、聚合結果、錯誤控制」變成一套可維護的工程結構,而不是散落在業務程式碼裡的 if-else。


    重點說明

    1. Fugu 式類型系統:先定「任務類型」,再談選哪個模型

    Fugu 的關鍵不是多模型本身,而是任務類型(task types)+ 類型安全的輸入輸出

    • 每個任務明確定義:
    • input schema(如 QueryTask, CodeGenTask, LongFormTask
    • output schema(如 Answer, CodePatch, SearchPlan
    • 路由層只依賴任務類型與 metadata(長度、成本上限、延遲 SLA),不直接寫死「如果是寫程式就用 XXX」。

    範例(TypeScript 風格的 pseudo code):

    // 1. 任務類型定義
    interface BaseTaskMeta {
      maxLatencyMs: number;
      maxCostUSD: number;
      priority: 'low' | 'normal' | 'high';
    }
    
    interface QueryTask {
      type: 'query';
      input: { question: string; context?: string };
      meta: BaseTaskMeta & { allowWebSearch: boolean };
    }
    
    interface CodeGenTask {
      type: 'codegen';
      input: { spec: string; language: string };
      meta: BaseTaskMeta & { needTests: boolean };
    }
    
    interface LongFormTask {
      type: 'longform';
      input: { topic: string; minWords: number };
      meta: BaseTaskMeta & { allowStreaming: boolean };
    }
    
    type Task = QueryTask | CodeGenTask | LongFormTask;
    

    好處:

    • 模型路由只看 Task,不看業務細節,方便之後替換模型 / 供應商。
    • 不同模型可以有不同的 prompt / tool schema,但在編排層都被包成同一個 Task 抽象。

    💡 關鍵: 先用類型把任務抽象好,之後換模型或換供應商就變成「改路由」而不是「重寫業務程式碼」。


    2. 模型路由:任務類型 × 長度 × 成本

    一個實用的路由策略通常只靠幾個欄位就夠了:

    • 任務類型
    • codegen → 專用 code model(如 o3-miniDeepSeek-Coder、本地 Qwen code)
    • query → 一般對話模型(OpenAI / Anthropic / 本地)
    • longform → 長 context 模型(如 200k+ context),或拆段 + 聚合
    • 長度估計:預估輸入 token + 預計輸出 token,超過本地模型 context 就路由到雲端長上下文模型。
    • 成本與延遲
    • maxCostUSD 控制是否可以打貴模型
    • maxLatencyMs 決定是否啟用並行查詢 + 快速仲裁

    簡化版路由器:

    function routeModel(task: Task): 'openai:gpt-4.1-mini' | 'local:qwen' | 'openai:o3-mini' {
      const estTokens = estimateTokens(task.input);
    
      if (task.type === 'codegen') {
        // code 任務預設走專用 code model
        return task.meta.maxCostUSD < 0.05 ? 'local:qwen' : 'openai:o3-mini';
      }
    
      if (task.type === 'longform') {
        if (estTokens > 120_000) return 'openai:gpt-4.1-mini';
        return 'local:qwen';
      }
    
      // query 一般問答
      if (task.meta.maxLatencyMs < 3000) {
        // 低延遲預算 → 本地或較小雲端模型
        return 'local:qwen';
      }
    
      return 'openai:gpt-4.1-mini';
    }
    

    這類路由就是 Fugu 類型系統在工程上的落地:先把任務分型,路由邏輯就自然長出來

    💡 關鍵:maxLatencyMsmaxCostUSD 這類 metadata 控制路由,可以在同一套架構裡同時優化成本與延遲。


    3. 回覆聚合與仲裁:多模型輸出怎麼合成一個答案

    多模型協作的價值在於:

    • 一部分模型擅長查(search / recall),一部分擅長寫(rewrite / explain)
    • 或同一任務交給兩個模型,透過仲裁降低幻覺

    典型做法:

    1. 並行呼叫 2–3 個模型:如本地 Qwen + 雲端 GPT
    2. 用一個「仲裁模型」來閱讀所有候選答案,輸出最終回覆與信心分數

    仲裁 prompt 示意:

    const arbiterPrompt = `你是仲裁模型。你會看到多個模型的回答,請:
    1. 比較其一致性與是否自相矛盾。
    2. 檢查是否有推理錯誤或明顯幻覺。
    3. 選出最可信的一個,並在有疑慮時標記「不確定」。
    
    輸出 JSON:
    {
      "winner": "model_a" | "model_b",
      "confidence": 0-1,
      "final_answer": "...",
      "notes": "..."
    }`;
    

    好處:

    • 提高可靠性(特別是檢索或工具調用密集場景)
    • 可以把仲裁結果記錄下來,用於後續離線分析各模型表現

    成本上升是必然,常見做法是:

    • 只在 高價值任務 / 有風險的 domain(法律、醫療) 開啟仲裁
    • 其他場景靠單模型 + tool verification 解決

    4. 單一 LLM vs 多 LLM 編排:實際取捨

    單一 LLM

    • 優點:實作簡單、debug 容易、觀測鏈短
    • 缺點:
    • 價格彈性差:所有任務都用貴模型
    • 供應商風險:價格調整、限額、區域封鎖都直接影響產品
    • 難以對應極端需求(超長上下文、線下敏感數據)

    多 LLM 編排(Fugu 路線):

    • 優點:
    • 不同任務用最合適的模型 → 可靠性與成本可同時優化
    • 可以把敏感任務 route 到本地模型,降低隱私風險
    • 雲端服務掛了可以 fallback 到次佳方案
    • 缺點:
    • 觀測與 debug 變複雜(誰的錯?哪一層出問題?)
    • 延遲可能放大(串聯多步、多模型仲裁)
    • 各家 API、tool schema、系統提示格式不一致,需要一層 adapter

    對多數專案來說:

    • MVP 階段 → 單一 LLM + 清楚的 abstraction
    • 成本 / 隱私壓力出現後 → 漸進式導入多模型編排,而不是一次重寫

    💡 關鍵: 多模型不是為了「酷」,而是為了在成本、可靠性、隱私之間取得更穩定的折衷。


    實作範例:OpenAI + 本地 Qwen + 專用 code model

    以下給出一個可自建的最小多模型編排骨架(Node/TypeScript 風格,但概念可套任何語言)。

    1. API 介面設計

    對前端/上游只暴露一個 API:POST /v1/ai/execute,輸入統一的 Task 結構。

    // express / fastify handler
    app.post('/v1/ai/execute', async (req, res) => {
      const task: Task = req.body;
    
      const modelId = routeModel(task);
    
      const controller = new AbortController();
      const timeout = setTimeout(() => controller.abort(), task.meta.maxLatencyMs);
    
      try {
        const rawResponse = await callModel(modelId, task, { signal: controller.signal });
        const parsed = normalizeOutput(task, rawResponse);
    
        await logTask({ task, modelId, rawResponse: parsed });
    
        res.json(parsed);
      } catch (e) {
        const fallback = await tryFallback(task, modelId);
        res.json(fallback);
      } finally {
        clearTimeout(timeout);
      }
    });
    

    2. 模型 adapter:解決不同 API / token 格式

    常見坑是:

    • 系統訊令格式不同(OpenAI messages vs 本地單純 prompt
    • tool / function call schema 不同

    用 adapter 隔離差異:

    async function callModel(modelId: string, task: Task, opts: { signal: AbortSignal }) {
      switch (modelId) {
        case 'openai:gpt-4.1-mini':
          return callOpenAI(task, opts);
        case 'openai:o3-mini':
          return callOpenAICode(task, opts);
        case 'local:qwen':
          return callLocalQwen(task, opts);
        default:
          throw new Error(`Unknown model ${modelId}`);
      }
    }
    
    async function callOpenAI(task: Task, { signal }: { signal: AbortSignal }) {
      const messages = buildMessagesFromTask(task);
      const resp = await openai.chat.completions.create({
        model: 'gpt-4.1-mini',
        messages,
        temperature: 0.2,
        response_format: { type: 'json_object' },
        signal,
      });
      return resp.choices[0].message.content;
    }
    
    async function callLocalQwen(task: Task, { signal }: { signal: AbortSignal }) {
      const prompt = buildPromptFromTask(task); // 單一 string
      const resp = await fetch('http://localhost:8000/v1/completions', {
        method: 'POST',
        body: JSON.stringify({
          model: 'qwen-32b-instruct',
          prompt,
          max_tokens: 2048,
          temperature: 0.1,
        }),
        signal,
      }).then(r => r.json());
      return resp.choices[0].text;
    }
    

    只要嚴格把「怎麼跟模型講話」鎖在 adapter 裡,上層就可以只面對 Task


    3. 超時與 fallback 策略

    簡單可行的策略:

    1. 以延遲為主的 fallback

    2. 本地模型超時 → fallback 到雲端小模型

    3. 雲端模型錯誤/超時 → fallback 到本地(或退化版回答)
    async function tryFallback(task: Task, failedModelId: string) {
      const fallbackId = pickFallbackModel(task, failedModelId);
      if (!fallbackId) throw new Error('No fallback model');
    
      const raw = await callModel(fallbackId, task, { signal: AbortSignal.timeout(2000) });
      return normalizeOutput(task, raw, { degraded: true, usedFallback: true, fallbackId });
    }
    
    1. 回應標註退化狀態:在 normalizeOutput 中加入:
    {
      "answer": "...",
      "meta": {
        "modelId": "local:qwen",
        "usedFallback": true,
        "fallbackFrom": "openai:gpt-4.1-mini",
        "degraded": true
      }
    }
    

    讓前端可以決定是否顯示「此回答為備援模型生成」。


    4. 觀測與日誌結構:解決「昨晚 agent 到底做了什麼」

    多模型編排很容易變成黑箱。建議最少做到:

    • 每個 Task 一個 traceId
    • log 中至少包含:
    • traceId, task.type, task.meta
    • 選擇的 modelId、fallback 情況
    • 每步 latency、token 使用量
    • 仲裁結果(如果有)

    示意:

    interface TaskLog {
      traceId: string;
      taskType: Task['type'];
      modelId: string;
      fallbackFrom?: string;
      latencyMs: number;
      inputTokens: number;
      outputTokens: number;
      success: boolean;
      error?: string;
    }
    
    async function logTask(log: TaskLog) {
      // 可寫入 ClickHouse / BigQuery / Elastic
      console.log(JSON.stringify({ kind: 'taskLog', ...log }));
    }
    

    這類結構化 log 是後續做「loop engineering」(自動 self-correct / regression test)與成本優化的基石。


    建議與注意事項

    1. 延遲放大:多模型 ≠ 多倍延遲

    • 儘量並行呼叫可獨立的模型,再用仲裁合併。
    • 嚴格設定 per-model timeout,避免某個模型拖垮整個請求。
    • 對長任務(如自動寫測試、長時間 agent loop)要分段 log,避免只看到「跑了一小時,掛了」。

    2. 工具 / 系統 prompt 不一致

    • 不同家模型對 system / tools / function calling 的支援度不同。
    • 最好的做法:
    • 定義自己的 工具層 schema(如 JSON Tool 定義)
    • 在 adapter 把它映射成各模型需要的格式
    • 千萬避免在業務邏輯裡到處寫 if (model === 'gpt-4.1-mini') 這種分支。

    3. 責任歸屬與 debug 困難

    多模型編排容易出現:

    • prompt 沒設好 → 模型亂回答
    • 路由策略不合理 → 小模型被丟去做艱難任務
    • 仲裁錯誤 → 明明較好的答案被丟掉

    實務上建議:

    • 為每一層定義清楚的「契約」
    • 路由層:輸入 Task,輸出 modelId,不關心內容
    • adapter:保證把 Task 翻譯成該模型最佳格式
    • 仲裁層:對模型輸出負責,不對業務邏輯負責
    • 做回溯時先問:錯在路由、adapter、模型本身、還是仲裁?

    4. 不要一開始就 over-engineer

    • 若你現在是:一個雲端 LLM + 少數工具,建議只先做:
    • 抽出 Task 類型
    • 寫好 model adapter(即使目前只有一個模型)
    • 之後要引入本地 Qwen、專用 code model、Fugu 式仲裁機制,就只是替換實作,而不是重寫整個系統。

    核心結論: 多模型協作不是把更多模型硬塞進系統,而是用 清晰的任務類型 + 路由 + 仲裁 + 可觀測性,把「哪個模型做什麼」變成一個可以演進的工程決策。從這個角度看,你可以在自己的專案裡做一個「迷你 Fugu」,用極少的代碼換來更好的成本控制、可靠性與供應商彈性。


    🚀 你現在可以做的事

    • 在現有專案中抽出一層 Task 類型與 routeModel(),把模型選擇邏輯從業務程式碼移出來
    • 寫一個簡單的 model adapter(例如包一層 callModel()),即使目前只支援單一 gpt-4.1-mini
    • 為每次模型呼叫加上 traceId 與結構化 log,開始累積日後做成本與可靠性優化所需的資料
  • 一行指令複製網站?這個開源 AI 超會抄

    一行指令複製網站?這個開源 AI 超會抄

    📌 本文重點

    • 一行指令即可把任意網站拆成 React/Next.js 專案骨架
    • 同步抽離樣式與資源,變成可重用 UI 樣板庫
    • 可自訂 AI 模型與 Agent 流程,嵌入既有開發工作流

    只要一行指令,ai-website-cloner-template 就能幫前端 / 全端工程師,把任意網站抓下來、拆成 React/Next.js 專案骨架,當成你的下一個模板起點。

    專案連結:https://github.com/JCodesMore/ai-website-cloner-template


    核心功能:AI Agent 幫你做的 3 件事

    1. 自動爬 DOM,拆出乾淨的前端骨架

    它做的事可以想成「把你平常手動切版的流程自動化」:

    1. 你輸入目標網址
    2. AI coding agents 會:
    3. 爬取 DOM 結構(HTML 標籤、階層關係)
    4. 抽離文字內容、圖片連結等資源
    5. 判斷哪些區塊可以抽成 React component
    6. 最後輸出一個前端專案:
    7. 支援 React / Next.js 等現代框架骨架
    8. 檔案結構已拆好(components/, pages/, styles/

    你可以做的事

    • 把原站當「免費設計稿」,快速得到一個可維護的 React/Next.js 專案,而不是一大包雜亂的 index.html

    💡 關鍵: 自動切出 components/, pages/, styles/ 結構,讓你一開始就站在「可維護專案」而非雜亂單檔的起跑點。


    2. 抽離樣式與資源,變成可重用的樣板庫

    除了 DOM,它還會幫你拆:

    • CSS / Tailwind class:重構成可讀的樣式檔
    • 圖片 / icon / 字型:整理成資源目錄
    • 結構化內容:方便之後換成你的文案或接 API

    實際效果

    • 原本你可能要開 DevTools 一個區塊一個區塊 copy style,現在交給 Agent 自動做
    • 把「別人網站」變成「自己的 UI 元件庫」,拿來之後快速組頁

    你可以做的事

    • 針對常見區塊(Hero、Pricing、Footer)提取成自己團隊的內部 UI Library
    • 搭配設計系統,把色票、字體替換掉,長得像你家產品而不是完全 copy

    3. 與你習慣的 AI 模型 / Agent 框架串在一起

    專案本身是 TypeScript 寫的模板,重點是:

    • AI 模型可替換:支援你自己設定的 API Key(如 OpenAI、Claude 等)
    • Workflow 可客製:你可以改「Agent 該跑哪些步驟」
    • 先爬 sitemap 再挑幾頁複製
    • 只抓特定 path(例如 /pricing/blog
    • 複製完自動開 PR 到既有 mono-repo

    你可以做的事

    • 把它嵌進既有的 AI 代理框架(AutoGen、LangGraph 等),當成「網站拆解模組」
    • 做一個公司內部的「一鍵起站」CLI:輸入競品網址 → 自動產出分析專案 + Demo 站

    💡 關鍵: 可替換模型與自訂 workflow,讓它不只是單一工具,而是能融入你整套 AI 開發流水線的「模組積木」。


    適合誰用?4 個很實際的情境

    1. 競品分析:看懂別人怎麼設計,而不是偷他內容

    「Vibecoding」的概念現在已經被拿來做軟體併購評估,Bain & Company 就會用 AI 把標的產品重現一次,看它到底有沒有護城河。

    你可以用同樣的思路:

    • 把競品的主要頁面 clone 成 Next.js 專案
    • 在程式層級看:
    • 資訊架構怎麼切
    • 互動細節放在哪些 component
    • 如何安排轉換漏斗上的 CTA

    採取行動

    • 選 1 個競品主頁 → 跑一遍 AI Cloner → 用 VS Code 開專案,直接在 component 結構裡做 UX/IA 分析筆記。

    2. 重構老專案:把舊 jQuery 站拉進現代框架

    很多公司還有:

    • jQuery + 雜 CSS
    • Server-side render 的混雜模板

    你可以:

    1. 在內網或 staging 架一份舊站
    2. 用 AI Cloner 指向這個 URL
    3. 拿到一個 React/Next.js 骨架
    4. 再慢慢把舊的業務邏輯搬過去

    採取行動

    • 挑公司裡一個「大家都嫌舊但沒時間重寫」的小工具頁面,試著用這個流程生一個新骨架,看看重構成本能不能壓下來。

    3. 設計稿 → 靜態樣板:省去第一輪切版

    設計師常丟來:

    • Figma Prototype 已經掛在公開 URL
    • 或用工具輸出成靜態 demo 站

    以前:你從零切版。現在:

    • 把這個 demo URL 丟給 AI Cloner
    • 得到一個可編輯的前端專案
    • 再按需求調整 class 命名、拆 component

    採取行動

    • 和設計師約好:先用 No-code / Figma plugin 做出可瀏覽 demo → 丟給 Cloner → 工程師直接在生成專案上改,而不是從白板開始。

    4. POC / 黑客松:一晚搞定 Landing Page + 互動畫面

    黑客松、內部 POC 最常卡在:

    • 「找不到設計」
    • 「前端做不完,最後只剩 API Demo」

    這時可以:

    • 找一個你喜歡的公開 Landing Page
    • 用 AI Cloner 生成前端專案
    • 把文案、Logo、配色改成自己的
    • 接上你做的 API / 後端

    採取行動

    • 下次 Hackathon 前先準備好一個 starter repo:裡面就是你常用的 clone 模板,換文案 + 功能就能 demo。

    怎麼開始:本機安裝到第一行指令

    以下以本機開發為例,假設你已經有 Node.js 基本經驗。

    1. 環境需求

    • Node.js:建議 18+(node -v 確認)
    • npm 或 pnpm
    • Git
    • 一組可用的 AI API Key(例如 OpenAI)

    採取行動


    2. 下載專案 & 安裝依賴

    在終端機裡:

    # 1. Clone 專案
    git clone https://github.com/JCodesMore/ai-website-cloner-template.git
    cd ai-website-cloner-template
    
    # 2. 安裝依賴
    npm install   # 或 pnpm install / yarn
    

    3. 設定 AI API Key

    通常專案會使用環境變數(.env)。以 OpenAI 為例:

    1. 在專案根目錄建立 .env
    2. 寫入類似:
    OPENAI_API_KEY=你的_API_Key
    MODEL_NAME=gpt-4.1-mini  # 或你想用的模型
    

    實際變數名稱以 repo 文件為準,請對照 GitHub README。

    採取行動


    4. 下第一個指令:輸入網址 → 生成專案

    安裝完成後,專案通常會提供一個 CLI script,例如(實際命令以 README 為準):

    # 假設提供 npx 方式
    npx ai-website-cloner clone \
      --url "https://example.com" \
      --framework "next" \
      --out-dir "./cloned-example"
    

    執行流程會大致經過:

    1. 檢查能不能連到目標網站
    2. 由 AI Agents 爬 DOM、解析樣式
    3. 生成 React/Next.js 專案骨架到指定資料夾

    完成後:

    cd cloned-example
    npm install
    npm run dev   # Next.js 開發伺服器
    

    打開 http://localhost:3000,你就會看到一個「長得很像原站」的本地版本。

    採取行動

    • 先找一個你自己做的公開測試站(或公司內部測試環境),拿來當第一個目標,熟悉流程再碰競品網站。

    5. 客製自己的 workflow:換模型、改 Agent 流程

    因為專案是 TypeScript 寫的,你可以:

    • src/agents(假設路徑)裡修改:
    • 要爬哪些路徑
    • 怎麼決定哪些 DOM 要抽成 component
    • 在設定檔裡替換成你愛用的模型:
    // pseudo example
    const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY })
    const modelName = process.env.MODEL_NAME ?? "gpt-4.1-mini"
    

    或改成你自己的 Agent Framework,讓它在 Clone 完後:

    • 自動開 issue 給團隊
    • 自動寫一份「前端結構說明」Markdown

    採取行動

    • 挑一個最常用的模型,先固定下來(例如 gpt-4.1-mini 或 Claude 的中小模型),避免每次切專案都要改設定。

    風險與界線:這工具能做什麼、不能做什麼?

    1. 版權與服務條款:不要直接商用 clone 別人站

    AI Cloner 本質上是在「重現別人網站的設計與結構」,這很容易踩到:

    • 著作權(UI 設計、文案、圖片)
    • 服務條款(很多網站禁止自動抓取內容)

    建議用法

    • 用在:
    • 內部學習與研究架構
    • 重構自家系統(針對自己擁有的網站)
    • 內部工具、POC、Prototype
    • 避免:
    • 直接把 clone 出來的站上線做商業服務
    • 完整複製競品的 UI、文案、圖片

    採取行動

    • 在專案 README 或公司內部使用規範裡寫清楚:此工具僅用於「學習 / 內部開發」,禁止直接部署 clone 來對外營利。

    2. 安全性:vibe coding 不是免責牌

    The Verge 曾經寫過一個案例,工程師用 vibe coding 快速做站,結果留下 SQL Injection 洞。AI 幫你省的是「切版、搬磚」,不是「安全檢查」。

    使用這種工具時,記得:

    • 不要盲信生成的程式碼
    • 一律跑:
    • Lint / Type check
    • 基本安全檢查(尤其是你接上自己 API 後)
    • 對任何「用戶輸入 → 資料庫 / API」的路徑,重新檢查:
    • 有沒有做輸入驗證
    • 有沒有用參數化查詢

    採取行動

    • 把你既有的 ESLint / Prettier / 安全掃描(如 npm audit、SAST 工具)加入這個 clone 專案的 CI流程,要求「生成完也要過一輪檢查」。

    💡 關鍵: 把它當自動切版工具而非完整工程師,安全與品質檢查仍然要照表操課。


    小結:把它當「前端樣板生成器」,而不是抄襲機器

    ai-website-cloner-template 最適合的定位是:

    • 前端 / 全端工程師的 AI 起站工具
    • 幫你:
    • 把「你看到的網站」拆成「你看得懂、改得動的 React/Next.js 專案」
    • 在競品分析、系統重構、黑客松裡省下大段切版時間

    只要守住版權與安全紅線,它會是一個很好用的「AI 助手」,幫你把時間留給真正有價值的程式設計與產品決策。

    🚀 你現在可以做的事

    • 打開 https://github.com/JCodesMore/ai-website-cloner-template,clone 專案並依 README 完成第一次跑 CLI
    • 挑一個自己的舊頁面或 side project,實測從 URL → Next.js 骨架的完整流程
    • 在團隊內部 Git repo 建一個 starter 分支,把客製後的 Cloner flow 當作共用起站模板