Skip to main content
Glama

MemOS-MCP

by qinshu1109
Apache 2.0
3
  • Linux
  • Apple
daily_review.py10 kB
#!/usr/bin/env python3 """ MemOS 每日回顾模块 生成美观的Markdown格式每日记忆回顾报告 """ import os import json from pathlib import Path from datetime import datetime, timedelta from typing import Dict, Any, List, Optional from mvp_memory import MVPMemoryManager class DailyReviewGenerator: """每日回顾生成器""" def __init__(self, data_dir: str = "./memos_data"): """初始化每日回顾生成器""" self.data_dir = Path(data_dir) self.review_dir = self.data_dir / "daily_reviews" self.review_dir.mkdir(exist_ok=True) # 初始化MVP记忆管理器 self.mvp_manager = MVPMemoryManager(data_dir) def generate_daily_review(self, date: Optional[str] = None) -> str: """生成指定日期的每日回顾""" if date is None: date = datetime.now().strftime("%Y-%m-%d") print(f"📅 正在生成 {date} 的每日回顾...") # 获取当日记忆 daily_memories = self.mvp_manager.get_daily_memories(date) # 生成Markdown内容 markdown_content = self._generate_markdown_report(date, daily_memories) # 保存到文件 review_file = self.review_dir / f"{date}.md" with open(review_file, 'w', encoding='utf-8') as f: f.write(markdown_content) print(f"✅ 每日回顾已保存到: {review_file}") return str(review_file) def _generate_markdown_report(self, date: str, memories: List[Dict[str, Any]]) -> str: """生成Markdown格式的回顾报告""" # 统计信息 total_memories = len(memories) tags_count = {} for memory in memories: if 'metadata' in memory and memory['metadata']: metadata = memory['metadata'] if 'tags' in metadata and metadata['tags']: for tag in metadata['tags']: tags_count[tag] = tags_count.get(tag, 0) + 1 # 生成Markdown内容 markdown = f"""# 📅 {date} 每日记忆回顾 ## 📊 统计概览 - **记忆总数**: {total_memories} 条 - **生成时间**: {datetime.now().strftime("%Y-%m-%d %H:%M:%S")} """ # 标签统计 if tags_count: markdown += "## 🏷️ 标签统计\n\n" sorted_tags = sorted(tags_count.items(), key=lambda x: x[1], reverse=True) for tag, count in sorted_tags: markdown += f"- **{tag}**: {count} 条\n" markdown += "\n" # 记忆详情 if memories: markdown += "## 📝 记忆详情\n\n" for i, memory in enumerate(memories, 1): content = memory.get('content', 'N/A') markdown += f"### {i}. {content[:50]}{'...' if len(content) > 50 else ''}\n\n" markdown += f"**完整内容**: {content}\n\n" if 'metadata' in memory and memory['metadata']: metadata = memory['metadata'] if 'tags' in metadata and metadata['tags']: tags_str = ', '.join(metadata['tags']) markdown += f"**标签**: {tags_str}\n\n" if 'timestamp' in metadata: markdown += f"**时间**: {metadata['timestamp']}\n\n" if 'source' in metadata: markdown += f"**来源**: {metadata['source']}\n\n" markdown += "---\n\n" else: markdown += "## 📝 记忆详情\n\n" markdown += "今日暂无记忆记录。\n\n" # 添加回顾建议 markdown += self._generate_review_suggestions(memories, tags_count) return markdown def _generate_review_suggestions(self, memories: List[Dict[str, Any]], tags_count: Dict[str, int]) -> str: """生成回顾建议""" suggestions = "## 💡 回顾建议\n\n" if not memories: suggestions += "- 今日没有记录任何记忆,建议明天多使用一键记忆功能记录重要信息\n" suggestions += "- 可以尝试记录学习心得、工作进展或生活感悟\n\n" return suggestions # 基于记忆数量的建议 if len(memories) < 3: suggestions += "- 今日记忆较少,建议增加记录频率\n" elif len(memories) > 10: suggestions += "- 今日记忆丰富,建议定期整理和分类\n" else: suggestions += "- 今日记忆数量适中,保持良好的记录习惯\n" # 基于标签的建议 if tags_count: most_common_tag = max(tags_count.items(), key=lambda x: x[1]) suggestions += f"- 今日最关注的主题是「{most_common_tag[0]}」,可以考虑深入学习\n" if len(tags_count) == 1: suggestions += "- 建议扩展记录范围,涵盖更多主题领域\n" else: suggestions += "- 建议为记忆添加标签,便于后续分类和检索\n" suggestions += "\n" return suggestions def generate_weekly_summary(self, end_date: Optional[str] = None) -> str: """生成周总结""" if end_date is None: end_date = datetime.now().strftime("%Y-%m-%d") end_dt = datetime.strptime(end_date, "%Y-%m-%d") start_dt = end_dt - timedelta(days=6) # 7天 print(f"📊 正在生成 {start_dt.strftime('%Y-%m-%d')} 到 {end_date} 的周总结...") # 收集一周的记忆 weekly_memories = [] daily_stats = {} for i in range(7): current_date = (start_dt + timedelta(days=i)).strftime("%Y-%m-%d") daily_memories = self.mvp_manager.get_daily_memories(current_date) weekly_memories.extend(daily_memories) daily_stats[current_date] = len(daily_memories) # 生成周总结Markdown week_range = f"{start_dt.strftime('%Y-%m-%d')}_to_{end_date}" markdown_content = self._generate_weekly_markdown(week_range, weekly_memories, daily_stats) # 保存文件 summary_file = self.review_dir / f"weekly_{week_range}.md" with open(summary_file, 'w', encoding='utf-8') as f: f.write(markdown_content) print(f"✅ 周总结已保存到: {summary_file}") return str(summary_file) def _generate_weekly_markdown(self, week_range: str, memories: List[Dict[str, Any]], daily_stats: Dict[str, int]) -> str: """生成周总结Markdown""" total_memories = len(memories) avg_daily = total_memories / 7 markdown = f"""# 📊 {week_range} 周总结 ## 📈 整体统计 - **总记忆数**: {total_memories} 条 - **日均记忆**: {avg_daily:.1f} 条 - **生成时间**: {datetime.now().strftime("%Y-%m-%d %H:%M:%S")} ## 📅 每日分布 """ for date, count in daily_stats.items(): bar = "█" * min(count, 20) # 最多20个字符的条形图 markdown += f"- **{date}**: {count} 条 {bar}\n" markdown += "\n" # 标签统计 tags_count = {} for memory in memories: if 'metadata' in memory and memory['metadata']: metadata = memory['metadata'] if 'tags' in metadata and metadata['tags']: for tag in metadata['tags']: tags_count[tag] = tags_count.get(tag, 0) + 1 if tags_count: markdown += "## 🏷️ 热门标签\n\n" sorted_tags = sorted(tags_count.items(), key=lambda x: x[1], reverse=True)[:10] for tag, count in sorted_tags: markdown += f"- **{tag}**: {count} 次\n" markdown += "\n" # 周回顾建议 markdown += "## 💭 周回顾\n\n" if total_memories == 0: markdown += "本周没有记录任何记忆,建议下周开始使用MemOS记录重要信息。\n\n" elif total_memories < 7: markdown += "本周记忆较少,建议增加记录频率,每天至少记录一条重要信息。\n\n" else: markdown += "本周记忆记录良好,继续保持这个习惯!\n\n" if tags_count: most_active_tag = max(tags_count.items(), key=lambda x: x[1]) markdown += f"本周最关注的主题是「{most_active_tag[0]}」,可以考虑深入总结相关经验。\n\n" return markdown def backup_memories(self, backup_name: Optional[str] = None) -> str: """备份所有记忆""" if backup_name is None: backup_name = f"backup_{datetime.now().strftime('%Y%m%d_%H%M%S')}" backup_dir = self.data_dir / "backups" / backup_name print(f"💾 正在备份记忆到: {backup_dir}") success = self.mvp_manager.dump_memories(str(backup_dir)) if success: print(f"✅ 记忆备份完成: {backup_dir}") return str(backup_dir) else: print("❌ 记忆备份失败") return "" def main(): """主函数 - 用于测试""" generator = DailyReviewGenerator() # 生成今日回顾 today_review = generator.generate_daily_review() print(f"今日回顾: {today_review}") # 生成周总结 weekly_summary = generator.generate_weekly_summary() print(f"周总结: {weekly_summary}") # 备份记忆 backup_path = generator.backup_memories() print(f"备份路径: {backup_path}") if __name__ == "__main__": main()

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/qinshu1109/memos-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server