
不是又一個 AI 聊天機器人。這是一份從 Claude Cowork 中提煉出的實戰架構指南——教你如何讓 LLM Agent 從「對話夥伴」進化為「團隊成員」。本文已更新為 coworkspace 命名規範,避免與現有 workspaces 基礎設施衝突。
Rahul 最近在 X 上發了一條爆文——"How To Build a One-Person Company Using Claude Cowork",短短幾小時就超過 85 萬次觀看。他點出了一個關鍵事實:
知識工作者每天花 60% 的時間在格式化、整理檔案、撰寫報告、研究、SEO——這些工作不需要深度思考,但它們佔據了我們大部分的時間。
Chat 模式的 AI 很有用,但它有一個根本限制:你必須全程在迴圈裡。每一個動作都需要你的下一句 prompt。這是協作,不是委派。
Claude Cowork 改變了這個模式。它的核心洞察是:把 Claude Code 的 agentic 引擎包裝成 GUI,讓非技術使用者也能委派完整任務。
但如果你是一位開發者,你需要的不是「如何使用 Claude Cowork」,而是——如何在自己的 Go 後端中實現同樣的架構。
這篇文章就是你的實作指南。
深入研究 Cowork 的架構後,我提煉出五個可以遷移到任何後端系統的關鍵模式:
傳統 Chat:使用者拆解問題 → 逐句 prompt → AI 逐句回應
Cowork 模式:使用者描述想要的結果 → AI 自主規劃 → 執行 → 交付成品
// 傳統 Chat API
POST /api/chat { "message": "幫我整理 Downloads 資料夾" }
// Cowork API(使用 coworkspace slug 而非 ID)
POST /api/cowork/tasks {
"outcome": "整理 Downloads 資料夾,按類型和日期分類,並從收據中生成一份費用報表",
"coworkspace_slug": "downloads-organizer"
}
在 Cowork 中,每個任務都有一個對應的資料夾。檔案是人類和 Agent 之間的交換媒介。Agent 讀取檔案、處理、寫入新檔案——使用者回來時看到的是成品。
為什麼使用 coworkspaces 而非 workspaces? 如果程式碼庫中已經有 workspaces 目錄或概念,coworkspaces 可以完全避免命名衝突。同時,使用 slug(如 downloads-organizer)而非不透明的 ID,讓資料夾對人類和 Agent 都具可讀性——你的檔案系統就是自帶文檔。
/coworkspaces/{slug}/
├── .instructions.md ← 專案指令(claude.md 等價物)
├── .memory/ ← Agent 記憶(跨 session 持久化)
├── .plan.json ← 當前任務計畫
├── files/ ← 使用者檔案
├── output/ ← Agent 生成的交付物
└── .locks/ ← 檔案鎖(防止並發衝突)
Agent 不是直接開始工作。它先生成一個可見的計畫:
{
"summary": "整理 Downloads 並生成費用報表",
"phases": [
{
"name": "掃描與分類",
"description": "掃描所有檔案,按類型分類",
"subtasks": ["列出所有檔案", "按副檔名分組", "建立分類資料夾"],
"parallel": false
},
{
"name": "並行處理",
"description": "同時處理不同類型的檔案",
"subtasks": ["處理收據 PDF", "整理圖片", "歸檔文件"],
"parallel": true
},
{
"name": "生成報表",
"description": "從收據中提取數據並生成報表",
"subtasks": ["OCR 收據", "提取金額和日期", "生成 Excel 報表"],
"parallel": false,
"depends_on": ["並行處理"]
}
]
}
使用者可以在執行前審查和修改這個計畫。這就是透明的自主執行。
複雜任務不是一個 Agent 從頭跑到尾。它會根據計畫的 parallel: true 階段,同時啟動多個子 Agent:
主 Agent(Orchestrator)
├── Agent A: 處理收據 PDF
├── Agent B: 整理圖片檔案
├── Agent C: 歸檔文件檔案
└── Agent D: 去重和清理
全部完成後 →
主 Agent 綜合結果 → 生成最終交付物
每個子 Agent 有自己的 context window,通過檔案鎖來協調任務分配。關鍵是:子 Agent 之間通過檔案和訊息溝通,而非共享記憶體——這樣才能避免 context 污染。
Cowork 任務可能執行幾分鐘到幾小時。必須在每個 turn 保存狀態:
type TaskCheckpoint struct {
TaskID string `json:"task_id"`
Turn int `json:"turn"`
AgentStates []AgentSnapshot `json:"agent_states"`
PlanProgress map[string]float64 `json:"plan_progress"`
SavedAt time.Time `json:"saved_at"`
}
伺服器重啟?任務從最後一個 checkpoint 恢復。這是 Cowork 和 Chat 的本質區別——Chat 斷了就要重來,Cowork 斷了可以繼續。
好消息是,你現有的 Go 後端已經有了大部分基礎:
| 現有功能 | Cowork 對應 |
|---|---|
| Chat | Cowork Task(指派結果而非對話) |
| Goals | Task Plan(可視化的待辦清單) |
| Files-based project | Coworkspace(每個任務的持久化文件夾) |
| Direct tasks (async) | Agent Loop(自主多步執行) |
| Schedules | Scheduled Cowork Tasks(定時 + 手動觸發) |
// 1. CoworkOrchestrator — 任務生命週期管理
type CoworkOrchestrator interface {
CreateTask(ctx, outcome, coworkspaceSlug, opts) (*CoworkTask, error)
StartTask(ctx, taskID) error
GeneratePlan(ctx, taskID) (*TaskPlan, error)
GetTaskProgress(ctx, taskID) (*TaskProgress, error)
}
// 2. AgentLoop — 自主執行引擎
type AgentLoop interface {
ExecuteTurn(ctx, agentID) (*TurnResult, error)
ExecuteUntilDone(ctx, agentID, opts) error
}
// 3. SubAgentOrchestrator — 並行子 Agent 管理
type SubAgentOrchestrator interface {
FanOut(ctx, taskID, specs) ([]SubAgent, error)
ClaimTask(ctx, taskID, subtaskID, agentID) error // 檔案鎖
SynthesizeResults(ctx, taskID) (*SynthesisResult, error)
}
// 4. CoworkspaceManager — 文件夾工作區管理(已重新命名)
type CoworkspaceManager interface {
CreateCoworkspace(ctx, name, opts) (*Coworkspace, error)
ReadFile(ctx, coworkspaceSlug, path) ([]byte, error)
WriteFile(ctx, coworkspaceSlug, path, content) error
}
Agent Loop 是整個 Cowork 系統的心臟。它是一個狀態機,把「我想要 X」變成一系列的 LLM 驅動動作:
LOOP:
1. 構建 Prompt(任務 + 計畫 + 當前狀態 + 可用工具)
2. 呼叫 LLM → 取得 Thought + Tool Calls
3. 審批閘門(高風險操作需要使用者確認)
4. 執行工具(讀檔、寫檔、搜索、生成...)
5. 將結果餵回 Agent
6. 檢查終止條件:done / wait_for_user / continue
7. 保存 Checkpoint
GOTO LOOP
核心 Tool Registry:
var CoreCoworkTools = []Tool{
FileReadTool{}, // 讀取 coworkspace 檔案
FileWriteTool{}, // 寫入檔案
FileListTool{}, // 列出目錄
WebSearchTool{}, // 網路搜索
WebFetchTool{}, // 擷取 URL 內容
ShellTool{}, // 在隔離沙箱中執行指令
SubAgentSpawnTool{}, // 啟動子 Agent
SubAgentMessageTool{}, // Agent 間通訊
MemoryStoreTool{}, // 儲存到 coworkspace 記憶
MemoryRetrieveTool{}, // 從 coworkspace 記憶檢索
TaskUpdateTool{}, // 更新任務計畫
DeliverableCreateTool{}, // 建立交付物
}
不需要推倒重來。Cowork 是 Chat 的補充,不是替代:
CoworkspaceManager + 檔案 CRUD,路徑為 /coworkspaces/{slug}/CoworkTask 資料模型和 API.instructions.md 支援整個過程中,原有的 Chat API 完全不受影響,使用者可以同時使用兩種模式。
-- Coworkspaces(基於 slug 而非 ID)
CREATE TABLE coworkspaces (
slug TEXT PRIMARY KEY, -- e.g., "downloads-organizer"
name TEXT NOT NULL,
root_path TEXT NOT NULL,
instructions TEXT, -- .instructions.md 內容
project_id TEXT,
user_id TEXT NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
);
-- Cowork 任務
CREATE TABLE cowork_tasks (
id TEXT PRIMARY KEY,
coworkspace_slug TEXT NOT NULL REFERENCES coworkspaces(slug),
outcome TEXT NOT NULL, -- 使用者想要的結果
status TEXT NOT NULL DEFAULT 'pending',
plan_json JSONB,
permission_mode TEXT NOT NULL DEFAULT 'ask_before'
);
-- 任務階段
CREATE TABLE task_phases (
id TEXT PRIMARY KEY,
task_id TEXT NOT NULL REFERENCES cowork_tasks(id),
name TEXT NOT NULL,
status TEXT NOT NULL DEFAULT 'pending',
parallel BOOLEAN DEFAULT FALSE,
depends_on JSONB,
progress REAL DEFAULT 0.0
);
-- 子 Agent
CREATE TABLE sub_agents (
id TEXT PRIMARY KEY,
task_id TEXT NOT NULL REFERENCES cowork_tasks(id),
name TEXT NOT NULL,
role TEXT NOT NULL,
status TEXT NOT NULL DEFAULT 'idle'
);
-- Agent 間訊息
CREATE TABLE agent_messages (
id TEXT PRIMARY KEY,
from_agent TEXT NOT NULL,
to_agent TEXT NOT NULL,
type TEXT NOT NULL,
content TEXT NOT NULL
);
-- 檢查點(支援斷點續傳)
CREATE TABLE task_checkpoints (
id TEXT PRIMARY KEY,
task_id TEXT NOT NULL REFERENCES cowork_tasks(id),
turn INTEGER NOT NULL,
state_json JSONB NOT NULL
);
-- 索引
CREATE INDEX idx_cowork_tasks_coworkspace ON cowork_tasks(coworkspace_slug);
CREATE INDEX idx_cowork_tasks_status ON cowork_tasks(status);
CREATE INDEX idx_phases_task ON task_phases(task_id);
CREATE INDEX idx_agents_task ON sub_agents(task_id);
CREATE INDEX idx_checkpoints_task ON task_checkpoints(task_id, turn DESC);
| 決策 | 理由 |
|---|---|
| Coworkspace = 文件夾 | 檔案是人與 Agent 最自然的交換媒介,也是 Claude Cowork 的核心哲學 |
| Slug 路由 | 人類可讀路徑(/coworkspaces/downloads-organizer/),不再使用不透明 ID |
coworkspaces 目錄 |
避免與程式碼庫中現有 workspaces 命名衝突 |
cowork_* / coworkspace_* 前綴 |
所有資料表、函數和路由使用清晰的命名空間隔離 |
| 先計畫後執行 | 透明性 + 使用者可在執行前修正方向 |
| 子 Agent 可棄用 | 各自獨立 context,通過檔案溝通,避免 context 污染 |
| 每個 turn 保存 checkpoint | 支援長時間任務,伺服器重啟不丟失進度 |
| 審批閘門可配置 | ask_before(安全)vs act_autonomously(快速),檔案刪除永遠需要確認 |
| Chat 不變 | Cowork 是加法,不是替代——用對的工具做對的事 |
Claude Cowork 的出現不代表你需要換掉你的後端。它代表的是一種架構思想的轉變:
你現有的 Go 後端已經有了 Chat、Schedules、Goals、Files、Direct Tasks——這些都是 Cowork 模式的絕佳基礎。加上 Agent Loop、Sub-Agent Orchestrator、和 Coworkspace 管理,你就能讓 LLM Agent 從一個被動的對話夥伴,變成一個真正能獨立完成工作的團隊成員。
參考資料: