作者: kerwin77106

  • 把整個 Google 變成你的 AI Agent

    把整個 Google 變成你的 AI Agent

    📌 本文重點

    • google/skills 是 Google 產品專用的 AI Agent 工具箱
    • 透過現成 skills,LLM 可直接操作 Gmail / Calendar / Drive
    • 幾十行 Python 就能做出實用的 Workspace 自動化 Agent
    • 重視權限、安全與流程設計,才能放心在公司環境使用

    用一句話說清楚:google/skills 是一個專門替 Google 產品包好的「AI Agent 工具箱」,讓 LLM 不只會聊天,還能直接幫你操作 Gmail、Calendar、Drive 等服務。

    專案連結:https://github.com/google/skills


    google/skills 是什麼?可以幹嘛?

    用開發者的語言講:

    • 這是一組 Python 套件 + 一堆已實作好的「工具(skills)」
    • 每個 skill 就是一個可被 LLM 呼叫的函式,背後已幫你處理好 Google API 認證、資料結構、錯誤處理
    • 你只要把這些 skills 接到你熟悉的 Agent 框架(或自己寫個 loop),LLM 就能:
    • Gmail 搜尋、讀取、回覆郵件
    • Google Calendar 建立、更新、刪除行程
    • Google Drive 找檔案、讀內容
    • 以及其他 Google 產品(例如 Docs / Sheets / Tasks 等)

    💡 關鍵: 把繁瑣的 Google API 細節封裝成 skills,讓你專注在設計 Agent 流程,而不是處理認證與資料結構。

    目前常見支援的產品與典型技能

    以 GitHub 專案內容與官方範例為主,目前重點集中在 Workspace 產品:

    • Gmail:搜尋郵件、讀取內容、標記已讀、建立草稿、送出郵件
    • Calendar:建立事件、更新時間/地點、取消會議、查詢空檔
    • Drive:列出檔案、搜尋、下載內容、讀取檔案文字(搭配 API 或其他工具)
    • Tasks / Docs / Sheets:視版本與模組更新擴充,作為實驗性 skills 提供

    你可以把它想成:「Google 幫你寫好一堆『LLM 可安全使用的 Google API wrapper』,你只要負責接到自己的 Agent。」


    核心功能:讓 LLM 真的「動手做事」

    下面用三個代表性技能,拆開來看它怎麼組成一條完整工作流。

    1. Gmail:搜尋 + 回覆郵件

    能做的事

    • 根據條件(發信人、標題關鍵字、時間)搜尋郵件
    • 讀取郵件主旨、內容、附件資訊
    • 由 LLM 生成人性化回覆,再用 skill 建草稿或直接寄出

    你可以怎麼用

    • 自動整理每日「待回覆」郵件清單
    • 給 Agent 一句自然語言指令:
    • 「幫我找這週所有含『報價』的客戶信,產出一封統一回覆草稿」

    2. Calendar:建立 / 修改行程

    能做的事

    • 建立新事件(時間、地點、參與者、線上會議)
    • 更新時間或加入備註
    • 查詢某段時間的空檔

    你可以怎麼用

    • 讓 LLM 從郵件裡抓出「時間 + 地點 + 主題」,自動變成 Calendar 事件
    • 用一句話:
    • 「把明天 3–5 點標成『專注工作』,不要排會議」

    3. Drive:從檔案抓資料

    能做的事

    • 依檔名、類型、擁有者搜尋檔案
    • 下載或讀取檔案(再交給 LLM 摘要)

    你可以怎麼用

    • 找到昨天產出的報表,請 LLM 摘要要點後寄給主管
    • 自動從會議紀錄整理 action items,寫回 Google Docs

    把它們串起來:一條完整工作流範例

    例子:自動從郵件抓會議資訊 → 建行程 → 建備忘錄

    1. Agent 用 Gmail skill 搜尋主題含「Meeting」「邀請」的未讀信
    2. LLM 解析郵件內容,抽出:會議主題、時間、地點、參與者
    3. 用 Calendar skill 建立事件,寫入摘要與會議連結
    4. 用 Drive/Docs skill 建一份「Meeting Notes」文件,寫入議程、預先問題

    你只要負責描述「整體目標」,LLM 會自己決定何時呼叫哪個 skill。你的程式碼變得像是在描述流程,而不是在寫一堆 API 呼叫細節。

    💡 關鍵: 一旦 workflow 串起來,同一套 skills 可以重複組裝出不同的自動化場景,大幅降低開發新 Agent 的成本。


    實戰場景:把散落在 Workspace 的動作串起來

    下面是幾個可以立即實作的場景,每一個都對應到你可以「今天就試做」的腳本。

    1. 個人行程助理

    需求:每天早上想知道今天有哪些會議、重要信件、待辦。

    可以怎麼做

    • Gmail:抓「星號」或加標籤的關鍵郵件
    • Calendar:列出今天所有會議與空檔
    • Tasks / Drive:列出今日到期的任務與文件
    • LLM 整理成一封「每日簡報」,寄到 Gmail 或 Slack

    👉 可行動:用本文後面的「每日早上報告 Agent」最小範例修改即可。

    2. 客服工單整理

    需求:客服信都在 Gmail,手工整理太慢。

    技能組合

    • Gmail:抓取特定 label(例如 support)的所有新信
    • LLM:
    • 自動分類(bug、退款、帳號問題)
    • 抽出關鍵欄位(客戶、產品、影響範圍)
    • Drive/Sheets skill:寫入 Google 試算表,讓團隊追蹤

    3. 銷售線索追蹤

    需求:商務開發信散落在 Gmail、會議安排在 Calendar、紀錄在 Drive。

    技能組合

    • Gmail:搜尋含「報價」「demo」關鍵字的信
    • Calendar:對應已有 / 尚未安排會議的線索
    • Drive:讀取對應的提案文件
    • LLM:產出「Sales pipeline 摘要」,再寄給業務團隊

    4. 團隊報表自動彙總

    需求:每週要整理多份 Google Sheets / Docs 的數據與摘要。

    技能組合

    • Drive:搜尋指定資料夾裡的所有報表
    • Sheets/Docs skill:抓出指定欄位/段落
    • LLM:彙整成一份「本週關鍵指標 + 亮點 + 風險」
    • Gmail:寄給管理層

    每個場景本質上都是:用 skills 拉資料 → LLM 處理 → 再用 skills 寫回 Google 生態

    💡 關鍵: 只要 Workspace 流程是「讀資料 → 分類/摘要 → 回寫」,幾乎都能用同一套模式快速自動化。


    怎麼開始:從零到一的小 Agent(Python)

    這段寫給已經會基本 Python 的讀者。目標是做一個:

    「每日早上 9 點,整理今天的會議與重要郵件,寄一封報告給自己」

    步驟一:安裝套件與專案結構

    pip install google-skills openai  # 或你要用的 LLM 客戶端
    

    一個最小專案結構可以是:

    project/
      main.py          # 主程式,Agent 邏輯
      skills_config.py # Google skills 初始化
      .env             # 儲存 API Key 等環境變數
    

    步驟二:設定 Google API 憑證與權限

    1. 前往 https://console.cloud.google.com/
    2. 建立專案,啟用:
    3. Gmail API
    4. Calendar API
    5. (若需 Drive,就再開啟 Drive API)
    6. 建立 OAuth 用戶端 / Service Account 憑證
    7. 下載憑證 JSON,放進你的專案中,路徑寫在環境變數(例如 GOOGLE_APPLICATION_CREDENTIALS

    google/skills 會讀這些設定,幫你處理 OAuth 流程。第一次執行會要你開瀏覽器認證,通過後就可以長期使用。

    步驟三:初始化 skills

    # skills_config.py
    from google.skills import GmailSkill, CalendarSkill
    
    gmail_skill = GmailSkill(scopes=[
        "https://www.googleapis.com/auth/gmail.readonly",
        "https://www.googleapis.com/auth/gmail.send",
    ])
    
    calendar_skill = CalendarSkill(scopes=[
        "https://www.googleapis.com/auth/calendar",
    ])
    
    TOOLS = {
        "gmail": gmail_skill,
        "calendar": calendar_skill,
    }
    

    (實際類名與參數以官方 GitHub 為準,這裡是示意寫法。)

    步驟四:寫一個最小「每日報告」 Agent

    下面示意一個 純 Python + LLM + skills 的簡易 loop:

    # main.py
    import datetime as dt
    from skills_config import TOOLS
    from openai import OpenAI
    
    client = OpenAI()
    
    
    def get_today_summary():
        today = dt.date.today().isoformat()
    
        # 1) 用 Gmail skill 抓今天重要信件(實際用法依官方 API)
        important_emails = TOOLS["gmail"].search_messages(
            query="label:STARRED newer_than:1d"
        )
    
        # 2) 用 Calendar skill 抓今天所有事件
        events = TOOLS["calendar"].list_events(
            time_min=today + "T00:00:00Z",
            time_max=today + "T23:59:59Z",
        )
    
        prompt = f"""
    你是一個助理,請用條列整理以下資訊:
    1. 今日重要郵件(寄件人 + 主題)
    2. 今日會議(時間 + 標題)
    
    重要郵件:{important_emails}
    今日行程:{events}
    """
    
        resp = client.chat.completions.create(
            model="gpt-4o-mini",  # 或你使用的其他 LLM
            messages=[{"role": "user", "content": prompt}],
        )
        return resp.choices[0].message.content
    
    
    def send_daily_report():
        summary = get_today_summary()
        TOOLS["gmail"].send_message(
            to="your_email@example.com",
            subject="今日工作總覽",
            body=summary,
        )
    
    
    if __name__ == "__main__":
        send_daily_report()
    

    接下來只要用 crontab 或任一排程工具,每天早上 9 點跑一次 python main.py,你就有一個真正會「用 Gmail + Calendar 幫你工作」的小 Agent 了。


    延伸玩法:接到 LangGraph / MCP / 自建 loop

    google/skills 本身只是一組工具,你可以自由接到任何 Agent 框架。

    常見接法比較

    名稱 核心功能 免費方案 適合誰
    LangGraph 圖形化定義 Agent workflow、狀態機 開源 要做複雜流程 / 多工具協作
    MCP 標準化「工具伺服器」協議 規格開源 想讓多個模型共用同一組工具
    Simple loop(自建) while-loop + tool call + LLM 只要有 LLM 即可 想快速測試、腳本導向

    怎麼接 google/skills?

    • LangGraph:把 Gmail/Calendar skill 包成「tool node」,用 graph 描繪整條流程(例如:先讀 mail → 判斷 → 建行程)。
    • MCP:把 google/skills 包成 MCP 工具伺服器,就像 Reddit 上有人把產品目錄接到 Claude 一樣,任何支援 MCP 的 Agent 都能呼叫這組 Google 工具。
    • 自建 loop:如前面的 send_daily_report(),自己在程式裡控制什麼時候 call 哪個 skill。

    實務注意事項:安全、權限與 rate limit

    在公司環境用 google/skills,這幾點非常重要:

    1. 最小權限原則
    2. 只開啟必要的 scopes,例如只讀 Gmail 就不要給 send 權限
    3. 針對不同 Agent 建不同憑證,避免權限過大
    4. 審計與日誌
    5. 記錄每次工具呼叫(誰、什麼時候、對哪個帳號)
    6. 公司內部可用 SIEM / 日誌系統統一管理
    7. Rate limit 與配額
    8. Google API 有配額,批次任務要加上 sleep / retry
    9. 測試環境與正式環境要分開憑證,避免測試爆掉正式配額
    10. LLM 安全邏輯
    11. 對「寫入」類操作(寄信、刪除事件)加上確認步驟
    12. 可用 rule-based filter:例如禁止刪除某些標籤信件

    總結:把「會聊天的 LLM」變成「會用 Google 的助理」

    如果你已經每天活在 Gmail、Calendar、Drive 裡,google/skills 的價值很單純:

    • 你不用再對著 Google API 文件苦讀,只要調用現成的 skills
    • LLM 能真的幫你「按按鈕、拉資料、寫回去」,而不是只給你建議
    • 從個人行程助理,到團隊報表自動化,都可以在幾十行 Python 內完成第一個版本

    先從一個小腳本開始:「每日早上發報告」,跑通一次之後,你就會自然開始想把更多 Workspace 工作交給你的 Agent。

    🚀 你現在可以做的事

    • 打開 google/skills GitHub 專案,瀏覽支援的 skills 清單與範例程式
    • 依照文中的「每日報告 Agent」範例,在本機建立一個最小 Python 專案跑通一次
    • 在你的 Workspace 工作流中,挑一個「讀資料 → 整理 → 寄出」流程,試著用 google/skills + LLM 自動化它
  • 一句話就能寫的 iPhone 自動化

    一句話就能寫的 iPhone 自動化

    📌 本文重點

    • 新版捷徑可用自然語言生成跨 App 自動化
    • Siri in Camera 支援拍帳單自動分帳與付款
    • Safari、Photos 等 AI 功能都能串成工作流程

    講一句話,iPhone 幫你把一連串跨 App 的操作變成自動化流程,這就是新版 捷徑(Shortcuts)AI 工作流生成功能 + Siri AI 要解決的事。

    參考:Shortcuts 新功能報導(TechCrunch)▶︎ https://techcrunch.com/2026/06/08/apple-will-let-you-build-workflows-using-ai-in-its-new-shortcuts-app/


    核心功能:現在「講需求」就能生出捷徑

    1. 用自然語言生成捷徑:一句話變一條 workflow

    以前做捷徑,要一個一個 Action 拖拉;現在你可以直接在 Shortcuts 裡打字或跟 Siri 說:

    • 「幫我整理今天拍的照片到『今日精選』相簿,然後把 3 張最好看的用 Reframe 調整成適合 IG 的比例。」
    • 「以後 Gmail 收到標題含『發票』的信,把附件 PDF 存到 iCloud Drive 的『發票/2026』資料夾。」
    • 「每天晚上 10 點,把今天新增的照片做成 5 張圖文日記草稿存在備忘錄。」

    系統會做的事(你實際會看到):

    • 自動幫你建立一條捷徑,裡面已經串好「取得照片 → 篩選 → Photos Reframe → 存到相簿」等步驟。
    • 針對 Email/雲端檔案,會自動找對應的 Mail、檔案 App Action 串起來。
    • 你可以再手動微調條件,例如日期、相簿名稱、檔案夾位置。

    💡 關鍵: 只要一句自然語言描述,就能自動拆解成完整的捷徑工作流程,大幅降低設定門檻。

    可以馬上試的三句話(打進捷徑的 AI 提示框):

    • 「每天早上 8 點總結昨天的重要 email,用中文整理成 3 點重點,傳到我的備忘錄。」
    • 「下載我 Gmail 中今天所有附件,存到 iCloud Drive/工作/今天日期。」
    • 「每週一早上 9 點,把行事曆上本週的會議整理成列表,寄給自己。」

    行動建議

    • 打開 捷徑 App → 新增 → 使用 AI 建立工作流程(以實際 iOS 介面為準),直接把上面其中一句貼進去,看它怎麼幫你拆解步驟。

    2. Siri in Camera 分帳:拍帳單 → 點菜 → 自動算錢

    這是新 Siri AI 最「有感」的實戰功能之一,官方示範在這裡:https://techcrunch.com/2026/06/08/apple-is-fixing-the-headache-of-splitting-the-bill-with-its-new-siri-in-camera-feature/

    流程拆解成你可以照做的步驟:

    1. 先準備
    2. 更新到支援 Siri AI 的 iOS 版本(見文末「怎麼開始」小節)。
    3. 在「設定 → 錢包與 Apple Pay」裡開好 Apple Cash,綁定帳戶或信用卡。

    4. 啟用 Siri in Camera

    5. 打開系統「設定」→ Siri → 確認有開啟「Siri in Camera」或類似選項(名稱以正式版為準)。

    6. 實際分帳操作

    7. 在餐廳結帳時:

      • 打開 相機 App,對準紙本帳單。
      • 長按畫面或點右下角出現的 Siri 圖示,啟動「Siri in Camera」。
      • 螢幕會標示出每一項餐點與金額,你:
      • 點選自己點的菜
      • 確認要不要平均分服務費、小費等
      • Siri 算出你應付的金額後,會跳出「使用 Apple Cash 支付給 XXX」的選單。
      • 按一下就完成付款。
    8. 進階:配合捷徑做「分帳記帳」

    9. 你可以另外建立一條捷徑:「當我用 Apple Cash 付錢給某位朋友時,自動在備忘錄『聚餐記錄』裡新增一條記錄(日期、金額、對象)。」
    10. 作法:
      • 在捷徑中搜尋 Apple Cash 相關 Action(或直接用自然語言生成:
      • 「當我用 Apple Cash 付款時,幫我記錄一條支出到備忘錄。」)

    行動建議

    • 下次聚餐前先把 Apple Cash 設好,實際用 Siri in Camera 分一次帳,回家再用捷徑補上「記帳自動化」。

    💡 關鍵: Siri in Camera 把「看帳單 → 算錢 → 轉帳」這串麻煩流程壓縮成拍一次照、按一次確認。


    3. 其他 AI 功能:Safari 補字、照片 Reframe,都能變成 workflow 的一段

    根據 TechCrunch 報導,Safari、捷徑、密碼等系統 App 都接上了 AI:https://techcrunch.com/2026/06/08/apple-just-taught-your-iphone-to-finish-your-sentences-your-photos-and-your-workflows/

    這裡挑兩個最容易跟捷徑串在一起的:

    Safari:自動補文字 & 生成草稿

    Safari 內文輸入框(例如表單、留言)會有 AI 提示,可以:

    • 根據你已輸入的開頭,自動補完句子。
    • 根據網頁內容,產生回覆草稿(例如回客服信、填意見回饋)。

    怎麼跟捷徑配合?

    • 建一條捷徑:「當我在分享選單裡選擇『AI 回覆草稿』時,
      1)把目前網頁內容摘要 → 2)用 Siri AI 生成一段 100 字內中文回覆 → 3)複製到剪貼簿。」
    • 用自然語言下指令:
    • 「建立一個捷徑,從 Safari 分享頁取得文章內容,幫我寫一段禮貌回覆放到剪貼簿。」

    💡 關鍵: 把 Safari AI 補字和捷徑結合,可一鍵從網頁生成短版回覆,減少重複打字。

    Photos Reframe:一鍵重構照片構圖

    Photos 多了 Reframe,可以:

    • 把橫幅照片重構成直幅,重抓主體構圖。
    • 幫照片轉成適合 IG、限動等比例。

    搭配捷徑的用法:

    • 「選 10 張今天新拍的照片,用 Reframe 變成 9:16 比例,存到相簿『IG 候選』。」
    • 這句直接丟給 Shortcuts 的 AI,就會幫你串好:取得今天照片 → Reframe → 存到指定相簿。

    小工具一覽:哪個負責哪件事?

    資訊綜合自 TechCrunch、The Verge、Wired 報導:Siri AIShortcuts AISiri App

    名稱 核心功能 免費方案 適合誰
    捷徑(Shortcuts)AI 工作流 用自然語言生成跨 App 自動化流程 內建免費 想把重複操作變自動化的 iPhone 使用者
    Siri AI 新版 Siri,可讀螢幕、跨 App 操作、個人化互動 內建免費 習慣用語音/文字跟手機互動、要「講需求」就完成的人
    Siri in Camera 對著帳單拍照就能 AI 分帳 + Apple Cash 支付 內建免費(支付依銀行手續費) 常聚餐分帳、懶得算錢的人

    適合誰用?三種典型使用者

    1. 每天都在重複一樣操作的上班族
    2. 下班打卡 → 開導航回家 → 播放固定 Podcast → 開啟家裡的 HomeKit 燈具。
    3. 行動:把這句完整話丟給捷徑 AI,讓它幫你把這條「下班儀式」自動化。

    4. 拍很多照片、想要整理成內容的人

    5. 每天拍一堆照片,但懶得整理、寫日記、挑圖。
    6. 行動:做一條「晚上 10 點整理照片+日記草稿」的捷徑,讓 AI 每天幫你先挑、先寫,再來人工微調。

    7. 會議、課程超多的知識工作者 / 學生

    8. 常忘記開勿擾、錄音,或者會後才在找資料。
    9. 行動:用自然語言生一條「會議前 10 分鐘自動開勿擾+錄音」的捷徑,配合行事曆事件觸發。

    怎麼開始:版本需求、入口在哪裡?

    1. 需要哪個 iOS 版本?

    以目前公開資訊,這些功能會隨 新一代 Apple Intelligence / Siri AI 更新 推出:

    • 確認方式:
    • 到「設定 → 一般 → 軟體更新」看是否有標示 Siri AI / Apple Intelligence 相關更新。
    • 通常會需要最新主版本(例如 iOS 20 這級別),以及較新的 iPhone 型號。

    2. 哪裡打開新版 Shortcuts 與 Siri App?

    • 捷徑 Shortcuts
    • 已內建在 iOS,找不到就到 App Store 搜「Shortcuts」。
    • 開啟後,點右上角「+」→ 留意有沒有「用 AI 建立捷徑」或類似按鈕。
    • Siri App(獨立版)
    • 更新後,主畫面會多一個 Siri App 圖示。也可以在 App 資料庫搜尋「Siri」。
    • 開啟後可以直接用文字或語音下指令,而不一定要喊「嘿 Siri」。

    推薦先練的 3 條小自動化(附自然語言模板)

    直接把以下句子丟給捷徑的 AI 入口就能開始:

    1. 下班自動開導航回家 + 播放 Podcast

    「當我離開公司地點時,自動在 Google Maps(或 Apple 地圖)開啟回家的導航,並在 Spotify(或 Podcast App)播放我最新一集的路上要聽的節目。」

    微調建議:

    • 把「公司地點」換成具體地址或地標。
    • 把播放 App 換成你實際使用的。

    2. 每晚 10 點整理今天照片+輸出日記

    「每天晚上 10 點,把今天新增的相片挑 10 張代表性的,用簡短文字說明今天發生什麼事,整理成一則備忘錄日記。」

    AI 會:

    • 自動拉出今天照片
    • 生成簡短摘要文字
    • 存成一則新備忘錄

    3. 會議開始前 10 分鐘自動開勿擾+錄音

    「當行事曆上有標成『會議』或『Meeting』的事件時,在開始前 10 分鐘自動開啟勿擾模式,並在會議時間內用語音備忘錄錄音。」

    你可以再加:會後寄一封含錄音連結的 Email 給自己。


    思考模板:如何把手動操作,轉成一句自然語言需求?

    只要照這四格填空,就能寫出一條適合丟給捷徑 AI 的句子:

    「在_情境 / 時間_,幫我自動_動作 A_,接著_動作 B_,最後把結果存到_位置 / App_。」

    幾個範例:

    • 「在每天早上 8 點,幫我自動把今天的行事曆整理成文字摘要,接著傳到 Slack 的 #daily 頻道。」
    • 「當我連上公司 Wi‑Fi,幫我自動開啟勿擾模式,接著打開公司 VPN App。」
    • 「當我在Safari 分享一篇文章時,幫我自動生成 3 點中文重點,最後把結果存到Notion 的『閱讀筆記』資料庫。」

    你要做的,就是把自己每天重複做的動作,照這個模板說出來,然後丟給 Shortcuts 或 Siri AI 來「幫你寫程式」。


    🚀 你現在可以做的事

    • 到「設定 → 一般 → 軟體更新」確認是否已支援 Apple Intelligence / Siri AI,並完成更新
    • 打開捷徑 App,使用「用 AI 建立工作流程」,貼上文中任一自然語言範例實測一次
    • 在下一次聚餐前設定好 Apple Cash,實際用 Siri in Camera 完成一次拍照分帳+付款流程
  • Claude Code 供應鏈危機:AI 開發者太天真了

    Claude Code 供應鏈危機:AI 開發者太天真了

    📌 本文重點

    • AI coding agent 正在成為新攻擊面
    • 供應鏈攻擊已專門鎖定 AI 開發工具
    • AI 工具必須被當成高風險資安系統管理

    這次 Claude Code 事件真正可怕的地方,不是幾個 npm 套件被下毒,而是 AI coding agent 本身正在變成新的「攻擊面」。如果開發生態繼續只談效率、不談安全,下一個被入侵的,不會只是開發機器,而是整個企業的內部資料與用戶隱私。AI 工具與開發流程,必須被當成高風險資安系統,而不是玩具。


    一場「從 Red Hat 憑證到你的 Claude Code」的蠕蟲式攻擊

    先把時間線拉清楚:

    • 攻擊者先取得一名 Red Hat 員工的 GitHub 憑證,直接往 @redhat-cloud-services 旗下 32 個 npm 套件下手,這些套件週下載量約 11.7 萬次
    • 由於 CI/CD 已與 npm 發布流程自動串接,攻擊者等於「合法地」用 Red Hat 的身份,把惡意程式碼發佈給整個開發者社群——這就是典型的 供應鏈攻擊
    • 惡意程式碼安裝後,並不只藏在 node_modules,而是主動修改你的開發環境
    • 植入 Claude Code 啟動設定
    • 修改 VS Code 專案設定
    • 之後 只要你打開 VS Code 或 Claude Code,惡意程式就會自動執行,
    • 靜默收集機器上的所有憑證(token、SSH key、雲端憑證……)
    • 傳回攻擊者伺服器
    • 更糟的是,就算你卸載 npm 套件,惡意碼仍活在 IDE 設定裡,持續運作
    • 若你試圖「先撤 token 再清 malware」,某些版本還會觸發毀滅性 payload:刪除整個 home 目錄並覆寫,降低復原可能性
    • 幾天後,研究者在 npm 上又發現第二波、更高明的變種,包裝更隱密、具蠕蟲特性,持續透過自動安裝與開發工具擴散。

    💡 關鍵: 一組被盜用的 GitHub 憑證,串起了從 CI/CD 到 IDE、再到 AI 助手設定的整條自動化惡意供應鏈。

    關鍵不是一個 Red Hat 帳號被偷,而是:攻擊鏈一路打穿「憑證 → CI/CD → 套件 → IDE → AI 助手設定」,形成一條完全自動化的惡意供應鏈。

    這條鏈的最後一站,偏偏就是你以為「只是在幫你寫程式」的 Claude Code。


    AI coding agent 追求效率,卻默默放大了供應鏈風險

    這起 Red Hat / Claude Code 事件,和最近 Microsoft 開源套件被植入 credential stealer 的攻擊,實際上指向同一個趨勢:攻擊者已開始專門設計「針對 AI coding agent」的惡意程式。

    在 Microsoft 的案例中:

    • 73 個微軟持有的加簽開源套件被植入進階憑證竊取程式碼。
    • 惡意程式碼會在開發者透過 AI coding agent 開啟這些套件時被觸發——研究者直接點名這是針對 AI agent 的攻擊;AI 會幫你讀檔、跑 script、補依賴,攻擊者只要等 AI「乖乖照做」。
    • 這些套件最初是被 GitHub 自動系統下架,但平台一開始只用「違反服務條款」這種模糊說法,沒有明講「這是惡意攻擊、請假設你已被入侵」,讓不少開發者完全沒有警覺。

    把兩起事件放在一起看,可以看到幾個結構性問題:

    1. AI agent 天然信任依賴與腳本

    AI coding agent 的賣點,是幫你:

    • 自動安裝缺的套件
    • 自動修改設定
    • 自動產生/執行 script

    這看起來是「開發效率神器」,但在攻擊者眼中,這是一台可以遠端操控的自動化執行引擎。惡意套件只要被 AI 讀到、被 agent 視為「為了專案正常運作需要執行的 code」,攻擊就啟動了。

    2. DevSecOps 思維還停留在「人手動操作」時代

    大多數安全流程是為了人設計的:

    • 「請開發者檢查 pull request」
    • 「請手動審視依賴變更」
    • 「請不要執行不明腳本」

    但今天的問題是:AI 會幫你點掉所有這些紅燈。在 Claude Code 事件裡,惡意程式碼躲到 VS Code 與 Claude 設定檔中,只要開啟工作區或啟動 AI 助手,就會自動跑。

    3. 供應鏈攻擊變成「AI 時代的新常態」,不是個案

    • Red Hat / Claude Code:利用 GitHub 憑證 + CI/CD + IDE/AI 設定,形成蠕蟲式擴散。
    • Microsoft 套件:利用 加簽開源套件 + GitHub 生態 + AI coding agent 的自動操作,鎖定開發者憑證。

    它們都不是「某個工程師不小心點錯」這種等級,而是系統性利用 AI 進入開發供應鏈的空窗期

    💡 關鍵: 供應鏈攻擊已從零星事件,演變成專門針對 AI 開發流程設計的「新常態」風險。

    真正的問題是:AI 工具商與生態平台,把自己當成「效率工具提供者」,沒有把自己當成「新一代 DevSecOps 基礎設施」來設計。


    這不是 Prompt Injection 問題,是「Agent 執行權限」問題

    今天的主角已經不是 prompt injection。攻擊者要的,不是讓模型講錯話,而是讓 agent 替他「按下執行鍵」

    MCP(Model Context Protocol)與各種 Agent 框架被廣泛實驗的同時,安全研究者早就示警:

    • 當 AI 代理有「讀檔、寫檔、跑指令、打 API」等多重能力時,它就變成一個新的 高權限執行環境
    • 文章《Red Teaming MCP Servers: 24 Attack Payloads and the Blueprint for Agentic Defense-in-Depth》做了 24 種紅隊測試,證明:
    • 單靠輸入過濾完全不夠
    • 必須從 輸入 → 代理決策 → 執行層 → 系統權限 做多層防禦

    再把這跟機器身份與憑證管理放在一起看:

    • 如《Your Secrets Are Probably Leaking》指出:大多數團隊只強化「使用者登入安全」,卻讓 API key、token、CI 變數、雲端憑證到處亂飛,形成 credential sprawl
    • 在 Claude Code 與 Microsoft 事件中,惡意碼收割的正是這一整片「第二身份平面」:
    • .env 裡的密鑰
    • CI/CD pipeline 的 token
    • Terraform state、K8s manifest 裡的憑證

    當 AI agent 同時掌握「程式碼執行能力」與「存取這些機器身份憑證」,它就成了攻擊者最想控制的跳板。

    現在的主流 AI IDE 插件,多半只談:「我們如何讓你寫程式更快」。
    很少有人認真回答:「這個 agent 在你的機器上,到底能做多可怕的事?誰在監控?誰能審計?誰負責出事時的鑑識?

    💡 關鍵: AI agent 一旦擁有執行權限與憑證存取能力,就等同於新的「高權限使用者」,安全設計必須對齊這個等級。


    開發者與企業現在就該做的事:把 AI 當成高風險資安系統來管理

    這不是「選不選用 Claude Code 或某個特定工具」的問題,而是你要不要承認:AI coding agent 已經是你 DevOps 流程的一級資產,而不是附加小幫手。

    對不同角色,建議也不同——

    1. AI 工具商(OpenAI / Anthropic / 微軟 等)

    • 預設零信任執行模型
    • 插件/Agent 若要寫檔、跑命令、裝套件,應有細粒度權限 prompt,而不是一鍵授權整個專案。
    • 對高風險操作提供 可審計的執行日誌,預設加密留存,方便事後鑑識。
    • 把安全能力產品化,而不是當白皮書宣傳
    • 內建 惡意依賴檢測、憑證泄漏掃描,而不是交給第三方插件救火。
    • 對應 MCP / Agent 生態,提供官方的 安全測試 sandbox(類似 mcp-probe-agent)與紅隊工具。

    2. 生態平台(npm / GitHub / VS Code 市集)

    • 事件揭露要說人話:像這次 GitHub 只說「違反服務條款」是嚴重失職。遭下架的套件,必須清楚標註「已確認惡意,請假設憑證外洩並執行 incident response」。
    • 加強供應鏈風險信號
    • 對於高權限組織(如 Red Hat、Microsoft)發布的套件變更,提供額外的 異常行為檢測與人工審核
    • 在 IDE / CLI 層面,當套件被標記惡意時,主動警示並提供修復腳本,而不是只在網頁上放通知。

    3. 企業開發與安全團隊

    • 把 AI 開發工具納入 DevSecOps 範圍,而不是當個人玩具
    • 使用哪些 AI 插件、可開哪些權限,寫成政策並落地到 IAM / MDM 管理上。
    • 公司內部專案一律使用 企業控管的 AI 開發環境,禁止在個人亂裝的 VS Code 上操作敏感 repo。
    • 整頓「機器身份」與憑證管理
    • .env、CI variables、Terraform state、K8s yaml 裡的 secrets 全面盤點,導入 專業密鑰管理系統(如 Vault、Secrets Manager 等)
    • 對應這次事件,預設所有受影響開發機器的 token 與 key 都已外洩,執行 rotate + log 監控
    • 訓練團隊用「AI 安全威脅模型」思考
    • 每導入一個新 AI 工具,都問三個問題:
      1. 它可以看到哪些 code / 資料?
      2. 它可以對我的環境做什麼?(讀/寫檔、跑指令、改 CI?)
      3. 一旦被接管,最大爆炸半徑是什麼?

    Claude Code 這次暴露的,不是單一產品的缺陷,而是整個產業對「AI 時代的 DevSecOps」普遍缺位。未來幾年,攻擊者會持續把 AI agent、CI/CD、開源套件、機器憑證串成一條條自動化攻擊鏈——而我們能做的,不是祈禱自己不要被點名,而是現在就把 AI 工具當成高風險系統,納入完整的安全設計、監控與治理。
    否則,AI 幫你省下的開發時間,很可能會全部補課在 incident response 上,而且還不一定補得回來。

    🚀 你現在可以做的事

    • 盤點並審視團隊現用的所有 AI 開發工具與 IDE 插件,標記其可存取的程式碼與憑證範圍
    • 在組織內導入或強化密鑰管理系統,將 .env、CI 變數等敏感資訊集中管控並定期輪替
    • 為團隊安排一場「AI + DevSecOps」安全工作坊,針對 AI agent 權限與供應鏈風險建立共同威脅模型
  • 用 ASSERT 替 AI Agent 寫單元測試

    用 ASSERT 替 AI Agent 寫單元測試

    📌 本文重點

    • ASSERT 用文字規格測「整個 Agent 流程」
    • 可 mock 工具與政策,做可預期的回歸測試
    • 非決定性輸出用「性質斷言」而非比字串

    多數團隊在做 LLM/Agent 開發時,測試痛點很具體:

    • 同一個 prompt 今天過、明天壞,沒有紅綠燈,只能祈禱
    • 多 Agent + 工具調用後,bug 出在「流程」不是「回答內容」,傳統單元測試很難 cover
    • 合規、安全團隊寫了一堆 policy,難以自動驗證 Agent 是否真的遵守

    微軟開源的 ASSERT 直接對準這個痛:用純文字規格定義 Agent 的預期行為,讓你像寫單元測試一樣寫回歸測試,從「這個答案正不正確」提升到「整個 Agent workflow 行為可預期」。


    重點說明

    1. 從「回答對不對」到「行為對不對」

    傳統 LLM 評估多半是:

    • 給一段 input
    • 看 output 文本是否符合 ground truth / rubric

    ASSERT 的思維是:

    測試的是 Task + Workflow:給定初始指令、工具與外部環境,整個 Agent 互動過程是否符合文字規格中的 行為斷言

    它特別適合:

    • 多 Agent 協作(例如 PlannerWorkerReviewer
    • 有工具調用(DB 查詢、API call、程式執行)
    • 有政策/合規約束(不得外洩個資、不得跨區讀資料)

    💡 關鍵: ASSERT 把測試焦點從單次回答,提升到整個任務與 workflow 的行為是否符合規格。


    2. ASSERT 規格長什麼樣:文字規格 + 執行模型 + 斷言機制

    ASSERT 的核心是測試規格檔(YAML / JSON / 純文字皆可包裝),通常包含三部分:

    1. scenario:描述這次要跑的任務
    2. execution:怎麼把這個 scenario 丟給 Agent workflow
    3. assertions:要驗證哪些行為/輸出

    簡化的規格示意:

    name: "refund_flow_basic"
    scenario:
      description: |
        使用者要求退貨,訂單已在可退貨期限內,客服 Bot 應該自動建立退貨申請,並口頭說明流程。
      input:
        user_message: "我想退掉上週買的藍色 T-shirt,訂單號 12345"
    execution:
      entry_point: customer_support_agent.handle_message
      tools:
        - name: get_order
          mock_response:
            id: 12345
            status: "delivered"
            days_since_delivery: 3
            refundable: true
        - name: create_refund
          record_calls: true
    assertions:
      - type: tool_called
        tool: create_refund
        times: 1
        with_args:
          order_id: 12345
      - type: text_includes
        source: final_response
        any:
          - "已為您建立退貨申請"
          - "退貨流程"
      - type: policy
        name: "no_personal_data_leak"
    

    重點:

    • 用自然語言描述 scenario,方便 PM / 合規一起維護
    • 工具可 mock / record,這是把 Agent 當程式測的關鍵
    • assertions 可以混合:工具行為、對話內容、policy 檢查

    💡 關鍵: 把工具層 mock 起來、再對工具呼叫與回應做斷言,是從「prompt 測試」進化到「Agent 測試」的核心步驟。


    3. 怎麼嵌進多 Agent、治理與外部工具

    搭配近期微軟的可攜式政策檔(portable policy files),ASSERT 可以變成:

    • CI 裡的 治理紅綠燈:每次變更 prompt / policy / 模型,都跑一輪 ASSERT spec
    • 多 Agent 系統中的 守門員:有點像 Reddit 討論的 Guardian agents,只是這次是「測試守門員」,不是線上 runtime 監管

    架構上的典型串法:

    • Agent Workflow:Orchestrator(如 Semantic Kernel / 自寫 orchestrator)
    • 工具層
    • 真實工具:DB、REST API、向量庫
    • 測試時由 ASSERT 注入 mock tool adapter固定回應
    • 政策層:NIST / 企業規範 → portable policy 文件 → 在 assertions 中當作 policy assertion 來跑

    這樣做的實際好處:

    • 你可以在不碰線上真環境的情況下,回歸測試整條 Agent 流程
    • 合規團隊寫的 policy,可以直接被 ASSERT 當作測試規範執行,而不只是 PDF 文件

    實作範例

    下面用三個場景示範:客服 Bot、資料 ETL、CI 裡修 Bug Agent。

    1. 客服 Bot:測「流程」而不是只看一句回答

    假設你有一個多 Agent 客服系統:

    • UserAgent:跟使用者聊天
    • OrderAgent:查詢訂單
    • PolicyAgent:檢查回應是否合規

    測試規格可以這樣寫:

    name: "support_refund_policy_safe"
    scenario:
      description: |
        使用者要求退貨,系統應建立退貨、不得暴露完整信用卡號。
      input:
        user_message: "我要退貨,訂單 98765,付費卡號是 4111111111111111"
    execution:
      entry_point: support_orchestrator.run
      tools:
        - name: query_order
          mock_response:
            id: 98765
            refundable: true
        - name: payment_gateway
          mock_response:
            last4: "1111"
    assertions:
      - type: tool_called
        tool: query_order
      - type: tool_not_called
        tool: payment_gateway
        reason: "不應直接打外部金流 API"
      - type: text_not_matches
        source: final_response
        pattern: "[0-9]{16}"
      - type: text_includes
        source: final_response
        any:
          - "已協助您申請退貨"
          - "將退款至原支付方式"
    

    這裡沒有要求「逐字比對」,而是用:

    • text_not_matches 避免輸出完整卡號
    • text_includes any 容忍 LLM 的表達多樣性

    2. 資料 ETL Agent:檢查中間狀態與外部副作用

    想像一個 Agent:

    • S3 抓 CSV
    • 清洗欄位
    • 寫入 Data Warehouse

    用 ASSERT,你可以 mock S3 / DWH,專注檢查 轉換邏輯 是否符合預期。

    name: "etl_normalize_user_table"
    scenario:
      description: "將 user_raw.csv 正規化成 user_clean,email 小寫、移除測試帳號"
      input:
        job_id: "nightly_2024_01_01"
    execution:
      entry_point: etl_agent.run_job
      tools:
        - name: s3_get_object
          mock_response_file: "fixtures/user_raw.csv"
        - name: dwh_insert_rows
          record_calls: true
    assertions:
      - type: tool_called
        tool: dwh_insert_rows
        where:
          table: "user_clean"
      - type: dataset_equals
        source: tool_call[dwh_insert_rows].args.rows
        fixture: "fixtures/expected_user_clean.json"
        ignore_order: true
    

    dataset_equals 是典型對非文字輸出做 assertion 的方式:你比對結構化資料,而不是 LLM 的自然語言回覆。


    3. CI 裡的自動修 Bug Agent:把 Anthropic 安全掃描類場景做成 regression

    參考 Anthropic 的 Project Glasswing/Claude Security:AI 找漏洞、再幫忙修。你也可能有一個 FixBot

    • 接收測試失敗訊息
    • 讀 code
    • 生成 patch
    • 開 PR 或直接 commit

    ASSERT 可以幫你確保 FixBot 至少要做到:

    • 不會刪整個檔案
    • 會更新/新增對應的單元測試
    name: "fixbot_does_not_delete_file"
    scenario:
      description: "FixBot 收到 NullPointerException 應該局部修改,而不是刪檔案"
      input:
        failing_test_output: "NullPointerException at UserService.java:42"
    execution:
      entry_point: fixbot_agent.run
      tools:
        - name: git_diff
          mock_response_file: "fixtures/fixbot_patch.diff"
    assertions:
      - type: diff_policy
        source: tool_call[git_diff].response
        rules:
          - "禁止整檔刪除 (*.java)"
          - "至少有一個新增或修改的測試檔 (*Test.java)"
    

    在 CI 裡,你可以:

    • 每次改 FixBot prompt、模型版本、或 policy,就跑 ASSERT 測試
    • 把 ASSERT 結果送進既有的 觀測系統(如 Application InsightsDatadog),當作一條獨立的 quality signal

    建議與注意事項

    1. 非決定性輸出:不要比字串,要比「性質」

    LLM / Agent 的非決定性,是大家寫測試最怕遇到的坑。建議:

    • 儘量使用 text_includes / text_not_includes / regex / any-of 這種「鬆綁」的 assertion
    • 把重點放在:
    • 是否有該說的關鍵資訊
    • 是否避免不該說的內容(個資、敏感字)

    • 對較長回答,可以用自動 rubric 評分:

    - type: llm_judge
      rubric: |
        檢查回答是否:
        1. 有解釋退貨步驟
        2. 沒有要求多餘敏感資訊
      threshold: 0.7
    

    這裡的 llm_judge 其實是「用另一個 LLM 做 assertion」,要注意模型成本與安全配置。


    2. 固定工具回應:mock / replay 是關鍵

    如果你直接讓測試呼叫真實工具,會踩到:

    • 線上資料變動 → 測試結果漂移
    • 外部 API 限流 / timeout → CI 不穩

    最佳做法:

    • 在 ASSERT 的 execution.tools 段落中,預設開 mock_response / mock_response_file,除非你真的需要打真環境
    • 重要的整合測試可以用 record & replay 模式:第一次記錄真實 tool 回應,以後回歸測試直接重放

    3. 整合 CI/CD 與觀測:讓 Agent 上線也有紅綠燈

    推薦的落地流程:

    1. 建立 baseline spec
    2. 把現有的「用例」整理成 ASSERT 規格(客服 10 條、ETL 5 條、FixBot 5 條)
    3. 這些就是你的 regression suite

    4. 接到 CI pipeline

    5. GitHub Actions / Azure DevOps / GitLab CI 裡加一個步驟:
    - name: Run agent tests
      run: |
        assert-cli run specs/**/*.yaml \
          --report-json reports/assert-report.json \
          --fail-on-error
    
    1. 接到觀測 /治理系統
    2. 把 ASSERT 的結果送到 log / metrics:
      • 每次部署的測試通過率
      • 哪些 spec 常壞(容易暴露 prompt / policy 問題)
    3. 若你有像 ServiceNow / Bedrock 那種 Control Tower / Guardian Agent 架構,可以把 ASSERT 的失敗 spec 直接丟給「治理 Agent」分析與產生修正建議

    4. 不要期待 ASSERT 解決「所有安全問題」

    Nvidia + Microsoft 的研究已經說得很白:AI Agents 不會自己在意安全與可靠性。ASSERT 能做的是:

    • 把你定義好的安全與行為規範自動化檢查
    • 把治療從「事後看 log」提前到「部署前的紅綠燈」

    真正上線時,你仍然需要:

    • 率限制、風險評分、多層防護(runtime policy enforcement)
    • 真實世界的行為監控與 A/B 驗證

    ASSERT 的定位比較像:讓 Agent 開發過程長出一套跟傳統軟體一樣嚴謹的測試文化,從「祈禱不要出事」變成「明確知道自己 cover 哪些情境、沒 cover 哪些」。


    結論:如果你的專案已經走到多 Agent + 工具調用階段,建議盡快挑幾條關鍵 user journey,用 ASSERT + 文字規格 寫出第一批回歸測試。只要第一批 spec 建起來,後面不論換模型、改 prompt、加新工具,都有一條明確的品質與治理基準線可以守住。

    🚀 你現在可以做的事

    • 整理現有 3–10 條關鍵 user journey,轉寫成 ASSERT scenario + execution + assertions 規格檔
    • 在現有 CI(如 GitHub Actions)新增 assert-cli run specs/**/*.yaml 步驟,讓 Agent 變更都有紅綠燈
    • 將工具層接上 mock_response / record & replay,先從一條多 Agent + 工具調用的關鍵流程開始做回歸測試
  • 一行指令組好自己的 AI 代理團隊

    一行指令組好自己的 AI 代理團隊

    📌 本文重點

    • 把每個 Agent 當成可版本控制的 Git repo
    • AGENTS.mdskills/ 拆開角色與能力
    • .agentlas/ 管理記憶與設定,輕鬆切換模型
    • 用一行 CLI 指令生成並維護多代理 AI 團隊

    只用一行指令,你就能建立一個「像程式專案一樣可版本控制」的多代理 AI 團隊,解決長期記憶混亂、每次對話都要重講一遍的痛點。

    參考架構原文(作者在 Reddit 分享):https://www.reddit.com/r/artificial/comments/1twmhya/an_opensource_agent_architecture_that_solves_the/


    核心功能:把 Agent 當成一個 repo,而不是一段 prompt

    這套開源架構的關鍵想法:每個 Agent 是一個 Git 倉庫,而不是存在聊天框裡的一段系統 prompt。

    💡 關鍵: 把 Agent 轉成可版控的 Git repo,可以用熟悉的軟體開發流程(PR、review、版本管理)來調整 AI 行為,而不是每次重寫 prompt。

    1. AGENTS.md:把「人設 + 任務範圍」寫成文件,而不是憑記憶

    AGENTS.md 是這個架構的核心說明書,裡面通常會包含:

    • 每個代理的角色定位
    • 能做什麼(scope) / 不能做什麼(限制)
    • 彼此如何協作(誰丟任務給誰、輸出長什麼樣)

    你可以做的事:

    1. 在任意資料夾新增 AGENTS.md,用這樣的格式寫第一個代理:

    “`markdown
    # Agents

    ## doc_assistant
    – 角色:技術文件整理員
    – 任務:整理長篇文件、產生摘要與目錄
    – 輸出格式:Markdown,必須包含「摘要」「重點條列」「待釐清問題」三段

    ## code_reviewer
    – 角色:程式碼審查員
    – 任務:針對 Pull Request 提出具體修改建議
    – 限制:不直接改動程式,只提出建議與風險說明
    “`

    1. 把這個 repo 推上 Git(GitHub / GitLab),之後團隊改需求只改這份文件。

    2. skills/:把「能力」拆成工具,而不是糊在一大段 prompt 裡

    傳統代理常見問題是:所有指令、規則、流程都揉在一段很長的系統 prompt 中,改一行就怕爆。

    在這個架構裡,每個能力是一個 skill 檔案,放在 skills/ 資料夾,例如:

    • skills/summarize_docs.md:怎麼讀、怎麼切段、輸出格式
    • skills/review_pr.md:審查步驟、要檢查的細項
    • skills/fetch_urls.md:如何抓網頁、處理錯誤

    你可以做的事:

    1. 新增資料夾 skills/,寫一個最小可用的 skill:

    “`markdown
    # summarize_docs

    步驟:
    1. 讀取輸入文件
    2. 把文件拆成 3–7 個主題
    3. 每個主題用 3 行內說清楚

    輸出格式(Markdown):
    – 一句總結
    – 主題列表(子彈點)
    “`

    1. AGENTS.md 裡指定某個 agent 可以使用 summarize_docs 這個 skill。

    3. .agentlas/:把「記憶和設定」存在檔案,而不是模型腦袋

    .agentlas/ 是這套系統自己的設定與記憶資料夾,用來存:

    • 各代理的偏好設定(語氣、輸出格式)
    • 長期記憶索引(不是直接塞進模型,而是存成檔、用時再讀)
    • 已完成任務的 metadata(方便日後追蹤與再訓練)

    這樣的好處是:

    • 不會把所有對話硬塞進「長期記憶」變成噪音
    • 每次執行前可以用規則選擇要載入哪一段內容

    你可以做的事:

    • .agentlas/config.yaml 加上最基本設定(示意):

    yaml
    default_model: claude
    memory:
    enabled: true
    strategy: recent-and-related
    max_items: 50


    適合誰用:3 個具體場景

    1. 文件整理 + 程式碼審查:建立雙代理 pipeline

    目標:

    • 代理 A 整理設計文件
    • 代理 B 以文件為準則,審查 PR 是否符合設計

    你可以怎麼做:

    1. AGENTS.md 定義兩個代理:

    “`markdown
    ## doc_assistant
    – skills: [summarize_docs]

    ## code_reviewer
    – skills: [review_pr]
    – 會先讀 doc_assistant 的輸出再開始審查
    “`

    1. 把專案文件放在 docs/、程式碼在 src/,PR diff 存到 pr/123.patch

    2. 在終端機執行(以架構作者的描述為例):

    bash
    agentlas run doc_assistant "整理 docs/ 裡的文件,產出開發規範摘要"
    agentlas run code_reviewer "根據最新開發規範,審查 pr/123.patch"

    1. 審查邏輯日後有變,就更新 skills/review_pr.md,而不是重新教一次模型。

    2. 資料抓取 + 報表生成:自動化情報小幫手

    目標:

    • 代理 C 負責抓網站、清洗文字
    • 代理 D 讀整理後資料,輸出報表(例如每週競品動態)

    步驟:

    1. skills/fetch_urls.md 寫清楚:怎麼從列表讀網址、輸出 JSON 或 Markdown 表格。

    2. 定義兩個 agent:

    “`markdown
    ## data_collector
    – skills: [fetch_urls]

    ## report_writer
    – skills: [summarize_docs]
    – 輸出格式:週報(含「本週重點」「風險」「下週觀察」)
    “`

    1. 每週只需要:

    bash
    agentlas run data_collector "從 urls.txt 抓內容,輸出到 data/this_week.md"
    agentlas run report_writer "讀 data/this_week.md,生成 weekly_report.md"

    1. 週報模板要改,就改 skills/summarize_docs.md 或另開 skills/weekly_report.md

    3. 多人團隊:把「AI 同事」當成共同維護的 repo

    你可以把這個代理倉庫當成一個共享 AI SOP

    • PM 改 AGENTS.md 描述角色與流程
    • 開發者在 skills/ 補上新的工具使用說明(例如專案腳本、內部 API)
    • 新同事只要 clone 下來,就能直接用同一套 AI 工作流

    實際做法:

    1. 建一個 GitHub repo:company-ai-agents

    2. 定一條規則:

    3. 改 Agent 行為 = 改 AGENTS.md / skills/,必須走 PR 流程

    4. 不再使用的 Agent 要標記 deprecated,避免沒人知道它還在跑

    5. README 裡寫清楚「如何在本機執行 agentlas、如何切換模型」。


    怎麼開始:一行指令 + 接上你習慣的模型

    這個架構的一大好處是:不綁特定模型,可以跑在 Claude Code、Codex、Gemini CLI 等環境。

    💡 關鍵: 架構與模型解耦,讓你能在不改 AGENTS.mdskills/ 的情況下,自由切換到成本更低或能力更強的模型。

    1. 安裝指令(假設已提供 CLI:agentlas

    作者在 Reddit 說明,整套系統可以透過一行安裝:

    pip install agentlas  # 或作者實際提供的套件名稱
    

    接著在任意資料夾初始化:

    agentlas init
    

    這通常會自動產生:

    • AGENTS.md
    • skills/
    • .agentlas/

    你可以做的事:

    • 直接在一個新資料夾跑 agentlas init,把它當成「AI 同事模板專案」。

    2. 接上常見模型:Claude / Codex / Gemini CLI

    根據作者說明,這個架構支援多個 runtime,不鎖在某一家:

    • 想用 Claude:在 .agentlas/config.yaml 設定 runtime: claude_code
    • 想用 OpenAI / Codex:設為 runtime: codex
    • 想用 Gemini CLI:設為 runtime: gemini_cli

    範例設定:

    runtime: claude_code
    model: claude-3-5-sonnet
    api_key_env: ANTHROPIC_API_KEY
    

    你可以做的事:

    1. 先用你現在線上付費的模型(例如 Claude)跑通第一個 agent。

    2. 之後想切換模型,只改 config,不改 AGENTS.mdskills/ 的內容。

    3. 一句描述,讓系統自動幫你生出代理團隊

    根據 Reddit 原文描述,你可以直接用一句話生成整個代理團隊,例如:

    agentlas new "幫我建立一個:整理產品需求文件 + 產出技術任務清單的雙代理工作流"
    

    CLI 會:

    • 生成初版 AGENTS.md(定義 2 個代理)
    • 建好對應的 skills 檔案
    • 幫你填入基本步驟和輸出格式,之後你再微調

    你可以做的事:

    • 先讓工具幫你生一個「80 分」版本,再用 Git 慢慢調整到「95 分」。

    延伸閱讀:為什麼要從「串 prompt」升級到「Agent 專案」?

    如果你還在用 LangChain 式的「串 prompt + 自己管工具 schema」,可以參考這兩篇:

    這套開源架構跟 MCP 的共通點是:都把 Agent 當成一個長期維護的系統,而不是當場臨時寫的 prompt

    差別在於,這裡用「實際檔案 + repo」把行為和記憶拆開,讓你可以用熟悉的 Git 流程維護整套 AI 工作流。

    現在你可以做的最後一件事:

    • 開一個新 repo,跑一次 agentlas init,寫一個最小的 AGENTS.md
    • 選一個你每天真的會用到的小流程(例如「整理會議紀錄」)
    • 把它做成第一個可版本控制的 AI 代理

    之後,每次你覺得「這件事好像可以交給 AI」,就把需求寫進 AGENTS.mdskills/,你自己的多代理 AI 團隊就會越長越完整。

    🚀 你現在可以做的事

    • 在本機建立新資料夾,執行 agentlas init,產出第一版 AGENTS.mdskills/
    • 選一個日常流程(如整理會議紀錄),寫進 AGENTS.md 並建立對應的 skills/xxx.md
    • 建一個 company-ai-agents repo,推上 GitHub,讓團隊透過 PR 共同維護你的 AI 代理 SOP
  • Gemini Spark 實測:讓 AI 幫你24小時跑腿

    Gemini Spark 實測:讓 AI 幫你24小時跑腿

    📌 本文重點

    • Gemini Spark 能在背景執行多步驟任務
    • 可長時間記住上下文並自動接續任務
    • 透過確認機制與權限設計平衡自動化與安全

    用一句話講白:Gemini Spark 就是一個 24/7 在背景幫你跑多步驟任務的 AI 小幫手,不用你一直開著聊天視窗盯著它。

    測試參考:The Verge 的實測與旅遊規劃體驗:Hands-on 1Hands-on 2


    核心功能:跟「傳統聊天機器人」差在哪

    1. 主動在背景幫你跑多步驟任務

    傳統聊天機器人:

    • 你問它才回你
    • 一次只做一小段,關掉網頁就「記憶掰掰」

    Gemini Spark:你給他一個任務,它可以自己在背景跑完多步驟流程,再回來跟你報告。

    實際可以怎麼用:

    • 旅遊規劃 + 比價
      指令示例:

      「幫我規劃 10 月中從台北去東京 5 天家庭旅行,預算中等,要有 2 天親子行程。請:1)找出 3 個機票選項,考慮總飛行時間與轉機;2)比 3 家飯店,近地鐵、評價 4.3 以上;3)做出每日行程表。你可以在背景慢慢查,整理好再一次給我。」

    行動建議:第一次用 Spark 就拿「下一趟旅行」開刀,給它明確條件 + 步驟,讓它自己去跑,體驗差異最大。

    💡 關鍵: Spark 最大差異是能在背景獨立完成多步驟任務,最後一次性給你結果,而不是每一步都要你手動盯著。


    2. 長時間記得你在做什麼,自己幫你接續

    Spark 的另一個重點,是上下文可以拉得比較長,不只是當下這一輪對話。

    它會記得:

    • 你最近在規劃什麼(例如那趟東京行)
    • 你之前給過的偏好(例如「我不想一早就排景點」)
    • 它自己尚未完成的任務

    你可以這樣用:

    「接續之前的東京行程,幫我加上 1 天只逛博物館和書店的行程,然後把所有訂票與景點的連結整理成一封 email 草稿給我。」

    Spark 不用你重新貼所有內容,它自己接上前一次任務,把新要求整合進去。

    行動建議:遇到「要改舊計畫」時,不要重講一遍,直接說「接續上次 XX 任務,幫我多做……」,讓 Spark 幫你維護脈絡。


    3. 重要步驟前會停下來問你

    The Verge 的實測中提到:Spark 在敏感動作前會跳出確認,而不是默默幫你亂動。

    常見的確認點會包括:

    • 寄出 email
    • 變更行事曆
    • 存取新服務或帳號

    使用方式:

    • 把 Spark 想像成「實習生」:
    • 你可以說:「先幫我草擬,不要真的送出。」
    • 或:「這類會議邀請之後可以直接幫我接受。」

    行動建議:第一次設定時,刻意跟它說清楚:

    「所有會寄出去給別人的內容,一律先給我草稿,不要自動送。」

    這樣你就能享受自動化,又不會被它「幫過頭」。


    適合誰用?3 個具體場景

    1. 旅行規劃:從「列點子」變成「整包交辦」

    The Verge 的旅行實測裡,作者說 Spark 是第一個讓他覺得旅遊規劃真的可以交給 AI 的工具,因為它會:

    • 不只列景點,還會看交通、預約限制、開放時間
    • 幫你平衡:太緊湊 / 太鬆、戶外 / 室內、購物 / 觀光

    你可以照抄這個 workflow:

    任務目標:幫我規劃 4 天 3 夜的首爾行程,預算偏省,重點是美食跟咖啡廳。
    限制:
    - 不要一早 9 點前的行程
    - 每天最多排 2 個需要事先訂位的地方
    - 交通以地鐵為主
    請:
    1. 先問我出發時間與大概預算
    2. 自己在背景查資料,整理成表格(時間 / 地點 / 交通 / 必點餐點或特色)
    3. 把所有需要訂位的頁面連結整理,獨立列出清單給我。
    

    行動建議:把旅遊需求拆成「目標+限制+要輸出的格式」,這樣 Spark 做出來的東西比較接近可以直接用的版本。


    2. 跨時區會議統整:讓 Spark 當你的時區翻譯機

    如果你常跟美國、歐洲同事開會,Spark 可以做的事情包括:

    • 幫你把一串 email 往來整理成待辦清單
    • 自動換算時區,找幾個可行的會議時間
    • 產生英文 / 中文雙語的會議邀請草稿

    指令示例:

    「我等等會轉寄給你一整串關於新專案的 email。請幫我:1)整理每個人各自承諾要做的事;2)找出下週台北時間 9:00–11:00、倫敦時間 9:00–18:00 之間都可行的 3 個時間;3)根據這串內容寫一封英文會議邀請草稿給團隊。」

    行動建議:

    • 寫指令時,先描述要的結果,再說你會提供什麼資料(例如會轉寄 email)
    • 用「台北時間」「倫敦時間」等明確描述,避免只寫「我早上」。

    3. 日常代辦追蹤:把「總是忘記回信」交給它

    Spark 比較實用的一點是:它可以「掛在那裡幫你盯」,而不是你想到才去查。

    你可以把它當作:

    • Email 回覆提醒
    • 文件閱讀與摘要助手
    • 日常待辦整理員

    範例指令:

    「從今天開始,幫我追蹤 Gmail 裡標成星號的信:
    1)每天下午 5 點,整理一份『還沒回覆的星號信』列表給我,包含:寄件人、主題、收到時間、你建議的 1 句回覆重點;
    2)對於你有把握的簡單信件,可以先幫我產生回覆草稿。」

    行動建議:

    • 先選「一個小範圍」讓 Spark 幫你追(例如星號信),不要一開始就全信箱開放。
    • 每週檢查一次它生成的草稿,你會越來越知道怎麼跟它講需求。

    優點與限制:實測感受整理

    優點

    • 真的可以放著不管:The Verge 的體驗中,Spark 在你離線時也會繼續查資料、比對選項,最後給你整理好的結果。
    • 願意多問幾句確認:不像很多 Agent 一次衝到底,Spark 會分段跟你確認,讓你改方向。
    • 整合 Google 服務有優勢:像 Gmail、Calendar、Docs 等,對已在 Google 生態系的人尤其方便。

    限制與風險

    • 速度不一定快:多步驟任務,等 5–15 分鐘甚至更久是常態,不適合「立刻要答案」。
    • 隱私顧慮:要讓它看 Gmail、行事曆,等於多了一個能讀你資料的「人」。The Verge 也特別提醒了這點。
    • 目前功能和價格仍在調整中:不同地區可能有功能差異,也可能需要訂閱 Gemini 付費方案才用得到完整版。

    行動建議:

    • 先從「不那麼敏感」的任務測試(旅行規劃、公開資訊整理),習慣它的行為再逐步開放更多權限。

    💡 關鍵: Spark 適合放在「不急但複雜」的任務上,接受它可能要 5–15 分鐘換來的是你少了大量瑣事。


    怎麼開始:開通、免費用到哪裡、權限怎麼設

    以一般個人使用者為例,實際介面可能會隨時間更新,建議以官方說明為準:https://gemini.google/overview/agent/spark

    1. 快速開通與入口

    大致流程會長這樣:

    1. 登入 Google 帳號(建議用你平常收信、排行程那個帳號)。
    2. 前往 Gemini 頁面,找到 Spark 開關或切換(Chat ↔ Spark)
    3. 按提示完成初始設定:
    4. 選擇語言、地區
    5. 勾選同意條款
    6. 決定是否要讓它讀 Gmail / Calendar 等

    行動建議:初次設定時,能跳過的權限先跳過,等確定要用再打開。


    2. 哪裡能免費用到?

    Google 目前的作法通常是:

    • 基本 Gemini 功能提供免費層級
    • 進階功能或高用量則綁定 Gemini Advanced / Google One AI Premium 類型訂閱

    Spark 很可能會:

    • 在部分地區提供測試或限量免費
    • 或綁在付費方案裡,讓你有更高配額與完整 Agent 能力

    行動建議:

    • 先確認你所在的地區是否開放 Spark,並在 Gemini 介面查看是否需要升級方案。
    • 如果有試用期,先集中在那段時間安排幾個「真實任務」給它做,評估值不值得付費。

    3. 權限與通知:好用但不要被吵

    要兼顧方便與不打擾,可以這樣設:

    (1)資料權限:

    • 先只開 Gmail / Calendar 的「讀取」權限,不給「全自動修改」。
    • 明確跟它說:

      「除非我說可以,否則不要自動變更行事曆或寄出任何 email。」

    (2)通知策略:

    • 手機端:
    • 保留「任務完成摘要」通知
    • 關閉「每一步都提醒」的通知
    • 你可以設一個固定時間:

      「每天晚上 9 點幫我整理今天你做了什麼、一件概要就好。」

    行動建議:把 Spark 當成「一天回報一兩次的助理」,而不是 Slack 機器人那樣每十分鐘跳出來吵你。

    💡 關鍵: 先給 Spark 讀取多於寫入的權限,並限制通知頻率,可以在安全邊界內體驗自動化。


    總結:怎麼寫出 Spark 用得懂、又做得好的指令?

    可以記這個模板:

    目標 + 限制條件 + 步驟 / 輸出格式 + 背景運作說明

    範例:

    「目標:整理我這週所有會議記錄,變成一份 1 頁的執行摘要。
    限制:只用我提供的文件,不要自己亂查資料。
    步驟:1)讀完我丟給你的 5 份會議記錄;2)列出所有待辦與負責人;3)寫一段 200 字內的總結。
    背景:你可以在背景慢慢做,完成後一次給我,不用中途打擾。」

    從一兩個小任務開始,習慣這種「把事交給 AI 跑完再回報」的工作方式,你會很快感受到:Spark 的價值不在於多會聊天,而是在於很多你不想做、但又非得有人做的細碎工作,它可以默默幫你扛掉。

    🚀 你現在可以做的事

    • 挑一個即將到來的旅程,照文中的「目標+限制+格式」模板寫一個 Spark 指令
    • 從 Gmail 星號信中選一小段範圍,讓 Spark 嘗試幫你追蹤與產生回覆草稿
    • 依照文中的權限與通知建議,在 Gemini 介面中完成 Spark 的初始設定與權限調整
  • AI 讓名校生變笨?是教育先壞掉

    AI 讓名校生變笨?是教育先壞掉

    📌 本文重點

    • AI 放大了教育評量失真,而非讓學生變笨
    • 現行作業制度在量 AI 能力,卻誤讀成學生實力
    • AI 時代需要重寫課綱與評量,而非封殺工具

    AI 不會自動把名校學生變笨,真正壞掉的是還停在 20 世紀的教育系統:嘴上說禁止 AI,實務上又默許大家用它寫作業,最後只剩外包答案的流程,沒有任何可觀察的學習。我們不是在培養會思考的人,而是在訓練一群「會按指令叫 AI 解題」的半自動操作員。


    一、當 AI 被當成「小抄」,整個課程就變成假的

    加州大學柏克萊最新的計算機課程現場,是這個矛盾的最佳縮影。根據《Daily Californian》報導,CS 課程中掛科比例飆升,同時老師觀察到學生的數學推導與基礎能力明顯下滑。作業分數看起來還行,但一上考場、離開 ChatGPT,很多人連基本微積分與機率都寫不出來。

    💡 關鍵: 掛科比例飆升卻作業成績不錯,凸顯的是評量在量 AI 能力,而非學生真實能力。

    這不是「AI 害他們變笨」,而是整個評量設計預設學生「不會」用 AI,現實卻是每個人都在用

    • 作業:系統上傳 PDF,學生下指令給模型:「幫我寫出解答與程式碼」。
    • 老師:依然以「個人作答」來解讀作業成績,當成能力指標。
    • 真實:作業只在測試「學生會不會下 prompt」、有沒有抓到 AI 出錯的地方,而不是他到底會不會那個觀念。

    結果就是:整個學習流程變成大型角色扮演遊戲——老師裝作作業反映能力、學生裝作是自己寫的,雙方都心知肚明不是這樣。

    於是:

    • 會用工具,但不會解題:學生以為「會問 AI」就等於「學會了」,其實只是暫時外包了思考。
    • 考試與作業斷裂:紙筆考試變成殘酷現實檢測——一旦離線,所有「作業能力」瞬間蒸發。
    • 教學回饋失真:老師拿到的是 AI 混合輸出,而不是學生真實程度,無法調整教學。

    在這種架構下,你不需要陰謀論就能解釋「名校生變笨」:我們在用錯誤的評量方法,量 AI 的能力,卻把結果誤解成學生的能力。


    二、「AI 原生工程師」的產業隱形風險:Bug 跟安全事故會放大

    如果這只是學校內部的成績通膨與掛科問題,還算是校園內部的自我矛盾。但 CS 學生畢業後拿著 AI 工具走進產業,就變成系統層級的風險擴散器

    想像一個典型場景:

    • 初級工程師面對支撐金融、醫療或關鍵基礎設施的系統。
    • Copilot / ChatGPT 直接產生大量程式碼與測試。
    • 他「能看懂」這些程式碼,但缺乏紮實的數學與系統思維,無法判斷:
    • 演算法是否在極端情況下爆炸?
    • 隨便一個 off-by-one、邊界條件,會不會讓交易錯帳?
    • AI 生成的 SQL 查詢是否存在注入與權限繞過?

    工具越強、基礎越弱,錯誤的規模就越大。

    在柏克萊的案例裡,教授們看到的是:

    • 數學能力下滑:學生越來越不能自己推導,而是直接問 AI 要公式、要證明。
    • 程式理解力不足:能交出程式碼,卻說不清楚為什麼這樣寫、時間/空間複雜度是什麼。

    把這個趨勢平移到產業端,會發生幾件事:

    1. 測不出的 Bug 變多
    2. 單元測試可能也是 AI 生成,學生只是在「生成程式碼 → 生成測試 → 兩者都看起來綠燈」。
    3. 但測試覆蓋不到的邊界與安全議題,會混著 AI 產生的錯誤一起上線。

    4. 安全事故外部化給整個社會

    5. 資安漏洞、模型注入、資料洩漏,都是後果。
    6. 成本不是開發者自己承擔,而是用戶、醫院、金融系統,甚至公共基礎設施。

    7. 整個團隊的知識塔基鬆動

    8. 中高階工程師再強,也很難在 code review 中完全補上「整個 junior 世代不會算、不會推、不會證」的缺口。

    💡 關鍵: AI 放大的是基礎能力的缺口,一旦進入金融、醫療等系統,錯誤就會變成社會級風險。

    AI 沒有變壞,它只是把「基礎能力不足」這件事放大到生產等級。現在把責任推給學生用 AI,只是讓大家暫時不用面對真正的問題:我們根本沒有定義「AI 時代工程師的最低安全素養」是什麼。


    三、不是封殺 AI,而是重寫課程與評量邏輯

    在加州各大學之間,《New York Times》整理出一個有趣對比:有的系所嚴禁 AI、有的積極導入,有的模糊帶過,只靠「榮譽制度」。但不管哪一派,如果課程與評量架構沒改,結局都一樣——要嘛變成無法落實的禁令,要嘛變成集體默契的作弊。

    如果我們承認學生已經是 AI 原生世代,那教育設計就要反過來,預設 AI 是「標配」,然後重新界定:在這種環境下,什麼叫「會」?

    我認為至少要做到三件事:

    1. 把 AI 納入課程,而不是附註小字
    2. 明確教:如何驗證 AI 的答案、如何找錯、如何設計 prompt 才能暴露模型盲點。
    3. 作業可以允許使用 AI,但必須要求附上「對話紀錄」「錯誤分析」,讓老師看得到學生怎麼跟工具互動。

    4. 評量改成:看得見過程,而不是只收答案

    5. 大幅提高 口試、白板推導、現場實作 的比重:
      • 你可以先用 AI 準備,但在口試中要能在白板上重新推一遍概念與步驟。
    6. 期末作業改用 專案制與 code review

      • 老師或助教要求學生講解關鍵模組設計邏輯,甚至當場修改需求,看是不是能真正理解。
    7. 把「理解」拆成可驗證的學習目標
      不再用「會寫這個作業」當作「會這門課」的代稱,而是拆成具體能力:

    8. 能不用 AI,手寫出核心演算法與複雜度分析。

    9. 能解釋 AI 給出的解答中,哪一步是錯的、為什麼。
    10. 能從需求出發自己設計 API / schema,而不是只讓 AI 補上程式碼。

    💡 關鍵: 不禁止 AI,而是讓 AI 變成檢驗「你是不是真的懂」的工具,而非幫你假裝懂的遮羞布。

    關鍵不在封殺 AI,而是讓 AI 成為「檢查你是不是真的懂」的放大鏡,而不是「幫你假裝你懂」的偽裝器。


    對開發者與學生的行動建議:把 AI 當「放大鏡」,而不是遮羞布

    對開發者與學生來說,真正的風險不是「用 AI 會被抓作弊」,而是你以為自己學會了,實際上只學會按按鈕。更現實一點說:產業最後會用「能否在白板、在事故現場自己撐住」來區分誰值錢。

    幾個具體行動建議:

    • 刻意練習「不用 AI」的時間:每週留一段固定時段,只靠紙筆或本地 IDE 解題,確認自己還有獨立思考與推導能力。
    • 用 AI 之前,先寫出自己的解釋:再拿去對比模型答案,強迫自己暴露盲點,把 AI 當成對照組,而不是主治醫師。
    • 要求學校給出清楚的 AI 使用規範與新版評量:身為學生可以反向施壓——要求更多口試、專案講解,而不是只用會被 AI 碾壓的作業制。

    給老師與系所則只有一句話:如果你還在用不能反映真實能力的作業與考試,就別怪學生用 AI「作弊」,因為整個制度本身就在作弊。現在該被改寫的不是學生,而是課綱、作業設計與評量標準。

    當我們願意正視這點,「AI 讓名校學生變笨」這個命題,會改寫成更貼近真相的版本:在一個壞掉的教育系統裡,AI 只是加速暴露了我們早就不再教真正能力這件事。

    🚀 你現在可以做的事

    • 每週安排一段「全程不用 AI」的練習時段,完成一題演算法或系統設計題並自我檢討
    • 把自己最近一次用 AI 解題的對話記錄整理出來,標註哪裡錯、哪裡不懂,當成學習筆記
    • 如果你是學生,主動向系上或老師提議加入口試、專案講解或 code review 式評量,讓成績更貼近真實能力
  • 把 Agent 關進沙盒:SaaS 實戰骨架

    把 Agent 關進沙盒:SaaS 實戰骨架

    📌 本文重點

    • Agent 要被關在嚴格 sandbox 與工具層裡
    • 記憶要分層,記流程不記祕密資訊
    • 用事件流與回放讓 Agent 可觀察、可控

    在 SaaS 裡塞一個 AI Agent,難點不是「會不會寫 prompt」,而是如何讓它在有限權限下,持久又安全地幫你自動化真實工作流程。沒 sandbox、沒記憶設計的 Agent,只適合做 demo:一旦上線,就會變成「拿著 admin key 的高智商腳本小孩」。

    這篇從 AI Agent Sandboxing for SaaSAI Agent Memory for SaaS 的思路出發,拆成你實作時一定會遇到的四個骨架:

    1. 權限與邊界:sandbox + 能力分級 + 審計/回放
    2. 記憶設計:短期 vs 長期組織記憶 + 何時忘記
    3. 資料模型與基礎設施:event sourcing + 任務關聯 + RAG 整合
    4. 開票/CRM 更新 Agent 實作雛形與踩坑清單

    重點說明


    1. Sandboxing:把 Agent 關在「業務安全區」裡

    目標:讓 Agent 有用,但永遠拿不到 root 权限

    💡 關鍵: 先設計權限邊界,再讓 Agent 介入,才能避免它變成拿著 admin key 的「高智商腳本小孩」。

    核心做法:

    1. 能力分級(建議至少三層)
    2. read-only:只能查詢 / 檢索(查訂單、查發票、查 CRM)
    3. scoped-write:限制在特定資源 + 明確條件(只能建立 invoice 草稿、只能改自己 owner 的 lead)
    4. admin-like:極少數動作(例如退款、刪除發票),預設關閉,需人工審批或 feature flag

    5. 工具層 sandbox(而非讓 LLM 直呼 DB / 外部 API)

    6. 對 LLM 暴露的是受控工具 API,例如:AgentTools.create_invoice_draft,而不是 POST /invoices 原始 API
    7. 工具層做 參數校驗、權限檢查、rate limit、審計 log

    8. 可回放測試 / 審計 log

    9. 每次 Agent 決策,記錄:
      • tool_call(名稱 + 參數)
      • 結果摘要(避免 log 泄露敏感資料)
      • 關聯 user_id / org_id / conversation_id / task_id
    10. 可以在 staging 用「回放同一串 event」重跑一遍,驗證升級後模型或 prompt 不會炸庫。

    2. 記憶設計:記住工作流,不記住祕密

    實務上可以拆成三層記憶:

    1. 短期上下文(working memory)
    2. 單次任務/對話的上下文,存在 conversation_state 或臨時向量 store
    3. 存活時間:幾分鐘到幾小時,任務結束後視情況壓縮成事件摘要

    4. 長期組織記憶(org memory)

    5. 公司政策、常見流程、產品價目表、範本回覆
    6. 存在 RAG + metadata(org_id, version, valid_from, valid_to)
    7. 修改政策時不覆蓋舊文,而是加新版本 + 標記舊版過期

    8. 個人偏好 / 使用者設定

    9. 比如:某 Sales 喜歡用英文回 mail、預設稅率 5%
    10. 存在 user_preferences 表或 key-value store,與 org policy 分離

    「何時該忘?」幾個實務策略:

    • 預設不把 user prompt 原文存成長期記憶,只保存「必要摘要 + 事件」,例如:
    • ❌ 存「請幫我開票給 XX 公司,統編 12345678,地址是…」
    • ✅ 存「2025-06-01 開立發票 INV-001, buyer=XX 公司, amount=10,000, owner=user_123」
    • retention policy
    • 短期記憶(對話內容)保留 30 天,之後只留聚合統計 / 匿名化摘要
    • 向量記憶可定期跑 job:找到稠密但從未被命中的 embedding → 刪除或降精度存儲

    💡 關鍵: 記憶層只存「去敏的業務事件」,既符合隱私需求,又保留足夠資訊讓 Agent 持續學習與優化。


    3. 資料模型與基礎設施:把 Agent 行為變成事件流

    為了可觀察、可回放,建議用輕量的 event sourcing 思路

    • agent_sessions:一次使用者啟動 Agent 的 session
    • agent_tasks:對應一個業務任務(例如「為 ticket#123 建立 invoice」)
    • agent_events:細顆粒度事件(tool call、LLM decision、error)

    搭配:

    • conversation_id:對話 thread ID(多輪聊天)
    • task_id:業務任務 ID(可以跨多個對話)
    • org_id / user_id:用來分庫、分 tenant、做權限控制

    與現有 DB/RAG 的整合方式

    • 業務資料留在原本的 transactional DB
    • Agent 不直接 query DB,而是走你包好的 BusinessAPI 或工具層 microservice
    • 長期記憶 / 知識庫:用 RAG(可參考 jamwithai/production-agentic-rag-course 的 patterns),但:
    • 純「查詢」→ read-only 工具
    • 「根據 RAG 結果改資料」→ 一律走 scoped-write 工具並寫 event log

    💡 關鍵: 把 Agent 所有操作轉成事件流,才能事後追蹤、審計與在 staging 做「重放實驗」。


    實作範例:開票/CRM 更新 Agent 雛形

    下面用 pseudo code 展示一個典型「讀 ticket → 建發票草稿 → 更新 CRM」的 sandbox + memory schema。


    1. 工具層 sandbox 定義

    // 工具層:只暴露給 Agent 這些「安全操作」
    
    interface AgentContext {
      orgId: string;
      userId: string;
      role: 'read_only' | 'scoped_write' | 'admin';
      taskId: string;
    }
    
    class AgentTools {
      constructor(private ctx: AgentContext) {}
    
      // 讀取支援 ticket(read-only)
      async getSupportTicket(ticketId: string) {
        assertRole(['read_only', 'scoped_write', 'admin'], this.ctx.role);
        const ticket = await TicketService.getById(this.ctx.orgId, ticketId);
        await AgentAudit.log({
          type: 'tool_call',
          tool: 'getSupportTicket',
          ctx: this.ctx,
          input: { ticketId },
          outputSummary: { status: ticket.status }, // 避免 log 敏感內容
        });
        return ticket;
      }
    
      // 建立發票「草稿」而非正式發票(scoped-write)
      async createInvoiceDraft(payload: {
        ticketId: string;
        customerId: string;
        amount: number;
        currency: string;
      }) {
        assertRole(['scoped_write', 'admin'], this.ctx.role);
    
        // 額外安全檢查:金額上限、防重複開票
        if (payload.amount > 10000) throw new Error('amount_exceeds_limit');
        await BusinessRules.ensureNoDuplicateDraft(
          this.ctx.orgId,
          payload.ticketId,
        );
    
        const invoice = await InvoiceService.createDraft({
          ...payload,
          orgId: this.ctx.orgId,
          createdBy: this.ctx.userId,
        });
    
        await AgentAudit.log({
          type: 'tool_call',
          tool: 'createInvoiceDraft',
          ctx: this.ctx,
          input: payload,
          outputSummary: { invoiceId: invoice.id },
        });
    
        return invoice;
      }
    
      // 更新 CRM:只允許更新部分欄位
      async updateCrmLead(leadId: string, patch: { status?: string }) {
        assertRole(['scoped_write', 'admin'], this.ctx.role);
        const safePatch = pick(patch, ['status']); // 避免 Agent 任意改 email 等敏感欄位
    
        const lead = await CrmService.updateLead(this.ctx.orgId, leadId, safePatch);
        await AgentAudit.log({
          type: 'tool_call',
          tool: 'updateCrmLead',
          ctx: this.ctx,
          input: { leadId, patch: safePatch },
          outputSummary: { status: lead.status },
        });
    
        return lead;
      }
    }
    

    2. Agent 任務流程(記憶與事件流)

    // 啟動一個 Agent 任務:從 ticket 開票 + 更新 CRM
    
    async function runInvoiceAgent(params: {
      orgId: string;
      userId: string;
      ticketId: string;
    }) {
      const taskId = await AgentTaskStore.create({
        orgId: params.orgId,
        userId: params.userId,
        type: 'INVOICE_FROM_TICKET',
        status: 'running',
      });
    
      const ctx: AgentContext = {
        orgId: params.orgId,
        userId: params.userId,
        role: 'scoped_write',
        taskId,
      };
    
      const tools = new AgentTools(ctx);
    
      // event sourcing:每一步都寫入 agent_events
      await AgentEventStore.append({
        taskId,
        type: 'task_started',
        payload: { ticketId: params.ticketId },
      });
    
      // 1) LLM 讀 ticket + 商業規則摘要(短期記憶)
      const ticket = await tools.getSupportTicket(params.ticketId);
    
      const policyDocs = await OrgPolicyRAG.search({
        orgId: params.orgId,
        query: '開立發票規則',
        topK: 3,
      });
    
      const llmInput = buildPrompt({ ticket, policyDocs });
    
      const llmDecision = await LLM.chatCompletion({
        model: 'gpt-4.1-mini',
        tools: [
          { name: 'createInvoiceDraft', schema: InvoiceDraftSchema },
          { name: 'updateCrmLead', schema: CrmPatchSchema },
        ],
        messages: [
          { role: 'system', content: SYSTEM_PROMPT },
          { role: 'user', content: llmInput },
        ],
      });
    
      await AgentEventStore.append({
        taskId,
        type: 'llm_decision',
        payload: safeDecisionLog(llmDecision),
      });
    
      // 2) 根據 LLM 決策安全執行工具
      const result = await ToolExecutor.run(llmDecision, tools);
    
      // 3) 將任務摘要存入長期「事件記憶」(去敏 + 可查詢)
      await AgentMemoryStore.saveTaskSummary({
        orgId: params.orgId,
        taskId,
        type: 'INVOICE_TASK_SUMMARY',
        summary: buildTaskSummary({ ticket, result }),
        // 設定過期策略:例如 180 天後自動清除
        expiresAt: dayjs().add(180, 'day').toDate(),
      });
    
      await AgentTaskStore.update(taskId, { status: 'completed' });
    
      return result;
    }
    

    3. Memory Schema(簡化版)

    -- 任務層級摘要,作為長期「安全記憶」
    CREATE TABLE agent_task_memory (
      id            BIGSERIAL PRIMARY KEY,
      org_id        VARCHAR(64) NOT NULL,
      task_id       VARCHAR(64) NOT NULL,
      type          VARCHAR(64) NOT NULL,
      summary_json  JSONB NOT NULL,   -- 已去識別 / 去敏的摘要
      created_at    TIMESTAMP NOT NULL DEFAULT now(),
      expires_at    TIMESTAMP NULL,
      INDEX idx_org_type_created (org_id, type, created_at)
    );
    
    -- 事件流,用於回放與審計
    CREATE TABLE agent_events (
      id            BIGSERIAL PRIMARY KEY,
      org_id        VARCHAR(64) NOT NULL,
      task_id       VARCHAR(64) NOT NULL,
      event_type    VARCHAR(64) NOT NULL, -- tool_call / llm_decision / error ...
      payload       JSONB NOT NULL,
      created_at    TIMESTAMP NOT NULL DEFAULT now(),
      INDEX idx_task_created (task_id, created_at)
    );
    

    建議與注意事項


    1. 常見踩坑

    1. 讓 Agent 拿到全庫 query 能力
    2. 例如暴露 run_sql(query) 這種工具 → 等於給 LLM 一把 DB root key
    3. 建議:只提供具體業務操作工具get_invoice_by_id / create_invoice_draft),不提供自由 SQL / 任意 filter

    4. 把 user prompt 直接當長期記憶存

    5. 風險:
      • 敏感資訊(住址、email、信用卡後四碼)被永久 index
      • 未來 RAG 檢索時把別人對話調出來
    6. 解法:只存事件摘要(例如:某天完成一筆開票),prompt 原文只能在短期 log / 加密 log 中保留,並設明確 retention

    7. 沒有 rollback / dry-run 機制

    8. Demo 時一切完美,上線後改個 prompt 就開始亂開票
    9. 建議:

      • 預設跑在 dry-run / shadow mode:只寫 event,不真正寫 DB,由人審批
      • 對高風險操作(刪除、退款)設計 雙階段提交流程:Agent 產生建議 → 人按下「Apply」才真正執行
    10. 把政策寫死在 prompt

    11. 政策一變,所有 Agent 行為都過期,但你不知道是哪個版本出的錯
    12. 建議:政策存 RAG / config store,prompt 只說「請依據最新的 org policy 回應」,並在 log 記錄使用的 policy_version_id

    2. 實戰建議(可直接用在專案裡)

    1. 先只讓 Agent 操作「草稿」資源
    2. 如範例:createInvoiceDraft,由人類在 UI 裡確認後再正式開票
    3. 這個模式在導入初期可以快速建立信任,也方便收集訓練資料

    4. 每個 Agent 任務都要有 task_id + org_id + user_id

    5. 方便之後做:

      • per-org 行為分析
      • 問題排查:「這張錯誤發票是哪個 Agent 任務生成的?」
      • 回放測試:「重跑這個 task,看新版模型會不會做出不一樣決策」
    6. 記憶層要先畫邊界,再決定用什麼向量庫

    7. 問自己三件事:
      • 哪些東西必須記一輩子(例如:已開立的發票、客戶同意條款紀錄)
      • 哪些只需要短期記憶(例如:這週正在處理的 ticket 狀態)
      • 哪些不該記(例如:一次性敏感資訊)
    8. 然後才決定:哪些用 transactional DB、哪些進向量庫、哪些只當 log 放 object storage + TTL

    9. 用事件流做 A/B 測試與回放

    10. 有了 agent_events 後,可以:
      • 在 staging 重播同一串事件,切不同模型 / prompt
      • 比較產生的 tool call 是否差異過大
      • 逐步從 demo 模式 → 實際寫入模式

    整體來說,把 Agent 裝進 SaaS,不是再多寫幾個工具函式,而是要把它當「受控的自動化子系統」來設計:

    • 用 sandbox 做權限邊界
    • 用多層記憶管理上下文與風險
    • 用事件流與回放讓它可觀察、可演進、可 debug

    一旦這套骨架打好,你的 SaaS 就可以從「有個聊天盒子」升級成「能自己處理開票、更新 CRM、遵守政策的半自動業務夥伴」。


    🚀 你現在可以做的事

    • 在現有 SaaS 服務中先列出所有「只允許草稿」的業務操作,設計對應的 scoped_write 工具層 API
    • 為你的 Agent 任務加上 task_id / org_id / user_idagent_events 表,開始記錄並觀察事件流
    • 審視目前有哪些資料被長期保存為向量或日誌,整理一份「應改成事件摘要、需設定 TTL」的清單並排入技術債處理計畫
  • 用 Claude+n8n 打造會自己跑的 AI 工作流

    用 Claude+n8n 打造會自己跑的 AI 工作流

    📌 本文重點

    • 用 Claude /goal/loop 自動化長流程任務
    • 用 n8n 串 API、Email、DB 打造完整工作流
    • 一定要保留「人工審核閘」避免 AI 誤發內容

    用 Claude 搭配 n8n,你可以把「每週拉數據、寫報告、發信或更新網站」這種例行公事交給 AI 自動跑完,只在最後一關人工點頭即可。


    核心功能:這套組合幫你做什麼?

    1. Claude 長任務指令:/goal/loop 讓 AI 自己把事做完

    先理解 Claude 的幾個關鍵指令(在 Claude Code 或支援指令的環境使用):

    • /goal:一次講清楚最終目標,讓 AI 自己拆步驟、規劃流程、按順序執行。
    • /loop:針對一批項目重複跑同一種處理,例如對 50 個關鍵字依序寫摘要、產出標題。
    • /batch:一次處理多筆輸入,適合批次內容生成或批次分析。

    可參考這篇詳細說明:Claude Code: The Autonomous Commands…

    你可以馬上做的事:

    • 在 Claude 裡建一個新專案,貼上你常做的流程(例如「每週 SEO 報表」),試著用這個提示:

    /goal
    目標:我想把「每週 SEO 報表」變成一個自動流程。
    請你:
    1. 問我目前是怎麼做(包含用到哪些工具、檔案格式)
    2. 拆成清楚步驟,分出「AI 可以做」和「一定要人工做」
    3. 用適合 /loop 或 /batch 的地方標註出來


    2. n8n:把 API、Email、資料庫都接在一起

    n8n 是一個開源自動化工具(像是開源版 Zapier),負責把「資料源 → Claude → 發送結果」串起來。

    常用節點大概就是:

    • Trigger:時間觸發(Cron),例如每週一早上 9 點跑一次。
    • HTTP Request / API 節點:去叫 Google Search Console、SEO 工具、你的內部系統。
    • Claude / OpenAI 類節點:把資料丟給 Claude 分析或生成內容。
    • Email / Slack / Notion 節點:把結果送到你或客戶手上。

    你可以馬上做的事:

    • 註冊 n8n(雲端版)或用 Docker 在本機跑:https://n8n.io
    • 開一個最簡單 workflow:
    • Cron → HTTP Request → Email
    • HTTP Request 隨便先叫一個公開 API(例如 Github trending),收回結果後,用 Email 節點寄給自己,確認「API → 自己」這條管線沒問題。

    3. 人工審核閘:一定要保留的「最後一關」

    這一步是整篇文章最重要的重點。

    在一篇實戰分享裡,作者用 Claude + n8n + SE Ranking API 自動產出客戶 SEO 週報,為了省 token 做了一個「優化」:當某些欄位沒資料時,讓 Claude 自己補。結果 Claude 開始用其他客戶的品牌數據去補空缺,還一臉正常,差點寄給一整串客戶,最後是靠人工審核節點擋住了災難(原文連結)。

    💡 關鍵: 再「聰明」的自動化流程也可能補錯資料,最後一關一定要由人審核才能避免嚴重誤發。

    結論:千萬不要把最後的人審自動化掉。

    你可以馬上做的事:

    • 在 n8n 裡加一個「人審」節點(可以是):
    • 把報告先丟到 Slack 私訊給你,附兩個按鈕:Approve / Reject
    • 或者寄到你 Email,只有你手動轉寄給客戶才算「送出」。
    • 規則很簡單:
    • AI 可以草擬與整理
    • 你來決定要不要「正式送出」

    實戰案例:自動 SEO 週報(含人審)

    參考 Reddit 上「Claude is my entire SEO team」的做法(原文),我們做一個最小可行版本:

    流程圖(文字版)

    1. Cron 觸發:每週一 09:00。
    2. 抓數據:n8n 呼叫 Google Search Console / SE Ranking / GA4 API。
    3. 整理成 JSON/CSV:在 n8n 做基本清洗、欄位統一。
    4. 丟給 Claude
    5. 提示大意:

      “`
      你是一位 SEO 分析師。請根據以下資料:
      – 找出本週與上週的主要變化(曝光、點擊、CTR、排名)
      – 標記前三個值得關注的關鍵字或頁面
      – 用「給客戶看的語氣」寫一份 300-500 字報告
      – 最後用 bullet points 給出下週三個具體行動建議

      資料如下(JSON):
      {{data}}
      “`

    6. 產出報告草稿:Claude 回傳 Markdown 或 HTML。

    7. 人工審核閘
    8. n8n 把草稿丟到 Slack 或 Email。
    9. 你檢查內容、改幾句,手動按「OK」。
    10. 正式發送
    11. n8n 把最終版本寄給客戶,存一份到 Notion/GDrive。

    你可以馬上做的事:

    • 不接 API,把第 2 步改成「從 Google Search Console 下載 CSV,手動上傳到 n8n」:
    • n8n workflow:Manual Trigger → Upload(Webhook / Form)→ Claude → Email to yourself
    • 等流程穩定,再把手動上傳改成 API 自動抓。

    多代理與 MCP:什麼時候要用,什麼時候別急著上

    當你開始想:

    • 一個 Agent 負責抓資料
    • 一個 Agent 負責分析
    • 一個 Agent 負責 QA / 測試

    就會踩到「多代理系統」與 MCP(Model Context Protocol)的世界。

    有人已經用 Claude Agent SDK + MCP 做出:

    • 看板(Kanban)每張卡片就是一個開發任務
    • Cron 定時啟動 Claude,為每張卡開一個隔離環境,
    • 拉 repo → 寫 code → Git 提交 → Vercel 建預覽 → 第二個 Claude 做 QA 測試 → 不過就自動重試(案例影片)。

    但實務上,多代理+多個 MCP server 很容易變成:

    • 工具太多、描述太長,模型不斷選錯工具。
    • 每次調用都把全部工具 schema 塞進 context,token 成本暴漲(有研究與實務案例顯示,長 agent run 可能是一般聊天的 1000 倍 token)。

    💡 關鍵: 多代理與 MCP 雖強大,但會大幅拉高複雜度與 token 成本,先把單一流程跑穩再擴充效益最高。

    建議:先把單一流程 + 人審做好,再考慮多代理。

    你可以馬上做的事:

    • 若你不是工程背景,目前只要記得兩件事:
    • MCP = 讓 AI 直接操作一堆內部工具的「插座規格」
    • 「工具越多越好」是錯誤想像,實務上要刻意減少工具數量,讓 AI 比較不會選錯。

    適合誰用:三種典型場景

    角色 / 團隊類型 痛點 可以先做的第一條工作流
    個人創業者 / 獨立站長 每週 SEO 數據、內容企劃很花時間 自動 SEO 週報 + 下週內容建議(保留人審)
    接案顧問 / 行銷代理商 多個客戶週報、月報內容高度重複 客戶週報模板 + 客製評論區,由 Claude 先填、你負責最後一段「專業觀點」
    內容團隊主編 多篇文章排程、更新 meta、內鏈整理 /loop 對多篇文章產出標題、描述,n8n 更新到 CMS 草稿,人工再審核發佈

    工具比較:Claude、n8n 以及類似選項

    名稱 核心功能 免費方案 適合誰
    Claude (Claude Code) 長任務指令(/goal/loop)、多代理、強文字與程式處理 有免費網頁版與有限額度 需要寫報告、寫程式、設計長流程的人
    n8n 視覺化工作流、自動化各種 API/Email/DB 有自架免費版,雲端有免費層 想用「拖拉方式」把不同工具串起來的人
    Zapier/Make SaaS 自動化平台,介面更友善,內建大量整合 有免費層但步數較少 不想部署系統,只想快點測試概念的人

    💡 關鍵: Claude 負責「想與寫」,n8n 和 Zapier/Make 負責「串與送」,搭配起來才能形成真正的自動化流水線。


    怎麼開始:從「一個安全的流程」練起

    按照這個順序,你可以在半天內完成第一條「會自己跑,但有你把關」的 AI 工作流:

    1. 開通帳號
    2. 註冊 Claude 帳號:https://claude.ai
    3. 註冊 n8n(雲端或自架):https://n8n.io

    4. 在 Claude 裡寫清楚你的「流程說明書」

    5. 建一個專屬專案,新增檔案 WORKFLOW.md,內容包含:

      • 你每週報告的步驟
      • 用到資料來源
      • 哪些步驟你不想讓 AI 自動做(例如「最後寄給客戶」)
    6. 做第一個最小工作流(本機測試版)

    7. n8n:Manual Trigger → 手動貼 CSV → Claude → Email 給自己。
    8. 實際跑一次,看 Claude 生成的報告是否接近你平常寫的內容。

    9. 加上人工審核閘

    10. 把收件人改成你的 Slack / 私人 Email。
    11. 只有你手動確認後,才另外轉寄給客戶或上線。

    12. 再考慮進階:API、自動抓數據、多客戶分流

    13. 等你對這條流量和錯誤模式有感覺後,再把手動步驟替換成 API。

    只要守住「AI 做草稿,人做決定」這一條線,你就可以放心把「會自己跑」的工作流丟給 Claude 和 n8n,真正把時間留給需要判斷與創意的事情。

    🚀 你現在可以做的事

    • 在 Claude 建一個專案,照文中範例貼上你的「每週報表流程」並用 /goal 讓它幫你拆步驟
    • 在 n8n 建立「Cron → HTTP Request → Email」或「Manual Trigger → Claude → Email」的最小工作流
    • 為現有任一例行報告加上一個「人工審核閘」,先從「AI 草擬、人來定稿」開始運行
  • Gemma 4 12B:16GB 筆電就能跑的多模態模型

    Gemma 4 12B:16GB 筆電就能跑的多模態模型

    📌 本文重點

    • Gemma 4 12B 可在 16GB 筆電本地跑起多模態助理
    • 支援 256K tokens 長上下文與 140+ 種語言
    • 多種推理框架與量化選項,依硬體彈性部署

    只要一台 16GB RAM 的筆電,你就能在本地跑起能看圖、懂多語言、支援長上下文的開源模型 Gemma 4 12B,當自己的離線 AI 助理。

    官方與模型頁:
    – Google DeepMind 介紹(英):The Decoder 報導
    – 模型權重:google/gemma-4-12b(Hugging Face)


    核心功能:這顆模型為什麼值得你在本地跑

    1. 多模態:同時處理文字、圖片,部分變體還支援音訊

    Gemma 4 12B 是 Google DeepMind 釋出的開放權重模型,可以:

    • 文字 → 文字:聊天、摘要、寫程式
    • 圖片 → 文字:看截圖、PPT、流程圖說明內容
    • (部分 12B 變體)音訊 → 文字:理解語音內容(需支援音訊版模型,見 Hugging Face 說明)

    你可以馬上實作:

    • 把專案架構圖或 UI 截圖丟給 Gemma 請它「用條列解釋每一塊的功能」
    • 拍下白板會議內容,請它整理成待辦清單 + 行動項目

    模型介紹討論可參考 Reddit:google/gemma-4-12B · Hugging Face


    2. 超長上下文:最多 256K tokens,做「整個資料夾」級別的助理

    Gemma 4 系列支援最高 256K tokens 上下文,適合處理:

    • 整本 PDF、技術規格書
    • 一整個 repo 的多檔案閱讀
    • 長對話紀錄與多輪推理

    能做的實際事情:

    • 丟一本 300 頁 PDF:請它依「章節 + 行動建議」整理摘要
    • 為專案整個 docs/ 資料夾建一個「本地 FAQ 助理」,用自然語言查文件

    進階提示:長上下文會吃 RAM,你在本地使用時可先把 context window 設在 16K~32K,等硬體 OK 再拉高。

    💡 關鍵: 高達 256K tokens 的上下文,讓你可以一次處理整本書或整個專案,而不用頻繁切段或換檔。


    3. 多語言 + 商用授權:可以直接放進產品

    根據 Google 與社群測試,Gemma 4 支援 140+ 種語言,在英文之外,中文、日文、歐洲語言表現都夠用;
    同時採用 Apache 2.0 授權,可用於商業產品(只需保留版權聲明)。

    你可以馬上行動:

    • 做一個「中英雙語客服 FAQ Bot」,在公司內網跑,不要雲端 API
    • 把它包成內部工具,處理公司文件、程式碼審閱,不用擔心資料外流

    授權與開源定位說明,可參考 The Decoder 報導與 Reddit 貼文:
    The Decoder:Gemma 4 12B
    Google just dropped Gemma 4 12B on your laptop!!

    💡 關鍵: Apache 2.0 商用授權加上 140+ 語言支援,讓 Gemma 4 12B 可以直接被放進正式產品中,而不只是一個玩具模型。


    適合誰用:三個實戰場景

    1. 本地文件助理:讀 PDF、企業知識庫、不出網就能查

    典型流程:

    1. 把 PDF/Markdown/Word 轉成純文字
    2. 用向量資料庫或簡單關鍵字搜尋切成小段
    3. 把相關段落 + 問題一起送進 Gemma 4 12B

    具體可以做:

    • 法律條款查詢:輸入「幫我比較第 5 條和第 8 條的差異,列成表格」
    • 公司內訓教材:輸入「只針對新進工程師,整理第一章的必讀重點」

    行動建議:

    • 不想寫程式:用桌面端 UI 工具(例如 LM Studio)載入 Gemma 4 12B 的 GGUF 量化版,搭配內建「本地檔案知識庫」功能。
    • 能寫 Python:用 transformers + chromadbllamaindex 搭一個最小可用的 RAG 查詢腳本。

    2. 圖片理解:看設計稿、截圖除錯、手寫筆記整理

    Gemma 4 12B 的多模態版本可以直接吃圖片:

    可以做的事:

    • 把前端 UI 截圖給模型:「列出這個畫面的功能區塊,以及可能漏掉的錯誤狀態」
    • 拍課堂黑板或手寫筆記:「幫我轉成 Markdown 大綱,並補上可能缺的步驟」

    行動建議:

    • 使用 Ollama:安裝後直接用
      bash
      ollama pull gemma4:12b
      ollama run gemma4:12b

      再在聊天 UI 裡丟圖片與文字問題。

    • 若走 transformers:選用多模態 checkpoint(Hugging Face 上會標示 image / vision 支援),用官方範例載入 processor + model 後送入 images + texts


    3. 簡單程式輔助與本地 Coding Agent

    在 Reddit 測試中,有人把 Gemma 4 12B 接進 VSCodium + Pi Agent,讓它:

    寫一個 Python 腳本:讀取 log 檔 → 抓出 error module → 統計後輸出 JSON,還自己產 mock data、在終端測試,一次成功。(案例連結)

    你可以:

    • 在 VS Code 裝本地 LLM 外掛(如 Continue / Pi Agent 等),指定後端使用本地 Gemma 4 12B
    • 常見用法:
    • 「寫一個腳本批次重命名資料夾裡的圖片」
    • 「讀這個函式庫的 README,給我最小可行 demo」

    行動建議:

    • 若你有 NVIDIA GPU(如 3060 以上):用 mistral.rsllama.cpp + CUDA,可以得到更順暢的互動速度。

    推理框架比較:Ollama / Transformers / llama.cpp / mistral.rs

    下表給你一眼看懂各工具適合誰:

    名稱 核心功能 免費方案 適合誰
    Ollama 一行指令拉模型、簡單本地聊天 UI 免費 想最快跑起 Gemma 4、只想用不想調參的人
    Transformers 直接操作 Hugging Face 權重 免費 Python 開發者、要客製 RAG / Agent 的人
    llama.cpp CPU/GPU 皆可的輕量推理框架 免費 只有 CPU 或老 GPU、需要 GGUF 量化的人
    mistral.rs 針對 CUDA 極速優化的推理框架 免費 有 NVIDIA GPU,追求吞吐和延遲的進階玩家

    補充:mistral.rs v0.8.2 在 Gemma 4 上,對多種 GPU(GB10 / B200 / H100)推理速度可比 llama.cpp 快到 2.8 倍(來源)。

    💡 關鍵: 若你有 NVIDIA GPU,mistral.rs 在 Gemma 4 上可達到比 llama.cpp 快約 2.8 倍的推理速度,大幅縮短互動延遲。


    硬體需求與量化:16GB 筆電怎麼選

    Gemma 4 12B 是 120 億參數等級的模型,但經過量化後可以塞進 16GB RAM 甚至更小機器上。

    基本建議:

    • 16GB RAM / 無獨顯
    • 量化:4-bit(如 Q4_K / Q4_0
    • 框架:Ollama、llama.cpp GGUF
    • 用途:文件整理、輕量對話、簡單程式輔助

    • 16GB RAM + 6–8GB VRAM(如 3060 Laptop)

    • 量化:4-bit 或 8-bit(看 VRAM 是否足夠)
    • 框架:mistral.rs(CUDA)、llama.cpp(GPU offload)、Ollama(自動 GPU 利用)
    • 用途:多輪對話、圖片理解、較密集的程式輔助

    若不確定自己機器能跑多大模型,可以用社群做的互動網站(類似「選模型大小 + 量化 → 即時計算 VRAM」工具,來源自 這篇 Reddit 貼文),先估算記憶體需求,再決定下載哪一個量化版本。


    怎麼開始:最簡路線 3 步驟

    路線 A:用 Ollama,三分鐘跑起 Gemma 4 12B

    適合:Mac / Windows / Linux,一行指令就想用的人。

    1. 安裝 Ollama:到 ollama.com 下載並安裝
    2. 在終端執行:
      bash
      ollama pull gemma4:12b
    3. 開始對話:
      bash
      ollama run gemma4:12b

      在對話中可以直接貼文字、上傳圖片,嘗試:
    4. 「幫我把這份 PDF 的重點整理成五條」
    5. 「看這張 UI 截圖,列出使用者可能會卡關的地方」

    路線 B:用 Hugging Face Transformers,做自家工具的核心模型

    適合:會 Python、想整合到後端或自製 UI 的開發者。

    1. 安裝套件:
      bash
      pip install transformers accelerate safetensors
    2. 在程式裡載入(以文字模式為例):
      “`python
      from transformers import AutoModelForCausalLM, AutoTokenizer

    model_id = “google/gemma-4-12b-it” # instruction-tuned 版本

    tokenizer = AutoTokenizer.from_pretrained(model_id)
    model = AutoModelForCausalLM.from_pretrained(
    model_id,
    device_map=”auto”,
    torch_dtype=”auto”,
    )

    prompt = “請用條列幫我整理這段技術文件的重點:…”
    inputs = tokenizer(prompt, return_tensors=”pt”).to(model.device)
    outputs = model.generate(**inputs, max_new_tokens=512)
    print(tokenizer.decode(outputs[0], skip_special_tokens=True))
    ``
    3. 若要圖片理解:選擇 Hugging Face 上標示支援 vision 的變體,搭配對應
    processor` 載入即可。


    路線 C:追求速度,用 mistral.rs / llama.cpp 跑量化版

    適合:有 NVIDIA GPU、想把延遲壓到最低的人。

    大致流程:

    1. 到 Hugging Face 找到 Gemma 4 12B 的 GGUF 或量化權重(搜尋 gemma-4-12b gguf 等)
    2. 安裝框架之一:
    3. mistral.rs
    4. llama.cpp
    5. 用官方 README 範例載入模型後,設定:
    6. n_gpu_layers 或類似參數,把前幾層放 GPU
    7. context_length:先從 16K 開始測試,再視記憶體往上調

    操作上可以先用簡單指令測試:

    ./main -m gemma4-12b-q4.gguf -p "幫我用三點整理這段文字的重點:..."
    

    確認速度和記憶體使用量,再決定是否改用更高精度的量化。


    如果你已經習慣雲端 LLM,Gemma 4 12B 是一個很好的起點,讓你在只靠 16GB 筆電的情況下,把「看圖、讀文件、寫程式」這三件事拉回自己機器上運行;從現在起,你可以把它當成本地端的多模態助手,按照上面的三條路線選一條裝起來,今晚就能實際用在手邊專案上。

    🚀 你現在可以做的事

    • ollama.com 安裝 Ollama,執行 ollama pull gemma4:12b 在本地跑起模型
    • 前往 Hugging Face 搜尋 google/gemma-4-12b,挑選一個適合你硬體的量化版本下載
    • 在 VS Code 安裝本地 LLM 外掛(如 Continue / Pi Agent),後端連接本地 Gemma 4 12B 做程式輔助