從零開始用Python開發OpenClaw式自主智能體

寧星星、易顯維

  • 出版商: 清華大學
  • 出版日期: 2026-08-01
  • 售價: $594
  • 語言: 簡體中文
  • ISBN: 7302724083
  • ISBN-13: 9787302724087
  • 相關分類: AI Coding
  • 下單後立即進貨 (約4週~6週)

  • 從零開始用Python開發OpenClaw式自主智能體-preview-1
  • 從零開始用Python開發OpenClaw式自主智能體-preview-2
  • 從零開始用Python開發OpenClaw式自主智能體-preview-3
從零開始用Python開發OpenClaw式自主智能體-preview-1

商品描述

這是一本聚焦工程落地的AI系統開發實戰圖書,以TrueClaw完整項目為核心,循序漸進地講解如何基於Python從零搭建一個集多通道接入、會話路由、智能體循環、工具調用與可擴展運維於一體的AI網關系統,幫助讀者實現從原型開發到工程化落地的能力跨越。《從零開始用Python開發OpenClaw式自主智能體》共18章,分為基礎準備、核心網關服務、AI Agent系統、擴展功能、項目實戰5個部分,層層拆解AI網關的完整構建邏輯。 《從零開始用Python開發OpenClaw式自主智能體》摒棄簡單的API調用演示,聚焦工程核心難點,詳解統一消息模型設計、會話隔離與上下文管理、流式輸出狀態控制、超時重試機制、多環境密鑰配置等關鍵技術,並融入MCP工具調用思路與插件體系開發方法。《從零開始用Python開發OpenClaw式自主智能體》遵循“夠用、透明、可遷移”的技術原則,先實現最小可行架構,再逐步延伸至生產級優化方案與技術取舍思路。 《從零開始用Python開發OpenClaw式自主智能體》適合Python開發者、AI應用工程師、後端工程師與技術負責人閱讀。讀者學完本書後,將具備獨立設計並實現中小型AI網關系統的能力,能夠在真實場景中完成從“原型可用”到“工程化運營”的跨越。

作者簡介

寧星星 畢業於華中科技大學,獲學士學位;畢業於華南理工大學,獲碩士學位。華大生命科學研究院(BGI)生物智能研究所資深NLP算法工程師,目前從事RAG系統、Agent智能系統及生命科學垂直領域大模型等方向的研發工作。擁有多年NLP算法研發經驗,擅長大模型、AIGC、智能問答等技術,參與研發金融行業大模型——容聯雲“赤兔大模型”,並多次獲得全國性NLP與知識圖譜相關競賽獎項。 易顯維 畢業於中國地質大學,獲碩士學位。AI與認知智能領域專家,現任易智數維總經理。擁有15年以上算法研發與團隊管理經驗,專註技術落地與產業賦能,研究方向包括語義解析、機器視覺、智能體終端等。曾任職中國建設銀行、科大訊飛研究院、百分點認知智能實驗室,主導多項AI產品的工程化落地;在CCKS、百度千言、WAIC、CCF-BDCI等賽事中累計獲獎20余次。現自主創業,帶領團隊推進科技成果商業化,以技術賦能推動業務高效增長。

目錄大綱

目    錄

第一部分  基礎準備

第 1 章  項目概述與架構設計 2

1.1  本書的問題與交付物 2

1.2  參考實現的命名:TrueClaw 3

1.3  為何本書選用Python作為實現語言 3

1.4  從“會回復的Bot”到“個人AI網關” 4

1.4.1  三個典型的用戶故事 4

1.4.2  為什麼需要“歸一化消息”而不是透傳平臺JSON 5

1.4.3  成本、額度與濫用:為什麼“誰能觸發”是架構問題 5

1.5  多通道AI網關與“單通道聊天機器人”的差異 5

1.6  TrueClaw的定位與功能組成 7

1.7  邏輯分層:誰負責什麼 8

1.8  主數據流:一條消息的路徑 10

1.9  非功能需求:生產環境必須直面的清單 11

1.9.1  架構反模式 12

1.9.2  與六邊形架構等模式的弱關聯 12

1.10  本書範圍與不做什麼 13

1.11  本章小結 14

第 2 章  Python異步編程基礎 15

2.1  並發在Python中意味著什麼 15

2.2  協程、事件循環與await 16

2.2.1  協程與async def 16

2.2.2  事件循環在做什麼(心智模型) 16

2.3  不要阻塞事件循環:常見錯誤與修復 17

2.4  並發啟動:Task、gather與TaskGroup 18

2.4.1  asyncio.create_task與await 19

2.4.2  asyncio.gather 19

2.4.3  Python 3.11:asyncio.TaskGroup(結構化並發) 20

2.5  取消是必修課 20

2.6  超時與重試:讓故障可恢復 22

2.6.1  asyncio.wait_for 22

2.6.2  一個簡化的指數退避重試模板(含抖動) 23

2.7  同步原語:隊列與背壓(Queue/Semaphore/Lock) 23

2.7.1  生產者-消費者模式:asyncio.Queue 24

2.7.2  限流:Semaphore 24

2.7.3  互斥與共享數據:Lock 25

2.8  異步疊代與流式數據(async for) 25

