{"id":"a1f707da-7dce-4058-b6a4-a5a2bffb85fa","entityType":"agent","slug":"clawhub-geosun-wechat-favorites","name":"微信收藏知识库","canonicalUrl":"https://www.xpersona.co/agent/clawhub-geosun-wechat-favorites","canonicalPath":"/agent/clawhub-geosun-wechat-favorites","generatedAt":"2026-10-10T22:49:41.429Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T20:28:16.506Z","emptyReason":null},"description":"微信收藏夹导出、智能分类与知识库管理。支持从解析后的 favorite.db 导出收藏记录、自动归纳分类（从用户内容发现自然类别）、LLM 智能增强（可选）、批量导入 IMA 知识库（可选）、多平台导出（Obsidian/Notion，可选）、增量分类。核心功能支持离线使用，网络功能默认关闭。","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.3K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s177hjk4wtsf8s6hwg4159e14n859ahk:wechat-favorites","sourceUrl":"https://clawhub.ai/geosun/wechat-favorites","homepage":"https://clawhub.ai/geosun/skills/wechat-favorites","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/geosun/wechat-favorites","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/geosun/skills/wechat-favorites","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":62,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"微信收藏知识库 technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T20:28:16.506Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T20:28:16.506Z","emptyReason":null},"stars":null,"forks":null,"downloads":1266,"packageName":null,"latestVersion":"1.2.0","tractionLabel":"1.3K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T20:28:16.505Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T20:28:16.506Z","lastCrawledAt":"2026-10-10T20:28:16.505Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T20:28:16.505Z","lastVerifiedAt":null,"highlights":[{"version":"1.2.0","createdAt":"2026-06-07T04:32:59.002Z","changelog":"**Summary: Adds auto-discovery and multi-platform export features.** - New: Automatic category discovery from user content via LLM, breaking free from fixed 9-class system. - New: Export to Obsidian (Markdown by month) and Notion (via API), supporting external knowledge bases. - New: Incremental LLM classification—no need to re-run all items for new favorites; supports results merging and normalization. - Enhancement: classify_favorites.py allows custom category JSON via --categories argument. - Docs: SKILL.md updated with new workflows, feature comparison, usage instructions, and security explanation. - Maintenance: Added CHANGELOG, scripts for auto-discover, Notion, and Obsidian export; removed legacy skill-card.md.","fileCount":21,"zipByteSize":56620},{"version":"1.1.4","createdAt":"2026-04-26T05:15:25.657Z","changelog":"• Expanded category system: now supports a three-level taxonomy—9 primary classes, 57 sub-tags, and 6 cross-domain labels for more precise and multi-faceted classification. • Improved documentation: updated SKILL.md with more details on classification logic, LLM usage, real-world stats, and file formats. • Simplified and modernized quick start instructions and sample config/commands. Enhanced onboarding guidance and common trigger keywords for easier discovery and usage • Added optional LLM-assisted classification: low-confidence or ambiguous items can now be re-classified using large language models via new scripts (llm_classify.py, llm_incremental.py, merge_llm_results.py, normalize_categories.py). • Streamlined and optimized documentation, added “Security Notes” section highlighting localization, privacy, and data security • Added SAFE_MODE offline mode — set SAFE_MODE=1 to completely disable all network calls (LLM classification, IMA import), ensuring sensitive data stays local. • Version bump to 1.1 with a new display name (微信收藏知识库). • 分类体系升级：新增三级分类体系——9大主类、57个二级标签、6个跨领域标签，分类更精细多元 • 文档全面优化：完善 SKILL.md，补充分类逻辑说明、LLM 使用指南、实测数据、文件格式说明 • 快速上手简化：精简配置示例、优化命令说明、增强引导提示、补充常用触发词，方便快速上手 • LLM 智能增强（可选）：新增 LLM 辅助分类脚本（llm_classify.py、llm_incremental.py、merge_llm_results.py、normalize_categories.py），低置信度或模糊条目可交由大模型重新分类 • 安全说明强化：新增## 安全说明章节，强调本地化、隐私保护与数据安全 • 新增 SAFE_MODE 离线模式，设置环境变量 SAFE_MODE=1 即可完全禁用所有网络调用（LLM 分类、IMA 导入），确保敏感数据不出本地。 • 版本升级：1.0 → 1.1，新显示名（微信收藏知识库）","fileCount":17,"zipByteSize":42591},{"version":"1.1.3","createdAt":"2026-04-26T04:28:16.794Z","changelog":"• Expanded category system: now supports a three-level taxonomy—9 primary classes, 57 sub-tags, and 6 cross-domain labels for more precise and multi-faceted classification. • Improved documentation: updated SKILL.md with more details on classification logic, LLM usage, real-world stats, and file formats. • Simplified and modernized quick start instructions and sample config/commands. Enhanced onboarding guidance and common trigger keywords for easier discovery and usage • Added optional LLM-assisted classification: low-confidence or ambiguous items can now be re-classified using large language models via new scripts (llm_classify.py, llm_incremental.py, merge_llm_results.py, normalize_categories.py). • Streamlined and optimized documentation, added “Security Notes” section highlighting localization, privacy, and data security • Version bump to 1.1 with a new display name (微信收藏知识库). • 分类体系升级：新增三级分类体系——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，新显示名（微信收藏知识库）","fileCount":16,"zipByteSize":40453},{"version":"1.1.2","createdAt":"2026-04-26T03:38:51.727Z","changelog":"- Added LLM-assisted classification: low-confidence or ambiguous items can now be re-classified using large language models via new scripts (llm_classify.py, llm_incremental.py, merge_llm_results.py, normalize_categories.py). - Expanded category system: now supports a three-level taxonomy—9 primary classes, 57 sub-tags, and 6 cross-domain labels for more precise and multi-faceted classification. - Improved documentation: updated SKILL.md with more details on classification logic, LLM usage, real-world stats, and file formats. - Simplified and modernized quick start instructions and sample config/commands. Enhanced onboarding guidance and common trigger keywords for easier discovery and usage - Streamlined and optimized documentation, added “Security Notes” section highlighting localization, privacy, and data security - Version bump to 1.1 with a new display name (微信收藏知识库).","fileCount":16,"zipByteSize":40249},{"version":"1.1.1","createdAt":"2026-04-26T03:11:55.061Z","changelog":"wechat-favorites 1.1.0 **Summary: This update introduces LLM (large language model) enhanced classification and refines the tagging system for WeChat Favorites export and organization.** - Added LLM-assisted classification: low-confidence or ambiguous items can now be re-classified using large language models via new scripts (llm_classify.py, llm_incremental.py, merge_llm_results.py, normalize_categories.py). - Expanded category system: now supports a three-level taxonomy—9 primary classes, 57 sub-tags, and 6 cross-domain labels for more precise and multi-faceted classification. - Improved documentation: updated SKILL.md with more details on classification logic, LLM usage, real-world stats, and file formats. - Simplified and modernized quick start instructions and sample config/commands. Enhanced onboarding guidance and common trigger keywords for easier discovery and usage - Streamlined and optimized documentation, added “Security Notes” section highlighting localization, privacy, and data security - Version bump to 1.1.1 with a new display name (微信收藏知识库).","fileCount":16,"zipByteSize":40280},{"version":"1.1.0","createdAt":"2026-04-26T02:09:10.927Z","changelog":"**Summary: This update introduces LLM (large language model) enhanced classification and refines the tagging system for WeChat Favorites export and organization.** - Added LLM-assisted classification: low-confidence or ambiguous items can now be re-classified using large language models via new scripts (llm_classify.py, llm_incremental.py, merge_llm_results.py, normalize_categories.py). - Expanded category system: now supports a three-level taxonomy—9 primary classes, 57 sub-tags, and 6 cross-domain labels for more precise and multi-faceted classification. - Improved documentation: updated SKILL.md with more details on classification logic, LLM usage, real-world stats, and file formats. - Simplified and modernized quick start instructions and sample config/commands. - Discontinued quick_validate.py (removed). - Version bump to 1.1.0 with a new display name (微信收藏知识库).","fileCount":16,"zipByteSize":39813},{"version":"1.0.2","createdAt":"2026-04-22T15:31:42.848Z","changelog":"- Major structure update: the skill is now fully script modularized, and workflows are clarified. - Nine new files added, including database decryption, export, classification, IMA import, and utility scripts. - Central user configuration moved to a single `config.json` for clear setup. - IMA import process streamlined with flexible credential sources. - Documentation updated: simplified user guide, clarified prerequisites, and split workflows by function. - Removed legacy batch import script; replaced with more modular and configurable alternatives.","fileCount":13,"zipByteSize":22112},{"version":"1.0.1","createdAt":"2026-04-21T14:46:37.412Z","changelog":"Version 1.0.1 - Added more flexible configuration for IMA knowledge base import (supporting config file, environment variables, and command-line arguments). - Updated dependencies: now requires zstandard and pycryptodome. - Clarified that IMA import is optional and provided detailed configuration instructions. - Improved guidance on decompressing content with zstd when necessary. - Minor workflow clarifications and documentation improvements.","fileCount":5,"zipByteSize":8309}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s177hjk4wtsf8s6hwg4159e14n859ahk:wechat-favorites","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s177hjk4wtsf8s6hwg4159e14n859ahk:wechat-favorites` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/geosun/wechat-favorites before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-geosun-wechat-favorites/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-geosun-wechat-favorites/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-geosun-wechat-favorites/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-geosun-wechat-favorites/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-geosun-wechat-favorites/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-geosun-wechat-favorites/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T22:49:41.426Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-geosun-wechat-favorites/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-geosun-wechat-favorites/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-geosun-wechat-favorites/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-geosun-wechat-favorites/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T20:28:16.506Z","emptyReason":null},"readme":"Skill: 微信收藏知识库\n\nOwner: geosun\n\nSummary: 微信收藏夹导出、智能分类与知识库管理。支持从解析后的 favorite.db 导出收藏记录、自动归纳分类（从用户内容发现自然类别）、LLM 智能增强（可选）、批量导入 IMA 知识库（可选）、多平台导出（Obsidian/Notion，可选）、增量分类。核心功能支持离线使用，网络功能默认关闭。\n\nTags: latest:1.2.0\n\nVersion history:\n\nv1.2.0 | 2026-06-07T04:32:59.002Z | user\n\n**Summary: Adds auto-discovery and multi-platform export features.**\n\n- New: Automatic category discovery from user content via LLM, breaking free from fixed 9-class system.\n- New: Export to Obsidian (Markdown by month) and Notion (via API), supporting external knowledge bases.\n- New: Incremental LLM classification—no need to re-run all items for new favorites; supports results merging and normalization.\n- Enhancement: classify_favorites.py allows custom category JSON via --categories argument.\n- Docs: SKILL.md updated with new workflows, feature comparison, usage instructions, and security explanation.\n- Maintenance: Added CHANGELOG, scripts for auto-discover, Notion, and Obsidian export; removed legacy skill-card.md.\n\nv1.1.4 | 2026-04-26T05:15:25.657Z | user\n\n• Expanded category system: now supports a three-level taxonomy—9 primary classes, 57 sub-tags, and 6 cross-domain labels for more precise and multi-faceted classification.\n• Improved documentation: updated SKILL.md with more details on classification logic, LLM usage, real-world stats, and file formats.\n• Simplified and modernized quick start instructions and sample config/commands. Enhanced onboarding guidance and common trigger keywords for easier discovery and usage\n• Added optional LLM-assisted classification: low-confidence or ambiguous items can now be re-classified using large language models via new scripts (llm_classify.py, llm_incremental.py, merge_llm_results.py, normalize_categories.py).\n• Streamlined and optimized documentation, added “Security Notes” section highlighting localization, privacy, and data security \n• Added SAFE_MODE offline mode — set SAFE_MODE=1 to completely disable all network calls (LLM classification, IMA import), ensuring sensitive data stays local.\n• Version bump to 1.1 with a new display name (微信收藏知识库).\n\n• 分类体系升级：新增三级分类体系——9大主类、57个二级标签、6个跨领域标签，分类更精细多元\n• 文档全面优化：完善 SKILL.md，补充分类逻辑说明、LLM 使用指南、实测数据、文件格式说明\n• 快速上手简化：精简配置示例、优化命令说明、增强引导提示、补充常用触发词，方便快速上手\n• LLM 智能增强（可选）：新增 LLM 辅助分类脚本（llm_classify.py、llm_incremental.py、merge_llm_results.py、normalize_categories.py），低置信度或模糊条目可交由大模型重新分类\n• 安全说明强化：新增## 安全说明章节，强调本地化、隐私保护与数据安全\n• 新增 SAFE_MODE 离线模式，设置环境变量 SAFE_MODE=1 即可完全禁用所有网络调用（LLM 分类、IMA 导入），确保敏感数据不出本地。\n• 版本升级：1.0 → 1.1，新显示名（微信收藏知识库）\n\nv1.1.3 | 2026-04-26T04:28:16.794Z | user\n\n• Expanded category system: now supports a three-level taxonomy—9 primary classes, 57 sub-tags, and 6 cross-domain labels for more precise and multi-faceted classification.\n• Improved documentation: updated SKILL.md with more details on classification logic, LLM usage, real-world stats, and file formats.\n• Simplified and modernized quick start instructions and sample config/commands. Enhanced onboarding guidance and common trigger keywords for easier discovery and usage\n• Added optional LLM-assisted classification: low-confidence or ambiguous items can now be re-classified using large language models via new scripts (llm_classify.py, llm_incremental.py, merge_llm_results.py, normalize_categories.py).\n• Streamlined and optimized documentation, added “Security Notes” section highlighting localization, privacy, and data security \n• Version bump to 1.1 with a new display name (微信收藏知识库).\n\n• 分类体系升级：新增三级分类体系——9大主类、57个二级标签、6个跨领域标签，分类更精细多元\n• 文档全面优化：完善 SKILL.md，补充分类逻辑说明、LLM 使用指南、实测数据、文件格式说明\n• 快速上手简化：精简配置示例、优化命令说明、增强引导提示、补充常用触发词，方便快速上手\n• LLM 智能增强（可选）：新增 LLM 辅助分类脚本（llm_classify.py、llm_incremental.py、merge_llm_results.py、normalize_categories.py），低置信度或模糊条目可交由大模型重新分类\n• 安全说明强化：新增## 安全说明章节，强调本地化、隐私保护与数据安全\n• 版本升级：1.1.0 → 1.1，新显示名（微信收藏知识库）\n\nv1.1.2 | 2026-04-26T03:38:51.727Z | user\n\n- Added LLM-assisted classification: low-confidence or ambiguous items can now be re-classified using large language models via new scripts (llm_classify.py, llm_incremental.py, merge_llm_results.py, normalize_categories.py).\n- Expanded category system: now supports a three-level taxonomy—9 primary classes, 57 sub-tags, and 6 cross-domain labels for more precise and multi-faceted classification.\n- Improved documentation: updated SKILL.md with more details on classification logic, LLM usage, real-world stats, and file formats.\n- Simplified and modernized quick start instructions and sample config/commands. Enhanced onboarding guidance and common trigger keywords for easier discovery and usage\n- Streamlined and optimized documentation, added “Security Notes” section highlighting localization, privacy, and data security\n- Version bump to 1.1 with a new display name (微信收藏知识库).\n\nv1.1.1 | 2026-04-26T03:11:55.061Z | user\n\nwechat-favorites 1.1.0\n**Summary: This update introduces LLM (large language model) enhanced classification and refines the tagging system for WeChat Favorites export and organization.**\n\n- Added LLM-assisted classification: low-confidence or ambiguous items can now be re-classified using large language models via new scripts (llm_classify.py, llm_incremental.py, merge_llm_results.py, normalize_categories.py).\n- Expanded category system: now supports a three-level taxonomy—9 primary classes, 57 sub-tags, and 6 cross-domain labels for more precise and multi-faceted classification.\n- Improved documentation: updated SKILL.md with more details on classification logic, LLM usage, real-world stats, and file formats.\n- Simplified and modernized quick start instructions and sample config/commands. Enhanced onboarding guidance and common trigger keywords for easier discovery and usage\n- Streamlined and optimized documentation, added “Security Notes” section highlighting localization, privacy, and data security\n- Version bump to 1.1.1 with a new display name (微信收藏知识库).\n\nv1.1.0 | 2026-04-26T02:09:10.927Z | user\n\n**Summary: This update introduces LLM (large language model) enhanced classification and refines the tagging system for WeChat Favorites export and organization.**\n\n- Added LLM-assisted classification: low-confidence or ambiguous items can now be re-classified using large language models via new scripts (llm_classify.py, llm_incremental.py, merge_llm_results.py, normalize_categories.py).\n- Expanded category system: now supports a three-level taxonomy—9 primary classes, 57 sub-tags, and 6 cross-domain labels for more precise and multi-faceted classification.\n- Improved documentation: updated SKILL.md with more details on classification logic, LLM usage, real-world stats, and file formats.\n- Simplified and modernized quick start instructions and sample config/commands.\n- Discontinued quick_validate.py (removed).\n- Version bump to 1.1.0 with a new display name (微信收藏知识库).\n\nv1.0.2 | 2026-04-22T15:31:42.848Z | user\n\n- Major structure update: the skill is now fully script modularized, and workflows are clarified.\n- Nine new files added, including database decryption, export, classification, IMA import, and utility scripts.\n- Central user configuration moved to a single `config.json` for clear setup.\n- IMA import process streamlined with flexible credential sources.\n- Documentation updated: simplified user guide, clarified prerequisites, and split workflows by function.\n- Removed legacy batch import script; replaced with more modular and configurable alternatives.\n\nv1.0.1 | 2026-04-21T14:46:37.412Z | user\n\nVersion 1.0.1\n\n- Added more flexible configuration for IMA knowledge base import (supporting config file, environment variables, and command-line arguments).\n- Updated dependencies: now requires zstandard and pycryptodome.\n- Clarified that IMA import is optional and provided detailed configuration instructions.\n- Improved guidance on decompressing content with zstd when necessary.\n- Minor workflow clarifications and documentation improvements.\n\nv1.0.0 | 2026-04-21T14:29:48.782Z | user\n\nWeChat Favorites Skill 1.0.0 — Initial Release\n\n- 支持将微信收藏夹（favorite.db）导出为 CSV 文件。\n- 提供多标签智能分类（如生物医药、AI、投资等）。\n- 支持批量导入收藏到 IMA 知识库，含断点续传与详尽日志。\n- 自动生成分类报告，包括统计、趋势、热门话题与主流来源分析。\n- 提供详细的操作流程、数据结构说明与常见问题解答。\n\nArchive index:\n\nArchive v1.2.0: 21 files, 56620 bytes\n\nFiles: CHANGELOG.md (3726b), LICENSE.txt (1056b), references/classification.md (6962b), references/schema.md (1703b), requirements.txt (123b), scripts/auto_discover.py (8633b), scripts/classify_favorites.py (18398b), scripts/config.py (8475b), scripts/decrypt_db.py (6139b), scripts/export_favorites.py (4281b), scripts/export_to_notion.py (15288b), scripts/export_to_obsidian.py (15004b), scripts/import_ima.py (8277b), scripts/key_utils.py (1225b), scripts/llm_classify.py (11500b), scripts/llm_incremental.py (6518b), scripts/merge_llm_results.py (3585b), scripts/normalize_categories.py (7292b), skill-card.md (2478b), SKILL.md (12152b), _meta.json (135b)\n\nFile v1.2.0:SKILL.md\n\n---\nname: wechat-favorites\ndescription: 微信收藏夹导出、智能分类与知识库管理。支持从解析后的 favorite.db 导出收藏记录、自动归纳分类（从用户内容发现自然类别）、LLM 智能增强（可选）、批量导入 IMA 知识库（可选）、多平台导出（Obsidian/Notion，可选）、增量分类。核心功能支持离线使用，网络功能默认关闭。\nmetadata:\n  version: 1.2.0\n  display_name: 微信收藏知识库\n---\n\n# 微信收藏知识库\n\nDecrypt, categorize and organize wechat favorites (Official Account collection) into knowledge base\n\n收藏夹导出 · 智能分类 · 知识库导入 · 多平台导出\n\n**快速上手：** 解析收藏夹 → 导出记录 → 自动归纳类别 → 智能分类 → 导出到 Obsidian/Notion 或导入 IMA\n\n> 💡 **试试这样说：** \"帮我整理微信收藏\" / \"导出收藏夹并自动归纳分类\" / \"从我的收藏中发现自然类别\" / \"把微信收藏导入知识库\"\n\n---\n\n**触发词：** 微信收藏（WeChat Favorites）、收藏夹导出（favorites export）、收藏文章分类（favorites classification）、自动归纳分类（auto-discover categories）、IMA 知识库导入（knowledge base import）、Obsidian 导出（Obsidian export）、Notion 导出（Notion export）、收藏整理（favorites organizer）\n\n---\n\n## 新增功能\n\n> 完整更新日志见 [CHANGELOG.md](CHANGELOG.md)\n\n- **自动归纳分类** — 从收藏内容中 LLM 发现自然类别，不再受限于固定 9 大类\n- **Obsidian / Notion 导出** — Markdown 按年月归档+增量同步 / 批量导入 Notion 数据库\n- **LLM 增量分类** — 新增收藏无需全量重跑，支持结果合并与标签标准化\n- **自定义分类** — classify_favorites.py 新增 `--categories` 参数，支持自定义分类 JSON\n\n---\n\n## 为什么用这个工具？\n\n微信收藏夹积累了大量文章：随手打的标签越来越复杂，待读越积越多，从来没有真正整理过，也不记得读了哪些、学到了什么。这个工具可以：\n\n- **自动归纳** — 从你的收藏中发现自然类别，不再受限于固定分类\n- **关键词匹配** — 快速扫描全部收藏，按关键词归类\n- **LLM 增强** — 低置信度条目用大模型智能重判（可选）\n- **知识库导入** — 一键导入 IMA，构建个人知识库（可选）\n- **多平台导出** — 导出为 Markdown 到 Obsidian，或批量导入 Notion 数据库（可选）\n- **增量分类** — 新增收藏无需全量重跑，LLM 增量分类 + 结果合并\n\n---\n\n## 核心能力\n\n| 能力 | 说明 |\n|------|------|\n| **收藏导出** | 从解析后的 `favorite.db` 导出全部收藏记录为 CSV |\n| **自动归纳** | 从用户收藏内容自动发现分类体系（v1.2 新增） |\n| **关键词分类** | 默认 9 大类（生物医药/AI/投资等），或使用自定义分类 |\n| **标签增强** | 二级标签 57 个 + 跨领域标签 6 类（仅默认分类） |\n| **LLM 增强（可选）** | 置信度低时自动调用 LLM 二次分类，需配置 API Key |\n| **IMA导入（可选）** | 批量导入到 IMA 知识库，需配置凭证 |\n| **Notion 导出（可选）** | 导出收藏到 Notion 数据库，需配置 API Token（v1.2 新增） |\n| **Obsidian 导出（可选）** | 导出收藏为 Markdown 文件到 Obsidian vault（v1.2 新增） |\n| **报告生成** | 分类统计、各分类 CSV 导出 |\n\n---\n\n## 前置条件\n\n### 1. 微信收藏数据库\n\n本工具需要已解析的 `favorite.db` 文件。解析步骤请使用专门的微信数据库处理工具。\n\n### 2. Python 环境\n\n```bash\npip install pycryptodome zstandard\n```\n\n### 3. LLM 配置（自动归纳需要）\n\n自动归纳功能需要调用 LLM API：\n\n```bash\nexport LLM_API_KEY=\"your-openrouter-api-key\"\nexport LLM_API_URL=\"https://openrouter.ai/api/v1/chat/completions\"\nexport LLM_MODEL=\"deepseek/deepseek-chat\"\n```\n\n或使用本地模型：\n\n```bash\nexport LLM_API_URL=\"http://localhost:11434/v1/chat/completions\"\nexport LLM_MODEL=\"qwen2.5:14b\"\n```\n\n### 4. IMA 导入（可选）\n\n如需导入 IMA 知识库，配置凭证：`~/.config/ima/client_id` 和 `~/.config/ima/api_key`\n\n### 5. Notion 导出（可选）\n\n如需导出到 Notion，配置 API Token：\n\n```bash\nexport NOTION_API_TOKEN=\"secret_xxx\"\n```\n\n### 6. Obsidian 导出（可选）\n\n无需额外配置，直接指定 vault 路径即可。\n\n---\n\n## 快速开始\n\n### 方式一：自动归纳分类（推荐）\n\n```bash\ncd scripts\n\n# 1. 导出收藏记录\npython export_favorites.py\n\n# 2. 自动发现分类体系\npython auto_discover.py\n\n# 3. 使用自定义分类\npython classify_favorites.py --categories user_categories.json\n\n# 4. 导入 IMA（可选）\npython import_ima.py\n```\n\n### 方式二：使用默认 9 大类\n\n```bash\ncd scripts\n\n# 1. 导出收藏记录\npython export_favorites.py\n\n# 2. 使用默认分类\npython classify_favorites.py\n\n# 3. 导入 IMA（可选）\npython import_ima.py\n```\n\n### 方式三：导出到 Notion / Obsidian（可选）\n\n```bash\n# 导出分类后的文章到 Notion 数据库\npython export_to_notion.py --input articles_final.csv --token $NOTION_API_KEY --database-id $DATABASE_ID\n\n# 导出到 Obsidian vault（Markdown 文件）\npython export_to_obsidian.py --input articles_final.csv --vault \"D:\\Obsidian\\MyVault\"\n```\n\n---\n\n## 目录结构\n\n```\nwechat-favorites/\n├── SKILL.md                     # 本文件\n├── LICENSE.txt                  # MIT License\n├── requirements.txt             # 依赖声明\n├── scripts/\n│   ├── auto_discover.py         # 自动归纳分类（v1.2 新增）\n│   ├── classify_favorites.py    # 智能分类\n│   ├── llm_classify.py          # LLM 二次分类模块\n│   ├── llm_incremental.py       # LLM 增量分类（v1.2 新增）\n│   ├── merge_llm_results.py      # 合并多次 LLM 结果（v1.2 新增）\n│   ├── normalize_categories.py   # 分类标准化（v1.2 新增）\n│   ├── export_favorites.py      # 收藏导出\n│   ├── export_to_notion.py      # 导出至 Notion（v1.2 新增）\n│   ├── export_to_obsidian.py    # 导出至 Obsidian（v1.2 新增）\n│   ├── import_ima.py            # IMA 导入\n│   └── ...\n├── exported_favorites/          # 导出输出\n│   ├── favorites_all.csv        # 全部收藏\n│   ├── user_categories.json     # 自动归纳的分类体系\n│   ├── articles_final.csv       # 带分类标签\n│   └── cat_*.csv                # 各分类文件\n└── references/\n    ├── classification.md        # 分类算法说明\n    └── schema.md                # 数据库结构\n```\n\n---\n\n## 数据流程\n\n### 自动归纳流程\n\n```\nfavorites_all.csv\n      │\n      ▼ auto_discover.py（采样 + LLM 归纳）\nuser_categories.json\n      │\n      ▼ classify_favorites.py --categories user_categories.json\narticles_final.csv + cat_*.csv\n```\n\n### 默认分类流程\n\n```\nfavorites_all.csv\n      │\n      ▼ classify_favorites.py（9 大类关键词匹配）\narticles_final.csv + cat_*.csv\n```\n\n### 增量分类流程（v1.2 新增）\n\n```\n# 已有分类结果\narticles_final.csv\n      │\n      ▼ llm_incremental.py（仅处理新增收藏）\narticles_final_updated.csv\n      │\n      ▼ merge_llm_results.py（合并多次结果）\narticles_final_merged.csv\n```\n\n### Obsidian 导出流程（v1.2 新增）\n\n```\narticles_final.csv\n      │\n      ▼ export_to_obsidian.py --vault \"D:\\Obsidian\\MyVault\"\nD:\\Obsidian\\MyVault\\2026\\06\\article-title.md\n```\n\n### Notion 导出流程（v1.2 新增）\n\n```\narticles_final.csv\n      │\n      ▼ export_to_notion.py --database-id YOUR_DB_ID\nNotion Database（含全部收藏页面）\n```\n\n---\n\n## 自动归纳输出格式\n\n`user_categories.json` 结构：\n\n```json\n{\n  \"categories\": [\n    {\n      \"name\": \"生物医药研发\",\n      \"description\": \"创新药、临床试验、生物技术相关\",\n      \"keywords\": [\"创新药\", \"ADC\", \"CAR-T\", \"临床\", \"靶点\", ...]\n    },\n    ...\n  ],\n  \"meta\": {\n    \"source\": \"auto_discover\",\n    \"sample_size\": 500,\n    \"total_articles\": 32333,\n    \"created_at\": \"2026-04-27 23:45\"\n  }\n}\n```\n\n---\n\n## 分类体系\n\n### 方式一：自动归纳（动态）\n\n运行 `auto_discover.py` 后，分类体系由 LLM 根据你的收藏内容归纳，类别数量、名称、关键词均动态生成。\n\n### 方式二：默认 9 大类（固定）\n\n| 分类 | 关键词示例 |\n|------|-----------|\n| 生物医药 | 创新药、ADC、CAR-T、mRNA、临床试验 |\n| AI科技 | GPT、大模型、Agent、RAG、芯片 |\n| 投资金融 | IPO、融资、估值、基金、VC |\n| 科学研究 | Nature、Science、论文、研究 |\n| 商业财经 | 企业、行业、市场、商业模式 |\n| 生活方式 | 健康、运动、旅行、读书 |\n| 媒体资讯 | 新闻、热点、评论、舆论 |\n| 政治国际 | 国际、外交、地缘、中美 |\n\n### 二级标签（仅默认分类）\n\n每个一级分类下设细分标签，如：\n- 生物医药：ADC、CAR-T、mRNA、创新药、临床、神经科学...\n- AI科技：大模型、AI应用、AI医疗、机器人、GPU...\n- 投资金融：VC/PE、二级市场、IPO、并购、估值...\n\n完整标签列表见 `references/classification.md`。\n\n---\n\n## 安全说明\n\n| 操作 | 数据流向 | 说明 |\n|------|----------|------|\n| **收藏导出** | 本地只读 | 完全离线 |\n| **关键词分类** | 本地计算 | 完全离线 |\n| **自动归纳** | 本地 → LLM API（需配置） | 发送采样标题，仅在启用时调用 |\n| **LLM 分类** | 本地 → OpenRouter（需配置） | 发送标题+摘要，仅在启用时调用 |\n| **IMA 导入** | 本地 → ima.qq.com（需配置） | 发送 URL 列表，仅在启用时调用 |\n| **Obsidian 导出** | 本地文件写入 | 完全离线 |\n| **Notion 导出** | 本地 → Notion API（需配置） | 发送收藏数据，仅在启用时调用 |\n\n**离线模式：** 导出 + 默认分类完全离线；自动归纳需 LLM API。\n\n**建议：** 在信任的网络环境使用自动归纳功能。\n\n---\n\n## 常见问题\n\n**Q: 自动归纳出的类别不满意？**\nA: 编辑 `user_categories.json` 手动调整，或重新运行 `auto_discover.py --sample 1000` 增加采样。\n\n**Q: 可以在默认分类和自定义分类之间切换吗？**\nA: 可以。不带 `--categories` 参数即为默认分类。\n\n**Q: 自动归纳需要多少条数据？**\nA: 建议 500 条以上，太少可能导致类别不全。\n\n---\n\n## 更新日志\n\n### v1.2.0 — 2026-06-07\n\n- 自动归纳分类 — 从收藏内容中 LLM 发现自然类别，不再受限于固定 9 大类\n- Obsidian / Notion 导出 — Markdown 按年月归档+增量同步 / 批量导入 Notion 数据库\n- LLM 增量分类 — 新增收藏无需全量重跑，支持结果合并与标签标准化\n- 自定义分类 — classify_favorites.py 新增 --categories 参数，支持自定义分类 JSON\n\n### v1.1.4 — 2026-04-26\n\n- 安全审核修复：SAFE_MODE 离线模式，核心功能默认关闭网络\n- 中英双语文档完善\n- 安全说明强化：新增 ## 安全说明章节，强调本地化、隐私保护与数据安全\n\n### v1.1 — 2026-04\n\n- 分类体系升级：新增三级分类体系——9大主类、57个二级标签、6个跨领域标签，分类更精细多元\n- 文档全面优化：完善 SKILL.md，补充分类逻辑说明、LLM 使用指南、实测数据、文件格式说明\n- 快速上手简化：精简配置示例、优化命令说明、增强引导提示、补充常用触发词，方便快速上手\n- LLM 智能增强（可选）：新增 LLM 辅助分类脚本（llm_classify.py、llm_incremental.py、merge_llm_results.py、normalize_categories.py），低置信度或模糊条目可交由大模型重新分类\n- 安全说明强化：新增## 安全说明章节，强调本地化、隐私保护与数据安全\n- 版本升级：1.1.0 → 1.1，新显示名（微信收藏知识库）\n\n---\n\n## License\n\nMIT License\n\n---\n\n本工具仅供个人备份和学习使用。请勿用于任何商业用途或违法行为。\n\nFile v1.2.0:_meta.json\n\n{\n  \"ownerId\": \"kn7fh7azcgp5wwsg434v6km1x5858t33\",\n  \"slug\": \"wechat-favorites\",\n  \"version\": \"1.2.0\",\n  \"publishedAt\": 1780806779002\n}\n\nFile v1.2.0:references/classification.md\n\n# 收藏分类算法 v1.2.0\n\n## 分类流程\n\n```\nfavorites_all.csv\n      │\n      ▼ 关键词多标签分类（一级）\n  categories 列（中文标签，管道分隔）\n  confidence 列（0~0.5）\n      │\n      ▼ 二级分类（基于正则匹配）\n  subcategory 列（管道分隔，可多个）\n      │\n      ▼ 跨领域标签（主分类 + 跨领域关键词）\n  cross_domain 列（管道分隔，可多个）\n      │\n      ▼ [可选] LLM 二次分类（confidence < threshold）\n  更新 categories, subcategory, cross_domain\n  追加 _llm_reason, _llm_confidence 列\n      │\n      ▼ [可选] 标签标准化\n  category 列（标准英文 key）\n```\n\n## 第一步：关键词多标签分类（一级）\n\n每篇文章可同时归属多个分类。\n\n```python\nCATEGORIES = {\n    \"生物医药\": [\"创新药\", \"ADC\", \"CAR-T\", \"mRNA\", ...],\n    \"AI科技\":   [\"GPT\", \"大模型\", \"LLM\", \"Agent\", ...],\n    \"投资金融\": [\"IPO\", \"融资\", \"估值\", \"科创板\", ...],\n    \"科学研究\": [\"Nature\", \"Science\", \"论文\", ...],\n    \"商业财经\": [\"企业\", \"战略\", \"行业\", ...],\n    \"生活方式\": [\"健康\", \"运动\", \"旅行\", ...],\n    \"媒体资讯\": [\"新闻\", \"热点\", \"评论\", ...],\n    \"政治国际\": [\"国际\", \"外交\", \"地缘\", ...],\n}\n```\n\n置信度规则：\n- 0 = 未命中任何关键词\n- 0.3 = 命中单个分类\n- 0.5 = 命中多个分类（多标签反而更难判断主次）\n\n## 第二步：二级分类\n\n基于一级分类结果，对每个命中的一级分类用正则匹配二级标签。\n\n```python\nSUBCATEGORIES = {\n    \"生物医药\": {\n        \"临床\": r\"临床|IND|NDA|CDE|FDA|NMPA|III期|II期|I期|获批|批准\",\n        \"神经\": r\"阿尔茨海默|帕金森|神经|脑科学|抑郁|...\",\n        \"创新药\": r\"创新药|新药|first-in-class|best-in-class\",\n        # ... 14 个二级标签\n    },\n    \"AI科技\": {\n        \"AI应用\": r\"AI应用|AI\\+|赋能|落地|智能化|用AI|...\",\n        \"大模型/LLM\": r\"大模型|LLM|GPT|Claude|Gemini|...\",\n        # ... 9 个二级标签\n    },\n    # ... 共 6 个一级分类有二级标签\n}\n```\n\n特点：\n- 一篇文章可命中多个二级标签（如 \"ADC+肿瘤+临床\"）\n- 不是所有文章都有二级标签（泛泛讨论只保留一级）\n- 每个一级分类下二级标签互不排斥\n\n覆盖率（实测）：\n- 生物医药: 47.0%\n- 商业财经: 44.2%\n- 投资金融: 43.8%\n- AI科技: 29.1%\n- 科学研究: 27.9%\n- 生活方式: 20.9%\n\n## 第三步：跨领域标签\n\n检测文章是否同时涉及两个领域。\n\n```python\nCROSS_DOMAIN_RULES = [\n    # (标签, 主分类, 跨领域关键词正则)\n    (\"生物医药+投资\", \"生物医药\", r\"融资|估值|IPO|上市|投资|...\"),\n    (\"AI+医疗\",       \"AI科技\",   r\"医疗|药|临床|诊断|医院|...\"),\n    (\"AI+投资\",       \"AI科技\",   r\"融资|估值|IPO|上市|投资|...\"),\n    (\"生物医药+AI\",   \"生物医药\", r\"AI|人工智能|机器学习|计算|...\"),\n    (\"科学+政策\",     \"科学研究\", r\"政策|监管|伦理|法规|...\"),\n    (\"商业+政治\",     \"商业财经\", r\"制裁|贸易战|关税|地缘|...\"),\n]\n```\n\n逻辑：先确定文章的主分类，再检查是否含跨领域关键词。\n一篇文章可有多个跨领域标签。\n\n分布（实测 32333 篇）：\n- 生物医药+投资: 2974\n- AI+医疗: 546\n- AI+投资: 339\n- 生物医药+AI: 203\n- 商业+政治: 68\n- 科学+政策: 19\n\n## 第四步：LLM 二次分类\n\n对关键词分类置信度不足（默认 < 0.4）的条目，用大模型进行智能重判。\n\n### Prompt 结构\n\n```\n文章标题：{title}\n来源公众号：{source}\n文章链接：{url}\n\n一级分类（可多选）：\n生物医药、AI科技、投资金融、科学研究、商业财经、生活方式、媒体资讯、政治国际\n\n二级分类（选填，根据一级分类选对应的子标签）：\n- 生物医药：临床、神经、创新药、肿瘤、...\n- AI科技：AI应用、大模型/LLM、AI医疗、...\n- ...\n\n跨领域标签（选填，文章同时涉及两个领域时标注）：\n生物医药+投资、AI+医疗、AI+投资、生物医药+AI、科学+政策、商业+政治\n\n输出 JSON：{\"tags\": [...], \"subcategories\": [...], \"cross_domain\": [...], \"reason\": \"...\", \"confidence\": 0~1}\n```\n\n### LLM 结果解析\n\n1. 提取 JSON（支持 ```json 代码块包裹）\n2. 过滤无效一级标签（只保留 8 个标准分类）\n3. 过滤无效二级标签（只保留 SUBCATEGORY_TAGS 中定义的）\n4. 过滤无效跨领域标签（只保留 CROSS_DOMAIN_TAGS 中定义的）\n5. confidence >= 0.5 时采纳，否则保留原分类\n\n### 增量处理\n\n对于大量 other 条目（>1000），推荐增量模式：\n- `llm_incremental.py`：每批 50 条，并发 20，每 5 分钟保存检查点\n- 中断后重新运行自动续传\n- 合并：`merge_llm_results.py` 将检查点结果写回 CSV\n\n## 第五步：标签标准化\n\nLLM 和关键词可能输出不同格式的标签，标准化映射：\n\n| 标准分类 | 英文 key | 接受的输入格式 |\n|---------|----------|--------------|\n| 生物医药 | `biomed` | 生物医药, biomed |\n| AI科技 | `ai` | AI科技, ai, tech |\n| 投资金融 | `invest` | 投资金融, invest |\n| 科学研究 | `science` | 科学研究, science |\n| 商业财经 | `business` | 商业财经, business |\n| 生活方式 | `lifestyle` | 生活方式, lifestyle |\n| 媒体资讯 | `media` | 媒体资讯, media |\n| 政治国际 | `politics` | 政治国际, politics |\n\n二级标签别名映射（示例）：\n- \"大模型/LLM\" ← \"大模型\", \"LLM\", \"LLM/GPT\"\n- \"VC/PE\" ← \"VC\", \"PE\", \"风险投资\", \"私募股权\"\n- \"芯片/算力\" ← \"芯片\", \"算力\", \"GPU\", \"半导体\"\n\n复合标签（`+`/`|`/`,` 分隔）取第一个已知分类作为主分类。\n\n特殊映射：`tech` → `ai`（技术类合并到 AI科技）\n\n## 分类统计（实测数据，32333 篇）\n\n### 一级分类\n\n| 分类 | 数量 | 占比 |\n|------|------|------|\n| 生物医药 | 12,010 | 37.1% |\n| 生活方式 | 4,551 | 14.1% |\n| 商业财经 | 3,985 | 12.3% |\n| 科学研究 | 3,128 | 9.7% |\n| 投资金融 | 3,021 | 9.3% |\n| 媒体资讯 | 2,417 | 7.5% |\n| AI科技 | 2,151 | 6.7% |\n| 政治国际 | 939 | 2.9% |\n| other | 131 | 0.4% |\n\n### 二级标签 top 10\n\n| 标签 | 数量 |\n|------|------|\n| 生物医药>临床 | 2,144 |\n| 生物医药>创新药 | 1,418 |\n| 生物医药>神经 | 1,232 |\n| 生物医药>肿瘤 | 886 |\n| 商业财经>宏观经济 | 856 |\n| 商业财经>行业分析 | 810 |\n| 投资金融>VC/PE | 685 |\n| 科学研究>神经科学 | 576 |\n| 生物医药>抗体 | 564 |\n| 投资金融>二级市场 | 517 |\n\n### 跨领域标签\n\n| 标签 | 数量 |\n|------|------|\n| 生物医药+投资 | 2,974 |\n| AI+医疗 | 546 |\n| AI+投资 | 339 |\n| 生物医药+AI | 203 |\n| 商业+政治 | 68 |\n| 科学+政策 | 19 |\n\n## 年度趋势\n\n收藏高峰：2019年（6,558篇）、2023年（6,145篇）\n生物医药占比逐年上升：2017年 5.6% → 2023年 44.8%\n\nFile v1.2.0:references/schema.md\n\n# favorite.db 数据库结构\n\n## 表：fav_db_item\n\n存储所有收藏记录。\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| local_id | INTEGER | 主键，收藏记录ID |\n| fav_local_type | INTEGER | 收藏类型 |\n| status | INTEGER | 状态标记 |\n| create_time | INTEGER | 收藏时间（Unix时间戳） |\n| source_id | TEXT | 来源用户/公众号 wxid |\n| source_type | INTEGER | 来源类型 |\n| content | BLOB | 收藏内容（XML格式，可能压缩） |\n| WCDB_CT_content | INTEGER | 压缩类型（4=zstd） |\n\n## fav_local_type 类型值\n\n| 值 | 类型 |\n|----|------|\n| 1 | 文章/链接 |\n| 2 | 图片 |\n| 3 | 视频 |\n| 4 | 文件 |\n| 5 | 语音 |\n| 6 | 位置 |\n| 7 | 名片 |\n| 8 | 文本笔记 |\n\n## content XML 结构\n\n文章类型（fav_local_type=1）的 content 示例：\n\n```xml\n<favitem>\n  <type>1</type>\n  <title>文章标题</title>\n  <desc>文章摘要</desc>\n  <url>https://mp.weixin.qq.com/s/xxx</url>\n  <source>公众号名称</source>\n  <sourcetype>9</sourcetype>\n  <thumburl>封面图URL</thumburl>\n</favitem>\n```\n\n## 解析代码\n\n```python\nimport xml.etree.ElementTree as ET\n\ndef parse_favorite_content(content_bytes, ct):\n    # 解压 zstd\n    if ct == 4:\n        import zstandard as zstd\n        content = zstd.ZstdDecompressor().decompress(content_bytes)\n    else:\n        content = content_bytes\n    \n    root = ET.fromstring(content)\n    return {\n        'type': root.findtext('type'),\n        'title': root.findtext('title', ''),\n        'desc': root.findtext('desc', ''),\n        'url': root.findtext('url', ''),\n        'source': root.findtext('source', ''),\n    }\n```\n\n## 相关表\n\n- `favorite_fts.db` — 全文搜索索引（SQLite FTS）\n\nFile v1.2.0:CHANGELOG.md\n\n# 更新日志\n\n## v1.2.0 — 2026-06-07\n\n### 1. 智能分类体系升级\n\n**自动归纳分类（auto_discover.py）**\n\n不再局限于固定的 9 大类，而是从**你的收藏内容**中自动发现自然分类：\n\n```bash\n# 第一步：自动发现分类体系\npython auto_discover.py\n\n# 输出：user_categories.json（根据你的收藏内容归纳出 8-15 个类别）\n\n# 第二步：使用自定义分类对全部收藏分类\npython classify_favorites.py --categories user_categories.json\n```\n\n**工作原理：**\n1. 随机采样 500 条标题（可调）\n2. 发送给 LLM 分析，请求归纳 8-15 个自然分类\n3. LLM 返回：类别名 + 描述 + 10-20 个关键词\n4. 保存为 `user_categories.json`\n\n**三种分类方式对比：**\n\n| 方式 | 类别来源 | 适用场景 |\n|------|---------|---------|\n| 默认（固定 9 类） | 预定义的生物医药、AI、投资等 | 内容聚焦投资/科技/医疗领域 |\n| 自动归纳 | 从用户收藏中 LLM 发现 | 内容多元、预定义类别不匹配 |\n| 自定义 JSON | 用户手动编辑 | 有明确分类需求 |\n\n**LLM 分类增强工具：**\n\n| 脚本 | 功能 |\n|------|------|\n| `llm_incremental.py` | 对新增收藏执行 LLM 分类，无需全量重跑 |\n| `merge_llm_results.py` | 合并多次 LLM 分类结果，避免重复处理 |\n| `normalize_categories.py` | 统一不同来源的分类标签为标准格式 |\n\n**classify_favorites.py 增强：**\n- 新增 `--categories` 参数，支持自定义分类 JSON\n- 支持动态标签匹配（配合 auto_discover.py 输出）\n\n---\n\n### 2. 多平台导出\n\n**Obsidian 导出（export_to_obsidian.py）**\n\n将收藏导出为 Markdown 文件到 Obsidian vault：\n\n```bash\npython export_to_obsidian.py --input articles_final.csv --vault \"D:\\Obsidian\\MyVault\"\n```\n\n- 按 `年/月/` 目录结构自动归档\n- YAML frontmatter：title、url、category、tags、author、nickname、created、imported\n- 增量同步：已存在的文件自动跳过\n- 支持 `--limit` 限制数量、`--dry-run` 预览\n\n**Notion 导出（export_to_notion.py）**\n\n将收藏批量导入 Notion 数据库：\n\n```bash\npython export_to_notion.py --input articles_final.csv --database-id YOUR_DB_ID\n```\n\n需配置环境变量：`NOTION_API_TOKEN=\"secret_xxx\"`\n\n---\n\n### 3. 文档与安全优化\n\n- SKILL.md 全面完善：补充分类逻辑说明、LLM 使用指南、实测数据、文件格式说明\n- 快速上手简化：精简配置示例、优化命令说明、增强引导提示、补充常用触发词\n- 安全说明强化：新增 ## 安全说明章节，强调本地化、隐私保护与数据安全\n- 新建 CHANGELOG.md：版本更新细节独立存放，SKILL.md 保持精简\n\n---\n\n## v1.1.4 — 2026-04-26\n\n- 安全审核修复：SAFE_MODE 离线模式，核心功能默认关闭网络\n- 中英双语文档完善\n- 安全说明强化：新增 ## 安全说明章节，强调本地化、隐私保护与数据安全\n\n---\n\n## v1.1 — 2026-04\n\n- 分类体系升级：新增三级分类体系——9大主类、57个二级标签、6个跨领域标签，分类更精细多元\n- 文档全面优化：完善 SKILL.md，补充分类逻辑说明、LLM 使用指南、实测数据、文件格式说明\n- 快速上手简化：精简配置示例、优化命令说明、增强引导提示、补充常用触发词，方便快速上手\n- LLM 智能增强（可选）：新增 LLM 辅助分类脚本（llm_classify.py、llm_incremental.py、merge_llm_results.py、normalize_categories.py），低置信度或模糊条目可交由大模型重新分类\n- 安全说明强化：新增## 安全说明章节，强调本地化、隐私保护与数据安全\n- 版本升级：1.1.0 → 1.1，新显示名（微信收藏知识库）\n\nFile v1.2.0:skill-card.md\n\n## Description:\n\n微信收藏夹导出、智能分类与知识库管理。支持从解析后的 favorite.db 导出收藏记录、自动归纳分类（从用户内容发现自然类别）、LLM 智能增强（可选）、批量导入 IMA 知识库（可选）、多平台导出（Obsidian/Notion，可选）、增量分类。核心功能支持离线使用，网络功能默认关闭。\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[geosun](https://clawhub.ai/user/geosun)\n\n### License/Terms of Use:\n\nMIT\n\n## Use Case:\n\nDevelopers and individual knowledge workers use this skill to export parsed WeChat Favorites records, classify them locally or with optional LLM assistance, and organize the results into CSV, Obsidian, Notion, or IMA knowledge-base workflows.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The bundled decryption script can produce plaintext from encrypted WeChat databases beyond the intended favorite.db workflow.\n\nMitigation: Run decrypt_db.py only when you intend to decrypt the selected database, review its target paths before execution, and protect decrypted outputs and exported CSV files.\n\nRisk: Optional LLM, IMA, and Notion workflows can send favorite titles, summaries, URLs, or credentials to external services.\n\nMitigation: Use SAFE_MODE for local-only workflows and enable each network integration only after confirming the data and credentials it will transmit.\n\n## Reference(s):\n\n- [Classification algorithm](references/classification.md)\n- [favorite.db schema](references/schema.md)\n- [ClawHub skill page](https://clawhub.ai/geosun/skills/wechat-favorites)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Code, Shell commands, Configuration, Guidance, Files]\n\n**Output Format:** [Markdown guidance with shell commands; scripts produce CSV, JSON, Markdown, and external knowledge-base entries.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Offline export and keyword classification are supported; optional LLM, IMA, and Notion workflows require user-provided credentials and network access.]\n\n## Skill Version(s):\n\n1.2.0 (source: frontmatter, changelog, server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.2.0:LICENSE.txt\n\nMIT License\n\nCopyright (c) 2024\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nFile v1.2.0:requirements.txt\n\n# wechat-favorites 依赖\npycryptodome>=3.19\nzstandard>=0.22\n# LLM 分类使用 urllib（标准库），无需额外依赖\n\nArchive v1.1.4: 17 files, 42591 bytes\n\nFiles: LICENSE.txt (1056b), references/classification.md (6962b), references/schema.md (1703b), requirements.txt (123b), scripts/classify_favorites.py (20108b), scripts/config.py (8475b), scripts/decrypt_db.py (6139b), scripts/export_favorites.py (4281b), scripts/import_ima.py (8277b), scripts/key_utils.py (1225b), scripts/llm_classify.py (9434b), scripts/llm_incremental.py (6518b), scripts/merge_llm_results.py (3585b), scripts/normalize_categories.py (7292b), skill-card.md (2697b), SKILL.md (14090b), _meta.json (135b)\n\nFile v1.1.4:SKILL.md\n\n---\nname: wechat-favorites\ndescription: 微信收藏夹导出、智能分类与知识库管理。支持从解析后的 favorite.db 导出收藏记录、三级分类体系（一级9类 + 二级57标签 + 跨领域6类）、LLM 智能增强（可选）、批量导入 IMA 知识库（可选）。核心功能支持离线使用，网络功能默认关闭。\nmetadata:\n  version: 1.1.4\n  display_name: 微信收藏知识库\n---\n\n# 微信收藏知识库\n\nDecrypt, categorize and organize wechat favorites (Official Account collection) into knowledge base\n\n收藏夹导出 · 智能分类 · 知识库导入\n\n**快速上手：** 解析收藏夹 → 导出记录 → 智能分类 → 导入 IMA 知识库\n\n> 💡 **试试这样说：** \"帮我整理微信收藏\" / \"导出收藏夹并分类\" / \"把微信收藏导入知识库\" / \"解析 favorite.db 导出文章\"\n\n---\n\n**触发词：** 微信收藏（WeChat Favorites）、收藏夹导出（favorites export）、收藏文章分类（favorites classification）、IMA 知识库导入（knowledge base import）、收藏整理（favorites organizer）、微信公众号收藏、公众号文章整理\n\n---\n\n## 为什么用这个工具？\n\n微信收藏夹积累了大量文章：随手打的标签越来越复杂，待读越积越多，从来没有真正整理过，也不记得读了哪些、学到了什么。这个工具可以：\n\n- **自动分类** — 96% 的文章自动归入 9 大类，无需手动整理\n- **细粒度标签** — 57 个二级标签，精准定位细分主题\n- **跨领域识别** — 自动标注\"生物医药+投资\"等复合主题\n- **LLM 增强** — 低置信度条目用大模型智能重判\n- **知识库导入** — 一键导入 IMA，构建个人知识库\n\n## 实测数据\n\n基于 32,333 篇文章（2014-2025 收藏）：\n\n| 指标 | 数值 |\n|------|------|\n| 总收藏数 | 36,853 |\n| 文章数 | 32,333 |\n| 一级分类覆盖率 | 96.0% (31,088/32,333) |\n| LLM 重分类成功率 | 98.5% (8,789/8,912) |\n| 二级标签平均覆盖率 | 35.5% |\n\n## 核心能力\n\n| 能力 | 说明 |\n|------|------|\n| **收藏导出** | 从解析后的 `favorite.db` 导出全部收藏记录为 CSV |\n| **关键词分类** | 一级分类 9 类（生物医药/AI/投资等），关键词匹配自动识别 |\n| **标签增强** | 二级标签 57 个 + 跨领域标签 6 类，支持多标签组合 |\n| **LLM 增强（可选）** | 置信度 < 0.4 时自动调用 LLM 二次分类，需配置 API Key |\n| **IMA导入（可选）** | 批量导入到 IMA 知识库，需配置凭证 |\n| **报告生成** | 分类统计、各分类 CSV 导出 |\n\n## 前置条件\n\n### 1. 微信收藏数据库\n\n本工具需要已解析的 `favorite.db` 文件。解析步骤请使用专门的微信数据库处理工具。\n\n### 2. Python 环境\n\n```bash\npip install pycryptodome zstandard\n```\n\n### 3. IMA 导入（可选）\n\n如需导入 IMA 知识库：\n1. 创建 IMA 知识库，获取 `kb_id`\n2. 配置凭证：`~/.config/ima/client_id` 和 `~/.config/ima/api_key`\n\n\n### 4. IMA 导入配置（可选）\n\nIMA 凭证支持多种配置方式（优先级从高到低）：\n\n| 方式 | 说明 |\n|------|------|\n| 命令行参数 | `--client-id`, `--api-key`, `--kb-id` |\n| 环境变量 | `IMA_CLIENT_ID`, `IMA_API_KEY`, `IMA_KB_ID` |\n| config.json | `ima_kb_id` 字段 |\n| 文件 | `~/.config/ima/client_id`, `~/.config/ima/api_key` |\n\n```bash\n# 方式 1: 命令行参数\npython import_ima.py --kb-id YOUR_KB_ID --client-id XXX --api-key YYY\n\n# 方式 2: 环境变量\nIMA_CLIENT_ID=xxx IMA_API_KEY=yyy python import_ima.py\n\n# 方式 3: 配置文件\n# 在项目目录创建 config.json，填写 ima_kb_id\n# 创建 ~/.config/ima/client_id 和 api_key 文件\n```\n\n## 安全说明\n\n本工具涉及本地文件操作与可选网络调用。所有核心功能（导出 + 本地分类）可在离线环境完成，无需任何网络配置。\n\n| 操作 | 行为 | 数据流向 | 说明 |\n|------|------|----------|------|\n| **收藏导出** | 读取已解析的 `favorite.db`，导出为 CSV | 本地只读 | 核心功能，完全离线 |\n| **智能分类** | 基于关键词本地分类 | 本地计算 | 核心功能，完全离线 |\n| **LLM 分类** | 可选，将标题/摘要发送至外部 LLM API | 本地 → OpenRouter (可选，需配置) | 默认关闭，不调用外部 API |\n| **IMA 导入** | 可选，将收藏 URL 列表发送至腾讯 IMA | 本地 → ima.qq.com (可选，需配置) | 默认关闭，不调用外部 API |\n| **凭证读取** | 读取本地 `~/.config/ima/` 凭证文件 | 本地读取 | 仅 IMA 功能需要，不上传凭证 |\n\n**可选功能说明：**\n- `LLM 分类`：依赖 `llm_classify.py`，通过 OpenRouter API 调用大模型。**默认关闭**，需设置 `LLM_API_URL` 等环境变量才会发起网络请求\n- `IMA 导入`：依赖 `import_ima.py`，调用腾讯 IMA 知识库 API。**默认关闭**，需配置 `client_id`/`api_key` 才会发起网络请求\n- `SAFE_MODE`：**完全禁用网络功能**，设置 `SAFE_MODE=1` 环境变量即可强制离线模式\n- **敏感数据**：LLM 仅发送文章标题和摘要，不发送正文内容； IMA 仅发送收藏的 URL 列表，不包含微信聊天记录\n\n**离线使用方案：**\n- 导出 + 本地分类：无需网络，无需配置任何 API\n- LLM 增强：可使用本地模型（修改 `LLM_API_URL` 指向本地 Ollama）\n- IMA 导入：可选功能，不导入不影响其他功能\n\n**建议：** 在信任的网络环境或离线环境使用，网络功能均为可选，默认关闭。\n\n## 快速开始\n\n```bash\ncd scripts\n\n# 0. 验证环境\npython quick_validate.py\n\n# 1. 解析数据库（如未解析）\npython decrypt_db.py  # 或使用其他工具\n\n# 2. 导出收藏记录\npython export_favorites.py\n\n# 3. 智能分类（支持 LLM 增强）\npython classify_favorites.py\n\n# 4. 导入 IMA（可选）\npython import_ima.py\n```\n\n## 目录结构\n\n```\nwechat-favorites/\n├── SKILL.md                     # 本文件\n├── LICENSE.txt                  # MIT License\n├── CHANGELOG.md                 # 更新日志\n├── requirements.txt             # 依赖声明\n├── config.json                  # 用户配置（需创建）\n├── scripts/\n│   ├── quick_validate.py        # 环境验证\n│   ├── decrypt_db.py            # 数据库解析\n│   ├── export_favorites.py      # 收藏导出\n│   ├── classify_favorites.py    # 智能分类（一级+二级+跨领域）\n│   ├── llm_classify.py          # LLM 二次分类模块\n│   ├── llm_incremental.py       # LLM 增量批处理\n│   ├── merge_llm_results.py     # LLM 结果合并\n│   ├── normalize_categories.py  # 标签标准化\n│   ├── import_ima.py            # IMA 导入\n│   ├── config.py                # 配置加载\n│   └── key_utils.py             # 密钥工具\n├── decrypted/                   # 解析输出\n│   └── favorite/favorite.db\n├── exported_favorites/          # 导出输出\n│   ├── favorites_all.csv        # 全部收藏\n│   ├── articles_final.csv       # 带分类标签\n│   ├── cat_biomed.csv           # 生物医药分类\n│   ├── cat_AI科技.csv           # AI 分类\n│   └── ...\n└── references/\n    ├── classification.md        # 分类算法说明\n    └── schema.md                # 数据库结构\n```\n\n## 数据流程\n\n```\nfavorite.db (加密)\n      │\n      ▼ decrypt_db.py\nfavorite.db (解析后)\n      │\n      ▼ export_favorites.py\nfavorites_all.csv\n      │\n      ▼ classify_favorites.py [--llm]\narticles_final.csv + cat_*.csv\n      │\n      ▼ import_ima.py\nIMA 知识库\n```\n\n## 分类体系\n\n### 一级分类（9类）\n\n| 分类 | 关键词示例 |\n|------|-----------|\n| 生物医药 | 创新药、ADC、CAR-T、mRNA、临床试验、靶点、抗体 |\n| AI科技 | GPT、大模型、Agent、RAG、芯片、GPU、NVIDIA |\n| 投资金融 | IPO、融资、科创板、估值、基金、VC、PE |\n| 科学研究 | Nature、Science、论文、神经科学、突破 |\n| 商业财经 | 企业战略、行业分析、商业模式、宏观 |\n| 生活方式 | 健康、运动、旅行、读书、电影 |\n| 媒体资讯 | 新闻、热点、评论、舆论 |\n| 政治国际 | 国际关系、地缘政治、中美、外交 |\n| 其他 | 未命中以上分类 |\n\n### 二级标签（57个）\n\n每个一级分类下设细分标签，关键词匹配自动识别：\n\n| 一级分类 | 二级标签示例 |\n|---------|-------------|\n| 生物医药 | ADC、CAR-T、mRNA、创新药、临床、神经科学、免疫治疗、基因编辑、疫苗、医疗器械... |\n| AI科技 | 大模型、AI应用、AI医疗、自动驾驶、机器人、GPU、芯片、深度学习、RAG、Agent... |\n| 投资金融 | VC/PE、二级市场、IPO、并购、估值、私募、公募、债券、量化... |\n| 科学研究 | 神经科学、物理、化学、生物、材料、天文学、量子计算... |\n| 商业财经 | 企业战略、行业分析、商业模式、宏观经济、消费、零售... |\n| 生活方式 | 健康、运动、旅行、读书、电影、美食、教育... |\n\n完整标签列表见 `references/classification.md`。\n\n### 跨领域标签（6类）\n\n识别跨领域主题，多标签组合：\n\n| 跨领域标签 | 触发条件 |\n|-----------|---------|\n| 生物医药+投资 | 医药领域 + 融资/IPO/估值关键词 |\n| AI+医疗 | AI领域 + 医疗/医院/诊断关键词 |\n| AI+投资 | AI领域 + 融资/IPO/估值关键词 |\n| 生物医药+AI | 医药领域 + AI/大模型关键词 |\n| 商业+政治 | 商业领域 + 国际关系/政策关键词 |\n| 科学+政策 | 科学领域 + 政策/监管关键词 |\n\n## LLM 二次分类\n\n关键词分类置信度不足时，可启用 LLM 二次分类进行智能重判：\n\n```bash\n# 置信度低于 0.4 时触发 LLM\npython classify_favorites.py --llm\n\n# 全量 LLM 分类（跳过关键词）\npython classify_favorites.py --llm-only\n\n# 自定义触发阈值\npython classify_favorites.py --llm --llm-threshold 0.3\n```\n\n**环境变量配置：**\n\n| 变量 | 默认值 | 说明 |\n|------|--------|------|\n| `LLM_API_URL` | `http://localhost:4200/v1/chat/completions` | API 地址 |\n| `LLM_MODEL` | `auto` | 模型名称 |\n| `LLM_CONCURRENCY` | `5` | 最大并发数 |\n| `LLM_BATCH_SIZE` | `10` | 每批处理数量 |\n\n**OpenRouter 配置示例：**\n\n```bash\nexport LLM_API_URL=\"https://openrouter.ai/api/v1/chat/completions\"\nexport LLM_MODEL=\"deepseek/deepseek-chat\"\nexport LLM_API_KEY=\"your-openrouter-api-key\"\n```\n\n## 输出文件说明\n\n| 文件 | 内容 |\n|------|------|\n| `favorites_all.csv` | 全部收藏记录 |\n| `articles_final.csv` | 带 `category`、`subcategory`、`cross_domain` 标签的文章 |\n| `cat_*.csv` | 各分类单独文件 |\n| `llm_checkpoint.json` | LLM 分类断点（增量处理） |\n| `ima_import_state.json` | IMA 导入进度（断点续传） |\n| `ima_import.log` | IMA 导入日志 |\n\n**CSV 字段说明：**\n\n| 字段 | 说明 |\n|------|------|\n| `local_id` | 原始记录 ID |\n| `title` | 文章标题 |\n| `url` | 文章链接 |\n| `desc` | 摘要 |\n| `source` | 来源公众号 |\n| `create_time` | 收藏时间 |\n| `category` | 一级分类 |\n| `subcategory` | 二级标签（多个用逗号分隔） |\n| `cross_domain` | 跨领域标签（多个用逗号分隔） |\n| `confidence` | 分类置信度 |\n\n## favorite.db 表结构\n\n```sql\nCREATE TABLE fav_db_item (\n    local_id INTEGER PRIMARY KEY,\n    fav_local_type INTEGER,  -- 类型：1=文章, 3=图片, 等\n    status INTEGER,\n    create_time INTEGER,     -- 收藏时间戳\n    source_id TEXT,          -- 来源 wxid\n    source_type INTEGER,\n    content BLOB,            -- XML 内容\n    WCDB_CT_content INTEGER  -- 压缩标记：4=zstd\n);\n```\n\ncontent 字段解析：\n- `<title>` 标题\n- `<url>` 链接\n- `<source>` 来源公众号\n- `<description>` 摘要\n\n## 常见问题\n\n**Q: 收藏数据不完整？**\nA: 检查 `favorite.db` 最后修改时间，微信可能未同步最新数据。\n\n**Q: IMA 导入被限流？**\nA: API 限流约 200 次/小时，脚本已内置 3 秒/批的限速。\n\n**Q: 如何新增分类？**\nA: 编辑 `classify_favorites.py` 中的 `CATEGORIES` 字典。\n\n**Q: 解析失败？**\nA: 确保密钥正确，检查 `all_keys.json` 是否包含 `favorite.db` 的密钥。\n\n**Q: LLM 分类中断了怎么办？**\nA: 脚本自动保存断点到 `llm_checkpoint.json`，重新运行会从中断处继续。\n\n## 技术细节\n\n### SQLCipher 4 参数\n\n- 加密：AES-256-CBC + HMAC-SHA512\n- KDF：PBKDF2-HMAC-SHA512，256,000 iterations\n- 页面：4096 bytes，reserve = 80\n\n### 支持平台\n\n| 平台 | 解析支持 |\n|------|---------|\n| Windows | ✅ |\n| Linux | ✅ |\n| macOS | ✅ |\n\n## 相关链接\n\n- 本技能仓库：https://github.com/GeoSun/wechat-favorites-skill\n\n## 参考资料\n\n- [references/schema.md](references/schema.md) — 数据库结构详解\n- [references/classification.md](references/classification.md) — 分类算法说明\n\n## 更新日志\n\n### v1.1 — 2026-04\n\n- **分类体系升级**：新增三级分类体系——9大主类、57个二级标签、6个跨领域标签，分类更精细多元\n- **文档全面优化**：完善 SKILL.md，补充分类逻辑说明、LLM 使用指南、实测数据、文件格式说明\n- **快速上手简化**：精简配置示例、优化命令说明、增强引导提示、补充常用触发词，方便快速上手\n- **LLM 智能增强（可选）**：新增 LLM 辅助分类脚本（llm_classify.py、llm_incremental.py、merge_llm_results.py、normalize_categories.py），低置信度或模糊条目可交由大模型重新分类\n- **安全说明强化**：新增`## 安全说明`章节，强调本地化、隐私保护与数据安全\n- **版本升级**：1.1.0 → 1.1，新显示名（微信收藏知识库）\n\n## License\n\nMIT License\n\n## 免责声明\n\n本工具仅供个人备份和学习使用。请勿用于任何商业用途或违法行为。解析的数据仅限个人所有，不得传播或用于侵犯他人隐私。\n\nFile v1.1.4:_meta.json\n\n{\n  \"ownerId\": \"kn7fh7azcgp5wwsg434v6km1x5858t33\",\n  \"slug\": \"wechat-favorites\",\n  \"version\": \"1.1.4\",\n  \"publishedAt\": 1777180525657\n}\n\nFile v1.1.4:references/classification.md\n\n# 收藏分类算法 v1.2.0\n\n## 分类流程\n\n```\nfavorites_all.csv\n      │\n      ▼ 关键词多标签分类（一级）\n  categories 列（中文标签，管道分隔）\n  confidence 列（0~0.5）\n      │\n      ▼ 二级分类（基于正则匹配）\n  subcategory 列（管道分隔，可多个）\n      │\n      ▼ 跨领域标签（主分类 + 跨领域关键词）\n  cross_domain 列（管道分隔，可多个）\n      │\n      ▼ [可选] LLM 二次分类（confidence < threshold）\n  更新 categories, subcategory, cross_domain\n  追加 _llm_reason, _llm_confidence 列\n      │\n      ▼ [可选] 标签标准化\n  category 列（标准英文 key）\n```\n\n## 第一步：关键词多标签分类（一级）\n\n每篇文章可同时归属多个分类。\n\n```python\nCATEGORIES = {\n    \"生物医药\": [\"创新药\", \"ADC\", \"CAR-T\", \"mRNA\", ...],\n    \"AI科技\":   [\"GPT\", \"大模型\", \"LLM\", \"Agent\", ...],\n    \"投资金融\": [\"IPO\", \"融资\", \"估值\", \"科创板\", ...],\n    \"科学研究\": [\"Nature\", \"Science\", \"论文\", ...],\n    \"商业财经\": [\"企业\", \"战略\", \"行业\", ...],\n    \"生活方式\": [\"健康\", \"运动\", \"旅行\", ...],\n    \"媒体资讯\": [\"新闻\", \"热点\", \"评论\", ...],\n    \"政治国际\": [\"国际\", \"外交\", \"地缘\", ...],\n}\n```\n\n置信度规则：\n- 0 = 未命中任何关键词\n- 0.3 = 命中单个分类\n- 0.5 = 命中多个分类（多标签反而更难判断主次）\n\n## 第二步：二级分类\n\n基于一级分类结果，对每个命中的一级分类用正则匹配二级标签。\n\n```python\nSUBCATEGORIES = {\n    \"生物医药\": {\n        \"临床\": r\"临床|IND|NDA|CDE|FDA|NMPA|III期|II期|I期|获批|批准\",\n        \"神经\": r\"阿尔茨海默|帕金森|神经|脑科学|抑郁|...\",\n        \"创新药\": r\"创新药|新药|first-in-class|best-in-class\",\n        # ... 14 个二级标签\n    },\n    \"AI科技\": {\n        \"AI应用\": r\"AI应用|AI\\+|赋能|落地|智能化|用AI|...\",\n        \"大模型/LLM\": r\"大模型|LLM|GPT|Claude|Gemini|...\",\n        # ... 9 个二级标签\n    },\n    # ... 共 6 个一级分类有二级标签\n}\n```\n\n特点：\n- 一篇文章可命中多个二级标签（如 \"ADC+肿瘤+临床\"）\n- 不是所有文章都有二级标签（泛泛讨论只保留一级）\n- 每个一级分类下二级标签互不排斥\n\n覆盖率（实测）：\n- 生物医药: 47.0%\n- 商业财经: 44.2%\n- 投资金融: 43.8%\n- AI科技: 29.1%\n- 科学研究: 27.9%\n- 生活方式: 20.9%\n\n## 第三步：跨领域标签\n\n检测文章是否同时涉及两个领域。\n\n```python\nCROSS_DOMAIN_RULES = [\n    # (标签, 主分类, 跨领域关键词正则)\n    (\"生物医药+投资\", \"生物医药\", r\"融资|估值|IPO|上市|投资|...\"),\n    (\"AI+医疗\",       \"AI科技\",   r\"医疗|药|临床|诊断|医院|...\"),\n    (\"AI+投资\",       \"AI科技\",   r\"融资|估值|IPO|上市|投资|...\"),\n    (\"生物医药+AI\",   \"生物医药\", r\"AI|人工智能|机器学习|计算|...\"),\n    (\"科学+政策\",     \"科学研究\", r\"政策|监管|伦理|法规|...\"),\n    (\"商业+政治\",     \"商业财经\", r\"制裁|贸易战|关税|地缘|...\"),\n]\n```\n\n逻辑：先确定文章的主分类，再检查是否含跨领域关键词。\n一篇文章可有多个跨领域标签。\n\n分布（实测 32333 篇）：\n- 生物医药+投资: 2974\n- AI+医疗: 546\n- AI+投资: 339\n- 生物医药+AI: 203\n- 商业+政治: 68\n- 科学+政策: 19\n\n## 第四步：LLM 二次分类\n\n对关键词分类置信度不足（默认 < 0.4）的条目，用大模型进行智能重判。\n\n### Prompt 结构\n\n```\n文章标题：{title}\n来源公众号：{source}\n文章链接：{url}\n\n一级分类（可多选）：\n生物医药、AI科技、投资金融、科学研究、商业财经、生活方式、媒体资讯、政治国际\n\n二级分类（选填，根据一级分类选对应的子标签）：\n- 生物医药：临床、神经、创新药、肿瘤、...\n- AI科技：AI应用、大模型/LLM、AI医疗、...\n- ...\n\n跨领域标签（选填，文章同时涉及两个领域时标注）：\n生物医药+投资、AI+医疗、AI+投资、生物医药+AI、科学+政策、商业+政治\n\n输出 JSON：{\"tags\": [...], \"subcategories\": [...], \"cross_domain\": [...], \"reason\": \"...\", \"confidence\": 0~1}\n```\n\n### LLM 结果解析\n\n1. 提取 JSON（支持 ```json 代码块包裹）\n2. 过滤无效一级标签（只保留 8 个标准分类）\n3. 过滤无效二级标签（只保留 SUBCATEGORY_TAGS 中定义的）\n4. 过滤无效跨领域标签（只保留 CROSS_DOMAIN_TAGS 中定义的）\n5. confidence >= 0.5 时采纳，否则保留原分类\n\n### 增量处理\n\n对于大量 other 条目（>1000），推荐增量模式：\n- `llm_incremental.py`：每批 50 条，并发 20，每 5 分钟保存检查点\n- 中断后重新运行自动续传\n- 合并：`merge_llm_results.py` 将检查点结果写回 CSV\n\n## 第五步：标签标准化\n\nLLM 和关键词可能输出不同格式的标签，标准化映射：\n\n| 标准分类 | 英文 key | 接受的输入格式 |\n|---------|----------|--------------|\n| 生物医药 | `biomed` | 生物医药, biomed |\n| AI科技 | `ai` | AI科技, ai, tech |\n| 投资金融 | `invest` | 投资金融, invest |\n| 科学研究 | `science` | 科学研究, science |\n| 商业财经 | `business` | 商业财经, business |\n| 生活方式 | `lifestyle` | 生活方式, lifestyle |\n| 媒体资讯 | `media` | 媒体资讯, media |\n| 政治国际 | `politics` | 政治国际, politics |\n\n二级标签别名映射（示例）：\n- \"大模型/LLM\" ← \"大模型\", \"LLM\", \"LLM/GPT\"\n- \"VC/PE\" ← \"VC\", \"PE\", \"风险投资\", \"私募股权\"\n- \"芯片/算力\" ← \"芯片\", \"算力\", \"GPU\", \"半导体\"\n\n复合标签（`+`/`|`/`,` 分隔）取第一个已知分类作为主分类。\n\n特殊映射：`tech` → `ai`（技术类合并到 AI科技）\n\n## 分类统计（实测数据，32333 篇）\n\n### 一级分类\n\n| 分类 | 数量 | 占比 |\n|------|------|------|\n| 生物医药 | 12,010 | 37.1% |\n| 生活方式 | 4,551 | 14.1% |\n| 商业财经 | 3,985 | 12.3% |\n| 科学研究 | 3,128 | 9.7% |\n| 投资金融 | 3,021 | 9.3% |\n| 媒体资讯 | 2,417 | 7.5% |\n| AI科技 | 2,151 | 6.7% |\n| 政治国际 | 939 | 2.9% |\n| other | 131 | 0.4% |\n\n### 二级标签 top 10\n\n| 标签 | 数量 |\n|------|------|\n| 生物医药>临床 | 2,144 |\n| 生物医药>创新药 | 1,418 |\n| 生物医药>神经 | 1,232 |\n| 生物医药>肿瘤 | 886 |\n| 商业财经>宏观经济 | 856 |\n| 商业财经>行业分析 | 810 |\n| 投资金融>VC/PE | 685 |\n| 科学研究>神经科学 | 576 |\n| 生物医药>抗体 | 564 |\n| 投资金融>二级市场 | 517 |\n\n### 跨领域标签\n\n| 标签 | 数量 |\n|------|------|\n| 生物医药+投资 | 2,974 |\n| AI+医疗 | 546 |\n| AI+投资 | 339 |\n| 生物医药+AI | 203 |\n| 商业+政治 | 68 |\n| 科学+政策 | 19 |\n\n## 年度趋势\n\n收藏高峰：2019年（6,558篇）、2023年（6,145篇）\n生物医药占比逐年上升：2017年 5.6% → 2023年 44.8%\n\nFile v1.1.4:references/schema.md\n\n# favorite.db 数据库结构\n\n## 表：fav_db_item\n\n存储所有收藏记录。\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| local_id | INTEGER | 主键，收藏记录ID |\n| fav_local_type | INTEGER | 收藏类型 |\n| status | INTEGER | 状态标记 |\n| create_time | INTEGER | 收藏时间（Unix时间戳） |\n| source_id | TEXT | 来源用户/公众号 wxid |\n| source_type | INTEGER | 来源类型 |\n| content | BLOB | 收藏内容（XML格式，可能压缩） |\n| WCDB_CT_content | INTEGER | 压缩类型（4=zstd） |\n\n## fav_local_type 类型值\n\n| 值 | 类型 |\n|----|------|\n| 1 | 文章/链接 |\n| 2 | 图片 |\n| 3 | 视频 |\n| 4 | 文件 |\n| 5 | 语音 |\n| 6 | 位置 |\n| 7 | 名片 |\n| 8 | 文本笔记 |\n\n## content XML 结构\n\n文章类型（fav_local_type=1）的 content 示例：\n\n```xml\n<favitem>\n  <type>1</type>\n  <title>文章标题</title>\n  <desc>文章摘要</desc>\n  <url>https://mp.weixin.qq.com/s/xxx</url>\n  <source>公众号名称</source>\n  <sourcetype>9</sourcetype>\n  <thumburl>封面图URL</thumburl>\n</favitem>\n```\n\n## 解析代码\n\n```python\nimport xml.etree.ElementTree as ET\n\ndef parse_favorite_content(content_bytes, ct):\n    # 解压 zstd\n    if ct == 4:\n        import zstandard as zstd\n        content = zstd.ZstdDecompressor().decompress(content_bytes)\n    else:\n        content = content_bytes\n    \n    root = ET.fromstring(content)\n    return {\n        'type': root.findtext('type'),\n        'title': root.findtext('title', ''),\n        'desc': root.findtext('desc', ''),\n        'url': root.findtext('url', ''),\n        'source': root.findtext('source', ''),\n    }\n```\n\n## 相关表\n\n- `favorite_fts.db` — 全文搜索索引（SQLite FTS）\n\nFile v1.1.4:skill-card.md\n\n## Description: <br>\n微信收藏知识库 helps agents export WeChat Favorites from a parsed favorite.db, classify saved articles with local rules or optional LLM review, and prepare CSV outputs for personal knowledge-base workflows. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[geosun](https://clawhub.ai/user/geosun) <br>\n\n### License/Terms of Use: <br>\nMIT <br>\n\n\n## Use Case: <br>\nIndividuals and developers use this skill to organize their own WeChat Favorites into CSV datasets, category reports, and optional knowledge-base imports. It is suited for local personal-archive workflows where users can keep core export and keyword classification offline. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill handles sensitive local WeChat data and can decrypt databases when given database access and keys. <br>\nMitigation: Use it only on WeChat data you own, provide the narrowest required database and key inputs, and delete decrypted databases and exported files when finished. <br>\nRisk: Optional LLM classification and IMA import can send favorites metadata or URL lists to configured external services. <br>\nMitigation: Set SAFE_MODE=1 for offline use, and avoid --llm, --llm-only, llm_incremental.py, and import_ima.py unless you accept those network data flows. <br>\nRisk: The security scan verdict is suspicious because privacy disclosure and local decryption scope require review. <br>\nMitigation: Review the skill before installing and avoid broad all_keys.json or db_storage access unless you intend it to process more than favorite.db. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/geosun/wechat-favorites) <br>\n- [Database schema reference](references/schema.md) <br>\n- [Classification algorithm reference](references/classification.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with shell commands and generated CSV, JSON checkpoint, state, and log files] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Core outputs include favorites_all.csv, articles_final.csv, cat_*.csv, llm_checkpoint.json, ima_import_state.json, and ima_import.log.] <br>\n\n## Skill Version(s): <br>\n1.1.4 (source: server metadata and SKILL.md metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.1.4:LICENSE.txt\n\nMIT License\n\nCopyright (c) 2024\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nFile v1.1.4:requirements.txt\n\n# wechat-favorites 依赖\npycryptodome>=3.19\nzstandard>=0.22\n# LLM 分类使用 urllib（标准库），无需额外依赖\n\nArchive v1.1.3: 16 files, 40453 bytes\n\nFiles: LICENSE.txt (1056b), references/classification.md (6962b), references/schema.md (1703b), requirements.txt (123b), scripts/classify_favorites.py (20108b), scripts/config.py (8475b), scripts/decrypt_db.py (6139b), scripts/export_favorites.py (4281b), scripts/import_ima.py (7888b), scripts/key_utils.py (1225b), scripts/llm_classify.py (9006b), scripts/llm_incremental.py (6312b), scripts/merge_llm_results.py (3585b), scripts/normalize_categories.py (7292b), SKILL.md (13039b), _meta.json (135b)\n\nFile v1.1.3:SKILL.md\n\n---\nname: wechat-favorites\ndescription: 微信收藏夹导出、智能分类与知识库管理。支持从解析后的 favorite.db 导出收藏记录、三级分类体系（一级9类 + 二级57标签 + 跨领域6类）、LLM 智能增强（可选）、批量导入 IMA 知识库（可选）。核心功能支持离线使用，网络功能默认关闭。\nmetadata:\n  version: 1.1.3\n  display_name: 微信收藏知识库\n---\n\n# 微信收藏知识库\n\nDecrypt, categorize and organize wechat favorites (Official Account collection) into knowledge base\n\n收藏夹导出 · 智能分类 · 知识库导入\n\n**快速上手：** 解析收藏夹 → 导出记录 → 智能分类 → 导入 IMA 知识库\n\n> 💡 **试试这样说：** \"帮我整理微信收藏\" / \"导出收藏夹并分类\" / \"把微信收藏导入知识库\" / \"解析 favorite.db 导出文章\"\n\n---\n\n**触发词：** 微信收藏（WeChat Favorites）、收藏夹导出（favorites export）、收藏文章分类（favorites classification）、IMA 知识库导入（knowledge base import）、收藏整理（favorites organizer）、微信公众号收藏、公众号文章整理\n\n---\n\n## 为什么用这个工具？\n\n微信收藏夹积累了大量文章：随手打的标签越来越复杂，待读越积越多，从来没有真正整理过，也不记得读了哪些、学到了什么。这个工具可以：\n\n- **自动分类** — 96% 的文章自动归入 9 大类，无需手动整理\n- **细粒度标签** — 57 个二级标签，精准定位细分主题\n- **跨领域识别** — 自动标注\"生物医药+投资\"等复合主题\n- **LLM 增强** — 低置信度条目用大模型智能重判\n- **知识库导入** — 一键导入 IMA，构建个人知识库\n\n## 实测数据\n\n基于 32,333 篇文章（2014-2025 收藏）：\n\n| 指标 | 数值 |\n|------|------|\n| 总收藏数 | 36,853 |\n| 文章数 | 32,333 |\n| 一级分类覆盖率 | 96.0% (31,088/32,333) |\n| LLM 重分类成功率 | 98.5% (8,789/8,912) |\n| 二级标签平均覆盖率 | 35.5% |\n\n## 核心能力\n\n| 能力 | 说明 |\n|------|------|\n| **收藏导出** | 从解析后的 `favorite.db` 导出全部收藏记录为 CSV |\n| **关键词分类** | 一级分类 9 类（生物医药/AI/投资等），关键词匹配自动识别 |\n| **标签增强** | 二级标签 57 个 + 跨领域标签 6 类，支持多标签组合 |\n| **LLM 增强（可选）** | 置信度 < 0.4 时自动调用 LLM 二次分类，需配置 API Key |\n| **IMA导入（可选）** | 批量导入到 IMA 知识库，需配置凭证 |\n| **报告生成** | 分类统计、各分类 CSV 导出 |\n\n## 前置条件\n\n### 1. 微信收藏数据库\n\n本工具需要已解析的 `favorite.db` 文件。解析步骤请使用专门的微信数据库处理工具。\n\n### 2. Python 环境\n\n```bash\npip install pycryptodome zstandard\n```\n\n### 3. IMA 导入（可选）\n\n如需导入 IMA 知识库：\n1. 创建 IMA 知识库，获取 `kb_id`\n2. 配置凭证：`~/.config/ima/client_id` 和 `~/.config/ima/api_key`\n\n\n### 4. IMA 导入配置（可选）\n\nIMA 凭证支持多种配置方式（优先级从高到低）：\n\n| 方式 | 说明 |\n|------|------|\n| 命令行参数 | `--client-id`, `--api-key`, `--kb-id` |\n| 环境变量 | `IMA_CLIENT_ID`, `IMA_API_KEY`, `IMA_KB_ID` |\n| config.json | `ima_kb_id` 字段 |\n| 文件 | `~/.config/ima/client_id`, `~/.config/ima/api_key` |\n\n```bash\n# 方式 1: 命令行参数\npython import_ima.py --kb-id YOUR_KB_ID --client-id XXX --api-key YYY\n\n# 方式 2: 环境变量\nIMA_CLIENT_ID=xxx IMA_API_KEY=yyy python import_ima.py\n\n# 方式 3: 配置文件\n# 在项目目录创建 config.json，填写 ima_kb_id\n# 创建 ~/.config/ima/client_id 和 api_key 文件\n```\n\n## 安全说明\n\n本工具涉及本地文件操作与可选网络调用，但所有核心功能可在离线环境完成：\n\n| 操作 | 行为 | 数据流向 |\n|------|------|----------|\n| **收藏导出** | 读取已解析的 `favorite.db`，导出为 CSV | 本地只读 |\n| **IMA 导入** | 可选功能，需配置 `client_id`/`api_key` | 本地 → IMA 云端 |\n| **LLM 分类** | 可选功能，仅发送文章标题/摘要 | 本地 → 外部 API |\n\n**离线使用方案：**\n- 导出 + 本地分类：无需网络，无需配置 API\n- LLM 增强：使用本地模型（如 Ollama，修改 `LLM_API_URL`）\n- IMA 导入：可选功能，不导入不影响其他功能\n\n**建议：** 在信任的网络环境或离线环境使用，网络功能均为可选，默认关闭。\n\n## 快速开始\n\n```bash\ncd scripts\n\n# 0. 验证环境\npython quick_validate.py\n\n# 1. 解析数据库（如未解析）\npython decrypt_db.py  # 或使用其他工具\n\n# 2. 导出收藏记录\npython export_favorites.py\n\n# 3. 智能分类（支持 LLM 增强）\npython classify_favorites.py\n\n# 4. 导入 IMA（可选）\npython import_ima.py\n```\n\n## 目录结构\n\n```\nwechat-favorites/\n├── SKILL.md                     # 本文件\n├── LICENSE.txt                  # MIT License\n├── CHANGELOG.md                 # 更新日志\n├── requirements.txt             # 依赖声明\n├── config.json                  # 用户配置（需创建）\n├── scripts/\n│   ├── quick_validate.py        # 环境验证\n│   ├── decrypt_db.py            # 数据库解析\n│   ├── export_favorites.py      # 收藏导出\n│   ├── classify_favorites.py    # 智能分类（一级+二级+跨领域）\n│   ├── llm_classify.py          # LLM 二次分类模块\n│   ├── llm_incremental.py       # LLM 增量批处理\n│   ├── merge_llm_results.py     # LLM 结果合并\n│   ├── normalize_categories.py  # 标签标准化\n│   ├── import_ima.py            # IMA 导入\n│   ├── config.py                # 配置加载\n│   └── key_utils.py             # 密钥工具\n├── decrypted/                   # 解析输出\n│   └── favorite/favorite.db\n├── exported_favorites/          # 导出输出\n│   ├── favorites_all.csv        # 全部收藏\n│   ├── articles_final.csv       # 带分类标签\n│   ├── cat_biomed.csv           # 生物医药分类\n│   ├── cat_AI科技.csv           # AI 分类\n│   └── ...\n└── references/\n    ├── classification.md        # 分类算法说明\n    └── schema.md                # 数据库结构\n```\n\n## 数据流程\n\n```\nfavorite.db (加密)\n      │\n      ▼ decrypt_db.py\nfavorite.db (解析后)\n      │\n      ▼ export_favorites.py\nfavorites_all.csv\n      │\n      ▼ classify_favorites.py [--llm]\narticles_final.csv + cat_*.csv\n      │\n      ▼ import_ima.py\nIMA 知识库\n```\n\n## 分类体系\n\n### 一级分类（9类）\n\n| 分类 | 关键词示例 |\n|------|-----------|\n| 生物医药 | 创新药、ADC、CAR-T、mRNA、临床试验、靶点、抗体 |\n| AI科技 | GPT、大模型、Agent、RAG、芯片、GPU、NVIDIA |\n| 投资金融 | IPO、融资、科创板、估值、基金、VC、PE |\n| 科学研究 | Nature、Science、论文、神经科学、突破 |\n| 商业财经 | 企业战略、行业分析、商业模式、宏观 |\n| 生活方式 | 健康、运动、旅行、读书、电影 |\n| 媒体资讯 | 新闻、热点、评论、舆论 |\n| 政治国际 | 国际关系、地缘政治、中美、外交 |\n| 其他 | 未命中以上分类 |\n\n### 二级标签（57个）\n\n每个一级分类下设细分标签，关键词匹配自动识别：\n\n| 一级分类 | 二级标签示例 |\n|---------|-------------|\n| 生物医药 | ADC、CAR-T、mRNA、创新药、临床、神经科学、免疫治疗、基因编辑、疫苗、医疗器械... |\n| AI科技 | 大模型、AI应用、AI医疗、自动驾驶、机器人、GPU、芯片、深度学习、RAG、Agent... |\n| 投资金融 | VC/PE、二级市场、IPO、并购、估值、私募、公募、债券、量化... |\n| 科学研究 | 神经科学、物理、化学、生物、材料、天文学、量子计算... |\n| 商业财经 | 企业战略、行业分析、商业模式、宏观经济、消费、零售... |\n| 生活方式 | 健康、运动、旅行、读书、电影、美食、教育... |\n\n完整标签列表见 `references/classification.md`。\n\n### 跨领域标签（6类）\n\n识别跨领域主题，多标签组合：\n\n| 跨领域标签 | 触发条件 |\n|-----------|---------|\n| 生物医药+投资 | 医药领域 + 融资/IPO/估值关键词 |\n| AI+医疗 | AI领域 + 医疗/医院/诊断关键词 |\n| AI+投资 | AI领域 + 融资/IPO/估值关键词 |\n| 生物医药+AI | 医药领域 + AI/大模型关键词 |\n| 商业+政治 | 商业领域 + 国际关系/政策关键词 |\n| 科学+政策 | 科学领域 + 政策/监管关键词 |\n\n## LLM 二次分类\n\n关键词分类置信度不足时，可启用 LLM 二次分类进行智能重判：\n\n```bash\n# 置信度低于 0.4 时触发 LLM\npython classify_favorites.py --llm\n\n# 全量 LLM 分类（跳过关键词）\npython classify_favorites.py --llm-only\n\n# 自定义触发阈值\npython classify_favorites.py --llm --llm-threshold 0.3\n```\n\n**环境变量配置：**\n\n| 变量 | 默认值 | 说明 |\n|------|--------|------|\n| `LLM_API_URL` | `http://localhost:4200/v1/chat/completions` | API 地址 |\n| `LLM_MODEL` | `auto` | 模型名称 |\n| `LLM_CONCURRENCY` | `5` | 最大并发数 |\n| `LLM_BATCH_SIZE` | `10` | 每批处理数量 |\n\n**OpenRouter 配置示例：**\n\n```bash\nexport LLM_API_URL=\"https://openrouter.ai/api/v1/chat/completions\"\nexport LLM_MODEL=\"deepseek/deepseek-chat\"\nexport LLM_API_KEY=\"your-openrouter-api-key\"\n```\n\n## 输出文件说明\n\n| 文件 | 内容 |\n|------|------|\n| `favorites_all.csv` | 全部收藏记录 |\n| `articles_final.csv` | 带 `category`、`subcategory`、`cross_domain` 标签的文章 |\n| `cat_*.csv` | 各分类单独文件 |\n| `llm_checkpoint.json` | LLM 分类断点（增量处理） |\n| `ima_import_state.json` | IMA 导入进度（断点续传） |\n| `ima_import.log` | IMA 导入日志 |\n\n**CSV 字段说明：**\n\n| 字段 | 说明 |\n|------|------|\n| `local_id` | 原始记录 ID |\n| `title` | 文章标题 |\n| `url` | 文章链接 |\n| `desc` | 摘要 |\n| `source` | 来源公众号 |\n| `create_time` | 收藏时间 |\n| `category` | 一级分类 |\n| `subcategory` | 二级标签（多个用逗号分隔） |\n| `cross_domain` | 跨领域标签（多个用逗号分隔） |\n| `confidence` | 分类置信度 |\n\n## favorite.db 表结构\n\n```sql\nCREATE TABLE fav_db_item (\n    local_id INTEGER PRIMARY KEY,\n    fav_local_type INTEGER,  -- 类型：1=文章, 3=图片, 等\n    status INTEGER,\n    create_time INTEGER,     -- 收藏时间戳\n    source_id TEXT,          -- 来源 wxid\n    source_type INTEGER,\n    content BLOB,            -- XML 内容\n    WCDB_CT_content INTEGER  -- 压缩标记：4=zstd\n);\n```\n\ncontent 字段解析：\n- `<title>` 标题\n- `<url>` 链接\n- `<source>` 来源公众号\n- `<description>` 摘要\n\n## 常见问题\n\n**Q: 收藏数据不完整？**\nA: 检查 `favorite.db` 最后修改时间，微信可能未同步最新数据。\n\n**Q: IMA 导入被限流？**\nA: API 限流约 200 次/小时，脚本已内置 3 秒/批的限速。\n\n**Q: 如何新增分类？**\nA: 编辑 `classify_favorites.py` 中的 `CATEGORIES` 字典。\n\n**Q: 解析失败？**\nA: 确保密钥正确，检查 `all_keys.json` 是否包含 `favorite.db` 的密钥。\n\n**Q: LLM 分类中断了怎么办？**\nA: 脚本自动保存断点到 `llm_checkpoint.json`，重新运行会从中断处继续。\n\n## 技术细节\n\n### SQLCipher 4 参数\n\n- 加密：AES-256-CBC + HMAC-SHA512\n- KDF：PBKDF2-HMAC-SHA512，256,000 iterations\n- 页面：4096 bytes，reserve = 80\n\n### 支持平台\n\n| 平台 | 解析支持 |\n|------|---------|\n| Windows | ✅ |\n| Linux | ✅ |\n| macOS | ✅ |\n\n## 相关链接\n\n- 本技能仓库：https://github.com/GeoSun/wechat-favorites-skill\n\n## 参考资料\n\n- [references/schema.md](references/schema.md) — 数据库结构详解\n- [references/classification.md](references/classification.md) — 分类算法说明\n\n## 更新日志\n\n### v1.1 — 2026-04\n\n- **分类体系升级**：新增三级分类体系——9大主类、57个二级标签、6个跨领域标签，分类更精细多元\n- **文档全面优化**：完善 SKILL.md，补充分类逻辑说明、LLM 使用指南、实测数据、文件格式说明\n- **快速上手简化**：精简配置示例、优化命令说明、增强引导提示、补充常用触发词，方便快速上手\n- **LLM 智能增强（可选）**：新增 LLM 辅助分类脚本（llm_classify.py、llm_incremental.py、merge_llm_results.py、normalize_categories.py），低置信度或模糊条目可交由大模型重新分类\n- **安全说明强化**：新增`## 安全说明`章节，强调本地化、隐私保护与数据安全\n- **版本升级**：1.1.0 → 1.1，新显示名（微信收藏知识库）\n\n## License\n\nMIT License\n\n## 免责声明\n\n本工具仅供个人备份和学习使用。请勿用于任何商业用途或违法行为。解析的数据仅限个人所有，不得传播或用于侵犯他人隐私。\n\nFile v1.1.3:_meta.json\n\n{\n  \"ownerId\": \"kn7fh7azcgp5wwsg434v6km1x5858t33\",\n  \"slug\": \"wechat-favorites\",\n  \"version\": \"1.1.3\",\n  \"publishedAt\": 1777177696794\n}\n\nFile v1.1.3:references/classification.md\n\n# 收藏分类算法 v1.2.0\n\n## 分类流程\n\n```\nfavorites_all.csv\n      │\n      ▼ 关键词多标签分类（一级）\n  categories 列（中文标签，管道分隔）\n  confidence 列（0~0.5）\n      │\n      ▼ 二级分类（基于正则匹配）\n  subcategory 列（管道分隔，可多个）\n      │\n      ▼ 跨领域标签（主分类 + 跨领域关键词）\n  cross_domain 列（管道分隔，可多个）\n      │\n      ▼ [可选] LLM 二次分类（confidence < threshold）\n  更新 categories, subcategory, cross_domain\n  追加 _llm_reason, _llm_confidence 列\n      │\n      ▼ [可选] 标签标准化\n  category 列（标准英文 key）\n```\n\n## 第一步：关键词多标签分类（一级）\n\n每篇文章可同时归属多个分类。\n\n```python\nCATEGORIES = {\n    \"生物医药\": [\"创新药\", \"ADC\", \"CAR-T\", \"mRNA\", ...],\n    \"AI科技\":   [\"GPT\", \"大模型\", \"LLM\", \"Agent\", ...],\n    \"投资金融\": [\"IPO\", \"融资\", \"估值\", \"科创板\", ...],\n    \"科学研究\": [\"Nature\", \"Science\", \"论文\", ...],\n    \"商业财经\": [\"企业\", \"战略\", \"行业\", ...],\n    \"生活方式\": [\"健康\", \"运动\", \"旅行\", ...],\n    \"媒体资讯\": [\"新闻\", \"热点\", \"评论\", ...],\n    \"政治国际\": [\"国际\", \"外交\", \"地缘\", ...],\n}\n```\n\n置信度规则：\n- 0 = 未命中任何关键词\n- 0.3 = 命中单个分类\n- 0.5 = 命中多个分类（多标签反而更难判断主次）\n\n## 第二步：二级分类\n\n基于一级分类结果，对每个命中的一级分类用正则匹配二级标签。\n\n```python\nSUBCATEGORIES = {\n    \"生物医药\": {\n        \"临床\": r\"临床|IND|NDA|CDE|FDA|NMPA|III期|II期|I期|获批|批准\",\n        \"神经\": r\"阿尔茨海默|帕金森|神经|脑科学|抑郁|...\",\n        \"创新药\": r\"创新药|新药|first-in-class|best-in-class\",\n        # ... 14 个二级标签\n    },\n    \"AI科技\": {\n        \"AI应用\": r\"AI应用|AI\\+|赋能|落地|智能化|用AI|...\",\n        \"大模型/LLM\": r\"大模型|LLM|GPT|Claude|Gemini|...\",\n        # ... 9 个二级标签\n    },\n    # ... 共 6 个一级分类有二级标签\n}\n```\n\n特点：\n- 一篇文章可命中多个二级标签（如 \"ADC+肿瘤+临床\"）\n- 不是所有文章都有二级标签（泛泛讨论只保留一级）\n- 每个一级分类下二级标签互不排斥\n\n覆盖率（实测）：\n- 生物医药: 47.0%\n- 商业财经: 44.2%\n- 投资金融: 43.8%\n- AI科技: 29.1%\n- 科学研究: 27.9%\n- 生活方式: 20.9%\n\n## 第三步：跨领域标签\n\n检测文章是否同时涉及两个领域。\n\n```python\nCROSS_DOMAIN_RULES = [\n    # (标签, 主分类, 跨领域关键词正则)\n    (\"生物医药+投资\", \"生物医药\", r\"融资|估值|IPO|上市|投资|...\"),\n    (\"AI+医疗\",       \"AI科技\",   r\"医疗|药|临床|诊断|医院|...\"),\n    (\"AI+投资\",       \"AI科技\",   r\"融资|估值|IPO|上市|投资|...\"),\n    (\"生物医药+AI\",   \"生物医药\", r\"AI|人工智能|机器学习|计算|...\"),\n    (\"科学+政策\",     \"科学研究\", r\"政策|监管|伦理|法规|...\"),\n    (\"商业+政治\",     \"商业财经\", r\"制裁|贸易战|关税|地缘|...\"),\n]\n```\n\n逻辑：先确定文章的主分类，再检查是否含跨领域关键词。\n一篇文章可有多个跨领域标签。\n\n分布（实测 32333 篇）：\n- 生物医药+投资: 2974\n- AI+医疗: 546\n- AI+投资: 339\n- 生物医药+AI: 203\n- 商业+政治: 68\n- 科学+政策: 19\n\n## 第四步：LLM 二次分类\n\n对关键词分类置信度不足（默认 < 0.4）的条目，用大模型进行智能重判。\n\n### Prompt 结构\n\n```\n文章标题：{title}\n来源公众号：{source}\n文章链接：{url}\n\n一级分类（可多选）：\n生物医药、AI科技、投资金融、科学研究、商业财经、生活方式、媒体资讯、政治国际\n\n二级分类（选填，根据一级分类选对应的子标签）：\n- 生物医药：临床、神经、创新药、肿瘤、...\n- AI科技：AI应用、大模型/LLM、AI医疗、...\n- ...\n\n跨领域标签（选填，文章同时涉及两个领域时标注）：\n生物医药+投资、AI+医疗、AI+投资、生物医药+AI、科学+政策、商业+政治\n\n输出 JSON：{\"tags\": [...], \"subcategories\": [...], \"cross_domain\": [...], \"reason\": \"...\", \"confidence\": 0~1}\n```\n\n### LLM 结果解析\n\n1. 提取 JSON（支持 ```json 代码块包裹）\n2. 过滤无效一级标签（只保留 8 个标准分类）\n3. 过滤无效二级标签（只保留 SUBCATEGORY_TAGS 中定义的）\n4. 过滤无效跨领域标签（只保留 CROSS_DOMAIN_TAGS 中定义的）\n5. confidence >= 0.5 时采纳，否则保留原分类\n\n### 增量处理\n\n对于大量 other 条目（>1000），推荐增量模式：\n- `llm_incremental.py`：每批 50 条，并发 20，每 5 分钟保存检查点\n- 中断后重新运行自动续传\n- 合并：`merge_llm_results.py` 将检查点结果写回 CSV\n\n## 第五步：标签标准化\n\nLLM 和关键词可能输出不同格式的标签，标准化映射：\n\n| 标准分类 | 英文 key | 接受的输入格式 |\n|---------|----------|--------------|\n| 生物医药 | `biomed` | 生物医药, biomed |\n| AI科技 | `ai` | AI科技, ai, tech |\n| 投资金融 | `invest` | 投资金融, invest |\n| 科学研究 | `science` | 科学研究, science |\n| 商业财经 | `business` | 商业财经, business |\n| 生活方式 | `lifestyle` | 生活方式, lifestyle |\n| 媒体资讯 | `media` | 媒体资讯, media |\n| 政治国际 | `politics` | 政治国际, politics |\n\n二级标签别名映射（示例）：\n- \"大模型/LLM\" ← \"大模型\", \"LLM\", \"LLM/GPT\"\n- \"VC/PE\" ← \"VC\", \"PE\", \"风险投资\", \"私募股权\"\n- \"芯片/算力\" ← \"芯片\", \"算力\", \"GPU\", \"半导体\"\n\n复合标签（`+`/`|`/`,` 分隔）取第一个已知分类作为主分类。\n\n特殊映射：`tech` → `ai`（技术类合并到 AI科技）\n\n## 分类统计（实测数据，32333 篇）\n\n### 一级分类\n\n| 分类 | 数量 | 占比 |\n|------|------|------|\n| 生物医药 | 12,010 | 37.1% |\n| 生活方式 | 4,551 | 14.1% |\n| 商业财经 | 3,985 | 12.3% |\n| 科学研究 | 3,128 | 9.7% |\n| 投资金融 | 3,021 | 9.3% |\n| 媒体资讯 | 2,417 | 7.5% |\n| AI科技 | 2,151 | 6.7% |\n| 政治国际 | 939 | 2.9% |\n| other | 131 | 0.4% |\n\n### 二级标签 top 10\n\n| 标签 | 数量 |\n|------|------|\n| 生物医药>临床 | 2,144 |\n| 生物医药>创新药 | 1,418 |\n| 生物医药>神经 | 1,232 |\n| 生物医药>肿瘤 | 886 |\n| 商业财经>宏观经济 | 856 |\n| 商业财经>行业分析 | 810 |\n| 投资金融>VC/PE | 685 |\n| 科学研究>神经科学 | 576 |\n| 生物医药>抗体 | 564 |\n| 投资金融>二级市场 | 517 |\n\n### 跨领域标签\n\n| 标签 | 数量 |\n|------|------|\n| 生物医药+投资 | 2,974 |\n| AI+医疗 | 546 |\n| AI+投资 | 339 |\n| 生物医药+AI | 203 |\n| 商业+政治 | 68 |\n| 科学+政策 | 19 |\n\n## 年度趋势\n\n收藏高峰：2019年（6,558篇）、2023年（6,145篇）\n生物医药占比逐年上升：2017年 5.6% → 2023年 44.8%\n\nFile v1.1.3:references/schema.md\n\n# favorite.db 数据库结构\n\n## 表：fav_db_item\n\n存储所有收藏记录。\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| local_id | INTEGER | 主键，收藏记录ID |\n| fav_local_type | INTEGER | 收藏类型 |\n| status | INTEGER | 状态标记 |\n| create_time | INTEGER | 收藏时间（Unix时间戳） |\n| source_id | TEXT | 来源用户/公众号 wxid |\n| source_type | INTEGER | 来源类型 |\n| content | BLOB | 收藏内容（XML格式，可能压缩） |\n| WCDB_CT_content | INTEGER | 压缩类型（4=zstd） |\n\n## fav_local_type 类型值\n\n| 值 | 类型 |\n|----|------|\n| 1 | 文章/链接 |\n| 2 | 图片 |\n| 3 | 视频 |\n| 4 | 文件 |\n| 5 | 语音 |\n| 6 | 位置 |\n| 7 | 名片 |\n| 8 | 文本笔记 |\n\n## content XML 结构\n\n文章类型（fav_local_type=1）的 content 示例：\n\n```xml\n<favitem>\n  <type>1</type>\n  <title>文章标题</title>\n  <desc>文章摘要</desc>\n  <url>https://mp.weixin.qq.com/s/xxx</url>\n  <source>公众号名称</source>\n  <sourcetype>9</sourcetype>\n  <thumburl>封面图URL</thumburl>\n</favitem>\n```\n\n## 解析代码\n\n```python\nimport xml.etree.ElementTree as ET\n\ndef parse_favorite_content(content_bytes, ct):\n    # 解压 zstd\n    if ct == 4:\n        import zstandard as zstd\n        content = zstd.ZstdDecompressor().decompress(content_bytes)\n    else:\n        content = content_bytes\n    \n    root = ET.fromstring(content)\n    return {\n        'type': root.findtext('type'),\n        'title': root.findtext('title', ''),\n        'desc': root.findtext('desc', ''),\n        'url': root.findtext('url', ''),\n        'source': root.findtext('source', ''),\n    }\n```\n\n## 相关表\n\n- `favorite_fts.db` — 全文搜索索引（SQLite FTS）\n\nFile v1.1.3:LICENSE.txt\n\nMIT License\n\nCopyright (c) 2024\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nFile v1.1.3:requirements.txt\n\n# wechat-favorites 依赖\npycryptodome>=3.19\nzstandard>=0.22\n# LLM 分类使用 urllib（标准库），无需额外依赖\n\nArchive v1.1.2: 16 files, 40249 bytes\n\nFiles: LICENSE.txt (1056b), references/classification.md (6962b), references/schema.md (1703b), requirements.txt (123b), scripts/classify_favorites.py (20108b), scripts/config.py (8475b), scripts/decrypt_db.py (6139b), scripts/export_favorites.py (4281b), scripts/import_ima.py (7888b), scripts/key_utils.py (1225b), scripts/llm_classify.py (9006b), scripts/llm_incremental.py (6312b), scripts/merge_llm_results.py (3585b), scripts/normalize_categories.py (7292b), SKILL.md (12638b), _meta.json (135b)\n\nFile v1.1.2:SKILL.md\n\n---\nname: wechat-favorites\ndescription: 微信收藏夹导出、智能分类与知识库管理。支持从解密后的 favorite.db 导出收藏记录、三级分类体系（一级9类 + 二级57标签 + 跨领域6类）、LLM 智能增强（可选）、批量导入 IMA 知识库（可选）。核心功能支持离线使用，网络功能默认关闭。\nmetadata:\n  version: 1.1.2\n  display_name: 微信收藏知识库\n---\n\n# 微信收藏知识库\n\nDecrypt, categorize and organize wechat favorites (Official Account collection) into knowledge base\n\n收藏夹导出 · 智能分类 · 知识库导入\n\n**快速上手：** 解密收藏夹 → 导出记录 → 智能分类 → 导入 IMA 知识库\n\n> 💡 **试试这样说：** \"帮我整理微信收藏\" / \"导出收藏夹并分类\" / \"把微信收藏导入知识库\" / \"解密 favorite.db 导出文章\"\n\n---\n\n**触发词：** 微信收藏（WeChat Favorites）、收藏夹导出（favorites export）、收藏文章分类（favorites classification）、IMA 知识库导入（knowledge base import）、收藏整理（favorites organizer）、微信公众号收藏、公众号文章整理\n\n---\n\n## 为什么用这个工具？\n\n微信收藏夹积累了大量文章：随手打的标签越来越复杂，待读越积越多，从来没有真正整理过，也不记得读了哪些、学到了什么。这个工具可以：\n\n- **自动分类** — 96% 的文章自动归入 9 大类，无需手动整理\n- **细粒度标签** — 57 个二级标签，精准定位细分主题\n- **跨领域识别** — 自动标注\"生物医药+投资\"等复合主题\n- **LLM 增强** — 低置信度条目用大模型智能重判\n- **知识库导入** — 一键导入 IMA，构建个人知识库\n\n## 实测数据\n\n基于 32,333 篇文章（2014-2025 收藏）：\n\n| 指标 | 数值 |\n|------|------|\n| 总收藏数 | 36,853 |\n| 文章数 | 32,333 |\n| 一级分类覆盖率 | 96.0% (31,088/32,333) |\n| LLM 重分类成功率 | 98.5% (8,789/8,912) |\n| 二级标签平均覆盖率 | 35.5% |\n\n## 核心能力\n\n| 能力 | 说明 |\n|------|------|\n| **收藏导出** | 从解密后的 `favorite.db` 导出全部收藏记录为 CSV |\n| **关键词分类** | 一级分类 9 类（生物医药/AI/投资等），关键词匹配自动识别 |\n| **标签增强** | 二级标签 57 个 + 跨领域标签 6 类，支持多标签组合 |\n| **LLM 增强（可选）** | 置信度 < 0.4 时自动调用 LLM 二次分类，需配置 API Key |\n| **IMA导入（可选）** | 批量导入到 IMA 知识库，需配置凭证 |\n| **报告生成** | 分类统计、各分类 CSV 导出 |\n\n## 前置条件\n\n### 1. 微信数据库解密\n\n本 skill 依赖已解密的 `favorite.db`。需先完成：\n\n```bash\n# 使用 wechat-decrypt 或其他工具解密微信数据库\n# 输出: decrypted/favorite/favorite.db\n```\n\n解密方案（任选其一）：\n- **wechat-decrypt**：https://github.com/GeoSun/wechat-favorites-skill\n- 手动提取密钥 + SQLCipher 解密\n\n### 2. Python 环境\n\n```bash\npip install pycryptodome zstandard\n```\n\n### 3. IMA 导入（可选）\n\n如需导入 IMA 知识库：\n1. 创建 IMA 知识库，获取 `kb_id`\n2. 配置凭证：`~/.config/ima/client_id` 和 `~/.config/ima/api_key`\n\n\n### 4. IMA 导入配置（可选）\n\nIMA 凭证支持多种配置方式（优先级从高到低）：\n\n| 方式 | 说明 |\n|------|------|\n| 命令行参数 | `--client-id`, `--api-key`, `--kb-id` |\n| 环境变量 | `IMA_CLIENT_ID`, `IMA_API_KEY`, `IMA_KB_ID` |\n| config.json | `ima_kb_id` 字段 |\n| 文件 | `~/.config/ima/client_id`, `~/.config/ima/api_key` |\n\n```bash\n# 方式 1: 命令行参数\npython import_ima.py --kb-id YOUR_KB_ID --client-id XXX --api-key YYY\n\n# 方式 2: 环境变量\nIMA_CLIENT_ID=xxx IMA_API_KEY=yyy python import_ima.py\n\n# 方式 3: 配置文件\n# 在项目目录创建 config.json，填写 ima_kb_id\n# 创建 ~/.config/ima/client_id 和 api_key 文件\n```\n\n## 安全说明\n\n本工具涉及本地文件操作与可选网络调用，但所有核心功能可在离线环境完成：\n\n| 操作 | 行为 | 数据流向 |\n|------|------|----------|\n| **微信数据库定位** | 自动探测 `WeChat Files` 目录，仅读取路径，不修改任何文件 | 本地只读 |\n| **批量解密** | 使用用户提供的密钥解密 `favorite.db`，输出至指定目录 | 本地 ↔ 本地 |\n| **智能分类** | 关键词匹配 + 可选 LLM 增强分类 | 本地（LLM 需主动配置） |\n| **IMA 导入** | 可选功能，需配置 `client_id`/`api_key` | 本地 → IMA 云端 |\n| **LLM 分类** | 可选功能，仅发送文章标题/摘要 | 本地 → 外部 API |\n\n**离线使用方案：**\n- 导出 + 本地分类：无需网络，无需配置 API\n- LLM 增强：使用本地模型（如 Ollama，修改 `LLM_API_URL`）\n- IMA 导入：可选功能，不导入不影响其他功能\n\n**建议：** 在信任的网络环境或离线环境使用，网络功能均为可选，默认关闭。\n\n## 快速开始\n\n```bash\ncd scripts\n\n# 0. 验证环境\npython quick_validate.py\n\n# 1. 解密数据库（如未解密）\npython decrypt_db.py\n\n# 2. 导出收藏记录\npython export_favorites.py\n\n# 3. 智能分类（支持 LLM 增强）\npython classify_favorites.py\n\n# 4. 导入 IMA（可选）\npython import_ima.py\n```\n\n## 目录结构\n\n```\nwechat-favorites/\n├── SKILL.md                     # 本文件\n├── LICENSE.txt                  # MIT License\n├── CHANGELOG.md                 # 更新日志\n├── requirements.txt             # 依赖声明\n├── config.json                  # 用户配置（需创建）\n├── scripts/\n│   ├── quick_validate.py        # 环境验证\n│   ├── decrypt_db.py            # 数据库解密\n│   ├── export_favorites.py      # 收藏导出\n│   ├── classify_favorites.py    # 智能分类（一级+二级+跨领域）\n│   ├── llm_classify.py          # LLM 二次分类模块\n│   ├── llm_incremental.py       # LLM 增量批处理\n│   ├── merge_llm_results.py     # LLM 结果合并\n│   ├── normalize_categories.py  # 标签标准化\n│   ├── import_ima.py            # IMA 导入\n│   ├── config.py                # 配置加载\n│   └── key_utils.py             # 密钥工具\n├── decrypted/                   # 解密输出\n│   └── favorite/favorite.db\n├── exported_favorites/          # 导出输出\n│   ├── favorites_all.csv        # 全部收藏\n│   ├── articles_final.csv       # 带分类标签\n│   ├── cat_biomed.csv           # 生物医药分类\n│   ├── cat_AI科技.csv           # AI 分类\n│   └── ...\n└── references/\n    ├── classification.md        # 分类算法说明\n    └── schema.md                # 数据库结构\n```\n\n## 数据流程\n\n```\nfavorite.db (加密)\n      │\n      ▼ decrypt_db.py\nfavorite.db (解密)\n      │\n      ▼ export_favorites.py\nfavorites_all.csv\n      │\n      ▼ classify_favorites.py [--llm]\narticles_final.csv + cat_*.csv\n      │\n      ▼ import_ima.py\nIMA 知识库\n```\n\n## 分类体系\n\n### 一级分类（9类）\n\n| 分类 | 关键词示例 |\n|------|-----------|\n| 生物医药 | 创新药、ADC、CAR-T、mRNA、临床试验、靶点、抗体 |\n| AI科技 | GPT、大模型、Agent、RAG、芯片、GPU、NVIDIA |\n| 投资金融 | IPO、融资、科创板、估值、基金、VC、PE |\n| 科学研究 | Nature、Science、论文、神经科学、突破 |\n| 商业财经 | 企业战略、行业分析、商业模式、宏观 |\n| 生活方式 | 健康、运动、旅行、读书、电影 |\n| 媒体资讯 | 新闻、热点、评论、舆论 |\n| 政治国际 | 国际关系、地缘政治、中美、外交 |\n| 其他 | 未命中以上分类 |\n\n### 二级标签（57个）\n\n每个一级分类下设细分标签，关键词匹配自动识别：\n\n| 一级分类 | 二级标签示例 |\n|---------|-------------|\n| 生物医药 | ADC、CAR-T、mRNA、创新药、临床、神经科学、免疫治疗、基因编辑、疫苗、医疗器械... |\n| AI科技 | 大模型、AI应用、AI医疗、自动驾驶、机器人、GPU、芯片、深度学习、RAG、Agent... |\n| 投资金融 | VC/PE、二级市场、IPO、并购、估值、私募、公募、债券、量化... |\n| 科学研究 | 神经科学、物理、化学、生物、材料、天文学、量子计算... |\n| 商业财经 | 企业战略、行业分析、商业模式、宏观经济、消费、零售... |\n| 生活方式 | 健康、运动、旅行、读书、电影、美食、教育... |\n\n完整标签列表见 `references/classification.md`。\n\n### 跨领域标签（6类）\n\n识别跨领域主题，多标签组合：\n\n| 跨领域标签 | 触发条件 |\n|-----------|---------|\n| 生物医药+投资 | 医药领域 + 融资/IPO/估值关键词 |\n| AI+医疗 | AI领域 + 医疗/医院/诊断关键词 |\n| AI+投资 | AI领域 + 融资/IPO/估值关键词 |\n| 生物医药+AI | 医药领域 + AI/大模型关键词 |\n| 商业+政治 | 商业领域 + 国际关系/政策关键词 |\n| 科学+政策 | 科学领域 + 政策/监管关键词 |\n\n## LLM 二次分类\n\n关键词分类置信度不足时，可启用 LLM 二次分类进行智能重判：\n\n```bash\n# 置信度低于 0.4 时触发 LLM\npython classify_favorites.py --llm\n\n# 全量 LLM 分类（跳过关键词）\npython classify_favorites.py --llm-only\n\n# 自定义触发阈值\npython classify_favorites.py --llm --llm-threshold 0.3\n```\n\n**环境变量配置：**\n\n| 变量 | 默认值 | 说明 |\n|------|--------|------|\n| `LLM_API_URL` | `http://localhost:4200/v1/chat/completions` | API 地址 |\n| `LLM_MODEL` | `auto` | 模型名称 |\n| `LLM_CONCURRENCY` | `5` | 最大并发数 |\n| `LLM_BATCH_SIZE` | `10` | 每批处理数量 |\n\n**OpenRouter 配置示例：**\n\n```bash\nexport LLM_API_URL=\"https://openrouter.ai/api/v1/chat/completions\"\nexport LLM_MODEL=\"deepseek/deepseek-chat\"\nexport LLM_API_KEY=\"your-openrouter-api-key\"\n```\n\n## 输出文件说明\n\n| 文件 | 内容 |\n|------|------|\n| `favorites_all.csv` | 全部收藏记录 |\n| `articles_final.csv` | 带 `category`、`subcategory`、`cross_domain` 标签的文章 |\n| `cat_*.csv` | 各分类单独文件 |\n| `llm_checkpoint.json` | LLM 分类断点（增量处理） |\n| `ima_import_state.json` | IMA 导入进度（断点续传） |\n| `ima_import.log` | IMA 导入日志 |\n\n**CSV 字段说明：**\n\n| 字段 | 说明 |\n|------|------|\n| `local_id` | 原始记录 ID |\n| `title` | 文章标题 |\n| `url` | 文章链接 |\n| `desc` | 摘要 |\n| `source` | 来源公众号 |\n| `create_time` | 收藏时间 |\n| `category` | 一级分类 |\n| `subcategory` | 二级标签（多个用逗号分隔） |\n| `cross_domain` | 跨领域标签（多个用逗号分隔） |\n| `confidence` | 分类置信度 |\n\n## favorite.db 表结构\n\n```sql\nCREATE TABLE fav_db_item (\n    local_id INTEGER PRIMARY KEY,\n    fav_local_type INTEGER,  -- 类型：1=文章, 3=图片, 等\n    status INTEGER,\n    create_time INTEGER,     -- 收藏时间戳\n    source_id TEXT,          -- 来源 wxid\n    source_type INTEGER,\n    content BLOB,            -- XML 内容\n    WCDB_CT_content INTEGER  -- 压缩标记：4=zstd\n);\n```\n\ncontent 字段解析：\n- `<title>` 标题\n- `<url>` 链接\n- `<source>` 来源公众号\n- `<description>` 摘要\n\n## 常见问题\n\n**Q: 收藏数据不完整？**\nA: 检查 `favorite.db` 最后修改时间，微信可能未同步最新数据。\n\n**Q: IMA 导入被限流？**\nA: API 限流约 200 次/小时，脚本已内置 3 秒/批的限速。\n\n**Q: 如何新增分类？**\nA: 编辑 `classify_favorites.py` 中的 `CATEGORIES` 字典。\n\n**Q: 解密失败？**\nA: 确保密钥正确，检查 `all_keys.json` 是否包含 `favorite.db` 的密钥。\n\n**Q: LLM 分类中断了怎么办？**\nA: 脚本自动保存断点到 `llm_checkpoint.json`，重新运行会从中断处继续。\n\n## 技术细节\n\n### SQLCipher 4 参数\n\n- 加密：AES-256-CBC + HMAC-SHA512\n- KDF：PBKDF2-HMAC-SHA512，256,000 iterations\n- 页面：4096 bytes，reserve = 80\n\n### 支持平台\n\n| 平台 | 解密支持 |\n|------|---------|\n| Windows | ✅ |\n| Linux | ✅ |\n| macOS | ✅ |\n\n## 相关链接\n\n- 本技能仓库：https://github.com/GeoSun/wechat-favorites-skill\n\n## 参考资料\n\n- [references/schema.md](references/schema.md) — 数据库结构详解\n- [references/classification.md](references/classification.md) — 分类算法说明\n\n## License\n\nMIT License\n\n## 免责声明\n\n本工具仅供个人备份和学习使用。请勿用于任何商业用途或违法行为。解密的数据仅限个人所有，不得传播或用于侵犯他人隐私。\n\nFile v1.1.2:_meta.json\n\n{\n  \"ownerId\": \"kn7fh7azcgp5wwsg434v6km1x5858t33\",\n  \"slug\": \"wechat-favorites\",\n  \"version\": \"1.1.2\",\n  \"publishedAt\": 1777174731727\n}\n\nFile v1.1.2:references/classification.md\n\n# 收藏分类算法 v1.2.0\n\n## 分类流程\n\n```\nfavorites_all.csv\n      │\n      ▼ 关键词多标签分类（一级）\n  categories 列（中文标签，管道分隔）\n  confidence 列（0~0.5）\n      │\n      ▼ 二级分类（基于正则匹配）\n  subcategory 列（管道分隔，可多个）\n      │\n      ▼ 跨领域标签（主分类 + 跨领域关键词）\n  cross_domain 列（管道分隔，可多个）\n      │\n      ▼ [可选] LLM 二次分类（confidence < threshold）\n  更新 categories, subcategory, cross_domain\n  追加 _llm_reason, _llm_confidence 列\n      │\n      ▼ [可选] 标签标准化\n  category 列（标准英文 key）\n```\n\n## 第一步：关键词多标签分类（一级）\n\n每篇文章可同时归属多个分类。\n\n```python\nCATEGORIES = {\n    \"生物医药\": [\"创新药\", \"ADC\", \"CAR-T\", \"mRNA\", ...],\n    \"AI科技\":   [\"GPT\", \"大模型\", \"LLM\", \"Agent\", ...],\n    \"投资金融\": [\"IPO\", \"融资\", \"估值\", \"科创板\", ...],\n    \"科学研究\": [\"Nature\", \"Science\", \"论文\", ...],\n    \"商业财经\": [\"企业\", \"战略\", \"行业\", ...],\n    \"生活方式\": [\"健康\", \"运动\", \"旅行\", ...],\n    \"媒体资讯\": [\"新闻\", \"热点\", \"评论\", ...],\n    \"政治国际\": [\"国际\", \"外交\", \"地缘\", ...],\n}\n```\n\n置信度规则：\n- 0 = 未命中任何关键词\n- 0.3 = 命中单个分类\n- 0.5 = 命中多个分类（多标签反而更难判断主次）\n\n## 第二步：二级分类\n\n基于一级分类结果，对每个命中的一级分类用正则匹配二级标签。\n\n```python\nSUBCATEGORIES = {\n    \"生物医药\": {\n        \"临床\": r\"临床|IND|NDA|CDE|FDA|NMPA|III期|II期|I期|获批|批准\",\n        \"神经\": r\"阿尔茨海默|帕金森|神经|脑科学|抑郁|...\",\n        \"创新药\": r\"创新药|新药|first-in-class|best-in-class\",\n        # ... 14 个二级标签\n    },\n    \"AI科技\": {\n        \"AI应用\": r\"AI应用|AI\\+|赋能|落地|智能化|用AI|...\",\n        \"大模型/LLM\": r\"大模型|LLM|GPT|Claude|Gemini|...\",\n        # ... 9 个二级标签\n    },\n    # ... 共 6 个一级分类有二级标签\n}\n```\n\n特点：\n- 一篇文章可命中多个二级标签（如 \"ADC+肿瘤+临床\"）\n- 不是所有文章都有二级标签（泛泛讨论只保留一级）\n- 每个一级分类下二级标签互不排斥\n\n覆盖率（实测）：\n- 生物医药: 47.0%\n- 商业财经: 44.2%\n- 投资金融: 43.8%\n- AI科技: 29.1%\n- 科学研究: 27.9%\n- 生活方式: 20.9%\n\n## 第三步：跨领域标签\n\n检测文章是否同时涉及两个领域。\n\n```python\nCROSS_DOMAIN_RULES = [\n    # (标签, 主分类, 跨领域关键词正则)\n    (\"生物医药+投资\", \"生物医药\", r\"融资|估值|IPO|上市|投资|...\"),\n    (\"AI+医疗\",       \"AI科技\",   r\"医疗|药|临床|诊断|医院|...\"),\n    (\"AI+投资\",       \"AI科技\",   r\"融资|估值|IPO|上市|投资|...\"),\n    (\"生物医药+AI\",   \"生物医药\", r\"AI|人工智能|机器学习|计算|...\"),\n    (\"科学+政策\",     \"科学研究\", r\"政策|监管|伦理|法规|...\"),\n    (\"商业+政治\",     \"商业财经\", r\"制裁|贸易战|关税|地缘|...\"),\n]\n```\n\n逻辑：先确定文章的主分类，再检查是否含跨领域关键词。\n一篇文章可有多个跨领域标签。\n\n分布（实测 32333 篇）：\n- 生物医药+投资: 2974\n- AI+医疗: 546\n- AI+投资: 339\n- 生物医药+AI: 203\n- 商业+政治: 68\n- 科学+政策: 19\n\n## 第四步：LLM 二次分类\n\n对关键词分类置信度不足（默认 < 0.4）的条目，用大模型进行智能重判。\n\n### Prompt 结构\n\n```\n文章标题：{title}\n来源公众号：{source}\n文章链接：{url}\n\n一级分类（可多选）：\n生物医药、AI科技、投资金融、科学研究、商业财经、生活方式、媒体资讯、政治国际\n\n二级分类（选填，根据一级分类选对应的子标签）：\n- 生物医药：临床、神经、创新药、肿瘤、...\n- AI科技：AI应用、大模型/LLM、AI医疗、...\n- ...\n\n跨领域标签（选填，文章同时涉及两个领域时标注）：\n生物医药+投资、AI+医疗、AI+投资、生物医药+AI、科学+政策、商业+政治\n\n输出 JSON：{\"tags\": [...], \"subcategories\": [...], \"cross_domain\": [...], \"reason\": \"...\", \"confidence\": 0~1}\n```\n\n### LLM 结果解析\n\n1. 提取 JSON（支持 ```json 代码块包裹）\n2. 过滤无效一级标签（只保留 8 个标准分类）\n3. 过滤无效二级标签（只保留 SUBCATEGORY_TAGS 中定义的）\n4. 过滤无效跨领域标签（只保留 CROSS_DOMAIN_TAGS 中定义的）\n5. confidence >= 0.5 时采纳，否则保留原分类\n\n### 增量处理\n\n对于大量 other 条目（>1000），推荐增量模式：\n- `llm_incremental.py`：每批 50 条，并发 20，每 5 分钟保存检查点\n- 中断后重新运行自动续传\n- 合并：`merge_llm_results.py` 将检查点结果写回 CSV\n\n## 第五步：标签标准化\n\nLLM 和关键词可能输出不同格式的标签，标准化映射：\n\n| 标准分类 | 英文 key | 接受的输入格式 |\n|---------|----------|--------------|\n| 生物医药 | `biomed` | 生物医药, biomed |\n| AI科技 | `ai` | AI科技, ai, tech |\n| 投资金融 | `invest` | 投资金融, invest |\n| 科学研究 | `science` | 科学研究, science |\n| 商业财经 | `business` | 商业财经, business |\n| 生活方式 | `lifestyle` | 生活方式, lifestyle |\n| 媒体资讯 | `media` | 媒体资讯, media |\n| 政治国际 | `politics` | 政治国际, politics |\n\n二级标签别名映射（示例）：\n- \"大模型/LLM\" ← \"大模型\", \"LLM\", \"LLM/GPT\"\n- \"VC/PE\" ← \"VC\", \"PE\", \"风险投资\", \"私募股权\"\n- \"芯片/算力\" ← \"芯片\", \"算力\", \"GPU\", \"半导体\"\n\n复合标签（`+`/`|`/`,` 分隔）取第一个已知分类作为主分类。\n\n特殊映射：`tech` → `ai`（技术类合并到 AI科技）\n\n## 分类统计（实测数据，32333 篇）\n\n### 一级分类\n\n| 分类 | 数量 | 占比 |\n|------|------|------|\n| 生物医药 | 12,010 | 37.1% |\n| 生活方式 | 4,551 | 14.1% |\n| 商业财经 | 3,985 | 12.3% |\n| 科学研究 | 3,128 | 9.7% |\n| 投资金融 | 3,021 | 9.3% |\n| 媒体资讯 | 2,417 | 7.5% |\n| AI科技 | 2,151 | 6.7% |\n| 政治国际 | 939 | 2.9% |\n| other | 131 | 0.4% |\n\n### 二级标签 top 10\n\n| 标签 | 数量 |\n|------|------|\n| 生物医药>临床 | 2,144 |\n| 生物医药>创新药 | 1,418 |\n| 生物医药>神经 | 1,232 |\n| 生物医药>肿瘤 | 886 |\n| 商业财经>宏观经济 | 856 |\n| 商业财经>行业分析 | 810 |\n| 投资金融>VC/PE | 685 |\n| 科学研究>神经科学 | 576 |\n| 生物医药>抗体 | 564 |\n| 投资金融>二级市场 | 517 |\n\n### 跨领域标签\n\n| 标签 | 数量 |\n|------|------|\n| 生物医药+投资 | 2,974 |\n| AI+医疗 | 546 |\n| AI+投资 | 339 |\n| 生物医药+AI | 203 |\n| 商业+政治 | 68 |\n| 科学+政策 | 19 |\n\n## 年度趋势\n\n收藏高峰：2019年（6,558篇）、2023年（6,145篇）\n生物医药占比逐年上升：2017年 5.6% → 2023年 44.8%\n\nFile v1.1.2:references/schema.md\n\n# favorite.db 数据库结构\n\n## 表：fav_db_item\n\n存储所有收藏记录。\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| local_id | INTEGER | 主键，收藏记录ID |\n| fav_local_type | INTEGER | 收藏类型 |\n| status | INTEGER | 状态标记 |\n| create_time | INTEGER | 收藏时间（Unix时间戳） |\n| source_id | TEXT | 来源用户/公众号 wxid |\n| source_type | INTEGER | 来源类型 |\n| content | BLOB | 收藏内容（XML格式，可能压缩） |\n| WCDB_CT_content | INTEGER | 压缩类型（4=zstd） |\n\n## fav_local_type 类型值\n\n| 值 | 类型 |\n|----|------|\n| 1 | 文章/链接 |\n| 2 | 图片 |\n| 3 | 视频 |\n| 4 | 文件 |\n| 5 | 语音 |\n| 6 | 位置 |\n| 7 | 名片 |\n| 8 | 文本笔记 |\n\n## content XML 结构\n\n文章类型（fav_local_type=1）的 content 示例：\n\n```xml\n<favitem>\n  <type>1</type>\n  <title>文章标题</title>\n  <desc>文章摘要</desc>\n  <url>https://mp.weixin.qq.com/s/xxx</url>\n  <source>公众号名称</source>\n  <sourcetype>9</sourcetype>\n  <thumburl>封面图URL</thumburl>\n</favitem>\n```\n\n## 解析代码\n\n```python\nimport xml.etree.ElementTree as ET\n\ndef parse_favorite_content(content_bytes, ct):\n    # 解压 zstd\n    if ct == 4:\n        import zstandard as zstd\n        content = zstd.ZstdDecompressor().decompress(content_bytes)\n    else:\n        content = content_bytes\n    \n    root = ET.fromstring(content)\n    return {\n        'type': root.findtext('type'),\n        'title': root.findtext('title', ''),\n        'desc': root.findtext('desc', ''),\n        'url': root.findtext('url', ''),\n        'source': root.findtext('source', ''),\n    }\n```\n\n## 相关表\n\n- `favorite_fts.db` — 全文搜索索引（SQLite FTS）\n\nFile v1.1.2:LICENSE.txt\n\nMIT License\n\nCopyright (c) 2024\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nFile v1.1.2:requirements.txt\n\n# wechat-favorites 依赖\npycryptodome>=3.19\nzstandard>=0.22\n# LLM 分类使用 urllib（标准库），无需额外依赖\n\nArchive v1.1.1: 16 files, 40280 bytes\n\nFiles: LICENSE.txt (1056b), references/classification.md (6962b), references/schema.md (1703b), requirements.txt (123b), scripts/classify_favorites.py (20108b), scripts/config.py (8475b), scripts/decrypt_db.py (6139b), scripts/export_favorites.py (4281b), scripts/import_ima.py (7888b), scripts/key_utils.py (1225b), scripts/llm_classify.py (9006b), scripts/llm_incremental.py (6312b), scripts/merge_llm_results.py (3585b), scripts/normalize_categories.py (7292b), SKILL.md (12645b), _meta.json (135b)\n\nFile v1.1.1:SKILL.md\n\n---\nname: wechat-favorites\ndescription: 微信收藏夹导出、智能分类与知识库管理。支持从解密后的 favorite.db 导出收藏记录、三级分类体系（一级9类 + 二级57标签 + 跨领域6类）、LLM 智能增强、批量导入 IMA 知识库。\nmetadata:\n  version: 1.1.1\n  display_name: 微信收藏知识库\n---\n\n# 微信收藏知识库\n\nDecrypt, categorize and organize wechat favorites (Official Account collection) into knowledge base\n\n收藏夹导出 · 智能分类 · 知识库导入\n\n**快速上手：** 解密收藏夹 → 导出记录 → 智能分类 → 导入 IMA 知识库\n\n> 💡 **试试这样说：** \"帮我整理微信收藏\" / \"导出收藏夹并分类\" / \"把微信收藏导入知识库\" / \"解密 favorite.db 导出文章\"\n\n---\n\n**触发词：** 微信收藏（WeChat Favorites）、收藏夹导出（favorites export）、收藏文章分类（favorites classification）、IMA 知识库导入（knowledge base import）、收藏整理（favorites organizer）、微信公众号收藏、公众号文章整理\n\n---\n\n## 为什么用这个工具？\n\n微信收藏夹积累了大量文章：随手打的标签越来越复杂，待读越积越多，从来没有真正整理过，也不记得读了哪些、学到了什么。这个工具可以：\n\n- **自动分类** — 96% 的文章自动归入 9 大类，无需手动整理\n- **细粒度标签** — 57 个二级标签，精准定位细分主题\n- **跨领域识别** — 自动标注\"生物医药+投资\"等复合主题\n- **LLM 增强** — 低置信度条目用大模型智能重判\n- **知识库导入** — 一键导入 IMA，构建个人知识库\n\n## 实测数据\n\n基于 32,333 篇文章（2014-2025 收藏）：\n\n| 指标 | 数值 |\n|------|------|\n| 总收藏数 | 36,853 |\n| 文章数 | 32,333 |\n| 一级分类覆盖率 | 96.0% (31,088/32,333) |\n| LLM 重分类成功率 | 98.5% (8,789/8,912) |\n| 二级标签平均覆盖率 | 35.5% |\n\n## 核心能力\n\n| 能力 | 说明 |\n|------|------|\n| **收藏导出** | 从解密后的 `favorite.db` 导出全部收藏记录为 CSV |\n| **关键词分类** | 一级分类 9 类（生物医药/AI/投资等），关键词匹配自动识别 |\n| **标签增强** | 二级标签 57 个 + 跨领域标签 6 类，支持多标签组合 |\n| **LLM 增强** | 置信度 < 0.4 时自动调用 LLM 二次分类，支持 OpenRouter 等兼容 API |\n| **IMA导入** | 批量导入到 IMA 知识库，支持断点续传、速率限制 |\n| **报告生成** | 分类统计、各分类 CSV 导出 |\n\n## 前置条件\n\n### 1. 微信数据库解密\n\n本 skill 依赖已解密的 `favorite.db`。需先完成：\n\n```bash\n# 使用 wechat-decrypt 或其他工具解密微信数据库\n# 输出: decrypted/favorite/favorite.db\n```\n\n解密方案（任选其一）：\n- **wechat-decrypt**：https://github.com/GeoSun/wechat-favorites-skill\n- 手动提取密钥 + SQLCipher 解密\n\n### 2. Python 环境\n\n```bash\npip install pycryptodome zstandard\n```\n\n### 3. IMA 导入（可选）\n\n如需导入 IMA 知识库：\n1. 创建 IMA 知识库，获取 `kb_id`\n2. 配置凭证：`~/.config/ima/client_id` 和 `~/.config/ima/api_key`\n\n### 4. 配置文件\n\n在项目目录创建 `config.json`：\n\n```json\n{\n  \"db_dir\": \"/path/to/wechat/data\",\n  \"keys_file\": \"/path/to/all_keys.json\",\n  \"decrypted_dir\": \"decrypted\",\n  \"ima_kb_id\": \"your_kb_id\"\n}\n```\n\n字段说明：\n- `db_dir`: 微信数据库路径\n- `keys_file`: 密钥文件路径（由 wechat-decrypt 生成）\n- `decrypted_dir`: 解密输出目录\n- `ima_kb_id`: IMA 知识库 ID（可选）\n\n### 5. IMA 导入配置（可选）\n\nIMA 凭证支持多种配置方式（优先级从高到低）：\n\n| 方式 | 说明 |\n|------|------|\n| 命令行参数 | `--client-id`, `--api-key`, `--kb-id` |\n| 环境变量 | `IMA_CLIENT_ID`, `IMA_API_KEY`, `IMA_KB_ID` |\n| config.json | `ima_kb_id` 字段 |\n| 文件 | `~/.config/ima/client_id`, `~/.config/ima/api_key` |\n\n```bash\n# 方式 1: 命令行参数\npython import_ima.py --kb-id YOUR_KB_ID --client-id XXX --api-key YYY\n\n# 方式 2: 环境变量\nIMA_CLIENT_ID=xxx IMA_API_KEY=yyy python import_ima.py\n\n# 方式 3: 配置文件（推荐）\n# 在项目目录创建 config.json，填写 ima_kb_id\n# 创建 ~/.config/ima/client_id 和 api_key 文件\n```\n\n## 安全说明\n\n本工具涉及本地文件操作与敏感凭证，但所有操作均在本地完成：\n\n| 操作 | 说明 |\n|------|------|\n| **微信数据库解密** | 密钥仅用于本地 `favorite.db` 解密，不会上传或传输至第三方 |\n| **文件访问** | 仅访问用户指定的 `favorite.db` 和输出目录，不涉及系统级访问 |\n| **IMA 凭证** | API Token 仅用于向 IMA 平台认证，不经过本工具服务器 |\n| **LLM 分类** | 仅发送文章标题/摘要至配置的 LLM API（如 OpenRouter），可配本地模型规避 |\n\n**建议**：在信任的网络环境或离线环境使用。\n\n## 快速开始\n\n```bash\ncd scripts\n\n# 0. 验证环境\npython quick_validate.py\n\n# 1. 解密数据库（如未解密）\npython decrypt_db.py\n\n# 2. 导出收藏记录\npython export_favorites.py\n\n# 3. 智能分类（支持 LLM 增强）\npython classify_favorites.py\n\n# 4. 导入 IMA（可选）\npython import_ima.py\n```\n\n## 目录结构\n\n```\nwechat-favorites/\n├── SKILL.md                     # 本文件\n├── LICENSE.txt                  # MIT License\n├── CHANGELOG.md                 # 更新日志\n├── requirements.txt             # 依赖声明\n├── config.json                  # 用户配置（需创建）\n├── scripts/\n│   ├── quick_validate.py        # 环境验证\n│   ├── decrypt_db.py            # 数据库解密\n│   ├── export_favorites.py      # 收藏导出\n│   ├── classify_favorites.py    # 智能分类（一级+二级+跨领域）\n│   ├── llm_classify.py          # LLM 二次分类模块\n│   ├── llm_incremental.py       # LLM 增量批处理\n│   ├── merge_llm_results.py     # LLM 结果合并\n│   ├── normalize_categories.py  # 标签标准化\n│   ├── import_ima.py            # IMA 导入\n│   ├── config.py                # 配置加载\n│   └── key_utils.py             # 密钥工具\n├── decrypted/                   # 解密输出\n│   └── favorite/favorite.db\n├── exported_favorites/          # 导出输出\n│   ├── favorites_all.csv        # 全部收藏\n│   ├── articles_final.csv       # 带分类标签\n│   ├── cat_biomed.csv           # 生物医药分类\n│   ├── cat_AI科技.csv           # AI 分类\n│   └── ...\n└── references/\n    ├── classification.md        # 分类算法说明\n    └── schema.md                # 数据库结构\n```\n\n## 数据流程\n\n```\nfavorite.db (加密)\n      │\n      ▼ decrypt_db.py\nfavorite.db (解密)\n      │\n      ▼ export_favorites.py\nfavorites_all.csv\n      │\n      ▼ classify_favorites.py [--llm]\narticles_final.csv + cat_*.csv\n      │\n      ▼ import_ima.py\nIMA 知识库\n```\n\n## 分类体系\n\n### 一级分类（9类）\n\n| 分类 | 关键词示例 |\n|------|-----------|\n| 生物医药 | 创新药、ADC、CAR-T、mRNA、临床试验、靶点、抗体 |\n| AI科技 | GPT、大模型、Agent、RAG、芯片、GPU、NVIDIA |\n| 投资金融 | IPO、融资、科创板、估值、基金、VC、PE |\n| 科学研究 | Nature、Science、论文、神经科学、突破 |\n| 商业财经 | 企业战略、行业分析、商业模式、宏观 |\n| 生活方式 | 健康、运动、旅行、读书、电影 |\n| 媒体资讯 | 新闻、热点、评论、舆论 |\n| 政治国际 | 国际关系、地缘政治、中美、外交 |\n| 其他 | 未命中以上分类 |\n\n### 二级标签（57个）\n\n每个一级分类下设细分标签，关键词匹配自动识别：\n\n| 一级分类 | 二级标签示例 |\n|---------|-------------|\n| 生物医药 | ADC、CAR-T、mRNA、创新药、临床、神经科学、免疫治疗、基因编辑、疫苗、医疗器械... |\n| AI科技 | 大模型、AI应用、AI医疗、自动驾驶、机器人、GPU、芯片、深度学习、RAG、Agent... |\n| 投资金融 | VC/PE、二级市场、IPO、并购、估值、私募、公募、债券、量化... |\n| 科学研究 | 神经科学、物理、化学、生物、材料、天文学、量子计算... |\n| 商业财经 | 企业战略、行业分析、商业模式、宏观经济、消费、零售... |\n| 生活方式 | 健康、运动、旅行、读书、电影、美食、教育... |\n\n完整标签列表见 `references/classification.md`。\n\n### 跨领域标签（6类）\n\n识别跨领域主题，多标签组合：\n\n| 跨领域标签 | 触发条件 |\n|-----------|---------|\n| 生物医药+投资 | 医药领域 + 融资/IPO/估值关键词 |\n| AI+医疗 | AI领域 + 医疗/医院/诊断关键词 |\n| AI+投资 | AI领域 + 融资/IPO/估值关键词 |\n| 生物医药+AI | 医药领域 + AI/大模型关键词 |\n| 商业+政治 | 商业领域 + 国际关系/政策关键词 |\n| 科学+政策 | 科学领域 + 政策/监管关键词 |\n\n## LLM 二次分类\n\n关键词分类置信度不足时，可启用 LLM 二次分类进行智能重判：\n\n```bash\n# 置信度低于 0.4 时触发 LLM\npython classify_favorites.py --llm\n\n# 全量 LLM 分类（跳过关键词）\npython classify_favorites.py --llm-only\n\n# 自定义触发阈值\npython classify_favorites.py --llm --llm-threshold 0.3\n```\n\n**环境变量配置：**\n\n| 变量 | 默认值 | 说明 |\n|------|--------|------|\n| `LLM_API_URL` | `http://localhost:4200/v1/chat/completions` | API 地址 |\n| `LLM_MODEL` | `auto` | 模型名称 |\n| `LLM_CONCURRENCY` | `5` | 最大并发数 |\n| `LLM_BATCH_SIZE` | `10` | 每批处理数量 |\n\n**OpenRouter 配置示例：**\n\n```bash\nexport LLM_API_URL=\"https://openrouter.ai/api/v1/chat/completions\"\nexport LLM_MODEL=\"deepseek/deepseek-chat\"\nexport LLM_API_KEY=\"your-openrouter-api-key\"\n```\n\n## 输出文件说明\n\n| 文件 | 内容 |\n|------|------|\n| `favorites_all.csv` | 全部收藏记录 |\n| `articles_final.csv` | 带 `category`、`subcategory`、`cross_domain` 标签的文章 |\n| `cat_*.csv` | 各分类单独文件 |\n| `llm_checkpoint.json` | LLM 分类断点（增量处理） |\n| `ima_import_state.json` | IMA 导入进度（断点续传） |\n| `ima_import.log` | IMA 导入日志 |\n\n**CSV 字段说明：**\n\n| 字段 | 说明 |\n|------|------|\n| `local_id` | 原始记录 ID |\n| `title` | 文章标题 |\n| `url` | 文章链接 |\n| `desc` | 摘要 |\n| `source` | 来源公众号 |\n| `create_time` | 收藏时间 |\n| `category` | 一级分类 |\n| `subcategory` | 二级标签（多个用逗号分隔） |\n| `cross_domain` | 跨领域标签（多个用逗号分隔） |\n| `confidence` | 分类置信度 |\n\n## favorite.db 表结构\n\n```sql\nCREATE TABLE fav_db_item (\n    local_id INTEGER PRIMARY KEY,\n    fav_local_type INTEGER,  -- 类型：1=文章, 3=图片, 等\n    status INTEGER,\n    create_time INTEGER,     -- 收藏时间戳\n    source_id TEXT,          -- 来源 wxid\n    source_type INTEGER,\n    content BLOB,            -- XML 内容\n    WCDB_CT_content INTEGER  -- 压缩标记：4=zstd\n);\n```\n\ncontent 字段解析：\n- `<title>` 标题\n- `<url>` 链接\n- `<source>` 来源公众号\n- `<description>` 摘要\n\n## 常见问题\n\n**Q: 收藏数据不完整？**\nA: 检查 `favorite.db` 最后修改时间，微信可能未同步最新数据。\n\n**Q: IMA 导入被限流？**\nA: API 限流约 200 次/小时，脚本已内置 3 秒/批的限速。\n\n**Q: 如何新增分类？**\nA: 编辑 `classify_favorites.py` 中的 `CATEGORIES` 字典。\n\n**Q: 解密失败？**\nA: 确保密钥正确，检查 `all_keys.json` 是否包含 `favorite.db` 的密钥。\n\n**Q: LLM 分类中断了怎么办？**\nA: 脚本自动保存断点到 `llm_checkpoint.json`，重新运行会从中断处继续。\n\n## 技术细节\n\n### SQLCipher 4 参数\n\n- 加密：AES-256-CBC + HMAC-SHA512\n- KDF：PBKDF2-HMAC-SHA512，256,000 iterations\n- 页面：4096 bytes，reserve = 80\n\n### 支持平台\n\n| 平台 | 解密支持 |\n|------|---------|\n| Windows | ✅ |\n| Linux | ✅ |\n| macOS | ✅ |\n\n## 相关链接\n\n- 本技能仓库：https://github.com/GeoSun/wechat-favorites-skill\n- 解密工具：https://github.com/ylytdeng/wechat-decrypt\n\n## 参考资料\n\n- [references/schema.md](references/schema.md) — 数据库结构详解\n- [references/classification.md](references/classification.md) — 分类算法说明\n\n## License\n\nMIT License\n\n## 免责声明\n\n本工具仅供个人备份和学习使用。请勿用于任何商业用途或违法行为。解密的数据仅限个人所有，不得传播或用于侵犯他人隐私。\n\nFile v1.1.1:_meta.json\n\n{\n  \"ownerId\": \"kn7fh7azcgp5wwsg434v6km1x5858t33\",\n  \"slug\": \"wechat-favorites\",\n  \"version\": \"1.1.1\",\n  \"publishedAt\": 1777173115061\n}\n\nFile v1.1.1:references/classification.md\n\n# 收藏分类算法 v1.2.0\n\n## 分类流程\n\n```\nfavorites_all.csv\n      │\n      ▼ 关键词多标签分类（一级）\n  categories 列（中文标签，管道分隔）\n  confidence 列（0~0.5）\n      │\n      ▼ 二级分类（基于正则匹配）\n  subcategory 列（管道分隔，可多个）\n      │\n      ▼ 跨领域标签（主分类 + 跨领域关键词）\n  cross_domain 列（管道分隔，可多个）\n      │\n      ▼ [可选] LLM 二次分类（confidence < threshold）\n  更新 categories, subcategory, cross_domain\n  追加 _llm_reason, _llm_confidence 列\n      │\n      ▼ [可选] 标签标准化\n  category 列（标准英文 key）\n```\n\n## 第一步：关键词多标签分类（一级）\n\n每篇文章可同时归属多个分类。\n\n```python\nCATEGORIES = {\n    \"生物医药\": [\"创新药\", \"ADC\", \"CAR-T\", \"mRNA\", ...],\n    \"AI科技\":   [\"GPT\", \"大模型\", \"LLM\", \"Agent\", ...],\n    \"投资金融\": [\"IPO\", \"融资\", \"估值\", \"科创板\", ...],\n    \"科学研究\": [\"Nature\", \"Science\", \"论文\", ...],\n    \"商业财经\": [\"企业\", \"战略\", \"行业\", ...],\n    \"生活方式\": [\"健康\", \"运动\", \"旅行\", ...],\n    \"媒体资讯\": [\"新闻\", \"热点\", \"评论\", ...],\n    \"政治国际\": [\"国际\", \"外交\", \"地缘\", ...],\n}\n```\n\n置信度规则：\n- 0 = 未命中任何关键词\n- 0.3 = 命中单个分类\n- 0.5 = 命中多个分类（多标签反而更难判断主次）\n\n## 第二步：二级分类\n\n基于一级分类结果，对每个命中的一级分类用正则匹配二级标签。\n\n```python\nSUBCATEGORIES = {\n    \"生物医药\": {\n        \"临床\": r\"临床|IND|NDA|CDE|FDA|NMPA|III期|II期|I期|获批|批准\",\n        \"神经\": r\"阿尔茨海默|帕金森|神经|脑科学|抑郁|...\",\n        \"创新药\": r\"创新药|新药|first-in-class|best-in-class\",\n        # ... 14 个二级标签\n    },\n    \"AI科技\": {\n        \"AI应用\": r\"AI应用|AI\\+|赋能|落地|智能化|用AI|...\",\n        \"大模型/LLM\": r\"大模型|LLM|GPT|Claude|Gemini|...\",\n        # ... 9 个二级标签\n    },\n    # ... 共 6 个一级分类有二级标签\n}\n```\n\n特点：\n- 一篇文章可命中多个二级标签（如 \"ADC+肿瘤+临床\"）\n- 不是所有文章都有二级标签（泛泛讨论只保留一级）\n- 每个一级分类下二级标签互不排斥\n\n覆盖率（实测）：\n- 生物医药: 47.0%\n- 商业财经: 44.2%\n- 投资金融: 43.8%\n- AI科技: 29.1%\n- 科学研究: 27.9%\n- 生活方式: 20.9%\n\n## 第三步：跨领域标签\n\n检测文章是否同时涉及两个领域。\n\n```python\nCROSS_DOMAIN_RULES = [\n    # (标签, 主分类, 跨领域关键词正则)\n    (\"生物医药+投资\", \"生物医药\", r\"融资|估值|IPO|上市|投资|...\"),\n    (\"AI+医疗\",       \"AI科技\",   r\"医疗|药|临床|诊断|医院|...\"),\n    (\"AI+投资\",       \"AI科技\",   r\"融资|估值|IPO|上市|投资|...\"),\n    (\"生物医药+AI\",   \"生物医药\", r\"AI|人工智能|机器学习|计算|...\"),\n    (\"科学+政策\",     \"科学研究\", r\"政策|监管|伦理|法规|...\"),\n    (\"商业+政治\",     \"商业财经\", r\"制裁|贸易战|关税|地缘|...\"),\n]\n```\n\n逻辑：先确定文章的主分类，再检查是否含跨领域关键词。\n一篇文章可有多个跨领域标签。\n\n分布（实测 32333 篇）：\n- 生物医药+投资: 2974\n- AI+医疗: 546\n- AI+投资: 339\n- 生物医药+AI: 203\n- 商业+政治: 68\n- 科学+政策: 19\n\n## 第四步：LLM 二次分类\n\n对关键词分类置信度不足（默认 < 0.4）的条目，用大模型进行智能重判。\n\n### Prompt 结构\n\n```\n文章标题：{title}\n来源公众号：{source}\n文章链接：{url}\n\n一级分类（可多选）：\n生物医药、AI科技、投资金融、科学研究、商业财经、生活方式、媒体资讯、政治国际\n\n二级分类（选填，根据一级分类选对应的子标签）：\n- 生物医药：临床、神经、创新药、肿瘤、...\n- AI科技：AI应用、大模型/LLM、AI医疗、...\n- ...\n\n跨领域标签（选填，文章同时涉及两个领域时标注）：\n生物医药+投资、AI+医疗、AI+投资、生物医药+AI、科学+政策、商业+政治\n\n输出 JSON：{\"tags\": [...], \"subcategories\": [...], \"cross_domain\": [...], \"reason\": \"...\", \"confidence\": 0~1}\n```\n\n### LLM 结果解析\n\n1. 提取 JSON（支持 ```json 代码块包裹）\n2. 过滤无效一级标签（只保留 8 个标准分类）\n3. 过滤无效二级标签（只保留 SUBCATEGORY_TAGS 中定义的）\n4. 过滤无效跨领域标签（只保留 CROSS_DOMAIN_TAGS 中定义的）\n5. confidence >= 0.5 时采纳，否则保留原分类\n\n### 增量处理\n\n对于大量 other 条目（>1000），推荐增量模式：\n- `llm_incremental.py`：每批 50 条，并发 20，每 5 分钟保存检查点\n- 中断后重新运行自动续传\n- 合并：`merge_llm_results.py` 将检查点结果写回 CSV\n\n## 第五步：标签标准化\n\nLLM 和关键词可能输出不同格式的标签，标准化映射：\n\n| 标准分类 | 英文 key | 接受的输入格式 |\n|---------|----------|--------------|\n| 生物医药 | `biomed` | 生物医药, biomed |\n| AI科技 | `ai` | AI科技, ai, tech |\n| 投资金融 | `invest` | 投资金融, invest |\n| 科学研究 | `science` | 科学研究, science |\n| 商业财经 | `business` | 商业财经, business |\n| 生活方式 | `lifestyle` | 生活方式, lifestyle |\n| 媒体资讯 | `media` | 媒体资讯, media |\n| 政治国际 | `politics` | 政治国际, politics |\n\n二级标签别名映射（示例）：\n- \"大模型/LLM\" ← \"大模型\", \"LLM\", \"LLM/GPT\"\n- \"VC/PE\" ← \"VC\", \"PE\", \"风险投资\", \"私募股权\"\n- \"芯片/算力\" ← \"芯片\", \"算力\", \"GPU\", \"半导体\"\n\n复合标签（`+`/`|`/`,` 分隔）取第一个已知分类作为主分类。\n\n特殊映射：`tech` → `ai`（技术类合并到 AI科技）\n\n## 分类统计（实测数据，32333 篇）\n\n### 一级分类\n\n| 分类 | 数量 | 占比 |\n|------|------|------|\n| 生物医药 | 12,010 | 37.1% |\n| 生活方式 | 4,551 | 14.1% |\n| 商业财经 | 3,985 | 12.3% |\n| 科学研究 | 3,128 | 9.7% |\n| 投资金融 | 3,021 | 9.3% |\n| 媒体资讯 | 2,417 | 7.5% |\n| AI科技 | 2,151 | 6.7% |\n| 政治国际 | 939 | 2.9% |\n| other | 131 | 0.4% |\n\n### 二级标签 top 10\n\n| 标签 | 数量 |\n|------|------|\n| 生物医药>临床 | 2,144 |\n| 生物医药>创新药 | 1,418 |\n| 生物医药>神经 | 1,232 |\n| 生物医药>肿瘤 | 886 |\n| 商业财经>宏观经济 | 856 |\n| 商业财经>行业分析 | 810 |\n| 投资金融>VC/PE | 685 |\n| 科学研究>神经科学 | 576 |\n| 生物医药>抗体 | 564 |\n| 投资金融>二级市场 | 517 |\n\n### 跨领域标签\n\n| 标签 | 数量 |\n|------|------|\n| 生物医药+投资 | 2,974 |\n| AI+医疗 | 546 |\n| AI+投资 | 339 |\n| 生物医药+AI | 203 |\n| 商业+政治 | 68 |\n| 科学+政策 | 19 |\n\n## 年度趋势\n\n收藏高峰：2019年（6,558篇）、2023年（6,145篇）\n生物医药占比逐年上升：2017年 5.6% → 2023年 44.8%\n\nFile v1.1.1:references/schema.md\n\n# favorite.db 数据库结构\n\n## 表：fav_db_item\n\n存储所有收藏记录。\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| local_id | INTEGER | 主键，收藏记录ID |\n| fav_local_type | INTEGER | 收藏类型 |\n| status | INTEGER | 状态标记 |\n| create_time | INTEGER | 收藏时间（Unix时间戳） |\n| source_id | TEXT | 来源用户/公众号 wxid |\n| source_type | INTEGER | 来源类型 |\n| content | BLOB | 收藏内容（XML格式，可能压缩） |\n| WCDB_CT_content | INTEGER | 压缩类型（4=zstd） |\n\n## fav_local_type 类型值\n\n| 值 | 类型 |\n|----|------|\n| 1 | 文章/链接 |\n| 2 | 图片 |\n| 3 | 视频 |\n| 4 | 文件 |\n| 5 | 语音 |\n| 6 | 位置 |\n| 7 | 名片 |\n| 8 | 文本笔记 |\n\n## content XML 结构\n\n文章类型（fav_local_type=1）的 content 示例：\n\n```xml\n<favitem>\n  <type>1</type>\n  <title>文章标题</title>\n  <desc>文章摘要</desc>\n  <url>https://mp.weixin.qq.com/s/xxx</url>\n  <source>公众号名称</source>\n  <sourcetype>9</sourcetype>\n  <thumburl>封面图URL</thumburl>\n</favitem>\n```\n\n## 解析代码\n\n```python\nimport xml.etree.ElementTree as ET\n\ndef parse_favorite_content(content_bytes, ct):\n    # 解压 zstd\n    if ct == 4:\n        import zstandard as zstd\n        content = zstd.ZstdDecompressor().decompress(content_bytes)\n    else:\n        content = content_bytes\n    \n    root = ET.fromstring(content)\n    return {\n        'type': root.findtext('type'),\n        'title': root.findtext('title', ''),\n        'desc': root.findtext('desc', ''),\n        'url': root.findtext('url', ''),\n        'source': root.findtext('source', ''),\n    }\n```\n\n## 相关表\n\n- `favorite_fts.db` — 全文搜索索引（SQLite FTS）\n\nFile v1.1.1:LICENSE.txt\n\nMIT License\n\nCopyright (c) 2024\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nFile v1.1.1:requirements.txt\n\n# wechat-favorites 依赖\npycryptodome>=3.19\nzstandard>=0.22\n# LLM 分类使用 urllib（标准库），无需额外依赖\n\nArchive v1.1.0: 16 files, 39813 bytes\n\nFiles: LICENSE.txt (1056b), references/classification.md (6962b), references/schema.md (1703b), requirements.txt (123b), scripts/classify_favorites.py (20108b), scripts/config.py (8475b), scripts/decrypt_db.py (6139b), scripts/export_favorites.py (4281b), scripts/import_ima.py (7888b), scripts/key_utils.py (1225b), scripts/llm_classify.py (9006b), scripts/llm_incremental.py (6312b), scripts/merge_llm_results.py (3585b), scripts/normalize_categories.py (7292b), SKILL.md (11613b), _meta.json (135b)\n\nFile v1.1.0:SKILL.md\n\n---\nname: wechat-favorites\ndescription: 微信收藏夹导出、智能分类与知识库管理。当用户提到微信收藏（WeChat Favorites）、收藏夹导出（favorites export）、收藏文章分类（favorites classification）、IMA知识库导入（knowledge base import）、收藏整理（favorites organizer）时触发。支持从解密后的 favorite.db 导出收藏记录、三级分类体系（一级9类 + 二级57标签 + 跨领域6类）、LLM 智能增强、批量导入IMA知识库。\nmetadata:\n  version: 1.1.0\n  display_name: 微信收藏知识库\n---\n\n# 微信收藏知识库\n\nDecrypt, categorize and organize wechat favorites (Official Account collection) into knowledge base\n\n微信收藏夹导出、智能分类与知识库管理工具。\n\n## 为什么用这个工具？\n\n微信收藏夹积累了多年文章，但没有分类功能。这个工具可以：\n\n- **自动分类** — 96% 的文章自动归入 9 大类，无需手动整理\n- **细粒度标签** — 57 个二级标签，精准定位细分主题\n- **跨领域识别** — 自动标注\"生物医药+投资\"等复合主题\n- **LLM 增强** — 低置信度条目用大模型智能重判\n- **知识库导入** — 一键导入 IMA，构建个人知识库\n\n## 实测数据\n\n基于 32,333 篇文章（2014-2025 收藏）：\n\n| 指标 | 数值 |\n|------|------|\n| 总收藏数 | 36,853 |\n| 文章数 | 32,333 |\n| 一级分类覆盖率 | 96.0% (31,088/32,333) |\n| LLM 重分类成功率 | 98.5% (8,789/8,912) |\n| 二级标签平均覆盖率 | 35.5% |\n\n## 核心能力\n\n| 能力 | 说明 |\n|------|------|\n| **收藏导出** | 从解密后的 `favorite.db` 导出全部收藏记录为 CSV |\n| **关键词分类** | 一级分类 9 类（生物医药/AI/投资等），关键词匹配自动识别 |\n| **标签增强** | 二级标签 57 个 + 跨领域标签 6 类，支持多标签组合 |\n| **LLM 增强** | 置信度 < 0.4 时自动调用 LLM 二次分类，支持 OpenRouter 等兼容 API |\n| **IMA导入** | 批量导入到 IMA 知识库，支持断点续传、速率限制 |\n| **报告生成** | 分类统计、各分类 CSV 导出 |\n\n## 前置条件\n\n### 1. 微信数据库解密\n\n本 skill 依赖已解密的 `favorite.db`。需先完成：\n\n```bash\n# 使用 wechat-decrypt 或其他工具解密微信数据库\n# 输出: decrypted/favorite/favorite.db\n```\n\n解密方案（任选其一）：\n- **wechat-decrypt**：https://github.com/GeoSun/wechat-favorites-skill\n- 手动提取密钥 + SQLCipher 解密\n\n### 2. Python 环境\n\n```bash\npip install pycryptodome zstandard\n```\n\n### 3. IMA 导入（可选）\n\n如需导入 IMA 知识库：\n1. 创建 IMA 知识库，获取 `kb_id`\n2. 配置凭证：`~/.config/ima/client_id` 和 `~/.config/ima/api_key`\n\n### 4. 配置文件\n\n在项目目录创建 `config.json`：\n\n```json\n{\n  \"db_dir\": \"/path/to/wechat/data\",\n  \"keys_file\": \"/path/to/all_keys.json\",\n  \"decrypted_dir\": \"decrypted\",\n  \"ima_kb_id\": \"your_kb_id\"\n}\n```\n\n字段说明：\n- `db_dir`: 微信数据库路径\n- `keys_file`: 密钥文件路径（由 wechat-decrypt 生成）\n- `decrypted_dir`: 解密输出目录\n- `ima_kb_id`: IMA 知识库 ID（可选）\n\n### 5. IMA 导入配置（可选）\n\nIMA 凭证支持多种配置方式（优先级从高到低）：\n\n| 方式 | 说明 |\n|------|------|\n| 命令行参数 | `--client-id`, `--api-key`, `--kb-id` |\n| 环境变量 | `IMA_CLIENT_ID`, `IMA_API_KEY`, `IMA_KB_ID` |\n| config.json | `ima_kb_id` 字段 |\n| 文件 | `~/.config/ima/client_id`, `~/.config/ima/api_key` |\n\n```bash\n# 方式 1: 命令行参数\npython import_ima.py --kb-id YOUR_KB_ID --client-id XXX --api-key YYY\n\n# 方式 2: 环境变量\nIMA_CLIENT_ID=xxx IMA_API_KEY=yyy python import_ima.py\n\n# 方式 3: 配置文件（推荐）\n# 在项目目录创建 config.json，填写 ima_kb_id\n# 创建 ~/.config/ima/client_id 和 api_key 文件\n```\n\n## 快速开始\n\n```bash\ncd scripts\n\n# 0. 验证环境\npython quick_validate.py\n\n# 1. 解密数据库（如未解密）\npython decrypt_db.py\n\n# 2. 导出收藏记录\npython export_favorites.py\n\n# 3. 智能分类（支持 LLM 增强）\npython classify_favorites.py\n\n# 4. 导入 IMA（可选）\npython import_ima.py\n```\n\n## 目录结构\n\n```\nwechat-favorites/\n├── SKILL.md                     # 本文件\n├── LICENSE.txt                  # MIT License\n├── CHANGELOG.md                 # 更新日志\n├── requirements.txt             # 依赖声明\n├── config.json                  # 用户配置（需创建）\n├── scripts/\n│   ├── quick_validate.py        # 环境验证\n│   ├── decrypt_db.py            # 数据库解密\n│   ├── export_favorites.py      # 收藏导出\n│   ├── classify_favorites.py    # 智能分类（一级+二级+跨领域）\n│   ├── llm_classify.py          # LLM 二次分类模块\n│   ├── llm_incremental.py       # LLM 增量批处理\n│   ├── merge_llm_results.py     # LLM 结果合并\n│   ├── normalize_categories.py  # 标签标准化\n│   ├── import_ima.py            # IMA 导入\n│   ├── config.py                # 配置加载\n│   └── key_utils.py             # 密钥工具\n├── decrypted/                   # 解密输出\n│   └── favorite/favorite.db\n├── exported_favorites/          # 导出输出\n│   ├── favorites_all.csv        # 全部收藏\n│   ├── articles_final.csv       # 带分类标签\n│   ├── cat_biomed.csv           # 生物医药分类\n│   ├── cat_AI科技.csv           # AI 分类\n│   └── ...\n└── references/\n    ├── classification.md        # 分类算法说明\n    └── schema.md                # 数据库结构\n```\n\n## 数据流程\n\n```\nfavorite.db (加密)\n      │\n      ▼ decrypt_db.py\nfavorite.db (解密)\n      │\n      ▼ export_favorites.py\nfavorites_all.csv\n      │\n      ▼ classify_favorites.py [--llm]\narticles_final.csv + cat_*.csv\n      │\n      ▼ import_ima.py\nIMA 知识库\n```\n\n## 分类体系\n\n### 一级分类（9类）\n\n| 分类 | 关键词示例 |\n|------|-----------|\n| 生物医药 | 创新药、ADC、CAR-T、mRNA、临床试验、靶点、抗体 |\n| AI科技 | GPT、大模型、Agent、RAG、芯片、GPU、NVIDIA |\n| 投资金融 | IPO、融资、科创板、估值、基金、VC、PE |\n| 科学研究 | Nature、Science、论文、神经科学、突破 |\n| 商业财经 | 企业战略、行业分析、商业模式、宏观 |\n| 生活方式 | 健康、运动、旅行、读书、电影 |\n| 媒体资讯 | 新闻、热点、评论、舆论 |\n| 政治国际 | 国际关系、地缘政治、中美、外交 |\n| 其他 | 未命中以上分类 |\n\n### 二级标签（57个）\n\n每个一级分类下设细分标签，关键词匹配自动识别：\n\n| 一级分类 | 二级标签示例 |\n|---------|-------------|\n| 生物医药 | ADC、CAR-T、mRNA、创新药、临床、神经科学、免疫治疗、基因编辑、疫苗、医疗器械... |\n| AI科技 | 大模型、AI应用、AI医疗、自动驾驶、机器人、GPU、芯片、深度学习、RAG、Agent... |\n| 投资金融 | VC/PE、二级市场、IPO、并购、估值、私募、公募、债券、量化... |\n| 科学研究 | 神经科学、物理、化学、生物、材料、天文学、量子计算... |\n| 商业财经 | 企业战略、行业分析、商业模式、宏观经济、消费、零售... |\n| 生活方式 | 健康、运动、旅行、读书、电影、美食、教育... |\n\n完整标签列表见 `references/classification.md`。\n\n### 跨领域标签（6类）\n\n识别跨领域主题，多标签组合：\n\n| 跨领域标签 | 触发条件 |\n|-----------|---------|\n| 生物医药+投资 | 医药领域 + 融资/IPO/估值关键词 |\n| AI+医疗 | AI领域 + 医疗/医院/诊断关键词 |\n| AI+投资 | AI领域 + 融资/IPO/估值关键词 |\n| 生物医药+AI | 医药领域 + AI/大模型关键词 |\n| 商业+政治 | 商业领域 + 国际关系/政策关键词 |\n| 科学+政策 | 科学领域 + 政策/监管关键词 |\n\n## LLM 二次分类\n\n关键词分类置信度不足时，可启用 LLM 二次分类进行智能重判：\n\n```bash\n# 置信度低于 0.4 时触发 LLM\npython classify_favorites.py --llm\n\n# 全量 LLM 分类（跳过关键词）\npython classify_favorites.py --llm-only\n\n# 自定义触发阈值\npython classify_favorites.py --llm --llm-threshold 0.3\n```\n\n**环境变量配置：**\n\n| 变量 | 默认值 | 说明 |\n|------|--------|------|\n| `LLM_API_URL` | `http://localhost:4200/v1/chat/completions` | API 地址 |\n| `LLM_MODEL` | `auto` | 模型名称 |\n| `LLM_CONCURRENCY` | `5` | 最大并发数 |\n| `LLM_BATCH_SIZE` | `10` | 每批处理数量 |\n\n**OpenRouter 配置示例：**\n\n```bash\nexport LLM_API_URL=\"https://openrouter.ai/api/v1/chat/completions\"\nexport LLM_MODEL=\"deepseek/deepseek-chat\"\nexport LLM_API_KEY=\"your-openrouter-api-key\"\n```\n\n## 输出文件说明\n\n| 文件 | 内容 |\n|------|------|\n| `favorites_all.csv` | 全部收藏记录 |\n| `articles_final.csv` | 带 `category`、`subcategory`、`cross_domain` 标签的文章 |\n| `cat_*.csv` | 各分类单独文件 |\n| `llm_checkpoint.json` | LLM 分类断点（增量处理） |\n| `ima_import_state.json` | IMA 导入进度（断点续传） |\n| `ima_import.log` | IMA 导入日志 |\n\n**CSV 字段说明：**\n\n| 字段 | 说明 |\n|------|------|\n| `local_id` | 原始记录 ID |\n| `title` | 文章标题 |\n| `url` | 文章链接 |\n| `desc` | 摘要 |\n| `source` | 来源公众号 |\n| `create_time` | 收藏时间 |\n| `category` | 一级分类 |\n| `subcategory` | 二级标签（多个用逗号分隔） |\n| `cross_domain` | 跨领域标签（多个用逗号分隔） |\n| `confidence` | 分类置信度 |\n\n## favorite.db 表结构\n\n```sql\nCREATE TABLE fav_db_item (\n    local_id INTEGER PRIMARY KEY,\n    fav_local_type INTEGER,  -- 类型：1=文章, 3=图片, 等\n    status INTEGER,\n    create_time INTEGER,     -- 收藏时间戳\n    source_id TEXT,          -- 来源 wxid\n    source_type INTEGER,\n    content BLOB,            -- XML 内容\n    WCDB_CT_content INTEGER  -- 压缩标记：4=zstd\n);\n```\n\ncontent 字段解析：\n- `<title>` 标题\n- `<url>` 链接\n- `<source>` 来源公众号\n- `<description>` 摘要\n\n## 常见问题\n\n**Q: 收藏数据不完整？**\nA: 检查 `favorite.db` 最后修改时间，微信可能未同步最新数据。\n\n**Q: IMA 导入被限流？**\nA: API 限流约 200 次/小时，脚本已内置 3 秒/批的限速。\n\n**Q: 如何新增分类？**\nA: 编辑 `classify_favorites.py` 中的 `CATEGORIES` 字典。\n\n**Q: 解密失败？**\nA: 确保密钥正确，检查 `all_keys.json` 是否包含 `favorite.db` 的密钥。\n\n**Q: LLM 分类中断了怎么办？**\nA: 脚本自动保存断点到 `llm_checkpoint.json`，重新运行会从中断处继续。\n\n## 技术细节\n\n### SQLCipher 4 参数\n\n- 加密：AES-256-CBC + HMAC-SHA512\n- KDF：PBKDF2-HMAC-SHA512，256,000 iterations\n- 页面：4096 bytes，reserve = 80\n\n### 支持平台\n\n| 平台 | 解密支持 |\n|------|---------|\n| Windows | ✅ |\n| Linux | ✅ |\n| macOS | ✅ |\n\n## 相关链接\n\n- 本技能仓库：https://github.com/GeoSun/wechat-favorites-skill\n- 解密工具：https://github.com/ylytdeng/wechat-decrypt\n\n## 参考资料\n\n- [references/schema.md](references/schema.md) — 数据库结构详解\n- [references/classification.md](references/classification.md) — 分类算法说明\n\n## License\n\nMIT License\n\n## 免责声明\n\n本工具仅供个人备份和学习使用。请勿用于任何商业用途或违法行为。解密的数据仅限个人所有，不得传播或用于侵犯他人隐私。\n\nFile v1.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn7fh7azcgp5wwsg434v6km1x5858t33\",\n  \"slug\": \"wechat-favorites\",\n  \"version\": \"1.1.0\",\n  \"publishedAt\": 1777169350927\n}\n\nFile v1.1.0:references/classification.md\n\n# 收藏分类算法 v1.2.0\n\n## 分类流程\n\n```\nfavorites_all.csv\n      │\n      ▼ 关键词多标签分类（一级）\n  categories 列（中文标签，管道分隔）\n  confidence 列（0~0.5）\n      │\n      ▼ 二级分类（基于正则匹配）\n  subcategory 列（管道分隔，可多个）\n      │\n      ▼ 跨领域标签（主分类 + 跨领域关键词）\n  cross_domain 列（管道分隔，可多个）\n      │\n      ▼ [可选] LLM 二次分类（confidence < threshold）\n  更新 categories, subcategory, cross_domain\n  追加 _llm_reason, _llm_confidence 列\n      │\n      ▼ [可选] 标签标准化\n  category 列（标准英文 key）\n```\n\n## 第一步：关键词多标签分类（一级）\n\n每篇文章可同时归属多个分类。\n\n```python\nCATEGORIES = {\n    \"生物医药\": [\"创新药\", \"ADC\", \"CAR-T\", \"mRNA\", ...],\n    \"AI科技\":   [\"GPT\", \"大模型\", \"LLM\", \"Agent\", ...],\n    \"投资金融\": [\"IPO\", \"融资\", \"估值\", \"科创板\", ...],\n    \"科学研究\": [\"Nature\", \"Science\", \"论文\", ...],\n    \"商业财经\": [\"企业\", \"战略\", \"行业\", ...],\n    \"生活方式\": [\"健康\", \"运动\", \"旅行\", ...],\n    \"媒体资讯\": [\"新闻\", \"热点\", \"评论\", ...],\n    \"政治国际\": [\"国际\", \"外交\", \"地缘\", ...],\n}\n```\n\n置信度规则：\n- 0 = 未命中任何关键词\n- 0.3 = 命中单个分类\n- 0.5 = 命中多个分类（多标签反而更难判断主次）\n\n## 第二步：二级分类\n\n基于一级分类结果，对每个命中的一级分类用正则匹配二级标签。\n\n```python\nSUBCATEGORIES = {\n    \"生物医药\": {\n        \"临床\": r\"临床|IND|NDA|CDE|FDA|NMPA|III期|II期|I期|获批|批准\",\n        \"神经\": r\"阿尔茨海默|帕金森|神经|脑科学|抑郁|...\",\n        \"创新药\": r\"创新药|新药|first-in-class|best-in-class\",\n        # ... 14 个二级标签\n    },\n    \"AI科技\": {\n        \"AI应用\": r\"AI应用|AI\\+|赋能|落地|智能化|用AI|...\",\n        \"大模型/LLM\": r\"大模型|LLM|GPT|Claude|Gemini|...\",\n        # ... 9 个二级标签\n    },\n    # ... 共 6 个一级分类有二级标签\n}\n```\n\n特点：\n- 一篇文章可命中多个二级标签（如 \"ADC+肿瘤+临床\"）\n- 不是所有文章都有二级标签（泛泛讨论只保留一级）\n- 每个一级分类下二级标签互不排斥\n\n覆盖率（实测）：\n- 生物医药: 47.0%\n- 商业财经: 44.2%\n- 投资金融: 43.8%\n- AI科技: 29.1%\n- 科学研究: 27.9%\n- 生活方式: 20.9%\n\n## 第三步：跨领域标签\n\n检测文章是否同时涉及两个领域。\n\n```python\nCROSS_DOMAIN_RULES = [\n    # (标签, 主分类, 跨领域关键词正则)\n    (\"生物医药+投资\", \"生物医药\", r\"融资|估值|IPO|上市|投资|...\"),\n    (\"AI+医疗\",       \"AI科技\",   r\"医疗|药|临床|诊断|医院|...\"),\n    (\"AI+投资\",       \"AI科技\",   r\"融资|估值|IPO|上市|投资|...\"),\n    (\"生物医药+AI\",   \"生物医药\", r\"AI|人工智能|机器学习|计算|...\"),\n    (\"科学+政策\",     \"科学研究\", r\"政策|监管|伦理|法规|...\"),\n    (\"商业+政治\",     \"商业财经\", r\"制裁|贸易战|关税|地缘|...\"),\n]\n```\n\n逻辑：先确定文章的主分类，再检查是否含跨领域关键词。\n一篇文章可有多个跨领域标签。\n\n分布（实测 32333 篇）：\n- 生物医药+投资: 2974\n- AI+医疗: 546\n- AI+投资: 339\n- 生物医药+AI: 203\n- 商业+政治: 68\n- 科学+政策: 19\n\n## 第四步：LLM 二次分类\n\n对关键词分类置信度不足（默认 < 0.4）的条目，用大模型进行智能重判。\n\n### Prompt 结构\n\n```\n文章标题：{title}\n来源公众号：{source}\n文章链接：{url}\n\n一级分类（可多选）：\n生物医药、AI科技、投资金融、科学研究、商业财经、生活方式、媒体资讯、政治国际\n\n二级分类（选填，根据一级分类选对应的子标签）：\n- 生物医药：临床、神经、创新药、肿瘤、...\n- AI科技：AI应用、大模型/LLM、AI医疗、...\n- ...\n\n跨领域标签（选填，文章同时涉及两个领域时标注）：\n生物医药+投资、AI+医疗、AI+投资、生物医药+AI、科学+政策、商业+政治\n\n输出 JSON：{\"tags\": [...], \"subcategories\": [...], \"cross_domain\": [...], \"reason\": \"...\", \"confidence\": 0~1}\n```\n\n### LLM 结果解析\n\n1. 提取 JSON（支持 ```json 代码块包裹）\n2. 过滤无效一级标签（只保留 8 个标准分类）\n3. 过滤无效二级标签（只保留 SUBCATEGORY_TAGS 中定义的）\n4. 过滤无效跨领域标签（只保留 CROSS_DOMAIN_TAGS 中定义的）\n5. confidence >= 0.5 时采纳，否则保留原分类\n\n### 增量处理\n\n对于大量 other 条目（>1000），推荐增量模式：\n- `llm_incremental.py`：每批 50 条，并发 20，每 5 分钟保存检查点\n- 中断后重新运行自动续传\n- 合并：`merge_llm_results.py` 将检查点结果写回 CSV\n\n## 第五步：标签标准化\n\nLLM 和关键词可能输出不同格式的标签，标准化映射：\n\n| 标准分类 | 英文 key | 接受的输入格式 |\n|---------|----------|--------------|\n| 生物医药 | `biomed` | 生物医药, biomed |\n| AI科技 | `ai` | AI科技, ai, tech |\n| 投资金融 | `invest` | 投资金融, invest |\n| 科学研究 | `science` | 科学研究, science |\n| 商业财经 | `business` | 商业财经, business |\n| 生活方式 | `lifestyle` | 生活方式, lifestyle |\n| 媒体资讯 | `media` | 媒体资讯, media |\n| 政治国际 | `politics` | 政治国际, politics |\n\n二级标签别名映射（示例）：\n- \"大模型/LLM\" ← \"大模型\", \"LLM\", \"LLM/GPT\"\n- \"VC/PE\" ← \"VC\", \"PE\", \"风险投资\", \"私募股权\"\n- \"芯片/算力\" ← \"芯片\", \"算力\", \"GPU\", \"半导体\"\n\n复合标签（`+`/`|`/`,` 分隔）取第一个已知分类作为主分类。\n\n特殊映射：`tech` → `ai`（技术类合并到 AI科技）\n\n## 分类统计（实测数据，32333 篇）\n\n### 一级分类\n\n| 分类 | 数量 | 占比 |\n|------|------|------|\n| 生物医药 | 12,010 | 37.1% |\n| 生活方式 | 4,551 | 14.1% |\n| 商业财经 | 3,985 | 12.3% |\n| 科学研究 | 3,128 | 9.7% |\n| 投资金融 | 3,021 | 9.3% |\n| 媒体资讯 | 2,417 | 7.5% |\n| AI科技 | 2,151 | 6.7% |\n| 政治国际 | 939 | 2.9% |\n| other | 131 | 0.4% |\n\n### 二级标签 top 10\n\n| 标签 | 数量 |\n|------|------|\n| 生物医药>临床 | 2,144 |\n| 生物医药>创新药 | 1,418 |\n| 生物医药>神经 | 1,232 |\n| 生物医药>肿瘤 | 886 |\n| 商业财经>宏观经济 | 856 |\n| 商业财经>行业分析 | 810 |\n| 投资金融>VC/PE | 685 |\n| 科学研究>神经科学 | 576 |\n| 生物医药>抗体 | 564 |\n| 投资金融>二级市场 | 517 |\n\n### 跨领域标签\n\n| 标签 | 数量 |\n|------|------|\n| 生物医药+投资 | 2,974 |\n| AI+医疗 | 546 |\n| AI+投资 | 339 |\n| 生物医药+AI | 203 |\n| 商业+政治 | 68 |\n| 科学+政策 | 19 |\n\n## 年度趋势\n\n收藏高峰：2019年（6,558篇）、2023年（6,145篇）\n生物医药占比逐年上升：2017年 5.6% → 2023年 44.8%\n\nFile v1.1.0:references/schema.md\n\n# favorite.db 数据库结构\n\n## 表：fav_db_item\n\n存储所有收藏记录。\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| local_id | INTEGER | 主键，收藏记录ID |\n| fav_local_type | INTEGER | 收藏类型 |\n| status | INTEGER | 状态标记 |\n| create_time | INTEGER | 收藏时间（Unix时间戳） |\n| source_id | TEXT | 来源用户/公众号 wxid |\n| source_type | INTEGER | 来源类型 |\n| content | BLOB | 收藏内容（XML格式，可能压缩） |\n| WCDB_CT_content | INTEGER | 压缩类型（4=zstd） |\n\n## fav_local_type 类型值\n\n| 值 | 类型 |\n|----|------|\n| 1 | 文章/链接 |\n| 2 | 图片 |\n| 3 | 视频 |\n| 4 | 文件 |\n| 5 | 语音 |\n| 6 | 位置 |\n| 7 | 名片 |\n| 8 | 文本笔记 |\n\n## content XML 结构\n\n文章类型（fav_local_type=1）的 content 示例：\n\n```xml\n<favitem>\n  <type>1</type>\n  <title>文章标题</title>\n  <desc>文章摘要</desc>\n  <url>https://mp.weixin.qq.com/s/xxx</url>\n  <source>公众号名称</source>\n  <sourcetype>9</sourcetype>\n  <thumburl>封面图URL</thumburl>\n</favitem>\n```\n\n## 解析代码\n\n```python\nimport xml.etree.ElementTree as ET\n\ndef parse_favorite_content(content_bytes, ct):\n    # 解压 zstd\n    if ct == 4:\n        import zstandard as zstd\n        content = zstd.ZstdDecompressor().decompress(content_bytes)\n    else:\n        content = content_bytes\n    \n    root = ET.fromstring(content)\n    return {\n        'type': root.findtext('type'),\n        'title': root.findtext('title', ''),\n        'desc': root.findtext('desc', ''),\n        'url': root.findtext('url', ''),\n        'source': root.findtext('source', ''),\n    }\n```\n\n## 相关表\n\n- `favorite_fts.db` — 全文搜索索引（SQLite FTS）\n\nFile v1.1.0:LICENSE.txt\n\nMIT License\n\nCopyright (c) 2024\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nFile v1.1.0:requirements.txt\n\n# wechat-favorites 依赖\npycryptodome>=3.19\nzstandard>=0.22\n# LLM 分类使用 urllib（标准库），无需额外依赖\n\nArchive v1.0.2: 13 files, 22112 bytes\n\nFiles: LICENSE.txt (1056b), references/classification.md (2118b), references/schema.md (1703b), requirements.txt (61b), scripts/classify_favorites.py (4377b), scripts/config.py (8475b), scripts/decrypt_db.py (6139b), scripts/export_favorites.py (4281b), scripts/import_ima.py (7888b), scripts/key_utils.py (1225b), scripts/quick_validate.py (3837b), SKILL.md (7109b), _meta.json (135b)\n\nFile v1.0.2:SKILL.md\n\n---\nname: wechat-favorites\ndescription: 微信收藏夹导出、分类与知识库管理。当用户提到微信收藏、收藏夹导出、收藏文章分类、IMA知识库导入、收藏整理时触发。支持从解密后的 favorite.db 导出收藏记录、智能分类（生物医药/AI/投资等）、批量导入IMA知识库。\n---\n\n# WeChat Favorites Skill\n\n微信收藏夹导出、智能分类与知识库管理工具。\n\n## 核心能力\n\n| 能力 | 说明 |\n|------|------|\n| **收藏导出** | 从解密后的 `favorite.db` 导出全部收藏记录为 CSV |\n| **智能分类** | 多标签分类（生物医药、AI、投资、科学、商业等） |\n| **IMA导入** | 批量导入到 IMA 知识库，支持断点续传 |\n| **报告生成** | 分类统计、各分类 CSV 导出 |\n\n## 前置条件\n\n### 1. 微信数据库解密\n\n本 skill 依赖已解密的 `favorite.db`。需先完成：\n\n```bash\n# 使用 wechat-decrypt 或其他工具解密微信数据库\n# 输出: decrypted/favorite/favorite.db\n```\n\n解密方案（任选其一）：\n- **wechat-decrypt**：https://github.com/GeoSun/wechat-favorites-skill\n- 手动提取密钥 + SQLCipher 解密\n\n### 2. Python 环境\n\n```bash\npip install pycryptodome zstandard\n```\n\n### 3. IMA 导入（可选）\n\n如需导入 IMA 知识库：\n1. 创建 IMA 知识库，获取 `kb_id`\n2. 配置凭证：`~/.config/ima/client_id` 和 `~/.config/ima/api_key`\n\n### 4. 配置文件\n\n在项目目录创建 `config.json`：\n\n```json\n{\n  \"db_dir\": \"/path/to/wechat/data\",\n  \"keys_file\": \"/path/to/all_keys.json\",\n  \"decrypted_dir\": \"decrypted\",\n  \"ima_kb_id\": \"your_kb_id\"\n}\n```\n\n字段说明：\n- `db_dir`: 微信数据库路径\n- `keys_file`: 密钥文件路径（由 wechat-decrypt 生成）\n- `decrypted_dir`: 解密输出目录\n- `ima_kb_id`: IMA 知识库 ID（可选）\n\n### 5. IMA 导入配置（可选）\n\nIMA 凭证支持多种配置方式（优先级从高到低）：\n\n| 方式 | 说明 |\n|------|------|\n| 命令行参数 | `--client-id`, `--api-key`, `--kb-id` |\n| 环境变量 | `IMA_CLIENT_ID`, `IMA_API_KEY`, `IMA_KB_ID` |\n| config.json | `ima_kb_id` 字段 |\n| 文件 | `~/.config/ima/client_id`, `~/.config/ima/api_key` |\n\n```bash\n# 方式 1: 命令行参数\npython import_ima.py --kb-id YOUR_KB_ID --client-id XXX --api-key YYY\n\n# 方式 2: 环境变量\nIMA_CLIENT_ID=xxx IMA_API_KEY=yyy python import_ima.py\n\n# 方式 3: 配置文件（推荐）\n# 在项目目录创建 config.json，填写 ima_kb_id\n# 创建 ~/.config/ima/client_id 和 api_key 文件\n```\n\n## 快速开始\n\n```bash\ncd scripts\n\n# 0. 验证环境\npython quick_validate.py\n\n# 1. 解密数据库（如未解密）\npython decrypt_db.py\n\n# 2. 导出收藏记录\npython export_favorites.py\n\n# 3. 智能分类\npython classify_favorites.py\n\n# 4. 导入 IMA（可选）\npython import_ima.py\n```\n\n## 目录结构\n\n```\nwechat-favorites/\n├── SKILL.md                     # 本文件\n├── LICENSE.txt                  # MIT License\n├── CHANGELOG.md                 # 更新日志\n├── requirements.txt             # 依赖声明\n├── config.json                  # 用户配置（需创建）\n├── scripts/\n│   ├── decrypt_db.py            # 数据库解密\n│   ├── export_favorites.py      # 收藏导出\n│   ├── classify_favorites.py    # 智能分类\n│   ├── import_ima.py            # IMA 导入\n│   ├── config.py                # 配置加载\n│   └── key_utils.py             # 密钥工具\n├── decrypted/                   # 解密输出\n│   └── favorite/favorite.db\n├── exported_favorites/          # 导出输出\n│   ├── favorites_all.csv        # 全部收藏\n│   ├── articles_final.csv       # 带分类标签\n│   ├── cat_biomed.csv           # 生物医药分类\n│   ├── cat_AI科技.csv           # AI 分类\n│   └── ...\n└── references/\n    ├── classification.md        # 分类算法说明\n    └── schema.md                # 数据库结构\n```\n\n## 数据流程\n\n```\nfavorite.db (加密)\n      │\n      ▼ decrypt_db.py\nfavorite.db (解密)\n      │\n      ▼ export_favorites.py\nfavorites_all.csv\n      │\n      ▼ classify_favorites.py\narticles_final.csv + cat_*.csv\n      │\n      ▼ import_ima.py\nIMA 知识库\n```\n\n## favorite.db 表结构\n\n```sql\nCREATE TABLE fav_db_item (\n    local_id INTEGER PRIMARY KEY,\n    fav_local_type INTEGER,  -- 类型：1=文章, 3=图片, 等\n    status INTEGER,\n    create_time INTEGER,     -- 收藏时间戳\n    source_id TEXT,          -- 来源 wxid\n    source_type INTEGER,\n    content BLOB,            -- XML 内容\n    WCDB_CT_content INTEGER  -- 压缩标记：4=zstd\n);\n```\n\ncontent 字段解析：\n- `<title>` 标题\n- `<url>` 链接\n- `<source>` 来源公众号\n- `<description>` 摘要\n\n## 分类体系\n\n| 分类 | 关键词示例 |\n|------|-----------|\n| 生物医药 | 创新药、ADC、CAR-T、mRNA、临床试验、靶点、抗体 |\n| AI科技 | GPT、大模型、Agent、RAG、芯片、GPU、NVIDIA |\n| 投资金融 | IPO、融资、科创板、估值、基金、VC、PE |\n| 科学研究 | Nature、Science、论文、神经科学、突破 |\n| 商业财经 | 企业战略、行业分析、商业模式、宏观 |\n| 生活方式 | 健康、运动、旅行、读书、电影 |\n| 媒体资讯 | 新闻、热点、评论、舆论 |\n| 政治国际 | 国际关系、地缘政治、中美、外交 |\n\n自定义分类：编辑 `scripts/classify_favorites.py` 中的 `CATEGORIES` 字典。\n\n## 输出文件说明\n\n| 文件 | 内容 |\n|------|------|\n| `favorites_all.csv` | 全部收藏记录 |\n| `articles_final.csv` | 带 `categories` 标签的文章 |\n| `cat_*.csv` | 各分类单独文件 |\n| `ima_import_state.json` | IMA 导入进度（断点续传） |\n| `ima_import.log` | IMA 导入日志 |\n\n## 常见问题\n\n**Q: 收藏数据不完整？**\nA: 检查 `favorite.db` 最后修改时间，微信可能未同步最新数据。\n\n**Q: IMA 导入被限流？**\nA: API 限流约 200 次/小时，脚本已内置 3 秒/批的限速。\n\n**Q: 如何新增分类？**\nA: 编辑 `classify_favorites.py` 中的 `CATEGORIES` 字典。\n\n**Q: 解密失败？**\nA: 确保密钥正确，检查 `all_keys.json` 是否包含 `favorite.db` 的密钥。\n\n## 技术细节\n\n### SQLCipher 4 参数\n\n- 加密：AES-256-CBC + HMAC-SHA512\n- KDF：PBKDF2-HMAC-SHA512，256,000 iterations\n- 页面：4096 bytes，reserve = 80\n\n### 支持平台\n\n| 平台 | 解密支持 |\n|------|---------|\n| Windows | ✅ |\n| Linux | ✅ |\n| macOS | ✅ |\n\n## 相关链接\n\n- 完整 wechat-decrypt：https://github.com/GeoSun/wechat-favorites-skill\n- 原始解密逻辑：https://github.com/ylytdeng/wechat-decrypt\n\n## 参考资料\n\n- [references/schema.md](references/schema.md) — 数据库结构详解\n- [references/classification.md](references/classification.md) — 分类算法说明\n\n## License\n\nMIT License\n\n## 免责声明\n\n本工具仅供个人备份和学习使用。请勿用于任何商业用途或违法行为。解密的数据仅限个人所有，不得传播或用于侵犯他人隐私。\n\nFile v1.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn7fh7azcgp5wwsg434v6km1x5858t33\",\n  \"slug\": \"wechat-favorites\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1776871902848\n}\n\nFile v1.0.2:references/classification.md\n\n# 收藏分类算法\n\n## 多标签分类\n\n每篇文章可同时归属多个分类。\n\n```python\nCATEGORY_KEYWORDS = {\n    'biomed': [\n        '创新药', '临床试验', '靶点', '管线', '肿瘤', '免疫',\n        'ADC', 'CAR-T', '单抗', '双抗', 'mRNA', '疫苗',\n        '阿尔茨海默', '帕金森', '脑机接口', '神经',\n        '药明', '恒瑞', '百济', '信达', '康方',\n    ],\n    'ai': [\n        'GPT', 'OpenAI', '大模型', 'LLM', 'Agent',\n        'DeepSeek', 'Claude', 'RAG', '多模态',\n        '芯片', 'GPU', 'AI', '人工智能',\n    ],\n    'invest': [\n        'IPO', '融资', '估值', '科创板', '港股',\n        '并购', '基金', '投资', 'VC', 'PE',\n        '高瓴', '红杉', 'IDG', '启明',\n    ],\n    'science': [\n        '神经科学', '生物学', '物理学', '论文',\n        'CNS', 'Nature', 'Science', 'Cell',\n        '研究', '学术',\n    ],\n    'business': [\n        '企业', '战略', '商业模式', '行业',\n        '竞争', '市场', '增长', '转型',\n    ],\n    'lifestyle': [\n        '健康', '养生', '心理', '职场', '教育',\n        '文化', '旅行', '读书',\n    ],\n    'media': [\n        '新闻', '媒体', '评论', '热点',\n    ],\n    'politics': [\n        '中美', '国际', '地缘', '政策',\n    ],\n}\n\ndef classify_article(title, desc):\n    text = f\"{title} {desc}\".lower()\n    tags = []\n    for cat, keywords in CATEGORY_KEYWORDS.items():\n        for kw in keywords:\n            if kw.lower() in text:\n                tags.append(cat)\n                break\n    return tags or ['other']\n```\n\n## 分类统计\n\n从 32,315 篇文章中：\n\n| 分类 | 数量 | 占比 |\n|------|------|------|\n| 生物医药 | 11,431 | 35.3% |\n| 其他 | 8,912 | 27.6% |\n| 商业/企业 | 2,837 | 8.8% |\n| 科学/研究 | 2,565 | 7.9% |\n| 投资/金融 | 2,483 | 7.7% |\n| AI/科技 | 1,549 | 4.8% |\n| 生活/健康 | 1,214 | 3.8% |\n| 媒体/内容 | 688 | 2.1% |\n| 政治/政策 | 402 | 1.2% |\n\n## 年度趋势\n\n收藏高峰：2019年（6,558篇）、2023年（6,145篇）\n\n生物医药占比逐年上升：2017年 5.6% → 2023年 44.8%\n\nFile v1.0.2:references/schema.md\n\n# favorite.db 数据库结构\n\n## 表：fav_db_item\n\n存储所有收藏记录。\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| local_id | INTEGER | 主键，收藏记录ID |\n| fav_local_type | INTEGER | 收藏类型 |\n| status | INTEGER | 状态标记 |\n| create_time | INTEGER | 收藏时间（Unix时间戳） |\n| source_id | TEXT | 来源用户/公众号 wxid |\n| source_type | INTEGER | 来源类型 |\n| content | BLOB | 收藏内容（XML格式，可能压缩） |\n| WCDB_CT_content | INTEGER | 压缩类型（4=zstd） |\n\n## fav_local_type 类型值\n\n| 值 | 类型 |\n|----|------|\n| 1 | 文章/链接 |\n| 2 | 图片 |\n| 3 | 视频 |\n| 4 | 文件 |\n| 5 | 语音 |\n| 6 | 位置 |\n| 7 | 名片 |\n| 8 | 文本笔记 |\n\n## content XML 结构\n\n文章类型（fav_local_type=1）的 content 示例：\n\n```xml\n<favitem>\n  <type>1</type>\n  <title>文章标题</title>\n  <desc>文章摘要</desc>\n  <url>https://mp.weixin.qq.com/s/xxx</url>\n  <source>公众号名称</source>\n  <sourcetype>9</sourcetype>\n  <thumburl>封面图URL</thumburl>\n</favitem>\n```\n\n## 解析代码\n\n```python\nimport xml.etree.ElementTree as ET\n\ndef parse_favorite_content(content_bytes, ct):\n    # 解压 zstd\n    if ct == 4:\n        import zstandard as zstd\n        content = zstd.ZstdDecompressor().decompress(content_bytes)\n    else:\n        content = content_bytes\n    \n    root = ET.fromstring(content)\n    return {\n        'type': root.findtext('type'),\n        'title': root.findtext('title', ''),\n        'desc': root.findtext('desc', ''),\n        'url': root.findtext('url', ''),\n        'source': root.findtext('source', ''),\n    }\n```\n\n## 相关表\n\n- `favorite_fts.db` — 全文搜索索引（SQLite FTS）\n\nFile v1.0.2:LICENSE.txt\n\nMIT License\n\nCopyright (c) 2024\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nFile v1.0.2:requirements.txt\n\n# wechat-favorites 依赖\npycryptodome>=3.19\nzstandard>=0.22\n\nArchive v1.0.1: 5 files, 8309 bytes\n\nFiles: references/classification.md (2118b), references/schema.md (1703b), scripts/ima_batch_import.py (9001b), SKILL.md (4835b), _meta.json (135b)\n\nFile v1.0.1:SKILL.md\n\n---\r\nname: wechat-favorites\r\ndescription: 微信收藏夹导出、分类与知识库管理。当用户提到微信收藏、收藏夹导出、收藏文章分类、IMA知识库导入、收藏整理时触发。支持从解密后的 favorite.db 导出收藏记录、智能分类（生物医药/AI/投资等）、批量导入IMA知识库、生成分类报告。\r\n---\r\n\r\n# WeChat Favorites Skill\r\n\r\n微信收藏夹导出与智能分类工具。\r\n\r\n## 核心能力\r\n\r\n1. **收藏导出** — 从解密后的 `favorite.db` 导出全部收藏记录\r\n2. **智能分类** — 多标签分类（生物医药、AI、投资、科学、商业等）\r\n3. **IMA导入** — 批量导入到 IMA 知识库（支持断点续传）\r\n4. **报告生成** — 分类统计、年度趋势、热门话题\r\n\r\n## 前置条件\r\n\r\n- 已完成 `wechat-decrypt` 解密，`decrypted/favorite/favorite.db` 存在\r\n- Python 3.10+\r\n- 依赖：`pip install zstandard pycryptodome`\r\n\r\n### IMA 导入配置（可选）\r\n\r\nIMA 知识库导入为可选功能，需要配置凭证。\r\n\r\n**方式一：配置文件（推荐）**\r\n\r\n创建 `~/.config/ima/config.json`：\r\n```json\r\n{\r\n    \"client_id\": \"your_client_id\",\r\n    \"api_key\": \"your_api_key\",\r\n    \"kb_id\": \"your_knowledge_base_id\"\r\n}\r\n```\r\n\r\n**方式二：环境变量**\r\n```bash\r\nexport IMA_CLIENT_ID=\"your_client_id\"\r\nexport IMA_API_KEY=\"your_api_key\"\r\nexport IMA_KB_ID=\"your_knowledge_base_id\"\r\n```\r\n\r\n**方式三：命令行参数**\r\n```bash\r\npython ima_batch_import.py --kb-id YOUR_KB_ID\r\n```\r\n\r\n## 工作目录\r\n\r\n所有操作在 `wechat-decrypt/` 项目目录下执行（替换为你的本地路径）：\r\n```bash\r\ncd /path/to/your/wechat-decrypt\r\n```\r\n\r\n## 核心工作流\r\n\r\n### 1. 导出收藏记录\r\n\r\n```python\r\nimport sqlite3, csv, zstandard\r\nconn = sqlite3.connect('decrypted/favorite/favorite.db')\r\nrows = conn.execute(\"SELECT * FROM fav_db_item\").fetchall()\r\n# 解析 XML content 字段，提取标题、URL、来源\r\n# WCDB_CT_content=4 时需 zstd 解压\r\n```\r\n\r\n输出：`exported_favorites/favorites_all.csv`\r\n\r\n### 2. 智能分类\r\n\r\n分类体系（多标签）：\r\n- **生物医药** — 创新药、临床试验、靶点、ADC、CAR-T、mRNA\r\n- **AI/科技** — GPT、大模型、Agent、芯片、RAG\r\n- **投资/金融** — IPO、融资、估值、科创板、基金\r\n- **科学/研究** — 神经科学、生物学、物理学、论文\r\n- **商业/财经** — 企业战略、行业分析、宏观经济\r\n- **生活方式** — 健康、文化、旅行、读书\r\n- **媒体/资讯** — 新闻评论、社会热点\r\n- **政治/国际** — 国际关系、地缘政治\r\n\r\n输出：`exported_favorites/articles_final.csv`（含分类标签）\r\n\r\n### 3. IMA 知识库导入\r\n\r\n```bash\r\n# 基本用法（使用配置文件中的凭证）\r\npython ima_batch_import.py\r\n\r\n# 指定 CSV 路径和知识库\r\npython ima_batch_import.py --csv path/to/articles.csv --kb-id YOUR_KB_ID\r\n\r\n# 指定状态文件和日志路径\r\npython ima_batch_import.py --state my_state.json --log my_import.log\r\n```\r\n\r\n- 每批 10 条 URL，自动限速（3秒/批）\r\n- 断点续传：`ima_import_state.json` 记录进度\r\n- 日志：`ima_import.log`\r\n\r\n### 4. 生成分类报告\r\n\r\n分类报告包含：\r\n- 各分类文章数量与占比\r\n- 年度趋势（按年份统计）\r\n- 热门话题 TOP 10\r\n- 各分类 TOP 来源公众号\r\n\r\n## 数据文件\r\n\r\n| 文件 | 内容 |\r\n|------|------|\r\n| `favorites_all.csv` | 全部收藏记录 |\r\n| `articles_final.csv` | 带分类标签的文章 |\r\n| `cat_biomed.csv` | 生物医药分类 |\r\n| `cat_ai.csv` | AI/科技分类 |\r\n| `cat_invest.csv` | 投资/金融分类 |\r\n| `classification_report.md` | 分类统计报告 |\r\n| `kb_overview.md` | 知识库总览 |\r\n\r\n## favorite.db 表结构\r\n\r\n```sql\r\nCREATE TABLE fav_db_item (\r\n    local_id INTEGER PRIMARY KEY,\r\n    fav_local_type INTEGER,      -- 类型：1=文章, 3=图片, 等\r\n    status INTEGER,\r\n    create_time INTEGER,         -- 收藏时间戳\r\n    source_id TEXT,              -- 来源 wxid\r\n    source_type INTEGER,\r\n    content BLOB,                -- XML 内容\r\n    WCDB_CT_content INTEGER      -- 压缩类型标记\r\n);\r\n```\r\n\r\ncontent 字段为 XML，解析提取：\r\n- `<title>` 标题\r\n- `<url>` 链接\r\n- `<source>` 来源公众号\r\n\r\n## 常见问题\r\n\r\n**Q: 收藏数据不完整？**\r\nA: 检查 `favorite.db` 最后修改时间，微信可能未同步最新数据。\r\n\r\n**Q: IMA 导入被限流？**\r\nA: API 限流约 200 次/小时，脚本已内置 3 秒/批的限速。可设置 cron 每 30 分钟续跑。\r\n\r\n**Q: 如何新增分类？**\r\nA: 修改分类脚本中的 `CATEGORY_KEYWORDS` 字典，添加关键词。\r\n\r\n## 参考资料\r\n\r\n- [references/schema.md](references/schema.md) — 数据库结构详解\r\n- [references/classification.md](references/classification.md) — 分类算法说明\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn7fh7azcgp5wwsg434v6km1x5858t33\",\n  \"slug\": \"wechat-favorites\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1776782797412\n}\n\nFile v1.0.1:references/classification.md\n\n# 收藏分类算法\n\n## 多标签分类\n\n每篇文章可同时归属多个分类。\n\n```python\nCATEGORY_KEYWORDS = {\n    'biomed': [\n        '创新药', '临床试验', '靶点', '管线', '肿瘤', '免疫',\n        'ADC', 'CAR-T', '单抗', '双抗', 'mRNA', '疫苗',\n        '阿尔茨海默', '帕金森', '脑机接口', '神经',\n        '药明', '恒瑞', '百济', '信达', '康方',\n    ],\n    'ai': [\n        'GPT', 'OpenAI', '大模型', 'LLM', 'Agent',\n        'DeepSeek', 'Claude', 'RAG', '多模态',\n        '芯片', 'GPU', 'AI', '人工智能',\n    ],\n    'invest': [\n        'IPO', '融资', '估值', '科创板', '港股',\n        '并购', '基金', '投资', 'VC', 'PE',\n        '高瓴', '红杉', 'IDG', '启明',\n    ],\n    'science': [\n        '神经科学', '生物学', '物理学', '论文',\n        'CNS', 'Nature', 'Science', 'Cell',\n        '研究', '学术',\n    ],\n    'business': [\n        '企业', '战略', '商业模式', '行业',\n        '竞争', '市场', '增长', '转型',\n    ],\n    'lifestyle': [\n        '健康', '养生', '心理', '职场', '教育',\n        '文化', '旅行', '读书',\n    ],\n    'media': [\n        '新闻', '媒体', '评论', '热点',\n    ],\n    'politics': [\n        '中美', '国际', '地缘', '政策',\n    ],\n}\n\ndef classify_article(title, desc):\n    text = f\"{title} {desc}\".lower()\n    tags = []\n    for cat, keywords in CATEGORY_KEYWORDS.items():\n        for kw in keywords:\n            if kw.lower() in text:\n                tags.append(cat)\n                break\n    return tags or ['other']\n```\n\n## 分类统计\n\n从 32,315 篇文章中：\n\n| 分类 | 数量 | 占比 |\n|------|------|------|\n| 生物医药 | 11,431 | 35.3% |\n| 其他 | 8,912 | 27.6% |\n| 商业/企业 | 2,837 | 8.8% |\n| 科学/研究 | 2,565 | 7.9% |\n| 投资/金融 | 2,483 | 7.7% |\n| AI/科技 | 1,549 | 4.8% |\n| 生活/健康 | 1,214 | 3.8% |\n| 媒体/内容 | 688 | 2.1% |\n| 政治/政策 | 402 | 1.2% |\n\n## 年度趋势\n\n收藏高峰：2019年（6,558篇）、2023年（6,145篇）\n\n生物医药占比逐年上升：2017年 5.6% → 2023年 44.8%\n\nFile v1.0.1:references/schema.md\n\n# favorite.db 数据库结构\n\n## 表：fav_db_item\n\n存储所有收藏记录。\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| local_id | INTEGER | 主键，收藏记录ID |\n| fav_local_type | INTEGER | 收藏类型 |\n| status | INTEGER | 状态标记 |\n| create_time | INTEGER | 收藏时间（Unix时间戳） |\n| source_id | TEXT | 来源用户/公众号 wxid |\n| source_type | INTEGER | 来源类型 |\n| content | BLOB | 收藏内容（XML格式，可能压缩） |\n| WCDB_CT_content | INTEGER | 压缩类型（4=zstd） |\n\n## fav_local_type 类型值\n\n| 值 | 类型 |\n|----|------|\n| 1 | 文章/链接 |\n| 2 | 图片 |\n| 3 | 视频 |\n| 4 | 文件 |\n| 5 | 语音 |\n| 6 | 位置 |\n| 7 | 名片 |\n| 8 | 文本笔记 |\n\n## content XML 结构\n\n文章类型（fav_local_type=1）的 content 示例：\n\n```xml\n<favitem>\n  <type>1</type>\n  <title>文章标题</title>\n  <desc>文章摘要</desc>\n  <url>https://mp.weixin.qq.com/s/xxx</url>\n  <source>公众号名称</source>\n  <sourcetype>9</sourcetype>\n  <thumburl>封面图URL</thumburl>\n</favitem>\n```\n\n## 解析代码\n\n```python\nimport xml.etree.ElementTree as ET\n\ndef parse_favorite_content(content_bytes, ct):\n    # 解压 zstd\n    if ct == 4:\n        import zstandard as zstd\n        content = zstd.ZstdDecompressor().decompress(content_bytes)\n    else:\n        content = content_bytes\n    \n    root = ET.fromstring(content)\n    return {\n        'type': root.findtext('type'),\n        'title': root.findtext('title', ''),\n        'desc': root.findtext('desc', ''),\n        'url': root.findtext('url', ''),\n        'source': root.findtext('source', ''),\n    }\n```\n\n## 相关表\n\n- `favorite_fts.db` — 全文搜索索引（SQLite FTS）\n\nArchive v1.0.0: 5 files, 7182 bytes\n\nFiles: references/classification.md (2118b), references/schema.md (1703b), scripts/ima_batch_import.py (5736b), SKILL.md (3901b), _meta.json (135b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: wechat-favorites\ndescription: 微信收藏夹导出、分类与知识库管理。当用户提到微信收藏、收藏夹导出、收藏文章分类、IMA知识库导入、收藏整理时触发。支持从解密后的 favorite.db 导出收藏记录、智能分类（生物医药/AI/投资等）、批量导入IMA知识库、生成分类报告。\n---\n\n# WeChat Favorites Skill\n\n微信收藏夹导出与智能分类工具。\n\n## 核心能力\n\n1. **收藏导出** — 从解密后的 `favorite.db` 导出全部收藏记录\n2. **智能分类** — 多标签分类（生物医药、AI、投资、科学、商业等）\n3. **IMA导入** — 批量导入到 IMA 知识库（支持断点续传）\n4. **报告生成** — 分类统计、年度趋势、热门话题\n\n## 前置条件\n\n- 已完成 `wechat-decrypt` 解密，`decrypted/favorite/favorite.db` 存在\n- Python 3.10+，依赖：`pip install icalendar python-dateutil`\n- IMA 导入需要 `~/.config/ima/client_id` 和 `~/.config/ima/api_key`\n\n## 工作目录\n\n所有操作在 `wechat-decrypt/` 项目目录下执行（替换为你的本地路径）：\n```bash\ncd /path/to/your/wechat-decrypt\n```\n\n## 核心工作流\n\n### 1. 导出收藏记录\n\n```python\nimport sqlite3, csv\nconn = sqlite3.connect('decrypted/favorite/favorite.db')\nrows = conn.execute(\"SELECT * FROM fav_db_item\").fetchall()\n# 解析 XML content 字段，提取标题、URL、来源\n```\n\n输出：`exported_favorites/favorites_all.csv`\n\n### 2. 智能分类\n\n分类体系（多标签）：\n- **生物医药** — 创新药、临床试验、靶点、ADC、CAR-T、mRNA\n- **AI/科技** — GPT、大模型、Agent、芯片、RAG\n- **投资/金融** — IPO、融资、估值、科创板、基金\n- **科学/研究** — 神经科学、生物学、物理学、论文\n- **商业/财经** — 企业战略、行业分析、宏观经济\n- **生活方式** — 健康、文化、旅行、读书\n- **媒体/资讯** — 新闻评论、社会热点\n- **政治/国际** — 国际关系、地缘政治\n\n输出：`exported_favorites/articles_final.csv`（含分类标签）\n\n### 3. IMA 知识库导入\n\n```bash\npython ima_batch_import.py\n```\n\n- 每批 10 条 URL，自动限速（3秒/批）\n- 断点续传：`ima_import_state.json` 记录进度\n- 日志：`ima_import.log`\n\n### 4. 生成分类报告\n\n分类报告包含：\n- 各分类文章数量与占比\n- 年度趋势（按年份统计）\n- 热门话题 TOP 10\n- 各分类 TOP 来源公众号\n\n## 数据文件\n\n| 文件 | 内容 |\n|------|------|\n| `favorites_all.csv` | 全部收藏记录 |\n| `articles_final.csv` | 带分类标签的文章 |\n| `cat_biomed.csv` | 生物医药分类 |\n| `cat_ai.csv` | AI/科技分类 |\n| `cat_invest.csv` | 投资/金融分类 |\n| `classification_report.md` | 分类统计报告 |\n| `kb_overview.md` | 知识库总览 |\n\n## favorite.db 表结构\n\n```sql\nCREATE TABLE fav_db_item (\n    local_id INTEGER PRIMARY KEY,\n    fav_local_type INTEGER,      -- 类型：1=文章, 3=图片, 等\n    status INTEGER,\n    create_time INTEGER,         -- 收藏时间戳\n    source_id TEXT,              -- 来源 wxid\n    source_type INTEGER,\n    content BLOB,                -- XML 内容\n    WCDB_CT_content INTEGER      -- 压缩类型标记\n);\n```\n\ncontent 字段为 XML，解析提取：\n- `<title>` 标题\n- `<url>` 链接\n- `<source>` 来源公众号\n\n## 常见问题\n\n**Q: 收藏数据不完整？**\nA: 检查 `favorite.db` 最后修改时间，微信可能未同步最新数据。\n\n**Q: IMA 导入被限流？**\nA: API 限流约 200 次/小时，脚本已内置 3 秒/批的限速。可设置 cron 每 30 分钟续跑。\n\n**Q: 如何新增分类？**\nA: 修改分类脚本中的 `CATEGORY_KEYWORDS` 字典，添加关键词。\n\n## 参考资料\n\n- [references/schema.md](references/schema.md) — 数据库结构详解\n- [references/classification.md](references/classification.md) — 分类算法说明\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn7fh7azcgp5wwsg434v6km1x5858t33\",\n  \"slug\": \"wechat-favorites\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1776781788782\n}\n\nFile v1.0.0:references/classification.md\n\n# 收藏分类算法\n\n## 多标签分类\n\n每篇文章可同时归属多个分类。\n\n```python\nCATEGORY_KEYWORDS = {\n    'biomed': [\n        '创新药', '临床试验', '靶点', '管线', '肿瘤', '免疫',\n        'ADC', 'CAR-T', '单抗', '双抗', 'mRNA', '疫苗',\n        '阿尔茨海默', '帕金森', '脑机接口', '神经',\n        '药明', '恒瑞', '百济', '信达', '康方',\n    ],\n    'ai': [\n        'GPT', 'OpenAI', '大模型', 'LLM', 'Agent',\n        'DeepSeek', 'Claude', 'RAG', '多模态',\n        '芯片', 'GPU', 'AI', '人工智能',\n    ],\n    'invest': [\n        'IPO', '融资', '估值', '科创板', '港股',\n        '并购', '基金', '投资', 'VC', 'PE',\n        '高瓴', '红杉', 'IDG', '启明',\n    ],\n    'science': [\n        '神经科学', '生物学', '物理学', '论文',\n        'CNS', 'Nature', 'Science', 'Cell',\n        '研究', '学术',\n    ],\n    'business': [\n        '企业', '战略', '商业模式', '行业',\n        '竞争', '市场', '增长', '转型',\n    ],\n    'lifestyle': [\n        '健康', '养生', '心理', '职场', '教育',\n        '文化', '旅行', '读书',\n    ],\n    'media': [\n        '新闻', '媒体', '评论', '热点',\n    ],\n    'politics': [\n        '中美', '国际', '地缘', '政策',\n    ],\n}\n\ndef classify_article(title, desc):\n    text = f\"{title} {desc}\".lower()\n    tags = []\n    for cat, keywords in CATEGORY_KEYWORDS.items():\n        for kw in keywords:\n            if kw.lower() in text:\n                tags.append(cat)\n                break\n    return tags or ['other']\n```\n\n## 分类统计\n\n从 32,315 篇文章中：\n\n| 分类 | 数量 | 占比 |\n|------|------|------|\n| 生物医药 | 11,431 | 35.3% |\n| 其他 | 8,912 | 27.6% |\n| 商业/企业 | 2,837 | 8.8% |\n| 科学/研究 | 2,565 | 7.9% |\n| 投资/金融 | 2,483 | 7.7% |\n| AI/科技 | 1,549 | 4.8% |\n| 生活/健康 | 1,214 | 3.8% |\n| 媒体/内容 | 688 | 2.1% |\n| 政治/政策 | 402 | 1.2% |\n\n## 年度趋势\n\n收藏高峰：2019年（6,558篇）、2023年（6,145篇）\n\n生物医药占比逐年上升：2017年 5.6% → 2023年 44.8%\n\nFile v1.0.0:references/schema.md\n\n# favorite.db 数据库结构\n\n## 表：fav_db_item\n\n存储所有收藏记录。\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| local_id | INTEGER | 主键，收藏记录ID |\n| fav_local_type | INTEGER | 收藏类型 |\n| status | INTEGER | 状态标记 |\n| create_time | INTEGER | 收藏时间（Unix时间戳） |\n| source_id | TEXT | 来源用户/公众号 wxid |\n| source_type | INTEGER | 来源类型 |\n| content | BLOB | 收藏内容（XML格式，可能压缩） |\n| WCDB_CT_content | INTEGER | 压缩类型（4=zstd） |\n\n## fav_local_type 类型值\n\n| 值 | 类型 |\n|----|------|\n| 1 | 文章/链接 |\n| 2 | 图片 |\n| 3 | 视频 |\n| 4 | 文件 |\n| 5 | 语音 |\n| 6 | 位置 |\n| 7 | 名片 |\n| 8 | 文本笔记 |\n\n## content XML 结构\n\n文章类型（fav_local_type=1）的 content 示例：\n\n```xml\n<favitem>\n  <type>1</type>\n  <title>文章标题</title>\n  <desc>文章摘要</desc>\n  <url>https://mp.weixin.qq.com/s/xxx</url>\n  <source>公众号名称</source>\n  <sourcetype>9</sourcetype>\n  <thumburl>封面图URL</thumburl>\n</favitem>\n```\n\n## 解析代码\n\n```python\nimport xml.etree.ElementTree as ET\n\ndef parse_favorite_content(content_bytes, ct):\n    # 解压 zstd\n    if ct == 4:\n        import zstandard as zstd\n        content = zstd.ZstdDecompressor().decompress(content_bytes)\n    else:\n        content = content_bytes\n    \n    root = ET.fromstring(content)\n    return {\n        'type': root.findtext('type'),\n        'title': root.findtext('title', ''),\n        'desc': root.findtext('desc', ''),\n        'url': root.findtext('url', ''),\n        'source': root.findtext('source', ''),\n    }\n```\n\n## 相关表\n\n- `favorite_fts.db` — 全文搜索索引（SQLite FTS）","readmeExcerpt":"Skill: 微信收藏知识库 Owner: geosun Summary: 微信收藏夹导出、智能分类与知识库管理。支持从解析后的 favorite.db 导出收藏记录、自动归纳分类（从用户内容发现自然类别）、LLM 智能增强（可选）、批量导入 IMA 知识库（可选）、多平台导出（Obsidian/Notion，可选）、增量分类。核心功能支持离线使用，网络功能默认关闭。 Tags: latest:1.2.0 Version history: v1.2.0 | 2026-06-07T04:32:59.002Z | user **Summary: Adds auto-discovery and multi-platform export features.** - New: Automatic category discovery from user content via LLM, breaking free from fixed ","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"pip install pycryptodome zstandard"},{"language":"bash","snippet":"export LLM_API_KEY=\"your-openrouter-api-key\"\nexport LLM_API_URL=\"https://openrouter.ai/api/v1/chat/completions\"\nexport LLM_MODEL=\"deepseek/deepseek-chat\""},{"language":"bash","snippet":"export LLM_API_URL=\"http://localhost:11434/v1/chat/completions\"\nexport LLM_MODEL=\"qwen2.5:14b\""},{"language":"bash","snippet":"export NOTION_API_TOKEN=\"secret_xxx\""},{"language":"bash","snippet":"cd scripts\n\n# 1. 导出收藏记录\npython export_favorites.py\n\n# 2. 自动发现分类体系\npython auto_discover.py\n\n# 3. 使用自定义分类\npython classify_favorites.py --categories user_categories.json\n\n# 4. 导入 IMA（可选）\npython import_ima.py"},{"language":"bash","snippet":"cd scripts\n\n# 1. 导出收藏记录\npython export_favorites.py\n\n# 2. 使用默认分类\npython classify_favorites.py\n\n# 3. 导入 IMA（可选）\npython import_ima.py"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: wechat-favorites\ndescription: 微信收藏夹导出、智能分类与知识库管理。支持从解析后的 favorite.db 导出收藏记录、自动归纳分类（从用户内容发现自然类别）、LLM 智能增强（可选）、批量导入 IMA 知识库（可选）、多平台导出（Obsidian/Notion，可选）、增量分类。核心功能支持离线使用，网络功能默认关闭。\nmetadata:\n  version: 1.2.0\n  display_name: 微信收藏知识库\n---\n\n# 微信收藏知识库\n\nDecrypt, categorize and organize wechat favorites (Official Account collection) into knowledge base\n\n收藏夹导出 · 智能分类 · 知识库导入 · 多平台导出\n\n**快速上手：** 解析收藏夹 → 导出记录 → 自动归纳类别 → 智能分类 → 导出到 Obsidian/Notion 或导入 IMA\n\n> 💡 **试试这样说：** \"帮我整理微信收藏\" / \"导出收藏夹并自动归纳分类\" / \"从我的收藏中发现自然类别\" / \"把微信收藏导入知识库\"\n\n---\n\n**触发词：** 微信收藏（WeChat Favorites）、收藏夹导出（favorites export）、收藏文章分类（favorites classification）、自动归纳分类（auto-discover categories）、IMA 知识库导入（knowledge base import）、Obsidian 导出（Obsidian export）、Notion 导出（Notion export）、收藏整理（favorites organizer）\n\n---\n\n## 新增功能\n\n> 完整更新日志见 [CHANGELOG.md](CHANGELOG.md)\n\n- **自动归纳分类** — 从收藏内容中 LLM 发现自然类别，不再受限于固定 9 大类\n- **Obsidian / Notion 导出** — Markdown 按年月归档+增量同步 / 批量导入 Notion 数据库\n- **LLM 增量分类** — 新增收藏无需全量重跑，支持结果合并与标签标准化\n- **自定义分类** — classify_favorites.py 新增 `--categories` 参数，支持自定义分类 JSON\n\n---\n\n## 为什么用这个工具？\n\n微信收藏夹积累了大量文章：随手打的标签越来越复杂，待读越积越多，从来没有真正整理过，也不记得读了哪些、学到了什么。这个工具可以：\n\n- **自动归纳** — 从你的收藏中发现自然类别，不再受限于固定分类\n- **关键词匹配** — 快速扫描全部收藏，按关键词归类\n- **LLM 增强** — 低置信度条目用大模型智能重判（可选）\n- **知识库导入** — 一键导入 IMA，构建个人知识库（可选）\n- **多平台导出** — 导出为 Markdown 到 Obsidian，或批量导入 Notion 数据库（可选）\n- **增量分类** — 新增收藏无需全量重跑，LLM 增量分类 + 结果合并\n\n---\n\n## 核心能力\n\n| 能力 | 说明 |\n|------|------|\n| **收藏导出** | 从解析后的 `favorite.db` 导出全部收藏记录为 CSV |\n| **自动归纳** | 从用户收藏内容自动发现分类体系（v1.2 新增） |\n| **关键词分类** | 默认 9 大类（生物医药/AI/投资等），或使用自定义分类 |\n| **标签增强** | 二级标签 57 个 + 跨领域标签 6 类（仅默认分类） |\n| **LLM 增强（可选）** | 置信度低时自动调用 LLM 二次分类，需配置 API Key |\n| **IMA导入（可选）** | 批量导入到 IMA 知识库，需配置凭证 |\n| **Notion 导出（可选）** | 导出收藏到 Notion 数据库，需配置 API Token（v1.2 新增） |\n| **Obsidian 导出（可选）** | 导出收藏为 Markdown 文件到 Obsidian vault（v1.2 新增） |\n| **报告生成** | 分类统计、各分类 CSV 导出 |\n\n---\n\n## 前置条件\n\n### 1. 微信收藏数据库\n\n本工具需要已解析的 `favorite.db` 文件。解析步骤请使用专门的微信数据库处理工具。\n\n### 2. Python 环境\n\n```bash\npip install pycryptodome zstandard\n```\n\n### 3. LLM 配置（自动归纳需要）\n\n自动归纳功能需要调用 LLM API：\n\n```bash\nexport LLM_API_KEY=\"your-openrouter-api-key\"\nexport LLM_API_URL=\"https://openrouter.ai/api/v1/chat/completions\"\nexport LLM_MODEL=\"deepseek/deepseek-chat\"\n```\n\n或使用本地模型：\n\n```bash\nexport LLM_API_URL=\"http://localhost:11434/v1/chat/completions\"\nexport LLM_MODEL=\"qwen2.5:14b\"\n```\n\n### 4. IMA 导入（可选）\n\n如需导入 IMA 知识库，配置凭证：`~/.config/ima/client_id` 和 `~/.config/ima/api_key`\n\n### 5. Notion 导出（可选）\n\n如需导出到 Notion，配置 API Token：\n\n```bash\nexport NOTION_API_TOKEN=\"secret_xxx\"\n```\n\n### 6. Obsidian 导出（可选）\n\n无需额外配置，直接指定 vault 路径即可。\n\n---\n\n## 快速开始\n\n### 方式一：自动归纳分类（推荐）\n\n```bash\ncd scripts\n\n# 1. 导出收藏记录\npython export_favorites.py\n\n# 2. 自动发现分类体系\npython auto_discover.py\n\n# 3. 使用自定义分类\npython classify_favorites.py --categories user_categories.json\n\n# 4. 导入 IMA（可选）\npython import_ima.py\n```\n\n### 方式二：使用默认 9 大类\n\n```bash\ncd scripts\n\n# 1. 导出收藏记录\npython export_favorites.py\n\n# 2. 使用默认分类\npython classify_favorites.py\n\n# 3. 导入 IMA（可选）\npython import_ima.py\n```\n\n### 方式三：导出到 Notion / "},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7fh7azcgp5wwsg434v6km1x5858t33\",\n  \"slug\": \"wechat-favorites\",\n  \"version\": \"1.2.0\",\n  \"publishedAt\": 1780806779002\n}"},{"path":"references/classification.md","content":"# 收藏分类算法 v1.2.0\n\n## 分类流程\n\n```\nfavorites_all.csv\n      │\n      ▼ 关键词多标签分类（一级）\n  categories 列（中文标签，管道分隔）\n  confidence 列（0~0.5）\n      │\n      ▼ 二级分类（基于正则匹配）\n  subcategory 列（管道分隔，可多个）\n      │\n      ▼ 跨领域标签（主分类 + 跨领域关键词）\n  cross_domain 列（管道分隔，可多个）\n      │\n      ▼ [可选] LLM 二次分类（confidence < threshold）\n  更新 categories, subcategory, cross_domain\n  追加 _llm_reason, _llm_confidence 列\n      │\n      ▼ [可选] 标签标准化\n  category 列（标准英文 key）\n```\n\n## 第一步：关键词多标签分类（一级）\n\n每篇文章可同时归属多个分类。\n\n```python\nCATEGORIES = {\n    \"生物医药\": [\"创新药\", \"ADC\", \"CAR-T\", \"mRNA\", ...],\n    \"AI科技\":   [\"GPT\", \"大模型\", \"LLM\", \"Agent\", ...],\n    \"投资金融\": [\"IPO\", \"融资\", \"估值\", \"科创板\", ...],\n    \"科学研究\": [\"Nature\", \"Science\", \"论文\", ...],\n    \"商业财经\": [\"企业\", \"战略\", \"行业\", ...],\n    \"生活方式\": [\"健康\", \"运动\", \"旅行\", ...],\n    \"媒体资讯\": [\"新闻\", \"热点\", \"评论\", ...],\n    \"政治国际\": [\"国际\", \"外交\", \"地缘\", ...],\n}\n```\n\n置信度规则：\n- 0 = 未命中任何关键词\n- 0.3 = 命中单个分类\n- 0.5 = 命中多个分类（多标签反而更难判断主次）\n\n## 第二步：二级分类\n\n基于一级分类结果，对每个命中的一级分类用正则匹配二级标签。\n\n```python\nSUBCATEGORIES = {\n    \"生物医药\": {\n        \"临床\": r\"临床|IND|NDA|CDE|FDA|NMPA|III期|II期|I期|获批|批准\",\n        \"神经\": r\"阿尔茨海默|帕金森|神经|脑科学|抑郁|...\",\n        \"创新药\": r\"创新药|新药|first-in-class|best-in-class\",\n        # ... 14 个二级标签\n    },\n    \"AI科技\": {\n        \"AI应用\": r\"AI应用|AI\\+|赋能|落地|智能化|用AI|...\",\n        \"大模型/LLM\": r\"大模型|LLM|GPT|Claude|Gemini|...\",\n        # ... 9 个二级标签\n    },\n    # ... 共 6 个一级分类有二级标签\n}\n```\n\n特点：\n- 一篇文章可命中多个二级标签（如 \"ADC+肿瘤+临床\"）\n- 不是所有文章都有二级标签（泛泛讨论只保留一级）\n- 每个一级分类下二级标签互不排斥\n\n覆盖率（实测）：\n- 生物医药: 47.0%\n- 商业财经: 44.2%\n- 投资金融: 43.8%\n- AI科技: 29.1%\n- 科学研究: 27.9%\n- 生活方式: 20.9%\n\n## 第三步：跨领域标签\n\n检测文章是否同时涉及两个领域。\n\n```python\nCROSS_DOMAIN_RULES = [\n    # (标签, 主分类, 跨领域关键词正则)\n    (\"生物医药+投资\", \"生物医药\", r\"融资|估值|IPO|上市|投资|...\"),\n    (\"AI+医疗\",       \"AI科技\",   r\"医疗|药|临床|诊断|医院|...\"),\n    (\"AI+投资\",       \"AI科技\",   r\"融资|估值|IPO|上市|投资|...\"),\n    (\"生物医药+AI\",   \"生物医药\", r\"AI|人工智能|机器学习|计算|...\"),\n    (\"科学+政策\",     \"科学研究\", r\"政策|监管|伦理|法规|...\"),\n    (\"商业+政治\",     \"商业财经\", r\"制裁|贸易战|关税|地缘|...\"),\n]\n```\n\n逻辑：先确定文章的主分类，再检查是否含跨领域关键词。\n一篇文章可有多个跨领域标签。\n\n分布（实测 32333 篇）：\n- 生物医药+投资: 2974\n- AI+医疗: 546\n- AI+投资: 339\n- 生物医药+AI: 203\n- 商业+政治: 68\n- 科学+政策: 19\n\n## 第四步：LLM 二次分类\n\n对关键词分类置信度不足（默认 < 0.4）的条目，用大模型进行智能重判。\n\n### Prompt 结构\n\n```\n文章标题：{title}\n来源公众号：{source}\n文章链接：{url}\n\n一级分类（可多选）：\n生物医药、AI科技、投资金融、科学研究、商业财经、生活方式、媒体资讯、政治国际\n\n二级分类（选填，根据一级分类选对应的子标签）：\n- 生物医药：临床、神经、创新药、肿瘤、...\n- AI科技：AI应用、大模型/LLM、AI医疗、...\n- ...\n\n跨领域标签（选填，文章同时涉及两个领域时标注）：\n生物医药+投资、AI+医疗、AI+投资、生物医药+AI、科学+政策、商业+政治\n\n输出 JSON：{\"tags\": [...], \"subcategories\": [...], \"cross_domain\": [...], \"reason\": \"...\", \"confidence\": 0~1}\n```\n\n### LLM 结果解析\n\n1. 提取 JSON（支持 ```json 代码块包裹）\n2. 过滤无效一级标签（只保留 8 个标准分类）\n3. 过滤无效二级标签（只保留 SUBCATEGORY_TAGS 中定义的）\n4. 过滤无效跨领域标签（只保留 CROSS_DOMAIN_TAGS 中定义的）\n5. confidence >= 0.5 时采纳，否则保留原分类\n\n### 增量处理\n\n对于大量 other 条目（>1000），推荐增量模式：\n- `llm_incremental.py`：每批 50 条，并发 20，每 5 分钟保存检查点\n- 中断后重新运行自动续传\n- 合并：`merge_llm_results.py` 将检查点结果写回 CSV\n\n## 第五步：标签标准化\n\nLLM 和关键词可能输出不同格式的标签，标准化映射：\n\n| 标准分类 | 英文 key | 接受的输入格式 |\n|---------|----------|--------------|\n| 生物医药 | `biomed` | 生物医药, biomed |\n| AI科技 | `ai` | AI科技, ai, tech |\n"},{"path":"references/schema.md","content":"# favorite.db 数据库结构\n\n## 表：fav_db_item\n\n存储所有收藏记录。\n\n| 字段 | 类型 | 说明 |\n|------|------|------|\n| local_id | INTEGER | 主键，收藏记录ID |\n| fav_local_type | INTEGER | 收藏类型 |\n| status | INTEGER | 状态标记 |\n| create_time | INTEGER | 收藏时间（Unix时间戳） |\n| source_id | TEXT | 来源用户/公众号 wxid |\n| source_type | INTEGER | 来源类型 |\n| content | BLOB | 收藏内容（XML格式，可能压缩） |\n| WCDB_CT_content | INTEGER | 压缩类型（4=zstd） |\n\n## fav_local_type 类型值\n\n| 值 | 类型 |\n|----|------|\n| 1 | 文章/链接 |\n| 2 | 图片 |\n| 3 | 视频 |\n| 4 | 文件 |\n| 5 | 语音 |\n| 6 | 位置 |\n| 7 | 名片 |\n| 8 | 文本笔记 |\n\n## content XML 结构\n\n文章类型（fav_local_type=1）的 content 示例：\n\n```xml\n<favitem>\n  <type>1</type>\n  <title>文章标题</title>\n  <desc>文章摘要</desc>\n  <url>https://mp.weixin.qq.com/s/xxx</url>\n  <source>公众号名称</source>\n  <sourcetype>9</sourcetype>\n  <thumburl>封面图URL</thumburl>\n</favitem>\n```\n\n## 解析代码\n\n```python\nimport xml.etree.ElementTree as ET\n\ndef parse_favorite_content(content_bytes, ct):\n    # 解压 zstd\n    if ct == 4:\n        import zstandard as zstd\n        content = zstd.ZstdDecompressor().decompress(content_bytes)\n    else:\n        content = content_bytes\n    \n    root = ET.fromstring(content)\n    return {\n        'type': root.findtext('type'),\n        'title': root.findtext('title', ''),\n        'desc': root.findtext('desc', ''),\n        'url': root.findtext('url', ''),\n        'source': root.findtext('source', ''),\n    }\n```\n\n## 相关表\n\n- `favorite_fts.db` — 全文搜索索引（SQLite FTS）"},{"path":"CHANGELOG.md","content":"# 更新日志\n\n## v1.2.0 — 2026-06-07\n\n### 1. 智能分类体系升级\n\n**自动归纳分类（auto_discover.py）**\n\n不再局限于固定的 9 大类，而是从**你的收藏内容**中自动发现自然分类：\n\n```bash\n# 第一步：自动发现分类体系\npython auto_discover.py\n\n# 输出：user_categories.json（根据你的收藏内容归纳出 8-15 个类别）\n\n# 第二步：使用自定义分类对全部收藏分类\npython classify_favorites.py --categories user_categories.json\n```\n\n**工作原理：**\n1. 随机采样 500 条标题（可调）\n2. 发送给 LLM 分析，请求归纳 8-15 个自然分类\n3. LLM 返回：类别名 + 描述 + 10-20 个关键词\n4. 保存为 `user_categories.json`\n\n**三种分类方式对比：**\n\n| 方式 | 类别来源 | 适用场景 |\n|------|---------|---------|\n| 默认（固定 9 类） | 预定义的生物医药、AI、投资等 | 内容聚焦投资/科技/医疗领域 |\n| 自动归纳 | 从用户收藏中 LLM 发现 | 内容多元、预定义类别不匹配 |\n| 自定义 JSON | 用户手动编辑 | 有明确分类需求 |\n\n**LLM 分类增强工具：**\n\n| 脚本 | 功能 |\n|------|------|\n| `llm_incremental.py` | 对新增收藏执行 LLM 分类，无需全量重跑 |\n| `merge_llm_results.py` | 合并多次 LLM 分类结果，避免重复处理 |\n| `normalize_categories.py` | 统一不同来源的分类标签为标准格式 |\n\n**classify_favorites.py 增强：**\n- 新增 `--categories` 参数，支持自定义分类 JSON\n- 支持动态标签匹配（配合 auto_discover.py 输出）\n\n---\n\n### 2. 多平台导出\n\n**Obsidian 导出（export_to_obsidian.py）**\n\n将收藏导出为 Markdown 文件到 Obsidian vault：\n\n```bash\npython export_to_obsidian.py --input articles_final.csv --vault \"D:\\Obsidian\\MyVault\"\n```\n\n- 按 `年/月/` 目录结构自动归档\n- YAML frontmatter：title、url、category、tags、author、nickname、created、imported\n- 增量同步：已存在的文件自动跳过\n- 支持 `--limit` 限制数量、`--dry-run` 预览\n\n**Notion 导出（export_to_notion.py）**\n\n将收藏批量导入 Notion 数据库：\n\n```bash\npython export_to_notion.py --input articles_final.csv --database-id YOUR_DB_ID\n```\n\n需配置环境变量：`NOTION_API_TOKEN=\"secret_xxx\"`\n\n---\n\n### 3. 文档与安全优化\n\n- SKILL.md 全面完善：补充分类逻辑说明、LLM 使用指南、实测数据、文件格式说明\n- 快速上手简化：精简配置示例、优化命令说明、增强引导提示、补充常用触发词\n- 安全说明强化：新增 ## 安全说明章节，强调本地化、隐私保护与数据安全\n- 新建 CHANGELOG.md：版本更新细节独立存放，SKILL.md 保持精简\n\n---\n\n## v1.1.4 — 2026-04-26\n\n- 安全审核修复：SAFE_MODE 离线模式，核心功能默认关闭网络\n- 中英双语文档完善\n- 安全说明强化：新增 ## 安全说明章节，强调本地化、隐私保护与数据安全\n\n---\n\n## v1.1 — 2026-04\n\n- 分类体系升级：新增三级分类体系——9大主类、57个二级标签、6个跨领域标签，分类更精细多元\n- 文档全面优化：完善 SKILL.md，补充分类逻辑说明、LLM 使用指南、实测数据、文件格式说明\n- 快速上手简化：精简配置示例、优化命令说明、增强引导提示、补充常用触发词，方便快速上手\n- LLM 智能增强（可选）：新增 LLM 辅助分类脚本（llm_classify.py、llm_incremental.py、merge_llm_results.py、normalize_categories.py），低置信度或模糊条目可交由大模型重新分类\n- 安全说明强化：新增## 安全说明章节，强调本地化、隐私保护与数据安全\n- 版本升级：1.1.0 → 1.1，新显示名（微信收藏知识库）"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1565,"uniquenessScore":35,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T20:28:16.506Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T20:28:16.506Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T22:49:41.429Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}