Hệ thống Quản lý Bộ nhớ và Ngữ cảnh trong OpenClaw

Trong phiên bản OpenClaw 2026, khả năng quản lý bộ nhớ và ngữ cảnh (Memory & Context) là yếu tố then chốt tạo nên sự khác biệt so với các chatbot thông thường. Thay vì chỉ lưu trữ lịch sử trò chuyện đơn giản, OpenClaw sử dụng một hệ thống tri thức phân lớp, cho phép truy xuất và tùy chỉnh logic linh hoạt.

Kiến trúc bộ nhớ của OpenClaw được chia thành ba tầng chính:

  • Bộ nhớ ngắn hạn (Short-term Memory): Lưu trữ toàn bộ nội dung thô của cửa sổ hội thoại hiện tại trong giới hạn Token.
  • Bộ nhớ dài hạn (Long-term Memory / RAG): Sử dụng cơ sở dữ liệu vectơ để lưu trữ các bản tóm tắt và các sự kiện quan trọng từ lịch sử trò chuyện.
  • Bộ nhớ làm việc (Working Memory): Trạng thái tạm thời trong quá trình thực thi tác vụ (ví dụ: tên tệp đang xử lý, mã lỗi cuối cùng nhận được).

Cấu hình hệ thống trong config.yaml

Để kích hoạt và tinh chỉnh bộ nhớ, bạn cần thiết lập tệp cấu hình. OpenClaw hỗ trợ nhiều backend cơ sở dữ liệu vectơ như Chroma, Milvus, FAISS hoặc Qdrant.

storage_settings:
  # Kích hoạt bộ nhớ dài hạn
  use_long_term: true
  
  # Chọn backend: 'chroma', 'milvus', 'qdrant', 'faiss'
  engine: chroma
  
  # Cấu hình lưu trữ
  vector_provider:
    chroma:
      db_path: ./vault/chroma_data
      
  # Cấu hình Embedding Model (Khuyên dùng Ollama để chạy local)
  embedding_engine:
    provider: ollama
    model_name: nomic-embed-text:latest
    endpoint: http://localhost:11434

  # Chiến lược truy xuất dữ liệu
  search_params:
    max_results: 5
    min_similarity: 0.70
    decay_rate: 0.9  # Bộ nhớ cũ sẽ giảm dần trọng số theo thời gian

  # Bảo trì dữ liệu
  maintenance:
    auto_summarize_after: 15 # Số lượt hội thoại trước khi tóm tắt
    clear_logs_after_days: 60

Quy trình xử lý bộ nhớ

Hệ thống hoạt động theo các bước tuần tự để đảm bảo AI luôn có đủ thông tin:

  1. Tiếp nhận: Người dùng gửi yêu cầu -> Làm sạch dữ liệu.
  2. Truy xuất (Retrieval): Tìm kiếm các mẩu tin liên quan nhất trong kho dữ liệu vectơ dựa trên đầu vào.
  3. Làm giàu dữ liệu (Augmentation): Kết hợp thông tin truy xuất được + Lịch sử hiện tại + System Prompt.
  4. Phản hồi: LLM xử lý Prompt tổng hợp và tạo câu trả lời.
  5. Lưu trữ (Storage): Cập nhật bộ nhớ ngắn hạn và thực hiện tóm tắt nền (background summary) nếu đạt ngưỡng cấu hình để chuyển vào bộ nhớ dài hạn.

Tùy chỉnh Logic bộ nhớ bằng Python

OpenClaw cho phép nhà phát triển can thiệp sâu vào quá trình ghi và đọc bộ nhớ. Ví dụ dưới đây minh họa cách xây dựng một trình xử lý "Sở thích người dùng" (User Preference).

Tạo tệp preference_handler.py trong thư mục custom_logic/:

from openclaw.memory.base import BaseMemoryHandler
from openclaw.core.llm import get_llm_client
from openclaw.utils.logger import logger
import json
from datetime import datetime

