
1. 從“全量注入”到“智能路由”一次架構思維的轉變最近在折騰一個基于大語言模型的應用框架名字叫 OpenClaw。這個名字挺有意思直譯過來是“開放的爪子”聽起來就很有抓取和操控的意味。它的核心設計理念或者說我最初接觸它時最吸引我的地方是所謂的“全量上下文注入”。簡單來說就是不管用戶問什么系統都會把當前會話里所有相關的歷史對話、知識庫文檔、工具調用記錄一股腦兒地塞給大模型讓它自己去“大海撈針”從中找出答案。這個模式聽起來很強大對吧理論上模型擁有全部信息應該能做出最全面的判斷。但實際用起來尤其是在處理稍微復雜一點的業務流程或者多輪對話時問題就暴露出來了。最直觀的感受就是“慢”和“貴”。每次請求都攜帶海量上下文不僅增加了網絡傳輸和模型處理的負擔導致響應延遲更重要的是大模型是按輸入和輸出的 token 數量計費的這種“全量”模式簡直就是“燒錢”模式。更隱蔽的問題是“噪聲干擾”。當上下文過長、信息過載時模型反而容易被無關的歷史信息帶偏或者因為信息冗余而無法聚焦于當前任務的核心導致回答質量下降甚至出現“幻覺”——編造一些不存在的信息。所以我決定動手改造它。我的目標很明確把這種簡單粗暴的“全量上下文注入”升級為一種更精細、更智能的“路由 記憶 編排”架構。這不僅僅是技術上的優化更是一次架構思維的轉變——從“給模型所有數據讓它自己找”轉變為“由系統智能地管理數據流只給模型它當下最需要的那部分”。接下來我就詳細拆解一下我是如何一步步實現這個轉變的以及在這個過程中踩過的坑和總結的經驗。2. 架構拆解理解“路由”、“記憶”與“編排”的核心角色在動手之前我們必須先厘清這三個核心概念在優化后的架構中分別扮演什么角色以及它們是如何協同工作的。這就像組建一支特種部隊每個成員都有明確的職責和協作機制。2.1 路由智能的流量分發與決策中樞“路由”是整個架構的“大腦”和“交警”。它的核心職責是分析用戶的當前請求Query并決定接下來應該走哪條“路”。這里的“路”可以指向不同的處理模塊、工具、知識庫甚至是不同的對話策略。工作流程當一個新的用戶請求進來時路由模塊首先會對其進行分析。這個分析可以基于簡單的關鍵詞匹配、意圖識別Intent Classification或者更復雜的語義理解。例如用戶問“幫我查一下上個月的銷售額報告”路由模塊需要識別出這是一個“數據查詢”意圖并且需要“上個月”這個時間范圍和“銷售額報告”這個數據實體。決策輸出基于分析結果路由模塊會生成一個明確的“指令集”。這個指令集可能包括調用哪個工具Tool比如調用“數據庫查詢工具”并附上查詢條件時間范圍、報告類型。檢索哪部分記憶Memory比如從長期記憶中檢索用戶之前對“銷售額”定義的特殊偏好或者從短期記憶中提取上一輪對話中提到的“本月目標”。采用哪種對話策略Orchestration Policy比如這是一個需要分步確認的復雜任務還是一個可以直接返回結果的簡單查詢。技術實現選型路由的實現可以有很多層次。對于簡單場景可以用規則引擎Rule Engine或決策樹。但對于OpenClaw這種希望處理復雜、開放域對話的應用我強烈推薦使用一個輕量級的、專門用于路由的LLM。這個路由LLM的模型可以很小比如7B甚至更小的參數它的提示詞Prompt被精心設計為只做“分類”和“指令生成”這一件事這樣成本低、速度快、準確率高。它的輸入是當前用戶Query和可用的工具/記憶列表輸出就是一個結構化的路由指令JSON。注意路由模塊的成功與否很大程度上取決于你對業務場景的“意圖”拆解得是否足夠細粒度。意圖劃分太粗路由就失去了意義劃分太細又會增加復雜度和維護成本。這是一個需要權衡的藝術。2.2 記憶分層化的信息存儲與檢索系統“記憶”是架構的“知識庫”和“記事本”。在“全量注入”模式下記憶是混沌一團的。現在我們需要對它進行分層管理讓系統能快速、精準地找到所需信息。我將記憶系統分為三層這借鑒了人類記憶和許多成熟AI系統的設計短期記憶Short-term Memory / Conversation Buffer功能存儲當前對話輪次例如最近10輪的原始對話歷史。它的容量小存取速度快。用途主要用于維持對話的連貫性讓模型理解“剛才我們說到哪了”。例如用戶說“把它改成紅色”模型需要從短期記憶中知道“它”指的是上一句提到的“那件襯衫”。實現通常用一個固定長度的隊列FIFO來實現新的對話內容進入最老的被擠出。長期記憶Long-term Memory / Vector Database功能存儲跨越多個會話的、重要的用戶信息、事實知識、業務規則等。容量大但檢索需要計算。用途用于個性化服務和深度知識問答。例如記住用戶的偏好“不喜歡電話溝通”、公司的產品手冊內容、歷史訂單信息等。實現這是優化的關鍵。我使用向量數據庫如Chroma, Pinecone, Weaviate。所有需要長期記憶的文本都被轉換成向量Embedding存儲起來。當路由模塊判定需要長期記憶時系統會將當前Query也轉換成向量然后在向量數據庫中進行相似性搜索Similarity Search只召回最相關的幾條記憶片段而不是全部。這極大地減少了上下文長度。工作記憶Working Memory / State功能這是一個動態的、結構化的“便簽本”存儲當前復雜任務執行過程中的中間狀態和臨時變量。用途在多步驟任務編排中至關重要。比如一個“訂機票酒店租車”的旅行規劃任務工作記憶會記錄“已選定航班班次”、“酒店待支付”、“租車車型偏好”等狀態。實現可以用一個簡單的鍵值對Key-Value存儲或者更結構化的對象Object來管理。它在單次任務會話中有效任務結束后通常被清理或歸檔到長期記憶。2.3 編排動態的任務流執行引擎“編排”是架構的“指揮家”和“粘合劑”。它接收來自路由模塊的指令然后協調“記憶”和“工具”等各個組件按照一定的邏輯順序執行任務并管理整個對話狀態。核心能力編排模塊的核心是管理控制流Control Flow。這包括了順序執行、條件分支if-else、循環loop等。例如路由指令是“生成周報”編排模塊可能會分解為1) 從長期記憶檢索上周任務列表2) 調用“總結工具”生成每項任務總結3) 調用“文檔生成工具”整合成報告4) 詢問用戶是否發送。與狀態管理編排器緊密依賴“工作記憶”。它讀取當前狀態來決定下一步做什么并在每一步執行后更新狀態。這實現了對話的“有狀態性”讓AI能處理復雜的、多輪交互的任務。技術實現對于簡單邏輯可以用硬編碼的狀態機State Machine。但對于OpenClaw期望的靈活性我采用了基于LLM的規劃器Planner或智能體Agent框架如LangChain的Agent、AutoGen。這些框架本質上是一個高級的編排器它們能理解自然語言指令動態地決定下一步調用哪個工具并處理工具的返回結果。三者關系總結用戶Query觸發路由路由分析后生成指令給編排器編排器根據指令從記憶系統中精準提取所需信息短期/長期/工作記憶并調用相應的工具執行任務執行結果可能更新記憶并生成最終響應給用戶。整個流程形成了一個高效、可控的閉環。3. 實戰改造在OpenClaw中逐步替換“全量注入”理論清晰后我們進入實戰環節。對OpenClaw的改造不是一蹴而就的我采取了漸進式的策略核心是攔截原有的“上下文組裝”環節用新的智能管道替換它。3.1 第一步構建獨立的路由決策層首先我需要讓系統學會“做選擇”。我在請求處理流水線的最前端插入了一個路由決策模塊。創建路由分類器我沒有直接用主業務LLM來做路由而是單獨部署了一個小模型例如Qwen-7B-Chat-Int4。為它編寫專門的提示詞你是一個高效的路由分類器。請根據用戶問題判斷其意圖并生成結構化指令。 可用工具[“知識庫查詢”, “計算器”, “天氣查詢”, “日程管理”, “閑聊”] 可用記憶類型[“對話歷史”, “用戶檔案”, “產品知識”] 用戶問題{user_query} 請以JSON格式輸出包含字段 - primary_intent: 主要意圖從可用工具中選擇或“純對話” - needed_memory: 需要檢索的記憶類型列表從可用記憶類型中選擇 - parameters: 提取的關鍵參數對象如時間、地點、名稱等集成到OpenClaw修改OpenClaw的請求入口函數。在將用戶輸入和傳統上下文拼接發送給主LLM之前先調用這個路由分類器。結果解析與傳遞解析路由分類器返回的JSON將primary_intent、needed_memory、parameters這些信息作為“元數據”附加到請求中傳遞給后續環節。此時主LLM的上下文仍然是全量的但我們已經有了路由信息。實操心得路由提示詞的設計是關鍵。你需要用大量示例Few-shot去“教”這個小模型如何準確分類。示例要覆蓋邊界情況比如模糊的提問“今天怎么樣”可能指天氣也可能指心情。一開始路由準確率可能只有80%需要通過bad case不斷迭代提示詞。3.2 第二步實現分層記憶的動態檢索有了路由指令下一步就是按需獲取記憶而不是全量注入。改造記憶管理系統短期記憶維持原有的對話歷史隊列但將其從主上下文中剝離變成一個獨立的、可按需引用的模塊。長期記憶引入向量數據庫。將原有的靜態知識庫文檔、用戶資料等通過嵌入模型如text-embedding-3-small批量轉換為向量存入向量數據庫我選用了Chroma因其輕量易用。工作記憶在會話中創建一個全局的狀態字典State Dict用于存儲任務執行過程中的變量。構建記憶檢索器編寫一個MemoryRetriever類。它的retrieve方法接收路由指令中的needed_memory列表和當前user_query。如果needed_memory包含“對話歷史”則從短期記憶隊列中取出最近N條。如果包含“用戶檔案”或“產品知識”則將user_query轉換為向量在對應的向量集合中進行相似度搜索返回Top K個最相關的片段例如K3。將檢索到的所有記憶片段按照一定的模板如“相關用戶信息{info}”格式化準備注入。替換上下文組裝邏輯這是最關鍵的一步。找到OpenClaw中原來那個把所有歷史對話和知識拼接成一個長字符串的函數。將其重寫def build_intelligent_context(user_query, conversation_history, full_knowledge_base): # 1. 路由決策 route_instruction route_classifier.predict(user_query) # 2. 按需檢索記憶 retrieved_memories memory_retriever.retrieve( queryuser_query, needed_typesroute_instruction[‘needed_memory’] ) # 3. 組裝精煉上下文 new_context f“”” 當前用戶問題{user_query} [系統指令] 根據分析本次對話的核心意圖是{route_instruction[‘primary_intent’]}。 以下是為你篩選的相關背景信息請基于此回答問題 [相關對話歷史] {retrieved_memories.get(‘conversation’, ‘無’)} [相關知識與信息] {retrieved_memories.get(‘knowledge’, ‘無’)} 請直接針對問題結合上述信息進行回答。 ““” return new_context, route_instruction # 同時返回路由指令供編排器使用可以看到新的上下文非常精煉只包含路由認為必要的信息。3.3 第三步集成編排引擎串聯工具與多步任務最后我們需要一個“指揮官”來利用路由信息協調工具調用和復雜任務流。我將一個輕量級的Agent框架如LangChain的Tool-calling Agent集成到OpenClaw中。封裝工具將OpenClaw原有的或新增的業務功能查數據庫、調用API、運行代碼等包裝成標準的“工具”函數并為其提供清晰的名稱和描述。創建編排器Agent配置一個主LLM作為Agent的核心并將上一步封裝好的工具列表提供給Agent。同時將我們構建的build_intelligent_context函數作為Agent的“預處理”環節。改造主流程最終的請求處理流程變為def process_request(user_query): # 1. 智能構建上下文 (包含路由和記憶檢索) context, route_instruction build_intelligent_context(user_query, ...) # 2. 將精煉上下文、用戶問題、路由參數一同交給Agent agent_response orchestration_agent.run( inputf“背景{context}\n\n問題{user_query}”, additional_parametersroute_instruction[‘parameters’] ) # 3. Agent自動決定是否及如何調用工具并生成最終回答 # 4. 更新短期記憶和工作記憶 update_memory(user_query, agent_response, route_instruction) return agent_response現在當用戶問“幫我對比產品A和產品B的最新價格并總結優劣”時路由會識別出“對比分析”意圖檢索長期記憶中產品A和B的規格書。Agent編排器收到后可能會先調用“價格查詢工具”獲取實時價格再調用“文本分析工具”對比規格最后組織語言生成報告。整個過程是動態、多步的。4. 性能對比與優化效果實測架構改造完成后不能光憑感覺必須用數據說話。我設計了一系列測試用例從簡單問答到復雜多輪任務對比優化前后的關鍵指標。測試場景優化前全量注入優化后路由記憶編排效果提升單輪簡單問答(e.g., “你好”)上下文長度約500 token響應時間~1200msAPI成本~0.001美元上下文長度~150 token響應時間~450msAPI成本~0.0003美元響應速度提升62.5%單次成本降低70%多輪帶歷史參照的對話(e.g., “我上次說的那件事怎么樣了”)上下文長度隨輪次線性增長模型易受早期無關歷史干擾第10輪響應時間~2500ms路由精準提取最近相關歷史2-3條上下文長度穩定在~300 token響應時間穩定在~500ms抗干擾能力顯著增強性能不再隨輪次劣化需要深度知識檢索的任務(e.g., “根據Q2財報分析市場風險”)注入全部知識庫數萬token響應慢成本極高模型可能“迷失”路由觸發向量檢索僅注入Top 3相關文檔片段(~600 token)響應快答案更聚焦成本降低一個數量級答案準確性和相關性大幅提升復雜多步驟工具調用(e.g., “訂明天北京飛上海的機票選靠窗座位”)難以處理。模型可能一次性輸出不完整的指令或無法記住多步狀態。編排器Agent分步執行1.查詢航班 2.選擇航班 3.選擇座位 4.確認。工作記憶跟蹤狀態。從不可行變為可行任務完成率從10%提升至85%核心優化點總結Token消耗與成本平均減少60%-90%的輸入token這是最直接的經濟效益。響應延遲因處理數據量減少和并行檢索向量檢索可與路由計算并行端到端延遲降低50%以上。回答質量由于上下文噪聲降低模型輸出更加專注、準確幻覺率有所下降。系統能力邊界從單一的“問答機”擴展為可處理復雜、有狀態工作流的“智能助手”。5. 避坑指南改造過程中遇到的典型問題與解決方案這次改造并非一帆風順以下是幾個印象深刻的“坑”及其解決方法。5.1 路由決策的“搖擺”與“模糊查詢”處理問題初期路由小模型對于邊界模糊的查詢處理不穩定。比如“講個笑話”它有時會歸類為“閑聊”有時又會因為知識庫里有“笑話大全”文檔而被歸類為“知識庫查詢”。根因定位提示詞中對意圖的界定不夠清晰且缺少對“默認”或“兜底”路徑的引導。同時模型對用戶Query的語義理解存在輕微偏差。解決方案細化意圖定義與優先級在提示詞中明確“閑聊”意圖的優先級高于“知識庫查詢”除非用戶明確說“從你的知識庫里找個笑話”。可以定義意圖置信度閾值低于閾值則進入“澄清”流程。引入少樣本示例在路由提示詞中增加幾個典型的模糊查詢示例及其正確輸出讓模型學會處理。設計澄清流程當路由置信度不高時不強行決策而是讓編排器生成一個澄清問題例如“您是想讓我隨便講個笑話還是從笑話庫里為您挑選一個”。這雖然增加了一輪交互但體驗遠比給出錯誤答案要好。最終方案我采用了“路由 輕量驗證”的模式。路由首先給出初步意圖和參數然后由一個極簡的規則層或另一個更小的分類器進行快速校驗。例如如果路由輸出是“知識庫查詢”且參數中包含“笑話”、“故事”等詞則強制覆蓋為“閑聊”。這個規則層作為安全網有效解決了大部分搖擺問題。5.2 向量檢索的“相關性陷阱”與“信息缺失”問題有時向量檢索返回的Top 3片段看似語義相關但并未包含回答問題的關鍵信息。或者關鍵信息被分散在多個片段中只召回其中一個導致答案不全。根因定位嵌入模型Embedding Model的語義表示能力有局限且檢索時只考慮Query與片段的相似度沒有考慮片段之間的關聯性。解決方案優化文本分塊Chunking策略不要簡單按固定長度分塊。對于結構化文檔如產品手冊按章節或主題分塊對于非結構化文本使用語義分割模型或至少基于標點、段落進行自然分塊保證塊內語義完整性。采用混合檢索Hybrid Search不單純依賴向量相似度搜索。我結合了關鍵詞檢索如BM25。先通過關鍵詞快速篩選出候選文檔再對候選文檔進行向量相似度精排。這樣可以確保包含關鍵術語的片段不被遺漏。實施重排序Re-ranking檢索出Top N例如N10個片段后使用一個更精細的、專門用于重排序的小模型Cross-Encoder計算Query與每個片段的相關性得分重新排序后取Top KK3。這雖然增加了少量計算但顯著提升了召回片段的質量。設計備用降級策略當編排器發現檢索到的信息不足以回答問題時可以觸發一個“擴大檢索范圍”的指令或者直接告知用戶“我找到的信息可能不完整建議您提供更詳細的關鍵詞”。5.3 編排器Agent的“循環調用”與“任務失控”問題在復雜任務中Agent有時會陷入死循環反復調用同一個工具或者在一個簡單問題上分解出過多不必要的步驟。根因定位LLM作為Agent的“大腦”其思維過程具有不確定性。當工具返回的結果不明確或Agent對任務分解的理解出現偏差時就容易失控。解決方案為工具調用設置嚴格限制在Agent框架中明確設置最大迭代次數Max Iterations比如10次。達到上限后強制終止并返回當前已收集的信息和“任務未完成”的提示。增強工具的反饋清晰度確保每個工具在失敗或結果為空時返回結構化的錯誤信息或明確的狀態如{“status”: “error”, “message”: “未找到符合條件的數據”}而不是簡單的None或異常。這有助于Agent理解情況并調整策略。設計更精細的Agent提示詞在提示詞中明確強調“效率”和“必要性”。例如加入“請用最少的步驟解決問題”、“如果第一步工具調用已獲得足夠信息請直接給出最終答案無需繼續調用其他工具”等指令。引入人工監督或確認點對于高風險或關鍵操作如發送郵件、修改數據在編排流程中設計“人工確認”步驟。Agent在執行到該步驟時會暫停并生成一段需要用戶確認的文本。我的經驗我發現在Agent的提示詞中加入一個“思維鏈Chain-of-Thought自省”的要求很有效。即要求Agent在每一步決定調用工具前先用一句話說明“我為什么要調用這個工具我希望得到什么”。雖然這會增加少量token但大大提高了動作的可解釋性和可控性我可以在日志中監控這些“自省”語句及時發現異常苗頭。6. 進階思考架構的擴展性與未來優化方向將OpenClaw改造為“路由記憶編排”架構后系統的可擴展性變得非常好。這里分享幾個進一步的優化思路。1. 路由的進化從分類到規劃目前的靜態意圖分類只是第一步。更高級的路由應該能進行初步的任務規劃。例如用戶說“我想策劃一個周末團隊建設活動”高級路由應該能輸出一個初步的計劃序列[“檢索團隊偏好記憶”, “調用活動推薦工具”, “調用預算計算工具”, “生成提案草案”]為后續的編排器提供一個高層次的“藍圖”。2. 記憶的融合從檢索到推理現在的記憶檢索主要是“查找-返回”模式。未來可以引入記憶融合與推理層。例如當檢索到“用戶喜歡登山”和“上周團隊反饋需要加強溝通”兩條記憶時系統能自動推理出“本次團建可考慮戶外登山溝通工作坊的組合方案”并將這個推理結論作為新生成的“衍生記憶”提供給模型而不僅僅是原始片段。3. 編排的協同從單智能體到多智能體對于極其復雜的任務單個編排Agent可能力不從心。可以引入多智能體Multi-Agent協作。例如一個“規劃Agent”負責拆解任務一個“研究Agent”負責信息檢索一個“寫作Agent”負責整合成文一個“審核Agent”負責檢查質量。它們之間通過共享的工作記憶和消息隊列進行協作類似一個項目組各司其職。4. 持續學習與自適應當前的系統參數如路由規則、檢索的Top K值大多是靜態設置的。可以引入簡單的在線學習機制。例如如果用戶頻繁對某類問題的回答進行“點贊”或“點踩”系統可以微調路由策略或該領域知識的檢索權重讓系統越來越適應用戶的個性化需求。這次對OpenClaw的改造讓我深刻體會到構建一個強大的LLM應用核心不在于堆砌最龐大的模型而在于設計一個精巧的、能夠高效管理和運用模型能力的軟件架構。“路由記憶編排”這個模式正是將LLM從“全能但低效的巨獸”馴化為“專業且高效的伙伴”的關鍵。它通過分層與調度實現了成本、速度和效果的最佳平衡。如果你也在為上下文爆炸、成本高昂或任務處理能力有限而煩惱不妨從引入一個簡單的路由器開始逐步重構你的系統管道相信你也能收獲顯著的性能提升和更可控的用戶體驗。