Skip to content

Latest commit

 

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AI HOT — 数据管线

从 31 个 AI 信源自动抓取新闻,经 LLM 评估筛选、生成中文编辑摘要,产出精选信息流。

处理链路

RSS/站点抓取 → URL 去重 → LLM 预筛(AI 相关性)
            → 多维度评分(LLM 出 5 维,代码算加权)→ 质量闸门
            → 中文编辑摘要
            → 事件聚类(embedding + token 双轨,tier 翻转)
            → 精选 / 拒绝
            → 人工标注反馈 → 策略蒸馏 → 下一个循环

一篇新闻从抓取到出现在信息流中,经过以下固定步骤:

  1. 抓取入库 — 31 个信源定时拉取,URL hash 去重,原始发布时间提取
  2. 预筛 — LLM 判断文章是否与 AI 实质相关,不相关直接丢弃
  3. 评分 — LLM 对 5 个维度打分(信息密度 / 技术深度 / 商业价值 / 新颖度 / 大众价值),代码侧加上信源权威、一手加分、类别加分计算最终分
  4. 质量闸门 — 信息密度低于阈值或综合影响力不足的文章直接过滤
  5. 编辑摘要 — LLM 生成中文编辑标题和摘要,不做原文切片,只做概括
  6. 事件聚类 — 入库时用 embedding 语义判重(阈值 0.88),命中即归入同一簇;新文章信源 tier 高于当前 head 时自动翻转,保证官方一手源永远是主条。API 层做双轨:embedding 簇优先,token-based event_key 作 fallback。follower 仍走正常评分
  7. 精选判定 — 最终分 ≥ 阈值且过了闸门的进入精选,其余标为拒绝
  8. 信息流展示 — 同一事件簇只展示 head,related_articles 里折叠其余报道
  9. 人工校准 — 对 AI 判定做确认或纠错,纠错信号用作下一轮策略蒸馏的监督数据

信源分层

当前 31 个信源分三档,tier 决定权重系数和主条优先级:

  • T1(16 个)一手官方博客 — OpenAI / Anthropic / Google DeepMind / Meta AI / Mistral / xAI / NVIDIA / Microsoft AI / Apple ML / IBM Research / AWS ML / Cloudflare / GitHub AI / Cohere / Replicate / Stability AI
  • T1.5(6 个)心播媒体与行业日报 — Ars Technica AI / MIT Tech Review / TechCrunch AI / The Verge AI / VentureBeat AI / The Information AI
  • T2(9 个)聚合流与个人观点 — arXiv cs.AI/cs.CL/cs.LG / Hugging Face Blog / Google AI Blog / Hacker News / Papers with Code / Simon Willison / Import AI

四个界面

  • 看板 — 近 24 小时漏斗:抓取 → 评估 → 精选数量,文章状态分布,标注统计
  • 信息流 — 按时间轴展示文章,支持 全部 / 精选 / 待评估 / 已拒绝 / 人工确认 筛选,可按分类和时间来源细分。同一事件簇默认只展示主条,卡片上标出折叠数量,点击展开可切换查看簇内其他来源的报道
  • 系统 — 工作流控制台(信源健康度、抓取成功率、一键重试失败任务)、模型管理(新增/编辑/删除 LLM 接入,预筛/评分/摘要分别绑定)、策略 Prompt 配置、人工反馈回路
  • 策略实验台 — 蒸馏运行记录、候选 vs 基线的 F1 对比、可视化回滚
  • 录入 — 手动提交新文章

部署

需要:Node.js ≥ 18、PostgreSQL ≥ 14、LLM API(OpenAI 兼容协议,如 DeepSeek)。

# 首次搭建
npm install && cd frontend && npm install && cd ..
cp .env.example .env                  # 填入数据库连接和 LLM API
createdb ai_hot
npm run migrate                       # 建表 + 写入 31 个信源 + 策略 Prompt

# 历史数据回填(embedding 需要首次从 Hugging Face 拉模型,约 30MB)
npm run backfill:embeddings           # 为现有文章算 embedding
npm run backfill:clusters             # 基于 embedding 重建 duplicate_of 簇关系

# 启动
npm run dev                           # 后端 :3001
cd frontend && npm run dev            # 前端 :5173

运维命令

命令 作用
npm run prune:old 删除超过 24 小时的文章及关联数据
npm run distill:strategy 基于人工标注蒸馏新策略 Prompt + 评分配置 + few-shot,带评测闸,劣于基线自动拒绝
npm run eval 在 golden_dataset 上评测当前策略,产出 precision/recall/F1,写入 strategy_evaluations
npm run recalibrate:sources 按人工通过率回写 sources.tierDRY_RUN=true 只打印不写入)
npm run backfill:embeddings 为历史文章回填 embedding(用于去重和 kNN)
npm run backfill:clusters 扫描历史文章重建 duplicate_of 簇关系(支持 tier 翻转)
npm run refresh:editorial 批量重置并重生成中文摘要
npm run backfill:arxiv 回填 arXiv 论文的原始发布时间
npm run backfill:hf 回填 Hugging Face Blog 文章正文

LLM 接入

API Key 不写入代码。在系统页 → 模型管理录入接入配置,预筛、评分、摘要三个环节可绑定不同模型。Key 仅显示掩码,不回显明文。设置 MODEL_CONFIG_MASTER_KEY 后数据库中的 Key 加密存储。

未绑定模型时自动回退 .env 配置。

策略迭代

人工标注是策略蒸馏的输入,不是统计汇报的素材。每轮蒸馏做三件事,都要过评测闸才落库:

人工标注 → 分歧优先采样(模型误拒 + 模型误收)
         → LLM 产出新 prompt + 评分配置 delta + few-shot 样本
         → 权重/阈值网格搜索(用已有 llm_eval_logs 离线重算 F1)
         → 基线评测 vs 候选评测(runEvaluation)
         → 候选 F1 不劣于基线才落库
         → 写入 strategy_prompt_history 新版本 + 激活
         → 失败自动回滚到基线

配置现在都在 system_settings

  • strategy_prompt:当前线上 system prompt(激活版本)
  • scoring_config:权重、阈值、硬门槛、类别/tier 加分,use_soft_gate=true 时硬阈值改成软扣分
  • scoring_exemplars:注入到评分 prompt 的 few-shot 样本

评分链路会从人工标注库里拉 5 条最相似的条目作为 kNN 近邻参考。要关掉 kNN:SCORING_KNN_TOP_K=0

每个蒸馏产物都会在 strategy_prompt_history 留档,可通过 SQL 回滚:

UPDATE strategy_prompt_history SET is_active = (version = :target_version);
INSERT INTO system_settings (key, value) SELECT 'strategy_prompt', jsonb_build_object('prompt', prompt)
FROM strategy_prompt_history WHERE version = :target_version
ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value;

技术概要

TypeScript + Express 5 + PostgreSQL + React 19。LLM 走 OpenAI 兼容协议,rss-parser 解析 RSS,cheerio 回源抓正文,@xenova/transformers 本地跑 all-MiniLM-L6-v2 embedding(384 维,全部 CPU 推理,无外部 API 依赖)。

接下来做什么

路线图见 docs/DEVELOPMENT.md。近期优先级:

  • P0 AI 日报(每日 8:00 按模型/产品/行业/论文/观点五桶出稿)
  • P1 轻量热度信号(高频实体加分,纯代码不碰 prompt)
  • P2 主动信源发现(从 HN 外链和簇关系里推出候选源)
  • P3 策略蒸馏周期化自动激活

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages