nikolareljin/vigilant-core

GitHub: nikolareljin/vigilant-core

VigilantCore 是一款隐私优先的本地事件监控应用,利用本地 LLM 对多来源新闻与警报进行影响评估和预测分析。

Stars: 2 | Forks: 0

# VigilantCore [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/960de36cf7034708.svg)](https://github.com/nikolareljin/vigilant-core/actions/workflows/ci.yml) [![Compatibility](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/ab26d2de65034709.svg)](https://github.com/nikolareljin/vigilant-core/actions/workflows/compatibility.yml) ![Linux](https://img.shields.io/badge/compatibility-Linux-blue) ![macOS](https://img.shields.io/badge/compatibility-macOS-black) ![Windows](https://img.shields.io/badge/compatibility-Windows-0078D6) VigilantCore 是一款本地、跨平台的监控应用,用于追踪特定主题的**重大事件**(Impactful Events),它利用本地 LLM (Ollama) 对影响力进行评估并生成预测性结果。它专为非技术用户设计,力求简单易用,同时提供 AI 驱动且具备位置感知能力的信号。 **所有 AI 处理均在您的本地计算机上完成 - 不会向外部服务器发送任何数据。** ## 🚀 快速开始 **使用一行命令开始:** - **Linux/macOS:** ``` curl -fsSL https://raw.githubusercontent.com/nikolareljin/vigilant-core/main/scripts/quickstart.sh | bash ``` - **Windows:** ``` git clone https://github.com/nikolareljin/vigilant-core.git cd vigilant-core .\scripts\quickstart.ps1 ``` [**→ 跳转到详细的安装说明**](#quickstart-one-command-setup) ## 核心功能 - **AI 驱动的洞察**:提出特定的监控问题,获取 AI 生成的解答 - **影响评分**:根据相关性和紧迫性,对每个警报进行 1-10 分的评分 - **位置感知**:支持通过邮政编码、坐标或半径过滤警报 - **自动本地发现**:当您提供邮政编码时,会自动查找: - 您所在州的 NWS 天气警报 - 当地警察、消防和应急管理部门的警报 - 停电地图(包括 `poweroutage.us` 搜索覆盖范围)和公用事业警报 - 水、天然气、太阳能和风能基础设施的事故信号 - 交通/运输/公共交通/机场和航空公司的中断信号 - 当地新闻和政府来源 - **具备上下文感知能力的极端事件覆盖**:针对洪水、龙卷风、野火、冬季风暴、地震、工业事故以及冲突/危机的监控查询 - **国际区域覆盖**:加拿大、欧洲(优先)、北非、中国/远东、澳大利亚、南非、中美洲、南美洲,以及更广泛的中东/南亚/东南亚/撒哈拉以南非洲/全球备用区域 - **坐标优先的来源发现**:仅需经度/纬度即可推断出所在区域,并自动填充相关的区域来源 URL 和本地化的 Google News 提要 - **来源预览 UI/API**:设置页面的预览功能和 `/api/source-preview` endpoint 会在保存前显示推断出的区域和精选来源 URL - **来源健康指标**:在仪表板和 `/api/source-health` 中跟踪每个来源的上次成功获取时间、累计错误次数和最新获取延迟 - **AI 建议操作开关**:可在设置中启用/禁用显示在 AI 洞察结果旁边的可执行建议 - **统一的事件标准化**:所有警报都会被标准化为一致的 schema,包含 `severity`、`confidence`、UTC 标准化时间戳以及结构化的位置字段 - **事件去重引擎**:将来自不同 feed/搜索提供商的重叠警报合并为一个规范事件,并汇总来源归属 - **SQLite 本地缓存**:存储标准化警报以及 `event_history` 和 `source_metadata` 记录,实现可追溯的本地事件持久化 - **多种数据来源**:NewsAPI、DuckDuckGo、Google CSE、RSS feed、本地发现以及精选的全球来源(包括灾难/危机信号来源) - **跨平台**:提供 Web 仪表板和 Qt 桌面应用 - **隐私优先**:所有处理均通过 Ollama 在本地完成 ## 用户流程 1. **首次运行**:打开应用,输入您的监控主题、位置以及可选的 RSS feed/API 密钥。 2. **设置监控问题**:提出具体问题,例如“停电的最高风险期是什么时候?” 3. **实时影响动态**:仪表板显示带有 AI 生成洞察的评分警报(默认情况下,时间戳使用主机的本地时间,或者在 `.env` 中设置了 `DISPLAY_TIMEZONE` 时使用该时区)。 4. **影响评分**:根据相关性和紧迫性,每条警报的评分范围为 1–10。 5. **保持信息同步**:新警报会近乎实时地出现并存储在本地。 ## 影响评分逻辑(概述) - **1–3**:相关性低或影响较弱。 - **4–6**:中等影响或早期预警信号。 - **7–10**:重大影响事件、警告或即将发生的中断。 ## 位置匹配 VigilantCore 通过结合以下因素优先考虑本地信号: - 基于邮政编码的离线地理编码,定位到中心点。 - 半径过滤(默认 50 公里)。 - 对位置名称和邮政编码进行关键词匹配。 ## 自动本地来源发现 当您提供邮政编码或坐标时,VigilantCore 会自动发现相关的本地来源: **天气和紧急警报:** - 针对您所在州的 NWS(国家气象局)CAP 警报 - 恶劣天气警告和警报 **紧急服务:** - 当地警察部门的警报 - 消防部门的新闻 - 县应急管理更新 - 道路封闭和旅行建议 **公用事业:** - 电力公司的停电信息 - 电力服务警报 - 自来水公司的公告和沸水警报 - 天然气紧急情况和泄漏通知 - 相关的可再生能源基础设施事故(太阳能/风能) **当地新闻:** - 县/市政府新闻 feed - 当地报纸的 RSS feed **交通和关键基础设施:** - 交通和 DOT(交通部)事故更新 - 公共交通/铁路服务中断警报 - 机场/航空公司延误和取消信号 **全球危机/冲突(主题驱动):** - 如果您的监控主题提及战争/冲突/危机等词汇,VigilantCore 会扩展国际冲突和人道主义风险更新的搜索/feed 查询范围 **国际区域(位置/经纬度感知):** - 加拿大、欧洲、北非、中国/远东、澳大利亚、南非、中美洲和南美洲的区域来源 URL 和搜索将被自动优先处理 - 额外的备用覆盖范围包括中东、南亚、东南亚和撒哈拉以南非洲(只要有公开来源可用) ## 区域来源发现(详细) VigilantCore 现在采用分层来源发现方法来进行停电/极端事件的监控: 1. 通过邮政编码、位置文本或经纬度推断所在区域(仅凭经纬度也可生效)。 2. 选择精选的区域 URL(公用事业、应急机构、气象服务、交通/航空运营以及主要区域新闻)。 3. 使用特定于区域的区域设置(`gl`、`hl`、`ceid`)生成本地化的 Google News RSS feed。 4. 针对公用事业、交通、灾难以及冲突/人道主义危机扩展上下文感知的搜索。 5. 从候选站点发现 RSS feed,并与用户提供的 feed 和其他搜索/API 来源合并。 这改善了直接 RSS feed 不一致或不可用地区的覆盖情况。 ## 事件去重 在 AI 解析和 SQLite 持久化之前,VigilantCore 会通过以下方式对传入的警报进行去重: - URL 级别的重复抑制 - 语义重叠检查(标题/正文的 token 相似度) - 事件时间邻近度检查(默认为 6 小时重叠窗口,仅在两个事件都有时间戳时应用) 当多个来源描述同一事件时,VigilantCore 会存储一个合并后的事件,并结合来源归属(例如:`Source A | Source B`)。 有关详细的行为说明,请参见 `docs/event-deduplication.md`。 ### 坐标优先行为 如果您仅提供坐标: - `latitude` - `longitude` VigilantCore 依然能够: - 推断出大概的区域 - 选择本地化的区域来源 URL - 生成本地化的 Google News feed - 在保存前预选定的区域/来源 ### 来源预览(Web 设置 + API) 设置页面包含一个**区域来源预览**面板,显示: - 推断出的区域 key/标签 - 精选来源 URL 数量 - 将被优先处理的精选来源 URL - 坐标值在推断区域前会进行范围验证(`lat=-90..90`,`lon=-180..180`) 通过代码进行预览: ``` curl "http://127.0.0.1:8765/api/source-preview?latitude=48.8566&longitude=2.3522" ``` 另一个示例: ``` curl "http://127.0.0.1:8765/api/source-preview?location_name=Toronto,%20Ontario,%20Canada" ``` 有关完整的覆盖列表和实现行为,请参见 `docs/source-discovery.md`。 例如,邮政编码 `08544`(新泽西州普林斯顿)会自动添加新泽西州的 NWS 警报,搜索 PSE&G 停电信息,并查找默瑟县的应急资源。 ## 环境要求 - **Python 3.10+** (Linux/macOS) - **Python 3.12** (Windows) - Git(用于克隆/更新) - Ollama(由快速入门脚本自动安装) ## 快速入门(一行命令设置) 为您的操作系统选择相应的命令: | 平台 | 命令 | |----------|---------| | **Linux** | `curl -fsSL https://raw.githubusercontent.com/nikolareljin/vigilant-core/main/scripts/quickstart.sh \| bash` | | **macOS** | `curl -fsSL https://raw.githubusercontent.com/nikolareljin/vigilant-core/main/scripts/quickstart.sh \| bash` | | **Windows (PowerShell)** | `.\scripts\quickstart.ps1 -TargetDir "."`(克隆仓库后) | | **Windows (CMD)** | `set TARGET_DIR=.` 然后 `.\scripts\quickstart.bat`(克隆仓库后) | ### Linux/macOS **在系统任意位置运行(无需克隆仓库):** ``` curl -fsSL https://raw.githubusercontent.com/nikolareljin/vigilant-core/main/scripts/quickstart.sh | bash ``` 或使用 wget: ``` wget -qO- https://raw.githubusercontent.com/nikolareljin/vigilant-core/main/scripts/quickstart.sh | bash ``` **如果您已经克隆了该仓库:** ``` ./scripts/quickstart.sh ``` ### Windows **第 1 步:克隆仓库(仅限首次)** ``` git clone https://github.com/nikolareljin/vigilant-core.git cd vigilant-core ``` **第 2 步:运行快速入门脚本** **PowerShell(推荐):** ``` .\scripts\quickstart.ps1 -TargetDir "." ``` **命令提示符:** ``` set TARGET_DIR=. .\scripts\quickstart.bat ``` **快速入门脚本会执行以下操作:** - ✅ 确保 Windows 上有 Python 3.12(如果缺失则自动安装) - ✅ 安装/检查 Git - ✅ 克隆或更新仓库 - ✅ 创建并激活虚拟环境 - ✅ 安装所有 Python 依赖 - ✅ **安装 Ollama CLI**(通过官方安装程序或 winget) - ✅ **启动 Ollama 服务** - ✅ **下载默认 AI 模型** (llama3.2:1b - ~900MB) - ✅ 在 http://127.0.0.1:8765 启动 Web 仪表板 **首次设置需要 5-10 分钟**(主要是下载 AI 模型)。随后的运行是瞬间完成的。 ### 特定平台的注意事项 **Linux:** - 需要通过 `curl` 或 `wget` 进行远程安装 - Ollama 通过 ollama.com 的官方脚本安装 - 某些软件包的安装可能需要 `sudo` **macOS:** - 安装 Ollama 需要 Homebrew - 如果未安装 Homebrew,请从 [brew.sh](https://brew.sh) 获取 - 所有安装均无需 sudo **Windows:** - 为了在 Windows 上获得一致的依赖支持,**必须使用 Python 3.12** - 自动安装 Ollama 需要 [winget](https://learn.microsoft.com/en-us/windows/package-manager/winget/) - Windows 11 和 Windows 10(较新版本)已内置 winget - 替代方案:从 [ollama.com/download](https://ollama.com/download) 手动下载 Ollama - PowerShell:以普通用户身份运行(无需管理员权限) - 命令提示符:以普通用户身份运行(无需管理员权限) ### 快速入门故障排除 **“Ollama 安装失败”** - 从 [ollama.com/download](https://ollama.com/download) 手动下载并安装 - 安装后再次运行快速入门脚本 **“模型下载速度慢”** - llama3.2:1b 模型大小约为 900MB - 速度取决于您的网络连接 - 您可以取消(Ctrl+C)并在之后使用以下命令继续:`ollama pull llama3.2:1b` **“未找到 Python”或“未找到 Git”** - **Windows:** 从 [python.org](https://www.python.org/downloads/windows/) 安装 Python 3.12.x - 如果快速入门自动安装了 Python,请关闭当前终端并重新运行快速入门,以便应用 PATH 的更改 - **Linux/macOS:** 通过您的包管理器或 [python.org](https://www.python.org/downloads/) 安装 Python 3.10+ - 从 [git-scm.com](https://git-scm.com/downloads) 安装 Git - 确保两者都已到系统的 PATH 中 ## 手动安装 如果您更喜欢手动设置,或者快速入门脚本不适用于您的系统: 1. 克隆仓库 2. 运行启动脚本: **Linux/macOS:** ``` ./run.sh # Start web dashboard (default) ./run.sh qt # Start Qt desktop app ./run.sh both # Start both (web in background) ./run.sh stop # Stop all instances ./run.sh status # Check what's running ``` **Windows:** ``` run.bat # Start web dashboard run.bat qt # Start Qt desktop app run.bat stop # Stop all instances ``` 启动器将自动创建虚拟环境并安装依赖项。 ### Web 仪表板 配置仪表板: image 在上面的示例中,公共位置是使用经度/纬度定义的。您可以使用您自己的位置、邮政编码、地址和经度/纬度。 在浏览器中打开:**http://127.0.0.1:8765** image 搜索的初始结果。 带有 AI 生成内容的结果视图: image ### Qt 桌面应用 使用 `./run.sh qt` 启动(或在 Windows 上使用 `run.bat qt`)。 image 带有 AI 生成内容的结果视图: image ## 监控问题与 AI 洞察 **监控问题**功能允许您针对被监控的主题提出具体问题。AI 会分析最近的警报并生成针对性的洞察。 **问题示例:** - “我所在地区停电风险最高的预期时间是几点?” - “我现在应该清理车道,还是等雪停了再说?” - “是否有影响 I-95 公路的出行建议?” 洞察会作为警报列表上方的可展开卡片显示,展示: - **摘要**:对您问题的简要回答 - **解释**:带有支持证据的详细分析 在“设置”下的“AI 设置”中配置刷新间隔。 ## Web 仪表板 Web 界面位于:**http://127.0.0.1:8765** 设置页面会提示输入: - **事件/主题** - 要监控的内容 - **监控问题** - 用于获取 AI 洞察的具体问题 - **位置 / ZIP / GPS** - 地理位置过滤 - **半径(公里)** - 搜索区域 - **AI 设置** - 模型偏好,洞察刷新率 - **数据来源** - RSS feed,API 密钥 - **来源健康指标** - 各来源的获取健康状况表(上次成功时间、错误、延迟和条目计数) 附加数据视图:`http://127.0.0.1:8765/data` ## 零输入发现 如果您未提供任何 RSS feed 或 API 密钥,VigilantCore 依然会: - 自动检测您的城市/区域 + ZIP + 坐标(尽力而为)。 - 从 **30 个精选的全球来源**进行种子填充,并发现 RSS/Atom feed。 - 添加基于您的主题 + 位置构建的 Google News RSS 查询,以获得更广泛的覆盖。 - 添加当地的公共安全查询(警察、治安官、消防、应急管理)。 - 尝试发现您位置附近的当地警察/政府和当地新闻 RSS feed。 - 通过与您的主题和位置绑定的 Reddit 搜索 RSS 获取社交讨论。 ### RSS feed 与精选来源 默认情况下,您添加的任何 RSS feed 都会与内置的精选来源*合并*。 如果您只想使用自己提供的 RSS feed,请在“设置”中启用**“仅使用上面列出的 RSS feed”**。 要完全跳过 RSS 并仅使用 API/搜索提供商,请启用**“禁用 RSS 获取”**。 ### 轮询间隔 您可以控制应用检查新数据的频率(默认为 **5 分钟**)。 - Web UI:**轮询间隔(分钟)** - Qt UI:**轮询间隔(分钟)** ## 可选的搜索 API 密钥(获得更好的覆盖) 如果您设置了以下任何 API 密钥,VigilantCore 将自动使用它们。如果未设置,它将回退到 RSS 和内置的发现机制。 ### Google Programmable Search Engine (CSE) 1. 创建一个 Custom Search Engine,并将其设置为**搜索整个网络**: https://programmablesearchengine.google.com/ 2. 启用 Custom Search JSON API 并创建一个 API 密钥: https://developers.google.com/custom-search/v1/overview 3. 设置: ``` GOOGLE_CSE_API_KEY=your_key GOOGLE_CSE_CX=your_search_engine_id ``` ### Bing Web Search API 1. 在 Azure 中创建一个 Bing Search v7 资源: https://learn.microsoft.com/en-us/bing/search-apis/bing-web-search/create-bing-search-service-resource 2. 设置: ``` BING_SEARCH_KEY=your_key # 可选覆盖 BING_SEARCH_ENDPOINT=https://api.bing.microsoft.com/v7.0/search BING_SEARCH_MARKET=en-US BING_SEARCH_SAFE=Moderate ``` ### DuckDuckGo Web Search(无需密钥) 无需 API 密钥即可使用 DuckDuckGo HTML 搜索。在“设置”中启用/禁用它: - Web UI:**启用 DuckDuckGo web search** - Qt UI:**启用 DuckDuckGo web search** ### 网络共享 / 低带宽模式 如果您使用的是移动热点或网络共享连接,请启用: - Web UI:**针对共享 / 低带宽连接进行优化** - Qt UI:**针对共享 / 低带宽连接进行优化** 此模式通过限制来源发现/查询预算并限制 feed 轮询/发现的广度,来减少请求量。 ### Facebook & Instagram (Meta Graph API) Meta 不提供通用的公开搜索 API。访问通常需要: - 具有已批准权限的 Meta 应用 - 特定的主页/IG 商业帐户上下文 如果您拥有主页或 IG 商业帐户并希望进行定向摄取,请提交一个 issue,我们可以针对特定主页 ID 添加提供商。 ### 精选的全球来源(已扩展) 默认列表现在包括美国、欧洲、东欧、中国、澳大利亚、南美洲和非洲的主要媒体。有关完整列表,请参见 `vigilant-core/utils/sources.py`。 ## 辅助脚本 (script-helpers) 此仓库可以像该工作空间中的其他项目一样,使用共享的 `script-helpers` 库。 如果 submodule 不存在(例如在 CI 中),脚本将回退到最小化日志记录。 要在本地使用完整的辅助功能,请初始化一次 submodule: ``` ./update ``` ## 一行命令安装与运行(所有主要平台) 这些命令将创建本地虚拟环境、安装依赖并启动应用。 ### macOS / Linux ``` python3 -m venv venv && source venv/bin/activate && pip install -r requirements.txt && python src/main.py ``` ### Windows (PowerShell) ``` py -3.12 -m venv venv; .\\venv\\Scripts\\Activate.ps1; pip install -r requirements.txt; python src\\main.py ``` ### Windows (CMD) ``` py -3.12 -m venv venv && call venv\\Scripts\\activate && pip install -r requirements.txt && python src\\main.py ``` ## 一行命令安装脚本 对于非技术用户,这些脚本可处理设置和启动: ### macOS / Linux ``` ./install.sh ``` ### Windows (PowerShell) ``` ./install.ps1 ``` ## 一键打包(可执行文件) 构建原生应用包,以便非技术用户无需 Python 即可运行: ``` pyinstaller --onefile --windowed src/main.py --name VigilantCore ``` ## CI 自动化 (ci-helpers) GitHub Actions 使用来自 `ci-helpers` 的可重用工作流进行 lint、测试和构建: - 工作流文件:`.github/workflows/ci.yml` - 可重用工作流:`nikolareljin/ci-helpers/.github/workflows/python.yml@production` ## 开发者设置 ``` python -m venv venv source venv/bin/activate pip install -r requirements.txt python src/main.py ``` ## 本地 LLM 默认情况下,应用使用来自 Ollama 的 `qwen2.5:7b`。如果 RAM 为 8GB 或更小,它会自动回退到 `qwen2.5:3b`,除非设置了 `OLLAMA_MODEL`。您可以通过以下方式进行覆盖: ``` export OLLAMA_MODEL=qwen2.5:7b ``` ## 打包(一键应用) ``` pyinstaller --onefile --windowed src/main.py --name VigilantCore ``` ## 仓库提示 - **仓库名称**:`vigilant-core` - **分支保护**:在合并到 `main` 分支之前需要进行 PR 审查。 ### NewsAPI 时间窗口 您可以控制 NewsAPI 结果的新鲜度。默认值为 **6 小时**。 - Web UI:**新闻时间窗口(小时)** - Qt UI:**新闻时间窗口(小时)** ### NewsAPI 排序顺序 默认排序为**受欢迎程度** (popularity)。您也可以从“设置”UI 中选择**发布时间** (publishedAt) 或**相关性** (relevancy)。 ## 文档 完整文档可在 `docs/` 文件夹中找到: - [安装指南](docs/installation.md) - 详细的设置说明 - [配置指南](docs/configuration.md) - 所有配置选项 - [功能说明](docs/features.md) - 完整的功能文档 - [示例](docs/examples.md) - 实际使用示例(冬季风暴、停电等) ## 更新日志 有关发布历史和更改,请参见 [CHANGELOG.md](CHANGELOG.md)。 事件 schema 详情:[docs/event-normalization.md](docs/event-normalization.md) ## 克隆流量 ![克隆流量](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/414836dfb1034715.svg) _每日更新。过去 14 天的总计和独立克隆次数。_
标签:AI分析, AI风险缓解, LLM评估, Ollama, 库, 应急响应, 情报预警, 本地大模型, 本地监控, 逆向工具