作者: kerwin77106

  • 佛州告 OpenAI:AI 不再是『中立工具』

    佛州告 OpenAI:AI 不再是『中立工具』

    📌 本文重點

    • 佛州訴訟正式挑戰「我們只是工具」的免責邏輯
    • 大模型商業模式將轉向「安全與合規」溢價
    • 開發者需為高風險情境與兒童保護負起二次設計責任
    • 監管將「管出新標準」,適應者才能長期存活

    佛州這一連串對 OpenAI 與 Sam Altman 的訴訟,真正畫掉的是「我們只是工具供應商」這條保護線。接下來,大模型公司要活下去,不再是誰跑得快、誰模型大,而是誰能證明「足夠安全、可追責」。這不是「美國又來管 AI」,而是平台責任從「使用者自負」翻轉成「開發者必須預證安全」的起點。


    一、三類訴訟:從「免責」轉向「設計要負責」

    佛州目前對 OpenAI 的案件,大致可分三條攻擊線:

    1. 暴力事件關聯責任
    2. 佛羅里達州立大學槍擊案 為核心,指控 ChatGPT 在過程中扮演了「促成」或「輔助」角色。
    3. 法律上,這是在試圖打破類似 通訊端點豁免(像當年社群平台喊的『我們只是管道』) 的邏輯,改成:如果你的系統可預見會被用於風險行為,而你沒有合理防範,就有責任。

    4. 兒童保護與不當內容

    5. 另一案直接指控 ChatGPT 對兒童「不安全」,從暴力、色情到精神健康建議都可能越界。
    6. 這非常像當年對 遊戲暴力、菸草行銷給青少年 的訴訟:不是禁掉產品,而是要求嚴格的 年齡分級、突顯警示與使用情境限制

    7. 欺騙性與誤導性商業行為

    8. 佛州檢察長指 OpenAI 與 Altman 在行銷上誇大安全性、弱化風險,構成 deceptive practices
    9. 核心不是「你有風險」,而是「你明知有風險,卻對消費者塑造『這東西安全又可靠』的錯誤期待」。

    💡 關鍵: 佛州不是在控告「AI 有風險」,而是在追究「明知有風險卻營造安全幻覺」的責任邏輯。

    若把這些案子放進歷史脈絡:

    • 菸草案:最後逼出的是「你要標示危害、不能假裝安全」。
    • 社群平台案:爭的是「演算法設計與推薦是不是行為放大的共犯」。
    • 遊戲暴力與兒童內容案:換來的是年齡分級、家長控制與廣告限制。

    佛州這一波,是把這三種戰場疊加在 生成式 AI 平台 上:模型本身的設計、調教、預設值與行銷敘事,都被拉進「可歸責」範圍。


    二、商業與產品路線:AI 公司會被迫長出「安全型商業模式」

    如果法院部分接受佛州的邏輯,對 OpenAI、Google、Anthropic 等大型模型供應商,會有幾個直接後果:

    1. 產品:預設安全,而非「先開放、再補洞」

    • 年齡分級會從「產品說明書」變成「系統級設計」
    • 強制實名或可信年齡驗證,兒童模式預設關閉高風險能力(例如自我診斷、醫療建議、暴力細節描寫)。
    • 類似 Netflix、遊戲主機的 家長儀表板 會變成 LLM 平台標配。
    • 高風險功能將被拆出來,走「白名單/許可制」
    • 例如醫療 triage、心理輔導、投資建議、教育考試輔助,可能需要專門 API、專門審核、專門責任條款。
    • 模型介面會改:更重警示、更頻繁風險提醒、更強硬的內容拒絕——因為這是日後在法庭上可拿出來的「我們盡力了」證據。

    2. 營收:從 Engagement 轉向「合規溢價」

    過去生成式 AI 的隱性 KPI 是:使用時長、對話輪數、日活 / 週活。佛州案如果立下先例,指向的是:

    • 「越黏」不再純粹是好事,而是 潛在風險暴露時間更長,監管眼中等同「你在 push 成癮」。
    • 商業模式會往:
    • 企業合規訂閱:你不是買一個 model,而是買一個「已經通過某些第三方審查、安全聲明、能陪你一起扛責」的服務。
    • 風險分級價目表:低風險通用聊天便宜,高風險領域(醫療、教育、理財)貴,但附帶審查、保險與合規文書。

    💡 關鍵: 真正賺錢的將不只是算力,而是「內建合規和可追責」的整套服務。

    真正會賺錢的,會是「安全與合規」層,而不是單純模型推理算力。


    三、開發者:再也不能說「我只是調用 API」

    對把 frontier model 嵌進自家 App 的開發者,這波風向是關鍵警訊:

    1. 「只是用 OpenAI API」不構成責任豁免
    2. 你如何把模型包裝進產品情境、面向哪種族群、提供哪種提示與預設,都會被視為「二次設計」。
    3. 在兒童、教育、心理健康這些領域,法院很可能認為:你知道這是高風險場景,卻沒做額外防護,就是你的疏忽。

    4. 即將出現的新合約條款:

    5. 用途聲明與使用邊界:平台會要求你在申請 key 時就說明用途,並保留對「高風險用途」的拒絕權與稽核權。
    6. 共同責任與賠償條款(indemnity
      • 平台會要求你承諾不將模型用於特定敏感場景,違反時你要賠平台。
      • 反過來,大客戶會要求平台在某些範圍內承擔產品缺陷責任。
    7. 審查與記錄義務:要求你保留關鍵互動 log,以便事後責任釐清;這會推高你對資料治理的成本。

    8. 一個新 B2B 市場:AI 安全合規服務

    9. 類似「PCI-DSS 協助商」、「GDPR 顧問」那樣,將出現:

      • 專做 prompt safety audit 的顧問公司。
      • 提供 AI 風險評估報告、政策模板、內部使用守則 的 SaaS。
      • 協助設置 內容過濾、年齡驗證、模型組合策略 的第三方套件。
    10. 對 VC 來說,這是新賽道;對開發者來說,這是新成本,也是新護城河:能把合規內建進產品的團隊,會在監管升溫後存活率更高。

    💡 關鍵: 「會寫程式」不再足夠,能把安全與合規做成產品設計能力,才是長期競爭力。


    四、州級實驗室與國際外溢:AI 監管的下一個 3–5 年

    佛州並不是孤例,而是 「州級先開槍,聯邦與國際跟進」 的典型美國路徑。

    • 一邊是 特朗普政府的 AI 行政命令,鼓勵模型自願送交政府做安全測試(「自願」其實半強制)。
    • 另一邊是 佛州這類州檢察長訴訟,直接在法院裡試探 AI 平台責任邊界。

    對歐盟、英國與亞洲監管來說,這等於免費實驗室:

    1. 兒童保護優先立法
    2. 類似「未成年人使用社群媒體」的法案,會直接套用到 AI 聊天、AI 教學助理上。
    3. 關鍵不是 ban,而是 強制年齡驗證、使用時間限制、家長儀表板、預設內容級別

    4. 強制風險揭露與模型標籤

    5. 法律恐要求:對消費者清楚說明模型的 幻覺率、適用與不適用場景
    6. 長期看,可能走向類似「食品營養標示」:AI 服務頁面要清楚列出安全警告與限制。

    7. 高風險用途特別管制

    8. 教育、醫療、心理治療、自動武器相關應用,會被列為 高風險 AI,需要事前審查或登記。
    9. 這與 EU AI Act 的邏輯高度對齊,只是佛州等州在用訴訟把細節推進、提供案例庫。

    結論是:AI 不會被「管死」,但會被「管出一個新標準」——而這個標準,誰先適應,誰就活得久。


    結語:開發者與產品團隊現在就該做的三件事

    如果你是 AI 產品負責人、創業者或技術決策者,佛州這波行動對你最實際的啟示是:

    1. 把安全與年齡保護寫進 PRD,而不是寫在 FAQ
    2. 每一個新功能,都問自己三個問題:

      1. 這功能對兒童是否安全?
      2. 在最糟糕情境下,被濫用時會造成什麼實體/心理/財務傷害?
      3. 我有哪些可驗證的防護(紀錄、警示、拒絕機制)?
    3. 重寫你的「我們是工具」敘事

    4. 面向使用者與投資人,不要再用「我們只是模型供應商」當護身符。
    5. 改成:我們提供的是一個帶有明確風險邊界、記錄機制與事後追責設計的系統。這會是未來的信任貨幣。

    6. 預留法務與合規預算,視之為產品成本的一部分

    7. 早期就找懂資料保護、消費者保護與產品責任的律師看你的 UX、行銷語言與合約。
    8. 將來監管成形時,那些一開始就把「安全、年齡保護、可追責性」視為產品核心的團隊,會直接站在新秩序的起跑線上。

    佛州這次不是在問「AI 要不要被管」,而是在宣告:「沒有安全敘事的 AI 商業模式,將不再被法律接受」。接下來幾年,能活下來的 AI 平台,只會是那些把風險管理做成產品能力,而不是 PR 段子的玩家。

    🚀 你現在可以做的事

    • 回頭檢查自家產品 PRD,為兒童保護與高風險情境補上具體防護設計
    • 盤點你目前使用的 API / 模型供應商,預先準備用途聲明與合規文件
    • 尋找或建立內部「AI 安全與合規」負責人,開始制定使用守則與審查流程
  • 用狀態機把 13GB 小模型變成工程實習生

    用狀態機把 13GB 小模型變成工程實習生

    📌 本文重點

    • 小模型別當全能 Agent,要當被流程管控的小工
    • 用顯式狀態機拆任務,大幅提升穩定性與可回滾性
    • 每步輸出 JSON + schema 驗證,讓小模型也能穩定改碼

    只靠 prompt 堆疊,13GB 本地模型在中大型改碼任務幾乎必翻車:上下文飄掉、一次回錯一堆檔、改到一半忘記需求。把模型包進顯式狀態機,把「一次大任務」拆成可恢復的子任務,可以在不改模型的前提下,大幅提升穩定性、可觀測性與可測試性——正是那篇 13.8GB 模型從 2/10 變成 10/10 的核心做法。

    💡 關鍵: 只改調用方式與流程設計,就能把同一顆 13.8GB 小模型的表現從 2/10 拉到 10/10。


    重點說明

    1. 小模型為什麼在長對話裡特別容易翻車?

    從工程視角,有三個根本原因:

    1. token 預算太小 + 資訊密度太高
      13GB 級(多是 7B〜13B 參數)在 4k–16k context 內要同時塞:需求、專案結構、幾個檔案內容、測試結果、對話歷史,關鍵訊息會被截斷或壓縮到模型抓不到

    2. 上下文漂移(context drift)
      多輪長對話時,你不可能每次都重貼完整需求與檔案。模型只能靠「語意回憶」之前說過什麼,多輪後任務邊界就開始模糊:忘記原本的 constraint、改到不該動的檔案、把舊 bug 當新需求。

    3. 一次性決策成本過高
      傳統「一條大 prompt + chain-of-thought」會在單輪裡要求:理解需求 → 找檔 → 設計改動 → 寫碼 → 自我檢查。這在 token 限制與小模型推理能力下,極易在中間任一步 hallucinate,之後又沒有明確的 rollback 機制。

    關鍵結論: 小模型不適合當「一次性全能 Agent」,更適合當「被嚴格流程控制的小工」,讓狀態機負責 long-term 記憶與決策邊界。

    💡 關鍵: 把 long-term 記憶與流程決策交給狀態機,小模型只做局部推理,能顯著降低翻車率。


    2. 用顯式狀態機拆解大任務:核心設計

    把「改造一個中小型專案」拆成明確的 State + Transition

    常見狀態設計可以是:

    1. DISCOVER_PROJECT:掃描 repo、建立檔案索引
    2. PLAN_CHANGE:根據需求與索引產生修改計畫(檔案清單、步驟)
    3. EDIT_FILE:逐檔案修改(step-by-step)
    4. RUN_TESTS:執行測試、收集結果
    5. ROLLBACK_OR_FIX:測試失敗→嘗試修復或回滾
    6. DONE / FAILED:終止狀態

    每個狀態都只給模型 極簡上下文 + 明確輸入/輸出 schema,例如在 EDIT_FILE

    • 輸入:
    • 需求摘要(短)
    • 該檔案目前內容(或片段)
    • 計畫中對此檔案的變更描述
    • 輸出:
    • 結構化 JSON:{"status": "ok|skip|abort", "patch": "...diff..."}

    轉移條件示例:

    • DISCOVER_PROJECTPLAN_CHANGE:索引成功建立
    • PLAN_CHANGEEDIT_FILE:生成的計畫通過 schema 檢查
    • EDIT_FILERUN_TESTS:所有目標檔案處理完
    • RUN_TESTS
    • 全綠 → DONE
    • 有失敗 + 可定位 → EDIT_FILE (targeted fix)
    • 多次失敗 → ROLLBACK_OR_FIX

    失敗重試策略與超時機制

    • 每個狀態設定 max_retries,例如 2–3 次,超過則標記為 FAILED 或轉 ROLLBACK_OR_FIX
    • 每次 LLM 回應必經:
    • JSON schema 驗證
    • domain guard(例如禁止刪除大量無關 code)
    • 超時機制
    • 單次呼叫 timeout(例如 60s),保障工作流不被卡死
    • 整個工作流 wall-clock timeout(例如 30 分鐘),方便在 CI 或自動化工具中運行

    💡 關鍵: 把重試、超時、回滾寫死在狀態機邏輯裡,比指望 prompt 提醒模型「要小心」可靠太多。


    3. 實作範例:13GB 本地模型改造專案(Python)

    以下是精簡版 pseudo-code,示範如何把本地模型包在狀態機裡,跑 step-by-step 編碼、測試與回滾。假設:

    • 使用 vLLM / llama.cpp server 暴露出 OpenAI-compatible API
    • GPU:3060 12GB,模型用 Q4 / Q5 量化
    import enum
    import json
    import subprocess
    from dataclasses import dataclass
    from typing import Dict, Any, List
    import requests
    
    OPENAI_BASE = "http://localhost:8000/v1"
    MODEL_NAME = "local-13b-q4"
    
    class State(enum.Enum):
        DISCOVER_PROJECT = "DISCOVER_PROJECT"
        PLAN_CHANGE = "PLAN_CHANGE"
        EDIT_FILE = "EDIT_FILE"
        RUN_TESTS = "RUN_TESTS"
        ROLLBACK_OR_FIX = "ROLLBACK_OR_FIX"
        DONE = "DONE"
        FAILED = "FAILED"
    
    @dataclass
    class Context:
        repo_path: str
        requirement: str
        file_index: Dict[str, Any] = None
        plan: List[Dict[str, Any]] = None
        current_file_idx: int = 0
        test_result: str = ""
    
    
    def call_llm(system_prompt: str, user_prompt: str, max_tokens: int = 1024) -> str:
        resp = requests.post(
            f"{OPENAI_BASE}/chat/completions",
            json={
                "model": MODEL_NAME,
                "messages": [
                    {"role": "system", "content": system_prompt},
                    {"role": "user", "content": user_prompt},
                ],
                "temperature": 0.2,
                "max_tokens": max_tokens,
            },
            timeout=60,
        )
        resp.raise_for_status()
        return resp.json()["choices"][0]["message"]["content"]
    
    
    def discover_project(ctx: Context) -> Context:
        # 這裡可以用 ripgrep / fd 產生檔案清單,略
        ctx.file_index = {"files": ["src/a.py", "src/b.py"], "tests": ["tests/test_a.py"]}
        return ctx
    
    
    def plan_change(ctx: Context) -> Context:
        system = """你是資深工程師,輸出 JSON,字段: steps: [{file, description}]。"""
        user = f"需求: {ctx.requirement}\n可修改檔案: {ctx.file_index['files']}\n請產生最多 10 個步驟。"
        raw = call_llm(system, user)
        try:
            plan = json.loads(raw)
        except Exception:
            raise ValueError("PLAN_CHANGE: model output not JSON")
        ctx.plan = plan["steps"]
        ctx.current_file_idx = 0
        return ctx
    
    
    def apply_patch(repo_path: str, file: str, patch: str):
        # 建議用 unified diff + `patch` 指令,這裡簡化處理
        with open(f"{repo_path}/{file}", "w", encoding="utf-8") as f:
            f.write(patch)
    
    
    def edit_file(ctx: Context) -> Context:
        step = ctx.plan[ctx.current_file_idx]
        file_path = step["file"]
        with open(f"{ctx.repo_path}/{file_path}", encoding="utf-8") as f:
            content = f.read()
    
        system = """你只負責修改單一檔案。輸出 JSON: {status, patch}。
        - status: ok | skip | abort
        - patch: 完整檔案內容,不要解釋文字。"""
    
        user = f"需求: {ctx.requirement}\n此步驟: {step['description']}\n原始內容:\n{content[:4000]}"
        raw = call_llm(system, user, max_tokens=2048)
        try:
            out = json.loads(raw)
        except Exception:
            raise ValueError("EDIT_FILE: invalid JSON")
    
        if out["status"] == "ok":
            apply_patch(ctx.repo_path, file_path, out["patch"])
        elif out["status"] == "abort":
            raise RuntimeError("Model aborted edit")
    
        ctx.current_file_idx += 1
        return ctx
    
    
    def run_tests(ctx: Context) -> Context:
        proc = subprocess.run(["pytest"], cwd=ctx.repo_path, capture_output=True, text=True)
        ctx.test_result = proc.stdout + "\n" + proc.stderr
        return ctx
    
    
    def rollback_or_fix(ctx: Context) -> Context:
        # 真實情況應該搭配 git: reset --hard HEAD~1 或建立 branch
        # 這裡示意:交給模型看測試輸出,決定要修哪個檔案
        system = "請從測試輸出中找出最可能需要修改的單一檔案,輸出 JSON: {file, reason}"
        user = ctx.test_result[:4000]
        raw = call_llm(system, user)
        try:
            out = json.loads(raw)
        except Exception:
            raise ValueError("ROLLBACK_OR_FIX: invalid JSON")
    
        # 根據 out['file'] 重新插入 plan
        ctx.plan.insert(ctx.current_file_idx, {"file": out["file"], "description": out["reason"]})
        return ctx
    
    
    def run_state_machine(ctx: Context):
        state = State.DISCOVER_PROJECT
        retries: Dict[State, int] = {s: 0 for s in State}
        MAX_RETRIES = 2
    
        while True:
            try:
                if state == State.DISCOVER_PROJECT:
                    ctx = discover_project(ctx)
                    state = State.PLAN_CHANGE
    
                elif state == State.PLAN_CHANGE:
                    ctx = plan_change(ctx)
                    state = State.EDIT_FILE
    
                elif state == State.EDIT_FILE:
                    if ctx.current_file_idx >= len(ctx.plan):
                        state = State.RUN_TESTS
                    else:
                        ctx = edit_file(ctx)
    
                elif state == State.RUN_TESTS:
                    ctx = run_tests(ctx)
                    if "failed" in ctx.test_result:
                        state = State.ROLLBACK_OR_FIX
                    else:
                        state = State.DONE
    
                elif state == State.ROLLBACK_OR_FIX:
                    ctx = rollback_or_fix(ctx)
                    state = State.EDIT_FILE
    
                elif state in (State.DONE, State.FAILED):
                    return state, ctx
    
            except Exception as e:
                print(f"State {state} error: {e}")
                retries[state] += 1
                if retries[state] > MAX_RETRIES:
                    return State.FAILED, ctx
    
    
    if __name__ == "__main__":
        ctx = Context(repo_path="/path/to/repo", requirement="把 API v1 換成 v2 並修正測試")
        final_state, final_ctx = run_state_machine(ctx)
        print("Final state:", final_state)
    

    重點:

    • 模型只做 局部、可回滾的決策(例如一次只改一檔)。
    • 工作流邏輯(狀態、重試、回滾)都在 可測試的 Python 函式 中,而不是藏在 prompt 裡。

    若用 TypeScript + LangGraph / 自行寫狀態機,模式相同:每個 Node 是一個狀態,Edge 由測試結果與 JSON 輸出決定。


    4. 與「prompt + chain-of-thought」相比的實際好處

    1. 穩定性
    2. CoT 依賴模型「自己監督自己」,小模型的推理錯誤會被往後 propagate,沒有硬性 checkpoint。
    3. 狀態機把流程切成多個 可檢查的邏輯節點,每步都能強制過 schema、判斷失敗與回滾。

    4. 成本與資源

    5. 單輪 prompt 巨大 → token 費用高,且在本地 GPU 上速度慢。
    6. 狀態機讓每輪上下文更短、更聚焦,在 3060 12GB + Q4 模型上可以穩定跑 多輪短對話,總延遲往往比一輪巨 prompt 更好控制。

    7. 觀測性(logging / trace)

    8. 把每個狀態轉移、LLM input/output、git diff 全記錄(例如存到 SQLite / OpenTelemetry trace),可以:

      • 後覽失敗案例
      • 做離線分析:哪個狀態最常出錯?哪種需求最難?
    9. 可測試性

    10. 傳統做法難以單元測試 Agent:prompt 無法 deterministic。
    11. 狀態機可以用 fake LLM 或 replay 真實輸出,對每個 state handler 寫 unit test,例如:當測試結果是某種錯誤訊息時,ROLLBACK_OR_FIX 應插入哪個 plan。

    建議與注意事項

    1. 避免狀態爆炸

    • 限制狀態數量在 5–10 個,複雜度放在狀態內部的子函式,而不是新增一堆細碎狀態。
    • 優先建立 通用狀態模板PLAN / EXECUTE / VERIFY / RECOVER 四類,大部分工程任務都能套這個骨架。

    2. 處理 hallucination 與非法狀態

    • 所有 LLM 輸出一律要求 JSON + schema 驗證,非法就走重試邏輯。
    • EDIT_FILE 等關鍵步驟設計 domain guard
    • 檢查 patch 是否刪除超過 X% 行數;
    • 檢查是否涉及黑名單檔案(例如 config、CI YAML)。

    3. 設計「保守模式」避免改壞檔案

    建議預設開啟:

    1. 所有改動先走分支 / 工作目錄拷貝
    2. 狀態機只在 temp branch/dir 上動手,最後才由人類 review + merge。

    3. 只允許白名單檔案被修改

    4. PLAN_CHANGE 事先產出可修改清單,EDIT_FILE 收到不在清單內的檔案時直接拒絕。

    5. 必備 diff 檢查

    6. 每次改檔後,log 一份 git diff。
    7. 可以加一個 HUMAN_APPROVAL 狀態,在 CI 或 IDE 裡讓人按「Approve」才繼續。

    4. 3060 12GB 本地 GPU 的實務建議

    • 模型:選 Q4_K_M / Q5 量化的 7B–13B 開源模型(如 Llama 系家族、Qwen 等),在 Agentic coding 任務上實測延遲可接受。
    • 推理引擎:
    • llama.cpp / ollama:部署簡單,適合單機開發。
    • vLLM:若你需要高併發與更細緻的 batching,可考慮,但對記憶體稍敏感。
    • 參數建議:
    • max_tokens 控制在 512–2048,依狀態不同調整。
    • temperature 低於 0.3,減少 hallucination。
    • 避免在單輪塞完整檔案,改成 片段 + 明確上下文(例如「你只看這個 function」)。

    5. 映射到現有 Agent framework 的模式

    這套思路可以直接映射到:

    • LangChain / LangGraph
    • 每個狀態 = 一個 Node(通常是 Tool + LLM)。
    • 轉移條件透過 conditional edges 判斷 JSON output 中的 status / next_state
    • 用 LangGraph 的 checkpointingContext 存到外部 store,可做恢復與可視化。

    • LangMCP(可檢視狀態的 Agent framework)

    • Context 中的 file_index / plan / test_result 全部納入 inspectable state
    • 除錯時可以直接在 UI 裡看到「Agent 在哪一步做錯決策」,而不是只看 tokens trace。

    • Claude Code / goal-workflow 類工具

    • 把這裡的狀態機當作後端 orchestrator,前端 IDE 只負責:設定 goal → 顯示 plan → 顯示每步 diff / 測試 → 提供人類 approve。

    總結工程模式:

    LLM 做局部推理 + 生成,狀態機做長期決策 + 記憶 + 恢復。
    把「智慧」從模型本體,搬到你可控、可測、可觀測的工作流程式碼中,13GB 小模型也能在工程任務裡穩定交付 10/10 的結果。


    🚀 你現在可以做的事

    • 在本地架一個 llama.cppvLLM 的 OpenAI-compatible 服務,載入一顆 7B–13B Q4/Q5 模型試跑上文的狀態機範例
    • 把你現有的「一條大 prompt 改碼流程」改寫成 5–10 個明確狀態,並為每步定義 JSON schema 與 max_retries
    • 在 CI 或開發機中為這套狀態機加上 logging / trace(例如 SQLite 或 OpenTelemetry),實際分析哪個 state 最常出錯
  • 用 Mellum2 排程你的 AI 工作流

    用 Mellum2 排程你的 AI 工作流

    一句話先說清楚:Mellum2 是一顆專門幫你「排班、調度」其他大模型和工具的小模型,用來做 routing、任務拆解與工具選擇,讓 AI 工作流更便宜、更穩定。

    📌 本文重點

    • Mellum2 是專門做「決策與調度」的小模型
    • 適合負責 routing、任務拆解和工具選擇
    • 能幫多模型、多工具的工作流壓成本、提穩定度
    • 很適合拿來做 AI agent 的中樞大腦

    官方介紹與原始碼:https://blog.jetbrains.com/ai/2026/06/mellum2-goes-open-source-a-fast-model-for-ai-workflows/


    核心功能:先讓 Mellum2 當你的「AI 排班主管」

    1. 低延遲的小模型,適合做決策層

    Mellum2 本身不是 GPT-4o 那種萬能助手,它更像是負責「決定下一步要幹嘛」的主管

    • 模型體積小、推理快,適合放在整個 pipeline 的最前面或中間層
    • 每次呼叫成本低,很適合頻繁決策:用哪個工具?要不要再拆一步?該重試還是直接回覆?

    💡 關鍵: 把高頻率、邏輯性的「決定怎麼做」交給便宜小模型,昂貴大模型只負責「實際做」,能讓整體成本大幅下降。

    你可以怎麼用?

    • 把「判斷任務類型 → 選模型 → 選工具」這段邏輯,從你程式碼的 if-else 搬到 Mellum2
    • 所有複雜 workflow 的分支規則,盡量改成 prompt + Mellum2 來決定,減少硬寫規則

    2. 多步推理:讓它負責拆任務、串工具

    JetBrains 把 Mellum2 設計成適合多步推理(multi-step reasoning)的模型,也就是它擅長做:

    • 任務拆解:把「寫一份技術規格書」拆成「補資料 → 查 API → 產出草稿 → 校對」
    • 步驟規劃:決定每一步要用哪支工具或哪個 LLM
    • 狀態更新:根據上一個工具的輸出,動態調整下一步

    你可以怎麼用?

    • 把你現有的工具(爬網頁、查資料庫、呼叫商用 LLM)列成一張「工具清單」給 Mellum2
    • 請 Mellum2 每次都輸出「下一步要用的工具 + 工具參數」,你的程式只負責照做

    3. Routing + 工具選擇:讓 GPT、Claude、開源 LLM 都變成「插件」

    Mellum2 最實用的角色,就是做模型路由(model routing)和工具選擇(tool selection)

    • 你可以在後面接:GPT-4.1、Claude 3.7、Llama、Qwen 等
    • Mellum2 根據需求幫你選:「這題要便宜模型」還是「這題要高準確度」

    💡 關鍵: 當你同時使用多個 LLM 供應商時,用 Mellum2 做路由,可以在「品質不明顯下降」的前提下,讓大量請求自動落在較便宜的模型上。

    可以這樣設計一個簡單策略

    • 查資料類問題 → 用便宜/開源 LLM + 搜尋工具
    • 寫程式、寫長文 → 用 GPT-4.1 或 Claude 3.7
    • 簡單 Q&A → 用本地 LLM,節省 API 費用

    你的程式不用管細節,只要:

    1. 收到使用者請求
    2. 把請求 + 目前可用模型列表丟給 Mellum2
    3. 照 Mellum2 的輸出去呼叫對應模型

    適合誰用:三種典型場景

    1. 你在做「AI 助手」或 Agent 系統

    如果你在做:

    • 產品內建 AI 助手(客服、知識庫問答)
    • 自動化 Agent(幫你查資料、寫報告)

    問題通常會是

    • 使用者問題差異很大,單一模型不是太貴就是太弱
    • 工具越加越多,判斷流程 if-else 爆炸

    Mellum2 能幫你:

    • 把「選模型、選工具、拆步驟」集中到一顆小模型管理
    • 你只要維護工具清單和觀察 Mellum2 的決策是否合理

    可以實作的行動

    • 先挑三個最常用工具:RAG 搜尋、商用 LLM、本地 LLM
    • 寫一個 Mellum2 prompt,要求它根據需求選 1-3 個步驟完成任務

    2. 你有多個 LLM 供應商,要壓成本又要穩定

    典型狀況:

    • 公司已經有 OpenAI 帳號,也在測 Claude,還有自家的 vLLM 服務
    • 主管希望「多用便宜模型,但品質不能掉太多」

    Mellum2 的用法:

    • 給它模型清單:
    • gpt-4.1: 高成本、高品質
    • gpt-4o-mini: 中等品質、便宜
    • local-llama: 最便宜、品質較不穩
    • 附帶一些示例(few-shot),教 Mellum2 什麼情境選哪個

    💡 關鍵: 先在開發環境裡讓所有請求經過 Mellum2 路由,實際觀察不同任務落在昂貴與便宜模型的比例,再調整規則,比一開始就死寫策略安全得多。

    可以實作的行動

    • 先在開發環境改成「所有請求都要經過 Mellum2 路由」
    • 觀察一週:不同任務下,商用 LLM 和本地 LLM 的占比、成本變化

    3. 你要做「穩定的 AI Pipeline」而不是單次聊天

    像是:

    • 每天自動爬資料 → 摘要 → 存進 Notion
    • 每次有 Pull Request → 產生 code review 建議

    這種 Pipeline 常見問題:

    • 某個 LLM 偶爾出錯,整條流程掛掉
    • 你需要 fallback 策略:失敗就換模型、換 prompt、換工具

    Mellum2 可以:

    • 監看每一步工具回傳結果(成功 / 失敗 / 異常訊息)
    • 根據結果決定下一步:
    • 重試同一步驟
    • 改用另外一個模型
    • 回報錯誤給人類

    可以實作的行動

    • 把 Pipeline 的每一步都包成「工具」
    • 每一步的錯誤,也當作輸入回饋給 Mellum2,讓它決定接下來的補救策略

    怎麼開始:從安裝到最小可行範例

    以下流程以「你會用 Docker 或 Python,且已經有至少一個 LLM API(OpenAI / Anthropic / 本地 vLLM)」為前提。

    1. 安裝 Mellum2:Docker 或程式庫二選一

    先到官方部落格或 Repo:https://blog.jetbrains.com/ai/2026/06/mellum2-goes-open-source-a-fast-model-for-ai-workflows/

    選項 A:用 Docker 跑起 Mellum2 服務

    1. 安裝 Docker / Docker Compose
    2. 拉取 Mellum2 映像(以官方 README 為準,示意):

    bash
    docker pull jetbrains/mellum2:latest

    1. 啟動服務(假設開在 8000 port):

    bash
    docker run -p 8000:8000 jetbrains/mellum2:latest

    1. curl 測試:

    bash
    curl -X POST http://localhost:8000/infer \
    -H "Content-Type: application/json" \
    -d '{"input": "你是任務規劃器,請幫我決定下一步要用什麼工具"}'

    適合: 想先用 HTTP API 串現有後端的人。

    選項 B:在程式裡直接呼叫 Mellum2

    如果官方有 Python 套件(假設為 mellum2):

    pip install mellum2
    

    簡單測試:

    from mellum2 import MellumClient
    
    client = MellumClient(base_url="http://localhost:8000")  # 或直接用雲端端點
    
    resp = client.infer("你是任務規劃器,收到任務後要輸出下一步計畫")
    print(resp)
    

    適合: 你準備把 Mellum2 深度嵌到自家服務裡。


    2. 示範:Mellum2 做 Router + 任務規劃的最小 workflow

    下面是一個最小可行例子:

    • 你有兩個底層 LLM:
    • gpt-4.1(高品質)
    • local-llama(便宜)
    • 有一個簡單工具:web_search(用來查網路)
    • 目標:收到使用者問題,由 Mellum2 決定:
    • 要不要先搜尋
    • 要用哪個模型產生最終答案

    Step 1:定義給 Mellum2 的「工具/模型清單」

    TOOLS = [
        {
            "name": "web_search",
            "type": "tool",
            "desc": "適合需要即時或最新資訊的問題,例如股票、新聞、價格。"
        },
    ]
    
    MODELS = [
        {
            "name": "gpt-4.1",
            "cost": "high",
            "quality": "best",
            "desc": "用在需要高準確度、長文、程式碼的回答。"
        },
        {
            "name": "local-llama",
            "cost": "low",
            "quality": "medium",
            "desc": "用在一般聊天、簡單問答。"
        }
    ]
    

    Step 2:設計 Mellum2 Prompt,請它輸出「計畫 JSON」

    SYSTEM_PROMPT = """
    你是 AI 工作流調度器,負責:
    1. 判斷使用者需求
    2. 決定是否要先使用工具
    3. 選擇要使用的底層 LLM
    
    請只輸出 JSON,不要多餘文字,格式:
    {
      "steps": [
        {"action": "tool" | "model", "name": "...", "input_from": "user" | "prev_result"}
      ]
    }
    
    可用工具:
    {tools}
    
    可用模型:
    {models}
    """.format(tools=TOOLS, models=MODELS)
    

    Step 3:呼叫 Mellum2,拿到決策後執行

    import json
    from mellum2 import MellumClient
    
    mellum = MellumClient(base_url="http://localhost:8000")
    
    user_query = "幫我分析最近 NVIDIA 股價的變化,順便預測未來一季可能走勢。"
    
    planning_prompt = SYSTEM_PROMPT + f"\n使用者問題:{user_query}"
    
    plan_resp = mellum.infer(planning_prompt)
    plan = json.loads(plan_resp["text"])  # 依實際回傳欄位調整
    
    result_cache = None
    for step in plan["steps"]:
        if step["action"] == "tool" and step["name"] == "web_search":
            query = user_query if step["input_from"] == "user" else result_cache
            result_cache = call_web_search(query)  # 這是你自己實作的搜尋功能
    
        if step["action"] == "model":
            model_name = step["name"]
            model_input = user_query if step["input_from"] == "user" else result_cache
            result_cache = call_llm(model_name, model_input)  # 依照名稱選擇 gpt / llama
    
    print("最終回答:", result_cache)
    

    這樣,你已經有了一個:

    • Mellum2 做「任務規劃 + 模型/工具選擇」
    • 後端只負責執行計畫的最小可行 workflow

    接下來要擴充,只要:

    • TOOLS / MODELS 裡再加項目
    • 用 few-shot 例子微調 Mellum2 的決策邏輯

    Mellum2 在你的工具箱裡,扮演什麼角色?

    如果從「AI 工作流」角度看,目前常見的組合大致是:

    名稱 核心功能 免費方案 適合誰
    Mellum2 工作流調度、routing、任務拆解 開源可自架 想自己組 AI pipeline,需要細控成本與流程的人
    OpenAI GPT 高品質通用 LLM 有免費額度 需要高品質輸出、但不想自己訓練模型的人
    Claude / Sonnet 對話 & 程式能力強的商用 LLM 有試用 重度寫作、程式輔助、長上下文需求
    本地 LLM(Llama/Qwen) 私有部署、低成本推理 視模型而定 在意隱私或有大批量推理需求的團隊

    Mellum2 並不是另一個「跟你聊天的模型」,而是用來把上面這些工具串起來、排程好、決定誰在什麼時候上場的小模型。

    你可以從一個最小的 routing + 任務規劃範例開始,先讓 Mellum2 管理兩個模型、一支工具,跑順了再往外擴。

    🚀 你現在可以做的事

  • MiniMax M3:一口吃下百萬字長文的開源模型

    MiniMax M3:一口吃下百萬字長文的開源模型

    📌 本文重點

    • M3 支援 100 萬 token 長上下文與多模態輸入
    • 專門處理長文件、整個程式庫與 Agent 工作流
    • 可雲端快速試用,也能本地自架整合現有工具鏈
    • 先從一個最痛的長文或專案開始導入

    用一句話說:MiniMax M3 是一個開放權重、支援 100 萬 token 長上下文 + 多模態輸入 的模型,專門幫你處理「報告太長、程式碼庫太大、Agent 工作流太複雜」這三種麻煩事。

    💡 關鍵: 100 萬 token 長上下文代表可以一次塞進整份大型專案文件或程式庫索引,而不必自己切 chunk 或做向量搜尋。

    官方介紹與下載:https://www.minimax.io/models/text/m3(The Decoder 報導:https://the-decoder.com/minimax-m3-open-weight-model-with-a-million-token-context-challenges-proprietary-leaders/


    核心功能:長文、程式碼、Agent 一次處理

    1. 100 萬 token 長上下文:整份專案文件一次丟進去

    能做什麼?

    • 一次放入:完整專案文件夾匯出的 Markdown、法規 PDF、產品說明書、研究報告
    • 不用切段:不必自己分 chunk、做向量搜尋,直接把「全部內容」交給模型
    • 查詢風格:像在問一位看完整專案的同事

    怎麼用(長文閱讀 Prompt 範本)

    1. 準備一個壓縮檔 / 合併文件,例如 project_docs.md(可用腳本把多個 Markdown / txt 串成一個檔案)。
    2. 在推理介面(API、Notebook 或 Web UI)中,把全文貼進 system / user 區。

    範例 Prompt 模板:

    你是一位技術專案經理。以下是整個專案的所有文件(需求、設計、會議紀錄、API 文件):
    
    --- 專案全文開始 ---
    {{整份文件內容}}
    --- 專案全文結束 ---
    
    請依照以下格式輸出:
    1. 專案一句話摘要(不超過 30 字)
    2. 3 個主要目標
    3. 5 個關鍵風險(附來源段落或章節名稱)
    4. 下一步行動建議(列出 5–10 條,可直接貼進 Jira 當任務)
    

    實際行動: 找一份你手上最頭痛、超長的專案文件,直接用上面模板測一次。


    2. 原生多模態:文字 + 圖像一起理解

    M3 支援把文字與圖片一起丟進上下文。例如:

    • 產品 PRD + UI 圖稿,一次請它找出規格與設計不一致之處
    • 報告 PDF 截圖 + 補充說明文字,一起整理重點

    圖片搭配 Prompt 範本:

    以下是某個產品的文字需求說明,以及對應的 UI 設計稿截圖(多張):
    
    文字需求:
    {{需求文字}}
    
    圖片:
    - image_1:登入頁
    - image_2:帳號設定頁
    - image_3:權限管理頁
    
    請列出:
    1. 每張圖和文字需求的對應關係
    2. 不符合需求或缺漏的地方
    3. 建議 UI 或流程調整(用條列)
    

    實際行動: 把一份 PRD + 幾張 Figma 匯出的 PNG 丟給 M3,看它幫你做「設計對規格」檢查。


    3. 為程式碼與 Agent 優化:整 repo 理解 + 多輪工具調用

    根據社群測試與官方說明,M3 在程式碼生成與 Agent 任務上做了特別優化:

    • 長上下文讓它能一次「看完整個 repo 的索引」
    • 可以在一個對話裡做多輪「工具調用→讀結果→改方案」

    💡 關鍵: 對整個 repo 建立「程式碼地圖」再交給 M3,可以讓它在第一次對話就掌握系統結構並規劃重構與 Agent 工作流。

    整個 repo 程式碼導覽 Prompt

    1. 先用腳本產生「程式碼地圖」,例如:
    # 只列出檔名 + 前幾行註解/類別宣告
    python scripts/make_repo_index.py > repo_index.txt
    
    1. repo_index.txt + 關鍵檔案內容一起貼給 M3:
    你是一位資深軟體工程師。以下是某個專案的程式碼地圖與部分檔案內容。
    
    --- repo index ---
    {{repo_index.txt}}
    --- end repo index ---
    
    問題:
    1. 幫我畫出系統主要模組與資料流(用文字 + 簡單 ASCII 圖)
    2. 指出如果要「加入 OAuth 登入」,可能要改動的檔案與大致步驟
    3. 給出最小修改範圍的 refactor 計畫(列出任務清單)
    

    Agent 工作流拆解 Prompt

    把它當成「任務拆解器 + 工具 orchestrator」的腦:

    你是一個 AI Agent 系統的規劃師。你可以使用以下工具:
    - tool_search_issues:搜尋 Jira issue
    - tool_run_tests:執行 CI 測試
    - tool_open_pr:建立 Pull Request
    
    需求:
    「每天自動檢查新的 bug issue,找出影響登入流程的,跑測試,通過就開 PR。」
    
    請輸出:
    1. 將需求拆成 5–10 個可實作的 Agent 步驟
    2. 每個步驟會用到的工具(如有)
    3. 對 orchestrator 的假想 DSL / YAML 配置範例
    

    實際行動: 選一個你常做的重複開發流程,用上面模板請 M3 幫你轉成可實作的 Agent 腳本草稿。


    適合誰用:三種典型場景

    1. PM / 研究員:長報告與專案文件總結

    使用方式:

    • 把所有會議紀錄、需求文件、Excel 轉成文字(或貼 PDF OCR 結果),合併成一份長文
    • 用「長文閱讀模板」請 M3:
    • 整理專案脈絡與時間線
    • 整理「決策原因」與「未決事項」
    • 產出可以直接貼進 Notion / Confluence 的摘要

    行動建議: 對每個專案建立一份「M3 專案總結」,讓新成員用它快速上手。


    2. 後端 / 全端工程師:整 repo 理解與重構

    使用方式:

    • 新接手專案,先用腳本生成 repo index → 丟給 M3 產生系統說明
    • 要重構時,請它根據長上下文:
    • 找出高度耦合模組
    • 給出重構順序與風險點
    • 產生對應的 Git 分支與 PR 策略建議

    行動建議: 每次大改版前,用 M3 先產一份「重構設計」,再與團隊人工過一遍。


    3. 自動化 / AI Agent 開發者:多輪工具調用工作流

    使用方式:

    • 把你現有的工具清單(API spec、CLI 說明)全部貼給 M3
    • 要求它:
    • 定義任務拆解(如報表產出、自動回覆客服)
    • 設計工具調用順序與錯誤處理策略

    行動建議: 先挑一個「每天會做,但步驟固定」的流程,例如:生成日報、同步任務狀態,讓 M3 幫你設計第一版 Agent workflow。


    怎麼開始:雲端 / 本地快速跑起來

    1. 雲端:直接用官方 / 社群 API

    如果你只是想先試效果:

    1. 到官方頁面申請:https://www.minimax.io/models/text/m3
    2. 拿到 API key 後,在自己的腳本或 Postman 裡調用:
    curl https://api.minimax.io/v1/chat/completions \
      -H "Authorization: Bearer $MINIMAX_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "model": "m3",
        "messages": [
          {"role": "user", "content": "幫我總結以下專案文件..."}
        ]
      }'
    

    適合: 想驗證長上下文/多模態效果、不急著本地部署的團隊。


    2. 本地 / 自架:Hugging Face + 官方 Docker

    A. 用 Hugging Face + vLLM / Ollama(範例)

    1. 在 Hugging Face 搜尋 MiniMax/M3(實際名稱以官方為準)。
    2. 用 vLLM 啟動:
    pip install vllm
    vllm serve MiniMax/M3 --port 8000 --dtype bfloat16
    
    1. 測試:
    curl http://localhost:8000/v1/chat/completions \
      -H "Content-Type: application/json" \
      -d '{
        "model": "MiniMax/M3",
        "messages": [{"role": "user", "content": "你好,幫我總結這份文件"}]
      }'
    

    B. 用官方 Docker 快速跑起

    1. 下載官方映像(名稱以官方文件為準):
    docker pull minimax/m3:latest
    
    1. 啟動:
    docker run -d --gpus all -p 8000:8000 minimax/m3:latest
    
    1. 之後的使用方式就和一般 OpenAI 相容 API 類似。

    實際行動: 用 Docker 跑起來後,先跑一個「長文閱讀模板」,確認你的 GPU 記憶體足夠,觀察響應時間。

    💡 關鍵: 若你已採用 OpenAI 相容 API,將 base_url 換成 M3 服務即可快速 A/B 測試長上下文任務的效果。


    3. 跟現有工具鏈整合:VS Code、Orchestrator、CLI

    VS Code:當成本地 Copilot

    1. 安裝任一個支援自訂 LLM endpoint 的 VS Code 擴充套件(如 Code GPTContinue)。
    2. 將模型 endpoint 設為你自架的 M3 伺服器 URL。
    3. 專案開啟後:
    4. 用「整 repo 導覽」prompt 請它解釋架構
    5. 在單檔內請它重寫函式、加註解

    與開源 orchestrator 整合

    你可以在以下框架中把 M3 當成主要「腦」:

    • LangChain / LlamaIndex:用它處理長上下文和工具調用規劃
    • CrewAI / OpenAI-compatible orchestrators:直接把 OPENAI_BASE_URL 指到你的 M3 伺服器

    簡單 YAML 範例(假想):

    llm:
      type: openai-compatible
      base_url: http://localhost:8000/v1
      model: MiniMax/M3
    
    agent:
      tools:
        - search_issues
        - run_tests
      max_iterations: 10
    

    實際行動: 在你現有的 Agent 專案,把原本的 gpt-4 或其他模型,先在「規劃/總結」節點換成 M3,測試對長上下文任務的改善。


    小結:先從一個最痛的長文或程式庫開始

    不用一次把所有流程都搬到 M3。挑一個:

    • 最長、最難讀的一份文件
    • 或你最不熟的一個 codebase

    用上面給的三組模板(長文閱讀、程式碼導覽、Agent 任務拆解)跑一次,你就能感受到「百萬 token 長上下文 + 開放權重」在實際工作中的差別。

    🚀 你現在可以做的事

    • 挑選一份最頭痛的長報告或專案文件,套用「長文閱讀模板」實測 M3
    • 對一個新接手的 repo 生成 repo_index.txt,用「整個 repo 導覽 Prompt」請 M3 說明架構
    • 在現有 Agent 專案中,把規劃/總結節點的模型改成 M3,觀察長上下文任務表現差異
  • Anthropic 上市:安全招牌與資本邏輯的正面衝突

    Anthropic 上市:安全招牌與資本邏輯的正面衝突

    📌 本文重點

    • Anthropic IPO 將「安全敘事」拉進華爾街季度壓力測試
    • 資本市場會把算力軍備、封閉生態與客戶鎖定推向極致
    • 「AI 安全」恐被重寫成成本項與行銷話術,而非實質約束

    Anthropic 準備 IPO,真正被拋進市場壓力測試的,不是估值,而是它「安全派 AI」的品牌承諾。 一旦從實驗室走進 華爾街季度財報劇本,對齊、安全與風險管控就不再是道德姿態,而是會被寫進或抹除在 KPI 裡的成本項。這不是一家公司的財經新聞,而是:我們是否準備好,讓基礎模型的社會風險,交給短期回報驅動的資本市場來決定?


    一、從「好人角色」到「成長股」:Anthropic 的結構性矛盾

    Anthropic 一開始賣的是「安全敘事」:Constitutional AI、alignment-first、比 OpenAI 更在乎風險。 這套敘事在私募階段非常有效——吸引了願意為「較負責任的 AGI 開發者」買單的資本與企業客戶。但 IPO 之後,遊戲規則會變兩件事:

    1. 股東結構從「可以接受長期賭注的機構與巨頭」,變成「需要流動性與季度故事的大眾股東」
    2. 公司目標不可避免地要往「估值故事」傾斜。 Reddit 上已在流傳 「Anthropic 要在 2027 年衝向 10 兆美元公司」 的說法,這種敘事本身就與「謹慎放量、審慎釋出能力」是相衝突的。

    💡 關鍵: 將「2027 年衝向 10 兆美元公司」當目標,代表成長與估值敘事可能會壓過「放慢、審查、延後釋出」的安全承諾。

    問題在於:

    • AI 安全需要的是「放慢、審查、延後釋出」,甚至在模型太強時,選擇不商業化。
    • 上市公司被期待的是「加速釋出、壓低邊際成本、快速搶市占」,否則就會被分析師貼上「成長趨緩」標籤。

    Anthropic 需要同時向 SEC、風險投資人、企業客戶與 AI 安全社群交代 時,它勢必得選擇其中某一方先被犧牲。歷史經驗(從社群平台到廣告科技)一再顯示:在季度財報面前,被犧牲的幾乎從來不是成長曲線,而是抽象的社會風險。


    二、雙寡頭衝向資本市場:算力軍備與產業鎖死

    Anthropic 與 OpenAI 幾乎同步奔向 IPO,實質上是在把「算力軍備競賽」寫進招股書。 一旦上市,它們的下一個 KPI 不會是「能否安全停車」,而是:

    • 訓練成本與算力支出成為可歌可泣的投資故事
    • 「我們今年在 GPU 上燒掉了 X 十億美元,比對手多 30%,因此技術領先。」
    • 投資人會獎勵這種敘事,因為它暗示了未來壟斷地位。

    • 對產業結構的兩個直接後果:

    • 雲端+基模雙頭壟斷
      • Anthropic 綁 Amazon、Google;OpenAI 緊靠微軟 Azure,IPO 之後,這些戰略關係只會更緊密。
      • 對大型企業客戶來說,「用 AI」將越來越等於「鎖進兩大雲+兩大基模」,轉移成本被刻意放大
    • 開源與中小模型商被擠壓
      • 當華爾街預期的是「AGI 型全能模型吃下所有任務」,管理層就有誘因 把產品路線朝「一體化超大模型 + 封閉 API」推,而不是維持多樣、可組裝的模型生態。
      • 中小模型商與開源專案,能活下來的空間會越來越「邊緣化」,只能在極少數垂直場景苟存。

    💡 關鍵: 算力軍備一旦被包裝成「比對手多燒 30% GPU」的投資亮點,將強化雙頭壟斷與封閉生態,進一步抬高產業轉移與創新成本。

    表面看起來,IPO 帶來的是資金與創新加速;本質上卻可能是把基礎模型產業,推向「算力比燒 + 封閉生態 + 客戶鎖定」的終局布局。


    三、定價、產品與開放度:安全會不會被寫進「折舊費用」?

    IPO 之後,Anthropic 不可避免地要把營收成長率、毛利率寫進路演簡報。在這個框架下,「安全」與「對社會負責」會被重寫成幾個具體的 trade-off:

    1. 安全機制 vs. 商業轉換率
    2. 嚴格的安全防線意味著:更多 red-teaming、更多拒絕回應、更多延遲釋出。這些在財務模型裡是「成本+少賺到的錢」。
    3. 當管理層面對的是「本季營收成長只有 18%,低於市場預期 25%」時,最先被砍的通常是難以量化的風險檢測與研究預算,而不是 marketing spend。

    4. 免費層與研究開放度,會被視為「可壓縮空間」

    5. 免費層是拉新工具,但也是伺服器成本;上市公司 CFO 的直覺,是 收緊免費額度、提高門檻、把更多流量轉成付費
    6. 對研究社群與獨立開發者來說,這會直接把他們推向:

      • 更昂貴的 API(OpenAI/Anthropic 雙寡頭),或
      • 更便宜但政治與資料主權風險較高的中國模型(如 DeepSeek、Qwen),抑或
      • 品質稍低但可控的開源模型(Llama、Mistral 等)
    7. 全球 AI 使用成本被推高,風險外溢到其他體系
      Reddit 上已有討論:當 OpenAI、Anthropic 一起 IPO、一起漲價,很多預算吃緊、對合規沒那麼敏感的企業部門,很可能直接買「最便宜、夠用就好」的方案——不論供應商在中國還是其他國家。

    結構性結果是:

    • 華爾街對兩家美國 AI 巨頭的定價壓力,可能反而刺激了中國模型與開源方案在全球企業端的採用
    • 我們不是降低了風險,而是把風險分散到更多監管難以觸及的角落,讓整體治理難度上升。

    💡 關鍵: 當頭部模型商為了毛利率同步漲價,全球 AI 使用成本上升,反而可能把需求推向監管較弱與風險更難控的模型體系。

    換句話說,資本市場要求的毛利率,可能會以「全球 AI 使用門票變貴」為代價實現,而且未必帶來更安全的使用環境。


    四、治理與監管:當 SEC 跟社會風險吵架時,Anthropic 會站哪邊?

    Anthropic 長期把自己定位為「重視 AI 對社會風險的公司」。問題在於,一旦上市,它需要面對的是:

    • SEC 與證交所:關心的是資訊揭露是否充分、財報是否真實、是否有誤導投資人。
    • 監管機關與公眾:關心的是 AI 是否增加失業、強化不平等、擴散錯誤資訊、產生國安風險。

    這兩者之間,並沒有自然對齊:

    • 如果某次內部 red-team 發現新模型在生物武器、網攻能力上有重大風險,延後發布符合社會利益,但可能讓季度營收 miss target
    • 如果公司選擇「照計畫發布」,只是補幾句風險揭露文字,SEC 會滿意,股東短期也開心,但社會風險被外包給整個世界。

    Anthropic 早期設計過特殊治理結構,試圖避免「OpenAI 董事會風波 2.0」,但在接上公開資本市場後,任何超出一般股東權利結構的安排,最後都會面臨壓力:

    • 只要治理機制作出顯著壓制股價或成長的決策,就會被貼上「對股東不負責」,甚至遭遇法律挑戰。

    如果我們不及早介入設計新的治理框架,Anthropic 的「安全招牌」最終只會淪為 IPO 路演的差異化話術,而不是能在關鍵時刻踩煞車的機制。


    結論:開發者與使用者不能再當吃瓜群眾

    Anthropic 上市,真正被測試的是我們整個社會是否願意、也是否有能力,對基礎模型產業設計「超越股價」的約束框架。 如果沒有:

    • AI 對齊與安全將被默默轉寫成「行銷差異化」,而不是產品節奏與能力釋出的實質約束。
    • 人類集體風險,會被打包進成長股 ETF 裡,被視為「可承受的系統性風險」。

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

    1. 技術選型時,把「治理與可轉移性」當成硬指標
    2. 不要只看模型能力與單價,還要問:換供應商的成本多高?是否支援開源 fallback?資料與權限是否能抽離?
    3. 刻意維持「多供應商 + 一定比例開源」結構
    4. 即便 Anthropic / OpenAI 當下最好用,也不要讓自己完全鎖進單一閉源體系。
    5. 在產業協會、開發者社群中,壓力政策制定者
    6. 要求針對基礎模型公司推出新的治理機制,例如:
      • 強制公開安全審查流程與重大風險披露;
      • 在治理架構中納入「公共利益董事」;
      • 對超大規模訓練與釋出設定「預先通報與冷卻期」。

    如果我們現在不動手,未來五年內,AI 產業的基本秩序將由幾份招股書和幾次財報電話會議決定,而不是由公共辯論與民主治理決定。Anthropic IPO 是一個轉折點——錯過這一次,我們很可能錯失對基礎模型產業最後的實質約束機會。

    🚀 你現在可以做的事

    • 檢查你或公司現有 AI 技術堆疊,評估是否有「多供應商+一定比例開源」的備援結構
    • 在選型文件或 RFP 中,新增「治理與可轉移性」相關條款,例如資料可抽離、支援開源 fallback
    • 參與所在產業協會或開發者社群,推動對基礎模型公司的安全揭露與治理機制討論與倡議
  • autoswarm 自我優化本地 Agent 實戰

    autoswarm 自我優化本地 Agent 實戰

    📌 本文重點

    • 本地 Agent 痛點在於行為難以持續優化與自動化
    • autoswarm 透過 reflect → rewrite → evaluate → write-back 形成閉環
    • skills.yaml + 驗證集讓 Agent 行為像「可訓練參數」持續調整
    • 先從可量化任務(coding/CLI/FAQ)導入 autoswarm 成效最佳

    本地 Agent 最大的痛點不是「模型不夠強」,而是行為難以持續調整:你改了一堆 prompt、skills,效果好壞全憑體感,難以複製、更難自動化。autoswarm 類的自我優化流程,把這件事工程化:讓 Agent 自己從對話紀錄學習、反思、改寫技能檔,並用驗證集嚴格篩選只留下「真有幫助」的改動。

    💡 關鍵: autoswarm 把「調 prompt 靠手感」變成「技能檔可度量、可回滾的工程流程」。

    換句話說,你不再手動調 prompt,而是給 Agent 一套 reflect → rewrite → evaluate → write-back 的閉環,讓本地 coding 助手、CLI 助手、企業 FAQ agent 在你睡覺時自己變強。


    重點說明

    1. autoswarm 關鍵架構:從對話到技能檔

    典型 autoswarm 流程可以拆成四個模組,每個都可以獨立嵌進現有系統:

    1. 對話記錄收集(logs)
    2. 來源:真實使用對話、benchmark(如 TerminalBench)、內部工單。
    3. 形式:(task, context, agent_action, outcome),最好能標註 success/failscore

    4. 反思(reflect)

    5. 用一個「較強或同級」的 LLM 對失敗例子做事後檢討。
    6. 產出:錯誤原因改進方向需要修改的 skill 名稱/段落

    7. 技能候選改寫(rewrite)

    8. skills.yaml 內容為條件,請 LLM 產生有界改動:新增/刪除/替換特定節點,而不是整檔轟掉重寫。
    9. 借鏡 SkillOpt:每個改動要有 diff 形式rationale,方便審核與回滾。

    10. 驗證集評估 + 寫回(evaluate & write-back)

    11. 對每個候選 skills 版本,跑一輪驗證集,計算 明確的 success metric(accuracy、任務完成率、延遲等)。
    12. 只有 嚴格提升 才寫回主線 skills.yaml,其餘丟棄;可選擇保留失敗改動作為「負樣本」提示未來避免。

    💡 關鍵: 整體流程等同「技能檔梯度下降」,用驗證集決定每次改寫是否保留。

    整體就是一個離線/準線上的 技能檔梯度下降:技能檔被當成可訓練參數,用反覆試錯 + 驗證集擇優更新。


    2. skills.yaml schema 與 success metric 設計

    要讓 autoswarm 好養,技能檔要易於定位、易於局部修改。一個實用的 YAML schema 可以長這樣:

    version: 3
    meta:
      agent_name: local_cli_helper
      description: "CLI + coding local agent"
    
    skills:
      - id: shell_exec
        type: tool
        trigger: ["terminal", "bash", "cli"]
        prompt: |
          你是一個嚴謹的 CLI 助手。只執行使用者要求的指令:
          - 先用自然語言解釋你要做什麼
          - 再給出具體指令
          - 不要執行具有破壞性的指令(rm -rf 等)
        guardrails:
          forbidden_patterns:
            - "rm -rf /"
            - ":(){ :|:& };:"
    
      - id: code_edit
        type: coding
        languages: ["python", "bash"]
        prompt: |
          你是一個本地 code 編輯助手:
          - 優先最小改動
          - 保留原有註解
          - 回傳可直接貼上的 patch
    
      - id: faq_lookup
        type: retrieval
        index: "internal_faq.jsonl"
        prompt: |
          你是企業 FAQ 助理,回答時:
          - 引用文件來源 id
          - 若找不到答案,要明確說明而不是亂猜
    

    幾個關鍵點:

    • id 必須穩定:autoswarm 透過 id 來定位要改哪個 skill。
    • 把行為拆成多個 skill,而不是一個 mega prompt,讓 autoswarm 有「局部調參」的空間。
    • 為每個 skill 準備可計算的 success metric,例如:
    • coding:測試通過數 / 單元測試覆蓋率提升。
    • CLI:命令 exit code == 0 且輸出包含 expected pattern。
    • FAQ:答案包含 ground truth 片段、或人工標註 score

    💡 關鍵: 每個 skill 綁一個可量化 metric,才能自動決定「這次改寫有沒有真的變好」。


    3. 驗證集與回放:怎麼自動化

    關鍵是把「我覺得好」變成可計算的 pass/fail

    • 來源
    • 基準測試(TerminalBench、內部腳本集)。
    • 真的使用者對話 + 事後標註(成功:1、失敗:0)。
    • 半自動生成:用模型自己產 task,再請另一模型打分。

    • 回放機制

    • 對每個驗證樣本 (input, expected),在新 skills.yaml 下跑一次 Agent,產生 output
    • 用簡單的 scorer 函數 計算分數,例如:
      • coding:跑 pytest,看全部通過比例。
      • CLI:比對 stdout 是否包含關鍵字,exit code 是否為 0
      • FAQ:用一個 judge LLM(或傳統 NLP 指標)評估是否回答到點。

    這層其實就是一個小型 harness:把「模型+skills」包成可測試的函式,對照 Deepseek 提出的觀點,就是那層讓 LLM 變成 Agent 的 runtime code。


    4. 如何嵌進現有本地 Agent(MCP/子代理/skills-based)

    不需要重寫整個 Agent,只要插入兩個 hook:

    1. log hook:在 MCP server、子代理 router 或 skills selector 前後,記錄輸入、選到的 skill、輸出、評分。
    2. offline autoswarm worker:定期(例如每天)跑反思-重寫-評估 loop,更新一個新的 skills_version,下次重啟 agent 或熱更新時載入。

    常見集成方式:

    • MCP:把 skills.yaml 當作 MCP tool 的配置,autoswarm 只負責改 YAML,MCP server 本身不改。
    • 多代理框架(如 revfactory/harness):autoswarm 對每個 agent 的 skill 檔做優化,讓「meta-agent」負責決定何時切版本。
    • 傳統 skills-based 系統:把原本寫死在程式碼裡的 prompt 抽到 YAML,才能用 autoswarm 自動調參。

    實作範例:最小可行 autoswarm(Python + YAML + Ollama)

    下面是一個極簡版的 autoswarm:針對單一 skill(faq_lookup),用對話紀錄做反思、改寫 YAML,然後用驗證集評估是否接受改動。

    1. 專案結構

    project/
      skills.yaml
      logs.jsonl         # 真實對話紀錄
      val_set.jsonl      # 驗證集
      autoswarm.py
    

    skills.yaml 示意(只保留 FAQ skill):

    skills:
      - id: faq_lookup
        type: retrieval
        prompt: |
          你是 FAQ 助理,只能根據提供的文件回答。
          若找不到答案,就回答「找不到」。
    

    2. Python:反思 → 重寫 → 評估 loop

    # autoswarm.py
    import json, copy, subprocess, textwrap
    from pathlib import Path
    import yaml
    
    SKILLS_PATH = Path("skills.yaml")
    VAL_PATH = Path("val_set.jsonl")
    LOGS_PATH = Path("logs.jsonl")
    
    # --- 基礎調用 Ollama ---
    
    def call_ollama(prompt: str, model="llama3.1") -> str:
        res = subprocess.run(
            ["ollama", "run", model],
            input=prompt.encode("utf-8"),
            stdout=subprocess.PIPE,
            check=True,
        )
        return res.stdout.decode("utf-8").strip()
    
    # --- Step 1: 從失敗 log 產生改進建議 ---
    
    def load_failed_examples(limit=5):
        examples = []
        with LOGS_PATH.open() as f:
            for line in f:
                obj = json.loads(line)
                if obj.get("success") is False:
                    examples.append(obj)
                if len(examples) >= limit:
                    break
        return examples
    
    
    def reflect_on_failures(examples):
        prompt = """你是資深 prompt engineer。以下是 FAQ agent 的失敗案例:
    
    {cases}
    
    目前 FAQ skill 的行為描述較弱,請提出如何修改 skill prompt 才能避免這些錯誤。
    
    輸出格式:
    - mistakes: 一段文字說明主要錯誤
    - patch: 改寫後的完整 prompt 內容(繁體中文)
    """
        cases_txt = "\n\n".join(
            [
                f"[CASE]\nquestion: {c['input']}\nwrong_answer: {c['output']}\nexpected: {c['expected']}"
                for c in examples
            ]
        )
        resp = call_ollama(prompt.format(cases=cases_txt))
        return resp
    
    # --- Step 2: 產生候選 skills 版本 ---
    
    def generate_candidate_skills():
        skills = yaml.safe_load(SKILLS_PATH.read_text())
        base_skills = copy.deepcopy(skills)
    
        failed = load_failed_examples()
        if not failed:
            print("no failed examples; skip")
            return None
    
        reflection = reflect_on_failures(failed)
    
        # 簡化處理:從 LLM 回應中用標記擷取 patch 區塊
        if "patch:" in reflection:
            patch = reflection.split("patch:", 1)[1].strip()
        else:
            patch = reflection
    
        # 套用到 faq_lookup
        for s in base_skills["skills"]:
            if s["id"] == "faq_lookup":
                s["prompt"] = patch
    
        return base_skills
    
    # --- Step 3: 評估一個 skills 版本 ---
    
    def run_agent(question: str, skills_obj) -> str:
        faq_skill = next(s for s in skills_obj["skills"] if s["id"] == "faq_lookup")
        sys_prompt = faq_skill["prompt"]
        full_prompt = textwrap.dedent(f"""
        系統指令:
        {sys_prompt}
    
        使用者問題:{question}
        請直接回答。
        """)
        return call_ollama(full_prompt)
    
    
    def score_skills(skills_obj) -> float:
        total, ok = 0, 0
        with VAL_PATH.open() as f:
            for line in f:
                obj = json.loads(line)
                question = obj["input"]
                expected = obj["expected"]
                out = run_agent(question, skills_obj)
                total += 1
                if expected.strip() in out:
                    ok += 1
        return ok / total if total else 0.0
    
    # --- 主流程 ---
    
    def main():
        current_skills = yaml.safe_load(SKILLS_PATH.read_text())
        base_score = score_skills(current_skills)
        print("base_score:", base_score)
    
        cand = generate_candidate_skills()
        if cand is None:
            return
    
        cand_score = score_skills(cand)
        print("candidate_score:", cand_score)
    
        if cand_score > base_score:
            backup = SKILLS_PATH.with_suffix(".bak.yaml")
            backup.write_text(SKILLS_PATH.read_text())
            SKILLS_PATH.write_text(yaml.dump(cand, allow_unicode=True))
            print("updated skills.yaml (backup saved)")
        else:
            print("candidate rejected; no improvement")
    
    
    if __name__ == "__main__":
        main()
    

    這個最小範例已經包含核心閉環:

    • 反思reflect_on_failures 用 LLM 分析失敗案例。
    • 重寫generate_candidate_skills 產出新的 FAQ skill prompt。
    • 評估score_skills 在驗證集上打分。
    • 寫回 + 回滾:只有 score 提升才覆蓋 skills.yaml,並保留 .bak 方便回滾。

    你可以把 run_agent 換成實際的 MCP 調用、子代理 router,整套邏輯依然成立。


    建議與注意事項

    1. 避免過度擬合驗證集

    問題:skills 慢慢只會在 val_set 上變強,實戰反而變差。

    建議

    • train / val / live 三層:
    • train:用來產生候選改動。
    • val:只決定是否接受改動。
    • live:真實流量,週期性抽樣評估是否「線上變好」。
    • 定期替換驗證集樣本,避免被「背題」。

    2. 技能檔膨脹與行為漂移

    問題:LLM 每輪都喜歡加條款、加例外,skills.yaml 越寫越厚,最後誰也看不懂。

    建議

    • 為 autoswarm 的 rewrite prompt 加上硬性約束:字數上限、禁止新增無根據規則
    • 定期跑「壓縮輪」:請模型把冗長 skill 壓縮成短版,再用同一驗證集確認不降分。
    • 每個 skill 保持一個簡短的 design doc(目的、scope、anti-goals),避免 autoswarm 把 skill「學壞」。

    3. 無標準答案任務的侷限

    在開放式對話、創作任務上,很難定義客觀 success metric。

    可以考慮:

    • 使用一個獨立 judge 模型,給 1–5 分,才算作 metric。
    • 只對「明確可評」技能開 autoswarm(如 coding、CLI、FAQ),聊天維持手動設計。
    • 針對負面行為(安全、合規)單獨設計 守門驗證集,只要出現就直接拒絕 candidate。

    4. 版本控制與回滾策略

    • 版本號:在 skills.yamlversion 欄位,每次 autoswarm 成功更新 +1
    • Git 管理:把 skills 連同 autoswarm logs 一起 commit,方便 bisect
    • 多版本 AB 測試:對企業內部 Agent,可同時跑兩個 skills 版本,對比使用者滿意度或工單解決率。

    實際好處總結:

    • 對本地 coding 助手:用單元測試當驗證集,讓 Agent 自動學會你的專案風格與工具鏈。
    • 對 CLI 助手:從錯誤指令和 crash log 中反覆學習,逐步降低「爆炸指令」風險。
    • 對企業 FAQ/ops agent:用真實工單與 FAQ 命中率做閉環,減少大家輪流調 prompt 的人工成本。

    核心心態是:skills.yaml 當成模型參數來訓練,而不是只在 README 裡手動修改的一段文案。有了 autoswarm loop,你的本地 Agent 就能在既有硬體上持續「自我優化」,而不是每天重訓一個新模型。

    🚀 你現在可以做的事

    • 把現有 Agent 的系統 prompt 抽成 skills.yaml,為每個 skill 補上穩定 id 與對應 metric
    • 寫一個最小版 autoswarm.py,先針對單一 skill(例如 faq_lookup)跑 reflect → rewrite → evaluate loop
    • 準備一小批驗證集(10–20 筆即可起步),接上 CI 或排程,讓 skills 每天自動小幅優化
  • 自託管 Airi:把 AI 養在自己電腦裡

    自託管 Airi:把 AI 養在自己電腦裡

    📌 本文重點

    • Airi 可完全自託管,長駐你自己的機器
    • 支援即時語音與遊戲互動,像住在電腦裡的同伴
    • 可接本地 LLM 或雲端 API,自訂人格與長期記憶

    Airi 解決的是:想要一個「常駐在自己電腦裡」、能語音聊天、陪你打遊戲,又不把隱私丟給雲端的大型 AI 代理人

    Airi GitHub:https://github.com/moeru-ai/airi


    核心功能:把 Airi「養」在自己機器上

    1. 自託管架構:本地 / 伺服器都能養

    Airi 是完全自託管的專案,你可以:

    • 裝在自己電腦:當成桌面語音助理、遊戲副駕駛
    • 架在家裡 NAS / 伺服器:多台裝置共用同一個 Airi
    • 放到雲端 VPS:人不在家也能連回自己的 AI

    實際能做的事:

    • 重要對話、長期記憶都留在你控制的機器
    • 想換模型、換人格、換語音,都自己改,不受商業服務限制

    你可以現在先做:

    1. 開啟 GitHub 專案頁:https://github.com/moeru-ai/airi
    2. 在 README 看「Installation」區段,決定你要:
    3. docker-compose 一鍵跑,或
    4. 用腳本 / 原始碼自己起服務

    2. 即時語音通話:真的像「住在你電腦裡的人」

    Airi 內建語音通話功能,可以做到:

    • 按一個按鈕就跟 Airi 說話,低延遲雙向語音
    • 語音輸入 + 語音輸出,像在跟 Discord 語音室裡的人聊天
    • 長時間掛在背景,隨時叫一下就回應你

    這比一般聊天機器人多了兩件事:

    • 不用切視窗打字,邊寫程式邊講話就能查資料、記 To-do
    • 遊戲全螢幕時仍可用語音讓 Airi 幫你查攻略、算資源

    你可以先準備:

    • 一個麥克風(筆電內建也可)
    • 耳機(避免回授回音)

    安裝好後,在 Airi 的 Web 或桌面客戶端裡,找到 Voice / Call / Talk 類選項,試著說一句:

    「幫我記一下,10 點要去打王。」

    確認 Airi 能聽懂、重複你剛說的提醒,就代表語音通路打通了。

    💡 關鍵: 長時間低延遲語音掛機,讓 Airi 更像常駐同事,而不是臨時叫用的聊天機器人。


    3. 跟遊戲雙向互動:Minecraft、Factorio 副駕駛

    Airi 的另一個重點,是能直接連到遊戲伺服器,讀取資訊、發送指令,目前官方強調支援:

    • Minecraft
    • 讀取聊天、座標、玩家狀態
    • 讓 Airi 發聊天訊息、執行伺服器指令
    • 能當「伺服器管理員」、「新手顧問」或「劇情 NPC」
    • Factorio
    • 掃描工廠狀態、產線 bottleneck
    • 建議你要擴產哪條線、缺哪種物資

    實際玩法舉例:

    • Minecraft 裡打 /askairi 我怎麼做一個自動農場?
    • Airi 在遊戲聊天裡回你步驟,同時用語音對你講解

    你可以安排一個晚上做這件事:

    1. 準備一個 Minecraft 伺服器(本地或雲端都可)
    2. 依 Airi README 中的 Minecraft / Factorio 插件說明:
    3. 在伺服器裝上 Airi 提供的插件 / 模組
    4. 在 Airi 設定檔填入伺服器位址與 API 金鑰
    5. 重新啟動伺服器並進入遊戲,測試呼叫 Airi

    4. 多平台客戶端 + 多種 LLM 後端

    Airi 支援:

    • Web 介面:瀏覽器直接用,管理設定、對話、記憶
    • macOS / Windows 客戶端
    • 固定在桌面右下角、選單列
    • 快捷鍵喚出,直接講話或輸入文字

    LLM 後端則非常彈性:

    • 本地開源模型(透過 Ollama、LM Studio 等)
    • 雲端 API:OpenAI、Anthropic、Qwen、Gemini…(依 README 支援)

    對於想要「免費 / 低成本玩起來」的讀者,建議:

    • 若有 16GB RAM 以上 + 顯示卡:考慮用 Qwen 3.x 7B / 14B 這種偏擅長 Agent 任務的模型
    • 若硬體較弱:先用 雲端 API 的小模型(如 gpt-4o-mini 類),避開本地推論壓力

    💡 關鍵: 有 16GB RAM 加獨顯時,本地模型就能順跑,真正做到零額外流量費與隱私全在自己機器。

    你現在可以做:

    • 選擇你要的模型來源,準備好:
    • 本地:先安裝 Ollama,拉一個模型 ollama pull qwen2.5:latest
    • 雲端:到 OpenAI / Anthropic 後台申請 API Key
    • 在 Airi 設定檔裡填入:模型名稱、API Key、base URL

    適合誰用:幾個具體場景

    1. 桌面語音助理:在你電腦旁邊工作的「同事」

    可以這樣用:

    • 開會前對 Airi 說:「幫我整理這份 PDF 的重點。」
    • 寫程式時問:「這段 TypeScript 為什麼報錯?」
    • 長時間聊天:讓 Airi 記住你正在進行的專案、偏好工具

    搭配其他工具:

    • 結合 Claude Code / Cursor / codegraph 之類開發環境,把「寫程式」交給 IDE,把「討論設計、備忘錄」交給 Airi

    行動建議: 安裝好後先定義一個簡單工作流,例如:

    每天早上請 Airi 根據行事曆排三件最重要的事,晚上讓它跟你一起檢討完成度。


    2. 遊戲副駕駛:策略腦 + 資源小管家

    在 Minecraft / Factorio / 其他支援的遊戲裡:

    • 讓 Airi 記住你的長期目標(例:一週內完成終界龍擊殺 / 火車自動物流)
    • 每次登入時請它提醒:現在缺什麼資源、下一步該做什麼
    • 遊戲裡臨時問:「我現在要去哪裡刷 X 資源效率最高?」

    高級玩法:

    • 讓 Airi 按固定節奏掃描伺服器狀態,自己發現問題
    • 例如:箱子爆滿、產線堵塞,就自動在聊天頻道喊你

    行動建議: 設計一個明確角色給 Airi,例如:

    「你是我們伺服器的資源總管,只關心是否缺料,缺了就通知我並給出最短補貨路線。」

    把這段人格設定寫進 Airi 的系統提示 / persona 設定中。


    3. 長陪伴聊天夥伴 + 跨工具 Agent

    如果你想要一個可以長期記住你喜好、過去對話的 AI:

    • 利用 Airi 的記憶系統,讓它記:
    • 你常玩的遊戲
    • 你的工作類型、平常的困擾
    • 你的目標(練英文、學某個框架…)
    • 長期和它聊,讓它慢慢形成「認識你」的狀態

    再往上,可以接其他 Agent 平台:

    • 例如:
    • Airi 作為前端「主對話窗口」
    • 後面串 zero.xyz 去調用 ~8000 個工具、API
    • Phasr 類工作流引擎,讓它一次跑多個任務而不丟上下文

    行動建議: 想一個你真的會常用的主題,例如「學習 Rust」,把它寫成 Airi 的長期任務:

    「你的任務是陪我在三個月內學會 Rust,定期出作業、review、提醒我寫 code。」

    💡 關鍵: 把長期學習或遊戲目標寫成任務與記憶,Airi 才能持續主動「記得你」而不是每次重來。


    怎麼開始:一個晚上就能跑起自己的 Airi

    1. 推薦最低硬體配置

    • CPU:四核心以上
    • RAM:16GB 起跳(跑本地 LLM 比較穩;如果只用雲端 API,8GB 也可)
    • 儲存:至少預留 20GB(模型 + 日誌 + 記憶)
    • 顯示卡:有獨顯最好(跑本地模型會輕鬆很多),沒有也能用雲端 API

    2. 用 Docker 一鍵跑起來

    以常見流程簡化示意(實際請以官方 README 為準):

    # 1. 先裝好 Docker & Docker Compose
    # 2. 在你想放 Airi 的資料夾裡:
    
    git clone https://github.com/moeru-ai/airi.git
    cd airi
    
    # 3. 啟動服務
    docker compose up -d
    

    接著:

    1. 瀏覽器開 http://localhost:PORT(PORT 依 README 為準)
    2. 看到 Airi 的 Web 介面後,先建立一個帳號 / 角色
    3. 在設定頁:
    4. 選擇 LLM 後端(本地或雲端)
    5. 設好語音輸入輸出

    如果你不熟 Docker,專案通常也會提供一鍵腳本(如 run.sh / start.ps1 類),照 README 指示執行即可。


    3. 配一個免費 / 便宜的模型

    兩條路線擇一:

    路線 A:本地開源模型(零額外成本,壓力在硬體)

    1. 安裝 Ollama:https://ollama.com
    2. 下載一個中小型模型,例如:

    bash
    ollama pull qwen2.5

    1. 在 Airi 設定裡把 LLM URL 指向 http://localhost:11434,模型名稱填 qwen2.5

    路線 B:雲端 API(硬體負擔低,按量計費)

    1. 到你喜歡的 LLM 服務註冊帳號(如 OpenAI)
    2. 建立 API Key
    3. 在 Airi 介面填入:
    4. API Key
    5. 模型名稱(例如 gpt-4o-mini

    測試是否成功: 在 Airi 裡輸入一句:「幫我用條列整理一下 Airi 是什麼?」看能否正常回覆。


    4. 進階玩法:Minecraft 綁語音 + 自訂人格與長期記憶

    (1) Minecraft + 語音副駕駛

    大致步驟(細節以 Airi README 中的 Minecraft 節為準):

    1. 在你的 Minecraft 伺服器安裝 Airi 專用插件 / Mod
    2. 在 Airi 後台新增一個「Minecraft 連線」,填入:
    3. 伺服器位址
    4. 驗證金鑰
    5. 設定一個提示模板,例如:

    你是這個伺服器的導遊,會用中文在遊戲聊天和語音裡同時回應玩家問題。

    測試:在遊戲裡打 /airi 這附近有什麼資源?,看聊天與語音是否同步回應。

    (2) 自訂人格 + 長期記憶

    在 Airi 的 persona 或 system prompt 區裡,可以寫:

    • 身份:

      你是住在我電腦裡的 AI 室友,平常會關心我的工作進度和遊戲計畫。

    • 口吻:

      輕鬆、直接,避免太官方的說話方式。

    • 記憶策略:

      遇到我的偏好、長期目標、常見問題時,請寫入長期記憶,下次主動提起。

    接著在 Web 介面裡,偶爾去「記憶 / memories」頁面檢查:

    • 刪掉已過時的資訊
    • 補充重要但沒被好好記錄的背景

    這樣 Airi 就會越來越像一個真的「老朋友」,而不是每次都從零開始的聊天機器人。


    最後,建議你空出一個完整晚上,按這個節奏走:

    1. 用 Docker 跑起 Airi
    2. 選一個模型 + 打通語音
    3. 寫一段屬於你的 persona
    4. 如果有 Minecraft 伺服器,再綁一次遊戲互動

    做到這四步,你就真正「把一個 AI 養在自己的電腦裡」,之後只需要慢慢調人格、調記憶,讓它變成最懂你的那一個。

    🚀 你現在可以做的事

    • 打開 Airi GitHub 專案,按照 README 用 docker compose up -d 跑起第一個實例
    • 在 Airi 設定中接上一個模型(本地 qwen2.5 或雲端 gpt-4o-mini),並測試一句對話是否正常
    • 寫一段簡短 persona(例如「AI 同事」或「伺服器資源總管」),儲存後連續跟它聊幾天觀察效果
  • Claude Code 動態工作流實戰指南

    Claude Code 動態工作流實戰指南

    📌 本文重點

    • 動態工作流讓 Claude Code 變成能總包整個 repo 的工程助手
    • Opus 4.8 提升程式推理與錯誤自查效率,並提供快速模式省時省錢
    • Ultracode 把大規模 code review 與安全審計變成一個指令可完成

    用一句話講清楚:Claude Code 的「動態工作流」讓你把「重構整個 repo、語言遷移、資安審計」交給一個會自己拆分任務、開數百個子 Agent 平行跑、還會自我驗證結果的代碼工地總包商。


    核心功能:從「聊天寫程式」升級成「工程總包」

    1. 動態工作流:自動拆分、平行執行、自己驗收

    Anthropic 在 Claude Code 中加的 dynamic workflows,關鍵不是「多 Agent」本身,而是:

    • 由模型自己寫協調腳本orchestration scripts
    • 自動把工作拆成數十到數百個子任務
    • 每個子任務對應一個子 Agent 平行跑
    • 結束前先做一輪自我驗證,只把過檢的結果給你

    最典型的實戰案例,是 Bun 作者用它做 Zig→Rust 遷移:

    近 75 萬行代碼、約 11 天完成,測試通過率 99.8%(來源:Reddit 動態工作流介紹

    💡 關鍵: 對接近 75 萬行程式碼的遷移專案來說,11 天達到 99.8% 測試通過率,代表這套動態工作流足以接住大型、原本高風險的重構工程。

    實際會怎麼跑? 以「整個 repo 重構」為例,dynamic workflows 大致會:

    1. 掃描 repo,產生檔案與模組地圖
    2. 規劃任務圖(Task graph):例如先改 domain 層,再跑 API 層,最後是 UI
    3. 平行啟動子 Agent:每個 Agent 負責一組檔案或一類修改(型別調整、logging 統一、錯誤處理強化…)
    4. 在背景自動做 diff、測試、靜態檢查
    5. 聚合結果,過一輪總審查後才丟回給你

    你可以這樣用(行動建議):

    • 想重構:
    • 在 Claude Code(或 API)裡給它:
      • 專案簡介 + 技術棧
      • 現在的痛點(例如:循環依賴、例外亂飛、型別不嚴謹)
      • 你願意接受的改動範圍(例如:可以改 public API?可以拆模組嗎?)
    • 下指令像:「為這個 monorepo 設計一個 2 週內可以完成的重構計畫,用動態工作流分批執行。」

    • 想做資安審計:

    • 給它 repo,說明:框架、使用的雲服務、資料敏感區
    • 指令示例:「用動態工作流做一次安全掃描,重點找:未驗證的輸入、SQL injection 風險、憑證硬編碼、弱 JWT 驗證。」

    2. Opus 4.8:程式推理更穩、錯誤自查率變 4 倍

    根據 Anthropic 官方與社群測試(如 Decoder 報導r/artificial 整理):

    • 程式錯誤檢測能力較 4.7 提升約 4 倍:更容易自己指出「這裡可能 NPE」「這裡 race condition」「這裡忽略錯誤」。
    • 在瀏覽器 / 電腦代理 benchmark(Online-Mind2Web)上,Opus 4.8 優於 GPT-5.5,也就是比較會自己「操作工具」而不是只寫字。
    • 使用者回報的特點:更常誠實承認「沒做完」「這裡有風險」,對長流程開發很重要。

    更關鍵的是新增了「快速模式」(fast mode

    • 2.5 倍速度
    • 成本約是完整模式的 1/3 左右(數字隨官方調整,但量級在這附近,來源:r/ClaudeAI

    💡 關鍵: 在程式錯誤檢測提升約 4 倍的同時,fast mode 還能以約 1/3 成本提供 2.5 倍速度,讓你可以先用低成本掃全 repo,再用完整模式精修關鍵部分。

    怎麼選模式才划算?

    • 用快速模式的情境
    • 寫 template、樣板 code(CRUD、UI 元件鋪排)
    • 大量簡單檔案轉換(例如 config 重排、註解補齊)
    • 先跑一輪粗略掃描(安全 / style / dead code)

    • 改用完整(非快速)模式的情境

    • 棘手 bug 定位(多執行緒、邊界條件)
    • 關鍵底層邏輯(交易撮合、金流、權限系統)
    • 產出要長期維護的設計文件或核心 API 介面

    實作建議:先用快速模式跑全 repo 掃描 → 把它標出的高風險區塊,再交給完整模式精修。


    3. Ultracode:把「大規模 code review」變成一個指令

    Ultracode 是 Claude Code 裡針對程式碼審查的強化工作流(參考 r/ClaudeAI 討論):

    • 你只需要丟一個 diff、Pull Request 或整個子資料夾
    • Ultracode 會在背景開子工作流做:
    • 分檔案審查
    • 風險排序(安全 > 穩定性 > 可維護性)
    • 驗證自己的意見是否一致,再回傳整理過的 review

    實際效果偏向:一個很嚴格、沒情緒的資深工程師,會吐槽你 data2 這種變數名(參考「讓 Claude 審查 Claude」的案例)。

    你可以這樣用(行動建議):

    • 小團隊 / Side project:把 PR 丟給 Ultracode,要求:
    • 「請只標出會導致 bug / 安全問題的變更,逐一解釋原因。」
    • 「另外列一份『可選優化清單』,讓我有時間再慢慢改。」

    • 個人練功:

    • 把自己最近寫的一個模組丟給 Ultracode,問:
      • 「請假裝你是 code reviewer,列出你會擔心的 10 個點。」
      • 把每個問題的建議重構方式具體寫出來,附簡短範例。

    適合誰用?幾種典型場景

    1. 重寫或升級舊系統

    典型痛點:老專案沒測試、沒文件、沒人敢動。

    可以這樣切:

    1. 用 Claude Code 建一份系統地圖
    2. 指令:「為這個 repo 建一份架構圖,包含模組依賴、資料流、外部服務。」
    3. 問它「若想把 A 模組替換成 B 技術棧,請設計一個最小風險的遷移計畫」,讓它給分批 PR 設計。
    4. 啟用動態工作流分批套改(例如先把 logging 換掉,再換 ORM)。

    2. 大規模代碼審計與安全掃描

    結合 dynamic workflows + Ultracode:

    • 全 repo 掃描:
    • 找硬編碼密鑰、弱加密、未驗證輸入
    • 為每類問題產生「修復模板」和自動修正 PR 草案

    • 持續使用方式:

    • 在 CI 加一步,用 Claude API 對每個 PR 跑 Ultracode 審查(可參考 Cloudflare 的 AI code review 實務 思路)。

    3. 多語言遷移(Zig→Rust、Python→TypeScript 等)

    Bun 的 Zig→Rust 遷移是一個極端例子,你可以用同樣思路做「比較小但現實」的版本:

    • Python backend → TypeScript(Express / Nest / tRPC
    • JS 老專案 → TypeScript + stricter ESLint
    • PHP legacy → Laravel / Symfony 新專案

    實作建議:

    1. 先選一個獨立、低風險模組試轉,例如:
    2. 「通知系統」「報表匯出」「第三方 API 包裝」
    3. 指令示例:
    4. 「把這個 Python 資料轉換模組遷移到 TypeScript,目標環境是 Node 20 + TypeScript 5,型別要寫滿。」
    5. 測試穩了,再用動態工作流把相同 pattern 套到其他模組。

    4. 一人公司 / Side Project 的開發流程

    把 Claude Code 當作:

    • 一個幫你拉腳手架、寫樣板、整理測試的 junior dev
    • 再加上一個幫你審 PR、找安全洞的 senior reviewer

    你可以設計一個固定節奏:

    1. 功能草圖 → 讓 Claude 產生目錄結構與初版 code
    2. 自己補關鍵業務邏輯
    3. 用 Ultracode 做一次 code review + 測試覆蓋率建議
    4. 每個 sprint 最後,用動態工作流掃一次「錯誤處理 / logging / metrics 是否一致」

    怎麼開始:從免費聊天到整 repo 動態工作流

    1. 最低門檻:claude.ai 免費方案能做到什麼?

    入口:https://claude.ai

    目前免費帳號:

    • 可以使用新版模型(通常是 Sonnet / 部分場景下可用 Opus fast
    • 適合:
    • 單檔 / 小模組的重構、bug debug
    • 讓它幫你讀一份錯誤訊息、log、或小型程式片段

    實際用法建議:

    1. 先貼一個單檔(或小於幾百行的檔案),請它:
    2. 「幫我找 bug / 重構 / 改風格」
    3. 再貼一個小 repo 的 zip / 關鍵檔案集合,問:
    4. 「請幫我畫出這個專案的架構圖與資料流程。」

    當你開始需要:

    • 長時間、多輪的代碼工作
    • 跑動態工作流、Ultracode、Opus 4.8 完整能力

    就會需要升級到 Claude Pro / Max / Team 或企業方案(具體功能以官方頁面為準)。


    2. 在終端安裝開源版 anthropics/claude-code

    GitHub:https://github.com/anthropics/claude-code

    基本安裝流程(概念):

    # 1. 安裝
    pip install claude-code  # 或依照 repo README 指示
    
    # 2. 設定 API Key(以官方 Claude API 為例)
    export ANTHROPIC_API_KEY="你的 API Key"
    
    # 3. 在專案根目錄啟動
    cd 你的專案目錄
    claude-code
    

    然後你就可以在終端跟它對話:

    > 幫我找出 src 下面所有可能的 race condition,並建議重構方式。
    > 幫我寫一個腳本,批次把 React class component 改成 function + hooks。
    

    動態工作流、Ultracode 會隨著你帳號權限與版本逐步釋出;用開源終端版的好處是:更容易和你自己的工具鏈(git、CI、測試框架)接軌。


    3. 透過 API / Bedrock / Vertex AI 調用動態工作流

    如果你要把這些能力塞進自己的內部平台或 CI:

    • Claude API:https://www.anthropic.com/api
    • Amazon Bedrock:在 Bedrock 控制台選擇 Claude Opus / Claude Code 相關 model
    • Google Vertex AI:在 Model Garden 選擇 Claude / Claude Code

    動態工作流目前通常以「研究預覽」方式提供給 Max / Team / Enterprise,透過:

    • 在請求中指定對應的 model / capability 標誌
    • 或使用官方提供的 workflow endpoint / 模板(需看當下文件)

    工程整合建議:

    • 在 CI 裡新增一個步驟:
    • 將本次 PR 的 patch / diff 打包
    • 呼叫 Ultracode / dynamic workflows 做審查
    • 把審查結果回寫成 bot comment

    4. 一個「從小到大」的漸進式實驗腳本

    你可以照這個順序,逐步加深依賴,而不會一開始就把整個 repo 丟給它:

    1. 單檔小任務claude.ai 免費即可)
    2. 目標:讓它幫你修一個 bug / 重構一個 utility
    3. 檢查點:看它產出的 code 是否可讀、是否真的有幫你省時間。

    4. 小 repo(1–3 個模組) + Claude Code 終端版

    5. 目標:讓它在終端幫你跑測試、改幾個檔案、整理 commit
    6. 指令示例:「設計一組 PR,把這個小專案升級到最新框架版本。」

    7. 整個代碼庫 + 動態工作流 / Ultracode

    8. 目標:一次性做一個「人力不想做」的大工程:
      • 全 repo 錯誤處理統一
      • 安全掃描 + 自動修復草案
      • 語言 / 框架遷移的一個大模組
    9. 檢查點:
      • 先在 staging / feature branch
      • 用你自己的測試 + Claude 的自我驗證雙重把關

    照這個步驟,你會很快感受到:Claude Code 已經不只是「幫你補幾行程式碼」,而是可以接下「這個季度我們一直不想動的那一坨技術債」,而你只需要負責決策方向與最後拍板。

    🚀 你現在可以做的事

    • claude.ai 用免費帳號先丟一個單檔,實測一次 bug 修正或小重構流程
    • 在自己的專案根目錄安裝並啟動 anthropics/claude-code,讓它對一個小模組跑動態工作流或 Ultracode
    • 在現有 CI 流程中,挑一條非關鍵分支試接 Claude API,讓 Ultracode 對 PR 自動產生第一次 code review 評語
  • Anthropic 一兆估值:AI 基建寡頭的成形時刻

    Anthropic 一兆估值:AI 基建寡頭的成形時刻

    📌 本文重點

    • Anthropic 正被定價成「AI 公用事業」級別基礎設施
    • 工具鏈與 SDK 集中化,正加速開發者與企業被鎖死
    • 安全與監管話語權,正在被少數估值超高的寡頭掌控

    Anthropic 在 H 輪融資中拿下 650 億美元、估值 9650 億美元,這已經不是「新創成功」的故事,而是「AI 基礎設施寡頭」正式成形的時間點。我對技術本身是偏多的,但對這種幾乎貼近 AGI 級別 的估值,抱持非常高的資本過熱警戒。這一輪不是單純泡沫,而是 AI 從產品競賽走向基建壟斷預期的轉折。


    ① 這不再是 SaaS 估值,而是「AI 基礎設施壟斷預期」

    先看幾個關鍵數字:

    • 估值:9650 億美元,逼近 1 兆(Series H 後市值,TechCrunch / Anthropic 官方)
    • 新資金:650 億美元,這不是「成長輪」,而是直接在堆砌一座算力發電廠
    • 年化收入:約 470 億美元(CFO Krishna Rao 對外說法)

    💡 關鍵: 估值 9650 億 + 年化收入約 470 億,代表市場已把 Anthropic 當成未來 AI 公用事業與基礎設施寡頭在定價,而非一般 SaaS 公司。

    把這組數字丟進任何傳統 SaaS / 雲服務估值模型,都會直接當機。這個估值隱含的不是「多賣幾倍 API」、也不是「辦公室軟體雲端化」,而是資本市場在押一個更極端的敘事:

    未來的通用 AI 能力,就像電力、自來水與雲端計算,是由少數幾家超級供應商長期壟斷。Anthropic 被定價成其中一根 AI 高壓電塔。

    從產業結構來看,這個估值是在預支三層「壟斷紅利」:

    1. 算力基建壟斷:650 億美元會大幅砸向 GPU、資料中心、專用加速器。這不是一般公司「多買幾張 A100」,而是 直接在底層算力上卡位,與雲端巨頭一起把未來十年的 AI 生產資料中心「先買斷」。

    2. 模型層壟斷:當 Anthropic、OpenAI、Google 成為唯三能穩定訓練頂級 frontier model 的公司,整個產業會從「百模爭鳴」回到 少數幾個國際標準(就像行動 OS 最後只剩 iOS / Android)。

    3. 生態位壟斷:不只模型,連 SDK、代理框架、企業集成標準都被同一批玩家掌控,形成 從晶片 → 模型 → SDK → 工具鏈 → Marketplace 的垂直封閉鏈條。

    這就是為什麼 Anthropic 能拿到接近一兆估值:市場不是在買「一間做聊天機器人的公司」,而是在買「未來 AI 公用事業公司」的門票。 這對技術長期發展是利多,對競爭與治理則是警訊。


    ② 對開發者與企業:技術路線被鎖定,談判權往上游集中

    這一輪最值得開發者警戒的,不是模型多強,而是 誰在握工具鏈。

    根據 Towards AI 報導,Anthropic 收購了一家為 OpenAI、Google、Meta、Cloudflare、Cerebras 等提供 SDK 編譯器的關鍵基礎設施公司。這件事目前業界還沒大吵,但含義非常清楚:

    誰掌握 SDK,就掌握開發者的預設路線。

    在實務上,這會導致幾個結構性變化:

    1. 工具鏈集中化:一兩家廠商握住大部分 AI SDK/agent framework

    開發者不是直接「選模型」,而是先選框架、SDK,再被默默導向某幾家預設供應商。當 Anthropic 同時是模型供應商 + SDK gatekeeper,就等於在談判桌上多了一層槓桿:

    • 價格可以透過「綑綁方案」來模糊上漲
    • 預設選項可以讓競品被放在體驗次優的角落

    • 技術路線鎖定:從「多雲多模」變成「事實上的單一供應商」

    理論上大家都說要 multi-model / multi-cloud,但當你的內部工具、workflow、自動化代理全綁在某家 SDK 上,切換成本就從「換 API key」變成「重寫整個 AI 工程堆疊」。企業 IT 會發現:

    • 法務覺得多簽幾家供應商很安全
    • 工程團隊卻被工具鏈默默鎖在一兩家大廠之內

    • 中小模型與開源被擠壓在「次級市場」

    如果 SDK 預設支援的是 Anthropic + 少數幾家頭部模型,那麼:

    • 開源模型、地端模型被 relegated 成「高摩擦實驗選項」
    • 真正做到自訓 / 混合架構的公司,會被迫投入更多 infra 成本

    💡 關鍵: 當 SDK 與工具鏈被少數模型供應商整合,企業的「multi-cloud / multi-model」常會淪為紙上談兵,實際上是高成本的單一供應商依賴。

    開發者接下來要做的,不再只是「選哪家模型」的問題,而是要主動抵抗工具鏈的單一化。 實務建議:

    • 在架構設計上,務必自建一層「模型抽象層」(例如自行封裝一個 internal LLM client,而不是直接寫死某家 SDK)

    • 優先選擇 自家可控、開源或至少多供應商支援的 orchestration / agent framework

    • 企業決策層要認真看待 vendor lock-in 風險,不要被「先上先贏」的 FOMO 氛圍推著跑


    ③ 對使用者與社會:最有錢的公司,也握著「安全」話語權

    Anthropic 一直主打「安全對齊」與「憲法式 AI」,這在技術與理念上值得肯定。然而當一家估值逼近一兆、手握前沿模型的公司,同時掌控 AI 安全話語權,就產生了一個微妙的結構:

    安全,不再只是學術與公共議題,而是 IPO 前的重要敘事資產。

    幾個結構性風險會逐步浮現:

    1. 監管節奏被資本市場綁架

    當前沿公司接近 IPO、年化收入被報到 470 億美元 這個量級時,「成長故事」會壓過一切。管理層在實務上會面臨:

    • 安全研究與治理機制,會被要求「不要拖慢產品 shipping」
    • 對外談風險,要「夠負責」,但不能真的踩到 增長剎車

    • 安全標準與價格結構,被同一批寡頭定義

    當 Anthropic、OpenAI、Google 同時是:

    • 模型供應商
    • SDK / 生態平台主宰者
    • 「AI 安全」與「對齊框架」的主流制定者

    那麼「什麼是負責任的 AI」、「什麼是合理的成本與價格」就會被預設成少數美國大型公司認為合理的樣子。這會帶來:

    • 全球南方國家、中小企業對 AI 的 可負擔性問題 被邊緣化
    • 安全門檻有可能被用來 合理化高價與高門檻接入(例如更嚴格審核、但實際上是市場篩選機制)

    • 真正多元的治理聲音被擠出場外

    資本會偏好「能跟監管機構好好說話的大公司」,於是:

    • 小型安全研究組織、獨立開源社群的影響力相對下降
    • 監管機關更習慣「諮詢幾家巨頭」,將其視為代表整個產業

    💡 關鍵: 當「安全」變成高估值公司手中的敘事資產時,安全與增長之間的取捨,很可能由少數寡頭在封閉談判桌上決定,而不是公開多元的社會討論。

    當 AI 走到「寡頭基建」階段,風險不在於技術進步,而在於誰有權定義「安全、合理、公平」。現在是資本與治理權高度重疊的時刻。


    結論:這不是泡沫尾聲,而是寡頭基建開場,我們要做什麼?

    我不認為 Anthropic 這一兆估值 是單純的狂熱泡沫——這裡面確實反映了通用模型在各產業的 長期基建價值。但更關鍵的是:

    AI 正從「創業故事」轉向「寡頭基建」階段;現在缺的不是更多 FOMO,而是更成熟的監管與競爭設計。

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

    • 對開發者
    • 把「避免深度 vendor lock-in」當成架構設計的一等公民
    • 優先學會 跨模型、跨雲的抽象設計,不要只做某家 API 的高級使用者
    • 主動支持並參與 開源工具鏈與模型評測,在生態裡維持一條可行的備用路線

    • 對企業決策者

    • 在採用 Anthropic / OpenAI / Google 時,把集中風險寫進風險評估與合約條件,而不是事後才補課
    • 預留預算與人力實驗 開源與地端模型,即使短期 ROI 不明顯

    • 對政策與監管單位

    • 將 工具鏈整合與 SDK 收購 視為反壟斷與競爭政策的重點,而不是只盯模型參數大小
    • 設計讓 中小模型供應商與開源社群 有制度性發聲與參與標準制定的機制

    技術值得看多,估值需要冷靜。如果我們放任 AI 基建完全在少數幾家「最有錢又掌握安全話語權」的公司手裡定義,十年後爭論的就不只是誰的模型比較聰明,而是誰還有資格接入這個新基礎設施。現在是把遊戲規則寫好的最後窗口期。

    🚀 你現在可以做的事

    • 審視現有專案中與特定 AI 廠商深度綁定的 SDK / 工具鏈,評估是否需要加一層自建抽象層
    • 去 GitHub 搜尋並試用至少一個多模型支援的開源 agent / orchestration 專案,作為未來備援方案
    • 若你在企業或政策相關單位,將「AI 工具鏈集中化與 SDK 收購」列入下一輪風險評估或政策討論議程
  • AI Middleware 控制層實戰指南

    AI Middleware 控制層實戰指南

    📌 本文重點

    • 直接在業務程式碼呼叫 LLM API 是反模式
    • 需要獨立 AI Middleware 控制層集中治理
    • 控制層是從 demo 到 production 的關鍵分水嶺
    • 多代理與記憶治理必須納入審計與安全設計

    先講結論:直接在產品程式碼裡 fetch('https://api.llm.com') 是一種反模式。當功能從「問答」長成「多工具、多代理、多租戶」時,你會需要一層專門的 AI Middleware 控制層,把:

    • 模型路由與選型
    • Tool / Agent 協調
    • log / trace / metrics
    • 成本與速率限制
    • cache / 重試策略
    • 合規與安全策略注入

    從業務程式碼中抽出來,集中治理。這一層就是 LLM 應用從 demo 到 production 的分水嶺

    💡 關鍵: 把所有 LLM / Tool / Agent 呼叫收斂到單一控制層,是從玩具 demo 變成可維運產品的必要條件


    重點說明:為什麼要獨立 AI Middleware 控制層?

    1. 從「直接 call 模型」到「控制層」

    傳統 Web 三層:UI 層 → Service 層 → DB 層

    LLM 應用如果是:UI → 直接呼叫模型 API,你會發現:

    • 想加 多模型路由(如 GPT + Claude + 本地模型)時,只能四處找出 openai.chat.completions.create 逐一改。
    • 想統一 重試 / 超時 / 灰階 / rollback,根本沒有共同入口可以掛。
    • 想做 成本統計、用戶配額,只剩 trace log 回頭瞎猜。

    控制層的做法是:

    Product Code → AI Middleware(控制層)→ 各家模型 / 工具 / Agent

    所有模型呼叫先經過這一層,才能實作像 API Gateway + Service Mesh 那種集中治理能力。

    2. 控制層的核心職責拆解

    實務上,控制層至少要負責這幾件事(建議直接當 checklist):

    1. 路由與模型選擇
    2. 任務類型、租戶、成本上限、延遲預算 選擇具體模型。
    3. 範例策略:summary 走便宜模型;寫 SQL 走更準確模型;UGC 敏感類先加安全模型前置審查。

    4. Tool / Agent 協調

    5. 統一管理 工具 registry、Tool 調用權限、Agent orchestration。
    6. 在多代理系統中,把「誰能叫什麼工具」和「記憶寫入策略」集中配置,而不是散落在各 Agent 類別裡。

    7. 觀測與追蹤(logs / traces / metrics)

    8. 每個 LLM 請求、工具呼叫、記憶讀寫 都要有 trace id。
    9. 對接 OpenTelemetry 或 APM:把 token 數量、延遲、錯誤碼、cache 命中等變成可查詢的 metrics。

    10. 成本與速率限制

    11. user / org / feature 做 token 配額與 qps 限制。
    12. 將成本計算邏輯(model 單價、權重)集中在控制層。

    13. cache 與重試策略

    14. 根據 prompt 指紋 + 入參 做 deterministic 回答的 cache。
    15. 定義 哪些錯誤可重試、最大重試次數、退避策略,避免在業務層各自實作。

    16. 合規與安全策略注入

    17. 對接 DLP、敏感詞檢測、角色權限,把 prompt / tool call / output 走同一條審查管線。
    18. 企業內部可在這裡插入 審批流(human-in-the-loop)

    💡 關鍵: 成本、風險與合規控制若不集中在控制層,很難在日後擴展時補強而不「大重構」

    3. 審計追蹤與記憶治理:多代理系統必備

    多代理系統與企業場景最常見的兩個雷:

    • 沒有審計 trail:agent 到處點擊、下單、寫 ticket,最後出了事誰也說不清「是第幾步決定下單」?
      → 參考 Reddit 討論:AI agents 比起更多自主性,更需要完整 audit trail。控制層就是自然的落點。

    • 記憶污染嚴重:所有 agent 都能隨意寫向量庫,久了之後充滿過期決策、敏感資料。
      → 引入 Memory Curator 概念:worker agent 只能發出 記憶事件,由專門的記憶治理層決定要不要寫入、寫到哪個 scope(個人 / 團隊 / 專案 / 會話)。

    這兩件事如果不在控制層規範好,就會像 Reddit 上那位開發者形容的:「前三週一切正常,之後 retrieval 變成噪音地獄」。


    實作範例:用 Genkit 與 Vercel AI Gateway 搭 Node / Python 控制層

    下面用兩個路線示範:

    • Node:Google Genkit + Vercel AI Gateway
    • Python:簡易自製 Middleware(搭配 OpenTelemetry

    範例一:Node + Genkit Middleware(含 model 路由與 observability)

    安裝與基礎設定(簡化示意):

    npm install @genkit-ai/core @genkit-ai/openai @genkit-ai/firebase
    npm install @opentelemetry/api @opentelemetry/sdk-node
    

    建立 aiClient.ts 當控制層入口:

    // aiClient.ts
    import { genkit, z } from "@genkit-ai/core";
    import { openai } from "@genkit-ai/openai";
    
    const ai = genkit({
      plugins: [openai()],
    });
    
    // 定義模型路由策略
    const pickModel = (task: string) => {
      if (task === "summary") return "gpt-4.1-mini";
      if (task === "sql") return "gpt-4.1";
      return "gpt-4o";
    };
    
    // 中央統一的生成函數
    export async function generateText(req: {
      task: "summary" | "sql" | "general";
      input: string;
      userId: string;
    }) {
      const model = pickModel(req.task);
    
      // observability: 附上 trace metadata
      const traceMeta = {
        userId: req.userId,
        task: req.task,
        model,
      };
    
      return ai.generate(
        {
          model,
          prompt: req.input,
        },
        {
          // middleware hooks: 可插 retry / cache / logging
          trace: traceMeta,
        }
      );
    }
    

    在 Genkit middleware hooks 中加入 cache / retry / 安全策略(概念程式):

    // middleware.ts
    import { registerMiddleware } from "@genkit-ai/core";
    
    registerMiddleware(async (ctx, next) => {
      const key = hashPrompt(ctx.request);
    
      // 1. Cache 命中
      const cached = await cacheGet(key);
      if (cached) {
        ctx.log.info("cache-hit", { key });
        return cached;
      }
    
      // 2. 成本與速率限制
      await enforceQuota(ctx.trace.userId, ctx.request.model);
    
      // 3. 安全策略:例如 DLP 檢查
      await checkPromptPolicy(ctx.request.prompt);
    
      // 4. 重試包一層
      return retry(async () => {
        const res = await next();
        await cacheSet(key, res);
        return res;
      }, { retries: 2, backoffMs: 200 });
    });
    

    前端 / 服務層就只呼叫 generateText,完全不碰 openai.chat 類 API。未來換模型、加灰階、接別家供應商,只要改控制層即可。

    範例二:Node + Vercel AI Gateway 作為集中入口

    Vercel AI Gateway 提供 統一 endpoint + 多模型路由 + 速率限制 + 規則引擎,很適合當外部控制層。

    基本設定(vercel.json 或 UI 設定):

    • 建立一個 Gateway route,例如:https://ai.yourdomain.com/v1/chat
    • 配置 providersOpenAI / Anthropic / 自建模型。
    • 寫 routing rule:
    • if (task == 'summary') -> openai:gpt-4.1-mini
    • if (tenant == 'premium') -> anthropic:claude-3.7

    前端程式碼(Next.js 伺服器端)只需要呼叫單一 gateway:

    // app/api/ai/route.ts
    import { NextRequest, NextResponse } from "next/server";
    
    export async function POST(req: NextRequest) {
      const body = await req.json();
    
      const res = await fetch(process.env.AI_GATEWAY_URL!, {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          "X-Tenant": body.tenantId,
          "X-Task": body.task,
        },
        body: JSON.stringify({
          messages: body.messages,
          stream: body.stream ?? false,
        }),
      });
    
      // 這裡可以加 audit log / trace id
      return new NextResponse(res.body, { status: res.status });
    }
    

    優點:

    • 速率限制、成本統計、提供者 failover 直接用 Vercel 的 console 配。
    • 灰階與回滾:改 routing rule 即可,比如 10% 流量導到新模型。

    💡 關鍵: 把流量管理與模型路由交給 gateway,可用設定檔與後台調整,而不必每次動到應用程式碼

    範例三:Python 控制層 + 記憶治理(Memory Curator)

    假設你在做多代理系統,希望 worker agent 不能直接寫入向量庫

    # ai_control_layer.py
    from dataclasses import dataclass
    from typing import Literal, Dict, Any
    
    Scope = Literal["agent", "team", "project", "session"]
    
    @dataclass
    class MemoryEvent:
      scope: Scope
      content: str
      evidence: Dict[str, Any]
      actor: str  # 哪個 agent
    
    class MemoryCurator:
      def __init__(self, store):
        self.store = store
    
      def decide(self, event: MemoryEvent):
        # 簡單篩選:過長、含敏感資訊則拒絕
        if len(event.content) > 2000:
          return "discard"
        if "password" in event.content.lower():
          return "discard"
    
        # 不同 scope 寫不同 index
        index_name = {
          "agent": f"agent-{event.actor}",
          "team": "team-shared",
          "project": "project-global",
          "session": None,  # 只放在 runtime context
        }[event.scope]
    
        if index_name:
          self.store.write(index_name, event.content, event.evidence)
          return f"written:{index_name}"
        else:
          # session-only: 不寫 durable store
          return "session-only"
    
    # worker agent 不直接調 store
    curator = MemoryCurator(store=vectordb)
    
    async def worker_store_memory(proposed_content: str, actor: str):
      event = MemoryEvent(
        scope="project",
        content=proposed_content,
        evidence={"source": "task_result"},
        actor=actor,
      )
      result = curator.decide(event)
      return result
    

    在這個架構下:

    • 所有記憶寫入 都經過 MemoryCurator,可審計、可控。
    • 之後要加 審計 log / OpenTelemetry span 也只改這一處。

    建議與注意事項:常見踩坑與實戰指引

    1. 不要把控制層寫成巨大 God Service

    常見錯誤:

    把所有邏輯(模型路由、prompt 模板、tool orchestration、記憶管理、審批流)塞進同一個 ai_service.ts

    結果:

    • 難以測試、難以灰階、任何小改都要全 redeploy。
    • 無法對特定職責做獨立 scaling(例如工具呼叫爆量時)。

    建議:依職責拆模組,例如:

    • ModelRouter
    • ToolRegistry
    • RetryPolicy
    • QuotaManager
    • MemoryCurator

    控制層本身只是一個 薄 orchestration 層,組裝這些模組,不要變成 monolith。

    2. 一開始就設計可觀測性 schema

    很多團隊是到事故發生後才加 log,結果 schema 雜亂無章,完全無法統計。

    最低限度,請在控制層統一定義以下欄位

    • trace_id / span_id:串起同一個 user request 下的所有模型與工具呼叫。
    • user_id / tenant_id / feature_name:方便做成本報表與配額控制。
    • model_name / provider / tokens_in / tokens_out / latency_ms:跑出模型性能與成本比較。
    • cache_hit / retry_count / policy_blocked (bool):分析策略的實際效果。

    搭配 OpenTelemetry

    • 在 control layer 的入口建立 root span
    • 每個 model_calltool_callmemory_write 建子 span。
    • 把上述欄位當 attributes 寫入。

    3. 灰階與回滾機制不要事後補

    Anthropic 的觀察顯示:非程式碼型 agent 在 production 常常因為資料與流程難控而失敗。這不是模型問題,而是缺乏 安全試錯機制

    在控制層預先設計:

    • 灰階發布:例如新增模型時,只讓 5% 的流量使用;表現不好立即切回。
    • 可以在 Vercel AI Gateway 或內部 router 實作簡單的百分比路由。
    • 策略回滾:策略(例如更嚴格的 DLP、不同記憶寫入規則)要抽成 可配置,而不是寫死在程式裡。
    • 配合 feature flag 平台(LaunchDarkly 等)效果更佳。

    4. 把 audit trail 當成產品需求,不是附加功能

    對多步 agent 流程,請明確要求:

    • 每一步 「想做什麼 → 實際做了什麼 → 結果如何」 都寫 audit log。
    • 在 UI(或 admin console)內提供「代理執行歷史」頁面,讓使用者能依 trace id 看到整條鏈。

    這件事最好放在控制層完成:

    • 所有 tool_call 都經過控制層。
    • 控制層負責序列化成統一格式:

    json
    {
    "trace_id": "...",
    "step": 3,
    "actor": "billing_agent",
    "tool": "update_invoice",
    "input": {"invoice_id": 123},
    "output": {"status": "ok"},
    "started_at": "...",
    "duration_ms": 532
    }

    這直接提升企業客戶的信任度,也方便日後做合規稽核。


    總結: 如果你的專案準備從「demo 給老闆看」變成「真的要上線給客戶用」,請先停下來,把所有 LLM / Tool / Agent 呼叫集中收斂到一個 AI Middleware 控制層。路由、觀測、策略、記憶治理都放在這裡,才能控制成本、降低事故、加快迭代速度。

    🚀 你現在可以做的事

    • 整理專案中所有 openai.chat / fetch('llm') 呼叫點,設計一個統一的控制層介面(如 generateText()
    • 在控制層導入基本的 trace_iduser_idmodel_name log schema,並串接 OpenTelemetry 或現有 APM
    • 為現有的多代理或 RAG 系統設計一個 MemoryCurator 類別,強制所有記憶寫入都經過同一治理入口