作者: kerwin77106

  • 270 億參數上 iPhone 的實戰路線

    270 億參數上 iPhone 的實戰路線

    📌 本文重點

    • 27B 大模型壓縮後可在手機端側實用
    • 量化 +剪枝 +蒸餾是端側部署核心組合
    • 善用 NPU/GPU 與 RAG/Agent 架構提升體驗

    在端側塞進 Qwen 3.6-27B 這種體量的模型,直接解決了三個痛點

    1. 隱私 & 合規:聊天、RAG 查文件、簡單 Agent 全在本機,不丟到雲端。
    2. 互動延遲:減少網路 RTT,短指令(改句子、補程式)能接近即時回應。
    3. 成本 & 擴展:不用為每個活躍使用者準備一個雲端 GPU,端側模型成為主力推理,引流雲端模型解決長上下文或高難任務。

    PrismML 把 Qwen 3.6-27B 壓到能在 iPhone 17 Pro 上跑,給了我們一個清楚訊號:27B 級模型上手機是可行路線,但你要整套壓縮 + runtime + 系統調優一起做


    重點說明:端側大模型的幾個關鍵技術

    1. 量化:從 16bit 壓到 4bit / 2bit

    目的:壓縮權重體積 + 減輕記憶體頻寬壓力

    • 粗估:
    • FP16:27B × 2 bytes ≈ 54 GB(純權重就爆)
    • 4bit:27B × 0.5 bytes ≈ 13.5 GB
    • 2bit:27B × 0.25 bytes ≈ 6.75 GB

    💡 關鍵: 把 27B 權重從 54GB 壓到約 7–14GB,是端側部署能否落地的基礎門檻

    • 實務上常用 mixed-precision
    • attention / embedding 保留 8bit 或 16bit
    • MLP 可用 4bit 或 2bit(配合 group-wise scaling)
    • 在 iOS 端常見兩種路線:
    • GGUF + llama.cpp:用 Q4_K_M / Q3_K_M 這類 profile
    • Core ML / MLC:用 symmetric int4 / int8,用 LUT 把量化常數 bake 進權重

    對專案的好處:

    • 同一隻 app 可以提供 小模型 + 壓縮大模型 的雙模式:日常用 7B,開「專業模式」時啟動 27B(但速度變慢 + 發熱)。

    2. 剪枝與低秩分解:不只變小,還要能跑快

    量化只壓體積,不一定壓算力;要在功耗有限的手機跑得動,需要再用:

    1. 結構化剪枝(structured pruning)
    2. 砍掉整個 head、channel 或 FFN neuron。
    3. 例如把 32 heads 剪到 24 heads,或把 FFN hidden dim 從 8k 降到 6k。
    4. 這會直接減少 MACs,對 NPU / GPU 友善。
    5. 低秩分解(LoRA / SVD 分解 FFN 權重)
    6. 把大矩陣 (W \in \mathbb{R}^{d \times d}) 分成 (U \in \mathbb{R}^{d \times r}, V \in \mathbb{R}^{r \times d}),r ≪ d
    7. 搭配蒸餾可以維持合理能力。

    PrismML 類型的方案多半是 多階段:量化 + 剪枝 + 蒸餾 + runtime 特化 一起做,才有可能把 27B 折成 iPhone 等級的 latency。

    3. KV Cache / 推理圖優化:token/s 的決勝點

    端側 LLM 的痛點不是 model load,而是 持續推理的 token/s 與發熱

    關鍵是:

    • KV Cache 緊縮
    • 精度壓到 8bit/4bit(與權重量化分開考慮)。
    • 善用 sliding window / attention sink,減少長對話時的 KV 佔用。
    • 推理圖優化(graph optimization)
    • 透過 MLC / Core ML / 自研 runtime 把整段 transformer block fuse 成 1–2 個大 kernel。
    • 減少 CPU ↔ NPU ↔ GPU 之間的 context switch。

    效果:在 iPhone 17 Pro 這種等級裝置,27B 壓縮到 4bit + 優化 graph,合理預期 5–10 tok/s 左右(看溫控),可以應付聊天、簡單 RAG,但不是寫 3k 行程式碼那種長輸出場景。

    💡 關鍵: 端側大模型的體感速度主要由 token/s 決定,5–10 tok/s 大致只適合短回覆與簡單任務

    4. 善用手機 NPU / GPU:不是「丟上去就快」

    iOS 上大致有三條路:

    1. Core ML + ANE(NPU)
    2. 最省電,但要配合 Core ML 支援的 op / dtype,需要前置轉換。
    3. Metal / MLC
    4. 走 GPU / CPU + 少量 NPU,對自訂 kernel 比較自由。
    5. llama.cpp(Metal 後端)
    6. 直接吃 GGUF,開 Metal 加速;部分 op 仍在 CPU。

    實務上可以採用 混合策略:embedding / 前幾層在 NPU,後面在 GPU / CPU,平衡記憶體與溫度。


    實作範例:在 iOS 上做聊天 / RAG / Agent 的架構

    下面給一個「實際可落地」的 27B 壓縮部署思路,用 pseudo code 表示。

    1. 推理框架選型與模型準備

    方案 A:llama.cpp + GGUF(開發週期短)

    1. 先把 Qwen 3.6-27B 轉成 GGUF 並量化(在桌機完成):
    python convert_qwen_to_gguf.py \
      --model qwen-3.6-27b \
      --out qwen-3.6-27b-q4_k_m.gguf
    
    ./quantize \
      qwen-3.6-27b-q4_k_m.gguf \
      qwen-3.6-27b-q4_k_m.gguf \
      Q4_K_M
    
    1. iOS 使用 llama.cpp Swift / C API:
    let params = gpt_params_default()
    params.n_ctx = 4096
    params.n_gpu_layers = 20   // 前 20 層走 Metal
    
    let ctx = llama_init_from_file("qwen-3.6-27b-q4_k_m.gguf", params)
    
    func infer(prompt: String) -> String {
        llama_reset(ctx)
        llama_eval_prompt(ctx, prompt)
        var output = ""
        while !shouldStop(output) {
            let token = llama_eval_next(ctx)
            output += tokenizer.decode(token)
        }
        return output
    }
    

    注意:n_gpu_layers 設太高,會爆 VRAM / 發熱;設太低,會被 CPU 拖死。實測需要在 8–24 之間找平衡。

    方案 B:MLC LLM + Metal(更深度優化)

    • 透過 MLC 工具鏈把 Qwen 3.6-27B 壓成 int4 + fused kernels,生成 iOS 專用模型包:
    mlc_llm convert qwen-3.6-27b \
      --quantization q4f16_0 \
      --target iphone
    
    mlc_llm build ios qwen-3.6-27b-q4f16_0
    

    iOS 端呼叫:

    let engine = MLCChatEngine(model: "qwen-27b-q4f16_0")
    
    engine.generate(
      prompt: userPrompt,
      maxTokens: 512,
      temperature: 0.7,
      streamHandler: { token in
        appendToUI(token)
      }
    )
    

    實務建議:若不是要深度客製 runtime,MLC 會比自己改 llama.cpp 更好拿穩定 fps 和電源管理

    2. RAG:本機嵌入 + 文件切片

    架構:

    • 輕量 embedding 模型(如 384–768 dim)放端側
    • 文本切 chunk(512–1024 tokens),建立本地向量索引。
    • 查詢時在端側 embed + ANN 搜索 + top-k context 拼回 prompt,再丟給 27B 生成。

    簡易 Swift 流程(以 Core ML embedding 模型為例):

    // 1. 建立索引(啟動或背景時)
    for chunk in documentChunks {
        let emb = embeddingModel.encode(text: chunk.text) // [Float]
        annIndex.add(vector: emb, id: chunk.id)
    }
    
    // 2. 查詢時
    func ragAnswer(query: String) -> String {
        let qEmb = embeddingModel.encode(text: query)
        let topK = annIndex.search(query: qEmb, k: 4)
        let context = topK.map { $0.text }.joined(separator: "\
    ---\
    ")
    
        let prompt = """
    你是一個助理。以下是知識庫內容:
    \(context)
    
    問題:\(query)
    請根據知識庫回答,若沒有明確答案就說不知道。
    """
        return infer(prompt: prompt)
    }
    

    好處

    • 敏感文件不離開手機;
    • 即使 27B 很慢,RAG 因為 context 精準,需要生成的 token 也變少

    3. 簡單 Agent:有限循環 + 工具調用

    在端側做 Agent 不要太貪心,建議:

    • 限制 max steps(例如 4–6 步)。
    • 工具呼叫只做本機能力:檔案讀寫、日曆、藍牙裝置等。

    簡化 pseudo code:

    struct ToolCall { let name: String; let args: [String: Any] }
    
    func runAgent(task: String) {
        var state = ""
        for step in 0..<6 {
            let prompt = buildAgentPrompt(task: task, state: state)
            let output = infer(prompt: prompt)
    
            if let tool = parseToolCall(output) {
                let result = executeTool(tool)
                state += "\
    [tool-result]\
    " + result
            } else {
                renderFinal(output)
                break
            }
        }
    }
    

    這種架構在 27B 上 iPhone 實務可行,但要注意:token/s 慢 → 每一輪推理越短越好,prompt 盡量模板化、少廢話。


    建議與注意事項:坑在哪、怎麼踩得比較輕

    1. 記憶體與冷啟動

    • iPhone 17 Pro 類級別裝置,27B 4bit 純權重就十幾 GB,實務上需:
    • 模型分片 / 分層載入
      • 常駐 7B 小模型;
      • 27B 大模型在「高需求模式」才 mmap 載入部分層(如後 12 層)。
    • 或採 Mixture-of-Experts(MoE) 類方案,如 GLM 5.2 + Flash MoE,那類模型在 Mac M5 上可跑 2–2.8 tok/s,給端側設計方向參考:不是所有 layer 都要 full dense
    • 冷啟動:
    • 首次 load 27B 量化模型,可能 3–10 秒,一定要做 loading UI + 延遲初始化(app 啟動時先載小模型,使用者開「專業模式」才載大模型)。

    💡 關鍵: 3–10 秒的冷啟動延遲是端側大模型的 UX 關鍵,必須用分層載入與明確 UI 掩護

    2. 電量與發熱

    • 連續推理 1–2 分鐘,大模型會把 SoC 拉到 TDP 上限,掉頻後 token/s 會明顯下降。
    • 實作上建議:
    • 限制 max_tokens,避免長篇輸出。
    • 使用 溫度監控(ThermalState,高溫時降速:
    if ProcessInfo.processInfo.thermalState == .serious {
        params.n_threads = max(2, params.n_threads / 2)
    }
    

    3. 隱私與合規

    • Ce 合規角度,端側推理 + 本地 RAG 是加分項,但要注意:
    • 日誌、錯誤回報不得包含原文檔內容。
    • 若有雲端 fallback,要明確 UI 提示「此問題將送出至伺服器」。

    4. 測試方法與性能預估

    建議自建簡單基準腳本,統計:

    • 冷啟動時間(model load 完到第一 token)
    • token/s(前 50 tokens、整段平均)
    • 電池掉電率與機身溫度(5 分鐘連續推理)

    例:用 llama.cpp CLI 在開發機 / TestFlight 內部版測一次:

    ./main -m qwen-27b-q4_k_m.gguf \
      -p "Hello" -n 256 -s 42 --timings
    

    官方輸出會給:

    • prompt eval time / token
    • generation eval time / token

    再用這些數據估算:

    • 聊天:平均 50–100 tokens → 是否能在 3–5 秒內完成?
    • RAG:查詢 + 150 tokens → 整體延遲能否低於 10 秒?

    結論:端側 27B 的實際策略

    對多數 iOS 專案,建議的 可實作路線 是:

    1. 產品層:
    2. 7B–8B 模型 作為主力。
    3. 提供「離線高精度模式」載入壓縮 27B,給重度用戶 & 高價方案。
    4. 技術層:
    5. 量化採 4bit mixed-precision,配合剪枝 + 蒸餾。
    6. 選擇 MLC / llama.cpp Metal 後端,不要自幹 runtime,除非是公司核心技術。
    7. 系統層:
    8. 做好 分層部署 + 延遲載入 + 熱管理
    9. 嵌入模型 + RAG 索引用小模型處理,27B 只負責最終生成。

    這樣設計,你可以合理地把「看起來誇張的 27B」塞進 iPhone 裡,並且在聊天、RAG、輕量 Agent 這幾個場景拿到實際可用的體驗。真正的難點不只在模型壓縮,而是在整條端側推理鏈的工程化

    🚀 你現在可以做的事

    • 在開發機上用 llama.cpp 或 MLC 先跑一版 Qwen 3.6-27B 4bit,量測 token/s 與冷啟動時間
    • 選定一個 7B 模型做端側 RAG PoC,實作本地嵌入與向量索引流程
    • 規劃產品中的「專業模式」或「離線高精度模式」,設計 7B / 27B 雙模型切換與載入策略
  • OvisOCR2:在筆電本地跑的文件結構化神器

    OvisOCR2:在筆電本地跑的文件結構化神器

    📌 本文重點

    • OvisOCR2 在本地將整份 PDF 直接轉成結構化 Markdown
    • 對表格、公式與讀取順序有針對性優化
    • 適合內網文件、學術論文與財報合約結構化
    • 0.8B 模型可在筆電或小伺服器上順跑

    OvisOCR2 的定位很單純:在你自己電腦上,把整份 PDF / 掃描件直接變成乾淨、有結構的 Markdown,不丟雲端、不拆頁、不東拼西湊。

    模型頁面:https://huggingface.co/ATH-MaaS/OvisOCR2

    Reddit 討論串:https://www.reddit.com/r/LocalLLaMA/comments/1uv88co/ovisocr2_a_promising_08b_local_document_parser/


    核心功能:從「整頁」到「可用的 Markdown」

    這邊只看跟你工作直接有關的 3 件事:

    1. 端到端整頁解析:丟 PDF / 圖片,直接出 Markdown

    OvisOCR2 是基於 Qwen3.5-0.8B端到端文件解析模型,不是傳統那種「先做 OCR 再用別的模型理解」的兩段式流程。

    它的輸出直接是 Markdown,包含:

    • 標題、段落層級(### 等)
    • 粗體、斜體等基本格式
    • 清單、引用等常見排版

    你可以馬上做的事:

    • 把公司內部的 PDF 手冊、SOP 丟進去,拿到 可編輯的 Markdown,再丟進 Notion、Confluence 或 Git repo 管理
    • 把舊專案的掃描說明書轉成文字,方便全文搜尋

    模型在常見文件基準上表現:

    • OmniDocBench v1.6:96.58 分
    • PureDocBench:75.06 分

    💡 關鍵: 在標準文件基準上拿到 90+ 分,代表它對一般報表與說明文件的結構理解已足夠直接納入實際工作流程測試。

    這代表它對一般報表、說明文件的結構理解已經有相當水準,適合直接放進工作流程測試。

    2. 表格、公式還原:不只讀得懂,還能「還原格式」

    OvisOCR2 的重點不是只認出字,而是把表格和公式變回「可運算」的東西

    • 表格 → Markdown 表格(| a | b | 那種),貼到 Notion、GitHub README 都能正常顯示
    • 公式 → 以 LaTeX 或接近格式輸出,方便貼回論文、簡報或 Obsidian

    你可以馬上做的事:

    • 把財報 PDF 轉成 Markdown,表格直接貼到 Excel / Google Sheets 做後續處理
    • 把學術論文中的公式拉出來,貼回 LaTeX 文件或投影片,不用一條條重打

    3. 讀取順序:不再被兩欄排版搞瘋

    很多 PDF(尤其是:財報、學術期刊、政府報告)都有這些特徵:

    • 雙欄排版
    • 頁首頁尾反覆出現的小字
    • 複雜圖文混排

    傳統 OCR 常會變成:

    • 把左欄整段讀完,再接右欄,導致段落亂序
    • 頁碼、版權資訊被插進正文裡

    OvisOCR2 針對「讀取順序」有訓練,能比較好地還原成人類閱讀的順序,包括:

    • 正文優先,頁碼/頁眉多半排除或放在不干擾的位置
    • 圖表標題和內容靠在一起,不會被打散

    你可以馬上做的事:

    • 把年度報告、研究報告丟進去,得到可以直接丟給大語言模型總結的乾淨 Markdown
    • 省掉「先用 Acrobat 導出文字再手動整理」的痛苦步驟

    適合誰用:三種典型場景

    1. 公司內網文件數位化:需要「不出內網」的方案

    如果你在這些情境:

    • 金融、醫療、政府等對資料敏感的產業
    • 有一堆 PDF 合約、掃描件、紙本表單
    • 不允許把文件丟到雲端 OCR 服務

    OvisOCR2 很適合當成內網文件結構化引擎

    • 0.8B 模型,記憶體需求相對溫和,可以放在:
    • 中小型伺服器
    • 部門共用工作站
    • Apache 2.0 授權,方便整合到自家系統

    可以實做的具體流程:

    1. 把部門的 PDF 檔放進內網檔案伺服器
    2. 用 OvisOCR2 解析成 Markdown / JSON
    3. 把結果丟進 ElasticSearch / OpenSearch / Meilisearch 做全文搜尋
    4. 再接一個內網 LLM(例如本地 QwenLlama)做問答

    2. 學術論文整理:從 PDF 到筆記庫

    研究生、工程師、PM 常見的需求:

    • 一次下載一堆 PDF 論文
    • 想要在 Obsidian / Notion / Logseq 裡統一管理

    OvisOCR2 可以幫你:

    • 把論文的標題、章節、公式、圖表說明整合成 Markdown
    • 保留結構(例如 # Abstract## Method),方便之後全文搜尋或做自動總結

    可以實做的工作流:

    1. 建一個 papers/ 資料夾放 PDF
    2. 寫一個小腳本,用 OvisOCR2 把每篇論文轉成 .md
    3. 輸出時附上原始 PDF 路徑、bibtex key 等 metadata
    4. 直接把 .md 丟進 Obsidian 資料庫

    3. 財報與合約結構化:先結構化,再丟給 LLM

    財務、法務、投研人員常做的事:

    • 從財報裡抓關鍵表格
    • 從合約裡抓特定條款(付款條件、違約金…)

    OvisOCR2 可以先把內容整理成清楚的 Markdown / 結構化文本,接著:

    • 用本地或雲端 LLM 做:
    • 指標彙總
    • 條款比較
    • 風險條款標記

    這樣的好處是:

    • 原始 PDF 不用離開你的環境
    • 只有經過清理的文字,才會送到雲端 LLM(如果你選擇這樣做)

    為什麼 0.8B 模型適合在筆電或小伺服器上跑?

    0.8B(8 億)參數的級別,落在一個很實用的區間。

    • 硬體需求友善
    • 8–12GB VRAM 的顯示卡即可順跑
    • 或者用 CPU 推理,速度會慢一些,但足夠跑批次任務
    • 記憶體壓力較低
    • 不需要 80GB A100 等級的 GPU
    • 適合中小企業和個人開發者

    💡 關鍵: 0.8B 等級模型在 8–12GB 顯示卡上即可運行,讓「整份文件結構化」這種原本需要大型服務的工作,可以在一般筆電或中小企業伺服器內網完成。

    這個大小對「文件結構化」剛好夠用:

    • 任務相對專一(解析版面與內容)
    • 不需要像聊天大模型那樣超強的開放式生成能力

    如果你已經有一台:

    • RTX 3060 / 4060 級別的筆電
    • 或一台 16–32GB RAM 的小伺服器

    基本上都可以實際跑起來做實驗。


    怎麼開始:從 Hugging Face 到「丟 PDF 拿 Markdown」

    下面給一條最短路徑:不談訓練,只談拿來用。

    步驟 0:你需要準備什麼?

    • 作業系統:Linux / macOS / Windows 都可
    • Python 3.10+(盡量用虛擬環境)
    • 建議有 GPU(但非必須)

    步驟 1:下載模型

    到 Hugging Face 模型頁:

    做兩件事:

    1. 登入 Hugging Face 帳號(免費)
    2. 在本機安裝 huggingface_hub 方便下載:
    ypip install "huggingface_hub[cli]" transformers accelerate
    huggingface-cli download ATH-MaaS/OvisOCR2 --local-dir ./OvisOCR2
    

    如果你不想預先下載,也可以在程式裡直接用模型名稱自動拉取。

    步驟 2:用 vLLM 跑起 OvisOCR2(建議)

    OvisOCR2 支援 vLLM,適合要做批次處理或服務化部署的情境。

    先安裝 vLLM

    ypip install vllm
    

    啟動一個本地 server(假設你有支援 CUDA 的 GPU):

    python -m vllm.entrypoints.openai.api_server \
      --model ATH-MaaS/OvisOCR2 \
      --port 8000
    

    啟動後,你就有一個 OpenAI 相容 API,可以從任何語言呼叫。

    步驟 3:寫一個「丟 PDF → 拿 Markdown」的小腳本

    以下示範用 Python,把單頁 PDF 先轉成圖片,再送進 OvisOCR2,拿回 Markdown:

    提醒:實務上多頁 PDF 要迭代處理,每頁送一次,最後把 Markdown 串起來。

    安裝必要套件:

    ypip install pillow pypdfium2 requests
    

    簡易腳本(假設 vLLM server 在 http://localhost:8000):

    import base64
    import io
    import requests
    from PIL import Image
    import pypdfium2 as pdfium
    
    OPENAI_API_BASE = "http://localhost:8000/v1"
    OPENAI_MODEL = "ATH-MaaS/OvisOCR2"
    
    
    def pdf_page_to_image(pdf_path, page_index=0):
        pdf = pdfium.PdfDocument(pdf_path)
        page = pdf.get_page(page_index)
        pil_image = page.render(scale=2).to_pil()
        return pil_image
    
    
    def image_to_base64(image: Image.Image) -> str:
        buf = io.BytesIO()
        image.save(buf, format="PNG")
        return base64.b64encode(buf.getvalue()).decode("utf-8")
    
    
    def ovisocr2_parse_image(img: Image.Image) -> str:
        img_b64 = image_to_base64(img)
        payload = {
            "model": OPENAI_MODEL,
            "messages": [
                {
                    "role": "user",
                    "content": [
                        {"type": "text", "text": "Parse this page to Markdown."},
                        {
                            "type": "image_url",
                            "image_url": {"url": f"data:image/png;base64,{img_b64}"},
                        },
                    ],
                }
            ],
        }
    
        resp = requests.post(f"{OPENAI_API_BASE}/chat/completions", json=payload)
        resp.raise_for_status()
        return resp.json()["choices"][0]["message"]["content"]
    
    
    if __name__ == "__main__":
        pdf_path = "sample.pdf"  # 換成你的 PDF 路徑
        img = pdf_page_to_image(pdf_path, page_index=0)
        markdown = ovisocr2_parse_image(img)
    
        with open("output_page1.md", "w", encoding="utf-8") as f:
            f.write(markdown)
    
        print("已輸出:output_page1.md")
    

    改進方向:

    • 迭代所有頁面,輸出成 page_01.mdpage_02.md 再合併
    • 把檔名、頁碼寫在 Markdown 裡,方便追溯

    步驟 4:搭配雲端 LLM 的 workflow 範例

    OvisOCR2 本地做的是「結構化清洗」,你可以再串雲端 LLM 做「理解與生成」:

    1. 本地:
    2. OvisOCR2 把 PDF → Markdown
    3. 雲端(例如 OpenAI、Gemini 等):
    4. 把 Markdown 分段丟給 LLM,做:
      • 自動摘要
      • 關鍵條款整理
      • 生成簡報大綱

    好處是:

    • 原始掃描件、敏感欄位留在內網
    • 真正上雲的是整理過的文字,方便做權限控管與脫敏處理

    小結:先用一個資料夾試跑

    最簡單的開始方式:

    1. 選一個專案資料夾(例如 ./docs_to_parse
    2. 10–20 份代表性的 PDF
    3. 用本文的腳本跑一輪,觀察:
    4. 文字正確率
    5. 表格還原情況
    6. 讀取順序是不是能接受
    7. 再決定要不要擴大到整個部門或公司文件庫

    💡 關鍵: 小規模試跑可以快速評估在你實際文件類型上的效果,再決定是否投資整合到正式內網與搜尋系統。

    OvisOCR2 不會替你完成所有事,但可以把「文件數位化+結構化」這一步做得足夠穩定,讓後面的搜尋、分析、LLM 問答都有乾淨的輸入可以用。

    🚀 你現在可以做的事

    • 到 Hugging Face 下載 ATH-MaaS/OvisOCR2,在本機用 vLLM 跑一個測試 API server
    • 選 10–20 份你常用的 PDF(財報、論文、合約),用示範腳本轉成 Markdown 檔觀察品質
    • 把輸出的 Markdown 接到 Obsidian 或 ElasticSearch,試做一個小型「內網知識庫+搜尋/總結」流程
  • Graphify:讓 AI 助手看懂整個專案

    Graphify:讓 AI 助手看懂整個專案

    📌 本文重點

    • Graphify 把整個專案轉成可查詢的知識圖譜
    • 讓 Claude Code、Cursor 等助手理解「整個系統」而非單檔
    • 特別適合接手專案、Code review、排錯與重構場景

    Graphify 就是替 Claude Code、Cursor 等 AI 編碼助手建立專案的知識底層,把程式碼、SQL、腳本、文件通通轉成可查詢的圖譜,讓 AI 回答不再只看單檔,而是理解整個系統。

    專案連結:Graphify-Labs/graphify(GitHub)


    核心功能:把「專案」變成可對話的地圖

    1. 把任何專案資料夾變成知識圖譜

    Graphify 支援:

    • 程式碼:Python、JavaScript 等一般 repo
    • 資料庫:SQL schema
    • 腳本:R、shell scripts
    • 文件:docs、論文
    • 多媒體:圖片、影片(以檔案與路徑資訊的形式收錄)

    實際可做的事:

    1. 選一個專案資料夾,例如 ~/projects/legacy-crm
    2. 讓 Graphify 掃描後生成知識圖譜
    3. 把「圖譜」接到你的 AI 助手,開始用自然語言查專案

    效果:你可以問 AI:

    • 「這個專案所有跟訂單狀態相關的函式和 SQL 表有哪些?」
    • 「從 API 收到請求到入庫,整個流程經過哪些檔案?」

    行動建議:先挑一個你覺得難接手的專案,當作 Graphify 的第一個練習對象。


    2. 一次整合:程式碼 + DB schema + 基礎設施

    Graphify 強調的是「整個系統放進同一張圖」:

    • App code:API、service、models
    • Database schema:tables、relations
    • Infrastructure:scripts、部署設定、CI/CD

    這意味著 AI 助手不只看到某個函式,而是可以沿著圖譜一路追:

    • 「這支 API 最後寫進哪個資料表?」
    • 「這張資料表在哪裡被讀取/更新?」
    • 「這個 Cron job 觸發哪些腳本,再改變哪些表?」

    💡 關鍵: 把代碼、資料庫與基礎設施放進同一張圖,才能讓 AI 追蹤完整的請求與資料流向。

    行動建議:如果你常在大型專案裡迷路,優先把 App code + DB schema 一起餵給 Graphify,請 AI 幫你畫出「從前端到資料庫」的完整路徑。


    3. 支援主流 AI 編碼助手與本地模型

    Graphify 自稱是「AI coding assistant skill」,專門替各種助手提供專案知識底層,目前支援:

    • Claude Code
    • Cursor
    • Codex / OpenCode
    • Gemini CLI
    • 以及其他可透過 CLI / API 串接的助手

    好處是:你不用換開發工具,只是多了一層「專案圖譜」,讓原本的 AI 助手變得更懂上下文。

    行動建議:先選一個你已經在用的助手(例如 Cursor),只做一件事:把 Graphify 生成的圖譜加進你的 Prompt 或工具設定,看 AI 回答專案問題的精準度差異。


    適合誰用:3 個具體場景

    1. 接手大型專案:用 Graphify 做「三小時系統導覽」

    接手舊專案最常遇到:

    • 文件缺失
    • 系統邏輯分散在各層
    • 找不到「這個功能到底怎麼跑」

    操作範例

    1. 從 Git 拉下專案:

    bash
    git clone <your-legacy-repo>
    cd <your-legacy-repo>

    1. 用 Graphify 掃描整個 repo,生成圖譜(假設有 CLI 指令 graphify scan):

    bash
    graphify scan . -o graph.json

    1. 在 Claude Code 或 Cursor 裡,附上 graph.json(或指向 Graphify server),向 AI 提問:
    2. 「列出與『會員等級計算』相關的所有檔案與流程,並畫文字流程圖。」
    3. 「說明訂單取消從 API 到資料庫寫入的完整路徑。」

    行動建議:把你接手的新專案都跑一次 Graphify,強制自己在第一天就用 AI 做一輪「系統導覽問答」。


    2. Code review:從「看單檔」變成「看整條影響路徑」

    傳統 Code review 很容易只盯著 diff,看不到改動在整個系統的影響。

    用 Graphify 的方式:

    1. 在 PR 對應的分支跑 graphify scan,生成該版本的圖譜。
    2. 在 AI 助手裡,輸入:
    3. 「這個 PR 修改的函式,影響到哪些上游呼叫點與下游資料表?」
    4. 「幫我列出這個改動所有可能破壞的流程。」

    AI 可以沿著圖譜追蹤呼叫鏈、資料流向,給你一份「改動影響報告」,你再決定要多測哪些地方。

    💡 關鍵: 利用圖譜讓 AI 做「改動影響分析」,可以系統性找出需要回歸測試的區域,而不是只憑經驗猜。

    行動建議:選一個你覺得風險高的 PR,讓 Graphify + AI 助手一起做一次「影響分析」,當作試驗。


    3. 排錯與系統重構:先畫圖,再動手

    排錯時最痛苦的是:

    • 找不到錯誤在哪條鏈路上爆
    • 重構時不敢動,怕牽一髮動全身

    Graphify 的知識圖譜可以幫你:

    • 快速列出某個錯誤堆疊涉及的所有節點(檔案、函式、表)
    • 在重構前問 AI:「我要拆分 user_service,請列出所有依賴它的模組與路徑。」

    實戰問句示例

    • 「根據圖譜,payment_timeout_error 這個錯誤從觸發到記錄經過哪些模組?幫我列出路徑。」
    • 「如果我要把 orders 表拆成兩張表,請告訴我所有讀寫 orders 的程式碼位置。」

    行動建議:下一次遇到棘手 bug,不要先改碼,先用 Graphify + AI 把「錯誤路徑」問清楚,再決定從哪個節點下手。


    工具與助手比較:怎麼搭配使用?

    以下是 Graphify 與常見 AI 編碼助手的定位差異與搭配方式:

    名稱 核心功能 免費方案 適合誰
    Graphify 專案知識圖譜;整合代碼、DB、腳本等 開源,GitHub 可用 想讓 AI 助手「看懂整個專案」的人
    Claude Code 雲端 AI 編碼助手,強自然語言理解 有免費使用額度 想用對話方式改碼/理解代碼的人
    Cursor VS Code 風格編輯器 + AI 補全與聊天 有免費方案 想把 AI 深度融入 IDE 的工程師
    Gemini CLI Google Gemini 命令列助手 有免費配額 喜歡在終端機用 AI 的開發者

    行動建議:先選一個你主要的開發環境(例如 Cursor),再把 Graphify 當成「增強模組」接上去,而不是全部一起嘗試,降低學習成本。


    怎麼開始:從 GitHub 到「可用工作流」

    官方入口:https://github.com/Graphify-Labs/graphify

    以下示範兩個「從零到可用」的最短路徑,以你已有的開發工具為中心來設計。


    工作流 1:接手專案 + Claude Code 問答

    步驟一:安裝與掃描專案

    1. 安裝(假設使用 Python pip,依實際 README 為準):

    bash
    pip install graphify

    1. 進入你的專案目錄,掃描並輸出圖譜:

    bash
    cd ~/projects/legacy-crm
    graphify scan . -o graph.json

    步驟二:把圖譜交給 Claude Code

    1. 在 Claude Code 裡開啟專案,將 graph.json 上傳或貼到系統提示(System Prompt),例如:

    「你可以使用以下專案知識圖譜回答問題。請依圖譜中的檔案關係、表結構與腳本依賴,協助我理解和修改系統。」

    1. 問第一組問題:

    2. 「請整理出『會員等級計算』相關的所有模塊與資料表。」

    3. 「依據圖譜,畫出從前端呼叫到 DB 的完整流程(文字版即可)。」

    做到這一步,你就完成了:接手專案 → 建立圖譜 → 用 AI 做系統導覽 的基本工作流。

    💡 關鍵: 把圖譜丟給 AI 之後,每一個新問題都在累積你對整個系統的結構化理解。


    工作流 2:Cursor 裡做 Code review 影響分析

    步驟一:在 PR 分支生成圖譜

    1. 切換到 PR 對應分支:

    bash
    git checkout feature/new-pricing

    1. 跑 Graphify:

    bash
    graphify scan . -o pr-graph.json

    步驟二:在 Cursor 裡使用圖譜

    1. 打開 Cursor,載入這個專案,並在 AI 設定中把 pr-graph.json 放進系統提示,說明:

    「這是目前分支的專案知識圖譜。做 Code review 時,請根據圖譜分析改動的上游呼叫和下游資料影響。」

    1. 在看 diff 的同時詢問 Cursor:

    2. 「這次修改的 calculate_discount 函式,上游有哪些呼叫者?下游有哪些寫入或查詢動作?」

    3. 「依據圖譜,列出最需要回歸測試的 5 個功能。」

    這樣你就有一套:看 diff → 問圖譜 → 寫測試計畫 的 Code review 工作流。

    行動建議:先把上述其中一個工作流完整跑一次,感受「AI 從看單檔」變成「看整個系統圖」的差異,再決定要不要把 Graphify變成團隊標準工具。


    小結:把 AI 助手升級成「系統顧問」

    Graphify 的本質,是幫你的 AI 助手補上一層「專案整體結構」:

    • 不再只依靠目前開啟的 1–2 個檔案
    • 而是能沿著代碼、資料庫、腳本和設定,追到整條路徑

    如果你已經在用 Claude Code、Cursor 這類助手,下一步值得做的事,就是讓它們不只會寫函式,而是真的看懂你的系統——Graphify 正好是那一層缺少的底座。

    🚀 你現在可以做的事

    • Graphify GitHub 把專案 clone 下來並跑一次 graphify scan
    • 挑一個現有專案,把產生的圖譜接到你最常用的 AI 助手(如 Cursor 或 Claude Code)
    • 在下一次接手專案或處理高風險 PR 時,用 Graphify + AI 做一次完整的系統導覽或影響分析
  • 蘋果怒告 OpenAI:AI 不等於免費挖礦權

    蘋果怒告 OpenAI:AI 不等於免費挖礦權

    📌 本文重點

    • 大模型公司正急著補齊「硬體短板」
    • 核心硬體機密外洩會推高整個產業的合作門檻
    • AI+硬體時代需要重新畫清跳槽與合作邊界
    • 這場官司在決定未來十年的產業底線

    這不是單純的「誰偷誰」八卦,而是 AI 軟硬整合時代的一場「底線戰」。 一邊是 蘋果 要守住長年累積的硬體與供應鏈 know-how,一邊是 OpenAI 這類大模型公司急著往裝置端伸手;真正被放上談判桌的,是產業規則、跳槽邊界與合作信任要不要整組重寫。


    一、為什麼 AI 實驗室突然這麼渴硬體?

    從訴狀細節看,指控不只是「帶走幾份簡報」這麼簡單,而是系統性把硬體廠當成免費礦

    • 蘋果訴稱:OpenAI 硬體主管在面試蘋果員工時,要求對方帶上「正在研發的零件」與「未上市產品樣品」;
    • 核心人物是前 Apple Watch 副總裁唐坦(Tang Tan,在蘋果待了 24 年,手上握的是極少數人知道的整套產品路線與供應鏈細節;
    • 相關聊天紀錄甚至出現「未授權存取蘋果系統」的玩笑,顯示內部對灰色地帶的敏感度並不高。

    💡 關鍵: 像唐坦這種握有「24 年整套產品與供應鏈 know-how」的人,一旦外流,等於把蘋果最核心的長期競爭優勢一次搬家。

    如果這些指控屬實,OpenAI 想要的不是單一零件技術,而是一整套「如何把 AI 放進全球能量產的硬體產品」的 know-how:工業設計、供應鏈談判、成本結構、可靠度驗證流程,這些是任何語言模型都爬不出來的經驗。

    為什麼急?因為:

    1. AI 模型已經不再是差異化關鍵——GPT-4、Claude、Gemini 之間差距在縮小,真正的 moat 開始往「誰能把 AI 變成每天戴在身上的東西」移動。
    2. 端側運算 + 雲端模型的混合架構,需要在功耗、散熱、隱私、延遲之間做極度精細的 trade-off,這是典型蘋果強項,也是 AI 實驗室的短板。
    3. 大模型公司不想被 iOS / Android 長期「當 API 附件」,所以必須自己掌握一條從模型到裝置的直通路。

    問題是,當這種「補短板」行為踩進對手的商業機密裡,整個產業的合作信任會被迫重算。 對硬體大廠來說,如果今天你是合作夥伴、明天你就把人挖走、後天還被爆出疑似拿原型當面試門票,那下一步很合理的反應就是:

    • 更嚴苛的跳槽條款:對關鍵職位延長冷卻期(garden leave),甚至對「帶著未公開路線圖跳槽到 AI 實驗室」設更明確禁止條款;
    • 更保守的 B2B 合作:API 可以開,資料與原型絕不給;能沙盒就沙盒,能 air-gap 就 air-gap;
    • 更重的賠償條款:未來大廠在跟 AI 公司簽 NDA 時,會把「人才挖角 + 商業機密」違約條款疊到最高。

    結論是:AI 實驗室如果把硬體產業當作「訓練資料 + 原型情報」的免費礦,最後會逼到所有人關門自保,真正輸的是整個生態,而不只是某一家公司。


    二、當蘋果與三星開始收緊,開發者成本會怎麼變?

    這場官司不會只停在法庭。它會直接反射到 內部工具管控、原型接觸權限以及開發者生態的門檻

    我們已經看到一個前兆:三星 Health 被抓到,如果使用者選擇退出資料用於 AI 訓練,就威脅刪除帳戶資料。這反映兩件事:

    1. 廠商對資料與模型優勢的焦慮,願意在體驗上施壓換資料;
    2. 當資料被視為核心資產時,內部存取必然被上鎖、上紀錄、上審計

    💡 關鍵: 當連健康資料都被當成「不可少的模型燃料」,平台自然會用更強硬的方式綁定使用者與開發者。

    把這個趨勢套到這起訴訟上,可以合理預期:

    • 蘋果會更嚴控內部原型的接觸權限:硬體、OS、AI 功能將被切割 sandbox,能看到整體路線圖的人變少,跨部門協作難度上升。
    • 更多內部工具將封閉化:原本給內部工程師快速試驗 AI 功能的工具(例如內部版 Siri、端側模型測試平台),對外部開發者或合作夥伴的暴露度會降到最低。
    • 開發者要做真正深度整合,門票會更貴
    • 你要有更強的合規能力,才能被列為「可信任夥伴」;
    • 你要願意接受更嚴的審查與審核流程,包含安全評估、資料治理、法務審合約;
    • iOS / watchOS / visionOS 上做 AI 產品,會越來越像在銀行體系內做金融產品——開發靈活度被框住,但一旦進得去,護城河也更厚。

    這對獨立開發者與新創是不友善的

    • 雖然基礎 API(如 Core ML、雲端模型呼叫)仍可能保持開放,但要想接觸「更貼近系統的資料與感測器」做差異化,門檻會比過去高很多;
    • 你會被迫在「站在平台外當純雲端服務」與「深入平台但接受高度審查」之間二選一。

    換句話說,這場訴訟如果成立,它會在未來幾年實質推高「AI+硬體開發」的入場券價格,把更多創新堵在牆外,只剩巨頭可以玩全棧整合。


    三、當「開放合作」遇上灰色拿機密:監管與治理要怎麼補課?

    從政策與使用者角度,這案子最刺眼的一點是:AI 公司一邊高喊開放合作,一邊如果被證實在實務上踩灰色地帶拿機密,等於直接消耗社會對「AI 轉型」的信任預算。

    這裡有三個需要補課的層次:

    1. 跳槽邊界要被重新定義

    過去「人才自由流動」被視為矽谷創新的前提,但 AI+硬體時代,有幾條線必須被寫進合約與法律:

    • 關鍵職務(如產品線負責人)跳槽到直接競品,是否需要強制冷卻期?
    • 面試時,企業對候選人「帶作品」的要求,怎麼避免實質變成「帶原公司機密」?
    • 監管機構是否應要求大企業保留「敏感職位跳槽審查」紀錄,以利事後取證?

    • B2B 合作要有「AI 條款」

    未來硬體公司在跟 AI 實驗室合作,不再只是 NDA,而是要有明確的:

    • 資料使用範圍:不得將合作過程接觸到的任何非公開資訊,訓練自家模型;
    • 人才招募防火牆:合作期間及之後 X 年內,不得主動挖對方專案關鍵成員;
    • 模型行為透明:如果模型因訓練而顯示出疑似使用合作方機密的輸出,必須有通報與調查機制。

    • 企業內部治理要有「AI 商業倫理」規範

    光靠法務 NDA 已經不夠,AI 公司需要在內部明文規定:

    • 面試不得要求候選人展示現任雇主的未公開資料或產品;
    • 對涉及競品機密的對話,員工要有明確的「終止談話」義務;
    • 內部對「灰色拿機密」的玩笑與文化,應被視為合規風險,而不是 startup 文化的一部分。

    💡 關鍵: 若不提前立好「AI 商業倫理」的紅線,單靠事後訴訟,只會讓整個產業在一次次案件中慢性失去社會信任。

    否則,AI 產業很快會被社會與監管定義成「想要一切但不願負責任的產業」,這會反噬到整個生態的創新空間。


    結語:這場官司在畫的是十年的底線,不只是今天的勝負

    從產業規則與長期信任的角度看,這起蘋果 vs OpenAI 的訴訟,核心不是「誰偷誰」,而是「AI+硬體 的倫理與合約邊界要不要趁現在講清楚」。 如果放任大模型公司把硬體廠當「免費資料礦」,硬體巨頭的合理反應就是全面收縮合作、拉高圍牆——最後十年的裝置創新,只剩少數巨頭在封閉系統裡互相對賭。

    對不同角色,我的具體建議是:

    • 開發者 / 新創
    • 把「合規與資料治理」當成產品設計的一部分,否則你永遠進不了真正有價值的系統層整合;
    • 避免任何可能被解讀為利用前雇主機密來「加速」的捷徑,那是一條短期快、長期死的路。
    • 硬體與平台公司
    • 在合約與政策上明文化「AI 條款」與「跳槽邊界」,但不要藉機全面鎖死開放接口,否則你會失去外部創新帶來的網路效應;
    • 把「可被監督的開放」當成競爭優勢,而不是風險來源。
    • 監管與使用者
    • 監管機構應把「商業機密 + AI 訓練」視為重點議題,及早建立指引與案例;
    • 使用者則要學會問一句:這家 AI 公司是怎麼拿到它現在這些能力的?

    如果這場官司能迫使產業在「實驗自由」與「商業倫理」之間重新畫線,那它帶來的價值,會遠大於判決的輸贏本身。

    🚀 你現在可以做的事

    • 如果你是開發者,檢查自家產品流程,補上明文化的「前雇主機密不得使用」與資料治理規範
    • 如果你在硬體或平台公司,與法務合作,為未來的 AI 合作案預先設計專屬「AI 條款」
    • 如果你關注產業走向,持續追蹤這起官司進展,並比較各家對「AI 商業倫理」的公開承諾與實際行為
  • 語義快取實戰:RAG 成本暴降指南

    語義快取實戰:RAG 成本暴降指南

    📌 本文重點

    • 語義快取可降 20–60% API 成本
    • 僅對「穩定且短」內容做 embedding
    • 加多鍵條件與門檻避免誤命中
    • 做成可監控、有版本的基礎設施

    多數 RAG / chat backend 在做完 模型選型、prompt 調參、retriever 調優 之後,推理帳單還是居高不下,關鍵原因往往是:只做 exact-match cache,幾乎等於沒快取。語義快取(semantic cache)能把「同一個問題的不同說法」視為同一查詢,實務上可以做到 20–60% API call 減少,延遲跟成本一起砍。

    💡 關鍵: 用語義快取把不同說法視為同一查詢,實務上可直接減少約 20–60% 的 API 呼叫與成本。

    下面直接從實作觀點拆解:要怎麼在典型 RAG 架構裡,把語義快取變成一個可上線的「基礎設施」,而不只是一個實驗性 side project。


    重點說明

    1. Exact-match cache vs Semantic cache:差在哪裡?

    典型 chat / RAG backend 的 exact-match cache 會用:

    key   = hash(user_id + model_id + prompt_string)
    value = LLM 回應(與中間狀態)
    

    問題:只要 user 換句話說、加入一句客套話、locale 不同,就完全 miss。

    語義快取改成

    1. embedding 模型 將「實際送進 LLM 的完整 prompt」轉成向量
    2. 在向量空間做 相似度搜尋,找到語義相近的歷史請求
    3. 若相似度高於門檻,就直接重用快取結果

    核心差異:

    • exact-match:字串完全一致才命中 → hit rate 極低
    • semantic cache:語義相似即可命中 → 命中率與長尾查詢成本大幅改善

    2. Embedding 維度、距離度量與門檻設計

    (1) Embedding 選型

    實務建議:

    • 優先用雲端提供的現成模型,例如:
    • OpenAItext-embedding-3-small(1536 維,CP 值高)
    • Anthropic:搭配外部 embedding 模型(現階段主力還是在 text model)
    • 本地bge-m3 / bge-large-zh 系列
    • 維度建議:768–1536 維,再低容易語義表達力不足,再高會拖慢向量查詢與存儲

    💡 關鍵: Embedding 維度落在 768–1536 通常能兼顧語義表達力與查詢成本,是實務上常用的安全區間。

    (2) 距離度量

    多數 embedding 預設是單位向量,直接用:

    • Cosine 相似度
    • Inner product(dot product) + normalization

    pgvector / RediSearch 中對應為:

    • pgvector:cosine_distance, inner_product
    • RediSearch:COSINE, IP

    (3) 相似度門檻

    實務上用相似度 score(越高越相似):

    • 一般 QA / FAQ 類:≥ 0.85 才視為命中
    • 容錯度高(例如推薦、summarize):可以放寬到 0.8
    • 安全關鍵(法務 / 醫療):建議 0.9+ 或只做「候選提示」不直接 auto-hit

    建議做成 可配置

    semantic_cache:
      min_similarity: 0.87
      max_age_seconds: 86400  # 24h
    

    💡 關鍵: 把相似度門檻做成可配置,可以依場景在 0.8–0.9+ 之間調整,兼顧命中率與錯答風險。

    3. 多鍵策略 & Prompt 模板變動

    (1) 多鍵策略:user_id / locale / model_id

    避免「錯人、錯模、錯語系」的語義誤命中,可以在向量檢索時加上多維限制:

    • user_id:B2B 場景常有客製知識庫,可用 tenant_id / org_id 分區
    • localezh-TW vs en-US 的語義可近但答案不同
    • model_id:不同模型輸出風格與能力差異大,cache 混用會有體感落差

    查詢條件大致會長這樣:

    WHERE tenant_id = $1 AND locale = $2 AND model_id = $3
    ORDER BY embedding <-> $query_embedding
    LIMIT 1
    

    (2) Prompt 模板變動導致 cache miss

    大部分團隊會把 系統提示 + tool 描述 + 歷史對話 + user 問句 串成完整 prompt 做快取 key;結果一改模板,整個 cache 幾乎報廢。

    實務作法:

    • 把要做 embedding 的內容拆成比較穩定的部分:
    • 不要含整個系統提示
    • 不要含 tool schema
    • 只對「語義關鍵」部分做 embedding:user 問句 + 精簡後的 RAG context
    • 快取 key 中再另外紀錄 prompt_template_version,查詢時限制:
    WHERE prompt_template_version = $ver
    

    這樣改模板時只需要 bump version,舊資料會自然「冷掉」,又不會影響新版本 cache 收斂。


    實作範例

    1. 架構視角

    以典型 RAG / chat backend 為例,語義快取插在:

    1. 收到 user query
    2. 組裝完整 prompt 前/後,計算 embedding
    3. 先查 semantic cache
    4. 命中:直接回應
    5. 未命中:
      • 走正常流程:檢索(RAG)、呼叫 OpenAI / Anthropic / Meta 模型
      • 回寫快取

    2. PostgreSQL + pgvector 範例

    建表

    CREATE EXTENSION IF NOT EXISTS vector;
    
    CREATE TABLE semantic_cache (
      id BIGSERIAL PRIMARY KEY,
      tenant_id TEXT NOT NULL,
      locale TEXT NOT NULL,
      model_id TEXT NOT NULL,
      prompt_template_version INT NOT NULL,
    
      prompt_text TEXT NOT NULL,       -- 關鍵語義部分(例如 user 問句 + RAG context 摘要)
      response_json JSONB NOT NULL,    -- 模型原始回傳(含tool_calls可選)
    
      embedding VECTOR(1536) NOT NULL,
      created_at TIMESTAMPTZ DEFAULT now(),
    
      UNIQUE (tenant_id, locale, model_id, prompt_template_version, id)
    );
    
    CREATE INDEX ON semantic_cache USING ivfflat (embedding vector_cosine_ops)
      WITH (lists = 100);
    

    查詢(Node / TS pseudo-code):

    const { embedding } = await openai.embeddings.create({
      model: "text-embedding-3-small",
      input: cacheKeyText, // user 問句 + RAG 摘要
    });
    
    const { rows } = await pg.query(
      `SELECT id, response_json,
              1 - (embedding <=> $4) AS similarity
       FROM semantic_cache
       WHERE tenant_id = $1
         AND locale = $2
         AND model_id = $3
         AND prompt_template_version = $5
       ORDER BY embedding <-> $4
       LIMIT 1`,
      [tenantId, locale, modelId, embedding, promptTemplateVersion]
    );
    
    if (rows[0] && rows[0].similarity >= MIN_SIMILARITY) {
      return rows[0].response_json; // 命中語義快取
    }
    

    回寫

    await pg.query(
      `INSERT INTO semantic_cache
       (tenant_id, locale, model_id, prompt_template_version,
        prompt_text, response_json, embedding)
       VALUES ($1, $2, $3, $4, $5, $6, $7)`,
      [tenantId, locale, modelId, promptTemplateVersion,
       cacheKeyText, responseJson, embedding]
    );
    

    3. Redis + RediSearch 範例

    定義向量索引

    FT.CREATE semantic_cache_idx ON HASH PREFIX 1 sc:
      SCHEMA tenant_id TAG locale TAG model_id TAG prompt_template_version NUMERIC
             embedding VECTOR HNSW 6 TYPE FLOAT32 DIM 1536 DISTANCE_METRIC COSINE
    

    查詢(Python pseudo-code):

    vec = get_embedding(cache_key_text)  # 1536 維 float32
    
    q = (
      f"(@tenant_id:{{{tenant_id}}} "
      f"@locale:{{{locale}}} "
      f"@model_id:{{{model_id}}} "
      f"@prompt_template_version:[{ver} {ver}])=>[KNN 1 @embedding $vec AS sim]"
    )
    
    res = redis.ft("semantic_cache_idx").search(q, query_params={"vec": vec})
    if res.docs:
      sim = 1 - float(res.docs[0].sim)
      if sim >= MIN_SIMILARITY:
        return json.loads(res.docs[0].response_json)
    

    建議與注意事項

    1. 長輸入的 embedding 成本「反向暴增」

    常見錯誤:把 整個 prompt(含長 RAG context) 丟去做 embedding。

    問題:

    • context 動輒上千 tokens,embedding 成本跟 LLM inference 一起爆
    • 一點點 context 差異就讓相似度下降 → 命中率不升反降

    實務建議

    • 只對「stable 且短」的部分做 embedding:
    • user 問句
    • RAG context 的「摘要」而不是原文(可用小模型先 summarize 成 2–3 句)
    • 大型企業專案:先用 request 日誌做統計,估算 embedding 成本佔比,再決定精度/長度 trade-off

    2. 語義誤命中 → 幻覺與錯答風險

    語義快取本質上是「猜這問題和之前那題是不是本質相同」,猜錯就會回錯答案,而且錯得非常「自信」。

    風險控制手段:

    1. 提高門檻 + 多條件
    2. similarity 0.9+ + 同 tenant / locale / model / template_version
    3. 加上 lightweight 檢查模型
    4. 對 candidate 問題 & 當前問題再丟給小模型,問:
    5. 「這兩個問題是否在同一個具體情境下?只回答 yes/no」
    6. 只回部分結果
    7. 把 cache 命中當作「示範答案」塞進 system prompt,而不是直接當最終輸出

    3. 線上 A/B、hit rate 與 cost saving 監控

    (1) A/B 框架

    • A 組:只用 exact-match cache
    • B 組:開啟 semantic cache
    • 衡量指標:
    • cache_hit_rate:命中次數 / 總請求
    • avg_latency:端到端延遲
    • cost_per_1k_requests:可用 token 使用量 × 單價估算

    (2) 實作例:log 設計

    {
      "request_id": "...",
      "tenant_id": "...",
      "model_id": "gpt-4.1-mini",
      "semantic_cache_hit": true,
      "semantic_similarity": 0.91,
      "exact_cache_hit": false,
      "prompt_tokens": 923,
      "completion_tokens": 134,
      "latency_ms": 480
    }
    

    可以直接在 ClickHouse / BigQuery 做每日 dashboard:

    • 按 tenant 和 model 切分 semantic_cache_hit_rate
    • 比較「命中 vs 未命中」的平均 latency / token usage

    4. 上線前的設計 Checklist

    • Embedding 模型
    • [ ] 維度 768–1536,成本可接受
    • [ ] 支援你主要語言(中/英通常 OK,但特定語種要確認)
    • 距離度量與索引
    • [ ] PostgreSQL 使用 pgvector + ivfflat,設好 lists
    • [ ] Redis 使用 HNSW,確認記憶體預算
    • 快取 key 策略
    • [ ] 僅對 user query + 短 RAG 摘要做 embedding
    • [ ] 有 tenant_id / locale / model_id / prompt_template_version 條件
    • 風險控制
    • [ ] similarity 門檻可配置,預設 ≥ 0.85
    • [ ] 高風險業務要額外加一層 lightweight 檢查
    • 監控與 rollback
    • [ ] 有 semantic_cache_hit_rate / latency / token usage 監控
    • [ ] 開關旗標(feature flag)可在出問題時快速關閉

    只要把語義快取做成這樣一個「有監控、有開關、有版本」的基礎組件,你的 RAG / chat backend 通常能在不改業務邏輯的前提下,拿到一個非常直接的 成本與體感雙重優化。從 infra 角度來說,這個投資的 ROI 幾乎是整條 LLM pipeline 裡最高的一塊。

    🚀 你現在可以做的事

    • 在現有 RAG backend 中,先對 user 問句接入 text-embedding-3-smallbge-m3 的語義快取實驗路徑
    • 用 ClickHouse 或 BigQuery 建一個簡單 dashboard,監控 semantic_cache_hit_rate、延遲與 token 成本變化
    • 增加 tenant_id / locale / model_id / prompt_template_version 條件,並設好 min_similarity 旗標,逐步在低風險場景 rollout
  • 用 Frugon+開源模型,把 AI 帳單砍半

    用 Frugon+開源模型,把 AI 帳單砍半

    📌 本文重點

    • 用 Frugon 分析 LLM 使用紀錄與成本結構
    • 比較便宜/開源與高價模型的品質差異
    • 產生模型路由建議,讓簡單任務改用便宜模型

    只要你大量用 GPT/Claude 跑程式與 Agent 工作流,Frugon 要解決的,就是「到底哪些請求可以改用便宜或開源模型」,讓帳單直接往下掉。


    核心功能:把「模型選錯」找出來

    1. 讀取 API 日誌,算出你真實的模型成本結構

    Frugon 是一個本機 CLI 工具,核心第一步就是把你的 LLM 使用紀錄抓進來,算出每種任務到底花了多少錢。

    可採取的行動:

    1. 在你常用的 AI 平台(OpenAI / Anthropic)導出使用紀錄:
    2. OpenAI:到 Usage 頁面,下載帳單/log 檔(或透過 API 取得 responses.jsonl 類似格式)。
    3. Anthropic:到帳務或使用頁面,匯出調用紀錄(通常是 JSON 或 CSV)。
    4. 在本機安裝 frugon
      bash
      pip install frugon
    5. 在有日誌檔的資料夾執行:
      bash
      frugon analyze --logs ./logs

    Frugon 會讀取「OpenAI-style」的日誌格式,統計:

    • 各模型的使用次數、token 用量
    • 各任務類型(例如:搜尋、程式生成、摘要)的大致成本占比

    💡 關鍵: 透過實際日誌統計,你可以精確看到成本主要消耗在哪些模型與任務,而不是憑印象猜測。

    你會看到一個很直接的事實:大量錢其實花在一些很簡單的請求上,而不是最難的那 5% 任務。


    2. 對同一任務測試不同模型,估算品質差異

    真正的重點,是 Frugon 不只算錢,它會幫你試:同一個 prompt,如果改用便宜模型、甚至改用本地開源模型,結果差多少。

    可採取的行動:

    1. 準備你想比較的模型,例如:
    2. 雲端:gpt-4.1-minigpt-4.1claude-3.5-sonnetclaude-3-haiku
    3. 本地(透過 Ollama 或 vLLM):glm-4glm-5.2phi-4qwen2.5
    4. 在 Frugon 設定中,把不同模型接到同一組任務樣本:
      bash
      frugon compare \
      --logs ./logs \
      --models gpt-4.1-mini,gpt-4.1,glm-5.2 \
      --provider-config ./providers.yaml
    5. 查看報告:Frugon 會對每個任務類型輸出:
    6. 成本:每千 token 價格,預估每月支出
    7. 品質:用自動評估(例如比較回覆結構、關鍵字覆蓋率,或你自定的評分規則)估算「能否接受」

    實際效果:

    • 你會發現像 Databricks 報告提到的 pi-coding-agentGLM 5.2 等模型,在程式碼任務上,成本大幅低於主流付費模型,但通過率相近甚至更好(參考:https://www.reddit.com/r/LocalLLaMA/comments/1usrek0/)。
    • 對於簡單篩選、摘要、規則轉換類任務,gpt-4.1-mini 或開源模型往往「好到足夠」,沒必要動用最貴那一檔。

    💡 關鍵: 對相同任務批量 AB 測試不同模型,可以找到「成本明顯較低但品質仍達標」的替代方案。


    3. 自動給出「可以改用便宜模型」的路由建議

    分析完日誌與模型表現後,Frugon 會告訴你:哪些呼叫可以安全地改路由到便宜模型,還能估出你能省下的大致比例。

    可採取的行動:

    1. 在分析後產出的建議中,鎖定成本最高的前幾個任務類型,例如:
    2. code_generation_draft(寫樣板、測試腳架)
    3. search_scan(大量文本掃描、RAG 初步檢索)
    4. bulk_copywriting(批量行銷文案)
    5. 將這些任務標記為「可路由到便宜模型」,輸出為一份路由規則 YAML 或 JSON:
      “`yaml
      routes:

      • task_type: code_generation_draft
        preferred_model: glm-5.2
        fallback_model: gpt-4.1
      • task_type: search_scan
        preferred_model: gpt-4.1-mini
        fallback_model: claude-3.5-sonnet
        “`
    6. 在你的 Agent 或服務端程式裡,導入這份規則,改成:
    7. 先看任務類型(或 prompt tag)
    8. 符合路由規則時用便宜/開源模型
    9. 只有在評分不夠好時才回退到主力高價模型

    這就是 Towards AI 提到的「模型路由+編排(orchestration)」的實作方式:成本問題不是模型本身,而是你怎麼調度它們(參考:https://pub.towardsai.net/your-ai-coding-bill-is-not-a-model-problem-its-an-orchestration-problem-eeeacb340d1e)。

    💡 關鍵: 透過明確的路由規則,先用便宜模型處理大部分請求,再在需要時回退到高價模型,可以在不犧牲品質的前提下大幅壓低帳單。


    適合誰用:幾個很具體的場景

    1. 公司內部 Coding Agent/AI 助理

    如果你有:

    • 內部的程式碼自動補全、重構、寫測試的 Agent
    • 或自己用 GPT/Claude 當主力 coding 助理

    可採取的行動:

    1. 用 Frugon 分析最近一個月的 coding 相關 API 日誌。
    2. 把任務粗分為:
    3. 簡單工作:自動補全、樣板代碼、註解、測試腳架
    4. 困難工作:跨模組設計、大重構、疑難除錯
    5. 參考 Towards AI 的策略:讓簡單工作全部路由到本地開源模型(例如 GLM 5.2phi-4),只在困難工作時才叫 GPT-4.1Claude 3.5。(https://pub.towardsai.net/how-to-cut-your-ai-coding-bill-without-giving-up-the-frontier-model-870469d0d27d

    2. 批量文案生成服務

    如果你在做:

    • 大量短文案(社群貼文、電郵片段)
    • SEO 標題、meta 描述、A/B 測試版本

    可採取的行動:

    1. 把最近的批量文案請求丟給 Frugon 分析,看哪幾類 prompt 消耗最多 token。
    2. 用較便宜模型(例如 gpt-4.1-mini 或本地 qwen2.5)重跑一部分樣本,看品質是否能接受。
    3. 把「可接受的任務類型」在路由規則裡標記為便宜模型優先,主力模型只負責:
    4. 重要 campaign 的首稿
    5. 關鍵頁面(首頁/定價頁)的文案

    3. RAG 查詢服務、搜尋掃描類應用

    如果你有:

    • 內部知識庫問答網站
    • 客戶支援聊天機器人

    大多數成本在於「長上下文+大量查詢」,而不是最終回答的語氣。

    可採取的行動:

    1. 用 Frugon 找出所有包含超長 context 的調用(RAG 問答)。
    2. 評估:檢索+初步摘要能否先用便宜模型處理,再將壓縮後的內容交給高階模型發 final 回覆。
    3. 實作一條省錢路徑:
    4. 便宜模型/開源模型:負責檢索結果摘要、濾掉不相關段落(上下文壓縮)。
    5. 高階模型:只在最後一次,基於壓縮後資訊生成答案。

    怎麼開始:從第一次分析報告,到省錢工作流

    步驟 1:在本機安裝 Frugon

    Frugon 是 MIT 授權、可本地離線跑的 CLI 工具:

    pip install frugon
    frugon --help
    

    建議在專用虛擬環境裡安裝,方便後續更新和管理:

    python -m venv .venv
    source .venv/bin/activate  # Windows 用 .venv\Scripts\activate
    pip install frugon
    

    步驟 2:導出並載入 OpenAI/Anthropic 使用紀錄

    1. 從各平台匯出最近 2–4 週的 API 使用紀錄到 ./logs 目錄。
    2. 若格式不同,可先轉成近似 OpenAI responses JSON 結構(Frugon 文件裡有範例結構,可在 GitHub repo 查看)。
    3. 跑第一次分析:
      bash
      frugon analyze --logs ./logs --out report.json

    完成後你會拿到:

    • 各模型的 token 用量和估算費用
    • 各任務類型的成本分布

    步驟 3:設定模型比較與路由建議

    1. 建一個 providers.yaml,配置多家模型來源:
      yaml
      openai:
      api_key: $OPENAI_API_KEY
      anthropic:
      api_key: $ANTHROPIC_API_KEY
      ollama:
      host: http://localhost:11434
    2. 跑比較:
      bash
      frugon compare \
      --logs ./logs \
      --models gpt-4.1-mini,gpt-4.1,glm-5.2,phi-4 \
      --provider-config ./providers.yaml \
      --out routing_suggestions.yaml
    3. 根據輸出的 routing_suggestions.yaml,在你的後端服務加上簡單的模型路由:
    4. task_typemax_tokensimportance_level 作為分流條件
    5. 優先走便宜/本地模型,必要時再升級到高價模型

    步驟 4:用表格想清楚你的模型池搭配

    為了方便設計工作流,你可以把常用模型與工具列成表格:

    名稱 核心功能 免費方案 適合誰
    Frugon 讀取日誌、算成本、模型比較 開源 MIT,本機 有 API 日誌的開發者/團隊
    GLM 5.2 程式碼生成、一般助手 開源,可本地 內部 coding agent、IDE 助理
    pi-coding-agent 精簡 Bash 工具的 coding agent 依託基礎模型 想要低成本自動化寫程式的人
    GPT-4.1-mini 通用任務、便宜高效 依使用計費 批量文案、RAG 前處理
    Claude 3.5 高難度推理、長上下文 有免費層+計費 關鍵決策、難題除錯

    你不需要一次全換,只要先挑:

    • 成本最高的任務類型
    • 品質要求相對沒那麼嚴苛的場景

    用 Frugon 跑一輪比較,按表格逐步把這些流量導到更便宜或本地的模型,就能把 AI 帳單穩定壓下來,而不用放棄你熟悉的 GPTClaude 主力模型。


    🚀 你現在可以做的事

    • Frugon GitHubfrugon 安裝在本機,並準備最近 2–4 週的 API 日誌
    • 匯出 OpenAI/Anthropic 使用紀錄到 ./logs,執行 frugon analyzefrugon compare 產生第一版報告
    • 根據產出的 routing_suggestions.yaml,在你的後端或 Agent 加入模型路由邏輯,先讓一兩個任務類型切換到便宜或本地模型
  • ChatGPT Work:讓整個專案自己跑完

    ChatGPT Work:讓整個專案自己跑完

    📌 本文重點

    • ChatGPT Work 可跨工具完成整段工作流程
    • 從專案目標拆任務,做到最後產出
    • 可操作 Drive、Slack、Salesforce 並追蹤進度

    ChatGPT Work 是一個能跨 Google Drive、Slack、Salesforce 等工具,把一整段工作流程從「目標」做到「成果」的 AI 專案夥伴。

    官方介紹頁:https://openai.com/index/chatgpt-for-your-most-ambitious-work


    核心功能:從目標到成果的一條龍

    1. 目標設定:先講清楚你要「完成什麼」

    差別在這裡:一般 ChatGPT 回答一個問題就結束;ChatGPT Work 是從一個「專案目標」開始,自己拆成一串任務再逐一完成。

    你可以這樣用:

    • 在 ChatGPT 中開啟 ChatGPT Work 後,輸入一個清楚的專案目標,例如:
    • 「幫我完成一份針對台灣 18–24 歲使用者的 IG 廣告市場研究,最後輸出 15 頁簡報,放在我的 Google Drive。」
    • 補充背景:
    • 提供既有文件連結(研究報告、上一季簡報)
    • 告訴它最後交付格式(Slides、PDF、Markdown)

    ChatGPT Work 會依目標自動拆出流程:資料收集 → 整理分析 → 撰寫內容 → 產出指定檔案。

    💡 關鍵: 從「目標」出發,讓 AI 主動拆解並完成整套流程,而不是只回答單一問題。

    2. 跨應用操作:直接動你的 Drive、Slack、Salesforce

    根據 The Decoder 報導,ChatGPT Work 可以在你授權後操作多個常用工具:

    • Google Drive:讀取文件、建立新文件或簡報、寫入內容
    • Slack:整理頻道訊息、草擬公告、排程發文
    • Salesforce:查詢客戶資料、更新欄位、整理銷售記錄

    你可以這樣用:

    1. 在 ChatGPT Work 設定中連接你的:
    2. Google 帳號(Drive / Docs / Slides)
    3. Slack 工作區
    4. Salesforce 帳號(若公司有用)
    5. 定義允許的動作範圍:
    6. 例如:只能讀取特定資料夾、只能發文到指定 Slack 頻道
    7. 在對話中直接下指令:
    8. 「去我 Drive 的 /Marketing/2026Q3 資料夾,把上一季簡報拿來當模板,產出新的簡報草稿。」

    3. 長期記憶與進度追蹤:讓專案不斷線

    ChatGPT Work 可以「記住」同一個專案的上下文,在幾小時甚至幾天的工作過程中維持連續性。

    可做到:

    • 專案狀態紀錄:它知道前一次做到哪裡、哪些子任務已完成
    • 自動更新進度:在你指定的地方(例如一個 Drive 文件或 Slack 頻道)整理最新狀態
    • 長期追蹤:你只要回來說「繼續剛剛那個 IG 市場研究專案」,它就接續上次的步驟

    你可以這樣用:

    • 建一個「專案日誌」Google Docs,交給 ChatGPT Work 管理:
    • 指示:「之後所有這個專案的進度與決策,請整理成條列,持續寫進這份文件。」
    • 每天收工前,問一句:
    • 「今天這個專案完成了什麼?請幫我寫一段日報摘要,放到同一份 Docs。」

    💡 關鍵: 讓 AI 維持專案記憶與進度,減少你在不同工具間同步與追蹤的時間。

    4. 多端啟用與基本安全設定

    根據 OpenAI 官方說明,ChatGPT Work 可以在 Web、手機和桌面端使用,使用前有幾個關鍵安全設定要先做。

    啟用路徑:

    • Web:登入 ChatGPT,切到主選單中的「Work」或「Projects」區域
    • 手機 App:更新至最新版 ChatGPT App,首頁通常會多一個「Work」入口
    • 桌面 App:更新後在側邊欄找到「Work」或「Agents」

    基本安全設定建議:

    1. 權限最小化
    2. 只授權必要的資料夾、頻道與 CRM 物件
    3. 從「只讀」開始,確認行為後再開啟「寫入」權限
    4. 分專案資料隔離
    5. 不同客戶或產品,用不同 Drive 資料夾與 Slack 頻道
    6. 審核模式(如果公司政策需要):
    7. 設定某些操作需你手動確認(如寄出郵件、更新 Salesforce 重要欄位)

    適合誰用:3–4 個實際場景

    場景 1:市場研究 + 簡報一次完成

    適合:行銷人、產品經理、創業團隊。

    操作範例:

    1. 在 ChatGPT Work 建立專案目標:
    2. 「針對台灣大學生,完成一份 IG 廣告成效的市場研究,最後輸出 15 頁 Google Slides 簡報。」
    3. 授權 Google Drive,指定放檔案的資料夾
    4. 要求它:
    5. 收集公開數據與你 Drive 中舊報告
    6. 匯總關鍵洞察(受眾特徵、內容形式、互動率)
    7. 依照你給的簡報架構,填入各頁內容
    8. 最後你做的事情只剩:
    9. 打開 Slides 調整版面、補上圖片或品牌元素

    💡 關鍵: 讓 AI完成「研究+整理+初稿簡報」,你只負責最後的美編與決策。

    場景 2:客服 FAQ 整理與更新

    適合:客服主管、SaaS 團隊、內容團隊。

    操作範例:

    1. 授權 ChatGPT Work 讀取:
    2. 客服 Slack 頻道訊息或客服系統輸出的紀錄
    3. 既有 FAQ 文件(在 Google Docs/Drive)
    4. 給它明確任務:
    5. 「請從最近 3 個月的客服紀錄中,整理出前 50 個高頻問題,對比現有 FAQ,標記哪些需要新增、修改或合併。」
    6. 讓它:
    7. 在同一份 Docs 中新增建議問答
    8. 用標註方式提示你審核(例如加上『待確認』標記)
    9. 你只需要:
    10. 審核內容、修正關鍵措辭,然後發布到官網或知識庫

    場景 3:團隊例行報告自動生成

    適合:專案經理、主管、任何要寫週報的人。

    操作範例:

    1. 授權它讀取:
    2. Slack 專案頻道訊息
    3. Task 工具匯出的 CSV 或報表(放在 Drive)
    4. 建立「週報專案」:
    5. 指示:「每週五下午 4 點,整理這個專案的本週進度,生成一份 Google Docs 週報草稿並貼摘要到 Slack 頻道。」
    6. 它會:
    7. 分類任務完成狀態、風險、下一步計畫
    8. 輸出固定格式週報(你可以先給一份模板讓它學)
    9. 你保留最後審核權:
    10. 在 Docs 上調整內容,再正式發 Slack 公告

    場景 4:銷售跟進與 CRM 更新

    適合:業務團隊、客戶成功團隊。

    操作範例:

    1. 授權 Salesforce + Gmail/Slack(視你公司工具而定)
    2. 定義流程腳本:
    3. 「每當某客戶的機會階段進入『提案後等待』超過 5 天,請:
      1. 整理過去溝通紀錄
      2. 草擬一封跟進郵件
      3. 在 Salesforce 中更新下一步行動計畫欄位。」
    4. 你設定是否需要手動確認寄信與更新欄位

    怎麼開始:從啟用到第一條工作流腳本

    1. 用現有 ChatGPT 帳號啟用 ChatGPT Work

    ChatGPT Work 建立在 GPT-5.6 及 Codex 子模型上(參考 The Verge 報導)。通常會先對付費方案或企業帳號開放,具體依你的訂閱方案而定。

    基本步驟:

    1. 登入 ChatGPT(Web 或 App)
    2. 檢查你的方案是否顯示「Work」或「Projects」選項
    3. 若有:點進去建立你的第一個「Project」或「Work Agent」
    4. 依指示連接必要的外部工具(Drive、Slack、Salesforce…)

    2. 設計第一條「工作流腳本」:用自然語言就夠

    你不需要寫程式,工作流就是一段清楚的指示。

    範例腳本(可直接改成你的需求):

    目標:每週自動整理團隊專案進度並生成週報。

    流程:
    1. 每週五下午 3 點,檢查 Slack 頻道 #proj-alpha 的本週訊息與我在 Google Drive 資料夾 Projects/Alpha 中的任務表。
    2. 用我上傳的 週報模板.docx 作為格式,生成一份新的週報草稿文件,放在同一資料夾。
    3. 將週報重點摘要成 5 行文字,貼到 #proj-alpha 頻道,但不要 @channel。
    4. 所有週報草稿請先標註「待審核」,不要對外分享。

    實作建議:

    1. 先用「一次性指令」跑完整流程,看結果是否符合期待
    2. 再把指令存成固定工作流,設定觸發頻率或條件
    3. 每週調整腳本內容,讓它越來越貼近你團隊的語氣與格式

    3. 搭配 Codex / ChatGPT Enterprise 的進階用法

    在企業環境,ChatGPT Work 會搭配 Codex(負責理解與生成程式/腳本)以及 ChatGPT Enterprise 的權限與安全機制一起運作。

    幾個進階玩法:

    • 自動產生小工具腳本
    • 讓 Codex 幫你寫 Google Apps Script 或簡單 Python 程式,整合自家系統 API,然後交給 ChatGPT Work 呼叫
    • 企業資料庫整合
    • 將內部知識庫(如 Confluence、Notion、內網 Wiki)接入 Enterprise 環境,讓 Work 在專案中引用正式文件,而不是僅靠網路搜尋
    • 權限與審計
    • 使用 Enterprise 提供的「操作紀錄」與「權限管理」,讓所有跨工具的更新都有可追溯紀錄,符合公司合規要求

    小結:先從一個「會浪費你時間的例行專案」開始

    如果你還不確定要怎麼用 ChatGPT Work,建議第一個專案就選一個你每週都要重複做、但又很耗時間的任務:像是週報、簡報草稿、FAQ 更新。讓它從資料收集、整理到產出初稿都幫你跑完,你只保留最後 20% 的決策與修飾。

    這樣用一個月,你會大致摸清:

    • 哪些資料適合交給它讀
    • 哪些步驟需要你保留審核權
    • 什麼樣的腳本描述,可以讓它穩定地幫你「做到最後一哩路」。

    🚀 你現在可以做的事

    • 登入 ChatGPT,確認是否已開通 WorkProjects,並嘗試建立第一個專案
    • 選一個你每週重複執行的任務(如週報或簡報),用自然語言寫出完整工作流腳本
    • 在 ChatGPT Work 中連接 Google Drive、Slack 或 Salesforce,跑一次端到端流程並微調指示
  • GitHub Agent 洩密:開發安全默契徹底破局

    GitHub Agent 洩密:開發安全默契徹底破局

    📌 本文重點

    • 傳統權限模型在 AI Agent 上已失效
    • OAuth/RBAC 只管存取,不管行為與意圖
    • 開源安全工具與隔離框架是新必備防線
    • 企業需改用「授權行為」與可審計 Agent 模型

    這次 GitHub Agent 的「GitLost」漏洞,不是單一產品事故,而是整個「Agent 時代」安全默契的破局。對工程師與企業安全負責人而言,關鍵問題已經不是「要不要用 Copilot」,而是:我們真的理解「代理型 AI」打開了哪些新攻擊面嗎?

    GitLost 把一件事講得很直接:當你把 IDE 接到雲端 Agent,再讓它拿著 OAuth token 亂跑,傳統的「信任平台 + 信任權限」模型在 Agent 上已經失效,而產業的安全設計還停留在「這只是聰明一點的 autocomplete」的錯覺裡。

    💡 關鍵: Agent 擁有 OAuth 權限時,不只是「能看到什麼」,而是「會怎麼重組與輸出這些資料」——這是傳統模型完全沒描述的新風險。


    一、GitLost 暴露的是「權限觀念」的落後,而不是單一 bug

    根據 Noma Security 的分析,GitHub 的新 Agent 在特定誘導下,竟能回傳本不應暴露的私有 repo 內容。更致命的是:研究員不是靠 0-day,而是靠「騙 AI 把它看得到的東西說出來」。這對安全人來說有三重震撼:

    1. OAuth + RBAC 在 Agent 上只保證「能不能讀」,不保證「會怎麼用」。
    2. 企業早就習慣:只要 repo 設成 private、權限縮到 team 最小範圍,再配上一套 RBAC,就算合規過關。
    3. 但在 Agent 模式下,LLM 被賦予「解讀 +重組 + 回傳」的自由度,它不是 API proxy,而是會重寫資訊邊界的解釋層。

    4. LLM 無法區分「正常指令」與「惡意提示」,Prompt Injection 直接打穿邏輯層防線。

    5. Ars Technica 指出:LLM 本質上無法在語義層穩定畫出「可信內容 / 不可信內容」界線,因此被注入的提示只要語法合理、上下文一致,就能被當作 legit 指令。
    6. GitLost 的本質,就是把「請你幫忙比對」這種看似 innocuous 的任務,變成跨 repo 的資料抽取行為。

    7. 平台巨頭預設「Agent 是功能」,而不是「Agent 是帶工具欄位的行動主體」。

    8. 在把 Agent 推進 VS Code、企業 workflow 前,GitHub、OpenAI 這些公司優先考慮的是「能做多少事」,而不是「誰為行為後果負責」。
    9. 結果就是:權限設計停在 OAuth,審計停在可編輯 log,防誤用停在幾條 system prompt。

    從 JADEPUFFER 這類 agentic ransomware 案例看得更清楚:當一個語言模型被綁上自動化工具鏈,它不只是在輸出文字,而是能夠以機器速度暴露舊安全債。GitLost 則讓我們看到另一面:即便沒有惡意程式,純靠「聰明助理」也能變成資料外洩管道。

    💡 關鍵: Agentic 攻擊可以在沒有 0-day、沒有惡意程式的情況下僅靠提示與工具編排達成關鍵資料外洩。


    二、為什麼「傳統安全組合拳」在 Agent 面前形同虛設?

    企業過去的預設公式是:OAuth + RBAC + 合規稽核 = 足夠安全。在 Agent 時代,這三件事分別崩壞在不同層級。

    1. OAuth:授權的是管道,不是行為

    OAuth token 告訴 GitHub Agent:「你有權看這幾個 repo」。但它完全沒描述「你可以對這些內容做什麼」。當 Agent 同時被接到 chat 介面與工具 API:

    • 使用者一句「幫我比較所有專案裡類似的訂閱方案」,就可能觸發跨 repo 搜索、摘要、重組。
    • 現有 OAuth 無法表達「可查詢、不可重述原文」、「可計算統計、不可提供原始記錄」。

    授權模型停在『資料存取』層,而 Agent 在『行為編排』層運作,兩者語言完全不對焦。

    2. RBAC:角色管的是「人」,不是「代理」

    RBAC 的角色通常綁在使用者帳號或服務帳號上,假設行為可被預測——工程師不會每天自己跑 script 掃全部 production DB。Agent 打破了這個假設:

    • 一個「開發者用 Copilot」的場景,忽然變成「LLM 代替開發者呼叫一連串 API」。
    • 對系統來說,所有操作都來自同一個 user / service account,看起來「合理」,但實際上是高頻率、高廣度的機器編排行為

    這也是為什麼 Sysdig 在分析 JADEPUFFER 時會強調:攻擊鏈大部分是由 agent 自行串接完成,人體只提供初始憑證與目標。RBAC 看不到「誰在決定下一步」,只看到「哪個帳號在執行」。

    3. 傳統審計與合規:記錄得了 log,描述不了意圖

    Halo 這類開源工具開始做的是:把 Agent 的所有工具調用、模型請求、資料存取記錄到防竄改的 append-only 日誌裡,並用 hash 鏈確保證據完整性。這暴露了一個現實:

    • 既有的 audit log 多半是「平台自己提供的 dashboard」,既可編輯又有立場,對 SOC2 / ISO 27001 這類合規來說幾乎沒可驗證性
    • 在 Agent 世界,同一個 prompt 可以導致 50 種略為不同的行動序列,所以不能只審查「設定好的控制」,而是要審查「每一次實際發生的行為」。

    傳統安全假設 system 是 deterministic,Agent 卻是 stochastic;安全控制如果不變成針對「實際運行軌跡」,就只是過去式的安心劑。

    💡 關鍵: 在 stochastic 的 Agent 行為模式下,只有針對「每一次實際行動序列」的審計,才有合規與鑑識上的實際價值。


    三、開源安全工具與隔離框架:可以補哪些洞?

    好消息是,GitLost 事件之後,社群已經開始補平台沒做好的功課,但企業要理解:這些工具不是「加分題」,而是做完才算及格

    1. 能力掃描:先弄清楚你的 Agent「到底能做多可怕的事」

    MakerChecker 這類「Scan your AI agents for dangerous capabilities」的工具,本質上是在幫你:

    • 系統性枚舉 Agent 可以呼叫的工具、API 和它們的組合效果;
    • 模擬提示攻擊,測試會不會被誘導去刪檔、外洩、對外呼叫未知 endpoint。

    對安全團隊而言,這應該變成導入任何 Agent 前的必備安全測試,而不是 demo 完覺得好酷就上線。

    2. 守門審計:把「Agent 真正做了什麼」變成不可抵賴的事實

    Halo 提供的是一種「runtime evidence」思路:

    • 所有 Agent 行為都進入不可修改的 log,安全團隊可以事後回溯「哪個 prompt 導致哪次資料存取」。
    • 為未來的內控、合規、甚至事故鑑識提供客觀證據,而不是靠 vendor 說明文件。

    如果企業把 Agent 當成關鍵生產工具,沒有這種第三方、可驗證的運行紀錄,基本上等於把事故調查外包給同一個肇事方。

    3. 隔離環境:把「Agent 的 OS」從「你的真實 OS」拆開

    OpenComputer 代表的是另一條路:為 Agent 建一台專屬的「開源電腦」,讓它在隔離 VM 中拿到 OS 級權限、裝軟體、操控 UI——但這一切都不直接碰到你的生產環境

    這種設計對企業的啟示是:

    • 不要讓 Copilot 或 ChatGPT Work 直接在 production cluster 裡有腳;
    • 先給它一個「緩衝層」——不論是 sandbox repo、隔離 VM、還是只讀鏡像——讓所有高風險操作只能在這裡發生。

    Agent UX 要順暢,沒錯;但安全上,真正成熟的做法是「讓 Agent 有完整 OS 體驗,但那台 OS 不是真實世界」。


    四、導入 Copilot / ChatGPT Work 前,企業必須改變的三件事

    最後回到實務:未來 AI Agent 一定會變成開發流程的基礎設施,問題只是誰有資格當那個基礎設施。從現在開始,工程團隊和 CISO 至少要同步完成這三件轉變:

    1. 從「授權帳號」轉向「授權行為」
    2. 為 Agent 定義的不是「它看得到哪個 repo」,而是「它可以執行哪種任務類型」。例如:
      • 允許 read + summarize,但禁止 read + copy exact code
      • 允許 search logs for patterns,但禁止 export raw logs.
    3. 在 IAM / policy 層明確標記出「AI agent service accounts」,為它們套上更嚴格的行為白名單。

    4. 把 Prompt Injection、Agent 誤用納入正式威脅模型,而不是「研究議題」

    5. 事件回顧流程(postmortem)要開始問:「這次事故是不是由 Agent 觸發?如果是,prompt 形狀是什麼?」
    6. 威脅建模文件裡要多出兩類 scenario:
      • 「外部內容(mail、issue、code)注入惡意指令,Agent 被利用」;
      • 「員工在不理解 Agent 能力的情況下,給出過寬指令導致資料外洩」。
    7. 這不是紅隊玩具,而是必須進入正式風險評估、控制設計與演練。

    8. 建立新的「安全默契」文化:Agent 行為要被預期、可追蹤、能被質疑

    9. 對開發者:
      • 把「我可以叫 Agent 做什麼」當作安全決策,而不是個人效率選項;
      • 學會基本的 Prompt Hygiene,例如避免「跨專案全量比較」、「把所有客戶紀錄拿出來算統計」這種模糊指令。
    10. 對企業:
      • 引入像 MakerChecker、Halo 這類工具,把 Agent 行為可觀測性變成合約條款,而不是 demo slide。
      • 要求平台供應商提供「不可編輯的活動證據」與「清楚的誤用責任界線」。

    總結得直接一點:AI Agent 會變成下一代 IDE 與企業工作流的標配,但只要安全默契沒建立,每一次 Agent 漏洞就是對整個生態信任的一次透支。平臺巨頭若繼續把安全當附註條款,開源社群與企業內部安全團隊就應該用政策與採購決策,把資源轉向那些願意把「安全與功能同等優先」的平台——在 Agent 時代,能被信任的才配當基礎設施。

    🚀 你現在可以做的事

    • 在內部 PoC 任一 Agent 前,先用 MakerChecker 類工具掃描其可呼叫能力與潛在誤用路徑
    • 將 Halo 類不可竄改審計機制納入 Copilot/ChatGPT Work 導入計畫與供應商評估標準
    • 於開發與安全團隊內啟動一次「Agent 行為授權與 Prompt Injection」威脅建模工作坊
  • 用 Gemini Managed Agents 搭建可控多代理系統

    用 Gemini Managed Agents 搭建可控多代理系統

    📌 本文重點

    • Managed Agents 讓多代理 workflow 更可控可審計
    • 背景任務與長流程能安全持續運行
    • remote MCP + 沙盒工具提升協作與安全
    • 憑證輪替支援零信任長連線場景

    Gemini Managed Agents 的最新更新,直接解決了多代理系統在實務上的四個痛點:長流程容易中斷、背景任務難管理、多代理協作缺乏控制平面、工具執行缺乏安全邊界、長連線憑證管理容易出事。如果你目前只是在做「單模型聊天 + 幾個工具」,這批能力讓你可以往「有審計、有重試、有觀測性」的多代理 workflow 進化,而且不需要自己再搭一層任務編排框架。


    重點說明

    1. 背景任務與長流程編排:從同步聊天到任務隊列

    新的 Managed Agents 支援在代理內啟動 背景任務(background tasks),並維持任務狀態。

    關鍵好處:

    • 可以把耗時操作(例如 ETL、長時間 API 輪詢、批次報表)移到背景,不阻塞前端對話。
    • 每個背景任務都有 狀態與 ID,便於你實作自家任務隊列、重試策略與恢復機制。
    • 代理本身幫你維護「對話上下文 + 任務上下文」,你只需在外層規劃任務生命週期。

    💡 關鍵: 把長流程變成有狀態、可重試的背景任務,是從「聊天玩具」升級成「可靠工作流系統」的關鍵一步。

    典型設計:

    • 前端對話 → 由主 Agent 判斷是否需要啟動背景任務。
    • 使用 Agents API 建立 task,狀態儲存在 Managed Agents 內部或你自己的 DB
    • 外部有一個「任務監控 worker」定期查詢任務狀態、做重試或告警。

    2. remote MCP / 多代理協作:控制平面 vs 應用層 SDK

    Managed Agents 現在可以直接連到 remote MCP。實務上有兩種典型 architecture:

    • 控制平面導向(Control Plane first)
    • 多個工具 / 子代理掛在 MCP server(例如一個 operations MCP、一個 data MCP)。
    • Managed Agent 只要知道 MCP endpoint,就能呼叫裡面的工具。
    • 適合大型企業,把權限、審計、資源配額集中放在 MCP 層。

    • 應用層 SDK 導向(SDK first)

    • 你在應用程式碼中透過 SDK 把工具包成 Gemini Tool / Functions,再掛到 Managed Agents。
    • 權限管理偏向 app side,例如每個 tenant 對應一組工具設定。

    關鍵差異在 權限與隔離

    • 控制平面模式:透過 MCP 做 RBAC、租戶隔離、審計;Managed Agent 像「智慧前端」。
    • SDK 模式:更靈活,適合快速迭代,但要自己補一套完整審計與 resource control

    3. 安全沙盒內整合自定義工具與函式

    更新後的 Managed Agents 允許在 安全沙盒(sandbox) 同時使用:

    • 官方 sandbox 工具(如瀏覽器、code executor)。
    • 你自定義的 functions / tools

    好處:

    • 你可以在受控環境內執行「可能有副作用」的操作,例如 DB query、檔案處理,而不直接暴露到外部系統。
    • 工具執行與 LLM 推理同樣有 超時與資源配額 控制,避免單一任務吃光整個 pod

    設計重點:

    • 每個工具要有明確的 作用範圍(只讀 / 可寫),把「刪除、修改」操作拆成獨立工具並 預設關閉
    • 在工具層做 輸入驗證與錯誤處理,避免 LLM 亂塞參數導致意外副作用。

    4. 憑證刷新與長連線安全:token 旋轉 + 零信任

    Managed Agents 支援在 不丟失 state 的情況下刷新憑證

    • 代理可以維持長流程(幾小時到幾天)的狀態,同時你的服務端可以定期輪替 API tokenOIDC access token
    • 這讓零信任架構更好落地:
    • 不再有「因為流程長,只好給超長效 token」的妥協。
    • 可以要求所有外部呼叫都透過短效憑證 + 中央驗證服務。

    💡 關鍵: 「長流程 + 短效憑證」的組合,讓零信任不再與實務需求衝突。


    實作範例

    以下用一個從「單模型聊天」升級成「有背景任務 + 多代理協作 + 審計」的簡化範例示意(以 Node.js 伺服器 + Gemini API 為例,為示意用虛擬碼)。

    1. 建立核心 Managed Agent

    import { AgentsClient } from "@google-ai/gemini";
    
    const agents = new AgentsClient({
      projectId: process.env.GCP_PROJECT_ID,
      location: "global",
    });
    
    // 建立主 Agent:負責對話 + 任務編排
    async function createMainAgent() {
      const [agent] = await agents.createAgent({
        parent: "projects/xxx/locations/global",
        agent: {
          displayName: "orchestrator-agent",
          model: "gemini-2.0-pro",
          // 掛上 MCP 與工具
          tools: [
            { mcpServer: { endpoint: process.env.MCP_OPS_URL } },
            { mcpServer: { endpoint: process.env.MCP_DATA_URL } },
            { functionDeclarations: [
              {
                name: "schedule_background_job",
                description: "Create a background task for long-running workflow",
                parameters: {
                  type: "object",
                  properties: {
                    jobType: { type: "string" },
                    payload: { type: "object" },
                  },
                  required: ["jobType", "payload"],
                },
              },
            ]},
          ],
          // 安全設定:限制可寫操作
          safetySettings: {
            allowWriteOps: false,
          },
        },
      });
    
      return agent.name; // 用來後續呼叫
    }
    

    重點:

    • AgentsClient.createAgent 建立主 Agent,掛上多個 MCP 伺服器 與自定義 function
    • safetySettings 示意限制寫入操作,實務上可自訂更細。

    2. 前端對話:從「單次聊天」變成可啟動背景任務

    // 使用者傳入訊息,主 Agent 可能決定啟動背景任務
    async function handleUserMessage(agentName: string, sessionId: string, text: string) {
      const [response] = await agents.generateMessage({
        name: agentName,
        // sessionId 用你自己的,方便日後審計與追蹤
        session: { id: sessionId },
        prompt: { text },
      });
    
      // 若 LLM 觸發工具呼叫,可能是 schedule_background_job
      if (response.toolCall) {
        const call = response.toolCall;
        if (call.name === "schedule_background_job") {
          const taskId = await createBackgroundTask(call.args);
          // 把 taskId 回寫到對話,讓使用者可以查詢
          return { reply: `已建立背景任務,ID: ${taskId}` };
        }
      }
    
      return { reply: response.outputText };
    }
    

    這裡用 generateMessage(或官方實際命名類似方法)示意:

    • 你自己維護 sessionId,不要依賴傳輸層的 session 概念,以免遇到像 MCP 無狀態 變更就斷鏈。
    • 工具呼叫觸發後,交給應用層建立背景任務。

    3. 背景任務隊列與重試設計

    // 簡化版任務建立
    async function createBackgroundTask({ jobType, payload }) {
      const taskId = crypto.randomUUID();
    
      await db.tasks.insert({
        id: taskId,
        type: jobType,
        payload,
        status: "pending",
        retryCount: 0,
      });
    
      return taskId;
    }
    
    // 任務 worker:定期跑
    async function taskWorkerLoop() {
      const tasks = await db.tasks.find({
        status: { $in: ["pending", "retry"] },
      }).limit(50);
    
      for (const task of tasks) {
        try {
          await runTask(task); // 實際呼叫 MCP 或其他工具
          await db.tasks.update(task.id, { status: "done" });
        } catch (err) {
          const nextRetry = task.retryCount + 1;
          if (nextRetry > 3) {
            await db.tasks.update(task.id, { status: "failed" });
          } else {
            await db.tasks.update(task.id, {
              status: "retry",
              retryCount: nextRetry,
            });
          }
        }
      }
    }
    

    重點:

    • 背景任務管理放在你的應用層,但任務內容可以是對 Managed Agents / MCP 工具 的呼叫。
    • 任務狀態與重試策略明確放在 DB,避免「背景任務孤兒進程」沒人管。

    4. 憑證刷新與零信任示意

    // 透過中介層取得短效 token,供 AgentsClient 使用
    async function getAgentsClient() {
      const token = await authService.getRotatingToken(); // 有效期 15 分鐘
      return new AgentsClient({
        authToken: token,
        projectId: process.env.GCP_PROJECT_ID,
      });
    }
    
    // 每次呼叫都用最新 token
    async function safeGenerateMessage(agentName, sessionId, text) {
      const client = await getAgentsClient();
      const [response] = await client.generateMessage({
        name: agentName,
        session: { id: sessionId },
        prompt: { text },
      });
      return response;
    }
    

    這種做法搭配 Managed Agents 的「不丟 state 憑證刷新」能力,可以在維持長流程的同時,讓底層 token 持續輪替。


    建議與注意事項

    1. 防止 Agent 自動刪庫型事故

    • 所有「修改 / 刪除」類工具:
    • 預設不掛到主 Agent,改掛到專門的「ops Agent」,再用人工或嚴格策略觸發。
    • 在工具層做 白名單 / 黑名單 檢查,例如禁止 DROP TABLE、限制影響範圍。
    • 所有高風險操作應要求:
    • 二次確認(LLM 生成計畫 → 使用者或守門服務審核 → 才執行)。

    2. 審計與回溯:不要把責任丟給 MCP

    MCP 轉為 stateless 之後,如果你沒自己建立 trace id,就會遇到:

    • 同一條資金轉帳流程,log 看起來是四個不相干的事件,無法證明「誰觸發了什麼」。

    建議:

    • 在應用層產生 correlationId / traceId,寫入:
    • 所有 Agents API 呼叫
    • MCP 請求的 metadata
    • DB 任務表與 log 系統
    • 在出事時可以把「對話 → Agent 決策 → MCP 工具呼叫 → DB 操作」串回一條 timeline

    3. 背景任務治理:避免孤兒進程與資源爆炸

    • 每個任務必須有:
    • 明確 statuspending / running / retry / failed / done)。
    • 最大重試次數與 退避策略exponential backoff)。
    • 超時與最大執行時間限制。
    • 週期性 job 清理:
    • 清掉超過 SLApending 任務,標記為 timeout_failed
    • 對高失敗率任務發告警,不要無限重試打爆外部 API

    4. 多代理協作架構選型

    • 團隊偏「平台 / SRE」:建議 控制平面模式,用 MCP 集中治理,Managed Agents 做業務邏輯。
    • 團隊偏「產品 /快速迭代」:先用 SDK 模式,在 app 層掛工具,後續再逐步抽到 MCP。

    5. Observability:為多代理 workflow 補上眼睛

    • 最低限度:
    • 每次 Agent 呼叫記錄:agentNamesessionIdtraceId、使用工具列表、執行結果。
    • 建議導入:
    • 分散追蹤(如 OpenTelemetry),把 Agents / MCP / DB 統一進 tracing system。
    • 守門 dashboard:顯示背景任務隊列狀態、失敗率、平均耗時。

    結論:Gemini Managed Agents 的背景任務、remote MCP、安全沙盒工具與憑證刷新能力,讓你可以在現有專案裡自然從「單模型聊天」過渡到「可控、可審計的多代理 workflow」。核心心法是:把任務編排與審計留在應用層,讓 Managed Agents 專心做協作與自動化,並以零信任與資源治理觀點設計整體架構。

    🚀 你現在可以做的事

    • 在現有聊天應用中加入 sessionIdtraceId 與簡單任務表,開始嘗試背景任務編排
    • 盤點現有工具,決定哪些適合掛在 MCP、哪些用 SDK 模式直接掛到 Managed Agents
    • 規劃短效 token 取得流程,實作一個中介層 authService.getRotatingToken() 來配合 Managed Agents 使用
  • Claude Cowork 上手機:養成你的常駐 AI 助理

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

    📌 本文重點

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

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

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


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

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

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


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

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

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

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

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


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

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

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

    指令範例:

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


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

    第一步:註冊 Claude 帳號

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

    🚀 你現在可以做的事

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