Qwen3.6-27B 本地私有化部署 + Claude Code 連接應用
一、Qwen3.6-27B + Claude Code
Qwen3.6-27B 是阿里于 2026 年 4 月開源的多模態(tài)大模型,在主流智能體編程基準上取得了顯著突破,全面超越前代旗艦 Qwen3.5-397B-A17B,參數(shù)量僅為其約 1/15,甚至在一些指標上和 Claude 4.5 Opus 相持平。

這里未展示出全部測評結(jié)果,更多介紹可以關注官方博客:
從上面的指標結(jié)果可以看出,Qwen3.6-27B 相比與上一代的 Qwen3.5-27B,在編程能力上有了大的飛躍,平常我們使用 Claude Code 做任務開發(fā)的時候,通常會消耗巨大的 Token 量,如果將一些常用重復性的開發(fā)任務使用本地私有化部署的 Qwen3.6-27B 來開發(fā)的話,是不是可以節(jié)省一些 Token 的使用量,而且還可以提高響應速度提高處理效率。再或者使用一些在線能力較強的模型,構(gòu)建開發(fā)架構(gòu),使用 Qwen3.6-27B 來補充架子里面的具體實現(xiàn),最后讓能力強的模型驗收結(jié)果,從而減少收費模型的輸出量,畢竟收費模型的 output tokens 定價一般都比 input tokens 要貴,這樣也可以實現(xiàn)優(yōu)化開發(fā)成本和提升效率雙豐收的結(jié)果。
因此本文主要介紹 Qwen3.6-27B 的本地私有化部署過程,部署采用vLLM 引擎,以及將 Claude Code 指向使用私有化部署的模型,并且開發(fā)一個五子棋的網(wǎng)頁小游戲,以及針對開源項目 DeerFlow 2.0 進行源碼分析的實踐。
下面是本次實驗主要的依賴版本:
torch==2.10.0 vllm>=0.17.0 transformers==4.57.6 modelscope==1.34.0
其中由于Claude Code 默認使用的 Anthropic 協(xié)議 ,vLLM 從 0.17.0 版本才集成了 Anthropic 協(xié)議,因此 vLLM 的版本必須大于等于 v0.17.0。
二、vLLM 私有化部署 Qwen3.6-27B
安裝 vLLM,并且自動安裝對應的 torch:
uv pip install "vllm>=0.17.0" --torch-backend=auto --extra-index-url https://wheels.vllm.ai/nightly
下載 Qwen3.6-27B 模型,這里使用 modelscope 快速下載到本地:
modelscope download --model="Qwen/Qwen3.6-27B" --local_dir Qwen3.6-27B

使用 vLLM 啟動 API 服務:
export CUDA_VISIBLE_DEVICES=0,1 vllm serve "Qwen3.6-27B" \ --host 0.0.0.0 \ --port 8000 \ --dtype bfloat16 \ --tensor-parallel-size 2 \ --gpu-memory-utilization 0.8 \ --api-key token-abc123 \ --enable-prefix-caching \ --reasoning-parser qwen3 \ --enable-auto-tool-choice \ --tool-call-parser qwen3_coder \ --trust-remote-code
關鍵參數(shù)說明:
| 參數(shù) | 說明 |
|---|---|
| export CUDA_VISIBLE_DEVICES=0,1 | 指定使用的GPU設備,根據(jù)實際的GPU數(shù)量,這里我有兩塊GPU |
| dtype | 數(shù)據(jù)類型,其中 bfloat16,16位浮點數(shù) |
| tensor-parallel-size | Tensor 并行的數(shù)量,當多 GPU 分布式推理時使用,建議和GPU的數(shù)量一致 |
| gpu-memory-utilization | 設置 GPU 內(nèi)存利用率的上限 |
| api-key | API 認證密鑰 |
| enable-prefix-caching | 啟用前綴緩存減少重復計算 |
| reasoning-parser | 指定推理解析器 |
| enable-auto-tool-choice | 啟用自動工具選擇 |
| tool-call-parser | 工具調(diào)用解析器 |

啟動后顯存占用情況:

如果啟動顯存不足,可根據(jù)實際設備情況調(diào)整 gpu-memory-utilization 或者添加 max-model-len 參數(shù),或通過 cpu-offload-gb 將部分模型權重卸載到內(nèi)存中(影響運行效率)。
訪問測試:
curl http://127.0.0.1:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer token-abc123" \
-d '{
"model": "Qwen3.6-27B",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "你是誰,你認識小畢超嗎?"}
]
}'運行結(jié)果:

使用 Anthropic 協(xié)議測試:
curl http://127.0.0.1:8000/v1/messages \
-H "Content-Type: application/json" \
-H "Authorization: Bearer token-abc123" \
-d '{
"model": "Qwen3.6-27B",
"system": "You are a helpful assistant.",
"messages": [
{"role": "user", "content": "你是誰,你認識小畢超嗎?"}
],
"max_tokens": 1024
}'運行結(jié)果:

三、Claude Code 安裝及配置私有化模型
3.1 安裝 Claude Code
請?zhí)崆鞍惭b好 Node 環(huán)境,版本最好 Node >=22 。
安裝官方組件:
npm install -g @anthropic-ai/claude-code

安裝好后,先輸入 claude 看是否能正常進入cli:
claude

如果提示 Claude Code might not be available in your country ,可以在當前電腦用戶目錄下,找到 .claude.json 文件,在該文件中加入 "hasCompletedOnboarding": true 配置:


然后重新在控制臺重新輸入 claude 測試是否正常:

如果出現(xiàn)上述效果,則表示部署正常。
3.2 配置模型
在 cmd 控制中輸入如下指令,配置系統(tǒng)環(huán)境變量:
setx ANTHROPIC_BASE_URL "http://127.0.0.1:8000" setx ANTHROPIC_AUTH_TOKEN "token-abc123" setx ANTHROPIC_MODEL "Qwen3.6-27B" setx ANTHROPIC_SMALL_FAST_MODEL "Qwen3.6-27B"

然后最好關掉當前 cmd,重新打開cmd 進入 claude,測試連接是否正常:

如果看到使用的是 Qwen3.6-27B 模型,并且可以正常回答,就表示環(huán)境配置成功。
四、應用實踐
4.1 開發(fā)一個H5五子棋小游戲
輸入提示:
在當前根目錄下創(chuàng)建一個H5五子棋游戲,單個HTML文件實現(xiàn),包含: - 15x15棋盤,黑白雙方輪流落子 - 判斷勝負(五子連珠) - 顯示當前回合和勝利提示 - 重新開始按鈕 - 界面簡潔美觀

運行效果:

運行一切正常,并且所提需求均實現(xiàn)。
4.2 解讀 DeerFlow2.0 源碼設計過程
DeerFlow 2.0 是一個非常優(yōu)秀的開源 Harness Agent 項目,這里讓 Claude Code 分析其源碼設計過程:
拉取項目:
git clone https://github.com/bytedance/deer-flow.git
然后進入項目中喚醒 claude, 首先使用 /init 指令,讓 claude 了解下當前項目,并生成 Claude.md :
/init

Claude.md 內(nèi)容:

這里如果是我們自己的項目,可能就要看下 Claude.md 中梳理的具體內(nèi)容了,判斷內(nèi)容是否完善,以及補充一些關鍵知識,這里主要讓Claude分析其設計思路,這里不做任何修改,下面直接請 claude 幫助分析智能體的設計過程,輸入提示:
請幫我分析這個項目的源碼架構(gòu),我想了解: 1. Agent 的整體設計架構(gòu)和核心模塊劃分。 2. Agent 的初始化和啟動流程。 3. Agent 的任務接收、調(diào)度和執(zhí)行的完整鏈路。 4. Agent 的狀態(tài)管理和生命周期設計。 最后請將分析結(jié)果寫入“設計過程.md”文件中。

分析結(jié)束,分析的結(jié)果不亞于收費模型!

