Sessions and memory

Tìm kiếm bộ nhớ

memory_search tìm các ghi chú liên quan từ các tệp bộ nhớ của bạn, ngay cả khi cách diễn đạt khác với văn bản gốc. Công cụ này hoạt động bằng cách lập chỉ mục bộ nhớ thành các đoạn nhỏ và tìm kiếm chúng bằng embedding, từ khóa, hoặc cả hai.

Bắt đầu nhanh

Nếu bạn đã cấu hình gói đăng ký GitHub Copilot, khóa API OpenAI, Gemini, Voyage hoặc Mistral, tìm kiếm bộ nhớ sẽ tự động hoạt động. Để đặt một nhà cung cấp rõ ràng:

{
  agents: {
    defaults: {
      memorySearch: {
        provider: "openai", // or "gemini", "local", "ollama", etc.
      },
    },
  },
}

Với các thiết lập nhiều endpoint, provider cũng có thể là một mục models.providers.<id> tùy chỉnh, chẳng hạn như ollama-5080, khi nhà cung cấp đó đặt api: "ollama" hoặc một chủ sở hữu bộ chuyển đổi embedding khác.

Đối với embedding cục bộ không cần khóa API, đặt provider: "local". Các bản checkout mã nguồn vẫn có thể yêu cầu phê duyệt bản dựng native: pnpm approve-builds rồi pnpm rebuild node-llama-cpp.

Một số endpoint embedding tương thích với OpenAI yêu cầu nhãn bất đối xứng như input_type: "query" cho tìm kiếm và input_type: "document" hoặc "passage" cho các đoạn đã lập chỉ mục. Cấu hình các mục đó bằng memorySearch.queryInputTypememorySearch.documentInputType; xem tham chiếu cấu hình bộ nhớ.

Nhà cung cấp được hỗ trợ

Nhà cung cấp ID Cần khóa API Ghi chú
Bedrock bedrock Không Tự động phát hiện khi chuỗi thông tin xác thực AWS phân giải được
Gemini gemini Hỗ trợ lập chỉ mục hình ảnh/âm thanh
GitHub Copilot github-copilot Không Tự động phát hiện, dùng gói đăng ký Copilot
Cục bộ local Không Mô hình GGUF, tải xuống khoảng 0,6 GB
Mistral mistral Tự động phát hiện
Ollama ollama Không Cục bộ, phải đặt rõ ràng
OpenAI openai Tự động phát hiện, nhanh
Voyage voyage Tự động phát hiện

Cách tìm kiếm hoạt động

OpenClaw chạy song song hai đường truy xuất và hợp nhất kết quả:

flowchart LR
    Q["Query"] --> E["Embedding"]
    Q --> T["Tokenize"]
    E --> VS["Vector Search"]
    T --> BM["BM25 Search"]
    VS --> M["Weighted Merge"]
    BM --> M
    M --> R["Top Results"]
  • Tìm kiếm vector tìm các ghi chú có ý nghĩa tương tự ("gateway host" khớp với "the machine running OpenClaw").
  • Tìm kiếm từ khóa BM25 tìm các kết quả khớp chính xác (ID, chuỗi lỗi, khóa cấu hình).

Nếu chỉ có một đường khả dụng (không có embedding hoặc không có FTS), đường còn lại sẽ chạy riêng.

Khi không có embedding, OpenClaw vẫn dùng xếp hạng từ vựng trên kết quả FTS thay vì chỉ quay về thứ tự khớp chính xác thô. Chế độ suy giảm đó tăng hạng các đoạn có mức bao phủ thuật ngữ truy vấn mạnh hơn và đường dẫn tệp liên quan, giúp khả năng truy hồi vẫn hữu ích ngay cả khi không có sqlite-vec hoặc nhà cung cấp embedding.

Cải thiện chất lượng tìm kiếm

Hai tính năng tùy chọn giúp ích khi bạn có lịch sử ghi chú lớn:

Suy giảm theo thời gian

Các ghi chú cũ dần mất trọng số xếp hạng để thông tin gần đây xuất hiện trước. Với thời gian bán rã mặc định là 30 ngày, một ghi chú từ tháng trước được tính 50% trọng số ban đầu. Các tệp thường trực như MEMORY.md sẽ không bao giờ bị suy giảm.

MMR (đa dạng)

Giảm các kết quả trùng lặp. Nếu năm ghi chú đều đề cập cùng một cấu hình bộ định tuyến, MMR đảm bảo các kết quả hàng đầu bao phủ các chủ đề khác nhau thay vì lặp lại.

Bật cả hai

{
  agents: {
    defaults: {
      memorySearch: {
        query: {
          hybrid: {
            mmr: { enabled: true },
            temporalDecay: { enabled: true },
          },
        },
      },
    },
  },
}

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

Với Gemini Embedding 2, bạn có thể lập chỉ mục hình ảnh và tệp âm thanh cùng với Markdown. Truy vấn tìm kiếm vẫn là văn bản, nhưng chúng khớp với nội dung hình ảnh và âm thanh. Xem tham chiếu cấu hình bộ nhớ để biết cách thiết lập.

Tìm kiếm bộ nhớ phiên

Bạn có thể tùy chọn lập chỉ mục bản ghi phiên để memory_search có thể nhớ lại các cuộc trò chuyện trước đó. Tính năng này được chọn bật thông qua memorySearch.experimental.sessionMemory. Xem tham chiếu cấu hình để biết chi tiết.

Khắc phục sự cố

Không có kết quả? Chạy openclaw memory status để kiểm tra chỉ mục. Nếu trống, chạy openclaw memory index --force.

Chỉ có kết quả khớp từ khóa? Nhà cung cấp embedding của bạn có thể chưa được cấu hình. Kiểm tra openclaw memory status --deep.

Embedding cục bộ hết thời gian chờ? ollama, lmstudio, và local dùng thời gian chờ lô inline dài hơn theo mặc định. Nếu máy chủ chỉ đơn giản là chậm, đặt agents.defaults.memorySearch.sync.embeddingBatchTimeoutSeconds và chạy lại openclaw memory index --force.

Không tìm thấy văn bản CJK? Dựng lại chỉ mục FTS bằng openclaw memory index --force.

Đọc thêm

Liên quan