返回资讯中心
外部精选
软件工程
#开发者实时流

Sift推AI通知筛选工具,为家庭实验室过滤告警噪音

来源标题:Show HN: Sift – only get pinged when something in your homelab matters

Sift是一款面向家庭实验室的AI通知筛选工具,它接入用户运行的各种服务事件,由LLM分类、汇总并关联事件,只把紧急且可操作的通知推送到手机,其余例行信息归入每日摘要。AI可选,不配置模型时仍可用规则去重、路由和摘要。它以单个小容器部署,仅依赖Python标准库。

Hacker News 最新louisllw2026/11/3 · 今天16 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

为你的 homelab 打造的 AI 通知大脑——一个更聪明、更安静的 ntfy。

Sift 会接收你所有运行中的服务产生的事件,让 LLM 对它们进行分诊和关联,只把紧急且可操作的事件推送到你的手机。所有例行事务都会汇总成每天一份的平实语言摘要。它监控你的服务器,一旦有服务器宕机就立刻通知你;它在每台主机上运行一个轻量级 agent,让你可以通过 Web 控制台或 Telegram 向它询问任何问题,或在任意主机上运行只读诊断。

AI 是可选的:即使不配置模型,Sift 仍然能通过规则完成去重、路由和摘要。一个小容器,零 Python 依赖(仅标准库)。

自托管用户被通知淹没——每小时一次的“有更新可用”提醒、反复抖动的索引器、扫描器噪音、各种杂音——结果真正重要的那一条告警(磁盘即将损坏、备份失败)反而被淹没。Sift 解决的是信噪比问题,而不仅仅是投递问题:它理解你的环境,只在确实需要你介入时才打扰你。

AI 分诊——对每个事件进行分类(critical / urgent / routine / noise),生成摘要,并将具有相同根因的事件分组(“3 个站点宕机 = 隧道问题,而不是 3 个告警”)。兼容任何 OpenAI 兼容端点(Ollama、vLLM、LM Studio、OpenAI、Groq……)。

了解你的环境——你只需写一次平实语言的 ai_context(你的主机、哪些重要、哪些是正常噪音),它就会指导分诊、对话和摘要。这是“让它变聪明”的最大杠杆。

AI 可选——没有模型?仅规则模式(关键词分诊 + 确定性路由)依然可用,并且 Sift 采用故障开放策略(LLM 宕机 → 事件原样推送,绝不丢弃)。

确定性安全护栏——匹配你 critical_bypass 正则的事件(磁盘即将损坏、备份失败、磁盘已满……)会立即推送,不经过 LLM。mute_patterns 则相反:已知噪音直接进入摘要,绝不告警。

兼容 ntfy 的接收——向 ntfy 发送 POST 的发布者只需修改 URL 即可迁移。使用 POST /<topic> 加文本正文,或 POST /notify 加 JSON。支持 Bearer、X-Sift-Token 或 HTTP Basic 认证。

集群监控——Sift 主动检查你的服务器/服务(HTTP/TCP),并在宕机 → 恢复时告警,带状态变更去重(不会反复发送“仍然宕机”)。

主机 agent——每台主机上运行一个极小的 bash agent(零依赖),报告健康状态(磁盘 / ZFS / SMART / 不健康的容器),并转发错误日志供 AI 分诊。死人开关:如果某台主机失去静默,Sift 会告诉你。

远程只读诊断——从 Web 控制台或 Telegram,在任意主机上运行白名单内的诊断命令(disk、mem、zpool、docker ps/logs、smart、journal、failed units、top procs、listening ports……)并读取输出。没有 shell,没有入站连接,没有任何能改变状态的操作。

问它任何问题(Telegram)——“我的服务器都正常吗?”“X 为什么挂了?”“host1 上是什么在占磁盘?”——它会检查集群并自行运行诊断来回答。只读、仅限你本人、带短期对话记忆。

Web UI——仪表盘(集群 + agent + 事件)、一行式 agent 安装器、控制台、监控项、投递/AI/接收设置、原始配置。受管理员密码保护,可离线使用(无 CDN)。

可插拔投递——Telegram、ntfy、Discord、Slack 或通用 webhook。

架构

publishers ─┐ ┌─► Telegram / ntfy / Discord / … ├─► Sift server (triage, AI, ──┤ host agents ┘ monitors, web UI, DB) └─► daily digest

host agent 只向外拨号:心跳、指标、日志,以及对只读命令的长轮询。Sift 从不主动连接主机——没有入站端口,不存储 SSH 密钥。可通过任何现有的反向代理 / 隧道工作。

快速开始(服务端)

git clone https://github.com/<you>/sift && cd sift cp config.example.json data/config.json cp compose.example.yml compose.yml # 然后按需修改端口绑定

编辑 data/config.json:投递渠道 +(可选)llm 端点 + ingest_token

docker compose up -d --build

或者不用 Docker:python3 sift.py data/config.json(仅标准库,Python 3.9+)。

打开 Web UI http://<host>:8130/,设置管理员密码,然后发布一个测试事件:

curl -H "Authorization: Bearer $INGEST_TOKEN"
-H "Title: Backup failed"
-d "restic exited 1 on the nightly run"
http://localhost:8130/backups

添加主机(agent)

从 Web UI 的 Deploy 标签页,或直接在目标主机上以 root 运行:

curl -fsSL http://<your-sift>:8130/agent/install.sh
| sudo SIFT_SERVER=http://<your-sift>:8130 SIFT_TOKEN=<ingest_token> SIFT_HOST=myhost bash

这会安装两个极小的组件(用 SIFT_COMPONENTS=both|daemon|collector 选择):

远程主机使用你的公网 URL(例如 https://sift.example.com)——它复用你已有的反向代理 / 隧道;无需为每台主机单独建隧道。随时可以从 Dashboard 移除主机——agent 会在下一次轮询时自行卸载。

在 Settings → “What the AI should know about your setup” 中,用平实语言描述你的环境,例如:

Hosts: nas(主服务器,ZFS 池 tank,约 20 个容器——关注系统盘写满)。 edge(公网反向代理,带 fail2ban——扫描器封禁是正常的,不是事故)。 What matters: 池健康、备份失败、公网站点真正宕机。Usually noise: 被拦截的扫描器、单次失败登录探测、重启后恢复的容器。

分诊、对话和摘要都会使用它,这样 Sift 就不再狼来了,而是开始听起来像真的了解你的机架。

给 @BotFather 发消息 → /newbot → 将 bot token 复制到 Settings。 给你的新 bot 发一条消息,然后在 Settings 中点击 Fetch chat id(或使用

配置

一切都在 config.json 中(参见 config.example.json 的带注释模板)。大部分内容都可以从 Web UI 编辑。

agent 仅出站。Sift 从不连接主机;没有入站 agent 端口,也不存储 SSH 密钥。远程命令通过 agent 自己的长轮询传输。

远程执行是只读且白名单化的。服务器只能排队执行固定的诊断菜单;agent 会重新验证并以 argv 数组运行它们(无 shell,因此无注入)。菜单中没有任何操作可以写入、安装、重启或删除。

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →