OpenSoul MCP 教學:30 秒讓 Claude Code 擁有記憶與人格的進化型助理
上次把OpenSoul寫出來後幾個星期,看到我朋友在把Claude Code改成他的陪伴助理
—我就想說,欸我也可以把OpenSoul這樣改阿?讓Claude Code取代OpenClaw不是更香嗎?
而且Claude Code也更方便使用。
總之我花了幾天把 MCP 整合接上,現在終於可以說——用 Claude Code 的人,現在可以 30 秒內啟動 OpenSoul,然後它就會自動融入你每次的對話。不需要手動呼叫工具、不需要複雜的設定、更不需要理解什麼是 REST API。
總而言之,這次的改動就是把OpenSoul 打包成 Claude 的記憶資料庫和自我迭代系統。
https://github.com/samttoo22-MewCat/OpenSoul
OpenSoul 和 Claude Code 的結合分三個層次,以下逐個說明。
背景系統(都還在)
之前版本有的功能,新版本全都留著:
夢境引擎 —— OpenSoul 會在你閒置時自動「做夢」(整理記憶、提取概念、修剪圖譜)。這套機制沒變,還是自動運行。
省思系統 —— 每隔一段時間,OpenSoul 會自動反思今天的對話(「我今天為什麼生氣?」「我學到了什麼?」),並寫入 soul_notes。
潛意識 —— Procedural Memory 層的自動最佳化。OpenSoul 在做夢時會從情節記憶中提取「行為模式」,儲存為條件反射。
虛擬神經化學 —— 多巴胺 / 血清素的持久化狀態,會隨著對話動態調整,並影響記憶檢索和回應風格。
這些不是新功能,而是 OpenSoul 的核心。MCP 整合只是讓它們變得更容易使用。
如果你想看這些背景系統的原理請看上一篇:
Layer 1:Hook 系統 —— 自動注入人格和記憶
第一層是背景層。每當你在 Claude Code 裡輸入訊息,有一個叫 inject_context 的 hook 會在幕後執行:
讀取你的 SOUL.md(你的 OpenSoul 人格檔案)、你的Claude Code 原有的全域 CLAUDE.md以及你的Claude Desktop以前生成過的automemory
(對,不只是Claude終端,Claude Desktop 的記憶也會放進來)基於你的輸入,向量化後並搜尋
在 FalkorDB 的圖譜中搜尋相關記憶(EcphoryRAG)
把人格 + 觸發的記憶當作「背景資訊」注入到 Claude 的 system prompt
你:「幫我重構這個 Python 模組」
Hook 在背景執行:
→ 讀取 SOUL.md:「你傾向於函式式編程,喜歡類型提示」
→ 搜尋相關記憶:「上次你吐槽了某個物件導向的設計...」
→ 注入 Claude 的 context
Claude 回應時:
→ 自動引入你的風格
→ 避免重複犯過的錯誤
→ 記得你討厭什麼、喜歡什麼
原理詳解:
inject_context.py 做的事很簡單但很深。
它首先讀取你的人格檔案,包含名字、神經化學狀態、價值觀等,然後把你新輸入的訊息向量化。
接下來是關鍵部分——EcphoryRAG 檢索。這不是簡單的「找相似的句子」,而是「聯想」。比如你說「Python」,系統不只會找包含「Python」的句子,還會跳轉到「上次你用 Python 時踩過的坑」、「你對 Python 設計哲學的看法」、「之前和你討論過的 Python 效能問題」等等。
這個聯想過程會受到你的神經化學狀態影響。血清素高的時候,檢索廣度增加,容易進行廣泛聯想。多巴胺高的時候,AI 更願意探索新的認知路徑。系統會取出最相關的五個情節、五個概念、五個程序。
最後,所有這些信息——你的人格特徵、當前的神經化學狀態、觸發的相關記憶、已經學會的行為模式——都被編織成一個「背景故事」,注入到 Claude 的 system prompt 中。
聯想的威力在哪?
傳統 RAG 靠「向量距離」。但人類記憶不是這樣的。你聽到「下雨」,不會只想到「下雨」的句子,你會想到「那天下雨我們在咖啡館」、「我討厭潮濕的感覺」、「下雨天應該聽什麼音樂」......這才是真正的聯想。
OpenSoul 的 EcphoryRAG 就是在模擬這個。它從種子節點出發,沿著圖譜的邊走多步。每一步都有「衰減率」,避免聯想飄太遠到完全不相關的東西。比如從「Python」出發,可能跳到「非同步編程」,然後跳到「我上次踩過的 Race Condition」,但不會跳到「我最喜歡的咖啡品牌」。
神經化學參數的作用很直接:血清素高的時候,搜尋廣度增加,容易進行廣泛聯想,可能想到一些邊邊角角的東西。多巴胺高的時候,系統更願意探索新的路徑,容易發現原本沒注意到的連結。
這就是為什麼 OpenSoul 會「像有情緒一樣」——它的記憶檢索本身就會被情緒狀態影響。
Layer 2:MCP 工具 —— 顯式對話界面
第二層是對話層。
Hook 是幕後的,但有時候你也許想「顯式地」和 OpenSoul 互動。
這時候就直接在 Claude Code 呼叫 soul_chat 工具。
原理詳解:
soul_chat 觸發的流程比 hook 還要複雜。它不只是「注入記憶」,而是執行一整個完整的認知迴圈。
假設你問「我想學 Rust,從哪開始?」,系統會做以下事情:
首先,向量化你的輸入並進行 EcphoryRAG 檢索。系統會回想起「你曾說過學新語言時喜歡實戰」、「你對 C 的低層概念感興趣」、「你容易被抽象的東西嚇到」等相關記憶。
接著,更新神經化學狀態。比如當前的多巴胺是 0.6、血清素是 0.5(平衡模式),但如果最近你進行了很多學習活動,多巴胺會上升,說明你更有動力了。
然後,LLM(Claude)基於這些背景——情節記憶、人格特徵、當前的神經化學狀態——生成回應。
接著是顯著性評估。
系統問自己:這個對話有多重要?
重要性由「情緒強度」乘以「新穎性」乘以「任務相關性」決定。
比如如果你第一次問 Rust,這個對話的顯著性會很高。
然後系統寫入情節記憶。記錄下「你問了我 Rust 學習路徑,我推薦了什麼」,同時標記上時間戳、情感標籤、相關實體和觸發器。
在背景中,系統非同步地進行概念提取。從這次對話自動提取新的語意記憶和規則,比如「Rust 適合對系統編程有興趣的人」、「學習 Rust 時應該從所有權概念開始」等等,存入 SemanticMemory 圖譜。
最後,如果神經化學狀態或目標有變化,就修改你的 SOUL.md。
Layer 3:Claude Code 的智能決策
第三層是行為層。
之前我設計了一個 JudgeAgent 來決定「什麼時候該調用工具」。
但後來我意識到一件事:Claude Code 已經夠聰明了,而且比起設定OpenClaw,Claude Code要簡潔且有用太多了。
與其讓我的 Judge 模組去決定,不如直接把決定權給 Claude。
所以在新版本中,工具調用完全由 Claude Code 決定。
OpenSoul 只負責提供三樣東西:背景人格和記憶(通過 hook)、對話能力(soul_chat_tool)、記憶查詢(可選)。至於「什麼時候該和 OpenSoul 聊天、什麼時候該用其他工具」——Claude 自己看著辦。
這個改動看起來很簡單,但其實反映了我對整個系統的重新認識:OpenSoul 不應該被視為「一個獨立的 Agent」,而應該是「Claude 的延伸記憶和人格」。
部署:一條指令啟動所有東西
cd OpenSoul
python scripts/setup_mcp.py搞定。
setup_mcp.py 會:
啟動 FalkorDB(Docker)
驗證 API Key
安裝 fastmcp(如果缺少)
向 Claude Code 全域註冊 opensoul MCP
向 Claude Desktop 寫入設定
驗證 MCP server 能正常運作
然後你就可以在 Claude Code 裡直接用 OpenSoul,就像用其他內建工具一樣。
不需要開終端、不需要呼叫 API、不需要複雜的設定檔。
為什麼這個設計比「傳統 RAG」好
傳統的 RAG(比如 LangChain)的工作流程很直線:向量化輸入、在文檔庫中找相似度最高的幾條、注入到 prompt、LLM 回應。
簡單有效,但很機械。
OpenSoul 的工作流程要複雜得多。
先向量化輸入,在 FalkorDB 中找種子節點,然後基於圖譜邊關係進行多跳搜尋。
你問「怎麼優化 SQL?」,系統不只會檢索 SQL 優化的節點,還會跳轉到「涉及網路延遲→想起 Redis 緩存」,再跳到「緩存→想起你上次踩過的連線池問題」,最後跳到「連線池→想起你討厭複雜的 ORM」。
在這個過程中,系統會基於神經化學狀態調整搜尋的深度和廣度,把這個人的習慣和風格融入進去。最後 LLM 回應時,不只是「提供相關資訊」,而是「基於對你的理解給出答案」。
區別在於:傳統 RAG 是「檢索相關資訊」,OpenSoul 是「聯想相關情節和概念」。
最後
我覺得我朋友說的很好,人們真的需要用到OpenClaw那麼多的功能嗎?
更多人是想要一個除了能當助理還能陪伴自己的存在,跟我的OpenSoul創作理念不謀而合。
如果這個專案能真的幫到人,那也不錯吧。
作者:mewcat