Ethan Lab 軟體開發 · 產品管理 · 科技評測
返回研究筆記

讓本機 Qwen3.8 Flash Next UD-IQ4_XS 主導開發:按需派工 GPT-6.1 Sol、GPT-6 Astra,並整合 Codex 圖片生成服務

以 OpenCode 串起本機推論與既有雲端訂閱,從代理分工、權限設定到圖片生成,實作並驗證一套按需協作的開發工作流。

OpenCode 本機與雲端協作:本機 Qwen 和 Codex 用戶端,連接雲端 Sol、較大的 Astra 模組與圖片生成服務。

在上一篇 Strata 實測中,我已經用 64 GB RAM 與 RTX 5060 Ti 16 GB 執行 Qwen3.8-Flash-Next UD-IQ4_XS。模型能在自己的電腦上運作之後,下一個問題是:如何讓它接手日常開發,並在需要時找得到合適的外援?

先前的嘗試,是由雲端模型派工作給本機 Qwen,再透過 code review 與 harness 調整它的工作方式。這次我把主導權交給本機 Qwen,讓 OpenCode 提供讀檔、修改、測試與派工能力;GPT-6.1 Sol 和 GPT-6 Astra 則成為可按需呼叫的子代理。圖片生成另外封裝成工具,透過本機 Codex 執行。

截至 2026 年 10 月 25 日,這套設定已完成新對話預設模型驗證、兩條子代理路由測試,以及圖片生成後交回 OpenCode 開啟的完整流程。以下記錄實際採用的設定、途中遇到的問題,以及這些測試能說明的範圍。

本機 Qwen 負責主流程,雲端模型提供外援

這套配置包含三個代理與一個圖片工具:

元件 執行方式 在這套配置中的責任
Qwen3.8 Flash Next UD-IQ4_XS Strata 本機推論,OpenCode 主代理 理解需求、規劃、日常實作、測試、決定是否派工與整合結果
GPT-6.1 Sol OpenCode 雲端子代理 接手方向已定、範圍較大的跨檔案實作與重構,或需要持續除錯的任務
GPT-6 Astra OpenCode 雲端子代理 處理根因不明、證據衝突、架構取捨及複雜問題
Codex 圖片生成服務 OpenCode 自訂工具呼叫本機 Codex CLI 接收視覺需求、生成圖片,將驗證後的 PNG 交回專案

這裡的分工是我為工作流設定的角色,沒有把 Sol 限制成只能寫程式,也沒有把 Astra 限制成只能提建議。兩個外援在取得明確的修改範圍後,都可以直接實作與測試;如果任務只要求診斷或 review,就維持唯讀。

Qwen 保留規劃與驗收責任。簡單修改通過驗收後即可交付,不固定為每次修改安排另一個模型再 review 一輪。

實際協作關係可以整理成:

本機 Qwen 預設負責日常開發、測試驗收與整合;Sol 接手方向已定的大範圍工程任務,Astra 處理根因不明與架構取捨。codex_image 經本機 Codex CLI 呼叫雲端圖片生成。
Qwen 負責日常開發與主流程,依問題直接選擇 Sol 或 Astra。雙向箭頭表示請求與結果回傳;圖片工具與子代理派工使用不同權限。

「本機」描述的是 Qwen 的推論位置,以及 Codex CLI 的啟動位置。Sol、Astra 與圖片生成仍會使用雲端能力;交給外援的任務內容也會隨請求送往雲端。

先把派工條件與交接內容寫清楚

我在 Qwen 的工作指示中,設定了幾個判斷原則。

目標清楚、範圍可控、驗收條件明確的任務,由 Qwen 自己處理。方向已經確定,但需要較大的跨檔案實作或持續除錯時,可以交給 Sol。遇到根因不明、證據互相矛盾,或需要架構取捨的問題,則可以直接找 Astra。

這表示 Qwen 不必先找 Sol,失敗後才能找 Astra。派給誰取決於問題本身。

另一條規則是:同一問題經過兩次有實質差異的修正仍無進展,或開始重複已證明無效的方法時,應停止自行重試並尋求外援。單純重跑指令或換個說法,不算新的修正;測試仍然失敗,也不一定代表沒有進展。

這些是寫在代理提示詞中的工作規範,仍由模型判斷如何執行。目前沒有另外實作失敗次數計數器或自動切換狀態機。

子代理會取得新的對話,因此每次交接都要求包含:

  • 任務目標與可觀察的驗收條件。
  • 工作區、相關檔案、現有差異與不可改動的限制。
  • 這次是唯讀診斷,還是允許修改及測試。
  • 錯誤輸出、重現方式、已嘗試的方法與結果。
  • 需要回報的修改、驗證結果與尚未確認事項。

對共享檔案,我另外寫入「同一範圍同時只由一名代理修改」的規範。外援接手後,Qwen 暫停修改該範圍,直到結果交回;已經套用的 patch,也不應再套用一次。這項協作規則目前同樣由提示詞約束,沒有新增檔案鎖。

OpenCode 的模型與權限設定

本次使用 OpenCode 2.0.32,設定放在使用者的全域設定目錄。Windows 上的位置為:

C:\Users\<你的帳號>\.config\opencode\
├─ opencode.json
├─ agents\
│  ├─ qwen-main.md
│  ├─ sol.md
│  └─ astra.md
└─ plugins\
   └─ codex-image\

OpenCode V2 可以使用 Markdown 檔定義代理,包含模型、模式、權限與工作指示;全域代理檔會套用到不同專案。以下節錄這次已套用的設定,省略既有 provider、MCP 與其他外掛內容。OpenCode 代理文件

{
  "default_agent": "qwen-main",
  "model": "strata/qwen3.8-flash-next-unsloth-ud-iq4_xs",
  "permissions": [
    {
      "action": "subagent",
      "resource": "*",
      "effect": "deny"
    }
  ]
}

這段應合併到既有設定,不宜用它直接覆蓋整份檔案。它的前提是 Strata provider 與 OpenAI 登入已經配置完成,模型識別碼也能被目前的 OpenCode 環境解析。這裡保留的 strata/...unsloth... 是既有服務的設定識別碼;本次路由測試沒有重新核對後端實際載入的權重版本。

在 qwen-main.md 中,主代理只開放兩個派工對象:

---
mode: primary
model: strata/qwen3.8-flash-next-unsloth-ud-iq4_xs
permissions:
  - action: subagent
    resource: "*"
    effect: deny
  - action: subagent
    resource: sol
    effect: allow
  - action: subagent
    resource: astra
    effect: allow
---

sol.md 的模式、模型與派工權限為:

---
mode: subagent
model: openai/gpt-6.1-sol
permissions:
  - action: subagent
    resource: "*"
    effect: deny
---

astra.md 則使用:

---
mode: subagent
model: openai/gpt-6-astra
permissions:
  - action: subagent
    resource: "*"
    effect: deny
---

以上是設定區段的節錄。Markdown 本文會成為該代理的 system prompt,取代 provider 的預設提示詞,因此正式代理檔也保留完整的開發、工具使用、交接與驗收規範。只有模型名稱與權限並不足以表達整套工作方式。

全域的 subagent: "*" 拒絕規則仍然保留。OpenCode 會先套用全域權限,再套用代理自己的規則,最後一條符合條件的規則生效,因此 Qwen 可以額外允許 Sol、Astra;沒有另外開放的代理,則繼續受全域規則限制。OpenCode 權限合併與規則順序

目前的派工關係如下:

發起者 可以派給誰
Qwen 主代理 Sol、Astra
Sol 無
Astra 無
其他未另外開放的代理 無

我最後保留了這個單層結構,沒有新增 Qwen worker,也沒有加入多層派工或額外的 Strata 併發排程。這讓每次任務的責任與交接比較容易追蹤。

修改設定後還有一點容易忽略:既有對話會保存自己的代理與模型選擇。新預設不會自動取代舊對話的選項,因此我另外建立未指定代理與模型、也沒有被專案設定另行覆蓋的新對話,確認它確實使用 Qwen。

完整代理檔、圖片外掛與合併設定範例已整理為文章配套原始碼。重現時先確認 OpenCode 的 Strata 與 OpenAI 連線可用,再單獨確認本機 Codex CLI 已完成 ChatGPT 登入;兩者的登入狀態需要分別檢查。接著備份既有設定、放入代理檔與外掛、合併設定並重新載入,最後建立新對話逐項測試。配套說明列出檔案位置與檢查指令。

