跳转至

工作原理

一张图看懂流水线

公开新闻源(RSS、Yahoo Finance 等)
        │ 全局共享摄取,每 20 分钟一次(Celery Beat)
┌─────────────────────────────────────────────────────────┐
│  Per-user fanout                                         │
│                                                          │
│   对每个活跃用户:                                        │
│     1. 用该用户自选股的别名过滤原始条目                   │
│        (便宜的本地关键词匹配)。                          │
│     2. 合成引擎对每个通过的条目并行跑 5 个智能体。         │
│     3. 聚合 + Reflexion 得出 top signal。                │
│     4. 持久化 Signal 行(Postgres, RLS-scoped)。         │
│     5. 嵌入到该用户的 ChromaDB 集合。*(规划中——         │
│        截至 2026-04-22,`embedding_worker` 还是 stub;    │
│        Claw chat 目前只通过 BM25 检索。)*                │
│     6. 发布到 Redis 频道 signals:<user_id>。              │
│     7. 把 FLASH + ALERT 推到 Telegram(若已绑定)。        │
│     8. 把 FLASH + ALERT 推到 Web Push(若已订阅)。        │
└─────────────────────────────────────────────────────────┘
你的仪表盘(通过 WebSocket 实时)、你的手机、你的桌面。

关键思路

摄取共享,合成 per-user

公开新闻抓取在全局只跑一次——否则十个用户盯着 NVDA 就会各打 Yahoo 一遍。但 LLM 重活的合成环节是按 (user, news-item) 对跑一次,所以打分和 ticker 影响力反映的是 自选股的上下文,不是一刀切的分数。

五个专业智能体,不是一个

我们不是用一个大提示去问"这条新闻重要吗、为什么",而是并行跑五个更小、更聚焦的智能体——每个有自己的车道(ticker 级事实、宏观背景、行业联动、散户情绪、监管)。它们的输出加权平均得到最终信号。见 Agents

对低置信度草稿做 Reflexion

当聚合分处于临界区间,引擎会跑一次 reflexion:第二次 LLM 调用批判并重写草稿。你可以在每条信号的 Agent breakdown 面板里看到它被触发的频率。

数据库层的行级安全

每张用户专属表(signalswatchlistsuser_settingsrag_query_logs 等)都有 PostgreSQL RLS 策略:user_id = current_setting('app.current_user')。FastAPI 会话以 Postgres 的 authenticated 角色运行——不是超级用户——所以 RLS 是实际生效的。跨用户的数据泄露由 Postgres 本身拦截,不是靠应用代码。

下一步

  • Agents — 五个智能体各自做什么
  • Scoring — 紧急度分级、impact / confidence、link 类型
  • Claw chat (RAG) — 自由问题如何从你自己的信号中得到回答