작동 방식¶
다이어그램 한 장으로 보는 파이프라인¶
공개 뉴스 소스 (RSS, Yahoo Finance, ...)
│
│ 공유 수집 20분마다 (Celery Beat)
▼
┌─────────────────────────────────────────────────────────┐
│ 사용자별 팬아웃(Per-user fanout) │
│ │
│ 활성 사용자마다: │
│ 1. raw item을 해당 사용자의 관심종목 별칭으로 필터 │
│ (가볍고 로컬한 키워드 매칭). │
│ 2. Synthesis Engine이 5개 에이전트를 병렬 실행 │
│ (통과한 아이템마다). │
│ 3. Aggregate + Reflexion으로 top signal 생성. │
│ 4. Signal 행을 Postgres에 저장(RLS 적용). │
│ 5. 사용자의 ChromaDB 컬렉션에 임베딩. *(예정 — │
│ `embedding_worker`는 2026-04-22 기준 스텁; │
│ Claw chat은 현재 BM25로만 검색.)* │
│ 6. Redis 채널 signals:<user_id>에 publish. │
│ 7. FLASH + ALERT를 Telegram에 전송(연결된 경우). │
│ 8. FLASH + ALERT를 Web Push로 전송(구독한 경우). │
└─────────────────────────────────────────────────────────┘
│
▼
당신의 대시보드(WebSocket 실시간), 휴대폰, 데스크톱.
핵심 아이디어¶
수집은 공유, 합성은 사용자별¶
공개 뉴스 스크래핑은 전역적으로 한 번만 수행됩니다 — 그렇지 않으면 NVDA를 보는 열 명의 사용자가 각각 Yahoo에 열 번씩 요청하게 됩니다. 하지만 LLM 부담이 큰 합성 단계는 (사용자, 뉴스 아이템) 쌍마다 실행되므로, 점수와 티커 영향력은 모두에게 똑같은 값이 아니라 당신의 관심종목 맥락에 맞춰집니다.
하나가 아닌 다섯 개의 전문 에이전트¶
"이 뉴스가 중요한가, 왜 중요한가"를 하나의 큰 프롬프트로 묻는 대신, 더 작고 집중된 5개의 에이전트를 병렬로 실행합니다 — 각자 고유 레인(티커 수준 사실, 매크로 맥락, 섹터 역학, 리테일 심리, 규제)을 맡습니다. 이들의 출력은 가중 평균되어 최종 시그널이 됩니다. 에이전트 참조.
신뢰도가 낮은 초안에 대한 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 자체가 막습니다.
다음 단계¶
- 에이전트 — 다섯 에이전트가 각각 하는 일
- 점수 체계 — 긴급도 티어, impact / confidence, link 타입
- Claw chat (RAG) — 자유로운 질문이 본인의 시그널로부터 어떻게 답변되는지