Install
openclaw skills install @fyniujin/zwjh-skill会进化的 skill - 自动读取每日记忆文件,分析对话记录,提取经验教训,生成改进建议。支持定时任务、智能记忆分析、模式识别、自动更新长期记忆、进化报告生成。含首次使用向导、详细错误诊断、自动修复建议。
openclaw skills install @fyniujin/zwjh-skill| 我想做 | 直接说 |
|---|---|
| 分析今天的对话,提取经验 | "分析今天的记忆" |
| 生成改进建议 | "我有哪些可以改进的地方?" |
| 查看进化历史 | "我的进化历程" |
| 手动触发一次自我学习 | "开始自我学习" |
| 设置自动进化任务 | "每天自动分析记忆" |
| 生成进化报告 | "我进步了吗?" |
| 第一次使用,快速配置 | "帮我配置" |
不需要你手动创建文件或配置环境。对 AI 说
"帮我配置",AI 自动完成一切。
| 步骤 | AI 做什么 | 你需要做什么 |
|---|---|---|
| ① | 检测环境:检查 Python、记忆目录、MEMORY.md 是否存在 | 坐着看 |
| ② | 自动创建缺失的目录和文件(如有需要) | 确认一下 |
| ③ | 展示示例分析(用模拟数据演示效果) | 看效果 |
💡 关键:不需要先有对话记录。即使用户是第一次安装,AI 也会用模拟数据演示功能,让用户立刻看到效果。
传统 skill 是静态的——你安装后它就不会变。会进化的 skill 是动态的:
传统 skill:安装 → 使用 → 一成不变
会进化的 skill:安装 → 使用 → 分析 → 学习 → 进化 → 更好
每日对话 → 记录到 memory/YYYY-MM-DD.md
↓
定时任务触发(或手动触发)
↓
读取记忆文件 → 智能分析对话模式
↓
提取经验教训 → 识别改进点
↓
更新 MEMORY.md(长期记忆)
↓
生成改进建议 → 应用到下次对话
↓
循环 → 持续进化
本 Skill 能做到的:
本 Skill 做不到的:
本 Skill 的本质:一个经验整理助手,帮你从对话中提炼经验,而不是一个能真正"进化"的AI。
用途:读取每日记忆文件,智能分析对话记录,提取关键信息。
常你说:"分析今天的记忆" / "看看我学到了什么"
运行效果示例:
═══════════════════════════════════════════
📊 今日记忆分析报告 (2026-06-26)
═══════════════════════════════════════════
总对话行数: 45
用户提问数: 8
提取经验数: 3
情绪倾向: 😊 积极 (+5/-2)
───────────────────────────────────────────
📝 今日话题 TOP5:
1. skill: 3次
2. 分析: 2次
3. 记忆: 2次
4. 经验: 2次
5. 进化: 1次
💡 提取的经验教训:
1. ClawHub 发布需要 clh_ 开头的 token
2. PowerShell 脚本执行前需要检查执行策略
3. 用户偏好简洁的回答,不要长篇大论
📚 涉及话题:
- 创建 Skill
- 发布到 ClawHub
- 记忆分析
═══════════════════════════════════════════
import os
import re
from datetime import date
from collections import Counter
def analyze_memory():
"""智能记忆分析:提取话题、经验、情绪、模式"""
today = date.today().strftime("%Y-%m-%d")
memory_dir = os.path.join(os.path.expanduser("~"), ".workbuddy", "memory")
today_file = os.path.join(memory_dir, f"{today}.md")
if not os.path.exists(today_file):
print(f"📭 今日 ({today}) 没有记忆文件")
print(" 💡 解决: 先和 AI 对话,记忆文件会自动生成")
return None
with open(today_file, 'r', encoding='utf-8') as f:
content = f.read()
if not content.strip():
print(f"📭 今日记忆文件为空")
print(" 💡 解决: 先和 AI 对话,记忆文件会自动生成")
return None
lines = content.split('\n')
total_lines = len([l for l in lines if l.strip()])
user_messages = []
patterns = [
r'^(?:用户[::]|\*\*用户\*\*|<user_query>|用户[::])\s*(.+)',
r'^(?:提问|问题|问[::])\s*(.+)',
]
for line in lines:
line = line.strip()
if not line:
continue
for pattern in patterns:
match = re.match(pattern, line)
if match:
msg = match.group(1).strip()
if len(msg) > 3:
user_messages.append(msg)
break
lessons = []
lesson_patterns = [
r'(?:注意|记住|学到|经验|教训|改进|建议|应该|避免|确保|重要|关键|核心|总结|反思|提醒|切记|千万不要|以后遇到|下次遇到)[::]?\s*(.+)',
r'(?:问题|错误|报错|失败|不行|不对|缺陷|bug|坑)[::]?\s*(.+)',
r'(?:解决|修复|处理|方案|办法|建议|推荐|应该|可以|能够|需要|必须)[::]?\s*(.+)',
]
for line in lines:
for pattern in lesson_patterns:
matches = re.findall(pattern, line, re.IGNORECASE)
lessons.extend([m.strip() for m in matches if len(m.strip()) > 5])
topics = re.findall(r'^#{1,3}\s+(.+)$', content, re.MULTILINE)
positive_words = ['好', '棒', '成功', '完成', '解决', '学到', '进步', '满意', '感谢', '喜欢']
negative_words = ['错', '失败', '问题', '报错', '不行', '麻烦', '困难', '卡住', '困惑']
pos_count = sum(1 for w in positive_words if w in content)
neg_count = sum(1 for w in negative_words if w in content)
mood = "😊 积极" if pos_count > neg_count else ("😔 消极" if neg_count > pos_count else "😐 中性")
print(f"═══════════════════════════════════════════")
print(f" 📊 今日记忆分析报告 ({today})")
print(f"═══════════════════════════════════════════")
print(f" 总对话行数: {total_lines}")
print(f" 用户提问数: {len(user_messages)}")
print(f" 提取经验数: {len(lessons)}")
print(f" 情绪倾向: {mood} (+{pos_count}/-{neg_count})")
print(f"───────────────────────────────────────────")
if user_messages:
print(f"\n 📝 今日话题 TOP5:")
all_text = ' '.join(user_messages)
words = [w for w in re.findall(r'[\u4e00-\u9fff\w]+', all_text) if len(w) > 2]
for i, (word, cnt) in enumerate(Counter(words).most_common(5), 1):
print(f" {i}. {word}: {cnt}次")
if lessons:
print(f"\n 💡 提取的经验教训:")
for i, lesson in enumerate(lessons[:5], 1):
print(f" {i}. {lesson}")
if topics:
print(f"\n 📚 涉及话题:")
for topic in topics[:5]:
print(f" - {topic}")
print(f"\n═══════════════════════════════════════════")
return {'date': today, 'total_lines': total_lines, 'user_messages': len(user_messages), 'lessons': lessons, 'topics': topics, 'mood': mood}
if __name__ == "__main__":
analyze_memory()
风险等级:🟢 无(只读分析)
⚠️ 可能遇到的坑:
| 报错/问题 | 原因 | 解决 |
|---|---|---|
| 文件不存在 | 今天没有对话 | 正常,明天再分析;或说"帮我配置"用模拟数据演示 |
| 提取不到经验 | 对话中没有明确经验表述 | 正常,不是每次对话都有教训 |
| 编码错误 | 文件编码不对 | 确保文件是 UTF-8 |
| 提取不准确 | 对话格式不规范 | 建议按标准格式记录 |
用途:从对话历史中识别重复模式、常见错误,并自动给出修复建议。
常你说:"我犯了什么错?" / "帮我看看有什么问题"
运行效果示例:
═══════════════════════════════════════════
🔍 模式分析报告(最近7天)
═══════════════════════════════════════════
❌ 常见错误 TOP5:
1. [3次] ClawHub 发布需要 clh_ 开头的 token,不是 sk-ent-
→ 自动修复: 检查 token 类型,publish 时用 clh_ 开头
2. [2次] 权限不足,无法访问 C:\Windows\System32
→ 自动修复: 以管理员身份运行 PowerShell,或跳过系统目录
3. [2次] ModuleNotFoundError: No module named 'PIL'
→ 自动修复: pip install Pillow
📚 高频话题 TOP5:
1. [4次] 创建 Skill
2. [3次] 发布到 ClawHub
3. [2次] 记忆分析
💡 改进建议:
1. 最近频繁遇到「ClawHub 发布需要 clh_ 开头的 token」错误
→ 建议: 检查 token 类型,publish 时用 clh_ 开头
→ 命令: clawhub login --token clh_xxx
2. 最近频繁遇到「权限不足」错误
→ 建议: 以管理员身份运行,或避免操作系统目录
→ 命令: 右键 PowerShell → 以管理员身份运行
3. 建议每次遇到错误后记录到记忆文件中
═══════════════════════════════════════════
import os, re
from datetime import date, timedelta
from collections import Counter
def analyze_patterns(days=7):
memory_dir = os.path.join(os.path.expanduser("~"), ".workbuddy", "memory")
today = date.today()
all_errors = []
all_topics = []
error_contexts = {}
for i in range(days):
d = today - timedelta(days=i)
fname = os.path.join(memory_dir, f"{d.strftime('%Y-%m-%d')}.md")
if not os.path.exists(fname):
continue
with open(fname, 'r', encoding='utf-8') as f:
content = f.read()
error_patterns = [
r'(?:报错|错误|失败|不行|不对|问题|无法|不能|不支持|缺陷|bug|坑)[::]?\s*(.+)',
r'(?:Exception|Error|Failed|Traceback|错误码)[::]?\s*(.+)',
]
lines = content.split('\n')
for idx, line in enumerate(lines):
for pattern in error_patterns:
matches = re.findall(pattern, line, re.IGNORECASE)
for match in matches:
all_errors.append(match)
start = max(0, idx-2)
end = min(len(lines), idx+3)
context = '\n'.join(lines[start:end])
if match not in error_contexts:
error_contexts[match] = []
error_contexts[match].append(context)
topics = re.findall(r'^#{1,3}\s+(.+)$', content, re.MULTILINE)
all_topics.extend(topics)
print(f"═══════════════════════════════════════════")
print(f" 🔍 模式分析报告(最近{days}天)")
print(f"═══════════════════════════════════════════")
if all_errors:
print(f"\n ❌ 常见错误 TOP5:")
error_counter = Counter(all_errors)
for i, (err, cnt) in enumerate(error_counter.most_common(5), 1):
print(f" {i}. [{cnt}次] {err[:50]}")
if err in error_contexts and error_contexts[err]:
context_preview = error_contexts[err][0].split('\n')[0][:60]
print(f" 上下文: {context_preview}...")
if all_topics:
print(f"\n 📚 高频话题 TOP5:")
topic_counter = Counter(all_topics)
for i, (topic, cnt) in enumerate(topic_counter.most_common(5), 1):
print(f" {i}. [{cnt}次] {topic}")
print(f"\n 💡 改进建议(含自动修复方案):")
if all_errors:
top_errors = [e for e, c in Counter(all_errors).most_common(3)]
for i, err in enumerate(top_errors, 1):
print(f" {i}. 最近频繁遇到「{err[:30]}」错误")
err_lower = err.lower()
if 'token' in err_lower or 'key' in err_lower:
print(f" → 修复: 检查 API Key 是否正确、是否已激活")
print(f" → 命令: clawhub login --token clh_xxx")
elif 'permission' in err_lower or 'denied' in err_lower or '权限' in err_lower:
print(f" → 修复: 以管理员身份运行,或避免操作系统目录")
print(f" → 命令: 右键 PowerShell → 以管理员身份运行")
elif 'module' in err_lower or 'import' in err_lower or 'pil' in err_lower:
print(f" → 修复: 安装缺失的 Python 库")
print(f" → 命令: pip install Pillow")
elif 'network' in err_lower or 'url' in err_lower or 'connection' in err_lower:
print(f" → 修复: 检查网络连接,可能需要代理/VPN")
print(f" → 命令: 检查代理设置")
elif 'publish' in err_lower or 'clawhub' in err_lower:
print(f" → 修复: 检查 ClawHub CLI 是否已登录")
print(f" → 命令: clawhub whoami")
else:
print(f" → 修复: 记录错误详情,下次遇到时参考")
print(f" {len(top_errors)+1}. 建议每次遇到错误后记录到记忆文件中")
else:
print(f" 最近没有明显错误,继续保持!")
print(f"\n═══════════════════════════════════════════")
if __name__ == "__main__":
analyze_patterns(days=7)
风险等级:🟢 无(只读分析)
用途:将分析结果写入 MEMORY.md,实现长期经验积累。
常你说:"更新我的长期记忆" / "记住这个经验"
运行效果示例:
✅ 已更新 MEMORY.md,新增 3 条经验
- [2026-06-26] 📝 一般经验: 用户偏好简洁的回答,不要长篇大论
- [2026-06-26] 💡 改进建议: PowerShell 脚本执行前需要检查执行策略
- [2026-06-26] ❌ 错误经验: ClawHub 发布需要 clh_ 开头的 token,不是 sk-ent-
import os, re
from datetime import date
def update_memory(lessons, category="general"):
memory_dir = os.path.join(os.path.expanduser("~"), ".workbuddy", "memory")
memory_file = os.path.join(memory_dir, "MEMORY.md")
if os.path.exists(memory_file):
with open(memory_file, 'r', encoding='utf-8') as f:
content = f.read()
else:
content = "# 长期记忆\n\n"
existing_entries = content.split('\n')
new_entries = []
for lesson in lessons:
if len(lesson) < 5:
continue
is_duplicate = False
lesson_lower = lesson.lower()
for existing in existing_entries:
existing_lower = existing.lower()
if lesson_lower in existing_lower or existing_lower in lesson_lower:
is_duplicate = True
break
lesson_words = set(re.findall(r'\w+', lesson_lower))
existing_words = set(re.findall(r'\w+', existing_lower))
if lesson_words and existing_words:
similarity = len(lesson_words & existing_words) / max(len(lesson_words), len(existing_words))
if similarity > 0.7:
is_duplicate = True
break
if not is_duplicate:
today = date.today().strftime("%Y-%m-%d")
if any(kw in lesson_lower for kw in ['错误', '问题', '失败', 'bug', '坑']):
tag = "❌ 错误经验"
elif any(kw in lesson_lower for kw in ['建议', '应该', '推荐', '最好']):
tag = "💡 改进建议"
elif any(kw in lesson_lower for kw in ['技巧', '方法', '步骤', '流程']):
tag = "🔧 实用技巧"
else:
tag = "📝 一般经验"
new_entries.append(f"- [{today}] {tag}: {lesson}")
if new_entries:
if not content.endswith('\n'):
content += '\n'
content += '\n'.join(new_entries) + '\n'
with open(memory_file, 'w', encoding='utf-8') as f:
f.write(content)
print(f"✅ 已更新 MEMORY.md,新增 {len(new_entries)} 条经验")
for entry in new_entries:
print(f" {entry}")
else:
print(f"ℹ️ 没有新的经验需要更新(都已存在或太短)")
if __name__ == "__main__":
sample_lessons = [
"用户偏好简洁的回答,不要长篇大论",
"PowerShell 脚本执行前需要检查执行策略",
"ClawHub 发布需要 clh_ 开头的 token,不是 sk-ent-",
]
update_memory(sample_lessons)
风险等级:🟡 中(修改 MEMORY.md,但只追加不删除)
⚠️ 安全保护机制:
| 保护项 | 方式 |
|---|---|
| 只追加不删除 | 新经验追加到末尾,不修改已有内容 |
| 智能去重 | 多种策略:完全包含+相似度检查 |
| 自动分类 | 根据关键词自动打标签 |
| 长度过滤 | 太短的条目(<5字符)自动过滤 |
| 日期标记 | 每条经验标注添加日期 |
⚠️ 可能遇到的坑:
| 报错/问题 | 原因 | 解决 |
|---|---|---|
| MEMORY.md 不存在 | 首次使用 | 自动创建 |
| 写入权限不足 | 文件被占用 | 关闭其他程序后重试 |
| 分类不准确 | 关键词匹配有限 | 可手动调整标签 |
用途:设置定时任务,每天自动执行记忆分析和学习。
常你说:"每天自动分析记忆" / "设置自动进化"
在 WorkBuddy 对话中直接说:
"创建一个每天23:00自动分析记忆的定时任务"
AI 会自动创建 automation,每天23:00触发。无需手动配置。
$action = New-ScheduledTaskAction -Execute "python" -Argument "analyze_memory.py" -WorkingDirectory "$env:USERPROFILE\.workbuddy\memory"
$trigger = New-ScheduledTaskTrigger -Daily -At "23:00"
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries
Register-ScheduledTask -TaskName "WorkBuddy_DailyMemoryAnalysis" -Action $action -Trigger $trigger -Settings $settings -Description "每日分析 WorkBuddy 记忆文件,提取经验教训"
crontab -e
0 23 * * * /usr/bin/python3 /home/用户名/.workbuddy/memory/analyze_memory.py >> /home/用户名/.workbuddy/memory/analysis.log 2>&1
风险等级:🟡 中(创建系统级定时任务)
⚠️ 安全保护机制:
| 保护项 | 方式 |
|---|---|
| 只读分析 | 定时任务只读取文件,不修改系统 |
| 错误隔离 | 单次失败不影响下次执行 |
| 日志记录 | 执行结果记录到日志 |
⚠️ 可能遇到的坑:
| 报错/问题 | 原因 | 解决 |
|---|---|---|
| 任务未触发 | 系统时间不对 | 检查系统时间、时区 |
| Python 未找到 | 环境变量未配置 | 使用 Python 完整路径 |
| 权限不足 | 用户权限不够 | 以管理员/root权限运行 |
用途:生成可视化的进化报告,展示成长轨迹。
常你说:"我的进化报告" / "我进步了吗?"
运行效果示例:
# 🧬 进化报告
**统计周期**: 2026-05-27 ~ 2026-06-26
---
## 📊 汇总统计
- 总对话行数: **342**
- 总经验教训: **28**
- 平均每天: **11** 行对话
- 📈 **趋势**: 近期学习效率提升 (4.3 > 2.8)
## 📅 每日详情
| 日期 | 对话行数 | 经验数 |
|------|---------|--------|
| 2026-06-26 | 45 | 5 |
| 2026-06-25 | 12 | 2 |
| 2026-06-24 | 8 | 1 |
| ... | ... | ... |
📄 报告已保存到: ~/.workbuddy/memory/evolution_report_20260626.md
import os
from datetime import date, timedelta
def generate_evolution_report(days=30):
memory_dir = os.path.join(os.path.expanduser("~"), ".workbuddy", "memory")
today = date.today()
report_lines = []
report_lines.append("# 🧬 进化报告")
report_lines.append(f"\n**统计周期**: {(today - timedelta(days=days)).strftime('%Y-%m-%d')} ~ {today.strftime('%Y-%m-%d')}")
report_lines.append(f"\n---\n")
total_conversations = 0
total_lessons = 0
daily_stats = []
for i in range(days):
d = today - timedelta(days=i)
fname = os.path.join(memory_dir, f"{d.strftime('%Y-%m-%d')}.md")
if os.path.exists(fname):
with open(fname, 'r', encoding='utf-8') as f:
content = f.read()
lines = len([l for l in content.split('\n') if l.strip()])
lessons = len([l for l in content.split('\n') if any(kw in l for kw in ['注意', '记住', '学到', '经验', '教训', '改进', '建议', '应该', '避免'])])
daily_stats.append({'date': d.strftime('%Y-%m-%d'), 'lines': lines, 'lessons': lessons})
total_conversations += lines
total_lessons += lessons
report_lines.append(f"## 📊 汇总统计\n")
report_lines.append(f"- 总对话行数: **{total_conversations}**")
report_lines.append(f"- 总经验教训: **{total_lessons}**")
report_lines.append(f"- 平均每天: **{total_conversations // max(len(daily_stats), 1)}** 行对话")
if len(daily_stats) >= 2:
recent = sum(s['lessons'] for s in daily_stats[:7]) / 7
previous = sum(s['lessons'] for s in daily_stats[7:14]) / 7 if len(daily_stats) >= 14 else 0
if recent > previous:
report_lines.append(f"- 📈 **趋势**: 近期学习效率提升 ({recent:.1f} > {previous:.1f})")
elif recent < previous:
report_lines.append(f"- 📉 **趋势**: 近期学习效率下降 ({recent:.1f} < {previous:.1f})")
else:
report_lines.append(f"- ➡️ **趋势**: 保持稳定")
report_lines.append(f"\n## 📅 每日详情\n")
report_lines.append(f"| 日期 | 对话行数 | 经验数 |")
report_lines.append(f"|------|---------|--------|")
for stat in daily_stats[:10]:
report_lines.append(f"| {stat['date']} | {stat['lines']} | {stat['lessons']} |")
report = '\n'.join(report_lines)
print(report)
report_file = os.path.join(memory_dir, f"evolution_report_{today.strftime('%Y%m%d')}.md")
with open(report_file, 'w', encoding='utf-8') as f:
f.write(report)
print(f"\n📄 报告已保存到: {report_file}")
if __name__ == "__main__":
generate_evolution_report(days=30)
风险等级:🟢 无(只读分析,生成报告文件)
| 不支持 | 原因 | 替代方案 |
|---|---|---|
| 自动修复所有问题 | 本 Skill 只提供建议,不自动执行修复 | 根据建议手动修改 |
| 真正的"自我学习" | 无法改变AI底层模型,只能整理经验 | 定期查看进化报告,手动调整 |
| 100%准确提取经验 | 基于关键词匹配,可能有遗漏 | 手动筛选和补充重要经验 |
| 无记忆文件时自动分析 | 需要 ~/.workbuddy/memory/ 目录存在 | 说"帮我配置"用模拟数据演示 |
| 跨平台自动同步 | 每个平台需要单独配置定时任务 | 参考模块4配置对应平台 |
from zwjh_skill import analyze_memory, update_memory, analyze_patterns
result = analyze_memory()
if result:
print(f"提取到 {len(result['lessons'])} 条经验")
update_memory(["新的经验教训"])
analyze_patterns(days=7)
python zwjh_skill.py
python zwjh_skill.py --days 7
python zwjh_skill.py --report
import subprocess
result = subprocess.run(["python", "zwjh_skill.py"], capture_output=True, text=True)
print(result.stdout)
| 禁止 | 原因 |
|---|---|
| 自动删除 MEMORY.md 原有内容 | 防止丢失历史经验 |
| 未经确认修改其他文件 | 防止意外损坏系统 |
| 自动修改 SKILL.md | 防止自我修改导致不稳定 |
| 在分析过程中泄露用户隐私 | 保护用户隐私 |
| 自动连接外部网络 | 确保数据本地安全 |
| 需求 | 说明 | 检测方法 |
|---|---|---|
| Python 3.13+ | 已使用托管版本 | python --version |
| 记忆文件目录 | ~/.workbuddy/memory/ 需要存在 | ls ~/.workbuddy/memory/ |
| MEMORY.md | 首次使用自动创建 | cat ~/.workbuddy/memory/MEMORY.md |
| 定时任务权限 | 需要系统级权限 | 管理员/root权限 |
直接说 "帮我配置"。AI 会自动检测环境、创建缺失的文件、用模拟数据演示效果。
说 "帮我配置",AI 会用模拟数据演示功能。之后和 AI 对话,记忆文件会自动生成。
不会。系统有智能去重机制,重复的条目不会重复写入。建议定期手动清理过时的条目。
定时任务有错误隔离机制,单次失败不会影响下次执行。建议定期检查执行日志。
系统会统计每日对话行数、提取的经验数量、趋势变化等指标,生成进化报告。
可以。删除定时任务或关闭 automation 即可。
不会。所有分析都在本地进行,不会上传到外部服务器。
提取结果仅供参考。建议:
支持 WorkBuddy、ClawHub、OpenClaw、CodX 等所有使用 ~/.workbuddy/memory/ 目录结构的 AI 助手。
参考「🤖 自动化/程序化调用指引」章节,支持 Python 模块导入和命令行调用。
你: "帮我压缩 D:\photo.jpg"
AI: ✅ 完成
你: "分析今天的记忆"
AI: 📊 分析报告...
💡 提取到 3 条经验
你: "生成本周进化报告"
AI: 📈 本周学习效率提升 20%
💡 建议: 多使用文件操作功能
用户问类似问题
AI: 根据之前的经验,建议这样做...
你: "我遇到了 token 错误"
AI: 根据历史经验,可能是 clh_ 和 sk-ent- 的混用。
建议:检查 token 类型,publish 用 clh_ 开头。
命令:clawhub login --token clh_xxx
| 风险 | 等级 | 防护措施 |
|---|---|---|
| MEMORY.md 被意外修改 | 🟡 中 | 只追加不删除 + 智能去重 + 用户确认 |
| 定时任务占用系统资源 | 🟢 低 | 每天仅执行一次,资源占用极小 |
| 隐私泄露 | 🟢 低 | 所有分析本地完成,不上传 |
| 分析结果不准确 | 🟡 中 | 明确标注"提取结果仅供参考" |
| 依赖缺失 | 🟡 中 | 自动检测并提示安装 |
| 定时任务未触发 | 🟡 中 | 提供多种定时任务方案,支持检测 |