2.9  優雅關停:把“退出”做成一等公民 26

2.9.1  關停模板 26

2.9.2  資源關閉:用async with把清理邏輯寫成可復用組件 27

2.9.3  多資源的退出棧:contextlib.AsyncExitStack 28

2.9.4  超時關停與取消期間的安全清理 29

2.10  後臺任務異常:如何避免“異常丟失” 30

2.11  日誌與上下文:可觀測性不是附錄 31

2.12  小型練習:把隊列消息跑通一條鏈路 32

2.13  本章小結 33

2.14  習題與思考 33

第 3 章  配置管理與環境搭建 34

3.1  為什麼需要“可運維”的配置 34

3.2  配置的層次:默認值、文件、環境變量 35

3.3  配置文件結構:用數據模型表達“可校驗” 35

3.3.1  示例配置(JSON) 36

3.3.2  配置模型(Schema):用dataclass做最小可校驗 36

3.4  加載與合並:默認值+文件+環境變量 38

3.4.1  合並策略:深度覆蓋(deep merge) 38

3.4.2  配置字典初始化(默認值) 38

3.4.3  環境變量覆蓋:用統一命名把密鑰註入配置 39

3.5  配置校驗:缺失要明確、語義要一致 40

3.6  默認值與安全策略:空列表的語義是“第一安全線” 41

3.7  目錄與數據邊界:配置目錄、運行時狀態與工作區 42

3.8  多實例隔離:用--config或獨立目錄 42

3.9  最小可運行入口:從“解析配置”到“啟動空網關” 43

3.9.1  示例:打印最終配置摘要 43

3.9.2  示例:啟動空網關(用於第4章的“殼”) 44

3.10  與第4章銜接:端口與控制面協議的入口點 45

3.11  本章小結 45

3.12  習題與思考 45

3.13  學習目標回顧 46

第二部分  核心網關服務

第 4 章  WebSocket網關服務器 48

4.1  控制面網關在TrueClaw中的職責 48

4.1.1  負責什麼 48

4.1.2  暫不負責什麼 49

4.2  配置入口:從第3章配置模型接入網關運行時 49

4.3  協議設計:先定消息幀,再寫處理器 49

4.3.1  統一幀格式(最小集合) 50

4.3.2  響應與錯誤幀 50

4.4  連接上下文:每條連接的運行時狀態 51

4.5  連接生命周期:每個連接一組任務 51

4.6  服務骨架:可運行的asyncio WebSocket網關 53

4.6.1  網關管理器骨架 53

4.6.2  連接處理器骨架 54

4.7  讀循環:解析、校驗、分發 54

4.7.1  讀循環核心步驟 54

4.7.2  Action分發建議 55

4.8  寫循環:單點發送與出站背壓 55

4.9  心跳與空閑超時:清理“僵屍連接” 56

4.9.1  心跳任務示例 56

4.9.2  空閑守衛示例 57

4.10  錯誤處理:面向客戶端的可恢復語義 57

4.10.1  錯誤返回結構統一 57

4.10.2  可重試與不可重試分界 58

4.11  可觀測性:連接級日誌與指標 58

4.12  優雅關停:讓退出路徑與啟動路徑同等重要 58

4.13  測試策略:先測協議與生命周期,再測業務細節 59

4.14  與第5~7章的銜接點 60

4.15  深化主題 60

4.15.1  連接狀態機與事件時序 60

4.15.2  協議版本化與兼容策略 61

4.15.3  鑒權入口與權限分層 61

4.15.4  廣播模型、訂閱過濾與事件總線占位 62

4.15.5  限流、冪等與防抖 63

4.15.6  更完整的網關代碼骨架(可直接改造成工程代碼) 63

4.15.7  生產部署時的網絡邊界與反向代理約定 66

4.16  本章小結 66

4.17  習題與思考 67

4.18  學習目標回顧 67

第 5 章  消息通道抽象層 68

5.1  為什麼需要通道抽象層 69

5.2  設計原則:抽象層應遵守什麼 69

5.3  歸一化入站消息模型 69

5.3.1  最小字段集 69

5.3.2  字段設計取舍 71

5.4  統一出站消息模型 71

5.5  通道能力矩陣 72

5.6  通道接口定義:面向生命周期與消息流 73

5.7  通道註冊表與調度器 74

5.8  入站處理管線:從原始事件到核心消息 74

5.9  出站發送管線:從統一消息到平臺API 75

5.10  錯誤處理與背壓 76

5.10.1  錯誤分類與重試策略 76

5.10.2  背壓與隊列:保護通道與核心鏈路 77

5.11  生命周期管理:啟動、恢復、停止 78

5.12  通道實現模板:一個可復用的基類 78

5.13  協作、降級與可觀測性 79

5.13.1  與第4章網關控制面的協作 79

5.13.2  與第7章會話路由的契約 79

5.13.3  能力降級策略:能力差異不等於失敗 80

5.13.4  可觀測性:通道層必須記錄什麼 80

5.14  測試與集成 80

5.14.1  測試策略:讓新增通道變成低風險操作 80

5.14.2  最小集成示例:把通道接入核心鏈路 82

