Skill: geosun/wechat-favorites (version 1.1.4)

--- name: wechat-favorites description: 微信收藏夹导出、智能分类与知识库管理。支持从解析后的 favorite.db 导出收藏记录、三级分类体系（一级9类 + 二级57标签 + 跨领域6类）、LLM 智能增强（可选）、批量导入 IMA 知识库（可选）。核心功能支持离线使用，网络功能默认关闭。 metadata: version: 1.1.4 display_name: 微信收藏知识库 --- # 微信收藏知识库 Decrypt, categorize and organize wechat favorites (Official Account collection) into knowledge base 收藏夹导出 · 智能分类 · 知识库导入 **快速上手：** 解析收藏夹 → 导出记录 → 智能分类 → 导入 IMA 知识库 > 💡 **试试这样说：** "帮我整理微信收藏" / "导出收藏夹并分类" / "把微信收藏导入知识库" / "解析 favorite.db 导出文章" --- **触发词：** 微信收藏（WeChat Favorites）、收藏夹导出（favorites export）、收藏文章分类（favorites classification）、IMA 知识库导入（knowledge base import）、收藏整理（favorites organizer）、微信公众号收藏、公众号文章整理 --- ## 为什么用这个工具？ 微信收藏夹积累了大量文章：随手打的标签越来越复杂，待读越积越多，从来没有真正整理过，也不记得读了哪些、学到了什么。这个工具可以： - **自动分类** — 96% 的文章自动归入 9 大类，无需手动整理 - **细粒度标签** — 57 个二级标签，精准定位细分主题 - **跨领域识别** — 自动标注"生物医药+投资"等复合主题 - **LLM 增强** — 低置信度条目用大模型智能重判 - **知识库导入** — 一键导入 IMA，构建个人知识库 ## 实测数据 基于 32,333 篇文章（2014-2025 收藏）： | 指标 | 数值 | |------|------| | 总收藏数 | 36,853 | | 文章数 | 32,333 | | 一级分类覆盖率 | 96.0% (31,088/32,333) | | LLM 重分类成功率 | 98.5% (8,789/8,912) | | 二级标签平均覆盖率 | 35.5% | ## 核心能力 | 能力 | 说明 | |------|------| | **收藏导出** | 从解析后的 `favorite.db` 导出全部收藏记录为 CSV | | **关键词分类** | 一级分类 9 类（生物医药/AI/投资等），关键词匹配自动识别 | | **标签增强** | 二级标签 57 个 + 跨领域标签 6 类，支持多标签组合 | | **LLM 增强（可选）** | 置信度 < 0.4 时自动调用 LLM 二次分类，需配置 API Key | | **IMA导入（可选）** | 批量导入到 IMA 知识库，需配置凭证 | | **报告生成** | 分类统计、各分类 CSV 导出 | ## 前置条件 ### 1. 微信收藏数据库 本工具需要已解析的 `favorite.db` 文件。解析步骤请使用专门的微信数据库处理工具。 ### 2. Python 环境 ```bash pip install pycryptodome zstandard ``` ### 3. IMA 导入（可选） 如需导入 IMA 知识库： 1. 创建 IMA 知识库，获取 `kb_id` 2. 配置凭证：`~/.config/ima/client_id` 和 `~/.config/ima/api_key` ### 4. IMA 导入配置（可选） IMA 凭证支持多种配置方式（优先级从高到低）： | 方式 | 说明 | |------|------| | 命令行参数 | `--client-id`, `--api-key`, `--kb-id` | | 环境变量 | `IMA_CLIENT_ID`, `IMA_API_KEY`, `IMA_KB_ID` | | config.json | `ima_kb_id` 字段 | | 文件 | `~/.config/ima/client_id`, `~/.config/ima/api_key` | ```bash # 方式 1: 命令行参数 python import_ima.py --kb-id YOUR_KB_ID --client-id XXX --api-key YYY # 方式 2: 环境变量 IMA_CLIENT_ID=xxx IMA_API_KEY=yyy python import_ima.py # 方式 3: 配置文件 # 在项目目录创建 config.json，填写 ima_kb_id # 创建 ~/.config/ima/client_id 和 api_key 文件 ``` ## 安全说明 本工具涉及本地文件操作与可选网络调用。所有核心功能（导出 + 本地分类）可在离线环境完成，无需任何网络配置。 | 操作 | 行为 | 数据流向 | 说明 | |------|------|----------|------| | **收藏导出** | 读取已解析的 `favorite.db`，导出为 CSV | 本地只读 | 核心功能，完全离线 | | **智能分类** | 基于关键词本地分类 | 本地计算 | 核心功能，完全离线 | | **LLM 分类** | 可选，将标题/摘要发送至外部 LLM API | 本地 → OpenRouter (可选，需配置) | 默认关闭，不调用外部 API | | **IMA 导入** | 可选，将收藏 URL 列表发送至腾讯 IMA | 本地 → ima.qq.com (可选，需配置) | 默认关闭，不调用外部 API | | **凭证读取** | 读取本地 `~/.config/ima/` 凭证文件 | 本地读取 | 仅 IMA 功能需要，不上传凭证 | **可选功能说明：** - `LLM 分类`：依赖 `llm_classify.py`，通过 OpenRouter API 调用大模型。**默认关闭**，需设置 `LLM_API_URL` 等环境变量才会发起网络请求 - `IMA 导入`：依赖 `import_ima.py`，调用腾讯 IMA 知识库 API。**默认关闭**，需配置 `client_id`/`api_key` 才会发起网络请求 - `SAFE_MODE`：**完全禁用网络功能**，设置 `SAFE_MODE=1` 环境变量即可强制离线模式 - **敏感数据**：LLM 仅发送文章标题和摘要，不发送正文内容； IMA 仅发送收藏的 URL 列表，不包含微信聊天记录 **离线使用方案：** - 导出 + 本地分类：无需网络，无需配置任何 API - LLM 增强：可使用本地模型（修改 `LLM_API_URL` 指向本地 Ollama） - IMA 导入：可选功能，不导入不影响其他功能 **建议：** 在信任的网络环境或离线环境使用，网络功能均为可选，默认关闭。 ## 快速开始 ```bash cd scripts # 0. 验证环境 python quick_validate.py # 1. 解析数据库（如未解析） python decrypt_db.py # 或使用其他工具 # 2. 导出收藏记录 python export_favorites.py # 3. 智能分类（支持 LLM 增强） python classify_favorites.py # 4. 导入 IMA（可选） python import_ima.py ``` ## 目录结构 ``` wechat-favorites/ ├── SKILL.md # 本文件 ├── LICENSE.txt # MIT License ├── CHANGELOG.md # 更新日志 ├── requirements.txt # 依赖声明 ├── config.json # 用户配置（需创建） ├── scripts/ │ ├── quick_validate.py # 环境验证 │ ├── decrypt_db.py # 数据库解析 │ ├── export_favorites.py # 收藏导出 │ ├── classify_favorites.py # 智能分类（一级+二级+跨领域） │ ├── llm_classify.py # LLM 二次分类模块 │ ├── llm_incremental.py # LLM 增量批处理 │ ├── merge_llm_results.py # LLM 结果合并 │ ├── normalize_categories.py # 标签标准化 │ ├── import_ima.py # IMA 导入 │ ├── config.py # 配置加载 │ └── key_utils.py # 密钥工具 ├── decrypted/ # 解析输出 │ └── favorite/favorite.db ├── exported_favorites/ # 导出输出 │ ├── favorites_all.csv # 全部收藏 │ ├── articles_final.csv # 带分类标签 │ ├── cat_biomed.csv # 生物医药分类 │ ├── cat_AI科技.csv # AI 分类 │ └── ... └── references/ ├── classification.md # 分类算法说明 └── schema.md # 数据库结构 ``` ## 数据流程 ``` favorite.db (加密) │ ▼ decrypt_db.py favorite.db (解析后) │ ▼ export_favorites.py favorites_all.csv │ ▼ classify_favorites.py [--llm] articles_final.csv + cat_*.csv │ ▼ import_ima.py IMA 知识库 ``` ## 分类体系 ### 一级分类（9类） | 分类 | 关键词示例 | |------|-----------| | 生物医药 | 创新药、ADC、CAR-T、mRNA、临床试验、靶点、抗体 | | AI科技 | GPT、大模型、Agent、RAG、芯片、GPU、NVIDIA | | 投资金融 | IPO、融资、科创板、估值、基金、VC、PE | | 科学研究 | Nature、Science、论文、神经科学、突破 | | 商业财经 | 企业战略、行业分析、商业模式、宏观 | | 生活方式 | 健康、运动、旅行、读书、电影 | | 媒体资讯 | 新闻、热点、评论、舆论 | | 政治国际 | 国际关系、地缘政治、中美、外交 | | 其他 | 未命中以上分类 | ### 二级标签（57个） 每个一级分类下设细分标签，关键词匹配自动识别： | 一级分类 | 二级标签示例 | |---------|-------------| | 生物医药 | ADC、CAR-T、mRNA、创新药、临床、神经科学、免疫治疗、基因编辑、疫苗、医疗器械... | | AI科技 | 大模型、AI应用、AI医疗、自动驾驶、机器人、GPU、芯片、深度学习、RAG、Agent... | | 投资金融 | VC/PE、二级市场、IPO、并购、估值、私募、公募、债券、量化... | | 科学研究 | 神经科学、物理、化学、生物、材料、天文学、量子计算... | | 商业财经 | 企业战略、行业分析、商业模式、宏观经济、消费、零售... | | 生活方式 | 健康、运动、旅行、读书、电影、美食、教育... | 完整标签列表见 `references/classification.md`。 ### 跨领域标签（6类） 识别跨领域主题，多标签组合： | 跨领域标签 | 触发条件 | |-----------|---------| | 生物医药+投资 | 医药领域 + 融资/IPO/估值关键词 | | AI+医疗 | AI领域 + 医疗/医院/诊断关键词 | | AI+投资 | AI领域 + 融资/IPO/估值关键词 | | 生物医药+AI | 医药领域 + AI/大模型关键词 | | 商业+政治 | 商业领域 + 国际关系/政策关键词 | | 科学+政策 | 科学领域 + 政策/监管关键词 | ## LLM 二次分类 关键词分类置信度不足时，可启用 LLM 二次分类进行智能重判： ```bash # 置信度低于 0.4 时触发 LLM python classify_favorites.py --llm # 全量 LLM 分类（跳过关键词） python classify_favorites.py --llm-only # 自定义触发阈值 python classify_favorites.py --llm --llm-threshold 0.3 ``` **环境变量配置：** | 变量 | 默认值 | 说明 | |------|--------|------| | `LLM_API_URL` | `http://localhost:4200/v1/chat/completions` | API 地址 | | `LLM_MODEL` | `auto` | 模型名称 | | `LLM_CONCURRENCY` | `5` | 最大并发数 | | `LLM_BATCH_SIZE` | `10` | 每批处理数量 | **OpenRouter 配置示例：** ```bash export LLM_API_URL="https://openrouter.ai/api/v1/chat/completions" export LLM_MODEL="deepseek/deepseek-chat" export LLM_API_KEY="your-openrouter-api-key" ``` ## 输出文件说明 | 文件 | 内容 | |------|------| | `favorites_all.csv` | 全部收藏记录 | | `articles_final.csv` | 带 `category`、`subcategory`、`cross_domain` 标签的文章 | | `cat_*.csv` | 各分类单独文件 | | `llm_checkpoint.json` | LLM 分类断点（增量处理） | | `ima_import_state.json` | IMA 导入进度（断点续传） | | `ima_import.log` | IMA 导入日志 | **CSV 字段说明：** | 字段 | 说明 | |------|------| | `local_id` | 原始记录 ID | | `title` | 文章标题 | | `url` | 文章链接 | | `desc` | 摘要 | | `source` | 来源公众号 | | `create_time` | 收藏时间 | | `category` | 一级分类 | | `subcategory` | 二级标签（多个用逗号分隔） | | `cross_domain` | 跨领域标签（多个用逗号分隔） | | `confidence` | 分类置信度 | ## favorite.db 表结构 ```sql CREATE TABLE fav_db_item ( local_id INTEGER PRIMARY KEY, fav_local_type INTEGER, -- 类型：1=文章, 3=图片, 等 status INTEGER, create_time INTEGER, -- 收藏时间戳 source_id TEXT, -- 来源 wxid source_type INTEGER, content BLOB, -- XML 内容 WCDB_CT_content INTEGER -- 压缩标记：4=zstd ); ``` content 字段解析： - `<title>` 标题 - `<url>` 链接 - `<source>` 来源公众号 - `<description>` 摘要 ## 常见问题 **Q: 收藏数据不完整？** A: 检查 `favorite.db` 最后修改时间，微信可能未同步最新数据。 **Q: IMA 导入被限流？** A: API 限流约 200 次/小时，脚本已内置 3 秒/批的限速。 **Q: 如何新增分类？** A: 编辑 `classify_favorites.py` 中的 `CATEGORIES` 字典。 **Q: 解析失败？** A: 确保密钥正确，检查 `all_keys.json` 是否包含 `favorite.db` 的密钥。 **Q: LLM 分类中断了怎么办？** A: 脚本自动保存断点到 `llm_checkpoint.json`，重新运行会从中断处继续。 ## 技术细节 ### SQLCipher 4 参数 - 加密：AES-256-CBC + HMAC-SHA512 - KDF：PBKDF2-HMAC-SHA512，256,000 iterations - 页面：4096 bytes，reserve = 80 ### 支持平台 | 平台 | 解析支持 | |------|---------| | Windows | ✅ | | Linux | ✅ | | macOS | ✅ | ## 相关链接 - 本技能仓库：https://github.com/GeoSun/wechat-favorites-skill ## 参考资料 - [references/schema.md](references/schema.md) — 数据库结构详解 - [references/classification.md](references/classification.md) — 分类算法说明 ## 更新日志 ### v1.1 — 2026-04 - **分类体系升级**：新增三级分类体系——9大主类、57个二级标签、6个跨领域标签，分类更精细多元 - **文档全面优化**：完善 SKILL.md，补充分类逻辑说明、LLM 使用指南、实测数据、文件格式说明 - **快速上手简化**：精简配置示例、优化命令说明、增强引导提示、补充常用触发词，方便快速上手 - **LLM 智能增强（可选）**：新增 LLM 辅助分类脚本（llm_classify.py、llm_incremental.py、merge_llm_results.py、normalize_categories.py），低置信度或模糊条目可交由大模型重新分类 - **安全说明强化**：新增`## 安全说明`章节，强调本地化、隐私保护与数据安全 - **版本升级**：1.1.0 → 1.1，新显示名（微信收藏知识库） ## License MIT License ## 免责声明 本工具仅供个人备份和学习使用。请勿用于任何商业用途或违法行为。解析的数据仅限个人所有，不得传播或用于侵犯他人隐私。

path: requirements.txt
content: # wechat-favorites 依赖
pycryptodome>=3.19
zstandard>=0.22
# LLM 分类使用 urllib（标准库），无需额外依赖


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)