
1. 项目概述为什么B站收藏夹需要一个“AI分拣台”你有没有过这样的经历刷B站时看到一个讲“如何用Obsidian搭建知识库”的视频标题抓人、封面亮眼立刻点下收藏——然后它就永远躺在“未分类”里再也没被打开过。我统计过自己三年来的B站收藏数据平均每月新增237个视频其中82%在收藏后72小时内未播放91%从未被二次访问。这不是懒是信息过载下的理性放弃。B站收藏夹本质是个“数字待办清单”但它的分类逻辑停留在2013年只有手动新建文件夹、拖拽归类、靠记忆找内容。而今天一个讲“PyTorch梯度裁剪”的视频可能同时包含“深度学习基础”“工程调试技巧”“面试高频题”三重价值一段“东京地铁实拍”的Vlog字幕里藏着“日语敬语用法”“关东地区方言”“城市空间设计”多个信息维度。传统收藏夹像用纸箱装散装螺丝——能存但找一颗特定型号得倒空整个箱子。这个项目要解决的就是把“被动收纳”变成“主动理解”。核心不是做另一个收藏管理工具而是给每个视频加一层“AI认知层”自动读取视频标题、简介、弹幕高频词、尤其是完整字幕文本这是B站独有的高价值信息富矿用轻量级本地模型提取关键词、识别主题、打多维标签、生成摘要并同步到你的Obsidian知识库。它不替代B站原生功能而是在你点击“收藏”按钮的瞬间后台悄悄完成一次微型知识萃取——就像给每本书自动贴上ISBN豆瓣评分读书笔记摘要的复合书签。技术栈非常克制Chrome扩展负责网页端触发与字幕抓取Python后端做NLP处理不用大模型API避免隐私外泄和调用成本最终结构化数据写入Obsidian的Markdown笔记。整个流程在本地完成你的视频列表、字幕原文、标签关系全部留在自己电脑里。我试过用它处理500个编程类收藏原来需要3小时人工归类的工作现在27秒自动生成带超链接的索引页且准确率比我自己分类高23%——因为AI不会疲劳不会跳过“标题平淡但内容硬核”的视频。2. 整体架构设计为什么选择“轻量本地AI”而非云端大模型2.1 核心思路在隐私、速度、精度之间找平衡点很多人第一反应是“直接调用ChatGPT API分析字幕”这看似简单但实际踩过三个深坑第一B站字幕动辄上万字单次API调用成本高达0.8元500个视频就是400元且需翻倍预留失败重试费用第二字幕含大量口语冗余“呃”“啊”“那个”、时间戳标记[00:12:34]、弹幕干扰词“前方高能”“已三连”大模型容易被噪声带偏第三也是最关键的——你的收藏夹是私人知识资产把“考研政治押题视频”“心理咨询技巧”这类内容上传到第三方服务器风险远高于收益。所以本方案彻底放弃云端推理采用“前端采集本地轻量模型结构化输出”三段式架构Chrome扩展层仅做三件事——监听收藏按钮点击事件、从B站网页DOM中提取字幕JSONB站字幕接口公开且稳定、将原始字幕文本打包发送至本地服务。不触碰用户登录态不读取非目标页面数据权限声明严格限定为activeTab, storage, https://www.bilibili.com/*。本地Python服务层核心是定制化的NLP流水线。我们不用BERT或LLaMA这类重型模型而是组合使用spaCy做基础分词与词性标注针对中文优化版zh_core_web_smTextRank算法提取关键词比TF-IDF更适应长文本规则引擎过滤字幕噪声如自动删除所有[数字:数字:数字]时间戳、合并连续重复弹幕最后用Sentence-BERT微调版计算语义相似度对同类视频自动聚类。模型体积控制在12MB以内启动耗时1.8秒处理10分钟字幕平均耗时3.2秒实测i5-10210U笔记本。Obsidian同步层生成标准YAML Front Matter的Markdown笔记字段包括title视频标题、bvidB站唯一ID、tagsAI生成的3-5个主题标签、summary120字内摘要、timestamp收藏时间、source_url原始链接。特别设计了obsidian_link字段值为[[B站收藏-AI分拣/2024-06-15-机器学习基础]]确保在Obsidian中点击即可跳转。所有笔记按日期自动归档到B站收藏-AI分拣/年/月/目录下避免笔记爆炸式增长。这个设计的底层逻辑很务实把AI当作一个永不疲倦的图书管理员而不是一个需要供养的算命先生。它不生成新内容只做信息提纯不连接网络只读取本地字幕不替代你的判断只提供可验证的线索。比如AI给一个“Python装饰器详解”视频打标[Python, 编程范式, 面试考点]你一眼就能验证是否合理——如果错标成[Web开发, 数据库]说明模型需要调整而不是盲目信任。2.2 为什么必须深度依赖字幕B站独有的信息金矿B站字幕的价值被严重低估。主流视频平台中只有B站强制要求UP主上传字幕尤其教育、科技类UP主且字幕质量普遍高于YouTube自动生成字幕。更重要的是B站字幕是结构化文本每段字幕自带精确时间戳、说话人标识部分UP主会标注“讲师”“学生提问”、甚至分段逻辑如“【定义】”“【案例】”“【对比】”。这比单纯分析标题或简介高两个数量级的信息密度。举个真实案例一个标题为“Windows蓝屏代码0x0000007E”的视频简介只写“教你排查蓝屏”但字幕里详细记录了[00:02:15] 讲师“这个错误本质是内存访问违规重点看driver_name字段...”[00:05:33] 学生提问“如果驱动名显示为dxgkrnl.sys呢”[00:07:21] 讲师“那是显卡驱动问题建议回滚到2023年11月版本...”AI通过分析这段字幕能精准提取出[Windows故障排查, 驱动程序, 显卡驱动回滚]三个标签并生成摘要“解析0x0000007E蓝屏代码指出dxgkrnl.sys驱动异常是常见原因提供具体回滚操作步骤”。而仅靠标题和简介AI大概率只会打标[Windows, 蓝屏]这种泛泛而谈的标签。我们测试过100个技术类视频仅用标题简介的标签准确率是61%加入字幕后提升至89%。这印证了一个关键结论在B站场景下字幕不是辅助信息而是核心内容载体。因此本项目的字幕抓取模块做了三重保障第一优先调用B站官方字幕接口/x/v2/dm/view?oid{aid}返回JSON格式第二当接口失效时降级解析网页内嵌的script标签中的字幕数据第三对无字幕视频自动启用Whisper.cpp本地语音转文字CPU模式10分钟视频耗时约4分20秒确保零遗漏。2.3 Obsidian作为终点站不是为了炫技而是构建可演进的知识图谱选择Obsidian而非Notion或语雀根本原因在于它的双向链接和插件生态。当你收藏100个“机器学习”相关视频AI生成的笔记天然带有#机器学习标签Obsidian的“标签云”视图会自动聚合所有相关内容更关键的是AI在摘要中会主动插入上下文链接例如在“梯度下降优化”视频笔记中写“参见[[B站收藏-AI分拣/2024-03-12-损失函数可视化]]中的收敛曲线对比”。这种基于语义的自动关联是中心化笔记软件无法实现的。我们刻意避开了Obsidian的“社区插件”依赖所有同步逻辑用原生API实现。核心是利用Obsidian的vault文件系统特性每个笔记都是独立.md文件YAML Front Matter是标准格式。Python服务只需向指定目录写入文件Obsidian实时监听并渲染。这样做的好处是极致稳定——即使Obsidian崩溃或更新失败你的AI分拣数据依然安全存在随时可用其他编辑器打开。实测中单次同步50个视频笔记Obsidian响应延迟0.3秒完全无卡顿。而如果采用插件方案每次B站更新DOM结构都可能导致插件失效维护成本指数级上升。我的经验是工具链越短长期可用性越高。一个能稳定运行五年的本地脚本远胜于需要每月适配新版的花哨插件。3. 核心细节实现从字幕抓取到标签生成的全链路拆解3.1 Chrome扩展如何安全、稳定地获取B站字幕扩展的核心文件是content.js它注入到B站每个视频页。关键代码逻辑如下// 监听收藏按钮点击B站DOM结构会变所以用MutationObserver动态捕获 const observer new MutationObserver((mutations) { mutations.forEach((mutation) { mutation.addedNodes.forEach((node) { if (node.nodeType 1 node.classList.contains(like-btn)) { // B站收藏按钮class名常变这里用更稳定的属性定位 const likeBtn document.querySelector(button[data-balloon稍后再看]); if (likeBtn !likeBtn.hasAttribute(ai-processed)) { likeBtn.setAttribute(ai-processed, true); likeBtn.addEventListener(click, handleCollect); } } }); }); }); // 字幕获取函数优先调用官方API失败则降级 async function fetchSubtitle(aid, cid) { try { // 方案1B站字幕API最稳定 const apiRes await fetch(https://api.bilibili.com/x/v2/dm/view?oid${cid}pid${aid}, { headers: { Referer: https://www.bilibili.com/ } }); const data await apiRes.json(); if (data.code 0 data.data?.body?.length) { return data.data.body.map(item item.content).join(\n); } } catch (e) { console.warn(API字幕获取失败尝试降级方案); } // 方案2解析网页内嵌字幕B站有时会把字幕塞进script const scriptTags document.querySelectorAll(script); for (let script of scriptTags) { if (script.textContent.includes(subtitle) script.textContent.includes(content)) { try { const match script.textContent.match(/subtitle:\s*({[\s\S]*?})\s*,/); if (match) { const subData JSON.parse(match[1]); return subData.body.map(item item.content).join(\n); } } catch (e) { /* 忽略解析错误 */ } } } // 方案3返回空字符串触发Whisper本地转录由Python服务处理 return ; }这里有几个实战要点必须强调第一B站反爬机制会检测请求头Referer必须设为https://www.bilibili.com/否则返回403第二cid弹幕池ID和aid稿件ID需从网页URL或window.__INITIAL_STATE__全局变量中提取我们采用后者因为URL参数可能被UP主修改第三绝不使用XPath硬编码定位因为B站每周都可能改DOM结构而是用CSS class名属性组合如[data-balloon稍后再看]这种语义化选择器容错率更高。我曾因XPath失效导致扩展瘫痪3天教训深刻稳定性的代价就是多写20行健壮性代码。3.2 字幕预处理清除噪声、保留语义的黄金法则原始字幕充满干扰信息直接喂给NLP模型会导致标签漂移。我们的预处理流水线分四步时间戳清洗正则表达式/\[\d{2}:\d{2}:\d{2}\]/g匹配所有[00:12:34]格式替换为空格。注意保留换行符因为换行本身携带语义如UP主停顿、听众提问间隔。弹幕过滤B站字幕常混入高亮弹幕如【前方高能】、【已三连】。我们建立弹幕特征词库含137个高频弹幕模板用String.includes()快速过滤。特别处理【】符号——它在B站字幕中既是弹幕标记也是UP主强调语法如【重点】所以只过滤【开头且结尾为】且中间含“高能”“三连”“前方”等词的片段。口语冗余压缩中文口语中“然后”“就是”“那个”出现频率极高但对主题识别无贡献。我们用spaCy的词性标注结果删除PART助词、INTJ感叹词、CCONJ连词中高频冗余词但保留ADV副词如“非常”“极其”因为它们修饰程度影响语义权重。语义分段将清洗后字幕按/。|||/g切分为句子再用TextRank算法计算每句重要性得分。阈值设为0.15只保留得分前30%的句子作为NLP输入。实测表明10分钟视频字幕经此处理文本量减少62%但关键词召回率提升18%——因为模型不再被“嗯...大家好我是XXX”这类开场白污染。这个过程看似简单却是整个项目准确率的基石。我对比过未清洗和清洗后的效果一个讲“React Hooks原理”的视频未清洗时AI打标[React, 前端, JavaScript, 嗯, 然后]清洗后变为[React Hooks, 闭包原理, 状态管理, useEffect执行时机]。差别不在技术而在对B站内容生态的理解深度。3.3 标签生成轻量模型如何做到专业级分类我们放弃通用大模型定制了一套三层标签体系一级标签领域用预训练的zh-classifier模型基于FastText12MB输入清洗后字幕输出概率最高的3个领域如[编程, 数学, 硬件]。该模型在B站TOP1000教育类视频上微调准确率92.3%。二级标签技能点对一级标签对应领域加载专用词典。例如当一级标签为编程则激活programming_skills.csv词典含2147个技能术语用Jaccard相似度匹配字幕中出现的术语。如字幕含“useCallback”“闭包”“内存泄漏”则匹配[React性能优化, JavaScript闭包, 前端内存管理]。三级标签场景基于规则引擎。扫描字幕中的动词短语如“安装”“配置”“调试”“部署”对应[环境搭建, 系统运维, 故障排查, 生产发布]。特别设计了“考试场景”识别当字幕同时出现“考研”“真题”“押题”“30天”等词自动添加#应试技巧标签。所有标签最终经去重、长度过滤剔除单字标签如“C”“P”、同义词合并“Python”和“py”统一为“Python”后生成3-5个高信息量标签。关键创新在于标签权重计算每个标签附带置信度分数0.0-1.0公式为score (term_frequency * 0.4) (semantic_similarity * 0.3) (context_coherence * 0.3)。例如“梯度下降”在字幕中出现3次频次0.4与“优化算法”语义相似度0.850.255且前后句均围绕“收敛速度”“学习率”展开连贯性0.90.27总分0.925稳居第一标签。这种量化机制让用户一眼看出AI判断依据而非黑盒输出。3.4 Obsidian同步让AI输出真正融入你的知识工作流同步逻辑封装在Python脚本sync_to_obsidian.py中核心是构建符合Obsidian规范的Markdown文件def create_obsidian_note(video_data, vault_path): # 生成唯一文件名BVID 收藏日期 filename f{video_data[bvid]}-{datetime.now().strftime(%Y-%m-%d)}.md filepath os.path.join(vault_path, B站收藏-AI分拣, datetime.now().strftime(%Y), datetime.now().strftime(%m), filename) # 创建YAML Front Matter front_matter f--- title: {video_data[title]} bvid: {video_data[bvid]} tags: {json.dumps(video_data[tags], ensure_asciiFalse)} summary: {video_data[summary]} timestamp: {datetime.now().isoformat()} source_url: {video_data[url]} obsidian_link: [[{video_data[title][:30]}...]] --- # 正文包含原始字幕关键片段最多5段每段不超过80字 body ## 关键内容摘录\n for i, snippet in enumerate(video_data.get(key_snippets, [])[:5]): body f {snippet}\n\n # 添加AI分析说明增强可信度 body ## AI分析说明\n body - 标签基于字幕语义分析生成置信度均0.75\n body - 摘录片段来自字幕中TextRank得分最高句\n body - 全部处理在本地完成未上传任何数据\n # 写入文件 os.makedirs(os.path.dirname(filepath), exist_okTrue) with open(filepath, w, encodingutf-8) as f: f.write(front_matter body) return filepath这里有两个设计巧思第一文件名包含BVIDB站唯一ID确保同一视频多次收藏只生成一个笔记通过检查vault_path下是否存在同BVID文件第二正文中的“关键内容摘录”不是随机截取而是调用TextRank后选取得分最高的5句话每句严格限制80字内避免信息过载。用户打开笔记3秒内就能抓住视频核心无需再看全文。更实用的是我们在Obsidian中预装了Dataview插件用一行QL查询即可生成今日AI分拣报告TABLE tags, summary, file.mtime AS 更新时间 FROM B站收藏-AI分拣 WHERE file.mtime date(today) - 1 SORT file.mtime DESC这行代码自动列出昨天所有AI处理的视频按更新时间倒序点击tags列可跳转到对应标签聚合页。这才是真正的生产力闭环——AI不是孤立功能而是无缝嵌入你现有工作流的齿轮。4. 实操全流程手把手带你部署运行4.1 环境准备5分钟完成全部依赖安装硬件要求最低配置为Intel i3-81004核 8GB内存 128GB SSD。实测在树莓派4B4GB RAM上也能运行只是Whisper转录耗时增加至12分钟/10分钟视频。软件依赖Python 3.9推荐3.10兼容性最佳Chrome浏览器版本115Obsidianv1.5免费版足够安装步骤Windows/macOS/Linux通用克隆项目仓库国内用户请用Gitee镜像加速git clone https://gitee.com/yourname/bilibili-ai-sorter.git cd bilibili-ai-sorter创建Python虚拟环境并安装依赖python -m venv venv source venv/bin/activate # macOS/Linux # venv\Scripts\activate.bat # Windows pip install -r requirements.txtrequirements.txt关键依赖spacy3.7.2 scikit-learn1.3.0 transformers4.38.2 # 仅用于Sentence-BERT不加载大模型 whispercpp-python1.2.0 # Whisper.cpp的Python绑定 watchdog3.0.0 # 文件系统监听下载并加载中文NLP模型python -m spacy download zh_core_web_sm # 下载轻量级Sentence-BERT模型仅18MB wget https://huggingface.co/sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2/resolve/main/pytorch_model.bin -O models/sbert.bin配置Obsidian vault路径在项目根目录创建config.json{ obsidian_vault: /Users/yourname/Library/Application Support/Obsidian/vaults/MyVault, whisper_model: tiny // 可选tiny/base/smalltiny最快small最准 }提示Obsidian vault路径在macOS是~/Library/Application Support/Obsidian/vaults/Windows是%APPDATA%\Obsidian\vaults\Linux是~/.config/obsidian/vaults/。务必确认路径末尾无斜杠。4.2 Chrome扩展安装绕过应用商店的合规方案B站扩展因涉及字幕抓取未上架Chrome应用商店政策限制。但安装完全合规只需三步解压扩展包项目/extension目录下有manifest.json和content.js等文件用任意压缩软件解压到本地文件夹如D:\bilibili-sorter-ext。开启开发者模式Chrome地址栏输入chrome://extensions/→ 右上角开启“开发者模式”。加载已解压的扩展点击“加载已解压的扩展程序”选择刚才解压的文件夹。此时地址栏会出现扩展图标蓝色B字母。注意首次安装后需重启Chrome使权限生效。若提示“该扩展程序未列在Chrome应用商店中”这是Chrome的安全提示点击“详细信息”→“继续启用”即可。所有权限声明均在manifest.json中明示无隐藏行为。4.3 启动本地服务让AI分拣台开始运转服务启动命令极简cd backend python main.pymain.py会自动执行启动Flask服务默认端口5000加载spaCy模型和Sentence-BERT权重监听http://localhost:5000/api/process端点启动文件监听器监控/output目录Chrome扩展将字幕JSON存于此服务启动后终端会显示✅ AI分拣服务已启动 ✅ spaCy模型加载完成zh_core_web_sm ✅ Sentence-BERT权重加载完成 ✅ Obsidian同步路径已验证/Users/yourname/.../MyVault 等待Chrome扩展发送任务...此时打开B站任意视频页点击收藏按钮你会看到终端实时打印处理日志[2024-06-15 14:22:31] 收到任务BV1xX4y1c7ZQ [2024-06-15 14:22:32] 字幕获取成功1248字 [2024-06-15 14:22:35] 预处理完成噪声清除率83% [2024-06-15 14:22:38] 标签生成[Python, 异步编程, asyncio] [2024-06-15 14:22:39] Obsidian同步完成/MyVault/B站收藏-AI分拣/2024/06/BV1xX4y1c7ZQ-2024-06-15.md整个过程平均耗时8.3秒i5-10210U且支持并发处理——即使你连续收藏10个视频服务会排队处理不会丢任务。4.4 首次使用校准让AI更懂你的知识偏好AI初始模型是通用型需用你的收藏数据微调。首次运行后执行校准脚本python calibrate.py --sample-size 50该脚本会随机选取你最近收藏的50个视频调用AI生成标签和摘要在终端逐条展示结果询问你“此标签是否准确(y/n)”对你标记为“不准确”的条目记录错误模式如“总把‘Java’错标为‘JavaScript’”自动更新calibration_rules.json添加针对性修正规则例如你反馈3次“Spring Boot”被错标为“Spring MVC”脚本会生成规则{ pattern: Spring Boot, replace_with: [Spring Boot, Java后端, 微服务框架], confidence_boost: 0.2 }后续处理中只要字幕含“Spring Boot”AI会强制提升相关标签置信度。这种渐进式校准比一次性训练更高效——你的知识结构越独特AI越精准。我用了两周时间校准AI在“考研政治”类视频的标签准确率从74%提升至96%。5. 常见问题与独家避坑指南5.1 字幕获取失败90%的问题出在这里现象根本原因解决方案终端显示字幕获取失败尝试降级方案但最终返回空UP主关闭了字幕权限或视频为旧稿2018年前无字幕扩展自动触发Whisper本地转录耐心等待CPU模式下10分钟视频约4分钟Chrome控制台报CORS errorB站API返回跨域头缺失但实际是请求头Referer未设置检查content.js中fetch请求是否包含headers: {Referer: https://www.bilibili.com/}字幕JSON解析失败报JSON.parse errorB站返回HTML错误页如404而非JSON在fetchSubtitle函数中增加HTTP状态码检查if (apiRes.status ! 200) throw new Error(API error);实操心得B站字幕接口稳定性达99.2%失败主因是UP主设置。我们内置了“字幕健康度”指标每次成功获取后计算字幕平均句长字符数/句数若15则判定为“低质量字幕”自动降低该视频标签置信度0.15。这比单纯报错更智能——毕竟一个全是“哈哈哈”的弹幕字幕确实不值得深度分析。5.2 标签不准不是模型问题是你的预期错了新手常问“为什么‘机器学习入门’视频没标‘Python’”——因为字幕里根本没提Python全程用伪代码讲解算法。AI只忠于字幕文本不脑补。正确做法是检查字幕原文在Obsidian笔记中查看“关键内容摘录”确认AI分析依据补充UP主信息在config.json中添加up_info字段如{up_id: 1234567, tags: [Python, 数据科学]}AI会将UP主标签作为权重因子手动修正并反馈在笔记末尾添加!-- AI修正#Python #Scikit-learn --校准脚本会自动学习我的血泪教训曾因追求“100%准确”反复调参结果发现87%的“不准”标签其实是UP主讲解方式导致的如用MATLAB讲机器学习字幕自然无Python。后来改为接受“AI提供线索人类做决策”的哲学效率反而提升3倍。5.3 Obsidian同步失败路径和权限的隐形杀手错误现象定位方法终极解决方案笔记生成但Obsidian不显示检查config.json中obsidian_vault路径末尾是否有斜杠/删除末尾斜杠Obsidian要求路径严格匹配笔记生成在错误目录如/vaults/而非/vaults/MyVault/运行python -c import os; print(os.path.exists(/path/to/vault))用Obsidian设置页的“打开库文件夹”功能复制真实路径同步时提示Permission deniedLinux/macOS下检查vault_path目录权限chmod -R 755 /path/to/vault避免用root运行服务注意Obsidian的“实时预览”模式下新笔记可能延迟10秒显示。强制刷新快捷键是CtrlRWindows或CmdRmacOS。别慌不是失败是Obsidian的缓存策略。5.4 性能优化让老旧笔记本也流畅运行Whisper模型选择tiny模型79MB在i3-8100上处理10分钟视频需3分10秒base模型142MB需5分20秒但准确率12%。建议新手用tiny熟悉后再切base。CPU核心绑定在main.py中添加os.sched_setaffinity(0, {0, 1})将服务绑定到前两个CPU核心避免与Chrome争抢资源。批量处理开关在config.json中设置batch_mode: true服务会累积5个任务再统一处理CPU占用峰值降低40%。实测数据一台8年前的MacBook Pro2.2GHz Intel Core i7开启batch_mode后同时收藏20个视频CPU占用率稳定在65%风扇无明显噪音。这证明合理的架构设计比堆硬件更重要。6. 进阶玩法让AI分拣台成为你的第二大脑6.1 构建个人知识图谱用Dataview自动生成学习路线图在Obsidian中创建B站学习路线图.md插入以下Dataview代码TABLE WITHOUT ID file.link AS 视频, choice(contains(tags, Python), , ) choice(contains(tags, 机器学习), , ) choice(contains(tags, 考研), , ) AS 类型, summary AS 摘要 FROM B站收藏-AI分拣 WHERE contains(tags, Python) AND contains(tags, 机器学习) SORT file.mtime DESC这张表会自动聚合所有同时含Python和机器学习标签的视频按收藏时间倒序排列。更妙的是你可以点击任一标签如#PythonObsidian自动跳转到所有Python相关视频的聚合页。我用这个功能30分钟内就梳理出“Python数据分析”学习路径从NumPy基础→Pandas实战→Matplotlib可视化→Scikit-learn建模每个环节都有3-5个高质量视频支撑。AI不教你怎么学但它把散落的知识珍珠串成了你能看见的项链。6.2 跨平台联动Chrome扩展 Obsidian 本地数据库想进一步挖掘数据我们预留了SQLite接口。运行python export_to_db.py会将所有笔记元数据标题、标签、摘要、时间导出到bilibili.db。然后用DB Browser打开执行SQLSELECT tags, COUNT(*) as count FROM videos WHERE timestamp 2024-01-01 GROUP BY tags ORDER BY count DESC LIMIT 10;结果告诉你过去半年你最关注的10个主题是[Python, 考研政治, 前端框架, 日语学习, 摄影技巧...]。这比凭记忆总结更客观。更进一步用Python脚本连接数据库当某主题视频数50时自动邮件提醒你“该领域知识已积累足够建议整理成专题笔记”。6.3 安全边界为什么说这是目前最私密的AI知识管理方案所有数据流经路径B站网页 → Chrome扩展