5.14.3  與第6章銜接:真實通道實現清單 82

5.15  本章小結 83

5.16  習題與思考 83

5.17  學習目標回顧 83

第 6 章  Telegram通道實現 84

6.1  Telegram接入模式選擇 84

6.1.1  本書默認:Long Polling 85

6.1.2  配置建議 85

6.2  領域模型與接口骨架 85

6.2.1  Telegram領域模型與平臺差異 85

6.2.2  Telegram適配器接口實現骨架 86

6.3  入站接收:Long Polling主循環 86

6.3.1  更新拉取流程 87

6.3.2  啟停語義 87

6.4  歸一化:將Telegram Update對象轉換為統一的InboundMessage模型 87

6.4.1  提取原始消息 88

6.4.2  核心映射示例 88

6.4.3  命令與提及解析 89

6.5  安全策略:allowFrom與群聊觸發規則 89

6.5.1  allowFrom原則 89

6.5.2  群策略建議 90

6.6  出站發送:OutboundMessage轉換為Telegram API調用 90

6.6.1  文本發送的最小實現 90

6.6.2  長文本切分 91

6.7  錯誤處理與控制面聯動 91

6.7.1  錯誤分類:把Telegram錯誤映射為統一語義 91

6.7.2  控制面聯動:可觀測性事件輸出 92

6.8  生命周期與Webhook遷移 92

6.8.1  生命周期與恢復:避免“假活著” 92

6.8.2  Webhook遷移指南(擴展閱讀) 92

6.9  測試、交接與最小示例 93

6.9.1  與第7章會話路由的交接契約 93

6.9.2  測試策略:Telegram通道最小測試集 93

6.9.3  最小可運行示例(整合版) 93

6.10  深化主題 94

6.10.1  Telegram API客戶端層設計 94

6.10.2  offset管理、重啟恢復與冪等 95

6.10.3  消息類型覆蓋與附件處理策略 96

6.10.4  群聊行為邊界與觸發矩陣 97

6.10.5  發送管線細節(parse_mode、切分、降級) 97

6.10.6  限流與重試參數化 98

6.10.7  觀測字段與排障日誌規範 98

6.10.8  部署與運行清單(開發環境到生產環境) 98

6.10.9  常見故障與定位手冊 99

6.10.10  多實例與分片策略(進階) 99

6.10.11  端到端演練腳本(建議) 99

6.11  實戰專題 100

6.11.1  從可用到穩定的參數基線 100

6.11.2  故障復盤模板與案例 100

6.11.3  安全控制的工程化細節 101

6.11.4  性能與成本的可量化方法 102

6.11.5  與第4章控制面的協議聯動 102

6.11.6  可測試性的落地技巧 102

6.11.7  生產運維手冊(建議納入附錄) 103

6.12  本章落地清單(交付驗收) 104

6.13  本章小結 104

6.14  習題與思考 104

6.15  附錄 105

6.15.1  Telegram通道參考實現(長清單) 105

6.15.2  測試用例擴展示範與驗收腳本 107

6.15.3  讀者常見問題(FAQ) 109

6.15.4  配置樣例、排障命令與發布前檢查 109

6.15.5  術語與字段速查(Telegram版) 111

6.15.6  完整消息旅程逐步拆解 111

6.15.7  章節自檢問答 113

6.15.8  給讀者的實現節奏建議 113

6.16  學習目標回顧 114

第 7 章  消息路由與會話管理 115

7.1  路由設計基礎 115

7.1.1  問題定義:什麼叫“正確路由” 115

7.1.2  會話鍵設計:先定義規則,再寫代碼 116

7.1.3  路由輸入模型:從InboundMessage到RouteIntent 116

7.1.4  路由策略決策樹 117

7.2  會話管理 117

7.2.1  群聊策略:共享會話還是按用戶隔離 117

7.2.2  會話存儲抽象:SessionStore接口 118

7.2.3  內存實現:MemorySessionStore 119

7.2.4  單會話順序一致性:SessionExecutor 120

7.3  路由器實現 121

7.3.1  路由器核心:MessageRouter 121

7.3.2  命令系統與路由協作 122

7.3.3  會話元數據:為後續章節預留擴展點 122

7.4  清理、並發與觀測 122

7.4.1  清理策略:TTL、最大歷史、空會話回收 122

7.4.2  並發與故障:常見競態場景 123

7.4.3  觀測體系:路由層應該打什麼點 123

7.5  測試、集成與演進 123

7.5.1  與控制面聯動:第4章action的擴展 124

7.5.2  測試策略:路由與會話的最小完備集 124

7.5.3  表驅動測試示例(策略矩陣) 124

7.5.4  集成演練:從Telegram入站到會話入庫 124

7.5.5  性能與容量預估(本章範圍) 125

7.5.6  遷移路徑:內存存儲到持久化存儲 125

7.5.7  常見誤區與反模式 125

7.6  本章小結 126

7.7  習題與思考 126

7.8  深化主題 126

7.8.1  路由配置模型的工程化定義 126

7.8.2  會話鍵生成器的可測試實現 127

7.8.3  路由中間件鏈 128

7.8.4  命令語義與會話副作用控制 128

