noreply@blogger.com (奕奕) 奕奕Blog 10-04 小爱音箱接入 AI 大模型实践 最近越来越觉得家里的小爱音箱有点蠢,买的时候号称升级为“超级小爱”了,实际用起来比起以前确实有提升,但是非常有限。于是想着给小爱音箱升级一下,接入 AI 大模型。 小爱音箱接入大模型的方案网上不少,我个人是不喜欢刷机的,最后选了 xiaogpt 这个开源项目。 先说原理。xiaogpt 不用刷机,原理是使用小米账号登录小米云,轮询对话记录接口。你在唤醒小爱的时候,xiaogpt 在云端抓到关键词就会把它发给大模型,拿到回答后再发回小爱音箱。所以它出现了一个毛病:小爱的应答速度很快,在你唤醒后会先抢答个一两秒,然后才会被大模型发回来的回答截断,不过无伤大雅。目前我是没有找到解决方法,除非刷机。 一、海外服务器遇到小米风控 我的服务器在海外,在登录小米账号的时候就卡住了:小米判定海外 IP 登录有风险,返回一个安全验证,要短信验证码,还要确认跨境协议。登录成功之后把 passToken 提出来,之后都拿这个 token 直连,不再走密码登录,风控就不触发了。目前不清楚小米的 token 过期时间,先用着。 二、音箱太新,项目不认识 我这款音箱 OH2P,xiaogpt 的机型表 #技术分享
noreply@blogger.com (奕奕) 奕奕Blog 09-17 服务器里养了一只果蝇 我的服务器里住着一只果蝇,到写这篇为止已经存活三十多个小时。它不是那种几行 if-else 拼出来的假虫子——行为背后是一份真实的神经接线图和一套极简的放电规则。 一、它的脑子是一份接线图 2024 年,FlyWire 联盟(Google、普林斯顿、剑桥和 HHMI)完成了成年果蝇全脑重建:139,255 个神经元、270 多万个突触连接,谁跟谁相连、连接强度多少,全部数清、开源。此前只有线虫做到过这个精度,线虫是 302 个神经元,果蝇是它的四百多倍。 我的果蝇用的就是这份数据。原始数据是一张几百万行的连接表,我把它预处理成二进制:每个神经元存一个“下游列表”——连到哪、权重多少。运行时全脑其实就两个数组:一个存 13.9 万个神经元各自的电位,一个存 270 万条连接。 二、每个神经元只有三条规则 模型叫 LIF(泄漏积累发放),每个神经元每个节拍只做三件事: 攒电荷:上游传来的脉冲累加到自己电位上; 漏电:每拍电位乘以 0.95——像桶底有缝,不持续注水就存不住; 放电:电位超过 1.0 就给下游发一个脉冲,然后强制休息 3 拍。 没有训练,没有权重调整。整个仿 #技术分享
noreply@blogger.com (奕奕) 奕奕Blog 09-07 把博客排版整理了一遍 这是一篇样板文章,展示博客支持的所有排版样式。内容不重要,好看才重要——往下翻,每一种样式都是一次视觉体验。 一导语与首字下沉 首字下沉是杂志级排版的标志。段落的第一个字放大下沉,瞬间抓住读者眼球,适合长文章的开头,给人一种"这篇文章值得细读"的仪式感。配合导语段落使用,效果翻倍。 二引用与金句 好的排版是无声的向导,它不说话,但读者知道该往哪里看。 引用块适合放金句、核心观点,或者引用别人的话。蓝色竖线 + 浅蓝背景,一眼就能从正文中区分出来。 三工具卡片 ⚠️ 注意 这是警告型卡片,适合放坑点、注意事项、容易踩雷的地方。黄色系配色天然带有警示感。 💡 小贴士 这是信息型卡片,适合放补充说明、背景知识、延伸阅读。蓝色系给人冷静可靠的感觉。 四关键要点框 📌 关键要点 用列表把核心结论拎出来,读者扫一眼就知道这节讲了啥 适合放在长文每个小节的末尾,做个小结 黄色便签纸风格,亲切不严肃 五炫酷加分项 渐变标题文字,适合强调一句话 Slogan 徽章标签 ✅ 已验证 🔥 热门 🌈 渐变卡片 柔和的渐变背景 + 圆角 + 阴影,适合放总结、推荐 #技术分享
noreply@blogger.com (奕奕) 奕奕Blog 05-03 OpenViking 记忆提取挂了三天,最后发现是模型太聪明 事情要从三天前说起。Hermes Agent 接上 OpenViking 做长期记忆之后,我发现它从来不主动搜自己的知识库。每次对话都像失忆了一样,之前存的东西完全不记得。 一开始以为是配置没配对。毕竟 OpenViking 是字节跳动的开源项目,这种量级的团队不太可能犯低级错误,大概率是我哪里搞错了。版本 v0.3.14,VLM 一开始本地部署的 Ollama,后来切成了 MiniMax 的 API,embedding 是本地的 bge-small-zh。服务健康检查 200 OK,日志没报错,看起来一切正常。 但 viking_search 永远返回空。 第一层:向量库是空的 先确认最基本的——数据到底有没有进去。 curl http://127.0.0.1:1933/api/v1/observer/vikingdb 结果:Vector Count = 0。一整个向量库,空空如也。但 Semantic-Nodes 队列显示 3335 条正在处理和已完成——说明数据管道在跑,只是没入库。 等了几分钟再查,0 变成了 856。原来是异步队列积压,处理完就正常了。searc #Hermes #OpenViking #技术分享
noreply@blogger.com (奕奕) 奕奕Blog 04-21 Hermes Mini App 监控面板开发实录 给 Telegram 上的 AI 助手做了个监控面板,塞在 Mini App 里,实时看服务器状态。部署在 tg.eebk.com,Flask 后端 + nginx 反代 + EdgeOne CDN,跑了几天挺稳。 左边是 Telegram 聊天记录,右边是 Mini App 面板。CPU 83%、内存 24.8%、磁盘 8.4%,四个核心的使用率一目了然。 做这个的起因很简单——经常想看服务器状态,但每次要 SSH 上去跑 top 太麻烦。Telegram Mini App 直接在聊天里打开,点一下就行。 一、做了什么 面板分三个 Tab:监控看系统状态,Hermes管 AI 助手,维护跑运维操作。 监控页实时显示 CPU 每核使用率、内存、磁盘、网络上下行、系统负载。下面一排是服务健康状态:Hermes 核心、Gateway、Ollama、Nginx、Docker 之类的,绿点亮着就说明正常。 二、技术选择 实时数据用 SSE 推送,Flask 那边 Response(generator(), mimetype='text/event-stream'),前端 Even #Hermes #技术分享
noreply@blogger.com (奕奕) 奕奕Blog 04-20 OCI ARM 实例的 iowait 假象 白嫖的 Oracle Cloud ARM 实例,top 里常年挂着 40%+ 的 iowait,一度以为自己踩到了磁盘性能的坑。直到有天认真查了一下,才发现事情没那么简单。 事情要从一次例行巡检说起。登上服务器跑了个 top,iowait 优雅地停在 45% 左右。第一反应是——磁盘是不是快不行了?毕竟免费实例嘛,IO 性能缩水也说得过去。于是 iostat、iotop 一顿操作,结果磁盘读写响应时间正常得很,完全没有瓶颈的迹象。 这就奇怪了。iowait 的定义是“CPU 空闲但有待完成的 IO 请求”,可实际上并没有什么 IO 压力,那这 40% 是从哪冒出来的? 顺着这个线索,我翻了翻 Linux 内核的账本。内核源码 sched/cputime.c 里写得明明白白:每个时钟 tick,内核先检查硬中断、软中断,再算用户态、系统态时间,剩下的归 idle。而 idle 里又做了个区分——如果当前 CPU 的运行队列里有进程在等 IO(nr_iowait > 0),这笔时间就记到 iowait 账上,否则记到 idle 账上。 换句话说,iowait 不是“IO 多慢”,而 #技术分享
noreply@blogger.com (奕奕) 奕奕Blog 2025-04-19 QQ官方机器人无需审核快速发布正式版 无意中发现了一个可以无需繁琐审核,快速发布 QQ 官方机器人为正式版的方法,操作非常简单: 1. 申请腾讯元器智能体(https://yuanqi.tencent.com/)。 2. 如果你不打算使用元器,可以随意进行设置。 3. 在发布时,绑定之前创建的 QQ 机器人,并填入 ID 和密钥。 4. 此时,你会发现 QQ 机器人从测试版自动变为已发布状态。 5. 然后在元器平台中解绑关联的 QQ 机器人。 6. 这样一来,QQ 机器人就成了正式发布版,后续就可以自由对接你自己的程序了。 重要提示: 请注意,网络并非法外之地。虽然此方法可以绕过一些繁琐的审核手续,但使用者仍需依法合规使用,切勿用于任何违法场景。 ⚠️ 更新提示(2026年3月): 此方法现在已经失效,无法使用。由于腾讯官方政策调整,该快速审核通道已被关闭,如果你想发布 QQ 官方机器人,请通过正规审核流程提交。如有其他问题,欢迎留言讨论。 #技术分享
noreply@blogger.com (奕奕) 奕奕Blog 2025-04-19 win11代理设置劫持--自动打开“使用设置脚本” 最近,我家里的电脑遇到了一个奇怪的问题:系统会自动打开代理设置中的“使用设置脚本”,并且脚本地址被设定为 http://127.0.0.1:21998/PacProxyScript.pac/?t=1713487322302。 即使我手动关闭代理设置,它也会自动重新启用。该问题持续了有一段时间,一直没顾上处理。 经排查可能是很早之前使用某科学软件导致的。该软件虽然早已卸载,但这个问题依旧存在。我尝试使用杀毒软件进行全面扫描,但并没有发现任何异常。 然后尝试过删除注册表中AutoConfigURL的相关项,但删除后它们又会自动恢复。 经过一番深入排查,我发现问题是由该程序和电脑上安装的某个证书助手程序相互作用引起的。这两个程序之间存在某种冲突,导致代理设置出现异常且无法手动清除。 为了防止出现类似的问题,大家在使用某些软件的时候记得要先清除相关设置后在卸载该软件,不然就会造成残留,如果该残留和其他软件相互作用的时候就会出现无法手动清理的问题。 最终,我卸载了这个证书助手程序,修改了设置。问题得到了解决,系统恢复正常。 推测如果有遇到类似问题的朋友,仔细检查一下自己的电脑上是否安装 #技术分享
noreply@blogger.com (奕奕) 奕奕Blog 2025-04-16 AI模型的Token到底是什么 有没有好奇过,那些AI是怎么理解我们说的话,还能给出合理的回复?其实背后有个很关键的东西—Token。你可以把它想成大模型世界里的“乐高积木”。 当我们在AI模型里输入一句话,比如“你好”,模型并不是按两个字理解,而是一个Token,因为“你好”是一个常用词语。 比如“我是一个练习两年半的练习生”分词器会先拆成几个小块,我是一个 练习 两年 半 的 练习 生 这7个小块就是7个 Token,有时候一个Token是一个汉字、有时候是一个词、甚至是一整个短语。标点、英文单词,甚至单词的一部分也能算一个 Token。 Token 就是模型处理语言时的最小单位,像一块块积木拼起来,模型才知道你在说什么。 为什么 一个Token有时候代表一个字,有时候代表一个词?其实这跟人类阅读文章的方式很像。我们在阅读时并不会一个字一个字读,而是整词整句地理解。一切固定搭配词组大脑在阅读时会把它当作一个整体,大模型也一样,它会优先把经常一起出现、有完整意义的词当成一个整体来处理,这样效率更高,也更准确。 负责这个拆分工作的是一个叫“分词器”的东西。它会根据学到的海量文本,把文字内容按规则分成一个个 #Token #技术分享
noreply@blogger.com (奕奕) 奕奕Blog 2025-04-06 为什么我选择放弃“暗色模式切换按钮” 引言:一场关于「黑暗与光明」的争议。 凌晨两点,当我又一次在某个网站角落寻找浅色模式开关时,突然意识到:在这个所有设备都已支持全局深色模式切换的时代,我们是否正在用过度设计制造新的体验困境? 你的网站真的需要那个暗浅色模式切换按钮吗? 一、现状:主流及惯例 大多数个人网站,我们总能在导航栏角落发现由 🌙 / 🌞/ 🌓 图标构成的「视觉模式铁三角」: 强制浅色模式(面向日光场景) 强制暗色模式(讨好夜间访客) 跟随系统(看似中庸的选项) 这种设计逻辑源自一个美好假设:“访客需要随时掌控视觉呈现。” 但这其实是一种控制幻觉。提供选项 ≠ 提升体验,反而可能增加了认知负荷。 目前操作系统已经高度成熟,CSS 媒体查询 @media (prefers-color-scheme: dark) 的浏览器支持率已达 99%,配合 元标签,可以实现像素级的暗/浅色模式同步。 那么问题来了:真的有访客在设置了夜间模式的设备上,还想主动切换成浅色模式吗? 也许有,但绝对不多。 二、思考与决策 观察来看,目前多数个人博客默认是暗色模式,有些提供浅色切换,有些干脆不提供。原因 #技术分享
noreply@blogger.com (奕奕) 奕奕Blog 2025-04-02 QQ机器人插件 一、当前功能 最近申请了一个腾讯官方的机器人,整了点小工具,日常用起来比较方便。 目前功能主要有两块: 腾讯云边缘加速CDN 刷新URL、目录缓存 预热URL、目录缓存 查询状态等 腾讯云DNS解析 一键切换CF 修改解析等 二、开发限制 当前插件主要是自用,没有做相关安全设置。 受限于腾讯官方对机器人API的严格管控,很多功能实现起来麻烦。比如: 无法主动推送服务器/网站状态通知 官方执行严格的一问一答制度 机器人无法主动向用户发送消息 不知道后期腾讯会不会修改政策,暂时没有找到替代解决方案。 三、未来计划 增加文件上传管理功能 覆盖日常高频操作场景 实现尽量不打开网页控制台即可完成日常操作 是否正式发布机器人: 开发版目前已满足个人使用需求 发布正式版后可能面临更严格监管 暂时保持观望状态 #技术分享
noreply@blogger.com (奕奕) 奕奕Blog 2025-03-29 Blogger优化,解决 Blogger 动态插入外部资源的问题 Blogger是一个很不错的博客平台,就是在国内网络环境下有点“水土不服”。昨天我解决了 Blogger 动态插入外部资源的问题,记录一下解决方法。 一、问题描述 在访问 Blogger 时,会自动拉取一些外部资源,比如 CSS 和 JS 文件。国内由于网络限制,这些资源加载失败,导致一些功能失效。 之前的解决方案通常是彻底直接禁用这些资源,但这样也会导致 Blogger 的部分小组件无法使用。 二、解决思路 我的方法是:使用 JS 动态拦截和替换外部资源,将它们指向自己服务器上的备份资源。 这样既能保留 Blogger 小组件的功能,也能解决资源加载失败的问题。 在替换后原资源还是会时不时拉起,这个是blogger的机制,目前我没有找到解决办法,不过这不影响,毕竟也没几个人会去关注控制台 三、实现步骤 首先访问你的 Blogger 博客,在控制台(F12)中找到加载失败的资源链接。 通常会有 3 个资源:2 个 CSS 文件和 1 个 JS 文件。 将这些文件下载到你的服务器,比如放在 https://cloud.eebk.com。 使用以下 JS 代码进行动 #blogger #技术分享
noreply@blogger.com (奕奕) 奕奕Blog 2025-03-24 个人主页代码 起因就是无意中发现了一个“号称”3.5欧终身永久的虚拟主机,闲的无聊想着也没什么用,就整个主页挂着吧。 demo: https://yomiya.eu.org/ (部分地区可能无法访问eu.org域名,请自行解决网络问题) ▍技术亮点说明 3D透视效果:使用CSS transform实现代码盒子的立体旋转 响应式设计:通过clamp()函数实现视口自适应排版 动态光标:纯CSS实现的闪烁光标动画 渐变色LOGO:通过滤镜实现动态渐变色效果 代码就不提供了,懒得贴,有需要的自己去扒 🛠️ 开发笔记: 1. 使用CSS变量实现主题色快速切换 2. aspect-ratio属性保证代码盒子比例 3. clamp()函数实现响应式字体缩放 4. 伪3D效果仅用纯CSS实现 #技术分享
noreply@blogger.com (奕奕) 奕奕Blog 2025-03-15 隐藏Waline的登录按钮 今天无意中在某群看到有群友提问,他的网站访客看到 Waline 的登录按钮后,以为必须登录才能评论,产生了困惑。虽然这个问题看起来有点“傻”,但确实可能影响用户体验。 一、解决方案 最简单的做法就是 直接隐藏按钮。但是,为了自己需要登录时依然能用,可以在鼠标移到原登录按钮位置时让它重新显示。 二、实现方法 无需修改源代码,只需要添加以下 CSS 代码: .wl-btn { border-color: transparent; color: transparent; background-color: transparent; cursor: default; } 三、搞定! 这样,按钮默认情况下是“隐形”的,但交互逻辑仍然保留,不影响你自己使用。 #waline #技术分享
noreply@blogger.com (奕奕) 奕奕Blog 2025-03-10 谷歌云GCP 永久免费服务器申请教程 自甲骨文之后,谷歌(GCP) 也放出了一项福利,给每个用户免费提供一台服务器,每月免费流量 200G。一些小项目用起来还是很不错的,毕竟“白嫖”谁不喜欢。 废话不多说,下面直接上干货。 一、进入谷歌云创建虚拟主机 首先进入 谷歌云控制台,创建虚拟主机。 二、选择地区和机器配置 注意,地区只能选择美国的 “俄勒冈、爱荷华、南卡罗来纳”,从地理位置来看,俄勒冈可能更近一点。机器配置选择 “通用-E2”,机器类型选择 “共享核心 e2-micro”。 三、设置启动磁盘 启动磁盘选择 “标准永久性磁盘”,容量选择 “30G”。 备份这里选择 “无备份”。 四、设置网络接口 点击 “修改网络接口”,然后在网络服务层级这里选择 “标准”(每月免费 200G 流量)。 五、添加 SSH 密钥 在安全性里添加自己生成的 SSH 密钥,这里也可以后期在元数据里自行添加。 注意,自己生成的密钥末尾必须携带谷歌账户的注释(如 “XXX@gmail.com”),SSH 登录时的用户名就是 “XXX”。 六、其他设置 防火墙规则可以根据自己的需要进行修改。 信用卡绑定用于验证,可 #技术分享