commit 46bd922c08d236c6e99be3a59d478220e92b056d Author: zlei9 Date: Sun Mar 29 14:38:19 2026 +0800 Initial commit with translated description diff --git a/SKILL.md b/SKILL.md new file mode 100644 index 0000000..8078a9f --- /dev/null +++ b/SKILL.md @@ -0,0 +1,65 @@ +--- +name: self-improving-agent +description: "分析对话质量、识别改进机会并持续优化响应策略的自我改进代理系统。" +version: "1.0.0" +author: xiucheng +type: skill +tags: [self-improvement, learning, optimization, reflection, growth] +homepage: https://github.com/xiucheng/self-improving-agent +license: MIT +--- + +# Self-Improving Agent + +An intelligent self-improvement system for OpenClaw agents that analyzes conversation quality and continuously optimizes performance. + +## Features + +- 📊 **Quality Analysis**: Evaluates conversation effectiveness +- 🎯 **Improvement Tracking**: Identifies areas for enhancement +- 📝 **Learning Log**: Records insights and lessons learned +- 📈 **Weekly Reports**: Generates improvement summaries +- 🔄 **Strategy Optimization**: Adapts response patterns over time + +## Installation + +```bash +clawhub install self-improving-agent +``` + +## Usage + +### Automatic Analysis +The skill automatically analyzes conversations after each session. + +### Manual Improvement Logging +```python +from self_improving import SelfImprovingAgent + +sia = SelfImprovingAgent() +sia.log_improvement("Need to be more concise in technical explanations") +``` + +### Generate Weekly Report +```python +report = sia.generate_weekly_report() +print(report) +``` + +## Configuration + +| Setting | Default | Description | +|---------|---------|-------------| +| improvement_log | ./improvement_log.md | Learning log file | +| soul_file | ./SOUL.md | Personality anchor file | +| auto_analyze | true | Auto-analyze conversations | + +## Integration + +Works best with: +- `memory-manager`: For tracking improvement history +- Custom agent personalities (SOUL.md) + +## License + +MIT License - Help agents get better every day! diff --git a/_meta.json b/_meta.json new file mode 100644 index 0000000..6e70105 --- /dev/null +++ b/_meta.json @@ -0,0 +1,6 @@ +{ + "ownerId": "kn7c2cjr3n1gggfqy000zq5g898285x4", + "slug": "xiucheng-self-improving-agent", + "version": "1.0.0", + "publishedAt": 1772840626935 +} \ No newline at end of file diff --git a/self_improving.py b/self_improving.py new file mode 100644 index 0000000..bb285f1 --- /dev/null +++ b/self_improving.py @@ -0,0 +1,201 @@ +#!/usr/bin/env python3 +"""Self-Improving Agent - Continuous improvement system for OpenClaw agents. + +Author: xiucheng +Version: 1.0.0 +License: MIT +""" + +import os +import json +import re +from datetime import datetime, timedelta +from pathlib import Path +from typing import List, Dict, Optional, Any + + +class SelfImprovingAgent: + """Analyzes and improves agent performance over time.""" + + def __init__(self, workspace: str = "/root/.openclaw/workspace"): + """Initialize self-improving agent. + + Args: + workspace: Path to OpenClaw workspace + """ + self.workspace = Path(workspace) + self.improvement_log = self.workspace / "improvement_log.md" + self.soul_file = self.workspace / "SOUL.md" + + def analyze_conversation( + self, + conversation: str, + feedback: Optional[str] = None, + metrics: Optional[Dict] = None + ) -> Dict[str, Any]: + """Analyze conversation quality. + + Args: + conversation: Conversation text to analyze + feedback: Optional user feedback + metrics: Optional performance metrics + + Returns: + Analysis results dict + """ + analysis = { + "timestamp": datetime.now().isoformat(), + "length": len(conversation), + "feedback": feedback, + "improvements": [], + "strengths": [] + } + + # Heuristic analysis + if feedback: + if any(word in feedback for word in ["好", "棒", "优秀", "good", "great"]): + analysis["strengths"].append("Current approach is effective") + if any(word in feedback for word in ["慢", "慢", "slow", "delay"]): + analysis["improvements"].append("Improve response speed") + if any(word in feedback for word in ["长", "啰嗦", "verbose", "long"]): + analysis["improvements"].append("Be more concise") + + # Length-based analysis + if len(conversation) > 5000: + analysis["improvements"].append("Consider summarizing long responses") + elif len(conversation) < 100: + analysis["improvements"].append("Provide more detailed explanations") + else: + analysis["strengths"].append("Response length is appropriate") + + return analysis + + def log_improvement(self, insight: str, category: str = "general") -> None: + """Log an improvement insight. + + Args: + insight: The improvement insight + category: Category (e.g., 'communication', 'technical', 'speed') + """ + timestamp = datetime.now().strftime("%Y-%m-%d %H:%M") + + with open(self.improvement_log, "a", encoding="utf-8") as f: + f.write(f"\n## [{timestamp}] {category}\n") + f.write(f"- {insight}\n") + + def generate_weekly_report(self) -> str: + """Generate weekly improvement report. + + Returns: + Formatted report string + """ + week_start = datetime.now() - timedelta(days=7) + + report_lines = [ + "# 🔄 Self-Improvement Weekly Report", + f"Generated: {datetime.now().strftime('%Y-%m-%d %H:%M')}", + "", + "## 📊 This Week's Insights", + ] + + # Read improvement log + if self.improvement_log.exists(): + with open(self.improvement_log, "r", encoding="utf-8") as f: + content = f.read() + # Count entries from this week + entries = [line for line in content.split("\n## ") + if week_start.strftime("%Y-%m-%d") in line] + report_lines.append(f"- Total improvements logged: {len(entries)}") + else: + report_lines.append("- No improvements logged yet") + + report_lines.extend([ + "", + "## 🎯 Next Week Goals", + "- Continue monitoring conversation quality", + "- Identify patterns in user feedback", + "- Update response strategies based on insights", + "", + "---", + "*Keep improving, one conversation at a time!*" + ]) + + return "\n".join(report_lines) + + def get_improvement_stats(self) -> Dict[str, Any]: + """Get improvement statistics. + + Returns: + Statistics dict + """ + stats = { + "log_exists": self.improvement_log.exists(), + "soul_exists": self.soul_file.exists(), + "total_entries": 0 + } + + if self.improvement_log.exists(): + with open(self.improvement_log, "r", encoding="utf-8") as f: + content = f.read() + stats["total_entries"] = content.count("\n## [") + stats["log_size_kb"] = round(len(content) / 1024, 2) + + return stats + + def suggest_soul_updates(self) -> List[str]: + """Suggest updates to SOUL.md based on learnings. + + Returns: + List of suggested updates + """ + suggestions = [] + + if not self.improvement_log.exists(): + return ["Start logging improvements to generate suggestions"] + + with open(self.improvement_log, "r", encoding="utf-8") as f: + content = f.read() + + # Analyze patterns + if "concise" in content.lower() or "简洁" in content: + suggestions.append("Consider adding 'conciseness' to personality traits") + if "speed" in content.lower() or "慢" in content: + suggestions.append("Consider emphasizing efficiency in work style") + + return suggestions if suggestions else ["No specific updates suggested at this time"] + + +def main(): + """CLI entry point.""" + import argparse + + parser = argparse.ArgumentParser(description="Self-Improving Agent CLI") + parser.add_argument("--log", "-l", help="Log an improvement insight") + parser.add_argument("--category", "-c", default="general", help="Category") + parser.add_argument("--report", "-r", action="store_true", help="Generate weekly report") + parser.add_argument("--stats", "-s", action="store_true", help="Show stats") + parser.add_argument("--suggest", action="store_true", help="Suggest SOUL updates") + + args = parser.parse_args() + + sia = SelfImprovingAgent() + + if args.log: + sia.log_improvement(args.log, args.category) + print(f"✅ Logged: {args.log}") + elif args.report: + print(sia.generate_weekly_report()) + elif args.stats: + print(json.dumps(sia.get_improvement_stats(), indent=2)) + elif args.suggest: + suggestions = sia.suggest_soul_updates() + print("Suggested SOUL.md updates:") + for s in suggestions: + print(f" - {s}") + else: + print("🔄 Self-Improving Agent initialized!") + print(f"Stats: {sia.get_improvement_stats()}") + + +if __name__ == "__main__": + main() diff --git a/skill.yaml b/skill.yaml new file mode 100644 index 0000000..677ff8f --- /dev/null +++ b/skill.yaml @@ -0,0 +1,10 @@ +name: self-improving-agent +description: Self-improving agent system for continuous optimization +version: "1.0.0" +author: xiucheng +type: skill +tags: + - self-improvement + - learning + - optimization +license: MIT