這是《我嘗試將智能體記憶從哲學轉向技術》一文的後續。如果你還沒讀過那篇文章,簡而言之:我為人工智慧智能體建立了一個名為OrKa Brain的持久記憶系統,執行了 30 個基準測試任務,獲得了 63% 的成對勝率和 +0.10 的評分提升,並得出結論:「模型已經知道大腦正在回憶的大部分內容。」然後我收到了一些非常好的評論,這些評論讓我感到不安。接下來發生的事情是這樣的。
在第一次基準測試之後,我形成了一個感覺合理的解釋:記憶體系統運作正常,資料是正面的,混淆因素已被承認,更多的資料將澄清事實。
最後那句話,“更多的資料會澄清一切”,是工程師們不願承認自己可能犯錯時常說的話。我也這麼說過。然後我就去收集了更多資料。
250項任務。五個專業方向。總共500次執行(包括腦力測試和無腦測試)。採用獨立的評判模型,避免LLM(LLMs)給自己打分數。針對我在第一輪測試中發現的五個根本問題,進行了11次程式碼修改。
結果出來了。結果不但沒有澄清問題,反而讓事情變得更糟。
我不會假裝我只是盲目地重複了相同的實驗。在基準測試 v1 和 v2 之間,我確實做了一些實際工作。 第一篇文章的評論指出了幾個問題,我都一一作了回應:
問題 1:技能儲存的是 LLM 的逐字輸出,而不是抽像模式。
這是個大問題。當 Brain 從資料工程任務中學習一項技能時,它儲存的是具體的步驟:「使用 pandas read_csv 函數將 CSV 檔案載入到暫存表中,並進行錯誤處理。」這並非可遷移的知識,而是對模型已有知識的轉述。我重寫了抽象層( orka/brain/constants.py 、 brain.py和brain_agent.py ),以提取動詞-目標模式:「實現 [目標]」、「驗證 [元件]」、「追蹤 [目標]」。這樣做的目的是為了使抽像模式能夠更好地跨領域遷移。
問題 2:召回閾值為零。
min_score=0.0意味著任何模糊相關的技能都可能被回憶起來。我將其提高到 0.5,並在transfer_engine.py中加入了一個語義下限:如果嵌入相似度低於 0.1 且結構匹配度低於 0.6,則該候選技能將被完全拒絕。
問題 3:此模型在判斷自身的輸出。
v1 版本使用相同的 LLM 進行執行和評估。 v2 版本使用獨立的評判模型 ( qwen/qwen3-coder-30b ),並配有專用的評分標準和成對工作流程 YAML 檔案。執行和評判完全分離,使用不同的腳本、不同的模型和不同的執行。
問題 4:賽道多樣性。
v1 版本只有一條音軌。 v2 版本有五條音軌:
| 追蹤 | 重點 | 為什麼重要 |
|-------|-------|----------------|
| A | 跨域傳輸 | 資料工程技能對網路安全有幫助嗎? |
| B | 倫理推理 | 反模式辨識技能可以遷移嗎? |
| C | 路徑選擇 | 最難路徑,複雜的多路徑選擇 |
| D | 多步驟推理 | 程序模式是否有助於建立新的推理鏈? |
| E | 迭代改進 | 改進模式會累積嗎? |
每個賽道 50 個任務,總共 250 個任務。所有任務均可在基準資料集中找到。
問題 5:單次基線。
現在,無腦狀態的測試流程與無腦狀態完全一致,流程結構相同,智能體數量也相同,只是省略了大腦的回憶/學習步驟。這樣就避免了雙遍測驗帶來的分數虛高問題。基準工作流程: baseline_track_a.yml 、 baseline_track_b.yml等。
我還把流程拆分成了三個獨立的腳本: 執行、 評判和聚合,這樣你就可以獨立地重新執行任何階段。總共做了 11 處程式碼更改,全部已提交並測試通過。 3014 個單元測試全部通過。你可以在結果目錄中查看所有內容。
我對此感覺不錯。我已經回應了所有合理的批評。是時候重來一次了。
以下是250項任務的總體總結結果,比較了動腦和不動腦的情況:
| 維度 | 大腦 | 無腦 | 德爾塔 |
|-----------|-------|-----------|-------|
| 推理品質 | 9.51 | 9.52 | −0.01 |
| 結構完整性 | 9.87 | 9.83 | +0.04 |
| 分析深度 | 8.79 | 8.74 | +0.05 |
| 可操作性 | 9.67 | 9.64 | +0.03 |
| 領域適應性 | 9.85 | 9.82 | +0.03 |
| 置信度校準 | 9.38 | 9.39 | −0.01 |
|總分| 9.37 | 9.31 | +0.06 |
250 項任務的平均評分標準差為 +0.06。
作為參考,v1 在 30 個任務中提升了 0.10。因此,隨著資料量的增加,效果反而減少了,而不是增加。這不是我們想看到的。
| 問題 | 聰明人獲勝 | 笨蛋獲勝 | 平手 |
|----------|-----------|----------------|-----|
| 更強的推理 | 152 | 91 | 2 |
| 更完整 | 149 | 92 | 4 |
| 更值得信賴 | 151 | 92 | 2 |
|總分| 151 | 92 | 2 |
腦力獲勝率: 61.6%
問題就出在這裡。兩兩比較的評判標準顯示,大腦獲勝的機率為 62%。而標準評判標準則顯示,大腦僅比人類略勝一籌(+0.06),這在 9.3/10 的基準分下幾乎可以忽略不計。這兩個指標理應一致,但事實並非如此。
我以前見過這種模式。這是長度/位置偏好。大腦的反應往往更長,因為處理流程中涉及的環節更多,這意味著更多的上下文,也意味著更多的文字。成對評判者更傾向於較長的答案。評分標準並不考慮長度,它是獨立地對每個維度進行評分的。
故事到這裡就變得有趣了:
| 追蹤 | 重點 | 評分標準 Δ | 成對勝率 | 無腦基準 |
|-------|-------|----------|---------------|-------------------|
| A | 跨域轉移 | −0.02 | 60% | 9.33 |
| B | 倫理推理 | +0.00 | 52% | 9.54 |
| C | 路由決策 | +0.40 | 60% | 8.12 |
| D | 多步驟推理 | +0.08 | 60% | 9.49 |
| E | 迭代改進 | +0.06 | 76% | 9.61 |
C賽道格外突出。它是難度最高的賽道,即使是「無腦」模式也只有8.12分,比其他所有賽道都低了將近1分。而且,它是唯一一條「腦力」模式在評分標準上有所提升的賽道:六個維度都提升了0.40分。
E賽道的配對比較勝率最高(76%),但評分標準增益最小(+0.06)。這就是長度偏好特徵:成對比較的評判者偏愛大腦輸出的較長答案,但評分標準表明它們實際上並不更好。
B 類題目本質上就是拋硬幣。成對比較佔 52%,評分標準為 +0.00。大腦對倫理推理任務沒有任何幫助。
真正讓我崩潰的是,我深入分析了每個人的結果,想看看究竟有多少任務真正運用了他們回憶起的技能:
嘗試進行技能回憶的任務: 51 / 250 (20%)
實際運用所回憶技能的任務: 0 / 250
平均語意配對得分: ~0.02(接近零)
零。 250個任務中,沒有一個任務用到了回憶起的技能。模型讀取了技能,對其進行了評估,但每次都判定它沒有用處。而且,抽象技能和實際任務之間的語義相似性基本上是隨機雜訊。
我曾引以為傲的抽象層,也就是將「使用 pandas 將 CSV 檔案載入到暫存表中」轉換為「實現 [目標]」的那一層,最終生成的技能抽象化得空洞無物,只有兩個字的內容。嵌入模型無法辨識「實現 [目標]」與任何實際任務之間的關聯。執行模型也正確地認識到,「實現 [目標]」並沒有提供任何它不知道的資訊。
我曾經掌握的技能過於具體(只是對LLMs理論的字面解讀),後來又掌握了過於抽象(空洞的理論架構)的技能。真正可遷移的知識,也就是我苦苦尋找的平衡點,始終找不到。
說實話,我現在腦子裡一直在想些什麼。我開發 OrKa 已經一年多了。寫了四十篇部落格文章,一篇關於農業機器智慧閾值的研究論文,還有一個開源框架,讓我能夠用真實的 AI 執行來測試、實驗和探索我的想法。然而,我的核心論點——持久記憶能提升智能體的表現——卻始終無法在資料中得到驗證。
我曾考慮放棄整個 Brain 系統,把 OrKa 簡化成一個編排框架。這樣比較簡單,比較容易解釋,也不會出現尷尬的基準測試結果。
但我隨後又看了看C軌。
**C賽道**是唯一一條讓「無腦模型」感到吃力的賽道。它的得分是8.12,不錯,但還不夠出色。這條賽道的任務涉及複雜的路徑選擇,模型必須考慮多條路徑及其優缺點。這是唯一一條模型真正需要幫助的賽道。
而且,這是大腦能夠提供有效幫助的唯一方法。 +0.40 的評分標準變化並非噪音。在 50 項任務和六個評分維度中,這是一個持續且可衡量的進步。
模式很簡單:當模型需要幫助時,大腦會提供幫助;當模型不需要幫助時,大腦就不會提供幫助。
現在看來這似乎顯而易見。但這說明這個論點本身並沒有錯,只是檢驗它的條件不對。你不會讓站在陸地上的人穿上救生衣,然後測量他們是否更乾爽來評估它的性能吧?
故事從這裡開始轉變。因為我不再問“記憶有用嗎?”,而是開始問“記憶究竟是什麼?”
想想你是如何記住如何開車的。當你接近一個陌生的十字路口時,你的大腦會啟動什麼功能?
這並非單一因素造成的。並非「轉動方向盤,踩下油門」。那是操作步驟,沒錯,它確實存在。但它與其他因素緊密相連:
你有沒有這樣的經驗:因為沒看橫向來車就以為綠燈就安全,差點被側邊車輛撞到?這就是情景記憶,一個帶有情感分量的具體事件。
「路權並不等於安全權」 ,這是語意記憶,是你學到的一個普遍常識,可能是從駕駛教練那裡學來的,也可能是你自己的經驗之談。
「在進入十字路口前查看後視鏡可以防止盲點碰撞,因為轉彎會縮小你的視野」 ,這是因果推理。你知道為什麼順序很重要,而不僅僅是知道順序很重要。
當你遇到交集時,所有這些資訊都會同時被啟動。流程告訴你該怎麼做。事件告訴你上次發生了什麼事。語意事實告訴你一個原則。因果關係告訴你為什麼。正是這種組合,這種聯繫,使得記憶有用。任何一個單獨的組成部分都作用甚微。
現在來看看OrKa Brain目前儲存的「技能」是什麼:
implement [target]
trace [target]
就這些。沒有事件,沒有語意語境,沒有因果推理,只有兩個抽象的動作動詞。難怪模型會忽略它。這就像是遞給司機一張寫著「控制[車輛]方向」的紙條,然後指望它能在十字路口幫忙一樣。
我深入研究了認知科學領域的相關文獻。我發現,神經科學家們幾十年來一直在爭論這個問題。他們稱之為「綁定問題」 ,即大腦如何將儲存在不同系統中的獨立記憶痕跡整合為一個統一的體驗?
海馬體並沒有儲存記憶本身,它儲存的是索引,也就是連結運動皮質中的程序性記憶、杏仁核中的情緒痕跡、頂葉皮質中的空間背景以及顳葉中的語義事實的紐帶。當你回想起其中一項記憶時,你就能回想起所有這些記憶,因為它們是相互關聯的。
我曾將海馬體和運動皮質建構成兩個互不相干的獨立系統。
以下是OrKa目前實際存在的內容:
技能體系(已全面執行,用於基準測試):
摘要程序步驟
前提條件和後置條件
轉會歷史與信心評分
結構/語義匹配用於回憶
Episode 系統(已完全建置、測試,但從未用於任何基準測試):
具體任務投入和成果
哪些方法奏效了,哪些方法失敗了
故障根本原因分析
可藉鏡的經驗教訓
資源指標(令牌、延遲)
相關劇集連結
這兩個系統都已達到生產就緒狀態,測試覆蓋率也全部達到要求,並且都已整合到 Brain 類別中。我編寫了record_episode() 、 recall_episodes() 、 EpisodeStore和EpisodeRecall等所有函數,並實現了語義搜尋、記憶策略和四維評分等功能。
然後我就再也沒把它們連結起來。
技能(Skill)沒有episode_id字段。劇集(Episode)也沒有skill_id字段。 brain.learnbrain.learn()會創造一個技能,但不會創造一個集數。brain.recall brain.recall()回傳技能,但不會回傳集數。基準測試工作流程會執行 brain\_learn 和 brain\_recall,但不會執行 brain\_record\_episode 或 brain\_recall\_episodes。
兩個完整的記憶體系統,位於同一個程式碼庫中,彼此之間沒有任何資訊共享。
看到這個,我覺得自己很蠢。但我同時也意識到:架構已經完成了80%。那些最難的部分,像是嵌入式儲存、語意搜尋、衰減策略、評分系統等等,都已經搞定了。缺少的不是一個新的系統,而是現有系統之間的連結。
這就是我現在稱之為「記憶體捆綁」的概念:
┌─────────────────────────────────────────┐
│ MEMORY BUNDLE │
│ │
│ ┌───────────┐ ┌──────────────────┐ │
│ │ Procedure │ │ Episodes (1..N) │ │
│ │ (steps) │──│ what worked │ │
│ │ │ │ what failed │ │
│ └───────────┘ │ lessons │ │
│ │ "X+Z → Y" │ │
│ ┌───────────┐ └──────────────────┘ │
│ │ Semantic │ │
│ │ (domain │ ┌──────────────────┐ │
│ │ facts) │ │ Causal Links │ │
│ │ │ │ "A because B" │ │
│ └───────────┘ └──────────────────┘ │
│ │
│ transfer_score = f(all_components) │
└─────────────────────────────────────────┘
當系統從一次執行中學習時,它會建立一個技能和一個事件,並透過 ID 將它們關聯起來。技能儲存抽象流程。事件儲存實際發生的情況、具體結果、哪些有效、哪些無效,以及至關重要的經驗教訓:“在去重之前執行驗證可以發現 30% 的重複記錄,因此請務必先進行驗證。”
系統呼叫時,會傳回包含所有相關片段的技能。模型的提示不是“實現[目標]”,而是:
以下是一個抽象過程:實現 [目標] → 驗證 [元件] → 追蹤 [目標]。
>
這項技能之前已被使用3次:
資料工程(ETL) :去重前的驗證發現了 30% 的髒記錄。經驗教訓:務必在進行任何去重步驟之前進行驗證。
API 整合:目標實現正常,但追蹤遺漏了非同步回呼。教訓:追蹤需要考慮非同步執行路徑。
日誌分析:模式辨識效果良好。在分析前過濾掉雜訊條目,可將誤報率降低 40%。
這是模型真正可以利用的記憶。它既包含抽像模式(可遷移性),也包含具體證據(基礎性)。模型可以根據實際結果,而不僅僅是結構相似性,來判斷模式是否適用於此處。
遷移評分機制也隨之改變。一項技能如果經過五集成功案例的驗證,且案例內容清晰明了,其得分應高於一項沒有案例的技能。個案品質也成為遷移評分的考量因素之一。
回饋機制會同時更新技能的自信度,並為該應用程式錄製新的訓練片段。訓練片段鏈會隨著時間的推移而不斷增長,未來的回憶也會獲得更豐富的上下文資訊。
我的研究論文認為,只有透過遞歸的環境控制循環──預測、行動、觀察、修正、複合──智慧才能達到文明的規模。農業是人類首次大規模實現此一過程。農業的門檻。
目前的大腦系統無法跨越那個門檻。它能投射(學習技能),能行動(回憶技能),但無法真正觀察或修正。技能本身也無法從自身的應用中學習。它只是累積抽象的模式,與實際結果毫無關聯。
記憶包改變了這一點。每一集都是觀察。每一課都是一次複習。每一次包含這些課程的未來回憶都會不斷累積。循環由此形成:
學習:執行任務 → 建立技能 + 記錄過程(包括成功/失敗之處)
回顧:找出配對的技能 → 將其相關片段作為證據
應用:此模型運用了流程和具體經驗教訓。
回饋:為此應用程式錄製新一集 → 更新技能信心
複合型回憶:下一次回憶內容更豐富,包含更多片段、更多經驗教訓和更多證據。
這就是遞歸循環。這就是農業的門檻。而它的架構已經存在,只需要綁定即可。
這也解釋了為什麼只有C軌道出現了改進。 C軌道的任務是路徑選擇,這是一項複雜的多路徑選擇任務,模型必須權衡各種利弊。而這類任務恰恰最需要情境證據的幫助。
當有人說“上次我們嘗試用路徑 A 解決類似的路由問題時,由於 X 的原因失敗了,而路徑 B 成功了,因為 Y 的原因”,這確實是全新的訊息。模型無法從其權重推導出這些資訊。它與系統、運作和結果都有關。
即使沒有情境模擬,目前的大腦也能幫助 Track C 完成任務,因為任務難度足夠高,任何額外的背景訊息,即使是模糊的抽象技能,都能提供有用的輔助。但想像一下,如果 Track C 配備了記憶束,模型就能同時獲得抽像模式和先前路由決策的具體結果。
A、B、D 和 E 這幾條賽道的成績沒有提升,是因為模型在這些賽道上的得分已經超過 9.3 分(滿分 10 分)。它不需要任何幫助。無論記憶力如何,無論是程序性記憶、情景記憶或其他類型的記憶,都無法將 9.5 分的成績提升到 10 分。這些任務的難度不足以需要累積大量的知識。
這並非記憶體系統的故障,而是一種邊界條件。當任務超出單次處理能力時,記憶體就發揮作用;而當模型本身無需記憶體也能近乎完美時,記憶體就無濟於事了。
我想謹慎行事,因為我以前就因為過早拿出證據而吃過虧。
我並非斷言記憶包一定會帶來顯著的改進。我的意思是,目前的系統儲存的記憶過於貧乏,難以發揮作用,而我現在明白了更豐富的記憶應該是什麼樣子。
我並非聲稱天花板效應是唯一的問題。成對比較結果與預期結果之間的差異(62% vs +0.06)表明,位置/長度偏差仍然會影響成對比較的結果。這種混淆因素與記憶體架構無關。
我並非聲稱這是一個新觀點。認知科學家們幾十年來一直在研究記憶綁定。或許新穎之處在於將其應用於智能體記憶系統,而這些系統通常預設一種記憶方式(通常是 RAG 式的文件檢索)就足夠了。
我並非否認社群的回饋影響了我的思考。 TechPulse Lab 指出情景記憶和機構記憶比程序性記憶更重要,這正是我最終發現的差距。 Nova Elvaris 指出技能只會成長而不會衰退,這正是因為沒有失敗的經驗。 Kuro 說記憶維護比儲存更重要,這關乎的是記憶的綁定質量,而非儲存數量。
直到這些數字迫使我更仔細地思考,我才明白他們告訴我的是什麼。
所需的程式碼更改非常少。 Episode 系統已經建置完成, episode.py 、 episode_store.py和episode_recall.py都已包含測試,可以用於生產環境。需要做的是:
綁定:將episode_ids[]加入 Skill,將skill_id加入 Episode。當brain.learn()執行時,它會建立這兩個物件並將它們關聯起來。
統一回憶:當brain.recall()找到匹配的技能時,它會自動獲得相關的場景。提示範本包含抽象流程和具體課程。
遷移評分:單集品質成為遷移評分的組成部分。單集表現優異的技能得分較高。
回饋循環: brain.feedback()會記錄當前應用程式的新一集,因此該技能的證據基礎會隨著時間的推移而增長。
然後重新執行基準測試。特別是執行難度為 C 的任務,因為模型在這些任務中確實需要一些幫助。
我不會保證這次的資料會有所不同。我以前也犯過錯,而且是兩次,都是以我自己設定的標準來衡量的,這些標準都已公開,人盡皆知。但我現在明白了一個以前不懂的道理:沒有經驗的記憶只是一張紙條,而有了經驗的記憶則是一種技能。
第一篇文章中提到的管道比喻仍然適用。但我當時只安裝了一根管道,而實際系統至少需要四根管道,而且所有管道都要匯入同一個水龍頭。
所有基準測試資料、腳本和結果均可在OrKa 程式碼庫中公開取得。完整的結果文件包含每個單獨的任務回應、評審評分和成對比較。如果您想重新執行分析,請執行: python aggregate_benchmark.py --judge-tag local 。
如果你也研究過智能體記憶系統,並且遇到類似的難題,或是找到了突破口,我真心想聽聽你的經驗。第一篇文章的評論比我讀過的大多數相關論文都更有價值。
這是關於建立OrKa (一個開源的、以 YAML 為先的代理編排框架)的系列文章的一部分。前幾篇文章: 第一部分:底層架構而非哲學。