工作原理¶
一张图看懂流水线¶
公开新闻源(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 面板里看到它被触发的频率。
数据库层的行级安全¶
每张用户专属表(signals、watchlists、user_settings、rag_query_logs 等)都有 PostgreSQL RLS 策略:user_id = current_setting('app.current_user')。FastAPI 会话以 Postgres 的 authenticated 角色运行——不是超级用户——所以 RLS 是实际生效的。跨用户的数据泄露由 Postgres 本身拦截,不是靠应用代码。
下一步¶
- Agents — 五个智能体各自做什么
- Scoring — 紧急度分级、impact / confidence、link 类型
- Claw chat (RAG) — 自由问题如何从你自己的信号中得到回答