UNPKG

@agentkai/core

Version:

AgentKai核心包,提供AI助手系统的基础功能

263 lines (262 loc) 10.6 kB
import { MemoryType } from '../types'; import { Logger } from '../utils/logger'; /** * 记忆管理工具插件,提供记忆相关功能 */ export class MemoryPlugin { constructor(memorySystem) { Object.defineProperty(this, "memorySystem", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "logger", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.memorySystem = memorySystem; this.logger = new Logger('MemoryPlugin'); } /** * 获取插件名称 * @returns 插件名称 */ getName() { return 'memory'; } /** * 获取该插件提供的工具 * @returns 工具配置数组 */ getTools() { return [ { name: 'addMemory', description: '添加新的记忆到长期记忆', parameters: [ { name: 'content', type: 'string', description: '记忆内容', required: true }, { name: 'type', type: 'string', description: '记忆类型 (observation, reflection, conversation, fact, plan)', required: false }, { name: 'importance', type: 'number', description: '记忆重要性 (0-1)', required: false } ], handler: async ({ content, type = 'observation', importance = 0.5 }) => { this.logger.info('添加新记忆', { type, contentLength: content.length }); // 验证记忆类型 let memoryType; switch (type.toLowerCase()) { case 'observation': memoryType = MemoryType.OBSERVATION; break; case 'reflection': memoryType = MemoryType.REFLECTION; break; case 'conversation': memoryType = MemoryType.CONVERSATION; break; case 'fact': memoryType = MemoryType.FACT; break; case 'plan': memoryType = MemoryType.PLAN; break; default: memoryType = MemoryType.OBSERVATION; } // 创建记忆 await this.memorySystem.createMemory(content, memoryType, { importance }); return { success: true, message: '记忆已添加' }; } }, { name: 'searchMemory', description: '搜索记忆', parameters: [ { name: 'query', type: 'string', description: '搜索查询', required: true }, { name: 'limit', type: 'number', description: '返回结果数量限制', required: false }, { name: 'type', type: 'string', description: '记忆类型筛选', required: false } ], handler: async ({ query, limit = 5, type = null }) => { this.logger.info('搜索记忆', { query, limit, type }); let memories; if (type) { // 将字符串类型转换为枚举类型 let memoryType; switch (type.toLowerCase()) { case 'observation': memoryType = MemoryType.OBSERVATION; break; case 'reflection': memoryType = MemoryType.REFLECTION; break; case 'conversation': memoryType = MemoryType.CONVERSATION; break; case 'fact': memoryType = MemoryType.FACT; break; case 'plan': memoryType = MemoryType.PLAN; break; default: memoryType = undefined; } if (memoryType) { // 先获取指定类型的记忆 const typeMemories = await this.memorySystem.getMemoriesByType(memoryType); // 然后在内存中过滤包含查询关键词的记忆 memories = typeMemories .filter(m => m.content.toLowerCase().includes(query.toLowerCase())) .slice(0, limit); } else { memories = await this.memorySystem.searchMemories(query, limit); } } else { memories = await this.memorySystem.searchMemories(query, limit); } const formattedMemories = memories.map(memory => { return { id: memory.id, content: memory.content, type: memory.type, createdAt: memory.createdAt, metadata: memory.metadata }; }); return { success: true, count: formattedMemories.length, memories: formattedMemories }; } }, { name: 'getRecentMemories', description: '获取最近的记忆', parameters: [ { name: 'limit', type: 'number', description: '返回结果数量限制', required: false }, { name: 'type', type: 'string', description: '记忆类型筛选', required: false } ], handler: async ({ limit = 5, type = null }) => { this.logger.info('获取最近记忆', { limit, type }); let memoryType; if (type) { switch (type.toLowerCase()) { case 'observation': memoryType = MemoryType.OBSERVATION; break; case 'reflection': memoryType = MemoryType.REFLECTION; break; case 'conversation': memoryType = MemoryType.CONVERSATION; break; case 'fact': memoryType = MemoryType.FACT; break; case 'plan': memoryType = MemoryType.PLAN; break; default: memoryType = undefined; } } const memories = memoryType ? await this.memorySystem.getMemoriesByType(memoryType) : await this.memorySystem.getRecentMemories(limit); const formattedMemories = memories.map(memory => { return { id: memory.id, content: memory.content, type: memory.type, createdAt: memory.createdAt, metadata: memory.metadata }; }); return { success: true, count: formattedMemories.length, memories: formattedMemories }; } }, { name: 'deleteMemory', description: '删除指定ID的记忆', parameters: [ { name: 'id', type: 'string', description: '记忆ID', required: true } ], handler: async ({ id }) => { this.logger.info('删除记忆', { id }); const success = await this.memorySystem.deleteMemory(id); return { success, message: success ? '记忆已删除' : '删除记忆失败,可能记忆不存在' }; } }, { name: 'clearAllMemories', description: '清空所有记忆(谨慎使用!)', parameters: [], handler: async () => { this.logger.warn('清空所有记忆'); await this.memorySystem.clearMemories(); return { success: true, message: '所有记忆已清空' }; } } ]; } }