Skip to content

SleepySoft/IntelligenceIntegrationSystem

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

IntelligenceIntegrationSystem

情报整合系统:通过抓取主流新闻网站的公开新闻,并使用AI进行分析和评分的情报系统。属于OSINT的一种。

项目地址:https://github.com/SleepySoft/IntelligenceIntegrationSystem

临时下线通知

20251210: 由于域名账户连同账号下域名被服务商ban,所以当前无法通过域名访问该Demo,正在和客服沟通恢复中。

起因

现在的新闻素质堪忧,特别是国内媒体。

  • 一方面现代社会每日产生的新闻数量巨大,并且参杂着毫无情报价值的水文。

  • 另一方面媒体看重点击量,所以标题成为了吸引点击的工具而非事件的概括。

我一直认为,公开信息中有四成只需要看标题,有两成看总结即可,而只有不到一成的信息有阅读全文的必要。而剩下的三成都是垃圾。

既然媒体们自己不体面,那么我来让新闻体面。

原理与实现

本程序核流程为:抓取 -> 提交到情报中心 -> 清洗、AI分析 -> 筛选并重发布 -> 归档

程序的结构如下:

抓取

本程序只通过RSS抓取公开新闻,原因在于这类新闻抓取难度小(本身就是给RSS阅读器的公开信息),且法律风险低。

程序中由ServiceEngine.py启动并驱动CrawlTasks目录下的抓取模块,

该服务框架会监控该目录下的文件更新并重新加载更新后的模块。

当前各个抓取模块主要通过CommonFeedsCrawFlow.py这个通用流程进行抓取并将抓取内容提交到IntelligenceHub。

抓取模块通过partial构建偏函数供抓取流程调用。

实际上采集数据只需要按照 class CollectedData 定义格式将数据通过 POST 提交到 /collect 这个端点的网络服务即可。 唯一需要注意的是如果设置了安全Token,则提交数据时要将该凭据附上。至于数据的来源,IHub并不关心。

使用通用流程的好处在于增加一个RSS源抓取非常方便,并且通用流程中实现了抓取记录和防重复抓取的功能。

如果想抓取非RSS源,或者需要抓取的网页需要特殊技术,则需要自己实现抓取器。同时注意法律风险。

当前实现的抓取方式有:

IntelligenceHub

  • IntelligenceHub.py(IHub):程序的核心。所有的信息都会提交汇总至此,由该模块进行处理、分析、归档,并提供查询功能。
  • IntelligenceHubWebService.py:为IHub提供网络服务的模块,包括API、网页发布和鉴权。
  • IntelligenceHubStartup.py:初始化所有子组件、IntelligenceHub和IntelligenceHubWebService。
  • IntelligenceHubLauncher.py:IHub的启动器,选用合适的backend载入IntelligenceHubWebService的wsgi_app,

    [20250910] 提供Flask原生、waitress、gunicorn三种WSGI服务器,默认服务器为waitress。

    注意gunicorn仅支持Linux。

    该文件不包含业务代码,几乎全部由AI生成,没有阅读的必要。如果对启动原理不理解,可以去搜索WSGI的机制。

IHub的处理流程请参见:IIS_Diagram.drawio

分析

情报分析的所有prompt。程序中的dict校验和该prompt指示的输出格式紧密相关,如果prompt改变,那么校验规则同样需要改变。

已知的问题为:

  1. 该prompt在小模型(甚至于65b)上表现不佳。

在小模型上AI通常不按规定格式输出,有可能是prompt + 文章内容太长,使AI无法集中注意力的缘故。

正式部署的环境使用的是满血云服务,这是一笔不小的开支。

  1. AI评分还是过于宽松,没有达到我的期望。

对于一些非情报新闻,AI还是给出了6分的评价,尽管我在prompt中强调不含情报的数据应该抛弃,但效果不佳。

对于情报的评分偏高,我理想中80%的新闻应当处于6分及以下的区间。