7.8.5  會話歷史裁剪前置策略 129

7.8.6  會話一致性與持久化事務邊界 129

7.8.7  多實例部署下的路由策略 130

7.8.8  路由層錯誤分級與恢復策略 130

7.8.9  觀測大盤與告警規則 130

7.8.10  端到端場景劇本 130

7.8.11  參考實現(路由與會話整合代碼) 131

7.8.12  章節驗收清單 134

7.9  附錄 134

7.9.1  路由策略沖突分析方法 134

7.9.2  會話遷移與數據兼容方案 135

7.9.3  性能壓測設計(路由層) 135

7.9.4  運維告警與值班手冊模板 136

7.9.5  端到端驗收清單(第6、7章聯測版) 137

7.9.6  讀者常見問題(FAQ) 137

7.9.7  實現節奏建議(避免返工) 138

7.9.8  完整工程草圖(Router + Store + Command + Metrics) 138

7.9.9  章節交付審查問答 140

7.9.10  讀者實操任務建議 140

7.9.11  架構復盤:為什麼第7章是本書的轉折點 140

7.9.12  本章最易踩坑的10個點 141

7.9.13  本章與後續章節的依賴關系 141

7.9.14  發布前最後10分鐘檢查 142

7.10  學習目標回顧 142

第三部分  AI Agent系統

第 8 章  LLM集成基礎 144

8.1  提供商抽象與配置銜接 144

8.1.1  為什麼需要提供商抽象層 144

8.1.2  與第3章配置的銜接 145

8.1.3  統一消息模型:與第7章會話歷史的映射 146

8.1.4  工具/函數調用的協議結構(預備知識) 146

8.2  提供商接口與調用模式 147

8.2.1  提供商接口定義 147

8.2.2  非流式調用:chat/completions 148

8.2.3  流式調用:SSE與增量解析 148

8.3  HTTP客戶端、重試與並發控制 149

8.3.1  HTTP客戶端、超時與取消 149

8.3.2  重試策略:可重試與不可重試 149

8.3.3  並發與限流:Semaphore 150

8.4  安全、日誌與可觀測性 150

8.4.1  密鑰安全與日誌脫敏 151

8.4.2  結構化日誌字段 151

8.5  參考實現:OpenAI兼容提供商 151

8.5.1  非流式實現骨架 151

8.5.2  流式實現要點(異步生成器) 153

8.5.3  MockProvider:可測試的假模型 153

8.5.4  參考實現綱要(OpenAI兼容) 154

8.6  工程深化:成本、網絡與容錯 156

8.6.1  錯誤分類決策樹 156

8.6.2  計費、配額與成本可見性 156

8.6.3  代理、TLS與企業內網 157

8.6.4  LLM錯誤類型層次 157

8.6.5  Retry-After與退避優先級 158

8.6.6  流式場景下的首Token延遲 158

8.6.7  熔斷與降級 158

8.6.8  工具Schema與請求組裝 158

8.6.9  多模型與路由占位 158

8.6.10  測試策略與集成驗收清單 159

8.6.11  上下文窗口與max_tokens 159

8.6.12  response_format、stop與多模態占位 159

8.6.13  從會話到模型請求的數據流 160

8.6.14  故障復盤模板與觀測指標 160

8.6.15  與第7章的邊界紀律 160

8.6.16  實現節奏建議與章節自檢 160

8.6.17  超時層級與流式解析的邊界情況 161

8.6.18  重試與冪等(計費) 161

8.6.19  tool_calls流式合並偽代碼 161

8.6.20  與通道層流式展示銜接 161

8.6.21  配置樣例(環境變量) 162

8.7  與OpenClaw的對照及章節銜接 162

8.7.1  與開源OpenClaw的概念對照(實現子集) 162

8.7.2  與第9章的銜接 163

8.7.3  架構補充與OpenClaw對照 163

8.8  附錄與發布檢查 164

8.8.1  常見問題(FAQ) 164

8.8.2  Anthropic等風格差異 164

8.8.3  發布前檢查 164

8.8.4  進階劄記:運維與工程習慣 164

8.9  本章小結 166

8.10  習題與思考 167

8.11  學習目標回顧 167

第 9 章  Agent核心實現 168

9.1  Agent在系統中的位置與狀態機 168

9.1.1  Agent在TrueClaw中的位置 168

9.1.2  主循環狀態機(邏輯視圖) 169

9.2  運行上下文與消息映射 169

9.2.1  RunContext:一次運行的輸入與註入 169

9.2.2  會話消息與ChatMessage的映射 171

9.2.3  assistant消息的兩種形態 171

9.3  非流式主循環與工具調用執行 171

9.3.1  非流式主循環:先跑通語義 171

9.3.2  finish_reason的務實處理 173

9.3.3  extract_tool_calls與persist_assistant 173

9.3.4  ToolExecutor:與第10章的分界線 174

9.4  流式主循環與片段合並 174

9.4.1  合並規則 175

9.4.2  OpenAI兼容流式中tool_calls增量的典型形狀 175

9.4.3  run_stream控制流 176

9.5  取消、並發與單會話串行 176

9.5.1  取消 176

9.5.2  同會話串行 176

