zettelkasten-memory-server
Version:
基于 Zettelkasten 记忆片段盒方法的 MCP 记忆服务器 v1.6.X
94 lines • 6.92 kB
JavaScript
/**
* 获取优化建议处理器
*/
function createGetOptimizeSuggestionsHandler(manager) {
return async (args) => {
try {
const { optimizationThreshold = 0.1, maxFileCount = 10 } = args;
// 获取低价值片段建议
const lowValueSuggestions = await manager.getOptimizeSuggestions(optimizationThreshold, maxFileCount);
// 获取孤立片段建议
const isolatedSuggestions = await manager.getIsolatedSuggestions(maxFileCount);
let suggestionText = `🔧 **记忆片段优化建议**\n\n`;
// 信息散度和孤立片段说明
suggestionText += `📊 **信息散度计算原理**\n`;
suggestionText += `• 信息散度 = 权重 / 字符数\n`;
suggestionText += `• 权重取决于链接数量:链接越多,串联的上下文越多,信息散度越低\n`;
suggestionText += `• 字符数越少,信息密度越高,信息散度越低\n`;
suggestionText += `• 低信息散度表示信息过于集中,可能需要拆分\n\n`;
suggestionText += `🔗 **孤立片段说明**\n`;
suggestionText += `• 孤立片段是指没有其他记忆片段链接到的片段\n`;
suggestionText += `• 孤立片段可能需要链接到相关片段、与其他片段合并或删除\n\n`;
suggestionText += `⚠️ **系统片段说明**\n`;
suggestionText += `• 系统片段(如 bootloader 片段)是只读的,无法修改\n`;
suggestionText += `• 如果尝试修改系统片段,请在其他可编辑片段中进行相关操作\n\n`;
// 处理低价值片段
const lowValueItems = lowValueSuggestions.suggestions || lowValueSuggestions.divergences || [];
if (lowValueItems && lowValueItems.length > 0) {
suggestionText += `📋 **低信息散度记忆片段** (建议拆分)\n`;
suggestionText += lowValueItems.map((fragment, index) => `${index + 1}. [[${fragment.fragmentName || fragment.cardName}]] (信息散度: ${fragment.divergence.toFixed(4)}, 权重: ${fragment.weight.toFixed(2)}, 字符数: ${fragment.characterCount})`).join('\n');
suggestionText += `\n\n🔍 **优化策略建议**\n`;
suggestionText += `\n**核心原则:拆分并聚类胜过单纯总结**\n`;
suggestionText += `• 单纯总结会丢失情绪、环境等重要上下文信息\n`;
suggestionText += `• 通过 extractMemory 工具进行"精确范围拆分"更有效\n\n`;
suggestionText += `**具体操作步骤:**\n`;
suggestionText += `1. **识别联系紧密的内容块**:在单个记忆片段中找到可以独立成概念的部分\n`;
suggestionText += `2. **使用 extractMemory 精确拆分**:通过行号或正则表达式精确定位内容范围进行提取\n`;
suggestionText += `3. **建立知识链接**:提取后原位置自动替换为链接,保持知识网络连接\n`;
suggestionText += `4. **避免多记忆片段对比**:专注单个记忆片段的内部拆分,而非跨记忆片段合并\n\n`;
}
// 处理孤立片段
const isolatedItems = isolatedSuggestions.suggestions || isolatedSuggestions.isolatedResults || [];
if (isolatedItems && isolatedItems.length > 0) {
if (lowValueItems && lowValueItems.length > 0) {
suggestionText += `\n\n🔗 **孤立记忆片段** (建议链接或合并)\n`;
}
else {
suggestionText += `🔗 **孤立记忆片段** (建议链接或合并)\n`;
}
suggestionText += isolatedItems
.filter((result) => result.isIsolated)
.map((result, index) => `${((lowValueItems && lowValueItems.length > 0) ? index + lowValueItems.length + 1 : index + 1)}. [[${result.fragmentName || result.cardName}]] (反向链接数: ${result.backlinkCount})`).join('\n');
suggestionText += `\n\n🔗 **孤立片段处理策略**\n`;
suggestionText += `• **链接到相关片段**:使用 insertLinkAt 在相关记忆片段中添加对此孤立片段的引用\n`;
suggestionText += `• **合并相关片段**:如果内容相关,考虑使用 renameMemory 合并到其他片段\n`;
suggestionText += `• **删除无用片段**:如果内容不再需要,可使用 deleteMemory 删除\n`;
suggestionText += `• **注意系统片段**:确保不尝试修改系统片段(以 <!-- core memory --> 开头的片段)\n\n`;
}
// 如果没有需要优化的片段
if ((!lowValueItems || lowValueItems.length === 0) &&
(!isolatedItems || isolatedItems.length === 0)) {
suggestionText += '✨ 所有记忆片段的信息散度都在合理范围内,且没有发现孤立片段!知识结构已经相当优化!\n\n';
}
suggestionText += `🎯 **维护建议**\n`;
suggestionText += `• 定期使用 getOptimizeSuggestions 检查新增内容\n`;
suggestionText += `• 使用 extractMemory 精确拆分长内容\n`;
suggestionText += `• 使用 insertLinkAt 和 getBacklinks 维护知识网络连接\n`;
suggestionText += `• 保持知识网络的链接密度\n`;
suggestionText += `• 注意系统片段的只读特性,避免尝试修改\n\n`;
suggestionText += `💡 **推荐工具使用**\n`;
suggestionText += `• extractMemory:精确范围内容拆分\n`;
suggestionText += `• insertLinkAt:在相关记忆片段间建立连接\n`;
suggestionText += `• getBacklinks:了解记忆片段间的引用关系\n`;
suggestionText += `• getMemoryHints:查看高权重记忆片段作为参考模式\n`;
suggestionText += `• deleteMemory:删除不需要的记忆片段\n\n`;
suggestionText += `📝 **提示**:通过拆分低信息散度片段和连接孤立片段,可以构建更强大的知识网络`;
return {
content: [{
type: "text",
text: suggestionText
}]
};
}
catch (error) {
return {
content: [{
type: "text",
text: `❌ 获取优化建议失败: ${error && error.message ? error.message : String(error)}`
}]
};
}
};
}
export default createGetOptimizeSuggestionsHandler;
//# sourceMappingURL=createGetOptimizeSuggestionsHandler.js.map