AI分析实现的主要文件。调用AI Client,组织数据、使用prompt进行分析,并解析和返回结果。

值得一提的是,自从使用了json_repair后,python的解析率几乎100%。接下来我会尝试在小模型上使用constrained decoding,看是否能提升表现。

内容发布

如前所述,网络服务由IntelligenceHubWebService.py提供。包含以下内容:

  • 登录与鉴权

    由 WebServiceAccessManager 和 UserManager.py 进行管理。其中:

  • WebAPI

    '/api'接口:采用 ArbitraryRPC.py ,不用额外编码或配置即可调用Stub的所有函数,同时支持任意层次的转发调用。

    '/collect'接口:收集采集情报。

    其它API接口:子功能,如Log、统计、监控等等,由对应模块注册路由。

  • 网页

    不使用前后端的架构,所有内容由服务器生成。包括以下文件:

    PostManager.py:根据 posts 目录下的markdown文件生成HTML。

    ArticleRender.py:文章页面。

    ArticleListRender.py:文章列表页面。

    intelligence_search.html:文章查询页面(20251029:重构为前后端分离)。

    (旧)ArticleTableRender.py:文章列表项。 (新)intelligence_table.js:文章列表项。

    子功能页面,由对应模块提供,前后端分离。这里就不列出了,详见登录后的管理页面。

存储

程序会生成以下内容:

  • 情报存储(主要)

    MongoDB,数据库名:IntelligenceIntegrationSystem。包含三个记录:

    • intelligence_cached:Collector提交的采集到的原始新闻数据。
    • intelligence_archived:经过处理并归档的数据。
  • 向量数据库

    供向量查询,保留。

    如果开启,会存储于:IntelligenceIndex目录

  • 鉴权信息

    文件:Authentication.db

    UserManager.py 使用,可通过 UserManagerConsole.py 工具进行管理。

  • 抓取内容

    目录:content_storage

    分网站和RSS子项二级目录,可以通过查看抓取内容对抓取脚本进行问题分析。

  • 对话内容

    目录:conversion

    和AI的沟通记录,可以通过查看记录对AI分析的效果进行评估。

  • 生成网页

    目录:generated

    PostManager.py 生成的网页

环境配置及部署运行

依赖软件

  • MongoDB

程序使用MongoDB数据库存储情报文档,这是一个NoSql数据库,请在官网下载:

https://www.mongodb.com/products/self-managed/community-edition

同时建议安装mongodb tools,用以导出及导出数据库(从某个版本开始命令行工具不再和MongoDB主程序打包):

https://www.mongodb.com/try/download/database-tools

创建与激活虚拟环境(可选)

本项目建议使用python版本为3.10以上。当然,不创建虚拟环境,直接使用系统默认的python环境也不是不行。

所谓python虚拟环境,其实非常简单,它就是一个目录,当你切换到这个虚拟环境时,使用的解析器、安装的库、使用的库,都仅限于该目录下,从而和其它环境隔离。

知道这个原理后,大家应该能想到:使用pycharm时,选择已创建的虚拟环境其实就是选择这个目录下的python.exe。

创建虚拟环境主要有三种方法:

  • 原生的venv
  • Anaconda(及其兼容方法)
  • uv
venv
# 创建虚拟环境
# - 通常在项目目录下执行以下命令,虚拟环境的python版本跟你当前运行的python环境有关
# - 对我来说,通常是在anaconda下创建一个指定版本python的虚拟环境,再使用这个虚拟环境创建venv
# - (那为什么不直接用anaconda?好问题。)

python -m venv .venv

# 切换到该虚拟环境(接下来安装依赖前都需要先切换到该虚拟环境,下同)

# ---- Windows ----
.venv\Scripts\activate.bat

# ----- Linux -----
source .venv/Scripts/activate
Anaconda

Anaconda好处是方便,缺点是重

下载:https://www.anaconda.com/download

# 创建虚拟环境
conda create -n iis python=3.10

# 切换到该虚拟环境
conda activate iis
uv

这是现在流行的工具,非常轻量,而且快,不过我还不是很熟悉。以下内容来自AI。

# 安装uv
pip install uv

# 创建虚拟环境
uv venv

# 切换到该虚拟环境
.venv\Scripts\activate.bat

# 接下来可以使用pip install -r,也可以使用uv的方式安装依赖(自行查阅)。

程序部署

# Clone this project to your local
git clone https://github.com/SleepySoft/IntelligenceIntegrationSystem.git

# Enter this project dir
cd IntelligenceIntegrationSystem

# Important: Fetch sub modules
git submodule update --init --recursive

# -------------------------------------------------------------------------------
# ! Reference to above: Create virtual environment and switch to this environment
# -------------------------------------------------------------------------------

# Old pip version will not support utf-8, so upgrade to newest pip first.
python.exe -m pip install --upgrade pip

# Install dependency
pip install -r requirements.txt

# If has dependency issue when using upper command
pip install -r requirements_freeze.txt

# ------------------------------------------------------------------------------------
# ! Before launching program, you should do some config first (read following section)
# ------------------------------------------------------------------------------------

# After pip install. Install playwright's headless browser
playwright install chromium

# Run main service
python IntelligenceHubLauncher.py

# Run collectors
python ServiceEngine.py

程序以外的配置

  • 重要:运将 config_example.json 复制为 config.json,按照实际情况更改配置(默认能启动,但不能进行分析)。

配置主要在 IntelligenceHubStartup.py 中载入,阅读该文件可以知道各配置项的用法。

如果想使用AI进行情报分析,需要配置 ai_service 项,包括token。

如果想使用咸鱼上购买的批量14元key,需要配置 ai_service_rotator 项,指定key文件。

对于抓取外网新闻,需要配置 global_site_proxy。

使用

  • 程序运行后,打开 localhost:5000/login 输入刚才配置的账号密码进入后台页面。

  • 打开localhost:5000则是无密码的公开页面。

其它工具

已接入的网站

{ domain: "voanews.com", nameCN: "美国之音", country: "USA", flag: "🇺🇸", accessibleInChina: false },
{ domain: "bbc.com", nameCN: "英国广播公司", country: "UK", flag: "🇬🇧", accessibleInChina: false },
{ domain: "cbc.ca", nameCN: "加拿大广播公司", country: "Canada", flag: "🇨🇦", accessibleInChina: false },
{ domain: "rfi.fr", nameCN: "法国国际广播电台", country: "France", flag: "🇫🇷", accessibleInChina: false },
{ domain: "dw.com", nameCN: "德国之声", country: "Germany", flag: "🇩🇪", accessibleInChina: false },
{ domain: "abc.net.au", nameCN: "澳大利亚广播公司", country: "Australia", flag: "🇦🇺", accessibleInChina: false },
{ domain: "elpais.com", nameCN: "国家报", country: "Spain", flag: "🇪🇸", accessibleInChina: false },
{ domain: "investing.com", nameCN: "英为财情", country: "International", flag: "🌍", accessibleInChina: true },
{ domain: "aljazeera.com", nameCN: "半岛电视台", country: "Qatar", flag: "🇶🇦", accessibleInChina: true },
{ domain: "aa.com.tr", nameCN: "阿纳多卢通讯社", country: "Turkey", flag: "🇹🇷", accessibleInChina: true },
{ domain: "nhk.or.jp", nameCN: "日本广播协会", country: "Japan", flag: "🇯🇵", accessibleInChina: true },
{ domain: "xinhuanet.com", nameCN: "新华社", country: "China", flag: "🇨🇳", accessibleInChina: true },

意见和建议

如果有意见和建议,可以到这个讨论下留言:https://zhuanlan.zhihu.com/p/1957783829684154704

或者可以加入wx讨论组:

img.png

About

Intelligence Integration System with AI and Workflow

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published