9.5.3  會話並發模型:隊列、取消與背壓 176

9.6  通道銜接與錯誤處理 178

9.6.1  與通道層的銜接:可觀測與發送策略 178

9.6.2  錯誤處理與用戶可見文案 179

9.6.3  參考實現:流式累加器的完整合並邏輯 179

9.6.4  合並沖突處理策略 181

9.6.5  流式文本節流建議 181

9.7  安全護欄與配額 181

9.7.1  Agent入口的安全護欄 181

9.7.2  參考實現:AgentRunner的完整骨架 182

9.7.3  錯誤返回是否寫回會話 185

9.8  參考實現與測試策略 185

9.8.1  測試策略 185

9.8.2  參考實現綱要(模塊建議) 186

9.8.3  session_history_to_chat組裝順序 186

9.8.4  最小內置ToolExecutor(便於聯調) 186

9.8.5  測試矩陣 186

9.8.6  端到端驗收清單 187

9.8.7  故障註入演練(建議每次發版前執行) 187

9.8.8  代碼評審關註點 188

9.9  與OpenClaw對照與章節銜接 188

9.9.1  與開源OpenClaw的概念對照 188

9.9.2  與第10、11章的銜接 189

9.10  本章小結 189

9.11  習題與思考 189

9.12  學習目標回顧 190

第 10 章  工具調用系統 191

10.1  工具層位置與API協議 191

10.1.1  工具層在TrueClaw中的位置 191

10.1.2  與OpenAI兼容API的tools形狀 192

10.2  工具定義、註冊表與執行器 192

10.2.1  ToolDefinition與註冊表 193

10.2.2  RegistryToolExecutor:對接第9章協議 194

10.2.3  參數校驗:JSON Schema子集 195

10.3  沙箱與內置工具 195

10.3.1  工作區沙箱:路徑解析 195

10.3.2  內置工具示例:read_workspace_file 196

10.3.3  高危能力:shell與網絡搜索 196

10.4  工具權限與配置 197

10.4.1  分層配置示例 197

10.4.2  按用戶/會話放開(進階) 198

10.5  MCP協議與外部工具集成 198

10.5.1  MCP概述:解決什麼問題 198

10.5.2  MCP stdio傳輸與進程托管 199

10.5.3  MCP HTTP/遠程傳輸(概念) 199

10.5.4  內置工具與MCP對比小結 199

10.6  參考實現與測試策略 200

10.6.1  測試策略 200

10.6.2  參考實現綱要(目錄建議) 200

10.6.3  參考實現:完整註冊表與執行鏈路 201

10.6.4  為什麼要統一ToolResult 204

10.6.5  MCP橋接實現:從list_tools到call_tool 204

10.6.6  故障與降級策略 206

10.6.7  熱更新與一致性窗口 206

10.7  章節銜接與OpenClaw對照 206

10.7.1  與第9章的銜接清單 206

10.7.2  與第11章的銜接 207

10.7.3  與開源OpenClaw的概念對照 207

10.8  發布前驗收與審計 207

10.8.1  故障註入場景 207

10.8.2  審計日誌最小字段集 207

10.8.3  驗收清單與評審紅線 208

10.8.4  自動化測試腳手架 208

10.8.5  性能基線 209

10.9  本章小結 209

10.10  習題與思考 209

10.11  學習目標回顧 210

第 11 章  會話管理與上下文 211

11.1  上下文構建管線與約束 211

11.1.1  上下文構建管線:從SessionState到ChatRequest 212

11.1.2  構建順序(強約定) 212

11.1.3  約束與目標:窗口、費用與質量 213

11.1.4  一個常見誤區:把“上下文”當作“日誌” 213

11.2  歷史裁剪策略 213

11.2.1  最小可用策略:按條數滑動窗口 213

11.2.2  條數兜底放在哪裏:存儲層與上下文層 214

11.2.3  更貼近成本的策略:按Token預算裁剪(估算版) 214

11.2.4  兩個預算:prompt與completion 214

11.2.5  估算與真實Tokenizer:如何降低風險 215

11.2.6  角色優先裁剪:把“信息密度”放在首位 215

11.2.7  按“輪次”保留:更貼近對話語義 215

11.2.8  工具結果的二次截斷(上下文層) 215

11.3  摘要壓縮與長期記憶 215

11.3.1  摘要壓縮:讓歷史變短但不失真 216

11.3.2  摘要怎麼生成:規則、模型與折中 216

11.3.3  摘要自檢:避免錯誤記憶擴散 216

11.3.4  摘要任務調度:同步、異步與回寫 217

11.3.5  防止“舊摘要覆蓋新消息” 217

11.3.6  摘要任務隊列骨架 217

11.3.7  長期記憶沖突:合並、覆蓋與人工確認 218

11.4  system prompt模板與會話元數據 219

11.4.1  system prompt模板:靜態、動態與可選段 219

11.4.2  一個可復制的system模板 219

11.4.3  會話元數據:把“設定”從歷史中提取出來 220

11.4.4  元數據的可信度:只允許“顯式指令”修改 220

11.4.5  /reset、/forget與工具狀態清空 220

11.5  工具結果後處理與可觀測性 220

