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
JavaScript
"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;