作者: kerwin77106

  • Google 把雲變成 Agent 基建,誰付最後的代價?

    Google 把雲變成 Agent 基建,誰付最後的代價?

    📌 本文重點

    • Google 正在把雲端重編成以 Agent 為核心的作業系統
    • 企業將被迫面對平台級遷徙與安全、成本治理壓力
    • 真正瓶頸不在模型能力,而是對長駐 Agent 的信任邊界
    • 使用 Agent 時必須預先設計可退出與多平台彈性

    Google 這次不是多加一個 AI 功能,而是試圖把「整個雲端與應用層」重編成一個以 Agent 為核心的作業系統。Gemini Agent 從手機、Gmail、車載系統一路打進企業後台,問題已經不是要不要用 AI,而是:我們要不要接受「所有關鍵流程都跑在 Google 的 Agent 執行層上」這件事?


    一、這不是功能疊加,而是雲端定義權之戰

    從今年 I/O 的脈絡看,Google 的動作有幾個關鍵轉折:

    • 「Agentic Gemini 時代」宣言:Sundar 在 Google I/O 上直接把今年定義為 Agentic Gemini era,不再只談 LLM,改談「多代理系統、智能工作流」。
    • 模型全面 Agent 化
    • Gemini Omni / Omni Flash 成為預設多模態底座,語音、影像、文字一次吃下來,對應車用 EX60 外部攝影機讀路邊標誌這類場景。
    • Gemini App 被重新定位為「全用途 AI 中樞」,而不是一個聊天視窗,明示「未來所有互動都可以是 Agent 任務」。
    • Workspace 進入實際運維階段
    • Gmail 可以跟你對話、幫你找信、幫你回信,從摘要工具變成「郵件工作流程代理」。
    • Docs、Sheets 內的 Gemini 不再只是寫字,而是能調整排程、發信通知、串其他服務——也就是開始動你的 workflow。
    • Vertex AI 被「Gemini Enterprise Agent Platform」取代:這是關鍵一步。
    • 名稱上直接從「模型服務平台」升級成「Agent 平台」。
    • 功能上把 開發、編排、治理、安全 全拉進同一層,並宣稱支援 200+ 模型(含 Gemini、Gemma、Claude),也就是:
      • 你愛用哪家模型都行,
      • 編排與運維一律跑在 Google 的 Agent 平台上

    💡 關鍵: Google 要你可以自由選模型,但把「真正難換的執行與治理層」鎖在自家雲端。

    這跟單純「我也有 Agent SDK」是不同量級:Google 的戰略,是把「雲端 = Agent 執行層」。

    對比競爭者:

    • Microsoft Copilot Cowork 也在做相似的事:
    • Work IQ 理解組織上下文與流程,在 Microsoft 365、Dynamics、Power BI、各種 ERP 之間跑來跑去,實質變成「企業工作流 OS」。
    • Anthropic 則是走「代理產品直接變營收引擎」路線,用 Claude 代理 接案、做 B2B,自上而下證明「Agent 可以養活一家公司」。

    三者的差異在於:

    • Anthropic 賭的是「單一強代理產品」商業可行;
    • 微軟 把 Agent 嵌進既有 Office 生態,用授權與 SaaS 黏住企業;
    • Google 則往更底層走一步,試圖把整個雲定義為 Agent 的執行基礎設施——你可以不用它的模型,但你離不開它的 Agent runtime。

    下一輪 AI 戰爭不是誰的模型多 5% 分數,而是:誰能把 Agent 做成可運維、可審計、可計費的基礎設施。 Google 正在為這件事改寫自己的雲產品線。


    二、對開發者與企業:技術債、技能債與「被平台遷徙」的壓力

    對既有 GCP / Vertex AI 用戶來說,這次調整不是選項,而是 路線強制升級

    1. 從 Vertex AI 到 Agent Platform:一場平台級遷徙

    根據官方與社群資訊:

    • 現有 Vertex AI 工作負載暫時可用,但未來新功能會集中到 Gemini Enterprise Agent Platform
    • 管理面從「模型與 endpoint」轉向「Agent、工具、workflow、治理策略」。

    這對技術與組織意味著:

    • 技術債
    • 你原本只需要管理模型調用與 API;
    • 未來你得面對「多 Agent workflow、工具授權、長時間任務狀態」,整套 observability 堆棧要重設。
    • 技能債
    • 既有的 GCP / Vertex 證照與 best practice 會過期;
    • Google 也已在暗示考試與教材要轉到「Agentic AI」語境,整個人才市場要重新學一次「怎麼設計可治理的 Agent」
    • 風險分散難度增加
    • 理論上 Platform 支援 Gemini、Gemma、Claude 等 多模型 載入,看似有助避免單一模型綁定;
    • 但實務上,你會在 編排層、權限層、審計層 更深度綁在 Google 上——真正被鎖住的不是模型,而是「整個業務自動化流程」。

    2. 新訂閱與計價模式:Agent 化的商業槓桿

    Google 在 I/O 上同步推出:

    • 三階訂閱方案(約 $7.99〜$99.99 / 月),
    • 由傳統「每日 prompt 次數」改成「以算力消耗為基礎的計價」。

    在 Agent 世界,這個改變的含義完全不同:

    • Chatbot 時代:一次問答、一次扣費,行為與成本高度可見;
    • Agent 時代:
    • 一個「幫我處理退款」的指令,可能啟動 多輪對話、多 API 調用、多服務登入
    • 成本與風險都變成「後面那團看不見的自動工作流」。

    💡 關鍵: 從「算每次問答」變成「算整個工作流的算力」,讓成本與風險都更不透明,也更容易失控。

    對企業 CFO 與 CISO 與 CISO 來說,這會變成新問題:

    • 成本預估難度暴漲:每個 Agent workflow 都是變動路徑,很難做傳統的容量規畫。
    • 安全事件的邊界模糊:Agent 一路往下串:CRM、ERP、文件庫、郵件、甚至財務系統,你得回答:
    • 這條鏈中,哪一段是「AI 自主決策」?
    • 哪一段有人工審批?
    • 出事時是 API 權限設太大,還是 Agent 推理失誤?

    3. 安全現實:我們還停留在「聊天機器人心態」

    今年 OWASP 首度發布 AI Agent Top 10,再加上業界調查指出:約 88% 的企業已經遭遇過 AI Agent 相關安全事故。這兩個數字在這波 Google Agent 大躍進下特別刺眼。

    💡 關鍵: 在約 88% 的企業已經踩過 Agent 安全坑的情況下,把核心流程完全交給雲端 Agent,是在放大原本就存在的風險。

    問題在於:

    • 過去我們習慣把 LLM 當成「會亂講話的搜尋引擎」,風險多半落在內容層(洩漏、幻覺)。
    • 現在 Google 用平台級力量鼓勵的是:「讓 Agent 連到你一切系統,自己去做事」。

    但多數企業在:

    • 權限模型 還停在「service account 能用就好」;
    • 風險評估 還停在「不要讓機密資料出現在 prompt」;
    • 治理機制 還停在「偶爾做一下 log review」。

    在這個前提下,直接衝上 Agent 時代,等於是:用真實帳號、真實錢包、真實生產數據,當這一輪平台戰的壓注籌碼。


    三、對一般使用者與社會:真正的瓶頸不是智力,是信任邊界

    今年 I/O 的幾個 demo,其實已經踩到一般人信任的紅線:

    • Universal Cart:讓 Agent 幫你花錢
    • 在 Search、Gemini 對話、甚至未來的 YouTube、Gmail 中,商品可以一路進到一個 跨零售商的「通用購物車」,付款直接走 Google。
    • Agent 可以替你追蹤價格、比價、提醒庫存與折扣——下一步就是「幫你自動下單」。
    • Gmail「會說話的信箱」
    • 你不再只是關鍵字搜尋,而是用語音問:「幫我找上次跟保險公司談車禍理賠那封信」;
    • 再下一步就是:「幫我回這封信說我接受方案」——郵件決策被半自動化
    • 車載 Gemini + Volvo 外部攝影機
    • 讓 AI 即時讀取路邊標誌,解釋停車規則,一路延伸到更多駕駛決策輔助。

    這些都指向同一件事:AI 代理不再活在瀏覽器分頁,而是長駐在你的生活背景,有視覺、有麥克風、有支付能力,還讀得懂你的郵件與工作流程。

    正如有篇被轉貼討論的觀點說的:AI Agent 的下一個難關不是智力,而是信任

    • 你願不願意讓一個 長駐的 Google 代理
    • 自動幫你續訂訂閱、取消服務、處理退款?
    • 帶著你的 Gmail、行事曆,在背景幫你改變現實世界的狀態?

    在 AGI 倒數敘事之下,這個問題會更尖銳:

    • 一手說「幾年內 AGI、解決所有疾病」,
    • 一手把 Agent 深埋進雲端基建與個人生活

    這兩條敘事疊在一起,實際上是把社會的信任門檻推到極限。 在安全標準、責任邊界與退出機制還沒成熟之前,整個社會正在接受一個事實:

    我們願意用真實的金流與個人資料,去替幾家巨頭驗證「Agent 能不能真的運作」。


    結語:不是要不要用 Agent,而是你敢綁多深、多久

    回到一開始的問題:Google 把全家桶推上 Agent 架構,這件事到底意味著什麼?

    我的判斷是:

    • 技術面:這很可能是這一輪雲與 AI 平台戰的真正分水嶺——應用從「app」變成「長駐、連網、有權限的 AI 代理」。
    • 產業面:誰先把 Agent 做成可運維、可審計、可計費的基礎設施,誰就拿到下一代雲平台的定價權與標準制定權。
    • 風險面:在安全治理、責任歸屬、用戶信任機制尚未成熟之前,整個產業都在用真實系統與真實權限當賭注

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

    1. 接受「Agent 將成為標配」,但拒絕「單一平台鎖死核心業務」
    2. 在架構上刻意設計 可替換的 Agent 執行層,至少保留多雲 / 自建選項。
    3. 把「業務規則、風險閾值、合規邊界」放在自己控制的中介層,而不是直接寫死在某家 Agent Platform 的 DSL 裡。
    4. 把安全與治理視為專案主軸,而不是附加條款
    5. 對照 OWASP AI Agent Top 10,為每條風險設計具體控制點(權限分割、人工審批、行為審計)。
    6. 評估任何 Agent 專案時,把「出錯時如何停機、如何回滾、如何追責」當成必答題,而不是事後補考。
    7. 建立「可退出」機制,寫在採用決策的一開始
    8. 明文規範:如果未來要從 Google Agent Platform 換到別家,資料、workflow 定義、審計記錄要怎麼抽離
    9. 用這組標準去談合約與技術選型,而不是在全面上線後才想起來。

    Google 的 Agent 大佈局值得用,但更值得被嚴格談條件。 真正成熟的態度是:把它當成可替換的強大執行層,而不是讓它變成你整個業務的「唯一神經系統」。

    🚀 你現在可以做的事

    • 去看一次 Google I/O 關於 Gemini Enterprise Agent Platform 的技術文件,列出你現有架構中會被影響的部分
    • 對照 OWASP AI Agent Top 10,替你正在規劃或已上線的任一個 Agent 專案做一次風險盤點
    • 起草一份「從單一 Agent 平台退出 / 轉移」的技術與合約需求清單,帶進下一次和雲端供應商的談判
  • SmallCode 架構:讓 4B 模型也能帶專案

    SmallCode 架構:讓 4B 模型也能帶專案

    📌 本文重點

    • 小模型不適合搭配太多零碎 tools
    • 用少量 compound tools 封裝整個工作流
    • 加上可控 improvement loop 提升穩定性
    • 本地 4B 模型也能跑實用 coding agent

    在本地用 4B Gemma 這種小模型帶一個中大型 repo,傳統做法是「LLM + 一堆小工具」:讀檔、寫檔、跑測試、grep 全部拆成獨立 tool。結果大多數人遇到的狀況是:上下文爆炸、工具呼叫瘋狂往返、推理鏈斷裂,小模型最後只會在錯誤訊息上打轉。SmallCode 的重點就是把這些多步操作 封裝成少量高階 compound tools,加上一個可控的 improvement loop,讓 4B 模型也能穩定完成多檔案、反覆修改的任務。


    重點說明

    1. 為什麼「LLM + 一堆小工具」在小模型上會崩盤

    從工程視角,小模型掛點原因其實很單純:

    1. 上下文爆炸
    2. 每呼叫一次 read_filesearchrun_tests,LLM 就要重新看到整段對話 + 工具 I/O。
    3. 小模型 context 小、壓縮能力差,於是早期決策被擠掉,任務計畫完全失憶

    💡 關鍵: 小模型的 context 與壓縮能力有限,多工具頻繁往返會迅速擠掉關鍵決策,導致任務中途失憶。

    1. 頻繁往返 + 推理鏈斷裂
    2. 多工具設計變成:LLM → read_file → 回答 → write_file → 回答 → run_tests ...
    3. 每一步都要模型自己想「下一步該用什麼工具」,對小模型來說元認知成本太高,很容易在第 3、4 步就跑偏。

    4. 錯誤訊息解析太細碎

    5. 錯誤訊息來了:run_tests → 報一堆 stacktrace → LLM 要自己決定要再 read_file 哪幾個檔案。
    6. 4B 模型常常讀錯檔或只讀到片段,最後修 bug 幻覺化。

    SmallCode 的做法是:把「讀檔 → 修改 → 測試」這個典型工作流視為一個原子操作,交給 compound tool 內部處理,LLM 只需要決定「要不要再試一次?」。


    2. Compound Tools:把多步工作流變成一個 API

    設計思路可以簡化成三件事:

    1. 把多步操作拉到工具內執行
    2. 典型例子:edit_and_test
      • 根據指定 glob pattern 讀檔
      • 在本地套用 LLM patch(或簡單模板)
      • 寫回檔案
      • pytest / npm test,收集輸出
    3. 對 LLM 而言,這整件事就是 一次工具呼叫 + 一個結構化結果

    4. 清楚定義輸入 / 輸出 Schema

    輸入 Schema(JSON Schema 或 Pydantic)範例:

    python
    class EditAndTestInput(BaseModel):
    goal: str # 自然語言:『讓 tests/test_api.py 全部通過』
    target_files: List[str] # ['src/api.py', 'tests/test_api.py']
    test_command: str = "pytest -q"
    max_edits: int = 3

    輸出 Schema:

    “`python
    class EditSummary(BaseModel):
    file: str
    diff: str # unified diff

    class EditAndTestOutput(BaseModel):
    success: bool
    edits: List[EditSummary]
    test_output: str
    error_summary: Optional[str]
    “`

    重點是讓小模型只要關注:有沒有成功?改了哪些檔?錯在哪裡?

    1. 在一次工具呼叫中完成工作流

    Tool handler(Python 假想範例):

    “`python
    def edit_and_test_tool(payload: EditAndTestInput) -> EditAndTestOutput:
    # 1. 收斂上下文:只讀需要的檔案內容
    files = {f: Path(f).read_text() for f in payload.target_files}

       # 2. 呼叫同一個或更小的 LLM 產生 patch(可本地或子進程)
       patch = call_llm_generate_patch(goal=payload.goal, files=files)
       edits = apply_patch_to_files(patch)
    
       # 3. 寫回檔案
       for e in edits:
           Path(e.file).write_text(e.new_content)
    
       # 4. 跑測試
       ok, test_output = run_command(payload.test_command)
    
       return EditAndTestOutput(
           success=ok,
           edits=[
               EditSummary(file=e.file, diff=e.diff)
               for e in edits
           ],
           test_output=test_output,
           error_summary=None if ok else summarize_test_output(test_output),
       )
    

    “`

    好處:主 agent 模型只要發出一個 edit_and_test 呼叫,不用自己 orchestrate read_filewrite_filerun_tests,大幅降低 思考步數context 髒亂度


    3. Improvement Loop:可控的自我改進迴圈

    SmallCode 成效好的關鍵是:讓 retry 變成一級公民,而不是「失敗就結束」。

    1. 失敗偵測策略
    2. 以 compound tool 的輸出為主,不讓模型自己猜:
      • success == False
      • test_output 中出現關鍵字(FAILEDTracebackAssertionError
    3. 這樣 loop controller 可以用硬邏輯判斷下一步,不依賴 LLM 理解每一行 stacktrace。

    4. 重試策略

    簡單可用的架構:

    “`python
    MAX_ATTEMPTS = 5

    for attempt in range(1, MAX_ATTEMPTS + 1):
    tool_result = edit_and_test_tool(input_payload)

       if tool_result.success:
           break
    
       feedback = build_feedback_prompt(tool_result)
       input_payload.goal = feedback  # 將錯誤摘要回餵給模型
    

    “`

    build_feedback_prompt 可以把 error_summary + 失敗測試名稱打包,讓下一輪 LLM 更聚焦。

    1. 避免無限 loop 的做法
    2. 硬限制MAX_ATTEMPTS、最大 wall time。
    3. 檢查 edits 是否變化:若連續兩次 diff 幾乎一樣(甚至相同 hash),就早停。
    4. error signature 去重:同一個 assertion / stacktrace 重複出現 N 次就停止,標記為「需要人介入」。

    這樣,4B 模型只要能理解「這次錯在哪裡、我還有幾次機會」,就足以在迴圈中持續收斂。


    4. 在本地 4B 模型上的部署實務

    Gemma 2 4B 為例,用 llama.cpp / Ollama 都可以吃得很順,但細節會影響體驗:

    1. 記憶體與延遲粗估
    2. 4B Q4_K_M:VRAM 約 3–4 GB;Q6 大概 5–6 GB。
    3. context 8k、推理 1 token ≈ 10–40 ms,視 CPU/GPU 而定。
    4. agent 架構推薦:主模型用中量化(Q4/Q5)+ MTP(若硬體支援),工具內部幫忙 patch 的模型可以更小或更低位元。

    💡 關鍵: Gemma 2 4B 在 Q4 量化、約 3–4 GB VRAM 和 8k context 下即可順暢運行,適合作為本地實用 coding agent 的基礎。

    1. llama.cpp 整合範例

    bash
    # 轉 GGUF 後
    ./llama-cli \
    -m gemma-2-4b-q4_k_m.gguf \
    -c 8192 \
    -ngl 35 \ # offload 到 GPU layer 數
    --temp 0.2 \
    --top-p 0.9

    在你的 agent server(Python)裡包一層簡單的 HTTP:

    “`python
    from llama_cpp import Llama

    llm = Llama(model_path=”gemma-2-4b-q4_k_m.gguf”, n_ctx=8192)

    def chat(messages):
    return llm.create_chat_completion(
    messages=messages,
    tools=TOOLS_SCHEMA, # compound tools 定義
    )
    “`

    1. Ollama 整合範例

    yaml
    # Modelfile
    FROM gemma2:4b
    PARAMETER temperature 0.2
    PARAMETER num_ctx 8192

    Python 呼叫:

    “`python
    import requests, json

    def ollama_chat(messages, tools=None):
    payload = {“model”: “gemma2-4b”, “messages”: messages}
    if tools:
    payload[“tools”] = tools
    r = requests.post(“http://localhost:11434/api/chat”, json=payload)
    return r.json()
    “`

    注意:不要貪心開太大 context,4B 小模型在 16k context 上的品質掉得很明顯,8k 左右通常較穩定。


    實作範例:簡化版 SmallCode 架構

    以下是一個「可以直接改造」的最小可行架構:

    # 1. 定義 compound tools
    TOOLS_SCHEMA = [
        {
            "type": "function",
            "function": {
                "name": "edit_and_test",
                "description": "Edit target files to satisfy goal and run tests.",
                "parameters": EditAndTestInput.model_json_schema(),
            },
        },
    ]
    
    # 2. Agent 迴圈
    
    def coding_agent(task_description: str):
        messages = [
            {"role": "system", "content": "你是嚴謹的資深工程師,專注讓測試通過。"},
            {"role": "user", "content": task_description},
        ]
    
        for attempt in range(1, 6):
            resp = ollama_chat(messages, tools=TOOLS_SCHEMA)
            choice = resp["message"]
    
            if "tool_calls" not in choice:
                # 當成總結
                return choice["content"]
    
            for tool_call in choice["tool_calls"]:
                if tool_call["function"]["name"] == "edit_and_test":
                    args = json.loads(tool_call["function"]["arguments"])
                    result = edit_and_test_tool(EditAndTestInput(**args))
    
                    # 記錄 tool 結果
                    messages.append({
                        "role": "tool",
                        "name": "edit_and_test",
                        "content": result.model_dump_json(),
                    })
    
                    if result.success:
                        messages.append({
                            "role": "user",
                            "content": "測試已通過,請簡要總結你做了什麼修改。",
                        })
                        final = ollama_chat(messages)
                        return final["message"]["content"]
    
        return "多次嘗試仍未通過測試,請人工檢查。"
    

    實際好處:
    – 你不需要讓 4B 模型自己 orchestrate 所有 file ops,只決定「目標」和「是否繼續嘗試」。
    – 迴圈與成功判斷在 host 程式碼內可觀測、可監控,易於 debug。


    建議與注意事項

    1. tool 太細 vs 太粗的 trade-off
    2. 太細:read_filewrite_filerun_tests 分開 → 小模型迷路。
    3. 太粗:一個 tool 內藏太多隱含狀態 → 工具結果難以解釋與監控。
    4. 建議:以「一次迴圈可解決的一個明確目標」為單位設計 compound tool,例如:edit_and_test_suiteadd_feature_and_generate_tests

    5. 錯誤訊息解析策略

    6. 不要把整個 test log 丟給小模型,先在 host 端做:
      • 只保留最後一個錯誤 block
      • 摘要檔名、行號、錯誤訊息
    7. 這樣可以避免 4B 模型被 1k tokens 的 noisy log 淹沒。

    8. 測試覆蓋率不足導致的幻覺修 bug

    9. 如果只有 1–2 個測試,小模型會傾向「只讓這兩個測試過」而破壞其他邏輯。
    10. 實務上:

      • 優先在 agent pipeline 前補上最小必要測試
      • 或在 tool 裡檢查 diff 是否只動到相關檔案/區塊(heuristic)。
    11. 如何監控與記錄 agent 決策

    12. 每一次迴圈記錄:
      • 使用的 tool 名稱 + 輸入參數
      • diff 摘要(檔名、行數、行數變化量)
      • test command 與結果(pass/fail、耗時)
    13. 建議:

    text
    logs/
    session-2025-05-21T12-34-56Z/
    step-01-request.json
    step-01-edit_and_test-input.json
    step-01-edit_and_test-output.json
    step-01-diff.patch

    之後你可以回放整個 session,分析為什麼某一輪跑偏,進而調整 tool schema 或 system prompt。


    總結:如果你想在本地 4B 模型上做實用的 coding agent,不要再堆滿十幾個零碎 tools。把關鍵工作流收斂成少量 compound tools,加上一個明確可控的 improvement loop,再配合 llama.cpp / Ollama 的輕量部署,就能把原本只敢交給 GPT-級別模型的任務,下放到可自託管的小模型上。


    🚀 你現在可以做的事

    • 在現有 agent 專案中,把零碎的 read_file / write_file / run_tests 整合成一個 edit_and_test compound tool
    • 用 Gemma 2 4B + Ollama 或 llama.cpp 在本地啟一個 8k context、Q4 量化的測試環境
    • 為你的 repo 實作一個最小版 improvement loop,限制 MAX_ATTEMPTS 並記錄每次 diff 與測試結果
  • 96 個 Gemini Agent 幫你寫系統?

    96 個 Gemini Agent 幫你寫系統?

    📌 本文重點

    • 多 Agent 可複製「多人分工」開發流程
    • Runtime 設計比單純換更大模型更關鍵
    • 用開源工具就能打造迷你版 Antigravity

    用一群 Agent 代替「一個工程師慢慢寫」,解決的是:複雜專案要靠多人分工,AI 也可以用 Runtime + 多代理系統做到同樣的協作和自動化

    核心觀念先講白:模型戰爭差不多打完了,現在比的是誰的 Agent Runtime 能把「模型能力」變成可落地的、多步驟的自動化工作流。

    Google 在 I/O 上展示的 Antigravity 2.0 + Gemini 3.5 Flash 是一個很極端的例子:

    • 96 個子代理分工
    • 12 小時寫完一套從零開始的作業系統
    • Token 成本不到 1,000 美金
    • OS 還能跑《Doom》

    💡 關鍵: 多代理 + 強 Runtime 已經能在「12 小時、不到 1,000 美金」內完成從零開發 OS,顯示關鍵瓶頸不再是模型本身,而是協作與流程設計。

    這不是叫你明天也去做一個 OS,而是提供一個「如何設計多 Agent 開發流程」的範本。下面我們拆成三件你可以直接抄的事:

    1. 多代理分工設計:任務 → 子任務 → Agent 編隊
    2. 強健 Runtime:重試、檢查點、錯誤恢復
    3. 平價版本實作:在你自己的專案做一個「迷你 Antigravity」

    核心功能:Antigravity 2.0 給開發者的三個啟示

    1. 多代理分工:任務 → 子任務 → Agent 編隊

    Antigravity 的做法,其實很像你帶一個遠端工程團隊:

    • 架構師 Agent:決定 OS 的模組切分(檔案系統、排程、驅動、UI…)
    • 模組作者 Agent:各自負責某一個模組的程式碼生成
    • 測試員 Agent:寫測試、跑測試、收斂錯誤
    • 整合者 Agent:把各模組組合、處理相依性、打包成可啟動的系統

    對你來說,可直接套用成一個通用流程:

    1. 寫一個頂層任務描述
      例:建立一個 RESTful CRUD 服務,管理任務(待辦事項),含 API、DB schema、簡單前端。

    2. 讓「架構師 Agent」自動拆解

    3. API 設計與 OpenAPI spec

    4. 後端框架與資料庫層
    5. 前端 UI
    6. 測試與 CI script

    7. 為每個子任務設計 Agent 角色

    8. api-architect-agent:只產出 API spec

    9. backend-agent:根據 spec 產生程式碼
    10. frontend-agent:負責 UI
    11. tester-agent:生成並執行測試
    12. integrator-agent:檢查專案結構、跑 build / lint

    13. 在 Runtime 中定義工作流

    14. 任務圖(DAG):架構師 → 模組作者 → 測試員 → 整合者

    15. 每個節點定義輸入/輸出檔案、工具(Git、DB、HTTP client)

    可行動步驟:

    • 選一個你熟的框架(例如 FastAPI / Next.js
    • 用自然語言寫清楚「最終可交付物」
    • 為這個專案定義 3–5 個 Agent 角色,明確限制各自輸入輸出

    2. Runtime 比模型重要:90% 成功率在多步任務會變災難

    多步任務有一個殘酷數學:

    • 假設每一步成功率 90%
    • 要跑 20 步,整體成功率 ≈ 0.9^20 ≈ 12%

    💡 關鍵: 即使單步有 90% 成功率,20 步工作流成功率只剩約 12%,所以不加 Runtime 管控,多步任務幾乎註定失敗。

    這就是為什麼像 Forge 這種開源 guardrails 會被重視:作者實測,一個 8B 模型在多步代理任務上,從 53% 提到 99% 成功率,完全不改模型,只改 Runtime。

    你在自己的「迷你 Antigravity」裡,要做三件事:

    1. 重試與 nudging

    2. 為每個步驟設 max_retries(例如 3 次)

    3. 失敗時自動加上「修正提示」,例如:上一步測試失敗,錯誤訊息如下,請修正而不是重寫整檔。

    4. 檢查點(checkpoint)

    5. 每完成一個重要子任務,就把中間產出存到 Git / DB

    6. 失敗時從最近的檢查點重跑,而不是重頭來

    7. 錯誤恢復流程

    8. 專門的 debug-agent:只看錯誤訊息 & log,產出修復建議

    9. Runtime 層做:自動建立 bug report、開 issue、指派給對應 Agent

    如果你用 Forge,它已內建:

    • Tool-agnostic 重試策略
    • 步驟執行強制與錯誤恢復
    • VRAM-aware context 管理(對本地模型很重要)
    • 評估套件與 Dashboard,可量化成功率

    可行動步驟:

    • 先把現有「單 Agent 自動流程」改成有重試與 checkpoint
    • 對每個任務記錄:總步數、失敗點、重試次數,在 Dashboard 裡看瓶頸

    3. 平價版本:你也能做一個「迷你 Antigravity」

    你不需要 Gemini 3.5 Flash + Google 內部 Runtime 才能玩多 Agent。下面這些工具可以在自家專案做一個縮小版:

    名稱 核心功能 免費方案 適合誰
    Forge 多步代理 guardrails、重試、Dashboard 開源 想提升本地 / 自架 LLM 可靠性的工程師
    llama.cpp + Qwen 本地 Agent 在個人電腦跑本地模型 + 簡易工具調用 開源 想省雲端費用、在內網跑 Agent 的團隊
    MCP 生態(如 OpenAI MCP、各種 server) 統一的工具協議,讓 Agent 調用資料庫、API 等 多數開源 / 免費 想把既有系統暴露為 Agent 工具的後端工程師

    一個實用組合示例:

    • 模型:Qwen 2.5 7B / 14B(透過 llama.cppOllama 跑)
    • Runtime:Forge 當 guardrails
    • 工具層:一組 MCP server(例如 PostgreSQL、HTTP、Filesystem)

    你可以先做一個「自動搭建 CRUD 服務」的迷你 Antigravity:

    1. 使用者輸入需求(自然語言)
    2. architect-agent 產出設計 + 任務拆解
    3. backend-agent + frontend-agent 寫程式碼
    4. tester-agent 自動開發 & 執行測試
    5. integrator-agentbuild 並回報狀態

    適合誰用:三種典型場景

    1. 後端 / 全端工程師:自動化 CRUD 小專案

    你可以把「打造新微服務」變成一個表單:

    • 輸入資料模型 + 幾個業務規則
    • 多 Agent 流程負責 scaffold、API、測試、docker-compose

    行動:從一個只需要 3–5 小時就能手刻完的小服務開始,先讓多 Agent 幫你做到 70–80%,你只負責 code review。


    2. 資料團隊:資料管線與 ETL 任務

    • planner-agent:解析需求、拆成抽取/轉換/載入步驟
    • sql-agent:產生查詢與 view
    • check-agent:比對 row count、品質指標

    行動:挑一個每天都在重複手動跑的 ETL 任務,做成標準流程,讓 Agent 幫你自動生成 SQL + 驗證報表。


    3. 產品 / PM:快速驗證 Side Project

    • 搭配 Gemini 3.5(雲端)或本地 LLM
    • 定義一個「最小可行功能」(例如 landing page + 簡單 API)
    • 用多 Agent 完成第一版,再丟給工程師接手

    行動:每次新點子,給自己一個規則:「先讓多 Agent 寫一版 Demo,我只在最後 2 小時調整。」


    怎麼開始:一個最小可行範例

    這裡給一條「3–5 小時內可完成」的路線,你可以直接照做:

    步驟 1:選模型 + Agent 框架

    • 模型:
    • 想省錢/本地:Qwen 2.5 7B(透過 llama.cppOllama
    • 想雲端無痛:Gemini 3.5 Flash(透過 Google AI Studio
    • Runtime / 框架:
    • 想要 guardrails:裝 Forge
    • 想用現成 MCP:選一個支援 MCP 的 Agent 框架(如 OpenAI 官方 Agent SDK)

    步驟 2:挑一個小系統

    條件:

    • 單服務、沒有第三方整合
    • 你自己寫大約 3–5 小時能完成

    例:任務管理 CRUD API + 簡單 React 前端

    步驟 3:設計任務拆分與 Agent 角色

    1. 任務描述寫成一個 markdown 檔(會給 architect-agent 看)
    2. 在 Runtime 中註冊 4 個 Agent:
    3. architect
    4. backend
    5. frontend
    6. tester/integrator
    7. 為每個 Agent 明確:
    8. 可用工具(Git、Filesystem、HTTP…)
    9. 輸入(上一個 Agent 的輸出 / 檔案)
    10. 必須產出什麼檔案

    步驟 4:加上監控 Dashboard

    • 如果用 Forge:直接啟用它的 Dashboard,看每次工作流的步驟成功率
    • 若自己實作:
    • 為每個步驟記錄:開始時間、結束時間、是否重試
    • 每次失敗時存 log + 輸入輸出到一個資料夾

    步驟 5:只做一件事的迭代

    • 第一版只要求「能跑起來」,不追求漂亮結構
    • 每次失敗,你只調整:
    • 任務拆分是否太粗/太細
    • Agent 提示是否太模糊
    • 重試與 checkpoint 是否設太少

    等到這個小系統穩定後,你才讓 Runtime 去碰更大的專案。


    小結:Runtime 是你的「AI 開發主管」

    Antigravity 2.0 用 96 個 Gemini Agent 寫出一套能跑《Doom》 的 OS,看起來很遠,但背後用到的概念其實都可落在你今天的 side project 上:

    • 把任務拆成 Agent 可接手的小單位
    • 用 Runtime 管控流程,而不是寄望模型每次都猜對
    • 利用開源工具(Forge、llama.cpp、MCP)做出自己的「迷你 Antigravity」

    💡 關鍵: 關鍵不是再換一個更大的模型,而是把現有模型放進可靠的 Runtime,讓它真的「交付」可用產物。

    關鍵不是再換一個更大的模型,而是先把你手上的模型,放進一個可靠的 Runtime 裡,讓它真的幫你「交付」東西。

    🚀 你現在可以做的事

    • 在 GitHub 上看看 Forge 專案,了解多步代理的 guardrails 怎麼設計
    • 挑一個 3–5 小時能手刻完的 CRUD 小服務,照文中的 4 個 Agent 角色拆任務實作一次
    • 把既有的單 Agent 自動化腳本,加上 max_retries 和簡單 checkpoint 機制,量化成功率變化
  • Gemini Spark:24 小時幫你管信與帳的 AI 管家

    Gemini Spark:24 小時幫你管信與帳的 AI 管家

    📌 本文重點

    • Gemini Spark 是深度整合 Gmail / Workspace 的 24/7 AI 管家
    • 透過規則 + 對話自動幫你篩信、寫信、追專案與整理帳單
    • 未來可藉由 MCP 串接各種第三方 App,跨服務自動協作
    • 適合重度依賴 Gmail / Docs 的自由工作者、PM 與一般用戶

    一句話:Gemini Spark 就是常駐在你 Gmail / Workspace 裡的 24 小時 AI 管家,幫你篩信、寫回信、盯專案、看帳單,減少你開 Email、開表單處理瑣事的時間。

    官方介紹與技術背景可參考:Google I/O 報導(The Verge:連結、TechCrunch:連結)。


    為什麼大家都在做 24/7 Agent?Spark 與 OpenClaw 有何不同?

    最近一堆「24 小時 AI Agent」:OpenClaw、各種自動 Agent 平台,核心概念都一樣:不用你每次開聊天框下指令,AI 自己在背景幫你盯事情。

    差別在:

    • OpenClaw 類產品:偏「開發者 / 愛折騰」路線,要自己設計任務、接 API。
    • Gemini Spark:直接長在 Google 生態裡,主打:
    • 深度整合 Gmail / Docs / Sheets / Calendar 等 Workspace
    • 不用寫程式,用「規則 + 對話」就能開啟 workflow
    • 未來可用 Model Context Protocol (MCP) 串接其他服務(如任務管理、財務 App)。

    如果你工作幾乎都在 Gmail + Docs 上,Spark 比自己搭一套 OpenClaw workflow 更省時間、阻力更小。

    💡 關鍵: Spark 把「24/7 Agent」做成內建在你日常工具裡的功能,而不是一個需要你額外架設與維護的系統。


    核心功能 1:Gmail & Workspace 自動化

    Spark 最直接的價值:幫你打理每天那一坨 Email 和文件

    能做什麼?

    1. 自動幫你篩信、分類
    2. 標記「待回覆」「重要客戶」「帳單 / 訂閱」
    3. 把專案相關信件整理到指定標籤或共用資料夾

    4. 自動草擬回信

    5. 依照你的語氣、常用模板,先寫好草稿
    6. 幫你整理長串對話重點,附在回信開頭

    7. 整理文件與表單

    8. 收到表單回覆,Spark 自動更新一份 Sheet
    9. 根據信件附件(合約、簡報)整理成專案說明 Doc

    你可以這樣設:

    • 在 Spark 裡建立規則(概念跟 Filter 很像):
    • 「凡是寄到 @client.com 的信 → 標記『客戶 A』,加上『待處理』,並讓 Spark 草擬回信」
    • 「標題含 ‘Invoice’ 或 ‘Receipt’ → 丟進『報帳』標籤,抄送到財務信箱」

    實作建議:

    • 先只設 1~2 個簡單規則(例如:重要客戶 + 帳單),一週後再慢慢擴充,不然一開始會被通知轟炸。

    核心功能 2:主動提醒與任務追蹤(Information Agents)

    根據 TechCrunch 的說法,Google 這波推出的是一整類「information agents」,可以在背景幫你監控資訊並主動提醒你更新狀態。

    能做什麼?

    1. 盯專案 Deadline、會議後待辦
    2. 讀你的行事曆 + 信件內容
    3. 抓出「需要你回覆 / 決策」的項目,列成待辦
    4. 開會後自動整理會議紀錄,變成「下一步行動清單」

    5. 監控帳單與訂閱扣款(Wired 舉的例子)

    6. 讀信用卡對帳單、訂閱通知信
    7. 找出「新出現的訂閱」「金額異常」
    8. 提醒你哪個訂閱快到期、要漲價

    9. 主動推送重要變化

    10. 類似:
      • 「這週有 3 封同一客戶追問進度,是否要統一回覆?」
      • 「今天有 2 筆金額較大的扣款,是否要確認?」

    你可以這樣設:

    • 設定每日 / 每週摘要:
    • 每天 17:00:一封「今日重要信件 + 待回覆清單」
    • 每週五:一份「本週專案進度 + 下週待辦」
    • 針對帳單:
    • 關鍵字觸發:「含 ‘Payment received’、‘Invoice’、‘Receipt’ → 丟給 Spark 分類 + 每月 1 號幫我整理上個月支出摘要」

    💡 關鍵: 把 Spark 當成「自動生成待辦清單的人」,讓你只在關鍵節點做決策,而不是自己翻信找事做。


    核心功能 3:跨服務協作(靠 MCP 串其他 App)

    Gemini Spark 未來會透過 Model Context Protocol (MCP),把不同 App 的資料拉到同一個「腦袋」裡處理(見 The Verge 報導)。

    意思是:

    • Spark 不只看 Gmail / Docs,可同時讀你在其他服務的內容
    • 比方:Notion、Asana、財務或 CRM 工具(視各家支援情況)

    能做什麼?

    • 新客戶來信 → Spark:
    • 在 CRM 建立客戶資料
    • 開一個 Asana / Jira 任務
    • 建一份 Google Doc 專案說明,丟到共用資料夾

    • 訂閱扣款被偵測到 → Spark:

    • 在你的個人記帳 App / Sheet 新增一筆支出
    • 標注「本月新增訂閱」,月底提醒你是否要取消

    目前這些整合會隨 MCP 生態擴大而補上,你可以優先關注:

    • 你常用的任務管理 / 筆記 App 是否推出「支援 Gemini Spark / MCP」
    • 一旦支援,就可以在 Spark 設定畫面裡授權該服務,讓 Spark 讀取與寫入資料。

    💡 關鍵: MCP 讓 Spark 變成跨 App 的「中樞神經」,未來可以一次處理信件、任務、財務資料,而不是各管各的。


    適合誰用?三個具體場景

    1. Freelancer:用 Spark 管專案信件與合約

    具體做法:

    • 專案信件管線
    • 設定規則:來自特定網域或標題含「Proposal」「Quote」→ 標籤「新案洽談」
    • Spark 自動草擬回信版本:

      • A 版:詢問需求細節
      • B 版:附上報價與時程
    • 合約 / 發票整理

    • Spark 自動把附件中的合約檔案存到對應 Drive 資料夾
    • 依合約內容(時程、金額)生成一列 Sheet:

      • 專案名稱 / 客戶 / 金額 / 付款節點 / 合約到期日
    • 每週專案總覽

    • 每週五 Spark 自動寄給你一份 Doc:
      • 每個專案的最新信件狀態
      • 待你回覆的客戶
      • 即將到期的付款 / 交付

    2. PM:用 Spark 維護「自動更新」專案說明文件

    具體做法:

    • 為每個專案建立一份「Project Brief」Google Doc
    • 跟 Spark 說:
    • 「這份文件是 X 專案的說明書,請未來根據相關 Gmail、會議紀錄、Drive 檔案,自動更新:

      • 成員名單
      • 時程 / 里程碑
      • 需求變更紀錄
      • 風險與依賴」
    • Spark 會:

    • 把會議邀請、會議記錄、需求更動 Email 轉成文件更新
    • 例如:會議後自動新增一段「2026/05/21 需求變更:結帳流程新增 Apple Pay」

    • 你要做的事:

    • 只在 review 時修正重要錯誤
    • 把這份 Doc 當成「單一真實來源」丟給新成員看

    3. 個人:用 Spark 監控訂閱扣款與信用卡帳

    具體做法:

    • 把信用卡帳單寄到固定 Gmail
    • 設定 Spark:
    • 「閱讀所有來自銀行 / 金融機構的信,整理出:
      • 每月訂閱(Netflix、Spotify、雲端服務等)
      • 單筆金額超過 X 元的交易
    • 每月 3 號產一份 Sheet + 一封摘要信送給我。」

    • 實際效果:

    • 你不用每月自己翻 PDF 帳單
    • 一眼看到:新增了哪些訂閱?哪筆支出特別大?要不要取消 / 確認?

    怎麼開始:3 步驟快速上手

    依目前公開資訊,Spark 會逐步在 Gemini App 與 Workspace 釋出,實際入口以你的帳號權限與地區為準。

    步驟一:在 Gemini App / Workspace 開啟 Spark

    1. 更新手機上的 Gemini App 或在瀏覽器開啟 Gemini
    2. 找「Spark」或「Agents」相關入口(通常在側邊欄或設定)。
    3. 若你是 Workspace 使用者,管理員可能要先在後台啟用 Gemini / Spark 功能。

    步驟二:授權 Gmail / Calendar / Drive

    1. 依畫面指示,授權 Spark 存取:
    2. Gmail(讀 / 寫信)
    3. Calendar(讀行程)
    4. Drive(讀 / 建立 Docs、Sheets 等)
    5. 建議做法:
    6. 先只開 Gmail + Calendar,確定運作 OK 再讓 Spark 讀更多資料夾。
    7. 對特別敏感的資料夾,可以
      • 分開到另一個帳號
      • 或在 Drive 設定權限,避免 Spark 看到。

    步驟三:先設 2–3 個「實用預設 workflow」

    先從以下三個開始,感受到價值後再慢慢加:

    1. 自動草擬回信
    2. 規則:
      • 來自特定客戶網域,或標記為「重要」的信 → Spark 產生草稿
    3. 設定你的語氣偏好:正式 / 口語 / 簡短版

    4. 每天 17:00 匯總今日重要信件

    5. 內容包含:

      • 你今天沒有回覆的信
      • 含「deadline」「due」「reminder」等關鍵字的信
      • Spark 生成的回覆建議
    6. 每週專案週報

    7. 若你有固定專案標籤(例如「[Project X]」):
      • 每週五 Spark 讀所有相關信件 + 文件變化
      • 產出一份 Doc:
      • 本週完成事項
      • 開放中的問題
      • 下週計畫建議

    權限與隱私:幾個實務建議

    1. 工作帳號與私人帳號分開
    2. 不要讓 Spark 在同一帳號裡同時看到公司機密 + 私人財務。

    3. 先從低風險資料開始授權

    4. 先讓它管 Newsletter、一般通知信,不要一開始就丟完整信用卡帳單。

    5. 定期檢查 Spark 建立的文件 / 表單

    6. 每週抽查 1–2 份自動產生的 Doc / Sheet,確定沒有誤解或洩漏給錯對象。

    7. 關閉你不需要的來源

    8. 如果覺得 Spark 讀太多東西,就到設定關掉某些資料夾或服務授權。

    結論:如果你每天都被 Gmail 和各種帳單 / 專案信件追著跑,Gemini Spark 的價值不是「會聊天」,而是能在你沒開電腦的時候,幫你持續整理與提醒,讓你只需要在關鍵節點做決定,其他都交給它自動化處理。

    🚀 你現在可以做的事

    • 打開你的 Gmail,先規劃 1–2 個想讓 Spark 自動處理的信件情境(例如:帳單、重要客戶)
    • 在 Gemini / Workspace 中尋找 Spark 入口,完成 Gmail + Calendar 的最低授權並設好這 2 個情境
    • 每週挑固定時間檢查 Spark 自動生成的文件與摘要,根據實際效果微調規則與授權範圍
  • Google 把搜尋變成 AI 入口,開發者被邊緣化了嗎?

    Google 把搜尋變成 AI 入口,開發者被邊緣化了嗎?

    📌 本文重點

    • Google 把搜尋框變成 AI 對話與行動入口
    • 開放網路正被壓縮為「模型原料池」
    • 產品需轉向「為 Agent 設計」與結構化服務層
    • AI 搜尋與代理人需要新一層中立性監管

    這不是「搜尋小改版」,而是一次對整個網路分發權的再集中。Google 把 25 年來幾乎沒變過的搜尋框,升級成可以接收文字、圖片、PDF、影片、甚至 Chrome 分頁的 AI 對話入口,真正被重寫的不是 UI,而是「誰擁有使用者意圖、流量與交易」。對開發者與內容創作者來說,這是一場體驗上的利多,也是生態上的硬著陸考題。


    一個會「做事」的搜尋框,正在抽乾開放網路的水

    根據 VentureBeatThe Verge 的報導,新的搜尋框不再只是關鍵字欄位,而是 AI Overviews + AI Mode + Agents 的總入口:

    • 你貼上一段長文或一份 PDF,它幫你摘要與對比;
    • 你丟入幾個候選連結,它幫你總結、評估優缺點;
    • 你問一個模糊任務,它不只回答案,還呼叫 Spark / information agents 幫你訂行程、整理信箱、規劃活動。

    使用者體驗的確會變好:少跳頁、少比對、少被 SEO 垃圾站浪費時間。Wired 形容未來搜尋是「Vibe-coded results、Super widgets、Bots that never sleep」,本質就是:讓你盡量待在 Google 的結果層,把任務完成在 Google 的 UI 裡。

    問題是:當使用者不再需要點進你的網站,內容與服務的價值是被「引用」了,還是被「抽取」了?

    💡 關鍵: 搜尋結果層完成更多任務,意味著「流量與變現」從網站轉移到 Google 介面本身。

    傳統搜尋模式是:

    使用者意圖 → 搜尋關鍵字 → Google 排序 → 外部網站承接流量 → 在自己場域完成轉化與變現。

    AI 搜尋 + Agents 之後變成:

    使用者意圖 → Gemini / Agents 直接理解與行動 → 在 Google 介面完成絕大部分資訊吸收與操作 → 僅在必要時,少量導流或 API 呼叫外部服務。

    開放網路從「使用者第一站」退位成「模型的原料池」。對資訊消費者是福利,對生態卻是一次結構性抽稅:

    • 廣告與轉化被前置到 Google 層,你只拿到被切薄的尾端流量;
    • 你的內容被整理成 AI Overview 的一行答案,品牌記憶幾乎歸零;
    • 你的工具被代理人「用過」,但使用者從未真正「來過」。

    AI Overviews + Agents:壓縮的不只是媒體,還是整個 SaaS 中層

    TechCrunch 說得很直接:「Google 正在把 Search 從連結列表,變成一個充滿對話答案與自治代理的體驗。」這不只是在頂部多一塊摘要,而是把網路產品的「中層價值」整個吃掉。

    想像幾個本來長得很健康的商業模式:

    • 比價網站、行程規劃工具、學習筆記 SaaS、模板型生產力工具;
    • 甚至許多靠 SEO 拉新、靠 freemium 轉付費的中小產品。

    「搜尋框就是超級 AI 助理」 的世界裡,這些產品的功能會被代理人拆解成幾行「指令」:

    • 使用者不需要逛你的旅遊網站,只要對 Gemini 說「幫我排三天京都行程,偏文青咖啡」;
    • 不需要打開你的待辦工具,Spark 在 Gmail / Calendar 裡就幫他整理成行動項目;
    • 不需要你的比價頁面,AI 直接在 Overview 裡告訴他哪個方案 CP 值最高。

    你被保留的,只剩兩種角色:

    1. 底層供應商:像雲端 API、一個被呼叫一次就付一次錢的「功能積木」,完全在 Google UI 背後工作;
    2. 強品牌或強社群的目的地:使用者是「特地來」你的服務,而不是順便被搜尋結果丟過來。

    中間那一大片靠 SEO + 一般 UX 存活的「中型服務層」,會被 AI Overview + Agents 擠壓得非常難受。這輪浪潮傷的不是沒技術的人,而是只有技術、沒有「被 AI 需要」設計的人。

    💡 關鍵: 介於「底層 API」與「強品牌目的地」之間的中層 SaaS,將是被壓縮最嚴重的一群。


    從搶排名到「為 Agent 設計」:新時代的產品功課

    如果你今天還在開會討論「要不要再請一個 SEO 顧問」,那思路已經落後這波變化至少五年。

    下一階段的關鍵不是「我怎麼在 SERP 上排第一」,而是:

    我怎麼讓 AI 助理與 Agents 更願意、也更容易使用我的服務?

    具體來說,有幾個方向是現在就可以動手的:

    1. 從「給人看的頁面」到「給模型讀的結構」。
    2. 不是只加 schema.org 而已,而是:內容要有穩定結構、清楚標註、可機器解析的上下文;
    3. 把 FAQ、步驟、規格、限制寫得「模型友善」,不要把關鍵資訊藏在 JS 動態或圖片裡。

    4. 把產品拆成清晰的「動作 API」。

    5. 代理人需要的不是你的整個 App,而是一組可被編排的動作:搜尋、比價、預約、支付、匯出報告……
    6. 提供簡潔清楚的 API、Webhook、甚至專門給 AI 用的「意圖對應文件」,讓模型容易學會如何調你。

    7. 為 AI 助理設計「任務型服務層」。

    8. 把自己想像成一個要接入 Gemini / OpenAI / OpenClaw Agents 的第三方技能(類似舊時代的 Alexa Skills,但要更真實地能完成任務);
    9. 你不是在蓋一個入口網站,而是在打造一個能被 Agent 信任、持續呼叫的「專業模組」。

    10. 內容與工具的「品牌化」與「不可替代化」。

    11. AI 可以總結誰都能寫的旅遊資訊,但總結不出你的獨家數據、實測實驗、社群洞察;
    12. 讓別人引用你時,必須連帶提到你的名字與來源,否則就少了關鍵價值。

    未來的流量不是自然長出來的,而是被 Agents 主動路由的。你要做的,是讓自己在這個路由圖裡,變成一個被頻繁選用的節點,而不是一個等人「搜到」的孤島頁面。


    當搜尋巨頭握住「意圖 + 行動 + 交易」:AI 也需要中立性監管

    從公共利益與監管角度看,Google 把搜尋框變成「做所有事的介面」的同時,其實也在握緊三個關鍵環節

    1. 意圖:使用者不只問問題,還把整個上下文、偏好、文件、郵件都交給它理解;
    2. 行動:透過 Gemini SparkInformation agents,讓它代你操作 Gmail、Calendar、Docs、甚至第三方服務;
    3. 交易:搜尋結果裡的推薦、預訂、購買、訂閱,越來越多可以在 Google 的結果層直接完成。

    這意味著什麼?

    • 排序不再只是「哪個連結排前面」,而是「哪個行動被優先執行」。
    • 當它同時是裁判(排序)又是球員(自己的服務與廣告主),「AI 推薦」很容易變成一個更黑箱、更強勢的導流機器。

    如果我們曾經為搜尋廣告、App Store 排名、瀏覽器預設搜尋引擎吵過一輪平台壟斷,那 AI Search + Agents 是更需要提前討論的一層:

    • 是否需要某種形式的 「AI 中立性」要求,例如標註推薦來源、標明自家服務與第三方服務、提供透明的偏好設定?
    • 是否需要強制開放 多家模型、多家代理人供應商 的選擇,而不是只能綁在單一巨頭?
    • 對於依賴搜尋分發的中小內容與產品,是否應有 最基本的能見度與報酬機制,避免被整個「AI 概括回答」吃乾抹淨?

    搜尋巨頭如果成為「AI 時代的作業系統」與「預設代理人」,就不該只用舊時代搜尋引擎的規則來監管。這是下一輪數位監管的核心議題,而不是附帶條款。

    💡 關鍵: 當單一平台同時掌握意圖、行動與交易,傳統搜尋監管框架已不足以制衡其影響力。


    給開發者與創作者的底線建議:停止只做 SEO,開始為 AI 設計

    最後把話說白:這不是「Google 搜尋的升級」,而是「網路分發權的再集中」。

    如果你還在用 2010 年的 SEO 心態 做內容與產品——

    • 把預算花在關鍵字佈局、反向連結、標題黨;
    • 產品設計只想到人類訪客的導覽,不管模型能不能看懂;
    • 成功指標只有「自然流量成長」而不是「被多少工具與 Agent 調用」,

    那麼在未來三到五年,你會發現:

    使用者問題被 AI 在 Google 裡直接解決,你的網站與產品甚至連登場機會都沒有。

    相反地,現在就可以開始:

    • 把你的內容、數據、服務封裝成 結構化、可調用、可組合的服務層
    • 讓你的產品成為 AI 助理與 Agents 的「專業外掛」,而不是等人來點的資訊孤島;
    • 在公司內部 KPI 上,加入「被多少 AI/Agent 使用」這種新指標,而不是只看 Google Analytics 的自然流量圖。

    AI 搜尋與代理人時代並不必然是中小創作者與開發者的末日,但前提是:你願意承認遊戲規則已經換了,並主動把自己變成這個新遊戲裡「不可忽視的一塊」。


    🚀 你現在可以做的事

    • 審視現有網站與內容結構,為模型增加清楚標註與 schema.org 等機器可讀結構
    • 將核心功能整理成清晰的動作型 API 與文件,方便未來被 GeminiOpenAI 等 Agents 調用
    • 在團隊 KPI 中加入「被多少 AI/Agent 使用」指標,重新評估只依賴 SEO 的風險
  • 12-Factor Agents 實戰:讓 Agent 真正上得了線

    12-Factor Agents 實戰:讓 Agent 真正上得了線

    📌 本文重點

    • LLM/Agent 要先抽象成可替換依賴
    • Prompt/Tool/Memory 行為必須版本化與可回滾
    • 觀測性與成本控管是上線前必備基礎
    • 單體腳本可漸進重構為 12-Factor Agents

    多數 Agent demo 都卡在「好酷,但不敢上線」。12-Factor Agents 的目的,就是把 LLM/Agent 拉回正常軟體工程軌道:
    – 不被單一模型綁死,支援熱切換與灰度升級
    – prompt / tool / memory 都能 versioning + 測試 + rollback
    – 有 token-level log、decision trace,出問題找得到責任點

    下面用 12-Factor 觀念,拆成對工程實作有幫助的 4 個面向,最後用一個簡單 multi-agent pipeline 示範如何重構。


    重點說明

    1. 把 LLM/Agent 抽象成可替換的依賴

    核心做法:不要在業務程式碼裡直接綁某個模型 API,而是統一經過一層 LLMClient / AgentRuntime

    關鍵能力:
    – 用 model alias(如 report-writer@v2)取代具體 gpt-4.1-mini / claude-3.7
    – 支援 routing 策略:A/B test、流量分配、fallback
    – 對外只暴露 統一介面complete() / chat() / stream()

    // llm-registry.ts
    export type ModelAlias = 'planner@v1' | 'crawler@v1' | 'analyst@v2';
    
    interface LLMConfig {
      provider: 'openai' | 'anthropic' | 'local';
      model: string;
      maxTokens: number;
      temperature: number;
    }
    
    const REGISTRY: Record<ModelAlias, LLMConfig> = {
      'planner@v1': { provider: 'openai', model: 'gpt-4.1-mini', maxTokens: 1024, temperature: 0.2 },
      'analyst@v2': { provider: 'anthropic', model: 'claude-3.7', maxTokens: 2048, temperature: 0.1 },
      'crawler@v1': { provider: 'local', model: 'llama-3-8b', maxTokens: 512, temperature: 0.3 },
    };
    
    export function getLLMConfig(alias: ModelAlias): LLMConfig {
      return REGISTRY[alias];
    }
    

    業務端只拿 alias:

    // llm-client.ts
    export async function complete(alias: ModelAlias, messages: ChatMessage[]): Promise<string> {
      const cfg = getLLMConfig(alias);
      const client = getProviderClient(cfg.provider); // 封裝 OpenAI / Anthropic SDK
    
      const res = await client.chat({
        model: cfg.model,
        messages,
        max_tokens: cfg.maxTokens,
        temperature: cfg.temperature,
      });
    
      return res.output;
    }
    

    好處
    – 模型升級只改 registry config,不用全 repo 改 model: 'xxx'
    – 可以針對某 alias 做 灰度發布:10% 流量走新模型

    💡 關鍵: 透過 model alias 把模型細節藏在 registry,可以在不動業務程式碼的前提下做灰度升級與快速回滾。

    2. Prompt / Tool / Memory:行為配置要能 versioning + rollout

    對 Agent 而言,行為大多來自「配置」,而不是 code:
    – system prompt
    – tool schema / API 介面
    – memory 策略(context window、摘要邏輯)

    建議把這些都變成 宣告式 config,並且:
    – 每個 Agent 一個 behavior versionplanner@v1.3
    – 行為改動先跑 離線回放測試 + 小流量試 run

    # configs/agents/planner.v1.3.yaml
    name: planner
    version: v1.3
    model_alias: planner@v1
    system_prompt: |
      你是一個專門規劃網站資料收集與分析的技術 PM。
      - 只產出結構化 JSON
      - 不要寫多餘文字
    
    output_schema:
      type: object
      properties:
        crawl_targets:
          type: array
          items:
            type: object
            properties:
              url: { type: string }
              depth: { type: integer, maximum: 2 }
              notes: { type: string }
    
    memory:
      type: redis
      ttl_seconds: 3600
      key_prefix: planner_session_
    

    載入時明確綁定行為版本:

    // agent-loader.ts
    interface AgentSpec {
      name: string;
      version: string;      // e.g. v1.3
      modelAlias: ModelAlias;
      systemPrompt: string;
      outputSchema: JSONSchema;
    }
    
    export function loadAgentSpec(name: string, version: string): AgentSpec {
      const path = `configs/agents/${name}.${version}.yaml`;
      const raw = fs.readFileSync(path, 'utf8');
      const cfg = yaml.parse(raw);
      return {
        name: cfg.name,
        version: cfg.version,
        modelAlias: cfg.model_alias,
        systemPrompt: cfg.system_prompt,
        outputSchema: cfg.output_schema,
      };
    }
    

    好處
    – prompt 調整可以 像發版一樣受控,支援 rollback
    – tool schema 變更(新增欄位、型別改動)有明確 diff,避免隱性 breaking change

    💡 關鍵: 把 prompt、tool、memory 行為寫進版本化 config,可以像管理程式碼一樣管控變更與回滾。

    3. Observability:token-level log + decision trace + retry 策略

    傳統 APM 看不到「LLM 想了什麼」。受《The Rise of Cognitive Observability》啟發,建議:

    1. token-level log / cost log:每次 call 記錄 prompt_tokenscompletion_tokenscost_usd
    2. decision trace:multi-agent 流程中,記下每一步的:
    3. input
    4. output
    5. 使用的 model / behavior version
    6. tool 呼叫與對應結果
    7. 分類錯誤
    8. infra error(timeout、rate limit)→ 可以 retry
    9. cognitive error(推理錯誤、亂寫 schema)→ 需要 prompt/tool 設計調整
    // observability.ts
    export async function tracedLLMCall(params: {
      agent: string;
      behaviorVersion: string;
      modelAlias: ModelAlias;
      messages: ChatMessage[];
      spanId: string;
    }) {
      const start = Date.now();
      try {
        const res = await rawProviderCall(params.modelAlias, params.messages);
    
        logToWarehouse({
          span_id: params.spanId,
          agent: params.agent,
          behavior_version: params.behaviorVersion,
          model_alias: params.modelAlias,
          latency_ms: Date.now() - start,
          prompt_tokens: res.usage.prompt_tokens,
          completion_tokens: res.usage.completion_tokens,
          cost_usd: estimateCost(res.usage, params.modelAlias),
          raw_output: res.output,
        });
    
        return res.output;
      } catch (e) {
        logError({ span_id: params.spanId, agent: params.agent, error: e });
        throw e;
      }
    }
    

    重試策略

    export async function withRetry<T>(fn: () => Promise<T>, opts = { maxAttempts: 3, backoffMs: 500 }) {
      let lastErr;
      for (let i = 0; i < opts.maxAttempts; i++) {
        try { return await fn(); } catch (e: any) {
          lastErr = e;
          if (!isInfraError(e)) break; // 認知錯誤不要盲目重試
          await sleep(opts.backoffMs * (i + 1));
        }
      }
      throw lastErr;
    }
    

    4. Multi-Agent 任務重構:規劃 → 爬蟲 → 分析 → 報告

    目標:把一個看似「單體腳本」的 agent 流程,拆成可觀察、可恢復的 pipeline。

    服務切分
    planner-service:輸入題目 → 輸出 crawl plan
    crawler-service:依照 plan 用傳統爬蟲抓 HTML / 文本
    analyst-service:對資料做分析與結構化結論
    reporter-service:產出自然語言報告

    狀態管理
    – 任務狀態存在 PostgreSQLMongoDBtasksartifacts
    – 中間資料(暫存內容、短期記憶)放 Redis(key = task:{id}:stage

    隊列與超時
    – 使用 Redis Stream / Kafka / RabbitMQ 做 stage 間消息隊列
    – 每個 stage worker 有自己的 timeout + retry + DLQ(死信隊列)

    // pseudo: task Orchestrator
    async function runTask(taskId: string) {
      const spanId = newSpan();
    
      // 1) 規劃
      const plan = await withRetry(() => plannerAgent.run({ taskId, spanId }), { maxAttempts: 2 });
      await saveArtifact(taskId, 'plan', plan);
    
      // 2) 爬蟲(可能 fan-out 多個 URL)
      await enqueueCrawlJobs(taskId, plan.crawl_targets); // 放到 queue
    
      // 3) 等 crawler 全數完成,再觸發 analyst
      await waitForAllCrawls(taskId, { timeoutMs: 300_000 });
      const pages = await loadArtifacts(taskId, 'crawl_result');
    
      const analysis = await withRetry(() => analystAgent.run({ taskId, spanId, pages }), { maxAttempts: 2 });
      await saveArtifact(taskId, 'analysis', analysis);
    
      // 4) 報告
      const report = await reporterAgent.run({ taskId, spanId, analysis });
      await saveArtifact(taskId, 'report', report);
    
      await markTaskDone(taskId);
    }
    

    回退策略
    – 某 stage 連續失敗 → 使用 上一個穩定 behavior version 重跑
    – 報告無法產出 → 回傳「部分完成」狀態 + 中間分析結果給前端呈現


    實作範例

    以下示範如何把「planner」 agent 做到可替換模型、可版本管理、可觀察的最小實作。

    1. Planner Agent 行為定義

    # configs/agents/planner.v1.0.yaml
    name: planner
    version: v1.0
    model_alias: planner@v1
    system_prompt: |
      你負責規劃完成使用者任務所需的爬蟲與分析步驟。
      僅輸出 JSON,符合 output_schema 定義。
    output_schema:
      type: object
      required: [crawl_targets]
      properties:
        crawl_targets:
          type: array
          items:
            type: object
            required: [url]
            properties:
              url: { type: string }
              depth: { type: integer, default: 1 }
              notes: { type: string }
    

    2. 執行 Planner Agent

    // planner-agent.ts
    import { loadAgentSpec } from './agent-loader';
    import { tracedLLMCall } from './observability';
    import Ajv from 'ajv';
    
    const ajv = new Ajv();
    
    export async function runPlanner(taskId: string, goal: string, spanId: string) {
      const spec = loadAgentSpec('planner', 'v1.0');
      const validate = ajv.compile(spec.outputSchema);
    
      const messages = [
        { role: 'system', content: spec.systemPrompt },
        { role: 'user', content: `任務說明:${goal}` },
      ];
    
      const raw = await tracedLLMCall({
        agent: spec.name,
        behaviorVersion: spec.version,
        modelAlias: spec.modelAlias,
        messages,
        spanId,
      });
    
      let json;
      try { json = JSON.parse(raw); } catch {
        throw new Error('planner_output_not_json');
      }
    
      if (!validate(json)) {
        throw new Error('planner_output_schema_mismatch');
      }
    
      await saveArtifact(taskId, 'plan', json); // 存 DB
      return json;
    }
    

    好處
    – output 一旦 JSON 格式錯誤或 schema 不符合,會被明確標記為 cognitive error,方便後續調 prompt / schema
    – 透過 behaviorVersion 追蹤哪一版規劃器造成問題

    3. 成本暴衝防護

    // cost-guard.ts
    const MAX_COST_PER_TASK_USD = 0.5;
    
    export async function guardCost<T>(taskId: string, fn: () => Promise<T>): Promise<T> {
      const costSoFar = await getTaskCostUsd(taskId);
      if (costSoFar > MAX_COST_PER_TASK_USD) {
        throw new Error('task_cost_limit_exceeded');
      }
      const before = costSoFar;
      const res = await fn();
      const after = await getTaskCostUsd(taskId);
    
      if (after - before > 0.2) { // 單次呼叫超過 0.2 USD
        // 觸發告警
        emitAlert({ taskId, deltaCost: after - before });
      }
    
      return res;
    }
    

    tracedLLMCall 包在 guardCost 裡,就能防止 prompt 異常導致 token 疯狂膨脹。

    💡 關鍵: 設定 MAX_COST_PER_TASK_USD 與單次呼叫成本門檻,可以在成本暴衝前主動阻斷與告警。


    建議與注意事項

    1. 模型抽象層一定要一開始就設計好
    2. provider SDK 完全封裝起來(OpenAI、Anthropic、local),對業務端只暴露 統一型別
    3. 不要在 service 裡直接用 openai.chat.completions.create 這種具體 API。

    4. Prompt / Tool 變更要像 schema migration 一樣看待

    5. 每次變更必須 版本號 + changelog,否則 debug 會非常痛苦。
    6. tool 的欄位移除或語意改變,要視為 breaking change,需要同步更新所有使用該 tool 的 Agent。

    7. Observability 優先級要比「多搞幾個 Agent」高

    8. 沒 trace,multi-agent 只會變成 多倍混亂
    9. 最低限度:每一步的輸入、輸出、模型 alias、behavior version、token 用量都要記。

    10. 模型升級前先做 replay test

    11. 從線上 log 抽一批真實任務,對舊模型與新模型跑一遍,對比:

      • 通過率(JSON parse、schema validate)
      • 任務完成率(可部分人工標註)
      • 成本差異
    12. 不要迷信 retry,可以只是讓錯誤變貴

    13. infra error(timeout、429)才值得 retry
    14. cognitive error(結果不符合 schema / business rule)應該記錄下來,調整 prompt 或 tool,而不是盲目重試

    15. 從單體腳本往 12-Factor Agents 過渡的實務建議

    16. 先做 3 件事:
      • 抽出 LLMClient 抽象層
      • 把 prompt / schema 拉到 config + Git 管理
      • 導入最小版 token cost log + decision trace
    17. 等這三件穩定後,再考慮拆成獨立 microservices 或 multi-agent pipeline。

    照著這套把 demo 重構一次,你會發現:
    – 模型換得比較放心
    – 成本能被預期
    – 最重要的是:Agent 行為變得「可觀察、可控」,才有資格進入生產環境。

    🚀 你現在可以做的事

    • 把現有專案中的 openai / anthropic 呼叫封裝成統一的 LLMClient,並導入 model alias registry
    • 將目前的主要 Agent prompt、tool schema 抽出成獨立 config 檔,放進 Git 做版本管理
    • 為一個關鍵任務流程加入 token 用量與 cost_usd 的記錄,並開始對新模型做 replay test
  • Argyph:在本機幫 AI 裝上程式碼大腦

    Argyph:在本機幫 AI 裝上程式碼大腦

    📌 本文重點

    • Argyph 把你的專案變成本機「程式碼大腦」
    • 三層索引:檔案、symbol graph、向量檢索完全離線
    • 可接 Claude / MCP,協助 debug、refactor、大型專案導覽

    你可以把 Argyph 想成「替你的 AI 助理裝一個本機程式碼大腦」,讓它在大專案裡不再只會 grep 和亂抓檔案。

    Argyph GitHub 專案連結原始 Reddit 介紹


    為什麼需要一個「程式碼大腦」?

    一般 AI 助理(包含 Claude、各種 MCP 代理)在大專案裡常見幾個痛點:

    • 只會用關鍵字搜尋(grep),找不到真正關鍵的函式或類別
    • 動不動就把整個檔案塞進 context,還是看不懂整個呼叫鏈
    • 要用語義查詢,就得把程式碼丟上雲端向量庫,卡在隱私與延遲

    Argyph 解決的是:在完全本機的前提下,讓 AI 可以精準定位「哪個函式、在哪個檔、被誰呼叫」,再搭配向量檢索補上語義理解

    💡 關鍵: Argyph 讓 AI 在本機就能理解整個專案結構,不必依賴雲端向量庫或大量 context 塞資料。


    核心功能:三層索引的本機程式碼大腦

    1. 檔案索引:先搞清楚專案長什麼樣

    Argyph 的第一層是「檔案清單」,會掃描整個專案,把所有檔案路徑與基本資訊建成索引。

    你可以立刻拿來做這些事:

    • 問 AI:列出這個 monorepo 裡所有包含 payment 的資料夾與檔案,幫我分類前端 / 後端 / infra
    • 快速導覽:請 AI 幫你列出「所有 migration 檔」、「所有含 config 的檔案」,再逐步打開看

    這一層幾乎等於「強化版 tree + grep」,但 AI 不用自己亂找,它有一份完整的檔案地圖可以參考。

    2. Symbol Graph:函式、類別、呼叫鏈一次串起來

    第二層是重點:Argyph 用 tree-sitter 解析程式碼,建立一個 symbol graph(符號圖)

    • 每個函式、類別、變數變成一個節點
    • 誰呼叫誰、誰繼承誰、誰 import 誰,變成邊

    這代表 AI 不再只看到「文字」,而是有:

    • get_user() 在哪個檔、哪一行
    • 它被哪些 API handler 呼叫
    • 這個 class 的 method 被哪些 service 用到

    你可以這樣用:

    • 問:列出所有呼叫 process_payment 的函式,照檔案列出並解釋呼叫差異
    • 問:幫我畫出 UserService 相關的呼叫鏈,從 HTTP handler 到 DB 層

    這對 debug / refactor / 新人 onboarding 都很實用,因為 AI 能「走呼叫鏈」,不是只看單一檔案。

    💡 關鍵: 有了 symbol graph,AI 可以沿著呼叫鏈追蹤影響範圍,適合用在風險評估與大規模重構。

    3. 向量索引:在本機做語義搜尋

    第三層是向量索引:

    • Argyph 內建向量資料庫與嵌入模型
    • 完全離線,不需要任何 API key

    這允許你用自然語言查詢「概念」而不是關鍵字,例如:

    • 找出專案裡所有處理權限驗證的邏輯,依風險高低幫我摘要
    • 幫我找所有寫死 API key 或憑證的地方,並列出檔案與行號

    向量搜尋是建立在 symbol graph 之上的:AI 可以先找到語義上相近的函式,再搭配呼叫鏈,給出比較完整的分析。

    💡 關鍵: 語義搜尋結合 symbol graph,讓 AI 查的是「概念 + 實際呼叫點」,而不只是模糊的文字相似度。


    適合誰用?三個具體場景

    1. 大型專案導覽與理解舊 codebase

    如果你正在接手一個幾萬行、幾百個檔的專案:

    • 問 AI:幫我整理這個專案的主要模組結構,列出每個模組的 entry point
    • 問 AI:找出所有 user login 流程相關的函式與檔案,畫出流程順序

    實際效果:你不用一個一個資料夾展開找,只要問問題,AI 會用 Argyph 的索引幫你拉出結構化的地圖

    2. 搭配 Claude / MCP 做 refactor 或 bug trace

    Argyph 是一個 MCP server,可以直接接在支援 MCP 的代理上,例如:

    • Claude Desktop / Claude for Web(啟用 MCP)
    • 其他支援 MCP 的本機代理

    實際操作可以是:

    • 問:這個 bug 是某個 API 回傳格式變了,幫我找出所有依賴該 API 回傳結果的地方,評估改動風險
    • 問:我要把舊的 logging library 換成新的,列出所有使用舊 library 的呼叫點,並給我一個逐步 refactor 計畫

    AI 會:

    1. 用 symbol graph 找到所有相關函式與呼叫點
    2. 用向量搜尋補充語義相似的地方(例如命名不一致的 logging)
    3. 把結果給你看,或協助生成 patch(視你的代理能力而定)

    3. 公司內部需要嚴格保護原始碼

    很多團隊不願意把全專案丟上雲端向量庫(法遵 / NDA / 產業規範等):

    • Argyph 是單一 binary,本機跑、不會把程式碼傳到任何外部服務
    • 只做只讀索引:不會幫你修改、commit 或執行程式碼

    適合:

    • 金融、醫療等需嚴格控管原始碼的公司
    • 只允許在內網跑工具的團隊
    • 想先在個人機器上試驗「AI + codebase」的工程師

    你可以放心地讓 AI 在專案裡查來查去,但知道一切都留在你自己的機器或公司網路


    和一般 AI 助理 / 雲端向量庫怎麼比?

    如果你現在已經在用「AI + 專案」的工具,可以參考這個比較。

    名稱 核心功能 免費方案 適合誰
    一般 AI 助理(無) 單純依靠上下文 + grep 視服務而定 小專案、單檔問題
    雲端向量檢索工具 把程式碼上傳雲端做語義搜尋 多有免費層級 不介意程式碼上雲端的團隊
    Argyph 本機三層索引(檔案 + symbol + 向量) 開源免費 想要本機、隱私保護又要強檢索的工程師

    怎麼開始:從安裝到接上 Claude / MCP

    以下是一條「最快能跑起來」的路徑,你可以照著做。

    步驟 1:安裝 Argyph(Rust 單一 binary)

    1. 前往 GitHub Releases
    2. 下載對應你系統的 binary(macOS / Linux / Windows)
    3. 將檔案改名為 argyph(可選),並移到你的 $PATH 例如:
    chmod +x argyph
    mv argyph /usr/local/bin/
    

    若你有 Rust 環境,也可以選擇 cargo install(以官方 README 為準)。

    步驟 2:對你的專案建立索引

    在專案根目錄執行:

    cd /path/to/your/project
    argyph index
    

    接著會發生:

    1. 立即建立檔案索引(可用來問檔案結構)
    2. 持續建立 symbol graph(可用來問呼叫鏈)
    3. 背景生成向量索引(可用來做語義搜尋)

    你可以邊等邊用,因為 Argyph 的設計是每一層建好就能用,不必等全部完成。

    步驟 3:在 Claude / MCP 代理中啟用 Argyph

    以 Claude(支援 MCP)為例,整體步驟大致如下(細節以官方文件為準):

    1. 打開 Claude 的 MCP 設定檔,例如 mcp.config.json
    2. 加入一個 Argyph server 設定:
    {
      "servers": {
        "argyph": {
          "command": "argyph",
          "args": ["server"],
          "env": {
            "ARGYPH_PROJECT_ROOT": "/path/to/your/project"
          }
        }
      }
    }
    
    1. 重新啟動 Claude 或重新載入 MCP 設定

    之後在 Claude 裡,你可以直接用自然語言要求它「用 Argyph 的 context」來回答與專案相關的問題(多數 MCP 代理會自動挑選需要的工具)。


    實用查詢範例:馬上能用的 prompt

    你可以照抄以下查詢,稍微改一下專案名就能套用。

    範例 1:找出所有調用某 API 的地方並總結風險

    「請用 Argyph 的索引幫我:
    1. 找出專案裡所有呼叫 createPaymentSession 的地方,列出檔案路徑與行數。
    2. 對每個呼叫點,說明它在什麼情境被呼叫(例如:checkout、訂閱續費)。
    3. 總結如果我修改這個 API 的回傳格式,可能影響的功能與風險。」

    範例 2:整理某個 domain 的完整呼叫鏈

    「這個專案是單一體 monolith,請用 Argyph 的 symbol graph 幫我:
    1. 找出所有跟 user onboarding 相關的函式與 class。
    2. 以『從 HTTP endpoint → service layer → DB layer』的順序,列出呼叫鏈。
    3. 幫我總結每一層主要職責,方便我之後 refactor。」


    總結:把 AI 當「懂專案的夥伴」,而不是「會寫程式的 autocomplete」

    Argyph 的價值在於:讓 AI 真正理解你的專案結構,而不是在一堆檔案裡瞎猜

    如果你有一個中大型 codebase,又想保持程式碼只待在本機或公司內網,建議可以:

    1. 把 Argyph 裝起來
    2. 對你的主專案掃一輪索引
    3. 在 Claude / MCP 代理裡接上它,從「幫我畫出這個專案的主要模組」這種問題開始試

    你會發現,AI 從「會寫程式」變成了「懂這個專案的同事」。

    🚀 你現在可以做的事

    • Argyph GitHub Releases 下載並安裝 argyph binary
    • 在你主要的專案根目錄執行 argyph index 建立三層索引
    • 打開你的 mcp.config.json,加入 Argyph server 設定並在 Claude / MCP 裡實際問幾個專案問題
  • Cursor Composer 2.5:平價 GPT-5.5 程式助手?

    Cursor Composer 2.5:平價 GPT-5.5 程式助手?

    📌 本文重點

    • Composer 2.5 以更低成本提供接近 GPT‑5.5 / Opus 的程式能力
    • 深度整合 Cursor,可做跨檔與整庫重構
    • 適合接手 70% 可驗證的日常開發任務,替代昂貴模型

    只要用 Cursor 選擇 Composer 2.5,你就能用接近 GPT‑5.5 / Opus 等級的程式助理處理日常開發工作,但花更少的錢。

    參考:Cursor 官方 X 貼文The Decoder 報導


    核心功能:為什麼說它是「低成本高性能」

    1. 基於 Kimi K2.5,對準「寫程式」這件事

    Composer 2.5 建在 Kimi K2.5 模型上,Cursor 官方說明它在訓練時加入了 比前一代多 25 倍的合成任務(synthetic tasks),重點就是:

    💡 關鍵: 多 25 倍合成任務,代表模型在「讀/寫/改程式碼」這類可控任務上被專門強化,而非泛用聊天。

    • 訓練內容更聚焦在「寫程式、改程式、讀程式」這三件事
    • 對多檔案專案、跨語言呼叫(例如 Python + TypeScript)理解更好
    • 對「先看懂再動手改」的任務(重構、查 bug)特別有幫助

    你可以做的事:

    • 把舊專案整個丟進 Cursor workspace,直接問:

      「幫我概述這個專案的資料流,從 API 到 DB。」

    • 預期它對跨檔案邏輯的掌握會比一般純聊天模型更穩定。

    2. 性能接近 GPT‑5.5 / Opus 4.7,但成本更低

    根據 The Decoder 報導,Composer 2.5 在多項基準測試中 接近 GPT‑5.5、Anthropic Opus 4.7 的程式能力,但使用成本卻只要一小部分。

    💡 關鍵: 以「一小部分成本」換到接近 GPT‑5.5 / Opus 水準的程式能力,意味著同樣預算可以支撐更多開發量與更多輪迭代。

    實際體感上,你會得到:

    • 長對話與長檔案表現穩定:不容易「忘記前文」,適合大專案
    • 生成程式碼較少離題:CRUD / API 類需求比較不會「寫歪」
    • 多輪修改成本可控:不用每次都叫 GPT/Claude 出來燒 token

    你可以做的事:

    • 把日常「寫 API、修小 bug、重構單檔」改用 Composer 2.5;
    • 把「產品需求討論、架構設計」這類高風險決策,才交給 GPT‑4.1 / Claude,節省昂貴模型的用量。

    3. 深度整合 Cursor IDE:跨檔讀寫、整庫重構

    Composer 2.5 是為 Cursor 量身調校的模型,搭配 IDE 使用,可以:

    • 跨檔案查找與修改:一次改一整個 feature 涉及的檔案
    • 支援多語言專案:例如前端 React + 後端 Node + Infra IaC 同時理解
    • 直接在側邊欄展示 diff:你可以逐行檢查 AI 提案再決定要不要套用

    你可以做的事:

    • 在專案根目錄使用「Composer」面板,下指令:

      「在不破壞現有 API 行為的前提下,把整個 user 模組改成使用 repository pattern,並維持測試通過。」


    適合誰用?三個具體場景

    1. 日常 CRUD / API 寫作 & 重構舊專案

    典型需求:

    • RESTful API / GraphQL resolver
    • 加上簡單驗證 / 分頁 / 排序
    • 把舊的 callback / promise code 改成 async/await

    在 Cursor 編輯器中,你可以這樣用:

    1. 選取一段老舊程式碼,按 Cmd+K(或右鍵選 AI Command)。
    2. 輸入 prompt:

      「重構這段程式碼:改用 async/await,避免重複邏輯,並維持現有行為不變。」

    3. 檢查 diff,如果 OK 就套用。

    小技巧:對整個檔案重構可用:

    「重構這個檔案並維持測試通過,不要改動對外 export 的介面名稱。」

    — 這句話能提醒模型「不要亂改對外 API」,減少你後面修爆錯誤。


    2. 搭配 Cursor 做「整庫重構」與大規模查改

    當你需要:

    • 把整個專案從 Express 換成 Fastify
    • 把所有 any 慢慢補成正確 TypeScript 型別
    • 把一堆散落函式集中到 service class

    Composer 2.5 的用法會是:

    1. 在 Cursor 開啟專案,確保整個 repo 都在 workspace。
    2. 打開 Composer 面板(左側「火箭」圖示),選擇 Composer 2.5 模型。
    3. 下指令:

      「在整個專案中,將所有 express 相關使用改成 Fastify,保留 API 路徑與回應格式,並更新相關型別定義。每一組改動請分開 commit 欄位說明。」

    Cursor 會:

    • 找出相關檔案
    • 給出一組可檢查的改動

    搭配 git 避免「一鍵改爆」:

    建議流程:

    1. 新開分支
      bash
      git checkout -b refactor/use-fastify
    2. 每次只讓 Composer 改一小塊(例如一個模組、一個資料夾)。
    3. 跑測試再 commit:
      bash
      pnpm test # 或 npm/yarn
      git add .
      git commit -m "refactor: migrate auth module to Fastify"
    4. 改壞了就 git restore .git reset --hard 回到上一次測試通過的點。

    3. 用它取代部分 GPT / Claude 編碼任務,降成本

    你不需要把 GPT / Claude 整個換掉,而是:用 Composer 2.5 接手「可預測、可驗證」的程式任務。

    💡 關鍵: 把約 70% 可驗證的編碼工作交給 Composer 2.5,可在不改工作流程的情況下顯著壓低高價模型帳單。

    適合交給 Composer 2.5 的任務:

    • 寫 CRUD / API handler
    • 轉寫語言(Python ↔ Node、JS ↔ TS)
    • 單檔重構、加 log、補型別
    • 根據錯誤訊息嘗試修 bug(你再跑測試驗證)

    保留給 GPT / Claude 的任務:

    • 探討產品需求、技術決策
    • 大型架構設計、權衡方案
    • 需要多領域知識的解題(例如演算法 + 數學 + 故事情節)

    實作建議:

    • 在 Cursor 預設模型選 Composer 2.5,讓日常操作都走它
    • 只有在遇到明顯超出範圍的需求,再手動切換到 GPT‑4.1 / Claude

    這樣你可以在不改變工作習慣的情況下,實際降低高價模型用量。


    怎麼開始:3 分鐘完成安裝與設定

    1. 安裝 Cursor 與建立 Workspace

    1. 前往官網下載 Cursor:https://www.cursor.com
    2. 安裝後登入(支援 GitHub / Google 帳號)。
    3. File → Open Folder 打開你的專案,Cursor 會自動建立 workspace。

    建議:第一個試驗專案先選有測試的 repo,方便驗證 AI 修改的結果。


    2. 選擇 Composer 2.5 模型

    1. 在右上角模型選單中,選擇 Composer 2.5
    2. 在聊天視窗 / Composer 面板,都可以確認當前使用模型名稱。

    之後你在:

    • Cmd+K 觸發的 inline 指令
    • 側邊欄聊天
    • Composer「在整個專案上操作」

    預設都會走 Composer 2.5(除非你手動切換)。


    3. 實用 prompt 模板:直接複製就能用

    下面幾組可以直接貼在 Cursor 裡,記得根據專案語言調整細節:

    1. 單檔重構 + 保證測試

      「重構這個檔案並維持測試通過:
      1. 保留對外 export 的 function 名稱與參數型別;
      2. 移除重複邏輯,適度抽取 helper;
      3. 將 callback 風格改為 async/await。」

    2. 新增 CRUD API

      「在這個專案的風格下,為 Article 資源新增 CRUD API:
      – 使用現有的 router / controller 架構;
      – 套用與 User 相同的驗證與錯誤處理方式;
      – 寫對應的單元測試並保持現有測試通過。」

    3. 全專案查改 + 小範圍提交
      在 Composer 面板:

      「在整個專案中,把所有 console.log 改成使用既有 logger(src/lib/logger.ts),
      每次只修改單一 module,並清楚標註將被修改的檔案清單。」

    搭配 git 分支與測試,你可以逐步、安全地享受「整庫 AI 重構」,而不是被「一鍵改爆」。


    小結:Composer 2.5 值得你怎麼用?

    • 當作「日常程式夥伴」:CRUD / API、重構舊檔案全部交給它
    • 搭配 Cursor 做跨檔案重構與查改,善用 diff + 測試守門
    • 把昂貴的 GPT / Claude 留給真正需要高思考密度的任務

    如果你已經在支付 OpenAI / Anthropic 的帳單,現在就試著把一週內 70% 的程式任務改交給 Cursor 的 Composer 2.5,實際比較「完成同一個需求時的成本差」,你會更清楚它在你的團隊裡能省下多少錢。

    🚀 你現在可以做的事

    • 下載並安裝 Cursor,建立一個有測試的專案 workspace 試跑 Composer 2.5
    • 在 Cursor 將預設模型改為 Composer 2.5,挑一個舊模組交給它重構並用測試驗證
    • 往後一週刻意記錄「同一類任務用 Composer 2.5 vs GPT/Claude」的實際 token 與時間成本差異
  • 馬斯克敗訴,OpenAI 不是被宣告無罪

    馬斯克敗訴,OpenAI 不是被宣告無罪

    📌 本文重點

    • 判決聚焦程序問題,未觸及 AGI 公共治理核心
    • OpenAI+Anthropic 雙寡頭格局被進一步鞏固
    • 現行監管忽略「市場集中+黑箱模型」結構風險
    • 開發者應保持多供應商與功能性不信任

    這場「馬斯克告不贏 OpenAI」的判決,證明的不是 OpenAI 很清白,而是現行制度根本不知道該怎麼管一個衝向 AGI 的科技巨頭。 在法律技術上,Elon Musk 敗得並不冤;但在產業結構與公共治理上,OpenAI 的勝利只是讓我們更清楚看到權力高度集中、卻缺乏制度性制衡的真空地帶。


    一、這不是「誰比較道德」,而是「誰比較懂程序」

    從判決結果看,陪審團只花約兩小時就否決了馬斯克的三項主張,其中兩項被認定「超過訴訟時效」,最後一項則因程序連動被駁回。

    💡 關鍵: 判決核心在「時間點與程序」而非「道德與公益」,顯示現行法律工具不足以處理 AGI 產業的實質問題。

    這傳遞了幾個訊號:

    1. 法院根本沒有碰實質問題
      這次判決的關鍵字不是「公益」、「背棄初心」,而是statute of limitations(時效)。法官甚至表示本可以「立刻駁回」。也就是說,法院沒有正式回答一個社會真正關心的問題:OpenAI 從非營利轉成超級商業化,是不是對公益承諾的背棄?

    2. 馬斯克輸在證據與時間線,而不是輸在敘事
      在庭審過程中,雙方互指對方是想掌控 AGI 的權力玩家Musk 被描繪成想把通用 AI 收編進自己帝國的人,Sam Altman 則被指控說謊與自利。這些敘事對陪審團來說都很抓馬,但最後真正有法律效力的只有一件事:你是不是太晚來告?

    3. 投資人看到的,是一個「可預測的 OpenAI」
      對資本市場而言,這場官司結局最大的含義是:OpenAI 的股權結構與現行商業模式,短期內不會被法院拆解。 這種「可預測性」就是風險溢價會下降的訊號——投資人可以放心繼續把錢堆到這艘已經在半商業、半研究狀態中暴衝的船上。

    總結這一段:Musk v. Altman 並沒有替我們回答「誰比較值得信任」的問題,只回答了「誰比較會打官司」。 這對治理 AGI 來說幾乎沒有實質幫助。


    二、OpenAI 得勝,市場更靠近「雙寡頭+一票追隨者」

    如果把這場官司當成一場權力博弈,它的產業後果其實比法律後果大得多。

    1. OpenAI+Anthropic 已經拿走近九成營收
      根據 The Information 的數據整理,AI 新創總營收約 800 億美元,其中約 89% 流向了兩家公司: OpenAIAnthropic。這代表什麼?

    2. 前沿模型的算力、人才與客戶幾乎被兩家鎖死

    3. 其他所謂「創新型 AI 新創」,多半只是在兩大模型供應商的 API 上疊 UI

    💡 關鍵: 當約 89% 的 AI 新創營收集中在兩家公司時,市場實質上已朝「雙寡頭」邁進,其議價與規則制定能力將極度強化。

    1. Musk 失敗,替代權力中心短期難成形
      理論上,xAI 或其他玩家本來有機會扮演第三極,至少在敘事上對 OpenAI 形成制衡。但馬斯克在法庭上敗訴,讓他在「OpenAI 叛徒論」這條敘事線上徹底失去主導權——他後續再指控 OpenAI 背棄公益,會更像是輸不起的前創辦人,而不是揭弊者。

    結果就是:

    • 雙寡頭格局被法庭間接「背書」:既然法院不介入,市場就自然往最強兩家集中;
    • 潛在替代中心被削弱:不管你喜不喜歡馬斯克,他至少是少數有能力在計算資源、資本與品牌上挑戰 OpenAI 的人之一。

    • 跟隨者的困境:不是沒技術,是沒護城河
      對其他 AI 新創來說,這次判決最大的訊號是:不要幻想外部「大事件」會幫你重洗牌。 沒有政策介入、沒有反壟斷動作,你只是在「雙寡頭的長尾」上競爭 UI、行銷跟垂直整合能力

    我們因此得到一個不舒服的結論:這場官司在事實上加速了「OpenAI+Anthropic」雙中心秩序的鞏固,卻沒有任何新的公共治理機制被建立。


    三、真正缺席的是「誰來管 AGI」的制度性答案

    從社會信任與監管角度看,這場官司更像是一場昂貴、卻只演給億萬富豪看的預告片。

    1. 多數人已經不相信「把未來交給幾個天才」這套了
      Pew / Gallup 相關調查,多數美國人不信任 AI,也不信任掌舵這些公司的科技領袖。擔憂集中在:

    2. 隱私與資料濫用

    3. 模型決策的黑箱與偏見
    4. 公司「先上線、再道歉」的產品文化

    Musk v. Altman 的庭內互噴,只是把這種不信任具象化:我們真的要把 AGI 這種等級的技術,交給幾個互相爆料、互相告上法院的男人?

    1. 監管正在逼近,但還沒對準「巨頭結構」本身
    2. 歐盟 AI Act 即將全面上路,高風險系統(信用評分、醫療分診、教育評鑑等)要做決策記錄、六個月以上留存、偏差測試與人類監督架構,違者最高可罰3500 萬歐元或全球營收 7%
    3. 在美國,甚至有 MAGA 陣營團體 聯合呼籲政府對「前沿模型」實施強制安全測試,才能上市。

    這些都是必要的一步,但集中在「模型行為」與「特定應用風險」卻很少正面處理兩件事:市場高度集中,以及基礎模型的透明度與可核查性。

    💡 關鍵: 目前監管多聚焦「用在哪」與「做了什麼」,卻極少觸及「誰在掌控」與「可否被外部驗證」,這讓制度性風險持續累積。

    1. 模型安全承諾,在封閉黑箱裡很容易變成行銷台詞
      DystopiaBench 之類的民間測試顯示,號稱「最安全」的封閉模型,在面對包裝精巧、具雙重用途的危險請求時,實際防線遠比官方宣稱脆弱

    當前的治理邏輯是:

    • 公司自己定安全規範、自己測試、自己公佈結果;
    • 監管機構多半只能事後調查,或依賴公司提供的資訊;
    • 公眾則被要求「相信我們正在做正確的事」。

    在這樣的結構下,OpenAI 打贏一次官司,並不等於我們應該更信任它;只代表它更能在現有制度裡操作、並避免被問到真正棘手的問題。


    四、接下來,開發者與使用者可以、也應該做什麼?

    如果不想把未來完全交給幾位彼此看不順眼的億萬富豪,接下來有幾件事是實際可做的:

    1. 對任何單一巨頭保持「功能性不信任」
      使用 OpenAIAnthropic 的服務沒問題,但不要在技術、商業與治理上全面綁死:

    2. 開發時預留多模型 / 多供應商架構,減少 lock-in;

    3. 對安全白皮書與承諾,視為廣告而不是審計報告,能自己驗證的就自己驗證。

    4. 把「合規」當成產品設計的一部分,而不是事後補丁
      尤其是面向歐洲或高風險領域的團隊:

    5. 一開始就設計決策記錄、偏差測試與人類監督流程;

    6. 不要假設「上游巨頭已經處理好」,你在應用層一樣要負責。

    7. 支持多極競爭與公共治理工具

    8. 技術上,多用、也多貢獻 開源模型與工具鏈,讓算力與能力不要只集中在兩三家公司;
    9. 政策上,關注並實際參與(哪怕是簽署、回饋草案)前沿模型強制測試、獨立審計、事故通報制度等討論。

    這場判決短期穩住了 OpenAI 的地位,卻也暴露出一個不再能被忽視的現實:AGI 產業不能再靠公司章程與創辦人道德當保險絲。真正該上場的,是透明的監管機制、多極化的技術競爭,以及更成熟的公共治理工具。 如果我們任由「億萬富豪互告」成為唯一的制衡方式,最終買單的一定不是他們,而是整個社會。

    🚀 你現在可以做的事

    • 檢查既有產品或專案,評估是否能導入多模型、多供應商架構以降低 lock-in 風險
    • 閱讀並比對主要模型供應商的安全白皮書,設計一套自行驗證關鍵風險的流程
    • 在使用開源模型或工具鏈時,順手提交 issue、PR 或回饋,實際參與多極化技術生態的建設
  • 自我優化 LLM Stack 實戰架構

    自我優化 LLM Stack 實戰架構

    📌 本文重點

    • 用結構化 trace 做 LLM observability
    • 以多模型路由平衡成本、延遲、質量
    • 用真實流量自動微調與 A/B 測試
    • 建立安全可控的自動優化閉環

    手動挑模型、改 prompt、算預算,做到上線後你會發現:每個路徑都在燒錢,而且調一次就壞一次。這篇的結論很直接:

    把「觀測 → 評分 → 路由 → 微調」做成閉環,你的 LLM Stack 會自己變便宜、變準、變穩定,而不是靠工程師加班微調。

    下面用一個可落地的架構,示範:
    – 要記哪些欄位才能做 LLM observability
    – 怎麼設計 線上多模型路由(成本 / 延遲 / 質量三者權衡)
    – 用真實流量做 持續微調 + 線上 A/B 測試
    – 如何在 安全可控 的前提下讓這個 loop 自動跑


    重點說明

    1. 觀測是自我優化的資料 API:要記什麼?

    你要的不是 log,而是可以訓練 & 決策的 結構化 trace。一筆 LLM 呼叫最少要記:

    • 請求層級欄位
    • trace_id:關聯前後多次呼叫
    • tenant_id / user_id:用於分群 & 權限
    • task_type:如 summarize, classify, tagging(路由和微調的最重要欄位)
    • 模型與成本欄位
    • model_name:如 gpt-4.1, local-7b-v1
    • input_tokens / output_tokens
    • cost_usd:用 provider 單價事後計算
    • latency_ms:end-to-end 延遲
    • 內容與品質欄位
    • prompt, completion(支援 PII 遮蔽)
    • quality_score:0–1 或 0–100,可來自:
      • 人工評分
      • 規則(例如是否通過 JSON schema)
      • LLM-as-judge 模型給分
    • hallucination_flag / safety_flag:是否被檢測為幻覺或違規

    💡 關鍵: 把每次 LLM 呼叫記成可查詢的結構化 trace,而不是散亂 log,才能支撐路由、微調與監控三種決策。

    這些欄位之後會被用在:
    – 自動模型路由(根據歷史質量 + 成本)
    – 持續微調(從高信心樣本抽訓練資料)
    – 質量監控(模型版本切換時是否退步)

    Torrix 這類自託管 observability 工具已經把大部分欄位幫你設計好了,你只要在程式碼層接上 proxy 或 SDK 即可。


    2. 多模型路由:把成本 / 延遲 / 質量變成可調參數

    目標:對每一類請求,自動選擇「在 SLA 內成本最低、且質量不低於門檻」的模型。

    常見做法:
    1. 用 embedding 對請求做 clustering,找到「相似任務族群」
    2. 在每個 cluster 裡統計:每個 model_name 的平均 quality_score, cost_usd, latency_ms
    3. 設計一個路由 scoring 函數:

    ( \text{score} = w_q · q – w_c · \log(1+cost) – w_l · \log(1+latency) )

    • w_q, w_c, w_l 是你可調的權重(例如 B2B 產品就偏質量,內部工具偏成本)

    在線上:
    – 每次請求先預測 cluster(根據 task_type + embedding)
    – 查表得到該 cluster 下每個模型的歷史 score
    – 選擇 score 最高模型,加上一點探索策略(epsilon-greedy / UCB)確保新模型有被試用機會

    實際好處
    – 把「今天要不要全站切到新模型?」變成連續微調權重的線上學習問題
    – 你只要設定業務指標(每月預算、延遲 SLA),Router 會幫你在可接受範圍內壓成本


    3. 真實流量驅動的持續微調 + A/B 測試

    你不需要標一大堆資料,反而是:
    – 利用線上的 quality_score + hallucination_flag 自動篩樣本
    – 抽取高信心樣本給 7B/8B 模型微調
    – 再把微調後模型放回 Router 做灰度 A/B 測試

    做法可以類似 Reddit 那個案例:
    – 第 1–3 週:用 GPT-4/5.x 當 teacher,產生高品質標註
    – 第 4 週起:用這些資料微調 7B 模型接管特定 task(例如 classify / tagging / summarize
    – 然後透過 Router 把低風險請求(內部標註、非生死決策)逐步導到 7B 模型

    💡 關鍵: 把旗艦模型當 teacher,用真實流量訓練 7B/8B 模型,可以做到品質接近但成本只剩個位數百分比。

    這樣可以做到「95% 與旗艦模型一致,但成本是 2%」的效果。


    實作範例

    下面用一個簡化的 Python 範例,示範:
    – 接上 Torrix 之類 observability
    – 寫一個最小可用的 router
    – 基於線上資料做粗略的微調樣本抽取與 A/B 測試策略


    1. 設計 Trace 結構與上報(以 Torrix HTTP proxy 為例)

    import requests
    import time
    
    TORRIX_PROXY_URL = "http://localhost:8787/proxy"  # Torrix 的 HTTP proxy
    
    MODELS = {
        "fast": "gpt-4o-mini",
        "strong": "gpt-4.1",
        "cheap_local": "local-7b-v1",
    }
    
    
    def call_llm(model_key: str, prompt: str, task_type: str, meta: dict):
        start = time.time()
    
        payload = {
            "model": MODELS[model_key],
            "messages": [{"role": "user", "content": prompt}],
            "temperature": 0.2,
            # 重要:附上自訂 metadata,方便 observability / 分群
            "metadata": {
                "task_type": task_type,
                "user_id": meta.get("user_id"),
                "tenant_id": meta.get("tenant_id"),
            },
        }
    
        # 經由 Torrix proxy 轉發,Torrix 會自動記錄 token, cost, latency 等
        resp = requests.post(TORRIX_PROXY_URL, json=payload)
        resp.raise_for_status()
    
        latency_ms = (time.time() - start) * 1000
        data = resp.json()
    
        return {
            "completion": data["choices"][0]["message"]["content"],
            "latency_ms": latency_ms,
            # token / cost 會在 Torrix 裡算,因此這裡只做最小回傳
        }
    

    實務上你還會再寫一個 async wrapper,確保不堵住整個 API。


    2. 最小可用 Router:基於 task_type + 歷史表現

    假設我們在背景 job 定期從 observability DB 撈聚合數據,產生一個 routing table:

    # 假設這個表是 batch job 每 5 分鐘更新一次
    # 由 observability 系統依 task_type + model 聚合而來
    ROUTING_TABLE = {
        # task_type: {model_key: {"q": quality, "c": cost, "l": latency_ms}}
        "summarize": {
            "fast": {"q": 0.92, "c": 0.002, "l": 800},
            "strong": {"q": 0.96, "c": 0.01,  "l": 1200},
            "cheap_local": {"q": 0.90, "c": 0.0004, "l": 950},
        },
        "classify": {
            "fast": {"q": 0.94, "c": 0.002, "l": 700},
            "cheap_local": {"q": 0.93, "c": 0.0004, "l": 600},
        },
    }
    
    # 路由權重:可透過環境變數或管理介面動態調
    W_Q = 1.0  # 質量
    W_C = 3.0  # 成本敏感度
    W_L = 0.5  # 延遲敏感度
    
    
    def select_model(task_type: str, explore_eps: float = 0.05) -> str:
        import math, random
    
        # 探索: 以小機率隨機挑一個模型,給新模型累積資料機會
        if random.random() < explore_eps:
            return random.choice(list(MODELS.keys()))
    
        stats = ROUTING_TABLE.get(task_type)
        if not stats:
            # 沒有歷史資料時的 fallback 策略
            return "fast"  # 或者直接用強模型保守處理
    
        best_score, best_model = -1e9, None
        for model_key, v in stats.items():
            q, c, l = v["q"], v["c"], v["l"]
            score = W_Q * q - W_C * math.log(1 + c) - W_L * math.log(1 + l)
            if score > best_score:
                best_score, best_model = score, model_key
    
        return best_model or "fast"
    
    
    def handle_user_request(prompt: str, task_type: str, meta: dict):
        model_key = select_model(task_type)
        res = call_llm(model_key, prompt, task_type, meta)
        return res["completion"]
    

    這樣你的 API 層就已經有一個可學習的 router,之後只要讓 batch job 持續更新 ROUTING_TABLE 即可。


    3. 用真實流量抽訓練資料 + A/B 測試策略(偽碼)

    下面的 pseudo code 示意:
    – 如何從 observability DB 抽出高品質樣本
    – 微調本地 7B 模型
    – 灰度放量到 router

    # 1. 從 trace DB 抽樣本(例如從 Torrix 的 SQLite / exports)
    # SELECT prompt, completion, quality_score
    # FROM traces
    # WHERE task_type = 'classify'
    #   AND quality_score >= 0.9
    #   AND hallucination_flag = 0
    #   AND model_name IN ('gpt-4.1', 'gpt-4.5')
    # LIMIT 100_000;
    
    # 2. 整理成 SFT 資料格式
    # {"messages": [{"role": "user", "content": prompt},
    #               {"role": "assistant", "content": completion}]}
    
    # 3. 用你習慣的框架(例如 LlamaFactory / axolotl)做 SFT
    
    # 4. 微調完得到 local-7b-v2,先只在 router 裡給 5% 流量:
    # - 在 ROUTING_TABLE 中,classify 下新增 cheap_local_v2 的統計
    # - select_model() 的 epsilon-greedy 會開始給它少量流量
    
    # 5. 定期比較:
    # - cheap_local_v2 vs cheap_local_v1 vs fast 在同一 task_type 的 quality_score
    # - 只有當 v2 的質量穩定 >= v1,才逐步提高 v2 的預設權重
    

    關鍵是:所有決策依賴線上真實質量分數,而不是人工測幾個 prompt


    建議與注意事項

    1. 資料隱私:觀測≠把所有東西存一份

    • Prompt / Completion 要做:
    • PII 遮蔽(email、電話、身分證、住址)
    • 對敏感欄位做 hash / tokenization,只保留足夠做分群的特徵
    • 如果你使用像 Torrix 這樣的自託管工具:
    • 優先把 SQLite / volume 放在私有網段,避免開放到公網
    • 對離線匯出的 trace 做加密儲存 & 權限控管

    實際風險:一旦 trace 被外流,不只是 prompt 洩漏,連你使用了哪些模型、成本結構都會被看光。


    2. 評分標準漂移(Evaluation Drift)

    當你改了:
    LLM-as-judge 的版本
    – 質量打分 rubric(例如原本只看正確性,後來加入安全性)

    你歷史的 quality_score 就不再可比。建議:

    • 在 trace 裡加上 evaluator_version
    • evaluator_model_name
    • rubric_version(JSON schema 或 hash)
    • 做趨勢分析時,同一條圖上只放同 evaluator_version 的資料
    • 如果要重跑評分,記得把舊分數保留一份,避免回溯分析被污染

    3. 模型切換導致行為不穩定

    多模型路由會遇到一個常見坑:
    – 業務邏輯假設「回傳格式永遠一樣」
    – Router 為了省錢,幫你換成另一個模型
    – 結果 JSON schema 不穩、排序不同、偶爾講幹話 → 下游全部爆掉

    緩解方式:
    – 在 observability 層記錄:schema_valid_flag(是否通過 JSON schema 驗證)
    – 對格式敏感的任務,在 Router 做:
    – 只允許通過 schema 驗證率 > 某門檻的模型
    – 或硬性綁定單一模型,先解決穩定性再談成本
    – 切換模型時先在只讀場景做 shadow traffic:
    – 用新模型跑同一批請求,但不回給使用者,只記分數
    – 分數穩定後再逐步放量


    4. 安全可控的自動 loop:永遠保留手煞車

    即使是自我優化架構,也要留:
    – 全局開關:一個環境變數就可以把 router 關掉,全部打到保守模型
    – 模型白名單:router 只能從白名單裡選,避免誤打到測試中的模型
    – 預算上限:
    – observability 層記累計 cost_usd
    – 一旦超過日/月預算,強制把高單價模型設為 offline

    搭配這些保護,你才敢讓自動 loop 長期自己跑,而不用每天盯帳單。

    💡 關鍵: 有全局開關、白名單與預算上限等「手煞車」,才能放心讓自動優化長期在線運行。


    總結:

    • LLM observability 不是畫漂亮 dashboard,而是提供可訓練 + 可決策的結構化 trace。
    • 多模型路由 把成本 / 延遲 / 質量變成可調參數,用線上真實質量分數自動選模型。
    • 用真實流量微調小模型 + A/B 測試,可以在特定任務上達到旗艦模型 90–95% 的效能,成本卻只要幾%。
    • 同時注意資料隱私、評分標準漂移、模型切換穩定性,並保留手動「手煞車」,你就能讓 LLM Stack 在安全邊界內自己變強、自己變便宜。

    🚀 你現在可以做的事

    • 列出並實作文中提到的 trace 欄位,接上現有 LLM 呼叫流程
    • 寫一個簡單的 select_model(),用歷史 quality_score + cost_usd 做最小可用路由
    • 從線上流量中抽樣高 quality_score、低 hallucination_flag 的請求,整理成 SFT 資料集準備微調小模型