作者: kerwin77106

  • 用 Vercel Skills 把 AI 變成你的命令列工具箱

    用 Vercel Skills 把 AI 變成你的命令列工具箱

    📌 本文重點

    • Vercel Skills 把 AI Agent 打包成可安裝的 CLI 工具
    • 一行 npx skills 就能體驗預設技能並接到自動化流程
    • 每個 skill 可在不同專案與 CI/CD 中重複使用與串聯
    • 適合開發者、行銷、DevOps 做文字與流程自動化

    用一句話說清楚:Vercel Skills 讓你用一行 npx skills,把一整包 AI Agent 當成可安裝的命令列工具,快速接到你的開發與自動化流程裡。

    專案連結:vercel-labs/skills on GitHub


    核心功能:把「AI 能力」做成可重用的 Skill 模組

    1. 一行指令啟動預設技能:npx skills

    想先感受效果,不想碰程式碼,可以直接這樣做:

    npx skills@latest
    

    執行後會:

    • 問你要使用哪些預設技能(例如:文件總結、PR 說明、自動整理 issue 等)
    • 在終端機互動式詢問你輸入內容或指定檔案
    • 把 AI 結果輸出在終端機,必要時也會幫你生成檔案

    你可以把它當成「AI 強化版 CLI 工具集」,用一次就知道哪些任務適合被 AI 自動化。

    💡 關鍵: 一行 npx skills@latest 就能體驗整套預設 AI 技能,是評估哪些工作可以自動化的最快方式。


    2. 每個 skill 就是一個可複用的 Agent 模組

    在 Skills 的設計裡:

    • 一個 skill = 一件具體可自動化的工作
    • 例如:summarize-doc(總結文件)、pr-description(產生 PR 描述)、rewrite-copy(改寫文案)
    • 實作上:一個 skill 就是一個 TypeScript/Node.js 模組,負責:
    • 接收輸入(檔案路徑、文字、Git diff 等)
    • 呼叫 LLM(預設走 Vercel AI SDK,可接 OpenAI / Vercel 等)
    • 回傳結構化結果(可以寫回檔案、回傳 JSON、或印在 CLI)

    這種設計的好處是:

    • 你可以在不同專案重複使用同一個 skill
    • 一個專案裡可以組合多個 skill 變成「串聯流程」(例如:先用一個 skill 擷取重點,再用另一個 skill 生成測試案例)

    💡 關鍵: 把每個任務抽象成 skill 模組後,你可以在多個專案與流程中重複組裝同一套 AI 邏輯,維護成本更低。


    3. 兩種使用方式:CLI 與程式內呼叫

    你可以把 Skills 當成:

    1. 命令列工具(CLI):適合快速手動使用、寫腳本
    2. 例如:
      bash
      # 執行某個 skill
      npx skills run summarize-doc ./docs/api.md

    3. 程式內呼叫(Node.js / TypeScript):適合接到 CI/CD、背景工作、Bot

    4. 基本結構類似:
      “`ts
      import { runSkill } from “skills”;

      const result = await runSkill(“summarize-doc”, {
      path: “./docs/api.md”,
      });

      console.log(result.summary);
      “`

    這讓 Skills 不只是一個「玩具 CLI」,而是可以被真正嵌入系統裡的 AI 自動化模組。

    💡 關鍵: 同一個 skill 既能在 CLI 使用,也能在程式碼中透過 runSkill 呼叫,降低從實驗到正式上線的落差。


    適合誰用:幾個具體場景

    1. 開發者:減少重複性的開發瑣事

    可以嘗試這幾類 skill:

    • 自動產出 PR 描述
    • CI 裡加入:檢查 PR 的 diff,用 skill 生成清楚的變更說明
    • 好處:大家不再花時間想描述格式,Reviewer 一眼看完重點
    • 整理 issue / ticket
    • 拉取標題 + 描述,讓 skill 自動標記類型、估計複雜度、抽出待辦項目
    • 好處:產品、工程、PM 都看到一致結構的內容
    • 生成測試案例
    • 針對關鍵函式或 API 定義,讓 skill 幫你列出可能的測試情境
    • 再由你挑選重要的手動補完

    可以做的行動:

    • 先用 npx skills 跑一輪預設技能
    • 想想你專案裡最常被抱怨「麻煩但又必須做」的步驟,選 1 個先做成 skill

    2. 內容與行銷:批次改寫與整理文字

    如果你常做這些事,Skills 很適合:

    • 批次改寫文案
    • 輸入一批產品描述,統一改寫成:短版、長版、社群貼文版
    • 可以客製 skill:輸入 CSV / JSON,輸出同格式檔案
    • 整理長文件摘要
    • 對內部文件(產品規格、研究報告)做摘要 + 重點 bullet points
    • 適合接到定時腳本:每天把新文件丟給 skill,產出摘要寄到 Slack

    可以做的行動:

    • 先準備一個資料夾,放你常用的範本文案或長文
    • 用 npx skills 裡的 summary / rewrite 類 skill 試一次,感受輸出品質

    3. DevOps / 自動化工程師:接到 CI/CD、排程腳本

    你可以把 Skills 當成「AI 版 shell script 函式庫」:

    • 在 GitHub Actions 或 GitLab CI 裡:
    • Pull Request 建立時自動跑 npx skills run pr-description
    • Release 前跑一次 npx skills run summarize-changelog 整理修改內容
    • 在 cron / 定時腳本 裡:
    • 每天抓 issue / log / 監控報表丟給某個 skill,整理成一份人類可讀的摘要

    可以做的行動:

    • 在現有 CI pipeline 裡挑一個步驟,加一個額外 job 試跑 Skills
    • 先只在非必要流程執行,觀察穩定度與輸出品質

    怎麼開始:從預設技能到自訂 skill

    1. 安裝與首次執行

    前置需求:

    • Node.js(建議 18+)
    • 一個可用的 LLM API(例如 OpenAI 或 Vercel AI)

    第一步:直接執行 CLI(免全域安裝):

    npx skills@latest
    

    依照互動式提示:

    1. 選擇或設定你的模型提供者(可能會要求設定 API key)
    2. 選擇一個想先試的 skill(例如 summarize / pr-description)
    3. 依照提示輸入文字、選檔或指定路徑

    這一步的目標:先確認環境 OK + 大概知道 skill 的輸出長什麼樣子。


    2. 看一個最簡單自訂 skill 的程式結構

    接下來你可以把專案 clone 下來:

    git clone https://github.com/vercel-labs/skills.git
    cd skills
    pnpm install # 或 npm / yarn
    

    假設你要做一個最簡單的「文案改寫」 skill,概念結構會像這樣(簡化示意):

    // ./skills/rewrite-copy/index.ts
    import { defineSkill } from "skills";
    import { generateText } from "ai-sdk"; // 具體以官方範例為準
    
    export default defineSkill({
      name: "rewrite-copy",
      description: "改寫一段文案,維持原意但更口語/正式。",
      inputs: {
        text: {
          type: "string",
          description: "要改寫的原始文案",
          required: true,
        },
        tone: {
          type: "string",
          description: "語氣:casual 或 formal",
          default: "casual",
        },
      },
      async run({ inputs, model }) {
        const prompt = `請用${inputs.tone} 語氣改寫以下文案,但保留原本資訊:\n\n${inputs.text}`;
    
        const result = await generateText({
          model,
          prompt,
        });
    
        return {
          rewritten: result.text,
        };
      },
    });
    

    接著,你可以在本地 CLI 裡直接呼叫:

    npx skills run rewrite-copy --text "原始文案內容" --tone casual
    

    這就是 Skills 的基本模式:

    1. 用 defineSkill 宣告輸入/輸出與執行邏輯
    2. 在 run 裡呼叫你喜歡的模型
    3. 回傳一個乾淨的結果物件,方便 CLI 或其他程式接

    3. 在你的專案裡以 API / CLI 串接

    有兩種常見方式:

    方式 A:在 CI / script 裡用 CLI

    以 GitHub Actions 為例,在 .github/workflows/pr-description.yml 加上:

    jobs:
      generate-pr-description:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v4
          - uses: actions/setup-node@v4
            with:
              node-version: 20
          - run: npx skills@latest run pr-description --diff "$(git diff origin/main)"
            env:
              OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
    

    這樣每次開 PR 就會自動產生一段描述,印在 log 或寫到你指定的地方。

    方式 B:在 Node.js 應用程式裡呼叫

    在你自己的專案中安裝:

    npm install skills
    

    然後在程式裡:

    import { runSkill } from "skills";
    
    async function summarizeDoc(path: string) {
      const result = await runSkill("summarize-doc", { path });
      return result.summary;
    }
    

    接著你可以:

    • 在後端 API 提供 /summaries endpoint
    • 在排程腳本裡定時呼叫
    • 在 Slack Bot 裡接指令呼叫

    把 Skills 放進你的「AI 自動化工具箱」的建議做法

    建議一日內可以完成的小目標:

    1. 先用 npx skills 跑三個預設技能:文件摘要、PR 描述、文案改寫
    2. 挑一個你每天都會做、卻很耗時間的文字相關工作,寫成一個最小版 skill
    3. 在你現在的 CI 或本地腳本裡,接入這個 skill(先只給自己用)
    4. 一週後觀察:
    5. 節省了哪些手動步驟?
    6. 哪些輸出需要調 prompt 或加後處理?

    只要跑完這一輪,你就等於有了一個可持續擴充的「AI 自動化工具箱」,之後每多一個 skill,就是少一個你自己要反覆做的瑣事。


    專案連結再附一次:https://github.com/vercel-labs/skills

    想像一下:未來你新增工具,不是寫一串 shell script,而是新增一個 skill,讓 AI 幫你處理掉更多「人做很累、AI 卻很擅長」的工作。

    🚀 你現在可以做的事

    • 在本機直接執行 npx skills@latest,跑一輪預設技能體驗輸出
    • git clone 官方專案並閱讀 skills 目錄下的範例,試著複製一個改成自己的 skill
    • 在一個現有 CI pipeline(如 GitHub Actions)中,加上一個使用 npx skills run pr-description 的非關鍵實驗步驟
  • Workspace Agents 打造可放手跑的團隊自動化

    Workspace Agents 打造可放手跑的團隊自動化

    📌 本文重點

    • Workspace Agents 提供雲端代管的 Agent runtime + 沙箱
    • 核心是 Draft → Approve → Execute 的 human-in-the-loop 控制
    • 工具要設計成小顆、受限、可審計且避免無邊界能力
    • 適合 80% 自動化交給雲端,20% 關鍵邏輯留在自家後端

    對有後端與自動化經驗的開發者而言,Workspace Agents 解決的痛點很明確:

    1. 從「單輪聊天」升級成「可長時間運行、多步工作流」,不必自己寫一套 Agent loop。
    2. 內建安全沙箱與權限邊界,降低「Claude dangerouslyDisableSandbox 這種黑箱工具調用」的風險。
    3. 把 REST / GraphQL / DB / SaaS 都工具化給 Agent 調用,但仍保留 Draft → Approve → Execute 的 human-in-the-loop 控制。

    實際上,它更像「雲端版、LLM 驅動的 Zapier/Make + 任務協調器」,而不是另一個 custom GPT 皮膚。


    重點說明:Workspace Agents 的技術定位

    1. 與 custom GPT / Zapier / 自建 Agent 的差異

    技術定位可以粗略想成:Codex + Agent Loop + Workspace Sandbox:

    💡 關鍵: Workspace Agents 把模型、Agent loop、沙箱與 Workspace 權限綁成一個整體,用「雲端代管 runtime + 工具」取代你自建大部分基礎設施。

    • 比 custom GPT 多了什麼?
    • custom GPT:偏向「有工具的聊天介面」。
    • Workspace Agents:

      • 可以在 Workspace 中持續跑任務、排程、被 webhook 喚醒。
      • 有雲端執行環境與持久可觀測的 run log。
      • 官方提供 Responses API / WebSocket 來優化 agentic workflow 延遲(參考官方 Speeding up agentic workflows with WebSockets)。
    • 與 Zapier / Make 的差異:

    • Zapier:流程是你設計的 BPMN / if-else pipeline。
    • Workspace Agents:流程邏輯多數下放給 LLM(Codex)動態決策,你提供工具與邊界,它決定如何串。
    • 適合「規則不好寫死」「工具多變」的情境,例如支援 slack + CRM + 自家 API 的 case routing。

    • 與自建 Agent framework 的取捨:

    • 自建(LangGraph 等):
      • 優點:可以完全控制 state、工具調用實作、私有部署。
      • 缺點:你得自己處理 agent loop、tool sandbox、觀測/重試、延遲優化。
    • Workspace Agents:
      • 優點:基礎設施(loop + sandbox + 日誌)官方代管,直接在 ChatGPT Workspace 與 API 共用。
      • 缺點:可程式化程度受限,適合「80% 流程交給雲端 Agent,20% 自家後端收尾」的架構。

    2. 安全沙箱與權限邊界設計

    Workspace Agents 強調:工具調用是顯式、受限、可審計的。

    • 工具(tools)以 JSON schema / OpenAPI 宣告,Agent 只能調用你掛進去的 endpoint。
    • 雲端沙箱環境與 Workspace 權限綁定:
    • 不會給 Agent 任意 Bash / file system 的 root 權限。
    • 沒有類似 Claude dangerouslyDisableSandbox 的逃逸入口——除非你自己提供一個「超能力」工具。
    • 每次工具調用都會留在 run log,方便你做:
    • 事後審計:誰在什麼 prompt 下觸發了哪個工具?
    • 風險回滾:出錯時可以重播 / 重跑某一段工具調用。

    關鍵心態:視每一個工具就是一個受限 microservice,不要把 root 能力直接丟給 LLM。

    3. 可放手跑又可觀測的多步工作流

    Workspace Agents 的核心是:LLM 掌管控制流,你負責設計工具與觀測面板。

    典型 pattern:

    1. Agent 接到任務(由 ChatGPT UI、API 或 webhook 觸發)。
    2. 根據 system / instructions 決定要走 Draft → Approve → Execute:
    3. Draft:只產生計畫與待呼叫工具清單。
    4. Approve:把計畫送到 Slack / UI Approver 確認。
    5. Execute:得到人類批准後,才真正呼叫具破壞性的工具(寫 DB、呼叫付款 API)。
    6. 全程透過 Workspace console 的 run timeline + tool call log 觀測,必要時人工接管。

    實作範例:從工具封裝到 human-in-the-loop

    以下用「客服回饋彙整 + 建議調整 CRM 標籤」的 workflow 示範。

    1. 把內部 REST / GraphQL / DB / SaaS 包成工具

    以 OpenAI Responses API 工具宣告風格為例(概念 YAML,可轉成 JSON):

    # tools.yaml
    - name: get_tickets
      description: 依條件查詢最近的客服 ticket
      type: function
      parameters:
        type: object
        properties:
          status:
            type: string
            enum: [open, closed]
          limit:
            type: integer
            default: 50
        required: [status]
    
    - name: update_crm_tag
      description: 更新單一客戶的 CRM 標籤(具破壞性操作)
      type: function
      parameters:
        type: object
        properties:
          customer_id:
            type: string
          tags:
            type: array
            items:
              type: string
        required: [customer_id, tags]
    

    在你的後端將這些工具綁到實際 REST / GraphQL / DB:

    // pseudo-code: Node.js express + Responses API
    import { openai } from "./openai-client";
    
    const tools = [/* 載入上面的 schema 並加上實作 mapping */];
    
    app.post("/agent-run", async (req, res) => {
      const response = await openai.responses.create({
        model: "gpt-4.5-codex", // 假想 agent-capable 模型
        input: req.body.input,
        tools,
        tool_choice: "auto",
        metadata: { workflow: "support-crm-pipeline" }
      });
    
      res.json(response);
    });
    

    後端實作端要特別注意:

    • 每個工具實作中再做一次權限檢查(不要只信任 LLM)。
    • update_crm_tag 類工具要有 rate limit + audit log。

    2. Draft → Approve → Execute 的 human-in-the-loop

    核心策略:讓 Agent 自己知道有些工具需要「approval_token」才可調用。

    在 system message 給 Agent 清楚規則:

    {
      "role": "system",
      "content": [
        {
          "type": "text",
          "text": "你是客服自動化 Agent。分三階段:\n1) Draft: 分析 ticket 並產生建議標籤與修改計畫,只能使用 get_tickets 工具。\n2) Approve: 把計畫整理成給主管看的摘要,等候 'APPROVED' 再進入 Execute。\n3) Execute: 收到 'APPROVED' 且被注入 approval_token 後,才可以呼叫 update_crm_tag。\n永遠不要在沒有 approval_token 的情況下更新 CRM。"
        }
      ]
    }
    

    在你的後端把它拆成兩個 call:

    // 1) Draft + Approve(不給具破壞性工具)
    const draftRun = await openai.responses.create({
      model: "gpt-4.5-codex",
      input: [systemMsg, userMsg],
      tools: [getTicketsTool], // 不提供 update_crm_tag
      tool_choice: "auto"
    });
    
    // 將 draftRun 的摘要貼到 Slack 請主管確認...
    
    // 2) Execute(確認後,才開啟 update_crm_tag)
    if (approved) {
      const executeRun = await openai.responses.create({
        model: "gpt-4.5-codex",
        input: [
          systemMsg,
          { role: "user", content: "APPROVED" },
          { role: "user", content: `approval_token=${approvalToken}` }
        ],
        tools: [getTicketsTool, updateCrmTagTool],
        tool_choice: "auto"
      });
    }
    

    重點:

    • 把「是否提供具破壞性工具」交由你自己的後端邏輯控制,而不是讓 Agent 用 prompt 自己約束自己。
    • 所有更新操作都帶上 approval_token 寫進你的 DB audit log,避免 model 任意重放。

    3. 避免「dangerouslyDisableSandbox」類踩坑

    Claude 事件的教訓:只要給了「無邊界」工具,LLM 就有機會做出你沒預期的事。

    在 Workspace Agents / Responses API 這邊,實務建議:

    1. 禁止提供「泛用 shell / eval 工具」:
    2. 不要暴露 bash, python_exec, sql_anywhere 這種萬能工具。
    3. 改成一組小顆、專用的工具,例如 run_migration_v3, reindex_search, rotate_api_key。

    4. 工具 schema 要明確描述風險(給人看也給 LLM 看):

    json
    {
    "name": "delete_user_data",
    "description": "刪除單一使用者的所有歷史資料。不可回復。僅能在取得法律與 DPO 批准後執行。",
    "parameters": {
    "type": "object",
    "properties": {
    "user_id": { "type": "string" },
    "approval_token": { "type": "string" }
    },
    "required": ["user_id", "approval_token"]
    }
    }

    1. 在工具實作層再做一次 guardrail:
    2. 檢查 approval_token 是否有效、是否對應到正確的人與工單。
    3. 加冷卻期(例如同一 user 一天只能刪一次)。

    4. 關閉「自動 approve 所有工具調用」模式:

    5. 即使官方後續提供「自動工具批准」選項,也建議:
      • 讀操作(GET)可 auto。
      • 寫操作(POST/PUT/DELETE)一律走 Draft → Approve → Execute。

    建議與注意事項:選 Workspace Agents 還是自建?

    1. 適合用 Workspace Agents 的情境

    優先考慮 Workspace Agents,當你的需求符合:

    • 已經在用 ChatGPT Business / Enterprise,想把同一 Workspace 的知識、權限、Slack/Email 整合起來。
    • 需求是:「把一堆 SaaS + 內部 API 串起來」而非「打造高客製 agent runtime」。
    • 對延遲有要求,但可以接受雲端模型:
    • 可透過 WebSocket Responses API 降低 agent loop latency。

    成本角度(參考 Reddit 測試技能對弱模型的增益):

    • 即使使用較便宜模型(類似 Haiku 與 Opus 的對比),
    • 配上好的工具/技能,整體成功率與成本效益高於單純用 SOTA 模型硬算。
    • Workspace Agents 把「技能裝配」這件事標準化,適合用中價位模型跑高頻自動化任務。

    💡 關鍵: 把工作拆給中價位模型 + 精心設計工具,往往比單靠最頂級模型更划算且穩定。

    2. 應該自建 Agent framework 的情境

    考慮自己用 LangGraph / 自家框架時機:

    • 需要 嚴格的 on-prem / VPC 隔離,無法把工作流丟到公有雲。
    • 工作流高度客製:
    • 複雜 state machine、multi-agent negotiation、需要自訂 checkpoint / replay / saga pattern。
    • 你需要直接控制 agent loop 實作、序列化、快取策略(例如結合你自己的向量 DB 與 RAG 策略)。

    折衷做法:

    • 把 Workspace Agents 當作「前台協調層」,負責與人互動、排程、通知。
    • 真正複雜的決策與計算交給你自己的後端 / RAG 服務:
    • Agent 只調用一個 call_internal_orchestrator 工具,
    • 由你自己的系統決定要不要再 call 其他 model / search / DB。

    3. 與現有 RAG / 後端服務整合的最佳實踐

    • RAG 放在你自己那一側,不要讓 Agent 直接 query 各種向量庫:
    • Agent 工具:query_kb({ question }) → 你的 RAG API。
    • 由你決定使用什麼模型、什麼 chunking、什麼 embedding。
    • 這樣有幾個好處:
    • 成本可控:RAG 的 embedding / search 模型可自由替換為更便宜或自建方案。
    • 安全可控:哪些 index 可被哪個 Agent 用,由你自己的 ACL 管。

    總結:

    • Workspace Agents = 雲端 Agent runtime + Sandbox + Workspace 權限整合,把原本你得自建的 Agent framework 一大塊打包好給你。
    • 開發者真正要做的是:
    • 設計好小顆、邊界清楚的工具,
    • 用 Draft → Approve → Execute 把高風險操作關進籠子,
    • 把 RAG / 複雜邏輯放在你可控的後端。

    💡 關鍵: 把 80% 可標準化流程交給 Workspace Agents 跑,關鍵 20% 風險與業務邏輯留在自家後端,是多數團隊較實際的架構選擇。

    如果你目前已經在寫一堆「LLM + Zapier + 自家 webhook」的 glue code,Workspace Agents 值得你直接開一個 Workspace,把一條現有流程搬進去試跑,從觀測與權限開始收斂架構。

    🚀 你現在可以做的事

    • 選一條既有「LLM + Zapier / Make + webhook」流程,畫出其中所有工具與權限邊界,準備搬進 Workspace Agents
    • 把內部 REST / GraphQL / DB / SaaS API 列表整理成工具 schema 構想(含風險等級與是否需要 approval_token)
    • 在測試 Workspace 中實作一個 Draft → Approve → Execute 的小流程,實際觀察 run log 與工具調用行為
  • Google 押注 400 億買 Anthropic,誰被鎖死?

    Google 押注 400 億買 Anthropic,誰被鎖死?

    📌 本文重點

    • 雲巨頭用百億投資預售未來 AI 基礎設施
    • Anthropic 用巨額雲帳單換現金,長期被綁死
    • 開發者短期享便宜模型,長期失去多雲與議價權
    • 兆級估值與上兆 CapEx 正在堆積系統性金融風險

    這不是單純的「Google 看好 Anthropic」。這是一場用400 億美元把未來 AI 基礎設施「預售」給少數雲巨頭的鎖倉行動,短期讓模型變便宜、變好用,長期卻在把整個生態綁死。真正的輸家,不一定是落後的雲廠商,而是開發者、獨立創業者,甚至是被迫承接風險的金融體系。**


    一、從「投資一家實驗室」到「三巨頭包養一實驗室」

    表面上,Google 最多投資 Anthropic 400 億美元,首筆是以 3500 億美元估值投入 100 億現金,後續 300 億視里程碑解鎖,對外故事叫「押注安全導向 AI 先鋒」。但把時間線攤開,你會看到的是一個更詭異的結構:

    • Amazon 先前已經承諾最多 250 億美元投資,換來 未來十年 1000 億美元 AWS 雲支出,外加 Trainium 晶片優先採用權。
    • CoreWeave 則是這場戲裡的算力外包商,補上 GPU 密集型運算缺口。
    • 現在再加上 Google 的 400 億現金 + compute,等於 Anthropic 被三家雲+算力供應商「包養」。

    💡 關鍵: Google 的 400 億只是表面,真正價值在於提前鎖住未來十年規模級別的雲與算力現金流。

    傳統上,雲端是基礎設施、AI 實驗室是客戶;這一輪之後,模型公司和雲基礎設施被「打包售賣」:錢從 Google / Amazon 出來,又以 雲帳單和晶片採購 的形式回流,中間只多了一層「估值衝到兆美元的實驗室」。真正穩賺不賠的是誰?

    • 不是一定能跑出可持續商業模式的 Anthropic,
    • 而是長期鎖定 1000 億等級合約現金流的 AWS、Google Cloud,以及賣晶片、賣機房的 Nvidia、電力與資料中心產業鏈。

    產業結構正在變成:三巨頭合資養一間模型央行,由這間實驗室發行「高階模型貨幣」,再透過自家雲和 API 通路收租。


    二、Anthropic:用 1000 億雲帳單換幾十億現金,換到的是自由還是枷鎖?

    從 Anthropic 的角度,選擇其實殘酷又務實:

    • 高階模型(Claude、Mythos 這類安全/攻防場景模型)需要海量算力。
    • 沒有自建晶片、沒有自建超大機房,只能跟雲巨頭簽 「現金+compute 打包」 的長約。

    於是就有了這種結構:

    • 拿 50 億現金(或 330 億、400 億這級別),
    • 承諾未來十年花 1000 億在 AWS / GCP 上,還要配合採用 Trainium 這種供應商自研晶片。

    💡 關鍵: Anthropic 用數十億現金換來的是百億級別、綁死供應商與技術路線的長期雲承諾。

    短期看,Anthropic 解決了最急迫的 capacity crunch(算力飢荒),可以把 Mythos 拉到更多客戶面前,跟 OpenAI 正面掰手腕。

    但長期看,問題也被鎖死:

    1. 技術路線被寫進合約:
    2. 你不能輕易說:「Nvidia H200 漲價太誇張,我改用其他雲或新創加速卡。」
    3. 因為你的董事會、投資人、甚至債權人,已經把 Trainium / AWS / GCP 的承諾當成未來十年的資本支出預期。

    4. 談判空間被削弱:

    5. 當你還有 800 億美金的未來雲承諾沒花完,你去跟其他雲談條件,只會被當成「拿來壓價的工具」,對方不會給你真正核心資源。

    6. 產品方向被捆綁到雲戰略:

    7. Mythos 主打網路安全、企業級攻防,這剛好是 AWS / GCP 最想守住的高毛利市場。
    8. 模型迭代就會被自然牽引向「怎麼幫雲巨頭賣更多安全產品」,而不是「怎麼讓開源社群更好接入」。

    Anthropic 世代的 AI 實驗室,不再是「從雲租算力的客戶」,而是「被雲預付了十年租金的長約承包商」。這對他們的生存可能是必要條件,但對整個生態是否健康,是另一個問題。


    三、開發者與企業:今天拿到便宜的 Claude,明天多雲自由可能不見了

    從使用者端來看,短期確實是利多:

    • 更多算力 → Claude / Mythos 更便宜、更穩定,吞得下更大的 context、做得動更重的推理與安全分析。
    • Google、Amazon 推聯合方案,企業客戶在 AWS / GCP 上叫用 Anthropic 模型會更方便、可能還有折扣套餐。

    問題在於:這些好處幾乎都建立在綁定前提之上。

    1. 技術綁定:API 不是抽象介面,而是商業鎖鏈
    2. 你以為自己只是「接了一個好用的 LLM API」。
    3. 但當 Claude / Mythos 變成你產品的核心差異化,且實際部署被寫死在 某家雲的私有網路、某種 IAM、某套資料湖格式 時,你已經沒有真正的多雲選擇權。
    4. 想切換到別家模型?重寫一堆 pipeline、安全審計、合規文件,遷移成本高到你只會在合約談不攏時拿來當威脅,而不是實際執行。

    5. 議價能力下滑:從「買方市場」變成「三方壟斷」

    6. 模型市場表面供應者很多:OpenAI、Anthropic、Google、Meta、各種 API 聚合商。
    7. 但在高階能力和企業級 SLA 上,實際上你面對的是 同一批雲與同一批 GPU 供應鏈,價格底線互相心照不宣。
    8. 三巨頭+少數大型實驗室 的組合,足以讓「長期大幅殺價」變成例外,而不是常態。

    9. 擠壓開源與獨立供應商

    10. 當 Claude / Mythos 這種頂級閉源模型被打包進 AWS / GCP 的折扣合約裡,很多 CTO 在預算會議上會問:
      > 「既然我們已經每年給 AWS 幾百萬了,為什麼還要另外付錢給一家小公司或自己維護開源模型?」
    11. 開源模型提供者、獨立推理服務商,將被迫在 沒有規模優勢、沒有資本補貼 的情況下跟巨頭玩價格戰,結局可想而知。

    💡 關鍵: 開發者今天省下的幾十萬雲成本,可能換來未來十年幾乎無法脫身的供應商綁定與議價劣勢。

    對開發者來說,今天省下來的幾十萬雲帳單,有可能換來未來十年的議價權喪失與創新空間緊縮。


    四、政策與金融風險:兆美元估值+巨額舉債機房,風險最後由誰買單?

    這種 「雲換股權」+「巨額 CapEx 舉債」 的循環,已經讓政策圈開始緊張。Elizabeth Warren 在華府直接說:「I know a bubble when I see one.」

    把 Anthropic 放進這個脈絡:

    • 二級市場估值一度衝到兆美元,超過 OpenAI,但現金流仍高度依賴未來可能發生的企業採用。
    • 雲巨頭為了搶 AI 市佔,背後是 上兆美元等級的機房、電力、晶片 CapEx,大量透過債務與結構性融資來支撐。
    • 如果 AI 收益無法在合理時間內覆蓋這些投資,壓力會從幾家科技股,外溢到供應鏈、REITs、公司債市場,甚至壓縮到實體經濟的信貸空間。

    而目前監管的主流焦點仍停在:

    • 「模型會不會胡亂 hallucinate?」
    • 「會不會被用來生成 Deepfake?」

    真正需要被認真檢視的,其實是「資金與算力集中度」,以及這些「循環投資合約」如何在資產負債表上被評價與風險加總。


    結論:這不是在「押對模型」,而是在「鎖倉未來」——開發者要自己保留逃生門

    綜合來看,Google 押 400 億買 Anthropic,不是單純看好 Claude 或 Mythos,而是要提前鎖住 AI 雲基礎設施的未來現金流。短期對使用者是甜頭:模型更強、更便宜、更穩定;長期則可能換來:

    • 產業多樣性被壓縮:三巨頭+少數實驗室的寡頭格局穩固。
    • 開源與獨立廠商被擠壓:很難籌到對抗級別的資本與算力。
    • 系統性金融風險累積:兆美元估值+上兆 CapEx 一旦失速,波及不只是 AI 產業。

    對開發者與企業,我的具體建議是:

    1. 技術架構上,主動維持多雲、多模型策略:
    2. 在設計時就預留 至少兩家模型供應商、一個開源備援路線(例如自家部署開源 LLM 做降級方案)。
    3. 不要把關鍵業務邏輯寫死在某一家雲的專屬 SDK 與權限模型裡。

    4. 合約與治理上,把「可遷移性」寫進去:

    5. 要求 SLA 不只談 uptime,也談 資料可攜、模型切換支援、退出條件。
    6. 對大型長約,董事會層級要看的是 供應商集中度,而不只是折扣百分比。

    7. 投入開源與社群:

    8. 即便主力仍用閉源模型,也應投資部分資源在開源工具鏈與模型上,保持團隊對基礎技術的掌握,而不是完全變成 API glue 工程師。

    9. 對政策討論,不要只談「AI 會不會毀滅人類」,也要談「算力和資金集中到什麼程度算危險」。

    AI 雲戰爭的真正輸家,不必然是技術落後的公司,而是被迫在單一巨頭體系裡「借用未來」的整個生態。你不一定能改變 Google 和 Anthropic 的棋局,但至少可以先確定,自己的技術與商業命運,不是綁在一紙十年雲合約上一起沉沒。

    🚀 你現在可以做的事

    • 審視現有架構,規劃至少兩家雲與兩家模型供應商,加上一條開源 LLM 降級備援路線
    • 檢查與雲/模型廠商的合約,新增或強化資料可攜、退出條款與遷移支援條款
    • 在團隊 roadmap 中留出人力與預算,實作一個最小可用的自託管或開源模型服務,避免完全依賴單一 API
  • 把 VS Code 變成自動寫程式助手:cline 實戰

    把 VS Code 變成自動寫程式助手:cline 實戰

    📌 本文重點

    • cline 是裝在 VS Code 裡的自主程式碼 Agent
    • 可批次改檔、跑指令、查文件,但每步都需授權
    • 搭配版本控制與測試,可成為安全的半自動 pair programmer

    cline 要解決的問題很直接:讓一個「在你本機 IDE 裡跑的自主程式碼 Agent」,幫你改檔、跑指令、查文件,但所有動作都要你按下同意鍵才會執行。

    專案連結:github.com/cline/cline


    cline 是什麼?一句話定位

    cline = 安裝在 VS Code 裡的自主程式碼 Agent,可以:

    • 建立 / 編輯專案檔案
    • 執行終端機指令(build、test、lint 等)
    • 啟動瀏覽器幫你查文件
    • 但每一步都會先列出具體操作,等你按「允許」才真的動手

    它的定位不是「幫你寫一個函式就結束」的 Copilot,而是能帶著你一步步完成一個功能或重構任務的半自動 pair programmer。


    核心功能:它到底能幹嘛?

    1. 批次改檔、搭 scaffold

    適合情境:

    • 重構一個舊專案,把同樣的 pattern 套到多個檔案
    • 快速搭一個新專案的骨架(資料夾結構、基本檔案)

    你可以這樣用:

    1. 在 VS Code 裡打開專案資料夾。
    2. 開啟 cline 面板,輸入指令,例如:

      幫我把 src/ 底下所有 React class component 改成 function component,並保留原本 props 型別。

    3. cline 會:
    4. 先掃專案,列出會動到的檔案
    5. 給你一份「變更計畫」與 diff 預覽
    6. 每個檔案修改前都問你要不要執行

    效果:一次性重構多個檔案,但仍保留「你是 code review 者」的掌控感。

    💡 關鍵: 用 cline 做批次重構時,每個變更都先 review,再執行,可以同時兼顧效率與安全。

    2. 查 bug、跑測試、看 log

    適合情境:

    • 接手別人寫的遺留專案
    • 單元測試一堆紅字懶得一個個追

    操作步驟:

    1. 把錯誤訊息貼給 cline,例如:

      Jest 測試 UserService 全掛了,請找出原因並修正。

    2. cline 會:
    3. 根據錯誤訊息定位到相關檔案
    4. 提出一個修正方案(含預計修改的檔案列表)
    5. 要你確認後才修改
    6. 自動幫你呼叫 npm test 或 pnpm test,再讀測試結果

    你可以要求它:

    每一次修正只改一小步,測試通過後再進下一步。

    這樣你就得到一個測試驅動的 AI 助手,不會一次改爆整個 codebase。

    3. 幫你查文件、Google / Docs 查詢

    cline 內建「用瀏覽器查資料」的能力(具體依你設定的模型與工具支援而定),常見用法:

    • 不熟的框架 API
    • 某個 CLI 旗標
    • 某個錯誤碼

    例子:

    有一段 webpack 設定報 deprecated 警告,請幫我找到官方文件,並提供對應的 config 調整建議,改動前先給我 diff。

    cline 會:

    1. 打開瀏覽器工具查官方文件
    2. 摘要關鍵片段
    3. 提出「建議改法 + diff」
    4. 再次問你要不要套用

    關鍵點:所有網頁行為和檔案修改,都會顯示在面板上,必須經你同意。


    安全設計:每一步都要你確認

    agent 工具最怕兩件事:

    • 誤刪 / 誤改檔案
    • 執行奇怪的 shell 指令

    cline 的設計剛好反過來:

    • 每次改檔會顯示 diff,你可以逐行檢查
    • 每次跑指令會顯示 完整命令,例如 rm -rf 這種你一看就會擋
    • 每次讀/寫新檔案,會明確說明路徑

    使用時務必做到:

    • 只把權限給當前專案資料夾
    • 不要在有機敏資料(憑證、prod config)的 repo 直接放手讓它改
    • 先在一個「測試用 repo」練習上述流程

    💡 關鍵: 把 cline 當成需要你簽名才能動手的助手,用「授權前必看 diff / 指令」這個習慣來降低風險。


    適合誰用?三種常見場景

    1. 中小專案重構 / 遺留專案接手

    典型痛點:

    • 接手一個 1–3 年歷史的 Node / Django 專案
    • 設計不統一,命名風格混亂
    • 文件過時

    cline 可以幫你:

    • 產生一份「現有結構地圖」:掃描目錄,生成 docs/ARCHITECTURE.md
    • 逐步統一命名規則(例如全部改用 camelCase)
    • 把散落在 code 的註解整理成文件

    行動建議:

    1. 開一個新 branch(例如 refactor/with-cline)。
    2. 讓 cline 先生成「重構計畫」,內容包含:
    3. 優先修哪些模組
    4. 預計拆出哪些共用函式
    5. 需要補哪些測試
    6. 你確認計畫後,再讓它照計畫一項項執行。

    2. 日常重複開發工作

    常見重複工作:

    • 每次新專案都要搭一套相同骨架
    • CRUD api 的樣板重複貼
    • 測試檔案格式一樣,只是名字和 case 不同

    cline 的價值在於:

    • 把這些「手很痠的工作」變成一段腳本
    • 你只要給它「任務描述 + 確認」,不用自己一檔檔複製

    建議做法:

    • 為你的團隊定義一份「標準專案骨架」描述,像:

      對新的 React 專案:使用 Vite、設定 ESLint + Prettier、建立 src/components, src/hooks, src/pages 目錄,並生成基本範例檔案。

    • 之後每一次開新 repo 直接把這段 prompt 丟給 cline,讓它自動完成。

    3. 半自動 pair programming(搭配本地 / 雲端模型)

    在 Reddit 上有不少人分享,把本地模型(例如 Qwen3.6 35B)搭配 agent 框架(如 little-coder、PI Coding Agent),透過「plan-first」工作流,讓本地模型在 Polyglot benchmark 上接近雲端模型表現。

    參考:
    – Qwen3.6-35B + little-coder 實測
    – PI Coding Agent + Qwen3.6 35B 實戰心得

    cline 做的是類似事情:

    • 把「計畫 → 分解任務 → 執行」這套流程搬進 IDE
    • 你可以接雲端模型(例如 Claude、OpenAI),也可以接本地模型(透過 OpenAI 相容 API)

    這樣你得到的是一個永遠不搶鍵盤、每步先跟你報告的 pair programmer。


    跟其他 VS Code Agent 工具怎麼選?

    名稱 核心功能 免費方案 適合誰
    cline (GitHub) 單一自主程式碼 Agent,內建檔案操作、終端機、瀏覽器,強調「每步需授權」 工具本身開源;需自備模型 API(金鑰可用免費額度) 想要在現有 VS Code 工作流中加一個安全的半自動助手
    Roo Code (GitHub) 多 Agent 協作,模擬「一整個開發團隊」,支援自動化測試、部署 開源;同樣需自備模型 API 想要嘗試多代理協作、較複雜工作流的進階使用者
    claude-context (GitHub) 把整個 codebase 變成 Claude 的上下文(MCP 工具) 開源;需有 Claude 帳號 重度使用 Claude Code,希望提升大專案上下文理解的人

    如果你只是想讓自己的 IDE 多一個「會聽話的 AI 助手」,cline 的上手成本最低。

    💡 關鍵: 已有模型 API 的使用者,只要裝好 cline,就能用很低成本把 IDE 升級成具備自主能力的開發環境。


    怎麼開始?最快上手路徑

    步驟一:安裝 cline

    最簡單方式是從 VS Code Extension 安裝:

    1. 打開 VS Code 的 Extensions 面板。
    2. 搜尋 cline,作者為 cline。
    3. 點選 Install。

    也可以從 GitHub 直接找到相關安裝說明:https://github.com/cline/cline

    (若未來提供 npm/CLI 版本,可以在 README 看到詳細指引。)

    步驟二:連接你的模型 API

    cline 不自帶模型,你需要自己準備一個:

    常見選項:

    • Claude(Anthropic)
    • OpenAI
    • 本地模型(透過 OpenAI 相容 API,如 Ollama、自架伺服器)

    設定方式(概念流程):

    1. 在 cline 設定面板填入:
    2. API Base URL(例如 https://api.openai.com/v1 或你的本地 endpoint)
    3. API Key
    4. 模型名稱(例如 gpt-4.1、claude-3.5、或你自訂的本地模型名)
    5. 測試一個簡單 prompt:

      嗨,幫我列出這個專案的主要資料夾結構。

    6. 確認能讀到檔案與回覆,表示連線成功。

    步驟三:直接可用的「plan-first」工作流程 Prompt

    下面這段可以直接複製,當成你和 cline 的標準開場白,每次要做較大的變更都先貼一次:

    你是一個在 VS Code 裡運行的程式碼 Agent,請嚴格遵守以下工作流程:
    
    1. 先閱讀專案的主要檔案與目錄,理解目前架構。
    2. 針對我提出的需求,先幫我:
       - 列出最多 5 個澄清問題(如果有疑慮)。
       - 擬一份分步計畫(Step 1, Step 2...),每步不超過 2–3 個具體修改。
    3. 把這份計畫寫成 `TODO.md` 放在專案根目錄,內容包含:
       - 任務描述
       - 預計修改檔案清單
       - 預計需要執行的指令(例如 test、build)。
    4. 在我明確回覆「同意計畫」之前,不要修改任何程式碼。
    5. 執行時:
       - 每次只完成 `TODO.md` 中的一個步驟。
       - 修改前先顯示預期變更與影響檔案。
       - 修改後自動幫我執行對應測試指令(若有),並總結結果。
    6. 任務結束後,更新 `TODO.md`(標記完成項目),並用要點方式總結你做了什麼。
    
    請先確認你理解上述流程,然後問我:這次要你幫忙的任務是什麼?
    

    有了這個「plan-first」腳本,你可以避免 Agent 一上來就亂改,先把計畫談好再動手。


    風險控管與實務建議

    最後幾個實際上很重要、但容易被忽略的點:

    • 權限只開專案資料夾:不要在整個 ~/ 或公司共用資料夾上跑;只針對單一 repo。
    • 先在測試 repo 試玩:隨便開一個 new repo,隨便寫一些 demo code,先讓 cline 練習跑 2–3 個任務,熟悉它的行為再用在正式專案。
    • 搭配版本控制:每個大任務都在新 branch 上跑,結束後自己再做一次 diff review。
    • 敏感資訊避免暴露:若你用雲端模型,注意不要讓它讀到含憑證 / 密鑰的設定檔,必要時把這些檔案加入 .gitignore 和 cline 的忽略清單。

    只要這幾個基本安全習慣有做到,cline 就可以很自然地變成你日常開發裡的「安全自動化助手」,從重構到寫測試,幫你把那些重複又耗時間的工作交給 Agent 處理。

    🚀 你現在可以做的事

    • 打開 VS Code 安裝 cline 擴充套件,並在一個測試用 repo 裡試跑 1–2 個小任務
    • 準備好你的模型 API(金鑰與 API Base URL),在 cline 設定面板完成連線測試
    • 建立一個標準的「plan-first」prompt 檔案,之後在每個新專案開頭都先貼給 cline 使用
  • IFTTT MCP:讓 Claude 幫你跑腿自動化

    IFTTT MCP:讓 Claude 幫你跑腿自動化

    📌 本文重點

    • IFTTT MCP 讓 Claude 真正「動手」操作 1000+ App
    • 用自然語言就能設定 Trigger、任務與權限
    • 先從 Gmail → Claude 摘要 → Notion 的簡單流程開始

    一句話定位:IFTTT MCP 就是「IFTTT 版 AI Agent」——讓 Claude 幫你在 1000+ 服務間跑腿,自動處理信件、文件、任務與通知。

    入口:IFTTT 產品頁(含 MCP 介紹)
    https://www.producthunt.com/products/ifttt


    核心功能:把 Claude 變成「會點 App 的助理」

    1. 基於 MCP,讓 LLM 真的「動手做事」

    一般聊天機器人只會給你文字建議;IFTTT MCP + Claude 的組合,是讓 Claude 透過 Model Context Protocol(MCP),直接去操作 IFTTT 已整合的 1000+ 服務:

    • Gmail、Outlook
    • Slack、Teams
    • Notion、Google Docs、Trello
    • Twitter/X、Facebook Page、Instagram(透過對應 App)

    可行動的具體效果:

    • 不是「教你怎麼回信」,而是幫你先讀信、標註、分類。
    • 不是「建議你整理會議重點」,而是幫你寫好摘要塞進 Notion 或 Google Docs。
    • 不是「提醒你看 Slack」,而是把 Slack 重點整理成一封 Email 寄給你。

    你要做的行動:

    • 腦中先列出「我每天重複做、又不需要太多判斷力」的任務,例如:
    • 看客服信件、貼 Label
    • 把 Slack 重要訊息集中在一個地方
    • 把社群留言變成待辦
    • 接下來就用 IFTTT MCP,把這些交給 Claude + IFTTT 處理。

    2. 使用者在 IFTTT MCP 介面上能做什麼?

    你不用寫程式,但要會設定三件事:觸發條件、自然語言任務描述、權限。

    (1)設定觸發條件(Trigger)

    在 IFTTT 介面裡,你可以用類似「IF This Then That」的方式決定:

    • 什麼時候 Claude 要被叫出來:
    • 新的 Gmail 收到、且主旨含「客服」
    • 某個 Slack 頻道有新訊息
    • Notion 資料庫新增一行
    • 每天早上 9 點定時

    行動建議:

    • 先挑 一個入口 App 當 Trigger,例如 Gmail 或 Slack,先做一條最簡單的自動化。

    (2)用自然語言描述要 Claude 做什麼

    接著你會看到類似「讓 Claude 做這件事」的欄位,你只需要用人話寫清楚:

    • 要它讀什麼:例如「請閱讀這封新來的 Gmail 內容」
    • 要它產生什麼:例如「生成 3 行內的中文摘要,附上 3 個關鍵標籤」
    • 要它輸出的格式:例如「用 JSON 回傳:{summary: ..., tags: [...]}」或「輸出純文字段落」

    行動建議:

    • 第一次先寫非常具體的指令,例如:

      請閱讀這封信件內容,判斷是否為客服詢問。若是,寫出:1 段 100 字內摘要 + 3 個標籤(如:退款、帳號問題、技術問題)。只用繁體中文回答。

    (3)權限管理:決定 Claude 能碰到什麼

    IFTTT MCP 會要求你授權:

    • 哪些 App 可以被用在這個 workflow
    • 可以讀哪些資料(例如哪一個 Gmail 帳號、哪個 Notion 資料庫)

    行動建議:

    • 第一次只授權「測試用」資料:
    • 新開一個 Gmail Label 只放測試信
    • 新建一個 Notion 資料庫專門給自動化寫入
    • 確認流程正常後,再慢慢擴大範圍。

    3. 典型自動化範例(辦公族版)

    以下三個工作場景,你可以幾乎照抄設定:

    範例一:客服信件由 Claude 先讀、標註、整理到 Notion

    流程:

    1. Trigger:Gmail 收到新信,且寄到 support@你的網域。
    2. Claude 任務:
    3. 讀信內容
    4. 判斷是詢問、抱怨、錯信、垃圾信
    5. 摘要重點、抽出客戶名稱、公司、需求類型
    6. Action:
    7. IFTTT 把 Claude 輸出的摘要寫入 Notion 資料庫一行
    8. 同時在 Gmail 加上對應 Label(例如「退款」「技術問題」)。

    實際效果:

    • 你每天只要看 Notion 看板,就能看到「已分類好的客服案件」。
    • Gmail 信箱只負責收信,不再是你分類的戰場。

    範例二:每天自動總結 Slack 頻道討論寄到 Email

    流程:

    1. Trigger:每天 18:00 定時。
    2. Claude 任務:
    3. 拉取當天某個 Slack 頻道訊息
    4. 產生「今日重點摘要 + 代辦清單」
    5. Action:IFTTT 把內容寄到你的工作 Email。

    適合:

    • 經理、PM、不常盯 Slack 的主管。

    範例三:社群新留言自動整理成待辦表

    流程:

    1. Trigger:Facebook Page 或 Twitter/X 有新留言或提及。
    2. Claude 任務:
    3. 判斷是否為需要回覆/需要跟進的內容
    4. 抽出「用戶問題」「優先度」「建議回覆方向」
    5. Action:寫入 Notion 或 Trello(建立一張卡片)。

    實際效果:

    • 你每天只要在 Notion 或 Trello 看「待回覆留言清單」,不用一則一則在社群裡翻。

    💡 關鍵: 把「先讀、先分類、先整理」這 80% 的機械流程交給 Claude,人只處理剩下最有價值的 20%。


    適合誰用?

    針對辦公族,可以直接對號入座:

    • 客服 / CS 團隊:先由 Claude 做信件初篩與標註,你只處理「真的需要人工判斷」的 20%。
    • PM / 專案經理:把 Slack、Email、會議紀錄集中到 Notion、Trello,由 Claude 做第一輪摘要與任務拆解。
    • 行銷 / 社群小編:把分散在 IG、Facebook、X 的互動整理成待辦清單與報表。
    • Freelancer / 顧問:固定時間自動整理客戶往來信件、專案進度簡報稿。

    行動建議:

    • 先挑 一個你每天重複 10 次以上 的任務,問自己:
    • 這個任務有沒有明確規則?
    • 給一個夠聰明的助理說明,他能做 80% 嗎?
    • 如果答案是「可以」,就值得用 IFTTT MCP 做一條 workflow 試試。

    💡 關鍵: 每天重複 10 次以上、規則清楚的任務,往往是最適合先被自動化、也最容易看出效益的部分。


    怎麼開始:新手入門 Demo(Gmail → Claude 摘要 → Notion)

    以下是一條最簡單、最好理解的 workflow,實際上線大概 15–30 分鐘。

    💡 關鍵: 先用 15–30 分鐘做出一條跑得動的簡單流程,比花幾小時規劃複雜架構更重要。

    步驟 1:開通 IFTTT MCP

    1. 註冊或登入 IFTTT 帳號:https://ifttt.com
    2. 在服務或探索頁面搜尋「Claude」「MCP」關鍵字,找到帶有 MCP 整合的 Claude 相關服務(實際名稱可能會微調,以 IFTTT 介面為準)。
    3. 啟用該服務,點選「Connect」並同意條款。

    步驟 2:把 Claude 帳號 / 金鑰接進 IFTTT

    1. 在 IFTTT 的 Claude 服務設定頁面,按「Connect」。
    2. 系統會要求:
    3. 登入你的 Claude 帳號,或
    4. 填入 API Key(如果 IFTTT 走 API 金鑰方式)。
    5. 完成授權後,IFTTT 就能代表你呼叫 Claude,執行 MCP workflow。

    行動建議:

    • 如果你公司有統一的 Claude 帳號,先跟 IT / 資安確認使用範圍,避免用個人帳號處理公司敏感資料。

    步驟 3:建立 Gmail → Claude → Notion 的簡單流程

    1. 在 IFTTT 點選「Create」,新增一個 Applet / Workflow。
    2. 設定 Trigger(This):
    3. 選擇 Gmail 服務 → New email in inbox with search
    4. 搜尋條件輸入:label:auto-summary(你可以先在 Gmail 建這個 Label,手動拉幾封信進來當測試)。
    5. 設定 Claude 步驟:
    6. 加一個 Action,選擇 Claude(MCP)服務。
    7. 在指令欄輸入:
      > 請閱讀這封 Gmail 的主旨與內文,寫出:\n1. 兩段以內的中文摘要(每段不超過 80 字)\n2. 三個關鍵標籤(用逗號分隔)\n3. 若有明確待辦事項,幫我用清單列出。\n請用 Markdown 格式輸出:\n# 摘要\n…\n\n# 標籤\n…\n\n# 待辦\n- …
    8. 設定 Notion 寫入:
    9. 再加一個 Action,選擇 Notion 服務 → Create a database item。
    10. 選擇一個你事先建好的「Email 摘要」資料庫,欄位可包含:標題、內容、日期、標籤。
    11. 把 Claude 的輸出對應到 Notion 的內容欄位,標題可用 Gmail 主旨。

    完成後,每當你把一封 Gmail 加上 auto-summary Label,就會觸發:

    • Claude 讀信 → 產出摘要 → IFTTT 寫進 Notion。

    步驟 4:疊加條件、加入更多服務

    最簡單流程跑起來後,可以這樣升級:

    • 加條件:
    • 只有當信件收件人包含「support@」時才觸發。
    • 信件主旨含「退款」「無法登入」時,標記為高優先。
    • 加服務:
    • 讓 IFTTT 再多一步,把高優先案件同步到 Slack 頻道 ping 客服團隊。
    • 每天自動把當天所有 Notion 中的客服摘要,再請 Claude 生一份「客服日報」,寄給主管。

    行動建議:

    • 每次只加「一個小功能」,例如:多一個條件、多一個 Action。
      不要一次做超複雜 workflow,比較容易除錯,也比較看得出效益。

    小結

    如果你:

    • 不想寫後端、又想讓 AI 幫你動手去各種 App 裡跑腿;
    • 每天被 Email、Slack、社群訊息淹沒;

    那就先從一條 Gmail → Claude 摘要 → Notion 開始,體驗一次「讓 AI 幫你整理世界」的感覺,再慢慢把你的整個工作日,拆成一條條 IFTTT MCP 自動化流程。

    🚀 你現在可以做的事

    • 去 IFTTT 搜尋「Claude」「MCP」,實際啟用一次 Claude 相關服務
    • 在 Gmail 建立 auto-summary Label,挑 3 封信做為第一批測試樣本
    • 在 Notion 建一個「Email 摘要」資料庫,照文中步驟串起第一條 workflow
  • GPT-5.5 實戰:從舊 API 到 Agent 模型

    GPT-5.5 實戰:從舊 API 到 Agent 模型

    📌 本文重點

    • GPT-5.5 對複雜多步任務與程式碼生成穩定度提升
    • 成本約為 GPT-5.4 的兩倍,需搭配模型路由控費
    • 建議先讓 GPT-5.5 接手最痛的 10% 高複雜任務

    GPT-5.5 主要解決兩個老問題:複雜多步任務很難穩定跑完、以及 程式碼生成在實務專案中需要大量人工修補。代價是 API 價格約 翻倍,但在多步推理、跨工具協作(agentic)場景,實測能少掉 30–60% 的「人肉 orchestrator」工作。這篇從工程落地角度整理:何時值得升級、怎麼改最少程式碼、怎麼安全灰度上線。


    重點說明

    1. 能力與效益:什麼場景值得多付兩倍單價?

    基於官方說明與社群測試,GPT-5.5 / 5.5 Pro 相較 GPT-5.4 / GPT-4.x 的實務差異,可粗略量化成幾類:

    💡 關鍵: 若你有大量跨系統、多步驟任務,GPT-5.5 能實際減少 30–60% 人工編排成本,值得用較高單價換穩定度與省人力。

    1. 程式碼生成 / 除錯
    2. 專案級 refactor(多檔案、跨模組)成功率提升,一次生成即可可編譯 / 可跑的比例顯著增加。
    3. 能自己分解成「閱讀現有程式碼 → 擬方案 → 修改多個檔案 → 自我檢查」的多步流程。
    4. 若你現在常遇到:

      • 4.x 產出的 patch 無法編譯
      • RAG 上接錯 API、型別對不起來

      → 使用 GPT-5.5 Pro 當「主程式碼助手」通常物有所值。

    5. 多步任務編排 / Agent 能力

    6. GPT-5.5 對 tool calling 的規劃更積極:
      • 能自動決定「先查 DB → 再呼叫支付 API → 最後寄信」,而不是你手動 orchestrate。
      • 對含糊任務會先發問澄清,而不是直接亂調工具。
    7. 適合:客服自動處理、報表生成、跨系統自動化(CRM + 票務 + ERP)。

    8. 上下文與多模態

    9. 更長的 context window(依官方實際規格為準),對 RAG / 長文件總結,能減少 chunking 與多輪 query。
    10. 圖片 + 文字 + 結構化資料混合輸入時的理解更穩。

    不建議升級的場景:
    – 純 FAQ、簡單分類、模板生成(信件、固定格式回答)。
    – 已經用 4.x 跑得很穩,且沒有多工具協作需求。

    此時可維持舊模型,或只對「高價值任務」做路由到 GPT-5.5。


    2. API 變更與最小遷移清單

    以官方 changelog 與社群實測為基礎,整理從 GPT-5.4 / GPT-4.x → GPT-5.5 的常見差異(命名依照 OpenAI 既有慣例,實際以文件為準):

    1. 模型名稱與 context
    2. 一般能力:gpt-5.5(假設 context 最高 ~200k tokens 級別)。
    3. 高階版:gpt-5.5-pro(更快、更穩、較高 rate limit)。
    4. 最小變更:
      “`diff

      • model: “gpt-4.1-mini”
      • model: “gpt-5.5”
        “`
    5. Tool calling / JSON mode 行為

    6. 工具呼叫邏輯更 agentic:模型會「自己決定」何時用工具,而不是你硬塞指令。
    7. response_format 行為加強:
      • {"type": "json_schema"} 更嚴格遵守 schema,但也可能為滿足 schema 而「合理捏造」欄位。
    8. 工具呼叫格式仍是 tools + tool_choice,但推薦寫法:
      jsonc
      {
      "model": "gpt-5.5",
      "tools": [
      {
      "type": "function",
      "function": {
      "name": "get_user_profile",
      "parameters": {
      "type": "object",
      "properties": {
      "user_id": {
      "type": "string"
      }
      },
      "required": ["user_id"]
      }
      }
      }
      ],
      "tool_choice": "auto" // 讓 5.5 自行規劃
      }

    9. 安全策略與輸出

    10. 官方系統卡說明:安全防護更嚴格,對灰色內容更傾向拒絕或弱化。
    11. 實務影響:有些之前「勉強會答」的 debug / 測試資料,可能會被誤判為敏感,需要:

      • 加強 system prompt:強調是企業內部開發、無真實個資。
      • 避免在 prompt 中填入真實 PII,改用匿名 ID。
    12. 延遲與費用

    13. token 單價約為 5.4 的兩倍級別(需看官方表)。
    14. GPT-5.5 本身更快,但若大量 tool calling,整體延遲可能 抖動更大(因為多輪 HTTP)。

    💡 關鍵: 單價約為 5.4 的兩倍,但若只在高價值、多步任務上使用,整體成本未必增加,反而可能因少錯誤與少人工介入而下降。

    最小遷移清單:
    – [ ] 替換 model 名稱為 gpt-5.5 或 gpt-5.5-pro。
    – [ ] 檢查 tool 定義:補齊 parameters schema,避免舊寬鬆 schema 造成誤呼叫。
    – [ ] 若依賴 JSON 格式輸出,統一改用 response_format: { type: "json_schema" } 並加上 嚴格驗證。
    – [ ] 更新成本計算與限額:調整配額、降級策略。


    3. 把 5.5 的 agent 能力整進現有架構

    一個實用思路:不要讓 GPT-5.5 直接當「超級大腦」管所有東西,而是:

    現有後端 + 工具層不動,只是把「任務分解與工具選擇」交給 5.5 來做。

    常見架構:

    Client → API Gateway → Orchestrator Service →
      ├─ LLM (GPT-4.x / 5.4)
      ├─ Tool Services (DB / CRM / Payment / RAG)
      └─ Logging & Guardrails
    

    升級方式:在 Orchestrator 裡新增一個路徑:

    Orchestrator
      ├─ Simple flows → 4.x
      └─ Complex multi-step flows → 5.5 (tool auto)
    

    實作範例

    1. 基本遷移:從 GPT-4.1 到 GPT-5.5 + JSON Schema

    // Node/TS 假想範例
    import OpenAI from "openai";
    
    const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
    
    async function generateInvoice(data: any) {
      const completion = await client.responses.create({
        model: "gpt-5.5",
        input: [
          {
            role: "system",
            content: "你是一個嚴格輸出 JSON 的後端服務,不要輸出解釋文字。",
          },
          {
            role: "user",
            content: `根據以下訂單資料產生發票 JSON:${JSON.stringify(data)}`,
          },
        ],
        response_format: {
          type: "json_schema",
          json_schema: {
            name: "InvoiceSchema",
            schema: {
              type: "object",
              required: ["invoice_id", "items", "total"],
              properties: {
                invoice_id: { type: "string" },
                items: {
                  type: "array",
                  items: {
                    type: "object",
                    required: ["name", "price"],
                    properties: {
                      name: { type: "string" },
                      price: { type: "number" },
                    },
                  },
                },
                total: { type: "number" },
              },
            },
            strict: true,
          },
        },
      });
    
      const json = JSON.parse(completion.output[0].content[0].text);
      return json;
    }
    

    好處:
    – GPT-5.5 在複雜訂單(折扣、稅金)時,更少漏欄位與型別錯誤。
    – strict: true 讓 schema 驗證更嚴格,搭配後端再做一次 JSON schema 驗證,可大幅降低格式 bug。


    2. Agentic tool calling:自動任務分解 + 多工具串接

    以下示範:用 GPT-5.5 當任務規劃器 + 工具選擇器,工具維持既有 microservice。

    const tools = [
      {
        type: "function",
        function: {
          name: "search_tickets",
          description: "查詢使用者未處理工單",
          parameters: {
            type: "object",
            properties: { user_id: { type: "string" } },
            required: ["user_id"],
          },
        },
      },
      {
        type: "function",
        function: {
          name: "create_ticket_reply",
          description: "對特定工單回覆訊息",
          parameters: {
            type: "object",
            properties: {
              ticket_id: { type: "string" },
              message: { type: "string" },
            },
            required: ["ticket_id", "message"],
          },
        },
      },
    ];
    
    async function handleSupportRequest(userId: string, query: string) {
      const res = await client.responses.create({
        model: "gpt-5.5",
        tools,
        tool_choice: "auto", // 讓 5.5 自己決定呼叫順序
        input: [
          {
            role: "system",
            content:
              "你是客服 Agent,可以呼叫工具查詢工單並回覆。遇到資訊不足時先提問澄清。",
          },
          { role: "user", content: `user_id=${userId}, 問題:${query}` },
        ],
      });
    
      // 實務上這裡要迴圈處理多輪 tool calls,以下簡化偽碼
      for (const output of res.output) {
        for (const item of output.content) {
          if (item.type === "tool_call") {
            const { name, arguments: args } = item.tool_call;
            const toolResult = await dispatchTool(name, args); // call your microservice
            // 把工具結果再丟回 5.5 讓它整合
          }
        }
      }
    }
    

    實際好處:
    – 過去你可能要在 Orchestrator 裡手寫流程:先 search_tickets,再挑一筆,然後叫模型產生回覆,再 create_ticket_reply。
    – 現在可以讓 GPT-5.5 自己決定要查幾次、要不要先澄清,你只需負責工具實作 + 安全閘。


    3. 成本優化與模型路由示意

    簡單的分層推理策略(Pseudo-code):

    async function routeLLMTask(task: Task) {
      // 1. 便宜模型先做分類 / 難度預估
      const difficulty = await estimateDifficultyWithMini(task);
    
      if (difficulty === "simple") {
        return callLLM({ model: "gpt-4.1-mini", task });
      }
    
      if (difficulty === "medium") {
        return callLLM({ model: "gpt-5.4", task });
      }
    
      // 真的複雜 / 高價值才用 5.5 Pro
      return callLLM({ model: "gpt-5.5-pro", task });
    }
    

    適用場景:
    – SaaS 產品內的「AI 助理」,各種請求混雜。
    – 有明顯高價值操作(下單、修改合約)與低價值操作(查 FAQ)。


    建議與注意事項

    1. 常見坑

    1. 自動工具過度呼叫
    2. GPT-5.5 在 tool_choice: "auto" 下偏好積極使用工具,可能導致:
      • 單次對話打爆你的 microservice rate limit。
    3. 建議:

      • 在 Orchestrator 加 工具呼叫次數上限(例如每次對話最多 5 次)。
      • 若超過,回傳一個「工具不可用」的 faux tool result,要求模型改用已有資訊回答。
    4. 推理時間抖動

    5. 多輪 tool calling 會導致延遲暴增(LLM 快,但你的工具慢)。
    6. 建議:

      • 對每個工具加 timeout;
      • 若工具 timeout,回傳明確錯誤給 LLM(例如 "status": "timeout"),讓它用降級策略回應。
    7. 輸出格式不穩 / schema 假資料

    8. json_schema 雖強,但 GPT-5.5 會為滿足 schema 而補齊不存在的欄位。
    9. 必做:
      • 後端再驗證一次 JSON schema,不要信任模型;
      • 對關鍵欄位(如金額、user_id)加入「只允許從工具輸入,不允許模型自由發明」的規則(可在 prompt 說明、也可在 runtime 檢查來源)。

    2. 灰度上線與降級策略

    建議 rollout 策略:

    1. 先鎖定 1–2 個「高價值 + 複雜」flow:
    2. 例如:整合多系統產生週報、客服自動處理退款申請。
    3. 開 feature flag:
    4. 部分租戶 / 內部帳號先用 GPT-5.5,其他維持 4.x。
    5. 監控三件事:
    6. 成單 / 解決率提升(而不是只看 token 使用量)。
    7. 平均與 P95 latency。
    8. 工具錯誤率與人工介入次數。
    9. 預設降級路徑:
    10. 若工具錯誤或 LLM 回傳不符合 schema,
      • 自動重試一次 GPT-5.5;
      • 仍失敗則降級到 GPT-5.4 或交由人工處理(打 label,順便收集資料)。

    💡 關鍵: 用 feature flag + 降級路徑灰度上線,可以在不影響主流程穩定性的前提下,逐步放大 GPT-5.5 的覆蓋範圍。


    結論:什麼時候立刻上 GPT-5.5?

    優先升級條件:
    – 你有大量「跨系統、多步驟」任務,目前靠工程師硬寫 orchestration 邏輯維持。
    – 你在做程式碼助手、IDE 插件、CI 上的自動修 bug / 重構,現有模型常產生半成品。

    不必急著升級:
    – 任務單步、邏輯簡單,或 4.x 已經穩定跑很久;
    – 成本壓力大,且沒有足夠監控來衡量 GPT-5.5 帶來的實際收益。

    合理的做法是:先用 GPT-5.5 接手最痛的 10% 任務,在舊架構外側加一層 agentic 能力,再決定是否全面遷移。

    🚀 你現在可以做的事

    • 先盤點系統中最複雜、跨多服務的 10% flow,評估是否改由 gpt-5.5 處理
    • 把現有 tools schema 補齊與收斂,為 tool_choice: "auto" 與 json_schema 做好準備
    • 實作一個簡單的模型路由器,先在測試環境導入 gpt-5.5-pro 並觀察錯誤率與延遲指標
  • Codex 升級:AI 平台戰爭搶的是桌面

    Codex 升級:AI 平台戰爭搶的是桌面

    📌 本文重點

    • Codex 正從「寫程式工具」進化為「桌面中控層」
    • 模型公司正往作業系統與工作流程上捲
    • 企業必須為 Agent 帶來的治理與撤退路徑預先設計

    這一輪 AI 平台戰爭,搶的不是「最強模型」,而是誰先佔領你的「工作流與作業環境」。OpenAI 用這次 Codex 大升級,把戰場從雲端 API 推進到開發者電腦螢幕上;接下來幾年,開發者與企業真正要思考的,不是「用不用 Agent」,而是「敢不敢把電腦交給哪一家」。


    一、Codex 不只是寫程式,它在搶你的「桌面主權」

    這次 Codex 更新,關鍵不是多會寫程式,而是它開始長成一個「半個作業系統」:

    • 電腦操作(Computer use):能在 macOS / Windows 上操控應用程式,從玩井字棋到開 IDE、切換 terminal、改 config,全部自己來。
    • 內建瀏覽器 + 90+ 插件:Codex 不再只是調你現有工具,而是把網頁、第三方服務收編進自己的「小宇宙」。
    • 永續線程與記憶(thread automations + memory):可以跨 session 記住專案脈絡,在背景持續跑任務,等於在你機器上放了一個「常駐 Agent」。
    • 多 Agent 協作:支援多個 Agent 分工,從需求拆解、Coding、測試到部署,自動化程度直逼「AI 軟體工廠」。

    把這些拼起來,你會發現:Codex 已經不是一個「IDE 裡的 copilot」,而是想變成「桌面上的中控層」。

    💡 關鍵: 一旦中控層被某家模型平台占據,你的日常工作流與工具選擇將長期被其技術與商業策略鎖死。

    這也是為什麼這次更新,被視為對 Anthropic 的 Claude Code + MCP 生態 的直接回擊——雙方在搶的,不是「誰幫你補完一段程式碼」,而是「誰來編排、監控、擁有你整個開發與知識工作流程」。


    二、模型公司上捲 OS 層:誰會被擠出局?

    過去十年,雲戰爭的劇本我們看過一次:

    • 一開始是「誰家 VM 便宜」,後來變成 AWS / Azure / GCP 直接往 PaaS、SaaS 卷上去,把一整排第三方服務擠到夾縫。
    • 今天在 Agent 時代,OpenAI、Anthropic 正在對 IDE、copilot 工具、甚至傳統 SaaS 重演一次。

    從這次 Codex + OpenAI Agents SDK 可以看出幾個明確信號:

    1. 第三方 Agent 平台會被邊緣化
      你如果只是幫用戶「把模型接上工具、做點工作流 UI」,OpenAI 直接給你一個 Agents SDK + sandbox + harness,還免費綁最強模型。你的 moat 幾乎瞬間歸零。

    2. 獨立 copilot 工具與專用 IDE 會被「平台吸收」
      當 Codex 能直接控制 VS Code / JetBrains,幫你開 PR、跑 CI、改 config,獨立的 coding copilot 插件,就會變成平台的一個 feature,而不是一家公司。
      Claude Code 一樣在做這件事,只是它透過 MCP 把 IDE、Git、issue tracker 等工具接成標準化「工具協議」。本質上,兩家都在收掉「中小型 DevTool 新創可能活的空間」。

    3. 設計、文件、知識工作軟體,會被「工作流」外包
      當 Agent 能自動開 Figma、Notion、Jira、Slack,幫你整理需求、產出設計稿、開 task、追進度:

    4. 用戶真正愛的是「整條工作流」的體驗,而不是單一工具的 UI。
    5. 誰掌握工作流編排權,誰就能把工具變成可替換零件。

    💡 關鍵: 只做單點工具的新創,若無法成為平台不可替代的一層,很容易在平台上捲的過程中被壓扁或變成小功能。

    換句話說,基礎模型公司正在向「AI 版作業系統」上捲:桌面是 UI,Agent 是排程器,插件/工具是 driver。任何只站在「工具層」的新創,都要重新審視自己的生存空間:你是平台 feature,還是真的不可替代?


    三、Agent 盯著你的螢幕:效率爆表,也是治理噩夢

    當 Codex、Claude 這種 Agent 可以「常駐看螢幕、自己操作電腦」,對企業意味三件事:

    1. 隱私邊界被重新畫一次
      傳統 DLP、端點防護預設「人類是操作者」。現在螢幕前可能是 OpenAI 代碼在操作你的 ERP、CRM、內網 Git:
    2. 誰能看到畫面和輸入?
    3. 操作錄像存哪裡?
    4. 這些資料會不會回流到模型供訓練?
      不處理清楚,你的「機密專案」,等於在外包給一個你無法審計的外部員工。

    5. 內控與審計模型要升級
      傳統軟體出錯會「噴錯停下來」,Agent 會「自我修正繼續做」,風險直接放大。Towards AI 的實務框架 講得很直白:企業現在的 governance,大多沒準備好讓軟體「半自主行動」。

    企業至少要做到:

    • 明確的許可邊界:這個 Agent 可以動哪幾個系統、哪幾種操作?
    • 動態熔斷機制:金額、頻率、風險超過門檻就自動停機 + 人工覆核。
    • 完整審計軌跡:每一步操作有「誰授權、什麼意圖、用什麼工具」的可追溯紀錄。

    • 成本曲線會讓你不得不「設計節制」
      AI Agent 成本正快速上升:多步推理、多工具、多 Agent 協作,本質上就是「把一堆貴推理串在一起」。沒有架構設計,你不是在省人力,是在開一個會自旋的計費黑洞。

    這也是為什麼實務上會出現 Attention Scoping 這種模式:有意識地限制 Agent 每次能看、能用的工具集合,用架構來壓住成本與混亂度。

    💡 關鍵: 若沒有明確的權限與成本邊界設計,導入 Agent 可能在效率提升之前,先帶來失控的費用與合規風險。

    效率確實驚人,但如果你沒有治理框架、沒有成本護欄,Agent 很快會從生產力工具,變成技術債與合規風險的放大器。


    四、押誰的平台與協議?先想「可撤退性」

    對開發者與企業來說,最現實的問題不是哲學,而是:我要押 Codex + OpenAI Agents SDK,還是 Claude + MCP / UCP 這一側?

    幾個關鍵思路:

    1. 區分「應用層依賴」與「協議層依賴」
    2. OpenAI Agents SDK:偏應用框架,深度綁定 OpenAI 生態,長處是上手快、整合模型與 sandbox 容易,但遷出成本高。
    3. Anthropic 的 MCP(Model Context Protocol):偏工具協議,定義「模型怎麼與外部工具對話」。理論上任何模型都能說 MCP,比較像是未來 multi-model、多供應商世界的「共同語言」。

    建議:在 Agent 內部與工具互動,優先採用開放協議(如 MCP 類型);在具體實作與運維,可以各家 SDK 混搭。

    1. 雲戰爭的教訓:一開始就設計 multi-provider
      當年很多團隊「先全上 AWS,將來再 multi-cloud」,結果「將來」永遠來不了。Agent 時代照抄一次就是:

    2. 先全部寫死在 OpenAI Agents SDK / 特定 provider 的沙箱模型裡;

    3. 長大後才發現無法平滑切到 Claude、Gemini 或自家私有模型。

    可行的折衷做法:

    • 把 「任務編排、工具清單、權限邊界」抽象在自己系統裡,不要寫死在某家 SDK 設定;
    • 用 適配層 封裝不同 provider(OpenAI Agent、MCP server、Cloudflare inference layer);
    • 關鍵任務預留「第二供應商」路徑,哪怕一開始不用,也要確認技術上走得通。

    • 善用中立基礎設施:例如 Cloudflare 的 inference layer
      Cloudflare AI Platform 很清楚:它要做的是「專為 Agent 設計的推理層」,而不是再做一個模型。對企業來說,這提供了一個折衷:

    • 在 Cloudflare 這種中立層上跑多家模型與 Agent;

    • 把監控、日志、金鑰管理、流量治理放在這一層;
    • 上層應用可以比較容易切換模型供應商。

    關鍵心態轉換是:不要再問「哪家模型最強」,而是問「哪種架構讓我五年後還能自由選供應商」。


    結語:現在就用「雲戰爭的教訓」,重新設計你的 AI 版 DevOps

    Codex 這次升級,宣告 AI 平台戰爭正式從「模型對比」進入「工作流與作業環境爭奪戰」。短期內,開發者會享受到前所未有的生產力紅利;長期來看,權力與依賴度會高度集中在少數幾家模型公司手上。

    對開發者與企業,我的具體建議是:

    1. 先假設 Agent 一定會進你桌面,然後反推安全與治理設計:從權限、審計、熔斷開始,而不是從 demo 好不好看開始。
    2. 選平台時優先考慮「協議與抽象層」,而不是單一 SDK 的爽度:MCP 類協議 + 自建編排層 + 中立推理層,比全押一家的封閉 SDK 更有長期議價力。
    3. 在架構圖上畫出「我怎麼退出這個供應商」的路徑,如果畫不出來,就當你已經被 vendor lock-in,評估時要把這個成本算進去。

    AI 平台戰爭真正要搶的,是你每天工作的「操作系統層」。你可以享受集中帶來的效率,但必須主動設計自己的分散與治理,否則這場戰爭結束時,你連自己桌面的規則都說不上話。

    🚀 你現在可以做的事

    • 打開你現有的雲與 AI 架構圖,標記所有被單一供應商鎖死的關鍵點,試著畫出替代路徑
    • 評估並選定一種開放協議(如 MCP 類型)作為未來 Agent 與工具互動的統一接口
    • 為第一個導入桌面 Agent 的場景設計「權限邊界 + 審計紀錄 + 熔斷條件」,做一個小規模試點
  • 用 openai-agents-python 搭一個 AI 小團隊

    用 openai-agents-python 搭一個 AI 小團隊

    📌 本文重點

    • 用多個專職 agent 分工處理一個大任務
    • 透過 orchestrator 串起明確的多步驟流程
    • 將既有 API / 工具包成 @tool 打造可落地工作流
    • 先做最小 demo,再逐步擴展到既有系統

    只靠一個聊天機器人常常做出「四不像」的結果,而 openai‑agents‑python 要解決的,就是讓你把一個大任務拆給多個各司其職的 AI 代理人,像一個小團隊一樣協作完成。

    GitHub 專案連結:https://github.com/openai/openai-agents-python


    核心功能:把一個大任務拆給多個 AI

    1. 定義多個專長不同的 Agent

    你可以在程式裡定義多個「角色」:

    • 資料蒐集 agent:負責上網查資料、整理重點
    • 寫作/寫程式 agent:負責產出初稿或程式碼
    • 審稿 agent:負責檢查結構、風格、錯字或潛在 bug

    這些都用 Python class 或函式就能描述,像這樣:

    from openai_agents import Agent
    
    researcher = Agent(
        name="researcher",
        instructions="你負責閱讀提供的資料,整理三個重點與參考連結。",
    )
    
    writer = Agent(
        name="writer",
        instructions="你負責寫出條列清楚的技術部落格草稿,語氣教學向。",
    )
    
    reviewer = Agent(
        name="reviewer",
        instructions="你負責審稿,只給出修改建議與需要補充的段落。",
    )
    

    行動:先想一個你日常會做的「三步驟」任務,直接對應成三個 agent 的職責。


    2. 設計任務流程:交接、審查、協作

    openai‑agents‑python 的重點不只是「多個 agent」,而是讓你把流程寫清楚:誰先做、誰接手、誰審查。

    例如做一個「自動寫技術部落格」的流程:

    1. researcher:根據題目蒐集資料,產出重點摘要
    2. writer:根據摘要寫出完整草稿
    3. reviewer:審稿,給出修改建議

    💡 關鍵: 把一長串需求拆成 2–3 個明確步驟,比一次丟給單一聊天模型更穩定、可控。

    在框架裡你可以用一個 orchestrator(像主揪)來控制:

    from openai_agents import Orchestrator
    
    orchestrator = Orchestrator(agents=[researcher, writer, reviewer])
    
    async def run_blog_flow(topic: str):
        research_notes = await orchestrator.run("researcher", input={"topic": topic})
        draft = await orchestrator.run("writer", input={"topic": topic, "notes": research_notes})
        review = await orchestrator.run("reviewer", input={"draft": draft})
        return {"draft": draft, "review": review}
    

    行動:把你現在用 ChatGPT 一次請他「幫我想題目、寫文、修稿」的流程,拆成 2–3 個步驟,寫在紙上,對應到上面這種 orchestrator 程式碼結構。


    3. 串接外部工具與 API,變成真的工作流

    openai‑agents‑python 支援 agent 呼叫你自定義的工具函式,例如:

    • 網頁爬蟲(requests、Playwright)
    • 存取資料庫或 Google Sheets
    • 操作檔案系統,輸出成 Excel / CSV

    你先寫好 Python 函式,再把它註冊給 agent 使用:

    import requests
    from openai_agents import tool
    
    @tool
    def fetch_url(url: str) -> str:
        """抓取指定網址的 HTML"""
        return requests.get(url, timeout=10).text
    
    scraper = Agent(
        name="scraper",
        instructions="根據給定網址抓網頁內容並擷取需要的欄位。",
        tools=[fetch_url],
    )
    

    行動:先選一個你常用的 API(例如某個內部 HTTP API、Notion API),包成一個最小的 @tool 函式,讓 agent 能直接呼叫。


    Demo:一晚內做完的「自動寫技術部落格」小團隊

    這裡做一個最小可用版本:輸入一個主題,幫你:

    1. 蒐集重點
    2. 產生技術部落格草稿
    3. 用 reviewer 做一次審查,輸出建議

    步驟 0:安裝與環境準備

    pip install openai-agents-python openai
    

    在專案根目錄建立 .env(或直接用環境變數):

    export OPENAI_API_KEY="你的 API Key"
    

    💡 關鍵: 只要設定好 OPENAI_API_KEY,就能在一晚內跑起一個可用的多 agent 小流程。

    步驟 1:建立第一個 writer agent

    新增 agents_blog.py:

    from openai_agents import Agent
    
    writer = Agent(
        name="writer",
        instructions=(
            "你是技術部落客,請用繁體中文寫 1200 字內的教學文,"
            "條列清楚、加上小標題,讀者是有基礎的工程師。"
        ),
    )
    

    先單獨測試這個 agent:

    import asyncio
    from agents_blog import writer
    
    async def main():
        result = await writer.run({"topic": "Python logging 實戰"})
        print(result)
    
    if __name__ == "__main__":
        asyncio.run(main())
    

    行動:先確保「單一 agent + 單一呼叫」正常運作,看到一篇文章草稿再往下加複雜度。


    步驟 2:加上 researcher + reviewer

    修改 agents_blog.py:

    from openai_agents import Agent
    
    researcher = Agent(
        name="researcher",
        instructions=(
            "你負責針對主題列出 5 個實用重點與常見坑,"
            "輸出 JSON 格式:{\"key_points\": [...]}。"
        ),
    )
    
    writer = Agent(
        name="writer",
        instructions=(
            "根據 research.key_points 寫技術部落格,"
            "包含簡介、實作步驟與常見錯誤排查。"
        ),
    )
    
    reviewer = Agent(
        name="reviewer",
        instructions=(
            "你是嚴格的技術編輯,檢查草稿是否:1) 結構清楚、"
            "2) 範例正確、3) 沒有太多空話。輸出建議清單。"
        ),
    )
    

    再加一個 orchestrator 流程(新檔 run_blog.py):

    import asyncio
    from openai_agents import Orchestrator
    from agents_blog import researcher, writer, reviewer
    
    orchestrator = Orchestrator(agents=[researcher, writer, reviewer])
    
    async def run_blog(topic: str):
        research_notes = await orchestrator.run("researcher", input={"topic": topic})
        draft = await orchestrator.run("writer", input={"topic": topic, "research": research_notes})
        review_notes = await orchestrator.run("reviewer", input={"draft": draft})
    
        print("=== 草稿 ===\n")
        print(draft)
        print("\n=== 審稿建議 ===\n")
        print(review_notes)
    
    if __name__ == "__main__":
        topic = input("輸入技術主題:")
        asyncio.run(run_blog(topic))
    

    行動:實際輸入你下週想寫的一個主題,看這個流程能不能生成一份你「願意再改一版就能上 blog」的草稿。


    步驟 3:做成簡單 CLI 或排程

    CLI(已經算一種):

    python run_blog.py
    

    若要每天自動產出草稿,可以用 crontab:

    crontab -e
    # 每天早上 9 點產出一篇關於 Python 的文章
    0 9 * * * cd /path/to/project && OPENAI_API_KEY=xxx python run_blog.py <<EOF
    Python 非同步程式設計實戰
    EOF
    

    行動:先用 CLI 手動跑幾次,確認品質與 token 消耗,再考慮排程自動化。


    適合誰用?幾個具體場景

    • 工程師/資料工程師:
    • 資料抓取 → 清洗 → 產出報表(多個 agent 分別負責)
    • 專案 scaffold 生成 → 單元測試撰寫 → reviewer 檢查風險
    • 技術寫作者 / Developer Advocate:
    • 自動產出技術部落格初稿、Release Note、API 範例
    • 內部平台團隊:
    • 把既有的 CI/CD、監控 API 包成工具,讓 AI agent 幫忙查 log、整理 incident 報告

    💡 關鍵: 只要你習慣在 ChatGPT 下一長串指令,就幾乎一定能拆成 multi‑agent workflow 減少來回與手動操作。

    只要你目前已經在用 ChatGPT 做「一長串指令」,就適合把流程拆成 multi‑agent workflow 測試看看。


    延伸應用:部署、成本控制、整合現有系統

    1. 部署到雲端

    • 用 FastAPI 或 Flask 包一層 HTTP API,把 orchestrator 暴露成 /run_flow endpoint
    • 部署到 Render / Railway / Fly.io / 自家 Kubernetes,都只是一般 Python Web 服務部署流程

    2. 控制成本與錯誤

    • 限制 max_tokens / 模型:對只負責小任務的 agent 用較便宜的模型
    • 加上 retry + logging:為 orchestrator 跑的每一步記錄 prompt、輸出與 token 使用
    • 設定明確 instructions:讓 reviewer 僅輸出「建議清單」,避免重複生成整篇文章浪費 token

    3. 與既有後端或 Slack Bot 整合

    • 既有後端:在服務裡呼叫 orchestrator,把結果回寫資料庫或觸發其他工作
    • Slack Bot:
    • 用 Slack API 建一個 slash command /ai-team
    • 收到指令後,把文字丟給 orchestrator,完成後再貼回頻道

    行動:先選一個「已在跑的」後端流程(例如每週報表),先只把其中一段換成 agent 完成,觀察穩定度與成本。


    怎麼開始:最快上手路徑

    1. 看 GitHub README:https://github.com/openai/openai-agents-python
    2. 先實作一個最小 demo:如本文的 blog flow 或「抓網頁 → 清洗 → 匯出 CSV」
    3. 再慢慢拆更多 agent:把你原本寫在同一個 prompt 或腳本裡的步驟,一個一個拆成獨立角色

    只要先完成一個「今晚就能跑起來」的小流程,你之後會很自然開始想:還有哪些工作可以交給這個 AI 小團隊做。

    🚀 你現在可以做的事

    • 打開專案,實作一個最小的 writer agent 並用單一呼叫產出一篇草稿
    • 把你常用的一個內部或公開 HTTP API 包成 @tool,讓 agent 能直接呼叫
    • 依照文中的 researcher → writer → reviewer 範例,寫出自己的第一個 orchestrator 流程並在本機跑一次
  • Claude Opus 4.7 實作可控 Agent 平台

    Claude Opus 4.7 實作可控 Agent 平台

    📌 本文重點

    • Opus 4.7 更適合長上下文、多步任務與自我校對
    • 可作為常駐 coding / ops Supervisor Agent
    • 透過工具層與治理設計,接手真實 CI / PR pipeline

    Opus 4.7 解決的痛點很直接:以前你不太敢把多步任務完全丟給 LLM 自動跑——上下文記不住、自我檢查不足、程式碼改著改著就壞掉、Agent 亂調工具、成本爆炸。Opus 4.7 把這幾個點同時強化:長上下文 + 自我校對 + agentic coding,讓它不再只是「聊天模型」,而是可以放進持續運行 pipeline 的一個穩定元件。


    重點說明:Opus 4.7 對 Agent 能力的實質升級

    1. 長上下文 + 自我校對 = 多步任務可「放手」

    Opus 4.7 官方強調:

    • 更長上下文:可以在一次對話裡管理整個任務歷史、spec、log、既有程式碼與錯誤紀錄,減少你自己在應用層做 chunk & stitching。
    • 自我核查輸出:模型在回傳前會傾向先「檢查」自己的推論、程式碼或計算結果,等於內建一層 lightweight critic。

    💡 關鍵: 更長上下文搭配自我核查,實際上讓多步任務可以交給單一模型從頭管到尾,而不是切給一堆臨時腳本與輔助模型。

    對多步 pipeline(例如:分析 log → 找 root cause → 編輯程式碼 → 產 PR)最大的好處是:

    • 可以讓 Supervisor Agent 一次看到完整任務 timeline,而不是一段一段 patch;
    • 減少你在系統外再包一層「審題 / 校對」模型的需求(但關鍵步驟仍建議顯式加 guardrail)。

    2. Agentic Coding:如何讓 Opus 4.7 當常駐 coding / ops agent

    Opus 4.7 在 程式碼規劃 + 工具調用 上的品質明顯提高,實務上你可以讓它做:

    • 長期追蹤一組 repo 的變更,持續提出 refactor / bugfix 建議;
    • 自動跑 CI log 分析 → 開 issue → 出 patch → 發 PR;
    • ops 向:監看監控告警 → 初步診斷 → 呼叫 runbook 工具。

    💡 關鍵: 把「讀檔、改檔、跑測試、開 PR」封裝成工具給 Opus 4.7 用,它就能長期常駐在 repo / pipeline 中當實際執行者,而不是只當輔助聊天夥伴。

    核心設計重點:

    1. 工具調用(Tool use)
    2. 用 /v1/messages + tools 讓 Opus 負責選擇何時 call tool、填參數;
    3. 將「讀檔、改檔、跑 test、開 PR」抽成安全封裝的工具,不讓模型直接操作 Git。

    4. 程式碼修改與回滾

    5. 永遠透過 「diff-based API」 修改程式碼,而不是讓模型輸出整檔;
    6. 由工具層實作版本管理(Git branch/commit),模型只負責描述修改 intent。

    7. 安全護欄設計

    8. 用 角色+權限 限制工具:code_writer 不能直接 deploy,ops_agent 只能操作 sandbox;
    9. 重要操作強制走「人審 + MCP gateway」流程。

    3. 在多代理系統中的定位:Supervisor / Orchestrator 角色

    以「Supervisor Agent」架構來看(類似 Towards AI 提到的 blueprint):

    • Opus 4.7 很適合擔任 Supervisor / Orchestrator:
    • 拆解使用者目標 → 任務樹;
    • 安排子代理:搜尋 Agent、執行 Agent、評估/QA Agent;
    • 維護整個任務的 context & memory。

    • MCP 或你自建的工具層則提供:

    • 可治理的工具執行(權限、審計 log、版本管理);
    • 與企業內部 API / 資料庫 / CI/CD / issue tracker 的橋接。

    重點:Supervisor 不直接做所有事,而是負責問對問題、調對工具、把任務切給對的子代理。Opus 4.7 的長上下文 +較穩定規劃能力,剛好補上這個角色。


    實作範例:自動 triage issue → 修 bug → 開 PR

    以下示意使用 Claude API + MCP / 自建工具,流程:

    1. 新 issue 建立 → Webhook 觸發 Supervisor;
    2. Supervisor(Opus 4.7)分析 issue,決定是否可自動處理;
    3. 呼叫 repo 工具 找到相關檔案、測試;
    4. 呼叫 code-agent(也是 LLM 或工具) 產生 patch;
    5. 呼叫 git/pr 工具 開 PR,必要時標記需要人工 review。

    1. Supervisor 的 messages 結構

    POST /v1/messages
    {
      "model": "claude-3-opus-4.7",  // **關鍵:Supervisor 指定 Opus 4.7**
      "system": "你是Supervisor Agent,負責協調工具與子代理.\n" +
        "規則:\n" +
        "1. 僅在需要時使用工具,不要自己幻想結果。\n" +
        "2. 高風險操作(寫檔、開PR)前,一定先提出計畫並自我檢查。\n" +
        "3. 若不確定,改為標記需要人工審核.",
      "tools": [
        { "name": "repo_search", "input_schema": {"type": "object", ...} },
        { "name": "repo_read_file", "input_schema": {"type": "object", ...} },
        { "name": "repo_edit_file_diff", "input_schema": {"type": "object", ...} },
        { "name": "run_tests", "input_schema": {"type": "object", ...} },
        { "name": "create_pr", "input_schema": {"type": "object", ...} }
      ],
      "messages": [
        {
          "role": "user",
          "content": [
            {
              "type": "text",
              "text": "有新的 GitHub issue:#1234 API 回傳 500,log ID=abcd...\n" +
                       "請決定是否可以自動修復,若可以,直接走:分析→修改→測試→開PR。"
            }
          ]
        }
      ]
    }
    

    2. 工具呼叫:diff-based 程式碼修改

    在第一次 tool call 前,先讓 Supervisor 規劃:

    1. 讀取相關檔案與測試檔。
    2. 產生修改計畫與預期影響範圍。
    3. 套用最小 diff 修改程式碼。
    4. 執行相關測試。
    5. 測試通過後建立 PR,標記『自動修復,請人工 review』。
    

    接著模型會回覆一個 tool 呼叫(格式依 SDK):

    {
      "role": "assistant",
      "content": [
        {
          "type": "tool_use",
          "id": "toolu_1",
          "name": "repo_search",
          "input": {
            "query": "500 error log id abcd", 
            "max_results": 10
          }
        }
      ]
    }
    

    你的應用層接到後:

    1. 執行 repo_search(你實作的服務,可能包 Git grep / code search);
    2. 把結果以 tool_result 回餵:
    {
      "role": "tool",
      "tool_use_id": "toolu_1",
      "content": [{
        "type": "text",
        "text": "找到可能相關檔案: src/api/user.ts, src/service/userService.ts ..."
      }]
    }
    

    之後 Supervisor 可能呼叫:

    {
      "type": "tool_use",
      "name": "repo_edit_file_diff",
      "input": {
        "path": "src/service/userService.ts",
        "diff": "@@ -42,6 +42,10 @@\n- const result = await dao.getUser(id);\n+ const result = await dao.getUser(id).catch(e => {\n+   logger.error('getUser failed', { id, err: e });\n+   throw new HttpError(500, 'USER_LOOKUP_FAILED');\n+ });"
      }
    }
    

    這裡的關鍵是:

    • repo_edit_file_diff 工具會:
    • 把原始檔讀出來;
    • 套用 diff(可用 git apply 或自寫 patch 邏輯);
    • commit 到專用 branch;
    • 回傳新的 snippet / commit id;
    • 回滾 就交給 Git:若後續測試失敗,由 Supervisor 呼叫 git_reset_to_commit(另一個工具),或人工介面一鍵 rollback。

    3. MCP / 自建工具層設計示意(pseudo code)

    // MCP Gateway / 工具伺服器(Node 範例)
    
    import express from 'express';
    import { searchRepo, editFileWithDiff, runTests, createPR } from './infra';
    
    const app = express();
    app.use(express.json());
    
    function requireRole(role: string) {
      return (req, res, next) => {
        const callerRole = req.headers['x-agent-role'];
        if (callerRole !== role) return res.status(403).send('forbidden');
        next();
      };
    }
    
    app.post('/tools/repo_edit_file_diff', requireRole('supervisor'), async (req, res) => {
      const { path, diff } = req.body;
      // 審計 log
      console.log('[AUDIT] edit_file_diff', { path, by: 'supervisor' });
      const result = await editFileWithDiff(path, diff);
      res.json(result);
    });
    
    // 其他工具類似實作...
    
    app.listen(3001);
    

    Supervisor Agent 呼叫工具時,由你的 orchestrator 轉成 HTTP request,並加上 x-agent-role: supervisor 等標頭,實作權限與審計。


    建議與注意事項:成本、延遲與治理

    1. 成本與延遲控制

    • 長上下文 ≠ 無腦塞所有東西:
    • 為 Supervisor 設計 分層上下文:
      • 任務規格(長期保持);
      • 當前子任務狀態(中期);
      • 最近工具回傳、log(短期)。
    • 透過你的應用層做 context summarization / state store,不要每次把整個任務歷史丟進去。

    • 對長跑任務(例如多輪 patch + test):

    • 使用 max_tokens / tool_temperature 控制回覆長度與探索度;
    • 將「細節 log」放在外部存儲,必要時讓模型用工具查詢,而不是全部當成 prompt。

    2. 避免過度「自作主張」

    Opus 4.7 的推理與自我校對更強,副作用是它會更願意自己決定事情。控制方式:

    • 在 system 提前定義 contract:
    • 任務邊界:可修改哪些 repo / namespace;
    • 停機條件:
      • 測試連續失敗 N 次 → 停止修改,標記需要人工;
      • 連續無法重現 bug → 輸出完整調查報告,停止嘗試;
    • 審核步驟:
      • 高風險變更必須產生「變更說明 + 風險清單」給人看。

    範例 system 片段:

    你是後端修 bug 的 Supervisor Agent,遵守以下 contract:
    - 只能操作 repo `my-service`,不可動 infra repo。
    - 若連續 2 次修改導致測試新增失敗,立即停止,輸出調查報告,等待人工處理。
    - 不得直接部署,只能開 PR,並在 PR 描述中列出:問題原因、修改內容、風險與 rollback 方式。
    

    3. 對話風格變更對既有工作流的影響

    Opus 4.7 更傾向「先思考再回答」,你會看到:

    • 回覆結構更完整,但文字量可能變多,對老工作流可能:
    • 冗長說明擾亂你原本靠 pattern matching 的 parser;
    • 原本 prompt 期待的 JSON 結構會被「多講兩句」破壞。

    💡 關鍵: 若你的系統嚴重依賴固定輸出格式,必須明確要求「只輸出 JSON」,並用 schema 驗證與重試機制包住模型。

    建議:

    • 儘量讓模型輸出 單一結構化 payload,多餘說明放在欄位內:
    {
      "plan": "文字說明…",
      "actions": [ ... ],
      "needs_human_review": true
    }
    
    • 在 system 明確要求:僅輸出 JSON,不要額外文字,並在應用層加 schema 驗證,若解析失敗就回饋「格式錯誤,請重新輸出」。

    結論:Opus 4.7 的能力重點不是「更會聊天」,而是更適合當有邊界、有工具、有治理的 Agent 核心。只要把它放在 Supervisor 位置,搭配 MCP 或自建工具層,控制好 contract / 成本 / 權限,你就可以開始放心讓它接手一部分真實的 coding / ops pipeline,而不只是做輔助建議。

    🚀 你現在可以做的事

    • 在現有 LLM 應用中,先挑一條「分析 log → 修 bug → 開 PR」的小流程改由 Opus 4.7 當 Supervisor 嘗試落地
    • 設計一組 repo_search、repo_edit_file_diff、run_tests、create_pr 工具,並封裝成 MCP 或內部 HTTP 服務
    • 為 Opus 4.7 Supervisor 撰寫明確的 system contract(任務邊界、停機條件、審核規則),再逐步擴大可自動處理的任務範圍
  • 實戰 Agentic RAG 與 Hybrid Search

    實戰 Agentic RAG 與 Hybrid Search

    📌 本文重點

    • 單一檢索策略讓 RAG 在真實場景很容易翻車
    • Hybrid Search 能互補向量與關鍵字的盲點
    • 讓 Agent 負責檢索策略與多輪重試能顯著提升穩定度
    • 不換模型也能透過 eval、Hybrid 與權限控管大幅升級 RAG

    在實際專案裡,多數 RAG 翻車不是因為模型不夠聰明,而是檢索策略太單一:只用向量會被專有名詞和代碼玩死,只用關鍵字又抓不到語義相近的長文件內容。Agentic RAG + Hybrid Search 的組合,重點就是讓「檢索」變成可調度、可重試、可觀測的一級公民,而不是一個寫死的 search(query) 函式。


    重點說明

    1. 為什麼單一檢索在真實專案會翻車?

    常見四種翻車場景:

    1. 長文件 / 手冊
    2. 只用向量:整份手冊被切成很多 chunk,語義太接近,top-k 都很像,但真正要的那一段不一定排前面。
    3. 只用 BM25:查詢句子太口語,關鍵字重疊度不高,直接 miss。

    4. 專有名詞 / 法規條文 / 內部代號

    5. 向量模型常常把 DS-104、DS-140 當成類似,專案實際上兩者完全不同。
    6. 法規編號、API 名稱、Ticket ID 等,關鍵字檢索反而更穩。

    7. 程式碼、表格、錯誤訊息

    8. 向量對縮排、符號、stack trace 的敏感度很差。
    9. Log ID 或錯誤碼這類「硬字串」,BM25/關鍵字幾乎是必要條件。

    10. 跨語言 / 口語查詢

    11. 使用者用自然語言描述問題,文件是正式用語或英文,公司內還混雜縮寫。
    12. 需要先用 LLM 做 query 改寫,再讓向量與 BM25 各自發揮。

    Hybrid Search(向量 + BM25) 的實際好處:

    • 可以 補各自的盲點:專有名詞用 BM25 鎖定,模糊描述用向量補齊。
    • 可以針對不同類型文件設定 權重策略(例如法規 > 內部 wiki > Slack 摘要)。
    • 可以後面用 rerank 模型 做第二次排序,穩定提升回答可靠度。

    💡 關鍵: 單一檢索在長文件與專有名詞場景很容易漏抓關鍵內容,Hybrid Search 能同時顧到語義相似與精確字串匹配,明顯降低 RAG 翻車率。


    2. 讓 Agent 負責檢索策略,而不是把檢索寫死

    典型 Agentic RAG 設計:

    • 一個 Orchestrator Agent(對話主控)
    • 多個 retriever 工具:keyword_retriever、vector_retriever、hybrid_retriever、legal_retriever 等

    Agent 的工作不是「自己產生答案」,而是先判斷:

    1. 要用哪種檢索策略?
    2. 查錯誤碼或 ticket:優先 關鍵字 → 再向量精抽
    3. 問概念解釋:優先 向量 → 再用 BM25 找原始定義
    4. 法規/權威階層:改用 分層 retriever(例如每一層級至少取 1–2 筆)

    5. 要不要改寫 Query?

    6. 第一輪命中文件相關度低時,讓 Agent 自動:

      • 摘出關鍵詞
      • 加上同義詞 / 全名(例如:DS → Data Steward)
      • 限縮 domain(例如:限定 product=core-banking)
    7. 多輪重試與合併結果

    8. 第一輪檢索後如果信心不足(例如 top-3 相似度都 < 0.7),
    9. Agent 改寫 query 或更換 retriever,再抓一次,最後合併去重後送入 LLM。

    這樣做的實際好處:

    • 檢索策略可迭代:只要調整工具 / prompt,不必重寫服務架構。
    • 容易在線上 A/B:只換掉 Orchestrator 的 prompt 或 routing 邏輯即可。
    • 可以針對不同客戶 / 部門掛不同的工具組合。

    一個可落地的組合:

    • LLM:OpenAI(gpt-4.1)、Anthropic(claude-3.7)皆可
    • 檢索:
    • Elasticsearch:BM25 + dense vector + hybrid score
    • 或 Weaviate / Qdrant:向量 + keyword filter

    簡化架構:

    User → Orchestrator Agent → (tool calls) →
      - keyword_retriever (Elasticsearch BM25)
      - vector_retriever  (Weaviate / ES dense vector)
      - hybrid_retriever  (ES rank_feature / script_score)
    → merge + dedup + rerank → LLM answer
    

    實作範例

    1. Orchestrator Agent Prompt(決定使用哪個 retriever)

    假設用 OpenAI Assistants API 或自行封裝 tools:

    系統指示(Orchestrator):
    你是一個檢索協調代理,負責從多種檢索器取得最相關的企業知識。
    
    - 若使用者詢問:
      - 錯誤碼、ticket ID、法規條號、API 名稱 → 優先使用 **keyword_retriever**。
      - 抽象概念、最佳實踐、流程說明 → 優先使用 **vector_retriever**。
      - 法律 / 合規問題,且需多層級來源 → 使用 **legal_hybrid_retriever**。
    
    流程:
    1. 先決定要呼叫哪些工具(可以多個)。
    2. 若第一輪檢索結果的「來源數量 < 3」或「相關度評估偏低」,
       - 自行改寫查詢(更精簡、加入關鍵字),再重試一次。
    3. 最終將所有檢索結果去重、排序,回傳給後續回答模型。
    禁止自行編造公司內部資料,所有答案必須可追溯到文件片段。
    

    索引 mapping:

    PUT knowledge_base
    {
      "mappings": {
        "properties": {
          "content": { "type": "text" },
          "content_vec": { "type": "dense_vector", "dims": 1536, "index": true },
          "source_type": { "type": "keyword" },   
          "tenant_id": { "type": "keyword" }
        }
      }
    }
    

    簡化版 hybrid 查詢(BM25 + 向量):

    POST knowledge_base/_search
    {
      "size": 20,
      "query": {
        "script_score": {
          "query": {
            "bool": {
              "must": [
                {"match": {"content": "GDPR data retention"}},
                {"term": {"tenant_id": "acme_corp"}}
              ]
            }
          },
          "script": {
            "source": "0.6 * _score + 0.4 * cosineSimilarity(params.q_vec, 'content_vec')",
            "params": {"q_vec": [/* query embedding */]}
          }
        }
      }
    }
    

    關鍵點:

    • BM25 與向量權重(例子中 0.6 / 0.4)要透過線上 A/B 或離線 eval 調整。
    • tenant_id filter 做多租戶權限隔離,非常重要。

    💡 關鍵: 在同一個查詢裡用 script score 同時結合 BM25 分數與 cosine similarity,能控制兩者權重,調整出最適合自己資料分佈的 Hybrid 策略。


    3. Chunking 與 max context 的工程細節

    基本原則:

    • 以 語義切分(semantic splitting)+ 適度 overlap 為主,而不是死切 512 tokens。
    • 避免 chunk 過長導致:
    • 向量語義太混濁,top-k 噪音變高。
    • LLM context 塞滿 retrieval 噪音,回答變模糊。

    實作骨架(pseudo-code):

    from semantic_splitter import split_semantic
    
    def chunk_doc(text: str):
        sections = split_semantic(text, max_chars=1200)
        chunks = []
        overlap = 150  # 字元級 overlap
        for sec in sections:
            if len(sec) <= 1200:
                chunks.append(sec)
            else:
                # 針對長 section 再做 sliding window
                for i in range(0, len(sec), 1200 - overlap):
                    chunks.append(sec[i:i+1200])
        return chunks
    

    與 max context tokens 的關係:

    • 假設 LLM context 32k,系統 prompt + 對話占 4k,其實留給 RAG 的只有約 28k。
    • 若每個 chunk 約 400 tokens,你實際能塞 約 50–60 個 chunk 就爆,但通常 8–16 個 chunk 就夠,更多只會拉高成本與噪音。

    rerank 與去重:

    • 先取寬一點的 top_k(例如 30–50),再用輕量 rerank(如 bge-reranker)縮到 8–12 個。
    • 去重邏輯可以用:same doc_id + 高度相似 直接只留一個,減少重複內容浪費 context。

    💡 關鍵: 雖然 context 可能有 32k tokens,但實務上只保留約 8–16 個高質量 chunk,通常就能兼顧成本與效果,塞太多反而害答題品質下滑。


    建議與注意事項

    1. 不要只做 embedding,不做 eval

    常見錯誤流程:

    1. 把全部文件 embed → 塞進向量庫 → 上線。
    2. 發現回答怪怪的 → 開始懷疑模型。

    比較健康的流程:

    1. 先準備一組 標記好的 QA/Eval 集(10–50 題也好)。
    2. 對同一組問題,分別跑:
    3. 純 BM25
    4. 純向量
    5. Hybrid + 不同權重
    6. 用簡單指標(hit@k、人工評分)挑一個 baseline,再上線 A/B。

    2. 向量庫維護:重建 / 追加 / 版本化

    • Embedding 模型版本變更 時:
    • 盡量用新 index 重建(kb_v2),舊版保留一段時間做對照。
    • 不要在同一個 index 裡混不同 embedding 模型的向量。
    • 大量文件更新策略:
    • 批次追加新文檔時,要記錄 批次 ID / 資料版本,方便 rollback。
    • 下線文件要標記 is_active=false 或直接 soft delete,避免回答引用過期政策。

    3. 多租戶與權限過濾

    • 在 Elasticsearch / Weaviate 中務必存:tenant_id、visibility、role 等欄位。
    • 檢索 query 層一定要加:
    "filter": [
      {"term": {"tenant_id": "${current_tenant}"}},
      {"terms": {"visibility": ["public", "internal"]}}
    ]
    
    • 不要指望 LLM 自己遵守權限,權限控制一定要在檢索階段完成。

    4. 線上評測與 A/B 驗證

    簡易做法:

    1. 選一組真實高頻 query(客服 ticket、搜尋 log)。
    2. 設計兩條路線:
    3. A:純向量 RAG
    4. B:Agentic RAG + Hybrid Search
    5. 隨機分流流量,收集:
    6. 使用者是否重問 / 追問率
    7. 是否需要人工接手
    8. CSR / domain expert 的 1–5 分主觀評分

    通常在企業知識庫場景,只要加上 Hybrid Search + Agent 重試,就能看到 10–30% 的 query 成功率提升,而且失誤類型會明顯變少(比較少「答錯法規條」、「引用過期政策」)。


    總結:如果你現在的 RAG 還是「單一向量庫 + top-k 塞給 LLM」,要提升穩定性,不一定要換更大的模型,先把 Hybrid Search 與 Agentic 檢索策略補上,通常是成本最低、效果最直接的升級路線。


    🚀 你現在可以做的事

    • 從現有專案中抽出 10–50 則真實 query,分別用純 BM25、純向量與 Hybrid 跑一次,記錄 hit@k 與人工評分
    • 在現有 RAG 服務前面加一個簡單 Orchestrator,把關鍵字與向量檢索拆成兩個 tool,用 prompt 控制選用策略
    • 在搜尋層加入 tenant_id 與 visibility 欄位與 filter,先確保權限過濾正確,再進一步調整 Hybrid 權重與 rerank 策略