11.5.1  工具結果後處理:截斷、摘要與引用 221

11.5.2  可觀測性:記錄裁剪與摘要事件 221

11.5.3  一條裁剪日誌長什麼樣 221

11.6  策略選型與多實例一致性 222

11.6.1  策略選型建議(默認值) 222

11.6.2  如何用“成本預算”反推參數 222

11.6.3  多模態與附件:用“占位”而不是“全文”進入上下文 223

11.6.4  多實例一致性:上下文策略如何避免沖突 223

11.7  參考實現與擴展示例 223

11.7.1  PromptBuilder參考骨架 223

11.7.2  把構建報告寫入日誌 226

11.8  測試、評測與發布演練 226

11.8.1  測試策略 226

11.8.2  評測體系:不要只看“主觀感覺” 227

11.8.3  發布前演練:故障註入與回滾預案 227

11.9  章節銜接與集成接口 228

11.9.1  與第9、10章的銜接點 228

11.9.2  build_prompt_messages的可運行骨架 228

11.9.3  與第16章集成的接口清單 229

11.10  落地路線與案例 229

11.10.1  章節落地路線(建議3個疊代) 229

11.10.2  案例拆解:一次真實長對話如何被構建 230

11.11  反模式與運維手冊 231

11.11.1  常見反模式與修正建議 231

11.11.2  運維手冊:排障、回歸與上線節奏 231

11.11.3  實現附錄:常用函數與配置模板 232

11.12  與開源OpenClaw的上下文與記憶對照 233

11.13  本章小結 234

11.14  習題與思考 234

11.15  學習目標回顧 234

第四部分  擴展功能

第 12 章  插件系統架構 236

12.1  插件問題定義與契約 236

12.2  發現機制與加載狀態 239

12.3  配置、隔離與安全 240

12.4  章節銜接與邊界 242

12.5  參考實現與最小可發布包 243

12.6  多插件協同與沖突消解 247

12.7  運行時監督與遷出路徑 249

12.8  測試、CI與供應鏈 250

12.9  反模式與發布演練 251

12.10  與OpenClaw對照 254

12.11  本章小結 254

12.12  習題與擴展閱讀 254

12.12.1  習題 254

12.12.2  擴展閱讀(實現時可對照) 255

12.13  學習目標回顧 255

第 13 章  實現更多消息通道(以Slack為例) 256

13.1  新增通道的問題定義與復用清單 257

13.1.1  為什麼需要“第二條通道”:問題定義與驗收標準 257

13.1.2  復用清單:從第5、6、12章繼承什麼 257

13.2  接入模型與前置條件 258

13.2.1  三種接入模型:輪詢、Webhook、長連接 258

13.2.2  長連接網關:通用狀態機與實現清單 260

13.2.3  公網、TLS、反向代理:Webhook通道的前置條件 261

13.3  Slack Events API端到端骨架 262

13.3.1  配置模型 262

13.3.2  簽名驗證(概念實現) 262

13.3.3  HTTP Handler:challenge、事件分流、快速返回 263

13.3.4  歸一化:將message事件轉換為InboundMessage 264

13.3.5  出站:chat.postMessage 264

13.3.6  Socket Mode備忘(可選路徑) 265

13.3.7  與config.json的拼接示例 265

13.3.8  出站富文本:從OutboundChunk到Block Kit(思路) 266

13.3.9  平臺限流與rate_limited處理 266

13.3.10  冪等、去重與事件投遞語義 266

13.3.11  線程、頻道、用戶標識:映射到會話鍵的註意事項 267

13.4  插件化集成與橋接進程 267

13.4.1  插件集成:把Slack適配器掛回第12章 267

13.4.2  橋接:何時需要子進程或獨立服務 268

13.5  多通道下的背壓與安全 269

13.5.1  多通道下的背壓、公平性與隔離 270

13.5.2  安全:密鑰、OAuth、最小權限 270

13.6  測試、觀測與排障 270

13.6.1  測試策略 270

13.6.2  最小pytest fixture思路(示例) 270

13.6.3  觀測與排障清單 271

13.7  能力矩陣與平臺抽象擴展 271

13.7.1  在本書ChannelCapabilities上繼續“加列” 272

13.7.2  Microsoft Teams(概念對照) 272

13.7.3  飛書/企業微信(國內常見) 272

13.8  與OpenClaw對照與反模式 273

13.8.1  與開源OpenClaw的對照(概念) 273

13.8.2  反模式(避免) 273

13.9  本章小結 273

13.10  習題與擴展閱讀 273

13.10.1  習題 274

13.10.2  擴展閱讀 274

第 14 章  CLI命令行工具 275

14.1  CLI定位與入口形態 276

14.1.1  為什麼需要CLI 276

14.1.2  TrueClaw CLI的最小職責邊界 276

14.1.3  入口形態:python -m與console_scripts 277

14.2  子命令設計與路由實現 277

14.2.1  子命令總覽與命名約定 277

14.2.2  用argparse實現子命令路由器 278

14.2.3  為何不默認引入Typer/Click 279

14.2.4  main()調度器(銜接異步入口) 279

14.3  核心子命令:init、config、gateway run 280

