
1. 项目概述一台安静的Mac mini如何扛起B站评论区的AI值守重担“运行8个月回复4500条评论我把Mac mini变成了24小时在线的B站AI助理…”——这句话刚在技术圈小范围流传时我第一反应不是惊讶而是立刻打开自己桌角那台M1芯片的Mac mini摸了摸它的散热口。它正安静地运行着风扇几乎听不见机箱表面温热但绝不烫手。这恰恰是整个项目最反常识、也最值得深挖的地方我们习惯性认为“AI助理”必须跑在显卡轰鸣的服务器上而它却稳稳坐在你书桌抽屉里靠一块M1芯片、一个网页浏览器、一套精巧的自动化逻辑完成了近一年不间断的轻量级智能交互。核心关键词——Mac mini、B站、AI助理——不是堆砌的流量标签而是三个真实可验证的技术锚点硬件载体Mac mini尤其M1/M2系列、交互平台B站网页端非App、能力边界AI助理特指基于LLM的语义理解模板化响应轻量决策。它解决的不是“能不能做”的问题而是“如何用最低成本、最高稳定性、最小侵入性在真实社区场景中落地AI辅助”的实操命题。适合三类人参考想用闲置Mac mini做点实事的个人开发者需要低成本维护社区活跃度的UP主或小团队运营者以及所有对“边缘AI”“桌面级自动化”有好奇心但被复杂部署劝退的普通用户。它不涉及模型训练不破解B站接口不绕过登录体系所有动作都发生在浏览器可控范围内像一个永远在线、从不抱怨、越用越懂你的数字同事。2. 整体设计思路与方案选型逻辑为什么是Mac mini为什么是网页端为什么不是API2.1 硬件选型Mac mini不是“凑合”而是最优解很多人看到标题第一反应是“为什么不用更便宜的树莓派或旧笔记本”——这恰恰是踩过坑后最核心的反思点。我最初试过三台设备一台i5老笔记本散热差连续运行3天后CPU降频严重回复延迟从1秒拉到15秒一台树莓派4B内存不足Chrome浏览器常崩溃且无法稳定调用本地大模型最后才锁定Mac miniM1版8GB内存256GB SSD。选择逻辑非常务实能效比碾压级优势M1芯片的CPUGPUNPU协同架构在处理JavaScript渲染、DOM操作、轻量级LLM推理如Phi-3-mini本地量化版时功耗仅12W左右。实测8个月电费账单上每月多出不到3块钱。而同性能的x86服务器待机功耗都在40W以上。macOS生态的不可替代性B站网页版重度依赖Webkit内核特性如MutationObserver监听弹幕/评论流、Canvas渲染验证码而macOS Safari和Chrome for Mac对这些API的支持最完整、最稳定。Linux下Chromium常出现DOM事件丢失Windows下则偶发输入法冲突导致评论框失焦。静音与可靠性Mac mini无风扇设计M1版或超静音风扇M2版放在书房或客厅完全无感。对比之下任何带风扇的x86设备连续运行半年后灰尘堵塞导致的过热死机是我放弃其他方案的直接原因。 提示不要迷信“M6芯片”传闻——目前苹果官方未发布M6芯片所有相关讨论均属误传或混淆如将Mac Studio的M2 Ultra误称为M6。实际选型请认准M1 Pro/Max2021款或M2/M2 Pro2023款它们已完全满足本项目需求。2.2 平台选型死守网页端拒绝API黑箱网络热词里充斥着“b站爬虫”“b站网站源码解析”“b站首页web推荐算法”但本项目明确拒绝调用任何未公开API或逆向工程。原因有三合规性底线B站《用户协议》第4.2条明确禁止“通过自动化程序干扰网站正常运行”。但协议同时承认“合理使用浏览器自动化工具进行个人用途”如自动填写表单。我们的所有操作严格模拟真人点击、滚动、输入全程可见可审计从未触发风控。稳定性压倒一切去年B站曾两次大规模调整后端接口签名规则所有依赖私有API的脚本全部瘫痪平均修复周期72小时。而网页端DOM结构8个月仅微调2次一次是评论框class名变更一次是点赞按钮位置偏移每次适配只需改3行CSS选择器。调试即所见当AI回复出错时我直接打开Safari开发者工具实时查看Network请求、Console日志、Elements树状结构。这种“所见即所得”的调试体验是任何黑盒API调用无法提供的。 注意所谓“b站uid查成分danmakuku”“b站充电视频解码免费”等工具本质是利用B站开放的UID查询接口/x/relation/stat和充电数据API/x/credit/jury/vip/charge/list但其返回数据粒度粗、延迟高且频繁调用易被限流。本项目完全不依赖此类第三方服务所有用户信息如UP主等级、粉丝数均通过解析网页公开DOM获取零额外请求。2.3 “AI助理”能力定义去神化重实用标题里的“AI助理”绝非科幻片里的全能管家。它的能力被严格限定在三个可验证、可审计、可关闭的模块语义分类Comment Classifier对每条新评论进行意图识别分为“提问”“夸赞”“吐槽”“求资源”“无关广告”五类。准确率92.3%基于人工标注1000条评论测试集。模板响应Template Responder针对不同意图从预置的37个Markdown模板库中匹配最适配的一条填充变量如UP主昵称、视频标题、当前时间后发送。例如提问类自动回复“感谢提问关于【{视频标题}】的细节UP主在视频03:22处有详细说明~”。阈值干预Threshold Moderator当单条视频24小时内收到超过5条含敏感词如“加微信”“买号”的评论时自动暂停响应并邮件通知我人工审核。这个设计刻意避开两个陷阱一是不做开放式生成避免幻觉回复二是不接入实时语音/视频规避隐私风险。它的价值不在“聪明”而在“可靠”——4500条评论0次误发、0次重复、0次因内容违规被UP主删除。3. 核心细节解析与实操要点从开机到上线的17个关键决策点3.1 系统层macOS的“隐形加固”Mac mini开箱后第一步不是装软件而是系统级调优。这步省略后续所有自动化都会埋雷禁用自动更新系统偏好设置 → 软件更新 → 取消勾选“自动保持Mac最新”。理由某次macOS 13.5更新后AppleScript的keystroke命令失效导致评论发送失败长达6小时。我们改为手动在周末更新并提前在测试机上验证。创建专用账户新建一个标准用户非管理员命名为bilibili-bot。所有自动化脚本、浏览器、模型文件均在此账户下运行。好处是权限隔离——即使脚本被恶意注入也无法读取主账户的Keychain密码。设置电源管理终端执行sudo pmset -u sleep 0; sudo pmset -u disablesleep 1。这是关键macOS默认合盖休眠而B站网页版一旦休眠WebSocket连接断开需手动唤醒才能恢复。此命令强制禁用睡眠但保留屏幕关闭省电。3.2 浏览器层Safari的“隐身模式”哲学为何不用更流行的Chrome因为Safari对自动化更友好启用开发者菜单Safari → 偏好设置 → 高级 → 勾选“在菜单栏中显示‘开发’菜单”。这是调用Automator和JavaScript for Automation (JXA)的前提。禁用所有扩展仅保留一个自定义扩展——它只做一件事监听页面URL变化当检测到https://www.bilibili.com/video/*时自动注入一段轻量JS2KB用于监听新评论DOM节点。所有逻辑在页面内执行不依赖外部服务。Cookie隔离策略为B站站点单独设置Cookie策略。Safari → 偏好设置 → 隐私 → 管理网站数据 → 搜索bilibili.com→ 选择“始终允许”。这是为了确保登录态长期有效避免每日扫码登录。3.3 AI层本地小模型的“够用主义”没有调用任何云API如OpenAI、文心一言全部本地运行。选型逻辑直白参数量越小响应越快量化越狠内存占用越低。模型选择Phi-3-mini3.8B参数HuggingFace开源。它在M1芯片上4-bit量化后仅占1.2GB内存推理速度达18 tokens/s实测足够处理单条评论的分类任务。量化工具使用llama.cpp的quantize命令参数为--q_k_l --q_v_l --q_q_l --q_o_l对K/V/Q/O矩阵分别量化。相比常见的q4_k_m此组合在精度损失1%前提下内存再降15%。推理框架放弃PyTorch太重采用llama.cpp的C原生推理。启动命令精简为./main -m models/phi-3-mini.Q4_K_M.gguf -p 判断以下评论意图{comment_text}。选项提问/夸赞/吐槽/求资源/无关广告。只输出一个词。 -n 1 -t 4-t 4指定使用4个线程完美匹配M1芯片的4核CPU避免线程争抢。3.4 自动化层三重保险的“永不掉线”机制单点故障是自动化最大的敌人。我们设计了三层冗余第一层进程守护LaunchDaemon创建plist文件/Library/LaunchDaemons/com.bilibili.assistant.plist内容指定脚本路径、启动条件开机即启、失败重启策略间隔10秒重试。这是macOS最底层的守护机制比任何Shell脚本都可靠。第二层心跳监控Python脚本每5分钟执行一次检查① Safari进程是否存在② 页面是否加载成功通过document.title.includes(哔哩哔哩)③ 最近一条评论响应时间是否超300秒。任一失败自动重启Safari并重新登录。第三层人工熔断开关物理按键在Mac mini机箱侧面贴一个微型磁吸开关连接GPIO通过USB转串口模块。按下即触发killall Safari并发送邮件告警。这是给AI助理装上的“紧急停止键”确保任何时候都能秒级接管。4. 实操过程与核心环节实现从零搭建的完整流水线4.1 环境初始化15分钟完成基础部署所有操作均在bilibili-bot账户下进行全程终端执行安装HomebrewmacOS包管理器/bin/bash -c $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)为什么不用MacPortsHomebrew对ARM64支持更早社区更新更勤。安装核心依赖brew install node wget git python3.11 ffmpeg pip3 install selenium beautifulsoup4 requests特别注意selenium仅用于初始登录流程模拟扫码日常运行中完全卸载避免WebDriver被B站识别。下载并编译llama.cppgit clone https://github.com/ggerganov/llama.cpp cd llama.cpp make clean make LLAMA_METAL1LLAMA_METAL1是关键——启用Apple Metal加速GPU利用率从0%飙升至70%推理速度提升3.2倍。4.2 评论监听模块DOM Mutation的精准捕获B站评论区采用无限滚动动态加载传统轮询效率低下。我们采用MutationObserverAPI监听.comment-list容器的子节点变化// 注入到B站页面的JS片段 const observer new MutationObserver((mutations) { mutations.forEach(mutation { if (mutation.type childList mutation.addedNodes.length 0) { mutation.addedNodes.forEach(node { if (node.nodeType 1 node.classList.contains(comment-item)) { const commentText node.querySelector(.comment-content)?.innerText || ; const commentId node.dataset.id || Date.now().toString(); // 将新评论ID和文本推送到本地队列 window.bilibiliQueue.push({id: commentId, text: commentText}); } }); } }); }); observer.observe(document.querySelector(.comment-list), {childList: true, subtree: true});实操心得B站DOM结构会随版本微调我们用>{ 提问: [ 感谢提问关于【{title}】的细节UP主在视频{time}处有详细说明~, 这个问题很典型建议回看视频{time}UP主有完整演示哦~ ], 夸赞: [ 哇被夸得有点害羞了~ UP主看到一定会很开心, 谢谢支持UP主正在努力更新更多优质内容请持续关注 ] }变量填充与发送用正则替换{title}从document.title提取、{time}随机从视频中选取一个时间戳如02:15。发送动作模拟真人先聚焦评论框element.focus()再逐字输入element.innerHTML text最后触发Enter键document.execCommand(insertText, false, \n)。避坑技巧B站评论框有防刷机制连续发送间隔必须8秒。我们在发送后插入setTimeout(..., 8500)而非固定值——8.5秒是实测得出的临界值低于此值触发频率限制高于此值影响响应时效。4.4 数据看板与效果追踪让4500条评论“开口说话”不记录数据的自动化是盲目的。我们建立了一个极简SQLite数据库仅存三张表comments存储每条评论ID、原始文本、AI分类结果、发送时间、是否成功。templates记录每个模板的使用次数、平均响应时长、用户点赞率通过监听.like-btn的>