UNPKG

zettelkasten-memory-server

Version:

基于 Zettelkasten 记忆片段盒方法的 MCP 记忆服务器 v1.6.X

285 lines (255 loc) 11 kB
/** * 提示处理器 - 为 Zettelkasten 系统提供智能提示模板 */ /** * 列出可用的提示模板 */ export function listPrompts() { return { prompts: [ { name: "topic_inspiration", description: "当不知道聊什么话题时,获取重要记忆片段作为话题灵感", arguments: [ { name: "count", description: "获取的话题数量", required: false, type: "string" } ] }, { name: "chat_optimization", description: "聊天结束时,获取系统优化建议,帮助整理和改进知识记忆片段", arguments: [ { name: "threshold", description: "优化阈值(默认 0.1)", required: false, type: "string" } ] } ] }; } /** * 生成特定的提示内容 */ export async function generatePrompt(zettelkastenManager, promptName, args = {}) { switch (promptName) { case "topic_inspiration": const count = args.count ? parseInt(args.count, 10) : 8; return await generateTopicInspiration(zettelkastenManager, isNaN(count) ? 8 : count); case "chat_optimization": const threshold = args.threshold ? parseFloat(args.threshold) : 0.1; return await generateChatOptimization(zettelkastenManager, isNaN(threshold) ? 0.1 : threshold); default: throw new Error(`Unknown prompt: ${promptName}`); } } /** * 生成话题灵感提示 * 使用 getMemoryHints 获取重要记忆片段作为谈话起点 */ async function generateTopicInspiration(manager, count) { try { const hints = await manager.getMemoryHints(count); if (hints.fragmentNames.length === 0) { return { messages: [ { role: "user", content: { type: "text", text: `# 💡 话题灵感 目前您的知识库还是空的。 ## 🚀 开始建议: - 创建第一张记忆片段记录您感兴趣的概念 - 使用 \`setMemory("概念名", "内容")\` 开始构建您的知识网络 - 记住使用 [[链接]] 语法连接相关概念 开始您的知识之旅吧!` } } ] }; } // 按权重分组记忆片段 const highPriorityFragments = hints.fragmentNames.filter((_, i) => hints.weights[i].weight > 1.5); const mediumPriorityFragments = hints.fragmentNames.filter((_, i) => hints.weights[i].weight >= 1.0 && hints.weights[i].weight <= 1.5); const normalFragments = hints.fragmentNames.filter((_, i) => hints.weights[i].weight < 1.0); return { messages: [ { role: "user", content: { type: "text", text: `# 💡 今天聊什么?话题灵感来了! 基于您的知识网络,这里有一些有趣的话题可以探索: ${highPriorityFragments.length > 0 ? `## 🔥 核心话题 (高价值概念) ${highPriorityFragments.slice(0, 3).map((fragment, i) => { const index = hints.fragmentNames.indexOf(fragment); return `**${i + 1}. [[${fragment}]]** 权重: ${hints.weights[index].weight.toFixed(2)} | 这是您知识网络中的重要节点`; }).join('\n\n')}` : ''} ${mediumPriorityFragments.length > 0 ? `## ⭐ 深度话题 (值得探索) ${mediumPriorityFragments.slice(0, 3).map((fragment, i) => { const index = hints.fragmentNames.indexOf(fragment); return `**${i + 1}. [[${fragment}]]** 权重: ${hints.weights[index].weight.toFixed(2)} | 可以深入展开的概念`; }).join('\n\n')}` : ''} ${normalFragments.length > 0 ? `## 📚 轻松话题 (随意聊聊) ${normalFragments.slice(0, 2).map((fragment, i) => { const index = hints.fragmentNames.indexOf(fragment); return `**${i + 1}. [[${fragment}]]** 权重: ${hints.weights[index].weight.toFixed(2)} | 轻松的聊天话题`; }).join('\n\n')}` : ''} ## 💬 对话建议: - 🎯 **深度探索**:选择一个核心话题,使用 \`getMemory("记忆片段名", 1)\` 展开相关内容 - 🔗 **连接思考**:思考这些概念之间可能的联系 - ✨ **创新思维**:结合不同话题,可能产生新的洞察 - 📝 **记录想法**:对话中的新想法可以创建新记忆片段 随便选一个开始聊吧!每个话题都可能带来意想不到的收获。` } } ] }; } catch (error) { return { messages: [ { role: "user", content: { type: "text", text: `无法获取话题灵感: ${error instanceof Error ? error.message : 'Unknown error'} 建议检查知识库是否正确初始化。` } } ] }; } } /** * 生成聊天优化建议提示 * 使用 getOptimizeSuggestions 提供系统维护建议 */ async function generateChatOptimization(manager, threshold) { try { const suggestions = await manager.getOptimizeSuggestions(threshold, 10); const hints = await manager.getMemoryHints(20); // 获取更多数据用于分析 const totalFragments = hints.fragmentNames.length; const avgWeight = hints.weights.length > 0 ? hints.weights.reduce((a, b) => a + b.weight, 0) / hints.weights.length : 0; if (suggestions.fragmentNames.length === 0 && totalFragments > 0) { return { messages: [ { role: "user", content: { type: "text", text: `# 🎉 聊天总结与系统状态 ## ✨ 系统健康状态:优秀! 📊 **当前统计:** - 总记忆片段数:${totalFragments} - 平均权重:${avgWeight.toFixed(3)} - 系统健康度:🟢 优秀 🏆 **恭喜!** 您的知识库维护得很好: - ✅ 所有记忆片段都有良好的价值密度 - ✅ 没有发现低质量内容 - ✅ 知识网络结构合理 ## 💡 持续改进建议: 1. **保持连接**:继续在相关概念间建立 [[链接]] 2. **定期回顾**:偶尔重读重要记忆片段,可能有新的理解 3. **适度拓展**:基于现有知识,探索相关新领域 4. **质量优先**:继续保持每张记忆片段的原子化和精准性 感谢这次愉快的对话!您的知识网络正在健康成长。🌱` } } ] }; } if (suggestions.fragmentNames.length === 0 && totalFragments === 0) { return { messages: [ { role: "user", content: { type: "text", text: `# 👋 聊天总结 ## 🚀 新的开始 看起来这是您第一次使用 Zettelkasten 系统! ## 📝 接下来可以做的: 1. **记录今天的想法**:将我们聊天中有价值的内容记录为记忆片段 2. **开始建立基础**:创建一些核心概念记忆片段 3. **建立连接**:使用 [[链接]] 语法连接相关概念 期待您的知识网络慢慢成长!每一张记忆片段都是智慧的积累。` } } ] }; } // 有优化建议的情况 return { messages: [ { role: "user", content: { type: "text", text: `# 📋 聊天总结与优化建议 ## 📊 系统状态概览 - 总记忆片段数:${totalFragments} - 平均权重:${avgWeight.toFixed(3)} - 需要优化的记忆片段:${suggestions.fragmentNames.length} ## 🔧 发现的优化机会 ${suggestions.fragmentNames.map((fragmentName, i) => { const valueObj = suggestions.values[i]; const issue = valueObj.value < 0.01 ? "内容过长且引用较少" : valueObj.value < 0.05 ? "内容相对冗长" : "引用频率较低"; const action = valueObj.value < 0.01 ? "考虑拆分为多个小记忆片段" : valueObj.value < 0.05 ? "精简内容,突出核心" : "增加与其他记忆片段的连接"; return `### ${i + 1}. [[${fragmentName}]] **价值指数**: ${valueObj.value.toFixed(4)} **主要问题**: ${issue} **建议行动**: ${action}`; }).join('\n\n')} ## 🛠️ 优化行动计划 ### 立即可做的: 1. **审查内容**:使用 \`getMemory("记忆片段名")\` 查看上述记忆片段 2. **精简重写**:保留核心概念,去掉冗余信息 3. **拆分大记忆片段**:一个概念一张记忆片段的原则 ### 长期改进: 1. **增加链接**:在相关记忆片段间建立 [[连接]] 2. **定期维护**:每段时间运行一次优化检查 3. **质量优先**:创建新记忆片段时注意保持原子化 ## 🔄 重复读取限制机制 - 已启用重复读取限制,避免不必要的重复操作 - 编辑操作前请确保已获取最新内容 - 使用 \`getMemory\` 获取内容后,可直接进行编辑操作 ## 💭 今日对话收获 感谢这次对话!建议将有价值的讨论内容记录为新记忆片段,保持知识的持续积累。 🌟 记住:好的知识管理系统需要定期维护,就像花园需要修剪一样。` } } ] }; } catch (error) { return { messages: [ { role: "user", content: { type: "text", text: `# 聊天总结 无法生成优化建议: ${error instanceof Error ? error.message : 'Unknown error'} 不过感谢这次愉快的对话!记得保存有价值的内容到您的知识库中。` } } ] }; } } //# sourceMappingURL=promptHandlers.js.map