UNPKG

flux-agent

Version:

FluxAgent - 一个可灵活插拔的AI Agent系统框架,基于TypeScript开发,支持流式执行、事件系统、插件系统、知识库管理等功能 (Protected Release) (Protected Release) (Protected Release) (Protected Release) (Protected Release) (Protected Release) (Protected Release) (Protected Release) (Protected Release) (

264 lines (263 loc) 8.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.KnowledgeManager = void 0; // 导入EventHub相关类型 const EventHub_1 = require("./EventHub"); // 知识库管理器 class KnowledgeManager { constructor(logger, eventHub) { this.knowledgeItems = new Map(); this.logger = logger; this.eventHub = eventHub; this.logger('知识库管理器初始化完成'); } /** * 设置事件中心(可选,用于后续设置) */ setEventHub(eventHub) { this.eventHub = eventHub; } /** * 发出知识库事件 */ emitKnowledgeEvent(eventName, action, options = {}) { if (!this.eventHub) return; const payload = { action, timestamp: Date.now(), ...options }; this.eventHub.emit({ type: 'KnowledgeEvent', name: eventName, payload }); } /** * 添加知识条目 */ add(input) { const id = this.generateUniqueId(); const knowledge = { id, name: input.name, description: input.description, content: input.content, tags: input.tags || [], createdAt: Date.now(), updatedAt: Date.now(), isActive: true }; this.knowledgeItems.set(id, knowledge); this.logger('添加知识条目', { id, name: input.name, descriptionLength: input.description.length, contentLength: input.content.length }); // 发出事件 this.emitKnowledgeEvent(EventHub_1.AgentEventName.KNOWLEDGE_ADDED, 'add', { knowledgeId: id, knowledgeName: input.name }); return id; } /** * 删除知识条目 */ remove(ids) { const results = ids.map(id => { const item = this.knowledgeItems.get(id); const success = this.knowledgeItems.delete(id); this.logger('删除知识条目', { id, name: item?.name || 'unknown', success }); return success; }); // 发出事件 const removedIds = ids.filter((id, index) => results[index]); if (removedIds.length > 0) { this.emitKnowledgeEvent(EventHub_1.AgentEventName.KNOWLEDGE_REMOVED, 'remove', { knowledgeIds: removedIds }); } return results; } /** * 更新知识条目 */ update(id, updates) { const item = this.knowledgeItems.get(id); if (!item) { this.logger('更新知识条目失败:条目不存在', { id }); return false; } const updatedItem = { ...item, ...updates, updatedAt: Date.now() }; this.knowledgeItems.set(id, updatedItem); this.logger('更新知识条目', { id, name: updatedItem.name }); // 发出事件 this.emitKnowledgeEvent(EventHub_1.AgentEventName.KNOWLEDGE_UPDATED, 'update', { knowledgeId: id, knowledgeName: updatedItem.name }); return true; } /** * 获取知识条目 */ get(id) { return this.knowledgeItems.get(id); } /** * 获取所有激活的知识条目 */ getActiveKnowledge() { return Array.from(this.knowledgeItems.values()) .filter(item => item.isActive) .sort((a, b) => b.createdAt - a.createdAt); } /** * 获取所有知识条目(包括非激活的) */ getAllKnowledge() { return Array.from(this.knowledgeItems.values()) .sort((a, b) => b.createdAt - a.createdAt); } /** * 启用/禁用知识条目 */ setActive(id, isActive) { const item = this.knowledgeItems.get(id); if (!item) { this.logger('设置知识条目状态失败:条目不存在', { id }); return false; } item.isActive = isActive; item.updatedAt = Date.now(); this.logger('设置知识条目状态', { id, name: item.name, isActive }); return true; } /** * 清空所有知识条目 */ clear() { const count = this.knowledgeItems.size; this.knowledgeItems.clear(); this.logger('清空知识库', { removedCount: count }); // 发出事件 if (count > 0) { this.emitKnowledgeEvent(EventHub_1.AgentEventName.KNOWLEDGE_CLEARED, 'clear', { itemCount: count }); } } /** * 获取知识库统计信息 */ getStats() { const allItems = Array.from(this.knowledgeItems.values()); const activeItems = allItems.filter(item => item.isActive); return { total: allItems.length, active: activeItems.length, inactive: allItems.length - activeItems.length }; } /** * 格式化知识库内容为LLM可读格式 */ formatKnowledgeForLLM() { const activeKnowledge = this.getActiveKnowledge(); if (activeKnowledge.length === 0) { return ''; } let formatted = '\n# 知识库已有信息:\n'; for (const item of activeKnowledge) { formatted += `## ${item.name}\n`; formatted += `知识描述: ${item.description}\n`; formatted += `知识内容:${item.content}\n`; } this.logger('格式化知识库内容', { itemCount: activeKnowledge.length, totalLength: formatted.length }); // 发出事件 if (activeKnowledge.length > 0) { this.emitKnowledgeEvent(EventHub_1.AgentEventName.KNOWLEDGE_APPLIED, 'applied', { itemCount: activeKnowledge.length }); } return formatted; } /** * 根据关键词搜索知识条目 */ search(keyword) { if (!keyword.trim()) { return []; } const lowerKeyword = keyword.toLowerCase(); const results = Array.from(this.knowledgeItems.values()) .filter(item => { return item.isActive && (item.name.toLowerCase().includes(lowerKeyword) || item.description.toLowerCase().includes(lowerKeyword) || item.content.toLowerCase().includes(lowerKeyword) || (item.tags && item.tags.some(tag => tag.toLowerCase().includes(lowerKeyword)))); }) .sort((a, b) => b.updatedAt - a.updatedAt); this.logger('搜索知识条目', { keyword, resultCount: results.length }); return results; } /** * 生成唯一ID */ generateUniqueId() { return `kb_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`; } /** * 导出知识库数据(用于快照) */ export() { const items = Array.from(this.knowledgeItems.values()); this.logger('导出知识库数据', { itemCount: items.length }); return items; } /** * 导入知识库数据(用于快照恢复) */ import(items) { this.knowledgeItems.clear(); for (const item of items) { // 验证数据完整性 if (item.id && item.name && item.description && item.content !== undefined) { this.knowledgeItems.set(item.id, item); } else { this.logger('跳过无效的知识条目', { item }); } } this.logger('导入知识库数据', { importedCount: this.knowledgeItems.size, totalProvided: items.length }); } /** * 验证知识条目数据 */ validateKnowledgeItem(input) { return !!(input.name?.trim() && input.description?.trim() && input.content?.trim()); } } exports.KnowledgeManager = KnowledgeManager;