14.3.1  init:初始化用戶目錄與最小配置 280

14.3.2  config:校驗、路徑解析與只讀introspect 280

14.3.3  gateway run:前臺進程、日誌與信號 280

14.3.4  參考實現:cmd_run與compose_app(將組件組裝為系統) 281

14.4  輔助子命令:agent chat、doctor、plugins 283

14.4.1  agent chat:本機調試Agent 283

14.4.2  doctor:面向運維的一頁式診斷 284

14.4.3  plugins:對接第12章發現結果 285

14.5  退出碼、日誌與錯誤消息 285

14.5.1  退出碼約定與自動化腳本 285

14.5.2  管道與TTY檢測 286

14.5.3  日誌:CLI與庫日誌的關系 286

14.5.4  錯誤消息:讓讀者能“一次改對” 287

14.6  安全、配置優先級與控制面銜接 287

14.6.1  安全:掩碼、歷史與泄露防護 287

14.6.2  與第4章控制面的關系 287

14.6.3  配置優先級在CLI層的最終形態 288

14.7  測試、打包與版本 288

14.7.1  測試:CLI不是“沒法測” 288

14.7.2  打包、版本號與 --version 289

14.8  遙測、值班手冊與反模式 289

14.8.1  遙測、更新檢查與隱私 289

14.8.2  值班手冊片段:從癥狀到命令 289

14.8.3  反模式(避免) 290

14.8.4  語義化版本與CLI兼容性承諾 290

14.9  與OpenClaw CLI對照 291

14.10  本章小結 291

14.11  習題與擴展閱讀 291

14.11.1  習題 291

14.11.2  擴展閱讀 292

第 15 章  高級特性:定時、喚醒與統一事件總線 293

15.1  問題定義與統一事件總線 294

15.1.1  從“應答機”到“可編排系統” 294

15.1.2  統一事件總線:所有觸發源走向同一內核 294

15.1.3  參考骨架:統一事件總線(EventBus) 296

15.2  喚醒上下文與投遞策略 297

15.2.1  WakeContext:喚醒上下文應包含什麼 297

15.2.2  投遞策略:結果默認落到哪裏 298

15.3  調度實現路徑 299

15.3.1  路徑A:進程內輕量調度(asyncio) 299

15.3.2  路徑B:操作系統級調度+CLI/HTTP觸發 300

15.4  非IM觸發源:郵箱與Webhook 301

15.4.1  郵箱輪詢 301

15.4.2  作為“內部總線”的Webhook 301

15.5  並發、單飛與工作區掃描 302

15.5.1  同會話重入與單飛(Single-Flight) 302

15.5.2  多實例下的分布式鎖與Leader選舉 303

15.5.3  隊列化與即時執行 304

15.5.4  工作區掃描類任務 304

15.5.5  與用戶/schedule類指令的邊界 304

15.6  安全、配額與防燒費 304

15.6.1  安全:定時任務≠上帝模式 304

15.6.2  模型預算、配額與“防燒費” 305

15.7  觀測、告警與配置模型 305

15.7.1  觀測與告警 305

15.7.2  配置模型 306

15.8  章節銜接 307

15.8.1  與第11章上下文的交互 307

15.8.2  與第14章CLI的銜接 307

15.8.3  插件作為喚醒源(與第12章銜接) 308

15.9  MVP裁剪與測試策略 308

15.9.1  MVP與高級特性的裁剪金字塔 308

15.9.2  與成熟調度庫的對比 309

15.9.3  測試策略 309

15.10  反模式與OpenClaw對照 309

15.10.1  與開源OpenClaw的對照(概念) 309

15.10.2  反模式(避免) 310

15.11  本章小結 310

15.12  習題與擴展閱讀 310

15.12.1  習題 310

15.12.2  擴展閱讀 310

第五部分  實戰與收尾

第 16 章  完整項目集成:從零到驗收 312

16.1  集成驗收標準與前置準備 313

16.1.1  先定義集成完成的驗收標準 313

16.1.2  集成前置:版本、目錄、環境變量 313

16.2  參考配置與端到端裝配 314

16.2.1  參考配置:一份可端到端跑通的最小config.json 314

16.2.2  端到端組裝流程(推薦順序) 315

16.3  運行期可觀測與故障定位 316

16.3.1  運行期可觀測:必須看到哪些信號 316

16.3.2  4類高頻故障:定位漏鬥 316

16.4  一頁式驗收清單與README模板 317

16.4.1  一頁式驗收清單(建議直接復制) 317

16.4.2  推薦README模板(最小交付) 318

16.5  組裝接口與部署形態 319

16.5.1  與第12~15章的組裝接口(回看地圖) 319

16.5.2  單機部署與VPS部署:差異點清單 319

16.6  最小發布演練與成本視角 320

16.6.1  最小發布演練(Release Drill) 320

16.6.2  成本與延遲的集成視角 320

16.7  安全底線與功能對照 321

16.7.1  安全底線:集成階段最容易忽略的8件事 321

16.7.2  功能對照表:TrueClaw與開源OpenClaw(階段性) 321

16.8  完整驗收旅程 322

16.8.1  第17章前置基線:現在應記錄哪些指標 322

