Files
my-assistant/scripts/daily_learning.sh
root 0227d525f9 feat: add daily learning summary script with cron task
- Create scripts/daily_learning.sh for daily chat review
- Set up cron task at 3 AM daily
- Log file: logs/daily_learning.log
- Learning records: memory/daily_learning.md
2026-03-30 03:01:34 +08:00

115 lines
3.8 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# 每日学习总结脚本
# 每天凌晨3点执行回顾当天聊天内容总结学习记录
LOG_FILE="/root/.openclaw/workspace-assistant/logs/daily_learning.log"
MEMORY_FILE="/root/.openclaw/workspace-assistant/memory/daily_learning.md"
SESSION_FILE="/root/.openclaw/agents/dingtalk-assistant/sessions/e89452e7-59d0-46a3-9dec-983cb7863ac5.jsonl"
echo "=== $(date '+%Y-%m-%d %H:%M:%S') 每日学习总结开始 ===" >> "$LOG_FILE"
# 提取聊天记录中的关键内容
python3 << 'PYEOF' >> "$LOG_FILE"
import sys
import json
from datetime import datetime, timezone, timedelta
LOG_FILE = "/root/.openclaw/workspace-assistant/logs/daily_learning.log"
SESSION_FILE = "/root/.openclaw/agents/dingtalk-assistant/sessions/e89452e7-59d0-46a3-9dec-983cb7863ac5.jsonl"
# 北京时区
bj_tz = timezone(timedelta(hours=8))
# 计算24小时前的时间
one_day_ago = datetime.now(bj_tz).timestamp() - 86400
messages = []
try:
with open(SESSION_FILE, 'r') as f:
for line in f:
try:
obj = json.loads(line.strip())
if obj.get('type') == 'message' and obj.get('timestamp'):
ts_str = obj.get('timestamp', '')
try:
if 'T' in ts_str:
ts = datetime.fromisoformat(ts_str.replace('Z', '+00:00')).timestamp()
else:
ts = float(ts_str)
except:
continue
if ts > one_day_ago:
msg = obj.get('message', {})
role = msg.get('role', '')
content = msg.get('content', [])
if isinstance(content, list):
for c in content:
if isinstance(c, dict) and c.get('type') == 'text':
text = c.get('text', '')[:500]
if text:
if 'HEARTBEAT_OK' not in text and 'System:' not in text[:50] and 'Exec completed' not in text[:50] and 'conversation' not in text[:50].lower():
messages.append(f'[{role}] {text[:300]}')
except:
pass
except Exception as e:
print(f"Error: {e}")
# 去重
seen = set()
unique_messages = []
for m in messages:
key = m[:100]
if key not in seen:
seen.add(key)
unique_messages.append(m)
if not unique_messages:
print("没有发现新的聊天内容")
else:
print(f"发现 {len(unique_messages)} 条消息")
# 检测关键主题
topics = []
keywords = ['mcp', 'api', 'skill', '脚本', '配置', '钉钉', '邮件', '日程', '日历', '语音', 'whisper', 'tts', '日志', '周报', '待办', '文档', '审批']
for m in unique_messages:
lower = m.lower()
for kw in keywords:
if kw in lower and kw not in topics:
topics.append(kw)
today = datetime.now().strftime('%Y-%m-%d')
summary = f"""
## 每日学习总结 - {today}
### 涉及的主题
{', '.join(topics) if topics else '无特定主题'}
### 关键对话记录
"""
for m in unique_messages[:50]:
summary += m[:200] + "\n\n"
# 输出到日志
print(summary)
# 保存到记忆文件
MEMORY_FILE = "/root/.openclaw/workspace-assistant/memory/daily_learning.md"
try:
with open(MEMORY_FILE, 'r') as f:
existing = f.read()
except:
existing = ''
if today not in existing:
with open(MEMORY_FILE, 'a') as f:
f.write('\n' + summary)
print("\n已更新学习记录")
else:
print("\n今日已记录跳过")
PYEOF
echo "=== 完成 ===" >> "$LOG_FILE"
echo "完成!"