Reddit社区笔记–AI驱动的真相检查器
该项目通过直接在浏览器中运行的AI驱动的“真相检查器”改进了Reddit。它的灵感来自X/Twitter的“社区笔记”功能,是解决Reddit等公共论坛上错误信息增加的一种解决方案。
它由三个主要部分组成:
- 前端Chrome扩展程序 (
reddit-extension/):在符合条件的Reddit帖子(r/news、r/politics、r/TheOnion)中注入一个面板,并调用后端显示验证结果。 - 后端FastAPI服务器 (
src/app.py,src/main.py):包裹LastMile的mcp-agent应用程序,暴露/verify端点,并协调Tavily搜索和LLM推理。 - AI+MCP工具:用于搜索的Tavily MCP服务器,LastMile的
mcp-agent用于工作流管理,以及通过增强LLM实现OpenAI LLM后端。
🌐 实时服务(已部署 ngrok LastMile's mcp-agent)
- MCP代理: https://1eb4wbtqipdcbkqwm8ve7wtnmo9mk0wk.deployments.mcp-agent.com/
- FastAPI后端: https://cef5c5f9c1f3.ngrok-free.app/
______________________________________________________________________
示例屏幕截图
______________________________________________________________________
🚀 用户快速入门指南
这是什么?
Reddit社区笔记是一个免费的浏览器扩展程序,可以自动检查Reddit上的帖子。它的工作原理类似于推特的社区笔记——当你访问一篇新闻帖子时,它会向你显示信息是否经过验证、有争议或需要更多背景信息。
如何安装(3个简单步骤)
- 下载扩展
- 点击此页面顶部的绿色“代码”按钮 - 选择“下载ZIP” - 将ZIP文件解压缩到计算机上的文件夹中
- 打开Chrome扩展程序
- 打开谷歌Chrome浏览器 - 类型 chrome://extensions 在地址栏中,按Enter键 - 打开 开发人员模式 (右上角的拨动开关)
- 加载扩展
- 点击 “未包装装载” 按钮 - 选择 reddit-extension 从下载的文件中选择文件夹 - 你完了!扩展现在处于活动状态
如何使用它
- 访问Reddit
- 首选 reddit.com - 导航到以下子版块之一: - r/news -新闻文章和时事 - r/politics -政治新闻和讨论 - r/TheOnion -讽刺新闻(看看它如何检测讽刺)
- 查看任何帖子
- 点击这些子版块中的任何帖子 - 在帖子内容下方向下滚动 - 你会看到一个 “AI真相检查器” 面板自动显示
- 阅读结果
- 面板将显示三种状态之一: - ✅ 正确 (绿色)-信息已由信誉良好的来源验证 - ❌ 不正确 (红色)-信息有争议或不准确 - ⚠️ 无法验证 (灰色)-没有足够的信息可供验证 - 每个结果包括: - 解释为什么它被标记成那样 - 支持或质疑该主张的新闻来源的链接 - 显示信息验证时间的发布日期
期待什么
- 第一次:AI搜索来源时,验证需要10-20秒
- 缓存结果:如果您或其他人之前验证了同一帖子,结果会立即显示
- 源链接:单击任何源链接阅读原始文章
- 自动:扩展程序自动工作,无需单击按钮
要尝试的示例帖子
想看看它的实际效果吗?试试这些帖子:
故障排除
面板未出现:
- 确保你在
r/news,r/politics,或r/TheOnion - 刷新页面(F5或Ctrl+R)
- 检查是否在中启用了扩展
chrome://extensions
它显示“错误”或“无法验证”:
- 对于非常新的帖子或晦涩难懂的话题来说,这是正常的
- 后端可能暂时不可用,请在几分钟后重试
要禁用它吗?
- 首选
chrome://extensions - 关闭“Reddit社区笔记”扩展
______________________________________________________________________
#
技术栈
- Tavily MCP(搜索/提取工具)
- LastMile的MCP代理
- MongoDB(
pymongo)司机 - OpenAI LLMs
- Chrome 扩展
ManifestV3(JavaScript) - FastAPI(Python 3)
- 用于REST调用和打包的Fetch/Web工具
uv用于依赖关系/env管理
______________________________________________________________________
前端(Chrome扩展程序)
- 生活在
reddit-extension/. - 将Twitter的“社区笔记”风格的卡片注入到每个与支持的子版块匹配的Reddit帖子中。
- 向发送POST请求
/verify带有帖子URL、标题、潜台词和检测到的时间戳的端点。 - 呈现后端返回的结构化响应(判决+来源)。
运行扩展
- 首先构建/准备后端(见下一节)。
- 在Chrome浏览器中,打开
chrome://extensions,启用 开发人员模式那么 加载未打包的. - 选择
reddit-extension/文件夹。 - 访问Reddit并验证帖子以查看注入的面板。
要尝试的示例URL:
- 红迪 r/news
- 红迪 r/TheOnion
- 红迪 r/news
______________________________________________________________________
后端(FastAPI+MCP代理)
- 核心MCP代理逻辑存在于
src/main.py(改编自LastMile的mcp-agent示例)。 src/app.py用FastAPI封装MCP应用程序并公开/verify终点。- 使用Tavily MCP服务器获取信誉良好的来源和OpenAI LLM(通过
OpenAIAugmentedLLM). - MongoDB缓存层(
src/db/)用于存储验证结果以降低API成本。使用哈希来存储Reddit帖子URL的唯一id。
项目结构
.
├── src/
│ ├── app.py # FastAPI server with /verify endpoint
│ ├── main.py # MCP agent with verify_content_agent tool
│ └── db/
│ ├── cache.py # MongoDB cache for verification results
│ ├── mongodb.py # MongoDB connection management
│ └── init_indexes.py # Database index initialization
├── reddit-extension/ # Chrome extension frontend
│ ├── content.js # Extension content script
│ └── manifest.json # Extension manifest
├── mcp_agent.config.yaml # MCP agent configuration
├── mcp_agent.secrets.yaml # API keys (references .env)
└── pyproject.toml # Python dependencies先决条件
- Python 3.11+
- 紫外线 用于管理虚拟环境。
- Tavilly API密钥和LLM提供商API密钥(OpenAI)-存储在机密文件中/
.env. - MongoDB(Atlas或本地)——可选,但建议用于缓存验证结果。
- 强烈推荐使用OpenAI
gpt-5-mini-2025-08-07效率和/或gpt-5.1-2025-11-13模型以获得最佳精度。
安装与运行
# Install dependencies
uv sync
# Start the FastAPI server
uv run uvicorn src.app:fastapi_app --reload --host 0.0.0.0 --port 8000
# Or use the console script entry point
uv run app服务器正在监听 http://0.0.0.0:8000。浏览器扩展程序应指向此处进行验证请求。
备注:该扩展当前配置为使用在以下位置部署的后端 https://cef5c5f9c1f3.ngrok-free.app/verify。要使用本地服务器,请在中更新URL reddit-extension/content.js.
______________________________________________________________________
人工智能图书馆/服务
| 组件 | 目的 |
|---|---|
| Tavily MCP服务器 | 使用以下命令对信誉良好的域名执行日期限制搜索 topic="news" 过滤新闻来源,返回带有发布日期的结构化搜索结果。 |
最后一英里 mcp-agent | 提供MCP工作流框架、代理生命周期、日志记录和服务器连接。 |
| OpenAI法学硕士 | 对Tavily结果进行推理,强制JSON模式,并总结验证。 OpenAIAugmentedLLM 当前已配置 gpt-5-mini-2025-08-07 模型。 |
工作流程强制执行:
- 日期过滤器与Reddit帖子时间戳对齐。
- 使用
topic="news"Tavily中的参数用于搜索具有发布日期的最新新闻来源。 - 信誉良好的域名白名单。
- 讽刺/虚假来源检测(不要将原创讽刺文章视为“证据”)。
- 返回多个带有描述的独立来源。
______________________________________________________________________
配置和秘密
.env
创建一个 .env 在repo根目录中。结构如下:
OPENAI_API_KEY=sk-...
GOOGLE_API_KEY=AIza...
TAVILY_API_KEY=tvly-...
MONGODB_URI=mongodb+srv://username:password@cluster.mongodb.net/reddit_verifier?retryWrites=true&w=majorityuv 自动读取 .env 运行命令时的文件。FastAPI服务器和MCP配置引用了这些环境变量。
MongoDB设置
MongoDB用于缓存验证结果,降低API成本,并提高重复后验证的响应时间。
MongoDB 阿特拉斯
- 在以下网址创建免费帐户 MongoDB 阿特拉斯
- 创建新集群(自由层M0就足够了)
- 创建数据库用户并设置密码
- 将您的IP地址添加到网络访问列表中(或使用
0.0.0.0/0发展) - 点击“连接”→ “连接您的应用程序”→ 复制连接字符串
- 替换 `
使用您的数据库用户密码和 随着 reddit_verifier`
- 将连接字符串添加到您的
.env文件为MONGODB_URI
连接字符串格式示例:
mongodb+srv://username:password@cluster.mongodb.net/reddit_verifier?retryWrites=true&w=majority缓存行为
- 缓存键:标准化URL的SHA256哈希(处理URL变化)
- 生存时间:30天(结果自动过期)
- 故障弱化:如果MongoDB不可用,验证仍然有效(只是没有缓存)
- 索引:首次启动时自动创建(TTL索引为
expires_at,唯一索引cache_key)
当相同的Reddit帖子被多次验证时,缓存显著降低了API成本。
mcp_agent.config.yaml
- 核心MCP代理配置(记录器、MCP服务器、代理定义、默认模型)。
- 更新
openai.default_model或者根据需要添加其他提供程序默认值。 - Tavily服务器使用
python -m mcp_server_tavily并期待TAVILY_API_KEY在环境中。
mcp_agent.secrets.yaml
- 存储提供程序API密钥和MCP服务器env覆盖。
- 结构如下:
openai:
api_key: "${OPENAI_API_KEY}"
google:
api_key: "${GOOGLE_API_KEY}"
mcp:
servers:
tavily:
env:
TAVILY_API_KEY: "${TAVILY_API_KEY}"永远不要提交真正的密钥。通过引用环境变量${VAR_NAME}并保持.env当地。
______________________________________________________________________
开发工作流程
- 更新依赖关系或代码。
- 跑
uv run python src/main.py(或特定的测试脚本),以确保代理仍然返回至少有两个源的有效JSON。 - 启动FastAPI服务器(
uv run uvicorn src.app:fastapi_app --reload). - 加载Chrome扩展程序并验证帖子。
- 检查终端日志中的“LLM原始响应”和“解析JSON”,以调试任何模式问题。
通过此设置,您可以快速迭代Chrome UI、后端逻辑或MCP/LLM指令,以提高验证质量。
API终点
GET /
健康检查端点。退货 {"status": "ok", "message": "Reddit Content Verifier API is running"}.
POST /verify
主要验证端点。接受带有以下内容的JSON正文:
url:Reddit帖子或链接文章的URLtitle:帖子标题subtext:发布正文(前300个字符)postDate:发布时间戳(ISO格式或相对时间)
返回一个JSON响应:
is_correct:true,false,或null(无法验证)explanation:人类可读的解释sources:源对象数组source_url和source_descriptionstatus:始终"success"
端点首先检查MongoDB缓存,如果不存在缓存结果,则仅调用MCP代理。
