標籤: Claude Opus 4.7

  • Claude Opus 4.7 實作可控 Agent 平台

    Claude Opus 4.7 實作可控 Agent 平台

    📌 本文重點

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

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


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

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

    Opus 4.7 官方強調:

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

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

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

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

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

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

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

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

    核心設計重點:

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

    4. 程式碼修改與回滾

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

    7. 安全護欄設計

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

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

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

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

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

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

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


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

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

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

    1. Supervisor 的 messages 結構

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

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

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

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

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

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

    你的應用層接到後:

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

    之後 Supervisor 可能呼叫:

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

    這裡的關鍵是:

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

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

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

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


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

    1. 成本與延遲控制

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

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

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

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

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

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

    範例 system 片段:

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

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

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

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

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

    建議:

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

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

    🚀 你現在可以做的事

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