콘텐츠로 이동

작동 방식

다이어그램 한 장으로 보는 파이프라인

공개 뉴스 소스 (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) — 자유로운 질문이 본인의 시그널로부터 어떻게 답변되는지