用實際讀檔驗證 Sol 與 Astra 的路由

模型出現在選單中,只代表它可以被選取。為了確認派工真的可用,我安排了一個小型測試:讓 Qwen 分別啟動 Sol 與 Astra,要求它們讀取工作區內的測試檔案,回傳預先寫好的值。

驗證時除了看回覆內容,也檢查子對話紀錄中的工具執行與模型識別碼。

測試 實際結果
新對話不指定代理與模型 解析為 qwen-main 與 Strata Qwen
Qwen 派工 Sol 子代理完成讀檔,回傳正確測試值
Sol 的模型紀錄 openai/gpt-6.1-sol
Qwen 派工 Astra 子代理完成讀檔,回傳正確測試值
Astra 的模型紀錄 openai/gpt-6-astra

這次測試明確要求 Qwen 使用兩個外援,任務也沒有涉及修改程式。它證明了連線、派工、工具讀檔與結果回傳可以運作。

至於 Qwen 能否在真實開發中選對求助時機,以及這種分工是否提高完成率、縮短時間,仍需要另外設計程式任務來評估。角色分工已寫入設定,實際開發效益還需要持續量測。

把本機 Codex 的圖片能力接成工具

圖片生成採用另一條路徑。

OpenCode 已經可以透過既有登入使用 Sol 與 Astra,但圖片生成仍需要有相應的工具入口。因此我先確認本機 Codex 能生成圖片,再把流程封裝成 OpenCode 外掛,提供名為 codex_image 的工具。

這是本次實作的自訂工具。僅在提示詞中寫上 codex_image,不會讓尚未安裝外掛的 OpenCode 自動具備這項能力。

實際呼叫流程為:

  1. Qwen 把用途、主題、構圖與風格整理成圖片需求。
  2. OpenCode 呼叫 codex_image。
  3. 外掛啟動本機 Codex CLI,確認使用既有 ChatGPT 登入。
  4. Codex 使用內建圖片生成能力,產生圖片檔案。
  5. 外掛檢查檔案後,複製到目前專案。
  6. Qwen 使用 read 開啟交付檔案;工作指示另外要求檢視圖片是否符合需求。

這次圖片工具內部固定使用 GPT-6.1 Sol、low 推理設定執行 Codex 任務。這個執行層與 OpenCode 的 sol 子代理分開,圖片測試也沒有先委派 Sol 或 Astra。Sol 在這裡負責執行圖片任務,實際圖片產出由 Codex 的圖片生成能力完成。

OpenAI 的文件說明,Codex 內建圖片生成會計入一般 Codex 使用額度;使用 API key 則適用 API 計費路徑。這次沿用既有 ChatGPT 登入,沒有另外配置 Images API key,也沒有加入失敗後自動改走 API key 的替代路徑。Codex 圖片生成說明

因此,「整合既有訂閱」仍然會消耗額度。本次測試沒有量測每張圖片實際扣除多少額度,也沒有把 API token 價格換算成訂閱成本。

第一次卡住的地方是圖片交付

本機 Codex 的前兩次測試都產生了圖片,但整體流程沒有立即通過。

問題出在最後一步:當子程序嘗試把圖片複製到指定的專案位置時,被檔案權限政策阻擋。圖片已經存在,使用者要的交付位置卻沒有完成寫入,所以仍不能把整個流程算成成功。

正式版本把兩項工作分開:

  • Codex 依既有圖片生成機制保存原始產物。
  • OpenCode 外掛確認來源與圖片內容後,負責複製到專案。

這樣保留了 Codex 子程序的唯讀 sandbox 設定,也讓輸出位置與檔案檢查由呼叫端處理。

驗證不只看副檔名。外掛會檢查檔案是否屬於本次新建的生成目錄、時間與真實路徑是否合理,以及 PNG 結構與像素資料能否解碼,避免把舊圖片或無法開啟的檔案當成新結果。

