feat: 将记忆系统和知识库合并改造为长效向量记忆系统

- 移除知识库(KB/RAG)功能,删除 kb-modal.ts、rag.ts、memory-panel.ts
- 新增 vector-memory.ts:记忆向量存储与检索引擎
- 新增 memory-modal.ts:大模态框布局的记忆管理面板
- 简化记忆分类为3类:fact(事实)、preference(偏好)、rule(规则)
- 嵌入模型配置移至设置面板
- 无嵌入模型时自动降级为关键词搜索模式
- 向量搜索支持语义相似度检索
- 嵌入模型变化时自动重新索引所有记忆
This commit is contained in:
OpenClaw Agent
2026-04-16 09:27:05 +08:00
parent 759b5fa8db
commit 8ec34106cd
14 changed files with 1108 additions and 1463 deletions
+4 -14
View File
@@ -19,12 +19,10 @@ import { initChatArea, renderMessages, clearMessages, enableAutoScroll, updateTo
import { initInputArea } from './components/input-area.js';
import { initSettingsModal, closeSettingsModal } from './components/settings-modal.js';
import { initHistoryModal, closeHistoryModal } from './components/history-modal.js';
import { initKBModal } from './components/kb-modal.js';
import { initVectorStore } from './services/rag.js';
import { initMemoryModal } from './components/memory-modal.js';
import { initMemoryManager } from './services/memory-manager.js';
import { setToolEnabled } from './services/tool-registry.js';
import { initToolConfirmModal } from './components/tool-confirm-modal.js';
import { initMemoryPanel } from './components/memory-panel.js';
import { initWorkspacePanel } from './components/workspace-panel.js';
import { initLogPanel, addLog } from './services/log-service.js';
import { logInfo, logSuccess, logError, logDebug, logInit, logWarn } from './services/log-service.js';
@@ -204,10 +202,9 @@ async function init(): Promise<void> {
initInputArea();
initSettingsModal();
initHistoryModal();
initKBModal();
initHelpModal();
initToolConfirmModal();
initMemoryPanel();
initMemoryModal();
initWorkspacePanel();
setupDesktopIntegration();
@@ -215,7 +212,6 @@ async function init(): Promise<void> {
await checkConnection();
await loadModels();
await initVectorStore();
await initMemoryManager();
logInit('所有组件已就绪');
@@ -291,16 +287,10 @@ function bindGlobalEvents(): void {
closeHistoryModal();
closeLightbox();
(document.querySelector('#helpModal') as HTMLElement).style.display = 'none';
(document.querySelector('#kbModal') as HTMLElement).style.display = 'none';
(document.querySelector('#memoryModal') as HTMLElement).style.display = 'none';
}
// Ctrl+K知识库管理
if (e.ctrlKey && e.key === 'k') {
e.preventDefault();
document.querySelector('#btnKB')?.dispatchEvent(new Event('click'));
}
// Ctrl+M — 记忆面板
// Ctrl+M记忆管理
if (e.ctrlKey && e.key === 'm') {
e.preventDefault();
document.querySelector('#btnMemory')?.dispatchEvent(new Event('click'));