应用截图

一、为什么要做虚假新闻检测?

你有没有刷新闻时遇到过这种情况:

  • 一条新闻看起来很震撼,但心里总觉得哪里怪怪的;
  • 想去核实一下,却发现查找证据很麻烦,最后只能不了了之;
  • 等过几天,才发现原来它是虚假的,甚至是被恶意传播的。

这就是 虚假新闻的危害

  • 它不仅浪费我们的时间和注意力,还可能影响公众舆论,甚至在某些情况下左右政策或市场。
  • 人工去逐条核查新闻,几乎不可能。

于是问题来了:能不能让 AI 帮我们做事实核查?
答案是:当然可以!

这就是本文要介绍的项目 —— Fake News Detector(虚假新闻检测器)
它基于 大语言模型 (LLM)BGE-M3 向量嵌入模型,能够自动提取新闻中的核心声明、搜索证据、比对语义,最终判断新闻是真是假。
更棒的是,它自带 Streamlit 前端界面,一键启动就能用。


二、项目结构:代码到底长什么样?

很多朋友第一次打开项目都会问:

“这么一个事实核查系统,背后是怎么组织代码的?”

别急,我们先来看看目录结构:

fake-news-detector/
│
├── app.py                 # 主应用程序入口
├── fact_checker.py        # 事实核查核心逻辑
├── auth.py                # 用户认证系统
├── db_utils.py            # 数据库操作工具
├── pdf_export.py          # PDF报告生成
├── requirements.txt       # 项目依赖
├── api.py                 # API接口
├── gunicorn.conf.py       # Gunicorn配置
├── start_server.sh        # API启动脚本
├── .gitignore             # Git忽略文件
├── LICENSE                # 开源许可证
├── README.md              # 项目说明文档
│
├── test/                  # 测试目录
│   ├── api_test_page.html # api测试代码
└── docs/                  # 文档目录
    ├── images/            # 文档中使用的图片
    │   └── screenshot.png # 应用截图
    ├── api_doc.html       # API文档
    └── usage.md           # 详细使用说明

简而言之:

  • app.py:项目的“大门”,Streamlit 界面从这里启动;
  • fact_checker.py:项目的“心脏”,事实核查的核心逻辑;
  • auth.py:如果你想做成 SaaS 服务,就靠它来做登录注册;
  • db_utils.py:数据库工具,存储用户查询历史;
  • pdf_export.py:一键生成 PDF 报告,非常适合做研究或者新闻追踪;
  • api.py:如果你要对接其他系统,可以通过 API 调用;

是不是很清晰?一眼就能找到自己想动手改的地方。


三、项目核心亮点:它比普通工具强在哪?

这个 Fake News Detector 并不是随便拼凑的几个脚本,而是有一些非常亮眼的功能:

  • 🔍 自动提取新闻声明:不用你一句句挑,系统会自动找出“值得核查的点”;
  • 🌐 实时网络搜索:集成 DuckDuckGo,不用你自己翻网页;
  • 🤖 语义匹配:用 BGE-M3 大型嵌入模型 计算新闻和证据的相关性;
  • 📊 分块证据处理:即使证据文章很长,也能自动切片找到关键部分;
  • 事实核查结论:给出 “正确 / 错误 / 部分正确” 的判断,还能展示推理过程;
  • 🔄 流式处理界面:核查进度会实时展示,就像在看 AI 思考过程一样。

换句话说,它不像传统搜索那样只丢一堆链接给你,而是 直接回答问题:这条新闻是真是假?


四、如何快速开始?

很多人一看到 AI 项目就会担心:是不是环境特别复杂?
其实并不难,我来手把手教你。

1. 环境要求

  • Python 3.12
  • Qwen2.5 模型(或兼容 OpenAI API 的其他大模型)
  • BGE-M3 嵌入模型(可以本地,也可以远程 API)

2. 安装步骤

# 1. 克隆仓库
git clone https://github.com/yourusername/fake-news-detector.git
cd fake-news-detector

# 2. 安装依赖
pip install -r requirements.txt

3. 配置模型

打开 fact_checker.py,找到模型路径这行:

self.embedding_model = BGEM3FlagModel('/path/to/your/bge-m3/')

改成你自己的模型路径即可。

4. 启动应用

streamlit run app.py

然后访问:
👉 http://localhost:8501

你会看到一个界面,可以直接输入新闻内容进行核查。


五、如何使用:用户视角的完整流程

整个操作流程非常直观,大概是这样:

  1. 输入新闻内容

    • 直接复制粘贴新闻文本到输入框。
  2. 系统自动执行以下步骤

    • 提取新闻声明;
    • 搜索相关证据;
    • 分析语义相关性;
    • 给出事实核查结论。
  3. 输出结果

    • 结论会标注“正确/错误/部分正确”;
    • 相关证据和推理过程会一并展示。

💡 举个例子:
假设你输入的新闻是 —— “某地发现外星人基地”。
系统会:

  • 提取声明 → “某地发现外星人基地”;
  • 搜索证据 → 返回科学网站和新闻报道;
  • 分析相似度 → 判断这些证据是否支持该声明;
  • 最后输出 → “错误(没有可靠证据支持外星人基地存在)”。

六、系统架构:它是怎么一步步做判断的?

这个项目其实就是一个 管道式架构,每个阶段完成一个任务。

  1. 提取阶段:用 LLM 从文本中提取可核查的声明。
  2. 搜索阶段:通过 DuckDuckGo API 找到相关网页。
  3. 相关性排序:BGE-M3 模型计算语义相似度。
  4. 证据处理:长文章切片,挑出最相关的部分。
  5. 判断阶段:结合证据,给出核查结论。

📊 我画个简单流程图,方便理解:

flowchart TD
    A[输入新闻文本] --> B[提取声明]
    B --> C[网络搜索获取证据]
    C --> D[语义相似度计算]
    D --> E[证据分块处理]
    E --> F[核查判断:真/假/部分正确]
    F --> G[展示结论与推理过程]

七、技术栈:背后的秘密武器

模块 技术选型 说明
前端界面 Streamlit 快速构建交互式 Web UI
大语言模型 Qwen2.5-14B 提取声明、推理
嵌入模型 BGE-M3 语义相似度计算
搜索引擎 DuckDuckGo API 获取实时证据
辅助工具 NumPy, OpenAI API 兼容 数据处理与兼容接口

这一套组合拳,既保证了准确性,又能让系统实时运行。


八、常见问题(FAQ)

Q1: 这个工具支持中文新闻吗?

✅ 支持。Qwen2.5 是中文能力很强的大模型,BGE-M3 也有多语种支持。

Q2: 能在服务器上跑吗?

当然可以。你可以用 gunicorn.conf.py 配合 start_server.sh 部署 API 服务,再通过反向代理暴露出去。

Q3: 数据会保存吗?

默认情况下,查询记录可以存入数据库(db_utils.py),也可以关掉存储功能。

Q4: 我可以把结果导出吗?

可以。项目内置了 pdf_export.py,一键导出 PDF 报告,非常适合做研究和存档。

Q5: 和 ChatGPT 直接问“这条新闻真假”有什么区别?

差别在于:Fake News Detector 会给出证据链和推理过程,而不仅仅是一个回答。它更透明、更可验证。


九、如何贡献与拓展?

这个项目是 MIT 开源协议,你可以放心使用和修改。
如果你想贡献代码,可以这样做:

  1. Fork 仓库
  2. 新建分支:git checkout -b feature/xxx
  3. 提交改动:git commit -m 'Add xxx feature'
  4. 推送分支:git push origin feature/xxx
  5. 提交 Pull Request

未来的拓展方向包括:

  • 集成更多搜索引擎(如 Bing、Google Custom Search);
  • 增加多模态核查(图片/视频);
  • 优化界面交互体验;
  • 引入知识图谱增强逻辑推理。

十、项目地址与联系信息


总结

Fake News Detector 是一个很实用的开源项目,尤其适合:

  • 研究新闻真伪的学者;
  • 想要构建事实核查工具的开发者;
  • 对 AI 应用感兴趣的学习者。

它的亮点在于:自动化、可解释、可扩展
不仅能判断新闻真假,还能展示证据和推理链,让整个过程透明可信。

如果你也对抗击虚假信息感兴趣,不妨动手试试这个项目!