以下是分析過程,其中為了方便展示 ```符號均替換為 ``:
# DeerFlow Agent 源碼架構(gòu)分析
## 一、整體設計架構(gòu)和核心模塊劃分
DeerFlow 是一個基于 LangGraph 構(gòu)建的 AI "超級代理"系統(tǒng)。其核心設計理念是:**一個 Lead Agent(主代理)作為任務編排器,可動態(tài)分解任務、派生 Sub-Agent(子代理),在隔離的沙箱環(huán)境中執(zhí)行復雜的多步驟工作。**
### 1.1 系統(tǒng)層級架構(gòu)
``
┌─────────────────────────────────────────────────────────────────┐
│ 接入層 │
│ Nginx (:2026) → Frontend(:3000) / Gateway(:8001) / LangGraph(:2024) │
├─────────────────────────────────────────────────────────────────┤
│ 應用層 │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌────────────────────┐ │
│ │ LangGraph │ │ Gateway API │ │ DeerFlowClient │ │
│ │ Server │ │ (FastAPI) │ │ (嵌入式 Python 客戶端)│ │
│ │ (:2024) │ │ (:8001) │ │ │ │
│ └──────┬───────┘ └──────────────┘ └────────────────────┘ │
│ │ │
│ ▼ (兩者共享同一套 src/ 模塊) │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Agent 核心層 │ │
│ │ │ │
│ │ ┌─────────────┐ ┌──────────────┐ ┌────────────────┐ │ │
│ │ │ Lead Agent │ │ Middleware │ │ Subagent │ │ │
│ │ │ (主代理) │──│ Chain (11個) │ │ System (子代理) │ │ │
│ │ └──────┬──────┘ └──────────────┘ └────────┬───────┘ │ │
│ │ │ │ │ │
│ │ ▼ ── 核心基礎設施 ── ▼ │ │
│ │ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌───────┐ ┌──────────────┐ │ │
│ │ │ Sandbox │ │ Tools │ │ MCP │ │ Skills System│ │ │
│ │ │ (沙箱) │ │ (工具集) │ │(外部) │ │ (技能系統(tǒng)) │ │ │
│ │ └──────────┘ └──────────┘ └───────┘ └──────────────┘ │ │
│ │ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Memory │ │ Model │ │Config │ │ │
│ │ │ (記憶) │ │ Factory │ │(配置) │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
``
### 1.2 核心模塊劃分
| 模塊 | 路徑 | 職責 |
|------|------|------|
| **Lead Agent** | `src/agents/lead_agent/` | 主代理工廠函數(shù) + 動態(tài)系統(tǒng)提示詞生成 |
| **Thread State** | `src/agents/thread_state.py` | 代理狀態(tài)模式定義(繼承 AgentState) |
| **Middleware** | `src/agents/middlewares/` | 11 個中間件,負責沙箱、記憶、標題、澄清等橫切關注點 |
| **Memory** | `src/agents/memory/` | 跨會話持久記憶(事實提取、去抖隊列、原子寫入) |
| **Sandbox** | `src/sandbox/` | 沙箱執(zhí)行系統(tǒng)(本地/Docker 兩種實現(xiàn) + 虛擬路徑映射) |
| **Subagent** | `src/subagents/` | 子代理系統(tǒng)(注冊表、雙線程池執(zhí)行引擎、超時控制) |
| **Tools** | `src/tools/` + `src/community/` | 工具裝配(內(nèi)置 + 沙箱 + MCP + 社區(qū)工具) |
| **MCP** | `src/mcp/` | Model Context Protocol 集成(懶加載、緩存、OAuth) |
| **Skills** | `src/skills/` | 技能發(fā)現(xiàn)、加載、解析(SKILL.md 漸進式加載) |
| **Model Factory** | `src/models/` | 模型工廠(thinking/vision 支持、動態(tài)反射創(chuàng)建) |
| **Config** | `src/config/` | 配置系統(tǒng)(config.yaml + extensions_config.json) |
| **Gateway** | `src/gateway/` | FastAPI 網(wǎng)關(models/skills/memory/uploads/artifacts/agents 路由) |
| **Client** | `src/client.py` | 嵌入式 Python 客戶端(無需 HTTP 服務,直接調(diào)用 Agent) |
---
## 二、Agent 的初始化和啟動流程
DeerFlow 的 Agent 初始化有兩條路徑:**LangGraph Server 路徑**(HTTP 服務)和 **嵌入式 Client 路徑**(純 Python)。兩者最終調(diào)用相同的 `make_lead_agent` 工廠函數(shù)。
### 2.1 LangGraph Server 路徑
``
啟動命令: uv run langgraph dev
│
▼
┌─────────────────┐
│ 讀取 langgraph.json │
│ graphs.lead_agent │
│ → src.agents: │
│ make_lead_agent │
└────────┬──────────┘
│
LangGraph CLI 在收到
第一個請求時懶調(diào)用該工廠函數(shù)
│
▼
``
`langgraph.json` 配置:
``json
{
"graphs": {
"lead_agent": "src.agents:make_lead_agent"
}
}
``
### 2.2 嵌入式 Client 路徑
``
DeerFlowClient()
│
▼ _ensure_agent(config)
│
├── 創(chuàng)建 Model: create_chat_model()
├── 獲取 Tools: get_available_tools()
├── 構(gòu)建 Middleware: _build_middlewares()
├── 生成 Prompt: apply_prompt_template()
└── 調(diào)用 LangChain: create_agent(...)
``
### 2.3 make_lead_agent 工廠函數(shù)詳解
入口文件:`src/agents/lead_agent/agent.py:254`
``
make_lead_agent(config: RunnableConfig)
│
├── 1. 解析運行時參數(shù) (從 config.configurable)
│ ├── thinking_enabled → 是否啟用擴展思考
│ ├── reasoning_effort → 推理力度
│ ├── model_name / model → 指定模型
│ ├── is_plan_mode → 啟用 TodoList
│ ├── subagent_enabled → 啟用子代理
│ ├── max_concurrent_subagents → 并發(fā)子代理上限
│ ├── is_bootstrap → 啟動引導模式
│ └── agent_name → 自定義代理名
│
├── 2. 模型解析 (_resolve_model_name)
│ ├── 優(yōu)先使用請求中指定的 model_name
│ ├── 其次使用 agent_config.model (自定義代理)
│ └── 回退到 config.yaml 中第一個模型
│
├── 3. 創(chuàng)建 LLM 實例 (create_chat_model)
│ ├── 根據(jù) supports_thinking 決定是否啟用思考模式
│ └── 根據(jù) supports_reasoning_effort 注入推理力度參數(shù)
│
├── 4. 組裝工具集 (get_available_tools)
│ ├── config.yaml 中定義的工具 (通過反射解析)
│ ├── MCP 工具 (懶加載 + mtime 緩存失效)
│ ├── 內(nèi)置工具 (present_files, ask_clarification, view_image)
│ └── 子代理工具 (task, 僅在 subagent_enabled=True 時)
│
├── 5. 構(gòu)建中間件鏈 (_build_middlewares) ← 見下方中間件鏈
│
├── 6. 生成系統(tǒng)提示詞 (apply_prompt_template)
│ ├── 注入 Agent 角色和靈魂 (SOUL.md)
│ ├── 注入記憶上下文 (memory.json)
│ ├── 注入可用技能列表 (skills/)
│ ├── 注入子代理系統(tǒng)指令 (subagent_enabled 時)
│ ├── 注入工作目錄說明
│ └── 附加當前日期
│
└── 7. 調(diào)用 LangChain create_agent()
├── model
├── tools
├── middleware
├── system_prompt
└── state_schema = ThreadState
``
### 2.4 中間件鏈構(gòu)建順序(嚴格有序)
`_build_middlewares()` 函數(shù)按以下順序組裝 11 個中間件:
``
順序 中間件 條件 職責
──── ────────────────────── ────────── ──────────────────────────────
1 ThreadDataMiddleware 始終 為 thread_id 創(chuàng)建本地數(shù)據(jù)目錄
2 UploadsMiddleware 始終 追蹤并注入新上傳的文件到對話
3 SandboxMiddleware 始終 獲取沙箱實例,存儲 sandbox_id 到狀態(tài)
4 DanglingToolCallMiddleware 始終 為缺少響應的 tool_call 注入占位 ToolMessage
5 SummarizationMiddleware config.yaml 接近 token 上限時自動摘要對話
6 TodoListMiddleware is_plan_mode 提供 write_todos 工具,任務跟蹤
7 TitleMiddleware 始終 首次完整對話后自動生成線程標題
8 MemoryMiddleware config.yaml 過濾消息(user + 最終 AI),排隊異步記憶更新
9 ViewImageMiddleware supports_vision 將圖片轉(zhuǎn)為 base64 注入狀態(tài)
10 SubagentLimitMiddleware subagent_enabled 截斷超出并發(fā)上限的 task 調(diào)用
11 ClarificationMiddleware 始終(必須在最后) 攔截 ask_clarification 調(diào)用,中斷執(zhí)行 → Command(goto=END)
``
---
## 三、Agent 的任務接收、調(diào)度和執(zhí)行的完整鏈路
### 3.1 完整請求鏈路(HTTP 模式)
``
用戶輸入消息
│
▼
┌──────────────────────────────────────────────────┐
│ ① Frontend (Next.js) │
│ - 用戶發(fā)送消息 │
│ - useThreadStream hook → LangGraph SDK 流式請求 │
│ - POST /api/langgraph/lead_agent/runs │
└──────────────┬───────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────┐
│ ② Nginx (:2026) │
│ - 路由 /api/langgraph/* → LangGraph Server(:2024)│
└──────────────┬───────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────┐
│ ③ LangGraph Server (:2024) │
│ - 收到請求,調(diào)用 make_lead_agent(config) 工廠函數(shù) │
│ - 首次調(diào)用:創(chuàng)建 Agent 實例(模型 + 工具 + 中間件) │
│ - 后續(xù)調(diào)用:復用緩存的 Agent 實例 │
│ - 將請求包裝為 Agent 輸入狀態(tài) │
│ - 調(diào)用 agent.stream(state, config, context) │
└──────────────┬───────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────┐
│ ④ Agent 執(zhí)行循環(huán) (LangGraph 內(nèi)部) │
│ │
│ for 每個中間件 (outer → inner): │
│ before_model(state) ← 中間件前置處理 │
│ ▲ │
│ │ │
│ ┌───┴───┐ │
│ │ LLM │ ← 系統(tǒng)提示詞 + 對話歷史 → 模型響應 │
│ │ 調(diào)用 │ (可能包含 tool_calls) │
│ └───┬───┘ │
│ │ │
│ ▼ │
│ for 每個中間件 (inner → outer): │
│ after_model(state) ← 中間件后置處理 │
│ │ │
│ for 每個 tool_call: │
│ 執(zhí)行工具 → 得到 ToolMessage → 追加到歷史 │
│ │ │
│ if 還有 tool_calls: 回到開頭繼續(xù) │
│ else: 返回最終狀態(tài) │
│ │
│ 每一步通過 SSE 流式輸出到 Frontend │
└───────────────────────────────────────────────────┘
``
### 3.2 單輪 Agent 執(zhí)行流程(詳細)
``
輸入: HumanMessage("分析騰訊股價下跌原因")
│
▼
┌─ 中間件 before_model 鏈 ──────────────────────┐
│ │
│ ThreadDataMiddleware.before_model() │
│ → 創(chuàng)建 .deer-flow/threads/{tid}/user-data/ │
│ → 寫入 state.thread_data (workspace/uploads/ │
│ outputs 路徑) │
│ │
│ UploadsMiddleware.before_model() │
│ → 掃描 uploads/ 目錄 │
│ → 將新上傳文件列表注入 state.uploaded_files │
│ │
│ SandboxMiddleware.before_model() │
│ → 獲取沙箱實例 (本地/Docker) │
│ → 寫入 state.sandbox = {sandbox_id: ...} │
│ │
│ DanglingToolCallMiddleware.before_model() │
│ → 檢查消息歷史中是否有未配對的 tool_call │
│ → 注入占位 ToolMessage 防止模型重試 │
│ │
│ SummarizationMiddleware.before_model() │
│ → 檢查 token 數(shù)/消息數(shù)是否達到閾值 │
│ → 觸發(fā)摘要:保留最近 N 條消息,壓縮舊對話 │
│ │
│ TitleMiddleware.before_model() │
│ → 如果是首次完整交換,調(diào)用 LLM 生成標題 │
│ → 寫入 state.title │
│ │
│ MemoryMiddleware.before_model() │
│ → 過濾出用戶消息 + 最終 AI 響應 │
│ → 加入去抖隊列 (30s 后觸發(fā)異步記憶更新) │
│ │
│ ViewImageMiddleware.before_model() │
│ → 將對話中的圖片引用轉(zhuǎn)為 base64 嵌入 │
│ → 寫入 state.viewed_images │
│ │
│ SubagentLimitMiddleware.after_model() │
│ → 截斷 model_response 中超出 max_concurrent │
│ 的 task tool_calls │
│ │
│ ClarificationMiddleware.after_model() │
│ → 檢測 model_response 是否包含 │
│ ask_clarification tool_call │
│ → 如果有 → return Command(goto=END) 中斷 │
└────────────────────────────────────────────────┘
│
▼
┌─ LLM 調(diào)用 ────────────────────────────────────┐
│ │
│ System Prompt (含角色/記憶/技能/子代理指令) │
│ + │
│ 對話歷史 (HumanMessage / AIMessage / ...) │
│ │ │
│ ▼ │
│ 模型返回: │
│ - 文本響應 (簡單問題) │
│ - 或多個 tool_calls (復雜任務) │
│ - 或 text + tool_calls (并行) │
└────────────────────┬───────────────────────────┘
│
▼
是否包含 tool_calls?
│
┌──────┴──────┐
│ yes │ no
▼ ▼
┌──────────────┐ ┌──────────────┐
│ 工具執(zhí)行階段 │ │ 返回最終狀態(tài) │
│ │ │ → SSE 輸出 │
│ for each │ │ → 前端渲染 │
│ tool_call: │ └──────────────┘
│ 執(zhí)行工具 │
│ → 生成 │
│ ToolMsg │
│ → 追加到 │
│ 歷史 │
│ │
│ → 回到開頭 │
│ 繼續(xù)循環(huán) │
└──────────────┘
``
### 3.3 子代理調(diào)度鏈路
當 Lead Agent 調(diào)用 `task` 工具時:
``
Lead Agent 返回 tool_calls: [task(...), task(...), task(...)]
│
▼
┌───────────────────────────────────────────────────────┐
│ task_tool(description, prompt, subagent_type, ...) │
│ │
│ ① 從注冊表獲取子代理配置 │
│ get_subagent_config("general-purpose") │
│ → SubagentConfig(name, tools, disallowed_tools, │
│ system_prompt, max_turns, timeout) │
│ │
│ ② 創(chuàng)建 SubagentExecutor │
│ - 過濾工具集 (根據(jù) allowed/disallowed) │
│ - 繼承父代理的沙箱狀態(tài)和 thread_data │
│ - 生成 trace_id 用于分布式追蹤 │
│ │
│ ③ 異步執(zhí)行 (execute_async) │
│ - 創(chuàng)建 SubagentResult(task_id, status=PENDING) │
│ - 存入全局 _background_tasks 字典 │
│ - 提交到 _scheduler_pool (3 個工作線程) │
│ - 立即返回 task_id (非阻塞) │
│ │
│ ④ 后臺調(diào)度線程執(zhí)行 │
│ - 狀態(tài) → RUNNING │
│ - 提交到 _execution_pool (3 個工作線程) │
│ - 等待 execution_future.result(timeout=900s) │
│ │
│ ⑤ 子代理執(zhí)行線程 │
│ - _create_agent(): │
│ create_agent(model, filtered_tools, │
│ [ThreadDataMiddleware, │
│ SandboxMiddleware], │
│ system_prompt, ThreadState) │
│ - agent.stream(initial_state, config, context) │
│ - 實時收集 AI 消息到 result.ai_messages │
│ - 提取最終 AIMessage 內(nèi)容作為 result.result │
│ │
│ ⑥ 調(diào)度線程回收結(jié)果 │
│ - 更新 _background_tasks[task_id]: │
│ status → COMPLETED / FAILED / TIMED_OUT │
│ result, error, ai_messages │
└───────────────────────────────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────────┐
│ task_tool 輪詢等待 (5s 間隔) │
│ │
│ while True: │
│ result = get_background_task_result(task_id) │
│ if result.status in (COMPLETED, FAILED, TIMED_OUT):│
│ break │
│ yield SSE event (task_started / task_running / ...)│
│ sleep(5) │
│ │
│ 返回: ToolMessage(content=子代理最終結(jié)果) │
└───────────────────────────────────────────────────────┘
│
▼
Lead Agent 收到所有 task 的 ToolMessage → 繼續(xù)下一輪循環(huán)
→ 綜合所有子代理結(jié)果 → 生成最終回復 → 流式輸出到用戶
``
### 3.4 雙線程池設計
``
┌─────────────────────┐ ┌─────────────────────┐
│ _scheduler_pool │ │ _execution_pool │
│ (3 workers) │────────?│ (3 workers) │
│ │ │ │
│ 職責: │ │ 職責: │
│ - 狀態(tài)管理 │ │ - 實際 Agent 執(zhí)行 │
│ - 超時控制 │ │ - 流式消息收集 │
│ - 結(jié)果回收 │ │ - 提取最終結(jié)果 │
│ - 異常處理 │ │ │
└─────────────────────┘ └─────────────────────┘
分離原因:
- 調(diào)度線程需要阻塞等待 (future.result(timeout))
- 執(zhí)行線程需要流式處理 agent.stream()
- 分離后調(diào)度線程不會被執(zhí)行阻塞,可以管理超時和清理
``
---
## 四、Agent 的狀態(tài)管理和生命周期設計
### 4.1 ThreadState 狀態(tài)模式
定義文件:`src/agents/thread_state.py`
``python
class ThreadState(AgentState):
# ── 繼承自 AgentState ──
messages: list[BaseMessage] # 對話消息歷史 (append 模式)
stack: list[...] # LangGraph 內(nèi)部調(diào)用棧
# ── DeerFlow 擴展字段 ──
sandbox: SandboxState # 沙箱狀態(tài) {sandbox_id: "local" | "container-xxx"}
thread_data: ThreadDataState # 線程數(shù)據(jù) {workspace_path, uploads_path, outputs_path}
title: str # 自動生成的對話標題
artifacts: list[str] # 產(chǎn)物文件列表 (merge_artifacts 去重歸并)
todos: list # 任務列表 (plan_mode 時)
uploaded_files: list[dict] # 上傳文件信息
viewed_images: dict # 已查看圖片 {path: {base64, mime_type}}
``
**自定義歸并器 (Reducer)**:
- `merge_artifacts` — 合并去重(`dict.fromkeys` 保序去重)
- `merge_viewed_images` — 字典合并,空字典 `{}` 特殊處理為"清除所有"
### 4.2 生命周期狀態(tài)圖
``
┌─────────────────────────────────────────────┐
│ Agent 實例生命周期 │
└─────────────────────────────────────────────┘
┌─────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────┐
│ 空閑 │────?│ 接收請求 │────?│ 執(zhí)行中 │────?│ 完成 │
│ (Standby)│ │ (make_... ) │ │ (agent. │ │ (SSE 結(jié)束)│
└─────────┘ └──────────────┘ │ stream) │ └──────────┘
└──────────────┘
首次請求時:
make_lead_agent(config)
├── 解析模型 → create_chat_model()
├── 組裝工具 → get_available_tools()
├── 構(gòu)建中間件 → _build_middlewares()
├── 生成提示詞 → apply_prompt_template()
└── 創(chuàng)建代理 → create_agent(...)
后續(xù)請求 (同配置):
復用已緩存的 Agent 實例
配置變化時:
重新調(diào)用 make_lead_agent() 創(chuàng)建新實例
┌─────────────────────────────────────────────┐
│ Thread (對話線程) 生命周期 │
└─────────────────────────────────────────────┘
┌────────┐ ┌──────────┐ ┌───────────┐ ┌──────────┐ ┌──────────┐
│ 創(chuàng)建 │─?│ ThreadData│─?│ 每輪執(zhí)行 │─?│ 記憶更新 │─?│ 持續(xù)/ │
│ (新對話) │ │ 初始化 │ │ (中間件→ │ │ (異步, │ │ 結(jié)束 │
│ │ │ 創(chuàng)建目錄 │ │ LLM→工具) │ │ 30s去抖)│ │ │
└────────┘ └──────────┘ └───────────┘ └──────────┘ └──────────┘
每輪執(zhí)行:
ThreadDataMiddleware → 確保線程目錄存在
UploadsMiddleware → 掃描新上傳文件
SandboxMiddleware → 獲取/復用沙箱
... (其余中間件)
TitleMiddleware → 首次交換后生成標題 (僅一次)
MemoryMiddleware → 排隊記憶更新 (每輪)
┌─────────────────────────────────────────────┐
│ Sandbox (沙箱) 生命周期 │
└─────────────────────────────────────────────┘
LocalSandbox:
acquire() → 單例 (sandbox_id = "local")
get(id) → 返回同一實例
release() → no-op (不銷毀)
AioSandbox (Docker):
acquire() → 啟動新容器 / 連接已有容器
get(id) → 返回容器客戶端
release() → 停止并清理容器
沙箱復用:
- 同一 thread_id 復用同一個沙箱實例
- SandboxMiddleware 檢查 state.sandbox 是否已有 sandbox_id
- 如果有 → 直接 get() 復用,不再 acquire
┌─────────────────────────────────────────────┐
│ Subagent (子代理) 生命周期 │
└─────────────────────────────────────────────┘
PENDING ──? RUNNING ──? COMPLETED
│
├──? FAILED (執(zhí)行異常)
│
└──? TIMED_OUT (超過 timeout_seconds,默認 900s)
創(chuàng)建:
task_tool() → SubagentExecutor(task, task_id)
→ _scheduler_pool.submit(run_task)
執(zhí)行:
run_task() → _execution_pool.submit(execute)
→ agent.stream(state) 流式執(zhí)行
→ 實時收集 AI 消息
回收:
調(diào)度線程等待 future.result(timeout)
→ 更新 _background_tasks[task_id] 狀態(tài)
→ task_tool 輪詢檢測到終態(tài) → 返回結(jié)果
``
### 4.3 配置驅(qū)動的條件化行為
Agent 的運行時行為由 `config.configurable` 中的參數(shù)動態(tài)控制:
``
config.configurable
├── model_name → 切換 LLM 模型
├── thinking_enabled → 啟用/禁用擴展思考
├── reasoning_effort → 推理力度 ("low" / "medium" / "high")
├── is_plan_mode → 啟用 TodoListMiddleware (任務追蹤)
├── subagent_enabled → 啟用 task 工具 + SubagentLimitMiddleware
├── max_concurrent_subagents → 并發(fā)子代理數(shù)上限 (默認 3)
├── is_bootstrap → 啟動引導模式 (精簡提示詞 + setup_agent 工具)
└── agent_name → 自定義代理 (加載對應 SOUL.md + 獨立記憶)
``
### 4.4 記憶系統(tǒng)生命周期
``
用戶發(fā)送消息
│
▼
MemoryMiddleware.before_model()
│ 過濾: 只保留 HumanMessage + 最后一個 AIMessage
▼
加入 MemoryQueue (去抖: 同一 thread_id 合并)
│
▼ (30 秒后觸發(fā))
MemoryQueue.process()
│
▼
LLM 事實提取
├── 分析對話內(nèi)容
├── 提取用戶上下文 (workContext, personalContext, topOfMind)
├── 提取離散事實 (id, content, category, confidence)
└── 過濾: confidence < 0.7 的事實不存儲
│
▼
原子寫入 memory.json
├── 寫入臨時文件
├── 原子替換 (os.replace)
└── 失效內(nèi)存緩存
│
▼
下次對話時 → apply_prompt_template() → 讀取 memory.json
→ 注入 top 15 事實 + 用戶上下文到 <memory> 標簽
→ 限制 max_injection_tokens (默認 2000 token)
``
---
## 五、關鍵設計模式總結(jié)
| 模式 | 體現(xiàn) |
|------|------|
| **工廠模式** | `make_lead_agent(config)` 根據(jù)運行時參數(shù)創(chuàng)建完整 Agent 實例 |
| **中間件鏈** | 11 個中間件有序組裝,before_model / after_model 鉤子 |
| **策略模式** | SandboxProvider 接口,Local / Docker / K8s 三種實現(xiàn) |
| **懶加載** | MCP 工具首次使用時才初始化;Agent 首次請求時才創(chuàng)建 |
| **緩存 + 失效** | MCP 工具按 mtime 緩存;memory.json 按修改時間緩存 |
| **對象池** | Subagent 雙線程池 (_scheduler_pool + _execution_pool) |
| **事件驅(qū)動** | SSE 流式輸出 (values / messages-tuple / end) |
| **漸進式加載** | Skills 只在系統(tǒng)提示詞中列出路徑,Agent 按需 read_file 加載 |
| **去抖隊列** | Memory 更新去抖 (30s),避免每輪對話都觸發(fā) LLM 調(diào)用 |
| **原子寫入** | memory.json 和 extensions_config.json 使用 temp + replace |到此這篇關于Qwen3.6-27B 本地私有化部署 + Claude Code 連接應用的文章就介紹到這了,更多相關Qwen3.6-27B 本地部署+Claude Code內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持腳本之家!
相關文章

Claude Code接入SonarQube靜態(tài)掃描的實戰(zhàn)指南
SonarQube 是業(yè)界最流行的代碼質(zhì)量平臺之一,能檢測 Bug、漏洞、壞味道、安全熱點,還能統(tǒng)計覆蓋率和重復代碼,而現(xiàn)在,它可以直接集成進 Claude Code,讓 AI 在幫你寫代碼2026-04-28
Claude Code零改動接入DeepSeek V4的詳細過程
文章介紹了cc-use工具,作為ClaudeCodeDe的啟動器,解決了在不同不同Anthropop提供者之間切換時環(huán)境變量沖突的問題,文章詳細描述了如何使用cc-use工具接通DeepSeekV4端點,需2026-04-28
這篇文章主要為大家詳細Claude Code的核心用法,包括精簡上下文、先規(guī)劃后編碼、強制自我驗證,通過標準四步工作流與實戰(zhàn) Prompt助你 5 分鐘上手,讓 AI 成為編程神隊友,有2026-04-28
Claude Code是Anthropic推出的面向開發(fā)者的AI編程協(xié)作工具, Claude Code定位不是聊天,而是在本地代碼倉庫中執(zhí)行高權限、可上下文感知的工程任務,這篇文章主要介紹了使用cla2026-04-27
ClaudeCode是Anthropicc推出的AI編程搭檔,具備上下文感知、工程化導向和可定制行為特征,本文介紹了其安裝配置、與第三方平臺CodingPlan的的集成,并通過IDE插件在Idea中使用2026-04-27
Claude Code GitHub Actions 使用詳細步驟
ClaudeCode是Anthropic推出的GitHubActions工具,能自動分析代碼、創(chuàng)建PR、實現(xiàn)功能并修復錯誤,本文介紹了如何通過AceDataCloud的代理服務配置和使用ClaudeCodeGitHubAction2026-04-27
本文詳細介紹了如何安全干凈地升級ClaudeCode和OpenCode兩大工具至最新版本,內(nèi)容包括檢查當前版本,備份配置文件,關閉運行中的會話及解決常見問題的方法,希望對大家有所2026-04-26
這篇文章提供了詳細的卸載Claude和Opencaed的方法,包括確認安裝方式,卸載命令,清理殘留配置文件和環(huán)境變量等幾個步驟,文章還提供了針對不同安裝方式的具體操作,希望對大2026-04-26
一問詳解Claude Code中的調(diào)試技巧與錯誤處理
這篇文章主要為大家詳細介紹了 Claude Code 的調(diào)試技巧、錯誤分析方法、日志解讀、性能優(yōu)化策略以及常見問題的解決方案,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小2026-04-24
本文介紹了ClaudeCode的使用指南,涵蓋安裝配置、模式切換、終端命令、文件編輯、代碼回滾、上下文管理、長期記憶、子代理、插件安裝等內(nèi)容,幫助開發(fā)者更高效地使用AI編程助2026-04-24










