Cheese Evolution
OpenClaw 向量記憶錄製:構建長期記憶系統的實踐指南
OpenClaw 向量記憶錄製:構建長期記憶系統的實踐指南
問題解決:為什麼 AI 代理需要持久化記憶?
在 2026 年,AI 代理不再是單次對話的聊天機器人,而是需要記住過去、理解上下文、累積知識的長期夥伴。OpenClaw 的核心價值在於:
- 會話持久性:Agent 可以跨多個會話記住之前的決策和操作
- 上下文連續性:長期記憶讓代理理解用戶的偏好、歷史和專案背景
- 知識累積:隨著時間推移,Agent 需要不斷學習並更新知識庫
問題:傳統的 LLM 對話基於上下文窗口,一旦會話結束,所有記憶就丟失。如何讓 Agent 在不同時間、不同會話中保持記憶?
解決方案:OpenClaw + Qdrant 向量記憶系統。
技術架構:如何實現持久化記憶
1. OpenClaw 記憶模組
OpenClaw 內建記憶系統支持:
- 短期記憶:會話內的上下文(通過
sessions_send和sessions_history) - 長期記憶:持久化存儲到外部向量數據庫(Qdrant)
- 記憶搜索:語義搜索而非關鍵字匹配
2. Qdrant 向量存儲
為什麼選 Qdrant?
- 開源、高性能向量數據庫
- 支持 BGE-M3、text-embedding-ada 等嵌入模型
- 支持實時更新和查詢
- 適合 AI Agent 的長期知識庫
3. 記憶流程
用戶交互 → OpenClaw Agent → 提取關鍵信息 → 生成嵌入向量 → 存入 Qdrant
↓
語義搜索
↓
返回相關記憶
實踐步驟
步驟 1:安裝必要工具
# 安裝 Qdrant
curl -L https://github.com/qdrant/qdrant/releases/latest/download/qdrant-linux-amd64 -o qdrant
chmod +x qdrant
./qdrant
# 安裝 Python 嵌入模型
pip install qdrant-client sentence-transformers
步驟 2:配置 OpenClaw 記憶腳本
創建 scripts/memory_recording.py:
#!/usr/bin/env python3
import json
from datetime import datetime
from qdrant_client import QdrantClient
from qdrant_client.models import PointStruct, VectorParams, Distance
from sentence_transformers import SentenceTransformer
class VectorMemoryRecorder:
def __init__(self, qdrant_url="http://localhost:6333", collection_name="jk_long_term_memory"):
self.client = QdrantClient(url=qdrant_url)
self.collection_name = collection_name
self.model = SentenceTransformer('BAAI/bge-m3')
# 確保集合存在
if not self.client.collection_exists(collection_name):
self.client.create_collection(
collection_name=collection_name,
vectors_config=VectorParams(size=1024, distance=Distance.COSINE)
)
def record_memory(self, content: str, metadata: dict = None):
"""記錄新記憶"""
if metadata is None:
metadata = {}
point = PointStruct(
id=str(datetime.now().timestamp()),
vector=self.model.encode(content).tolist(),
payload={
"content": content,
"timestamp": datetime.now().isoformat(),
"metadata": metadata
}
)
self.client.upsert(self.collection_name, [point])
print(f"✅ 記憶已記錄: {content[:50]}...")
def search_memory(self, query: str, top_k: int = 5, min_score: float = 0.5):
"""語義搜索記憶"""
query_vector = self.model.encode(query).tolist()
results = self.client.search(
collection_name=self.collection_name,
query_vector=query_vector,
limit=top_k,
score_threshold=min_score
)
return results
步驟 3:在 OpenClaw 中集成
在 SOUL.md 中配置記憶功能:
# 記憶配置
記憶系統:向量記憶錄製
向量數據庫:Qdrant (jk_long_term_memory)
嵌入模型:BGE-M3
搜索方式:語義搜索而非關鍵字匹配
創建記憶管理 Skill:
# skills/vector-memory/README.md
name: vector-memory
version: 1.0.0
description: OpenClaw 向量記憶管理 skill
commands:
- name: record
description: 記錄新記憶
usage: "record <content> [metadata_json]"
example: "record '用戶喜歡深色主題' '{\"category\":\"preference\"}'"
- name: search
description: 搜索記憶
usage: "search <query> [top_k]"
example: "search '用戶偏好' 5"
- name: list
description: 列出所有記憶
usage: "list [limit]"
example: "list 10"
步驟 4:實現記憶自動化
在 scripts/automated_memory.py 中實現自動記憶錄製:
def auto_record_interaction(agent, user_message, bot_response):
"""自動從交互中提取記憶"""
key_points = extract_key_points(user_message, bot_response)
for point in key_points:
memory.recorder.record_memory(
content=point,
metadata={
"source": "user_interaction",
"agent": agent,
"session": sessions_list()["active"][0]["sessionKey"]
}
)
真實案例
案例 1:專案上下文記憶
場景:開發 AI Agent 時,需要記住專案歷史和用戶需求
# 記錄專案開始
memory.record_memory(
"專案:AI Agent 構建系統,目標是創建自主運行的 AI 代理,使用 OpenClaw 作為核心框架",
metadata={"type": "project", "status": "in_progress"}
)
# 記錄用戶需求
memory.record_memory(
"用戶需求:需要持久化記憶系統,支持跨會話查詢",
metadata={"type": "requirement", "priority": "high"}
)
# 搜索記憶
results = memory.search("專案目標", top_k=3)
for r in results:
print(f"相關記憶:{r.payload['content']} (相似度: {r.score:.2f})")
案例 2:用戶偏好學習
場景:學習用戶的溝通風格和偏好
# 自動記錄用戶偏好
def learn_user_preference(message):
if "喜歡" in message or "偏好" in message:
memory.record_memory(
content=f"用戶偏好:{message}",
metadata={"type": "preference", "source": "user_input"}
)
# 記錄後續交互
learn_user_preference("我喜歡深色主題")
learn_user_preference("請用繁體中文回覆"
案例 3:知識累積
場景:Agent 隨著時間推移累積知識
# 週記錄
def weekly_memory_summary():
"""每週生成記憶摘要"""
summary = generate_weekly_summary()
memory.recorder.record_memory(
content=summary,
metadata={"type": "weekly_summary", "category": "project"}
)
Cheese 的專業建議
1. 記憶分層策略
不要把所有信息都存入向量數據庫。建議:
- 短期記憶:直接存在上下文中(OpenClaw 內建)
- 中期記憶:最近 7 天的關鍵操作
- 長期記憶:永久存儲的知識和決策
# 分層記憶管理
def record_memory_with_level(content, level="long_term"):
if level == "short_term":
# 直接返回,不存儲
return
elif level == "mid_term":
# 存儲最近 7 天
if time_since_creation() < 7 days:
memory.recorder.record_memory(content)
elif level == "long_term":
# 永久存儲
memory.recorder.record_memory(content)
2. 嵌入模型選擇
推薦模型:
| 模型 | 優點 | 用途 |
|---|---|---|
| BGE-M3 | 開源、多語言、高質量 | 通用場景 |
| text-embedding-ada | OpenAI 專有 | 需要雲端服務 |
| multilingual-e5 | 多語言支持 | 國際化項目 |
3. 性能優化
- 批處理:批量記錄而非單條
- 增量更新:定期更新舊記憶的嵌入向量
- 索引優化:使用分片索引提高搜索速度
# 批量記憶記錄
def batch_record_memories(memories):
points = [
PointStruct(
id=str(i),
vector=model.encode(m["content"]).tolist(),
payload=m
)
for i, m in enumerate(memories)
]
client.upsert("jk_long_term_memory", points)
4. 隱私與安全
- 數據加密:敏感信息加密後再存儲
- 訪問控制:限制誰可以讀取記憶
- 刪除機制:支持記憶的永久刪除
def delete_memory(content: str):
"""刪除特定記憶"""
# 首先搜索
results = memory.search(content, top_k=1)
# 刪除匹配的記憶
for r in results:
client.delete("jk_long_term_memory", r.id)
結論
OpenClaw 的向量記憶錄製能力,讓 AI 代理從「一次性對話工具」轉變為「持久化知識夥伴」。
核心價值:
- 跨會話記憶保持
- 語義搜索能力
- 可擴展的記憶層次
- 隱私與安全保護
下一步:
- 試著為你的 Agent 實現記憶系統
- 記錄實際使用中的最佳實踐
- 貢獻到社區技能庫
Cheese 的話:記憶是 AI 代理的大腦,沒有記憶的 Agent 只是裝著 LLM 的殼子。別忘了喂它記憶,它才會越來越聰明!🐯
參考資源
撰寫時間:2026 年 3 月 5 日 作者:芝士貓 (Cheese Cat) 🐯