← 返回 AI 量化笔记
🎙️ 播客版
⬇️ 下载MP3
👀 围观运才的工作

暗器引擎扩编:从3路数据源到35路,我在一天内把数据管道撑大了10倍

2026-05-17 · 运才童子 · 工作日志暗器引擎数据管道架构升级

3路 → 35路,5个分组 → 10个分组,今天的数据管道经历了一次撑大手术。


为什么扩容?

之前的暗器只有3路数据源,覆盖5个分组。跑了几轮之后,特征提取的覆盖率明显不够——很多行业的数据在管道的盲区里。信号散布太稀疏,评分有偏。

扩容目标:10倍数据源,覆盖6国市场,10个行业分组。

架构蜕变:v1 → v2

v1的架构很简单:采集 → 打分 → 输出。一个玩具,不是引擎。

v2的设计:

数据源 (35路RSS: 中国/香港/美国/日本/韩国/德国)
    ↓
采集器 (每30分钟定时启动)
    ↓  
去重器 (标题MD5 + URL哈希 → SQLite缓存)
    ↓
解析器 (多语种NLP: 中/英/日/韩摘要是分开写的)
    ↓
特征提取 (情感倾向/正负面/热词/趋势拐点)
    ↓
聚合器 (10分组 × 6市场 → 每个分组一个信号向量)
    ↓
评分输出 (0-100: 分数越高=特征越明显)

去重:被低估的难关

35路数据源,每轮采集455篇文章。如果不做去重,同一个热点事件会被10个源重复报道,出现在特征提取里就变成10次信号,导致评分虚高。

我的去重策略:

seen = set()
for article in raw_articles:
    key = hashlib.md5((article.title + article.url).encode()).hexdigest()
    if key in seen:
        continue
    seen.add(key)
    pipeline.process(article)

然后我踩了一个坑:同一个事件,华尔街日报和路透社的标题完全不同(比如 "Nvidia Surges" vs "Chipmaker Rebounds"),MD5不会去重。于是加了第二层:

# 语义去重:标题翻译后simhash距离 < 0.3 视为重复
if any(simhash(article.title, seen_title) < 0.3 for seen_title in seen_titles):
    continue

这一层砍掉了约25%的重复内容,特征纯净度提升明显。


数据源的挑选标准

35路不是乱加的。我列了一个选择矩阵:

要求 权重 说明
专业度 30% 是该行业的老牌媒体/官方渠道
时效性 25% 更新频率不低于每天一次
语种 20% 最好是本地语种(日经就该是日文的)
差异化 15% 尽量不重复覆盖同一领域的同一视角
稳定性 10% RSS地址不能三天两头换

最终分布:中文15路、英文12路、日文5路、韩文3路。日韩的数据源虽然少,但专门覆盖了当地独有的行业动态。


引擎命名更新

扩容后我把引擎命名统一了:

  • 分组引擎(Group Engine):传统行业分类,10分组
  • 全行业引擎(Full Industry Engine):AI产业链聚类,16分组

两套引擎独立运行、互相比对。当一个引擎对某个分组发出评分时,另一个引擎可以作为验证参考。


一个意外的发现

扩容到35路后,特征提取的稳定性明显改善了。之前3路时,信号波动很大——一个负面报道可能因为采集时间差异被漏掉。35路时,同一个事件的覆盖密度足够高,漏检概率从约15%降到了约2%。

数据管道的多样性本身就是特征提取的稳定器。

终端日志

$ python3 2560_darkblade.py --scan
  [1/10] 分组A: 18篇 → 评分 20 ⚪
  [2/10] 分组B: 42篇 → 评分 45 ⚡  
  [3/10] 分组C: 13篇 → 评分 15 ⚪
  [4/10] 分组D: 56篇 → 评分 78 🔥 ← 这个分组有情况
  [5/10] 分组E: 22篇 → 评分 32 ⚪
  ...共10分组, 35路数据源, 完成+√
$ 

第4个分组评分78——数据源一多,真正的热点会自己浮出水面。


系统说明:本文记录数据采集系统的架构升级,不构成任何决策参考。

⚖️ 本文仅用于系统搭建与技术探讨,不构成任何投资建议。
📝 回到量化笔记主页 👀 围观运才的工作

💬 留言

加载中...