CaptainYifei/fake-news-detector

基于LLM和证据检索的虚假新闻自动检测系统

📚 项目概述

AI 虚假新闻检测器 – 一个基于 Streamlit 的网页应用,允许用户验证新闻文章的真实性。它将大语言模型(LLM)提示、语义嵌入检索和多步骤主张验证串联起来。系统支持中文、英文、日文和韩文,可与任何 OpenAI 兼容的模型服务(本地 Ollama、LM Studio、OpenAI 或自定义 API)配合使用。


🔑 核心功能

功能 说明
多语言支持 自动检测输入语言,并可输出中文、英文、日文或韩文结果。
三节点事实核查流水线 1️⃣ 使用 LLM 从文章中提取核心主张。2️⃣ 重写查询,检索网络证据(默认使用 DuckDuckGo,可选 SearXNG),使用 BGE‑M3 嵌入进行排序,按相似度和实体匹配过滤。3️⃣ 将主张分解为原子语句,基于证据回答,并聚合最终结论。
模型无关后端 支持 Ollama(默认 Qwen2.5‑3B + BGE‑M3)、LM Studio、OpenAI GPT 模型,或任何遵循 OpenAI API 模式的服务。
证据门控 可配置的 top‑K、相似度阈值和实体门控,确保只有高质量来源进入验证步骤。
用户与数据管理 多用户登录,历史记录持久化存储于本地数据库,支持验证报告的 PDF 导出。
API 提供轻量级 REST 端点(/check),与网页 UI 功能一致,支持程序化调用。

🛠️ 快速开始(Linux/macOS)

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

# 2. 安装 Python 依赖(需 Python 3.12+)
pip install -r requirements.txt

# 3. 安装并运行 Ollama(推荐)
curl -fsSL https://ollama.com/install.sh | sh
ollama pull qwen2.5:3b   # LLM
ollama pull bge-m3:latest # 嵌入模型

# 4. (可选)在 model_config.json 中配置不同的搜索后端

# 5. 启动 UI
streamlit run app.py

在浏览器中打开 http://localhost:8501


📡 使用 API

python api.py   # 在端口 8080 启动服务器

curl -X POST http://localhost:8080/check \
  -H "Content-Type: application/json" \
  -d '{
        "text": "新闻正文…",
        "api_base": "http://localhost:11434/v1",
        "model": "qwen2.5:3b",
        "embedding_model": "bge-m3:latest",
        "search_engine": "duckduckgo"
      }'

响应包含提取的主张、检索到的证据和最终结论(TRUEFALSEUNVERIFIABLE)。


📂 仓库结构

fake-news-detector/
├─ app.py                # Streamlit 前端
├─ api.py                # REST 服务
├─ fact_checker.py       # 协调三个节点
├─ fact_checking/        # 节点实现
├─ model_manager.py      # 加载配置并创建 LLM/嵌入客户端
├─ model_config.json     # 提供商、模型和搜索默认值
├─ auth.py, db_utils.py  # 用户认证与 SQLite 辅助工具
├─ pdf_export.py         # 生成 PDF 报告
├─ requirements.txt
└─ docs/ …               # 使用指南、API 文档、截图

📦 配置亮点(model_config.json

  • 提供商 – 定义 Ollama、LM Studio 等的基地址和模型 ID。
  • 默认值 – 选择使用的 LLM/嵌入模型、搜索引擎、输出语言以及证据过滤阈值(evidence_top_kevidence_min_similarityevidence_entity_gate)。
  • 切换提供商只需编辑 JSON 文件;代码在启动时自动读取。

🐞 已知问题与故障排除

  • 模型卡顿或返回空值 – 确认 Ollama 服务正在运行(ollama list),并检查 model_config.json 中的 base_url 是否正确。
  • 无搜索结果 – 检查网络连接;ddgs 包装器会自动回退到多个 DuckDuckGo 后端。若全部失败,可启用可选的 SearXNG 后端。
  • 无法验证的结论 – 可能由相似度阈值过高或实体门控过滤掉所有候选者导致;请调整 evidence_min_similarity 或将 evidence_entity_gate 设为 false
  • 多语言输出问题 – 确保所选 LLM 支持目标语言;较大的 OpenAI 模型通常更可靠地处理四种语言。

📄 许可证

MIT – 详见 LICENSE


TL;DR – 本仓库提供一个开箱即用、本地托管的 AI 事实核查系统,结合 LLM 提示、语义搜索和多步骤验证,具备网页 UI、API 和多语言支持。这是一个真实、可运行的 AI 软件项目。

相关

  • 项目
  • 项目
  • Dispatch
  • 项目
  • 项目