另有一個安裝時遇到的小問題:外掛一開始被全域目錄自動載入,又在設定陣列中明確加入,形成重複註冊。移除重複項目後,外掛清單只保留一筆 local.codex-image。

完整流程交回一張可開啟的 PNG

最後一輪測試從 OpenCode 的 Qwen 主代理開始,要求生成陶瓷赤狐擺飾圖片。工具接收的需求範例如下:

{
  "prompt": "一隻陶瓷赤狐擺飾,柔和自然日光,米白背景,寫實產品攝影,無文字。",
  "output_name": "fox"
}

實際驗證結果為:

項目 結果
OpenCode 的 codex_image 呼叫 1 次,完成
交付檔案 PNG
圖片尺寸 1374 × 1145
工具執行時間 34,651 ms,約 34.7 秒
Qwen 開啟圖片 read 完成
完整流程驗證 通過

34.7 秒是這一次 runner 工具段的時間,包含登入檢查、Codex 執行、圖片驗證與複製;它不是整段 OpenCode 對話的等待時間,也不是多張圖片的平均速度。

OpenCode 呼叫本機 Codex 後實際交付的陶瓷赤狐圖片,赤狐擺在淺木桌上,背景為米白色。
本次完整流程實際產生並交回的圖片。它是圖片交付測試的產物,並非速度比較或視覺品質評測的樣本組。

工具每次會建立獨立的輸出資料夾,保存圖片及相關紀錄。輸出位置的一般形式為:

<目前專案>/output/codex-images/<作業名稱>-<唯一識別碼>/image.png

這次還有一項驗證界線:所用 Codex CLI 的 JSON 事件沒有提供完整的內建圖片工具呼叫紀錄,所以結果保留 nativeToolCallVerified: false。我們確認了本次新生成檔案、檔案可讀性與 OpenCode 交付流程,但沒有把模型對工具名稱的自述當作完整的內部呼叫稽核。

配套測試方面,runner 的 21 項測試與工具入口的 6 項測試通過;另外兩項建立符號連結或 junction 的測試,因測試環境不允許建立連結而跳過。

平常使用時,直接描述工作即可

完成工具安裝後,我在 Qwen 的指示中加入:

需要生成新圖片時,使用已提供的 codex_image 工具。

因此,日常使用可以直接說:

幫我生成首頁插畫,主題是智慧農業,風格簡潔、綠色系,左側留白放標題。

使用者不必記住工具名稱。Qwen 應從需求判斷需要生成圖片,整理參數並呼叫工具。需要較複雜的構圖或視覺規劃時,也可以交給 Sol;涉及整套視覺方向與困難設計時,再由 Astra 協助。

Sol、Astra 的工作指示也允許在受委派的範圍內使用圖片工具。codex_image 有自己的工具權限,與啟動子代理的 subagent 權限分開,所以禁止它們再派工,不等於禁止使用圖片功能。

這次完整流程測試有明確指定圖片工具;自然語句能否穩定觸發正確工具選擇,仍有賴後續使用驗證。現有指示已經設定好,但不能把一次明確指令的成功,當成各種說法都會正確執行的保證。

目前工具只開放從文字生成新圖片,參考圖與既有圖片編輯尚未接入。Codex 生成階段的等待上限設為 8 分鐘,另有登入檢查、停止程序與檔案驗證時間。失敗、取消或逾時後不自動重試,先檢查結果與錯誤;停止本機程序也無法保證雲端已開始的生成同步取消。

下一步量測真實開發任務

這次先建立了一條可以驗證的工作流程:新對話由本機 Qwen 接手,Sol 與 Astra 能收到任務並交回結果,圖片需求也能經由本機 Codex 產生檔案,再回到 OpenCode 開啟。

接下來值得記錄的是實際開發任務:Qwen 自行完成的比例、外援介入原因、交接是否足夠、測試通過所需時間,以及訂閱額度的使用情況。用這些資料,才能判斷目前的分工是否合適,或哪些任務應該更早交給外援。

在這些量測累積之前,我會維持目前的單層派工。讓 Qwen 持續掌握需求與交付責任,讓 Sol、Astra 處理有明確理由的外援任務,圖片則透過已驗證的工具流程交付。

留言討論

留下你的想法

你的電子郵件不會公開。