16.8.2  三條完整驗收旅程(建議逐條跑通) 322

16.9  CI/CD與團隊遷移 323

16.9.1  CI/CD驗收矩陣:把本章清單自動化 323

16.9.2  從單機到團隊共享環境:遷移註意事項 324

16.10  集成深化與收尾 324

16.10.1  常見“看起來像bug,實則是配置語義”的坑 324

16.10.2  端到端時序拆解(示例) 324

16.10.3  故障樹:從用戶投訴反推根因 325

16.10.4  發布清單(Release Checklist) 325

16.10.5  交付給團隊時的“最小包” 326

16.10.6  樣例日誌剖面:一眼看出鏈路在哪斷 326

16.10.7  集成測試數據集(Fixture)建議 326

16.10.8  多實例前的最小一致性協議 327

16.10.9  合規與審計最小字段集 327

16.10.10  向第18章過渡:哪些能力應插件化 327

16.10.11  現場演練腳本(可按團隊改寫) 327

16.10.12  常見問答(FAQ) 328

16.10.13  反模式(避免) 328

16.11  小結 329

16.12  習題與擴展閱讀 329

16.12.1  習題 329

16.12.2  擴展閱讀 329

第 17 章  性能優化:從“能運行”到“運行得穩、運行得久” 330

17.1  性能優化目標與預算模型 331

17.1.1  先明確目標:性能優化不是盲目提速 331

17.1.2  性能預算模型:延遲、吞吐量與成本三角 331

17.2  基線采集與瓶頸定位 332

17.2.1  基線采集:第16章指標的延續 332

17.2.2  定位瓶頸:先證據,後改動 333

17.3  入站、路由與會話層優化 333

17.3.1  入站通道優化:減少無效工作 333

17.3.2  路由與會話層優化:降低上下文構建開銷 334

17.4  LLM與工具調用路徑優化 334

17.4.1  LLM路徑優化:首Token延遲是關鍵體驗指標 335

17.4.2  工具調用優化:把慢工具關進籠子 335

17.5  出站、背壓與網絡優化 336

17.5.1  出站與流式優化:頻控比“更快刷字”更重要 336

17.5.2  連接與網絡優化:連接池、keep-alive、超時 337

17.6  觀測開銷與調度性能 338

17.6.1  日誌與觀測開銷:可見性不能把系統拖慢 338

17.6.2  調度任務性能(承接第15章) 338

17.7  壓測、疊代與典型案例 339

17.7.1  壓測設計:讓結果可比較 339

17.7.2  優化疊代閉環:一次只改一件大事 340

17.7.3  典型收益案例(模板化表達) 340

17.8  OpenClaw對照與反模式 340

17.8.1  與開源OpenClaw的性能思路對照 340

17.8.2  反模式(避免) 341

17.9  版本上線前性能檢查清單 341

17.10  小結 341

17.11  習題與擴展閱讀 341

17.11.1  習題 341

17.11.2  擴展閱讀 342

17.12  進階補充 342

17.12.1  優化操作手冊 342

17.12.2  參數調優優先級 342

17.12.3  性能回歸防線:PR檢查建議 342

17.12.4  配置模板:性能相關鍵位建議 343

17.12.5  質量門禁:何時允許發布 343

17.12.6  章節收束 343

第 18 章  擴展與定制:從“能用”到“可持續演進” 344

18.1  擴展原則與三條主路徑 344

18.1.1  先定擴展原則:改邊界,不改核心 344

18.1.2  三條主擴展路徑:通道、工具、部署形態 345

18.2  通道與工具定制 345

18.2.1  通道定制路線:從“能收發”到“可運維” 345

18.2.2  工具定制路線:能力增長與風險控制同步 345

18.3  企業集成:SSO與內部模型網關 346

18.3.1  企業SSO接入:身份不應由通道字段“猜” 346

18.3.2  內部模型網關對接:把外部依賴抽象成企業能力 346

18.4  審計、合規與沙箱隔離 346

18.4.1  審計與合規:最小字段集與保留策略 346

18.4.2  沙箱與隔離:讓高風險能力“可用但可控” 347

18.5  多租戶與擴展評審 347

18.5.1  多租戶與企業定制:先分層再共享 347

18.5.2  擴展能力評審模板(建議) 348

18.6  版本策略與測試 348

18.6.1  版本策略:語義化版本+兼容性承諾 348

18.6.2  擴展測試策略:契約測試優先 348

18.7  安全檢查與路線圖 348

18.7.1  安全檢查表(上線前必過) 349

18.7.2  路線圖設計:30/60/90天分階段落地 349

18.8  功能治理與誠實清單 349

18.8.1  功能膨脹治理:什麼需求應該拒絕 350

18.8.2  未覆蓋能力的誠實清單 350

18.9  OpenClaw對照與反模式 350

18.9.1  與開源OpenClaw的關系:借鑒而不照抄 350

18.9.2  反模式(應避免) 350

18.10  收官執行清單 350

18.11  小結 351

18.12  習題與擴展閱讀 351

18.12.1  習題 351

18.12.2  擴展閱讀 351

18.13  進階補充:方法、組織與生命周期 351

18.14  全書收官檢查與終章收束 352