class PreferenceManager(BaseMemoryHandler):
    """
    Xử lý đặc biệt các thông tin về sở thích cá nhân của người dùng.
    """
    
    def __init__(self, config):
        super().__init__(config)
        self.label = "PREF_DATA"
        self.ai_client = get_llm_client()

    async def is_relevant_info(self, text: str) -> bool:
        """
        Sử dụng LLM để xác định xem tin nhắn có chứa thông tin sở thích hay không.
        """
        check_prompt = f"""
        Phân tích câu sau: "{text}"
        Nếu câu này thể hiện sở thích, thói quen hoặc yêu cầu cá nhân lâu dài, hãy trả về JSON: {{"save": true}}
        Ngược lại, trả về JSON: {{"save": false}}
        """
        output = await self.ai_client.generate(check_prompt, temperature=0)
        try:
            return json.loads(output).get("save", False)
        except:
            return False

    async def commit_memory(self, text: str, meta: dict):
        """
        Trích xuất và lưu trữ sở thích vào database.
        """
        extract_task = f"Trích xuất sở thích cốt lõi từ: '{text}'. Trả về dạng: Chủ đề - Nội dung."
        content_summary = await self.ai_client.generate(extract_task)
        
        entry_meta = {
            "category": self.label,
            "created_at": datetime.now().isoformat(),
            "detail": content_summary
        }
        
        await self.vector_store.add_texts(
            texts=[text],
            metadatas=[entry_meta],
            ids=[f"user_pref_{datetime.now().timestamp()}"]
        )
        logger.info(f"Đã cập nhật sở thích người dùng: {content_summary}")

def setup_memory_extension(app):
    handler = PreferenceManager(app.config.storage_settings)
    app.memory_manager.register_handler("user_preference", handler)

Tích hợp bộ nhớ vào Agent

Để Agent sử dụng các thông tin đã lưu, bạn cần cấu hình System Prompt trong tệp định nghĩa Agent (ví dụ: assistant.yaml):

agent_config:
  name: "SmartAssistant"
  instructions: |
    Bạn là một trợ lý ảo thông minh. 
    Trước khi trả lời, hãy kiểm tra phần 'Bộ nhớ lịch sử' bên dưới để cá nhân hóa câu trả lời.
    Nếu người dùng nhắc đến một sở thích mới, hãy tự động ghi nhận.

  prompt_template: |
    Dưới đây là các thông tin liên quan từ quá khứ:
    {{retrieved_memories}}
    
    Câu hỏi hiện tại của người dùng: {{user_input}}

Quản lý vòng đời của bộ nhớ

Một hệ thống bộ nhớ tốt không chỉ biết nhớ mà còn phải biết "quên" để tránh nhiễu thông tin.

1. Cơ chế hết hạn (TTL)

Bạn có thể thêm thuộc tính expiry_date vào metadata của mỗi bản ghi. Một tiến trình chạy ngầm sẽ định kỳ quét và xóa các dữ liệu đã quá hạn (ví dụ: các nhắc nhở tạm thời hoặc lịch trình đã qua).

2. Nén bộ nhớ thông qua tóm tắt

Thay vì lưu trữ hàng ngàn dòng hội thoại thô, OpenClaw hỗ trợ Summarization Chain. Khi đạt giới hạn 15-20 lượt hội thoại, hệ thống sẽ gọi một mô hình nhỏ (như Qwen2.5-1.8B) để cô đọng nội dung thành các ý chính trước khi đẩy vào bộ nhớ dài hạn, giúp tiết kiệm không gian và tăng tốc độ truy vấn.

3. Bộ nhớ đa phương thức

OpenClaw 2026 hỗ trợ lưu trữ cả đặc trưng của hình ảnh. Sử dụng mô hình như nomic-embed-vision, hệ thống có thể chuyển đổi hình ảnh người dùng đã gửi thành vectơ. Khi người dùng hỏi: "Trong ảnh tôi gửi hôm qua có gì?", AI có thể truy xuất lại chính xác dữ liệu hình ảnh đó.

Kiểm tra và Gỡ lỗi

Để kiểm tra xem hệ thống bộ nhớ có hoạt động chính xác hay không, bạn có thể sử dụng công cụ dòng lệnh tích hợp:

python main.py --inspect-memory --tag PREF_DATA

Ngoài ra, hãy theo dõi tệp logs/memory.log để xem điểm số tương đồng (similarity score) và các nội dung ngữ cảnh đã được chèn vào Prompt thực tế.

Thẻ: OpenClaw RAG Vector Database LLM python

Đăng vào ngày 3 tháng 7 lúc 02:28