๋ด๊ฐ ์์ ํ๊ณ ์์ฐ์ด๋ก ์กฐ๊ฐํ๋, ์๊ธฐ์งํ ๊ฐ์ธ SNS ํ๋ซํผ
Personal SNS Platform whose recommendation algorithm you own and evolve in natural language.
๊ธฐ์
์๊ณ ๋ฆฌ์ฆ โ Hedwig (๋ด๊ฐ ์์ ํ ์๊ธฐ์งํ ์ถ์ฒ ์์ง)
ํฌ๋ก์คํ๋ซํผ ์ ํธ๋ฅผ โก critical / ๐
daily / ๐ weekly / ๐ฌ on-demand / ๐ฑ feed ๋ค์ฏ ์๊ฐ์ถ์ผ๋ก ์๋น
git clone https://github.com/minsing-jin/hedwig.git
cd hedwig
uv venv .venv && source .venv/bin/activate
uv pip install -e .
python -m hedwig --quickstart๐ OpenAI API ํค ํ๋๋ง ์์ผ๋ฉด ๋จ. Supabase ยท Slack ยท Discord ๋ชจ๋ ์ต์ . ๐ ๋ธ๋ผ์ฐ์ ๊ฐ
http://127.0.0.1:8765/chat์ผ๋ก ์๋ ์ด๋ฆผ.
| # | ์์น | ์๋ฏธ |
|---|---|---|
| 1๏ธโฃ | Algorithm Sovereignty | criteria.yaml + algorithm.yaml + sovereignty.yaml + feeds.yaml ๋ชจ๋ ์ฌ์ฉ์ ์์ . ๊ฐ์ฌยท์ด์ ๊ฐ๋ฅ |
| 2๏ธโฃ | Self-Evolving Fitness | daily micro ยท weekly macro ยท monthly meta 3์ธต ์งํ. Karpathy autoresearch ํจํด์ ์๊ณ ๋ฆฌ์ฆ ๊ตฌ์กฐ์ ์ ์ฉ |
| 3๏ธโฃ | Quad-Input Sculpting | explicit (NL ํธ์ง) + semi (Q&A ์์ฉ) + implicit-active (๐/๐) + implicit-passive (dwell/skip/share) |
| 4๏ธโฃ | 5-Tier Temporal Lattice | โก critical ยท ๐ daily ยท ๐ weekly ยท ๐ฌ on-demand ยท ๐ฑ feed ๋์ ์๋น |
| 5๏ธโฃ | Absorption Gradient | L1 API โ L2 OSS ์ฝ๋ ์ฒดํ โ L3 ํจํด ์ถ์ถ. ์ ๊ท Novelty๋ ์ตํ |
| 6๏ธโฃ | Web = Engine ๊ณ๊ธฐํ | dogfooding + sandbox. ์์ ๊ป๋ฐ๊ธฐ ๊ธ์ง |
| 7๏ธโฃ | Cognitive Augmentation | ์ฃผ์ ยท ํธํฅ ยท ์์ ๊ธฐ์ต ยท ๋ฉํ์ธ์ง 4ํ๊ณ ๋งคํ |
| 8๏ธโฃ | Hybrid Ensemble | ๊ธฐ๋ณธ prior + ๋ก์ปฌ LTR์์ ์์ํด, ์ถฉ๋ถํ feedback/dependency/model์ด ์์ ๋ LightGBMยทbanditยทsequential ๋ฑ ์ ํ์ SOTA backend๋ก ํ์ฅ. ๊ฐ์ค์นยทfeature ์์ฒด๊ฐ ์งํ ๋์ |
| 9๏ธโฃ | Personal SNS Platform | ์๋น UX ์์ฒด๊ฐ ์๊ณ ๋ฆฌ์ฆ ํ๋ฉด + ํ๋์ ํธ ์ ๋ ฅ. ๋ธ๋ฆฌํ=pull, Feed=push |
๐ ์ ์ฒด ๋น์ : docs/VISION_v3.md
/chat ํ ํ๋ฉด์์ LLM์ด 11๊ฐ ๋๊ตฌ๋ก ์๋ ๋ผ์ฐํ
:
| ์ฌ์ฉ์ ๋ฐํ | ํธ์ถ๋๋ ๋๊ตฌ |
|---|---|
| ๐ฐ "์ค๋ daily ๋ธ๋ฆฌํ ๋ณด์ฌ์ค" | get_brief |
| ๐ "agent framework 5๊ฐ ๋ฝ์์ค" | search_signals |
| ๐ฌ "์ด URL ์์ฝ: youtu.be/..." | summarize_url (yt-dlp ์๋ง ์ถ์ถ) |
| ๐ "agent ์์ฃผ๋ก ๋ฐ๊พธ๊ณ crypto ๋นผ" | propose_criteria โ diff โ apply |
| ๐๏ธ "bandit ๋น์ค 0.3์ผ๋ก" | propose_algorithm โ diff โ apply |
trigger_pipeline |
|
| ๐งฌ "์ด๋ฒ ์ฃผ ์งํ ์์ฝ" | get_evolution_timeline |
| ๐ "์ต๊ทผ RecSys oral ๋ ผ๋ฌธ" | live_search (exa.ai) |
๐ก ChatGPT ์คํ์ผ ์ฌ์ด๋๋ฐ + ๋ํ ์์ + ๋งํฌ๋ค์ด/์ฝ๋๋ธ๋ก ๋ ๋๋ง.
| ์ธต์ | ํธ๋ฆฌ๊ฑฐ | ํํ | ์์น |
|---|---|---|---|
| โก Critical | ์ฆ์ (15-30๋ถ polling) | push | python -m hedwig --critical-loop |
| ๐ Daily | ๋งค์ผ ์์นจ | LLM brief | /brief + Slack/Discord/Email |
| ๐ Weekly | ์ฃผ 1ํ | ์ ๋ต brief + ๊ธฐํ ํฌ์ฐฉ | /brief?cycle=weekly |
| ๐ฌ On-Demand | ์ฌ์ฉ์ ์ง๋ฌธ | RAG + live search | /chat |
| ๐ฑ Feed | ์ฌ์ฉ์๊ฐ ์ด ๋ | SNS ๋ฌดํ์คํฌ๋กค | /feed (4 deck: ๋ฉ์ธ / ๋ฅ๋ค์ด๋ธ / ์ฃผ๋ง / Critical๋ง) |
- ๐งฎ
pre_scorer5-factor (engagement ยท authority ยท recency ยท convergence ยท text-match) - ๐ last30days-style enrichment (persistence + saturation + velocity)
| ์ปดํฌ๋ํธ | ์ญํ |
|---|---|
| ๐ง llm_judge | top_k ๋ง (deep qualitative + Devil's Advocate) |
| ๐ณ ltr | ๊ธฐ๋ณธ prior โ pure-Python logistic SGD โ LightGBM LambdaMART ์์ผ๋ก ์น๊ธ. LightGBM์ dependency + ํ์ต๋ ๋ชจ๋ธ ํ์ผ์ด ์์ ๋๋ง active |
| ๐ก content_based | OpenAI embedding cosine / Jaccard fallback |
| ๐ popularity_prior | authority ร recency |
| ๐ฐ bandit | Thompson sampling per platform |
| ๐งต sequential | SASRec-inspired Jaccard over recent dwell sequence |
| โ๏ธ IPS debias | opt-in propensity correction |
- ๐ Daily โ criteria weight ๋ฏธ์ธ์กฐ์
- ๐ Weekly โ interpretation_style ์งํ + user_memory ์ค๋ ์ท + multi-task fitness + REINFORCE-lite (LTR weights)
- ๐ฌ Monthly Meta โ
algorithm.yaml์์ฒด mutate โ shadow test โ adopt- 4 strategies: weight_perturb / feature_toggle / structural / feature_suggest_from_papers
๐ ๋ชจ๋ ๋ณํ๋
/evolutionํ์๋ผ์ธ์ audit ๊ฐ๋ฅ. ๐ง ์ค์ backend ์ํ๋/status์ Owned Algorithm Training Status์์ ํ์ธ ๊ฐ๋ฅ.
| ์นดํ ๊ณ ๋ฆฌ | ์์ค |
|---|---|
| ๐ข Frontier labs | ai_labs โ OpenAI ยท Anthropic ยท Google AI/Research ยท DeepMind ยท Hugging Face ยท Meta ยท Microsoft + TechCrunch ยท Verge ยท VentureBeat ยท Wired |
| ๐ Academic | arxiv (cs.AI/CL/LG/CV/MA/stat.ML) ยท arxiv_recsys (์๊ธฐ์ฐธ์กฐ) ยท semantic_scholar ยท papers_with_code (HF Daily Papers) |
| ๐ป Tech | hackernews ยท github_trending ยท geeknews ยท youtube |
| ๐ฅ Social | twitter ยท reddit ยท linkedin ยท threads ยท bluesky (handle RSS) ยท tiktok ๐ ยท instagram ๐ |
| ๐จ Newsletters | Latent Space ยท Bensbites ยท The Decoder ยท AINews ยท ImportAI ยท TheAIEdge ยท Superhuman AI ยท The Gradient |
| ๐ Markets | polymarket |
| ๐ Multimedia | youtube ์๋ง + podcast (RSS + optional Whisper) ๐ |
| ๐ Web search | exa.ai (on-demand) ๐ |
๐ = env ํค ํ์ (
/setup์์ ์ค์ ) โ๏ธasyncio.gather๋ก ๋์ fetch โ ๊ฐ์ฅ ๋๋ฆฐ ์์ค๋งํผ๋ง ๊ธฐ๋ค๋ฆผ (~20-30์ด) ๐ฉบ/statusํ์ด์ง์์ ์์ค๋ณ health + ๋น ์ง env ํค๊น์ง ํ๋์
| ๊ฒฝ๋ก | ์ฉ๋ |
|---|---|
๐ฌ /chat |
๋ชจ๋ ๊ธฐ๋ฅ์ ์์ฐ์ด๋ก. ChatGPT ์คํ์ผ |
๐ฑ /feed |
๋ฌดํ์คํฌ๋กค + j/k/u/d/s ํค๋ณด๋ + swipe + dwell beacon |
๐ฐ /brief |
daily/weekly LLM ๋ธ๋ฆฌํ. GeekNews ์คํ์ผ ํค๋๋ผ์ธ+ํ ๊ธ |
๐ค /profile |
criteria + algorithm + style + 7์ผ personality + export |
๐งฌ /evolution |
criteria/algorithm ๋ณ๊ฒฝ + Q&A + ์งํ ์ฌ์ดํด ํตํฉ timeline |
๐งช /sandbox |
"bandit ๋น์ค ๋ฐ๊พธ๋ฉด?" what-if ์๋ฎฌ๋ ์ด์ |
๐ฌ /meta |
Meta-Evolution ํ ์ฌ์ดํด + ์์ฐ์ด algorithm.yaml ํธ์ง |
๐ /status |
exit_conditions 4 ๊ฒ์ดํธ + 20๊ฐ ์์ค health |
๐๏ธ /sovereignty |
user_editable / system_mutable / readonly_history ๊ฒฝ๊ณ |
๐ง /admin |
๋ฐ์ดํฐ ์ด๊ธฐํ (signals / evolution / chat / all ์ค์ฝํ) |
๐ฏ /demo |
๊ฐ๋ ํฌ์ด + seed ๊ฐ์ง ๋ฐ์ดํฐ๋ก ์ฆ์ ์ฒดํ |
- ๐ฌ
/chat๋๋ ํ์์โถ Run Daily Pipelineํด๋ฆญ - ๐ฑ
/feed์์j/k๋ก ์คํฌ๋กคํ๋ฉฐ ๐/๐ (dwell ์๋ ์์ง) - ๐ฃ๏ธ ์์ฐ์ด๋ก ๋ฐฉํฅ ์กฐ์ :
/chat์ "agent ์์ฃผ๋ก"
python -m hedwig --weekly- ๐ weekly brief ์์ฑ (
/brief?cycle=weekly) - ๐ interpretation_style ์งํ
- ๐ง user_memory ์ค๋ ์ท
- ๐ฏ multi-task fitness ๊ณ์ฐ
- ๐ REINFORCE-lite LTR weight ์ ๋ฐ์ดํธ
0 9 * * * cd ~/Desktop/hedwig && .venv/bin/python -m hedwig
0 10 * * 1 cd ~/Desktop/hedwig && .venv/bin/python -m hedwig --weekly
@reboot cd ~/Desktop/hedwig && .venv/bin/python -m hedwig --critical-loop๐ criteria.yaml # ๋ฌด์์ ์ถ์ฒํ ์ง (๊ด์ฌ์ฌ ยท care_about ยท ignore)
โ๏ธ algorithm.yaml # ์ด๋ป๊ฒ ์ถ์ฒํ ์ง (component weight ยท feature ยท ๊ตฌ์กฐ)
๐ feeds.yaml # ๋ค์ค ํผ๋ (๋ฉ์ธ / ์์นจ ๋ฅ๋ค์ด๋ธ / ์ฃผ๋ง ํ์ / Critical๋ง)
๐๏ธ sovereignty.yaml # ๋๊ฐ ์ด๋ค path ์ธ ์ ์๋
๐งฌ evolution_log.jsonl # daily/weekly ์ฌ์ดํด audit
๐ฌ algorithm_log.jsonl # meta-evolution ์ฑํ/๊ธฐ๊ฐ audit
๐ง user_memory.jsonl # ์ฃผ๊ฐ ์ฌ์ฉ์ ๋ฉ๋ชจ๋ฆฌ ์ค๋
์ท
๐๏ธ ~/.hedwig/hedwig.db # SQLite (signals + feedback + behavior + judgments + โฆ)
๐ฆ POST /algorithm/export โ ์ 4 yaml + ํ์ฑ interpretation style์ zip ๋ฒ๋ค๋ก ๋ค์ด๋ก๋
๐ฅ POST /algorithm/import โ ๋ค๋ฅธ ์ฌ๋์ ์๊ณ ๋ฆฌ์ฆ import (sovereignty ๊ฒ์ฌ + dry-run preview ํ)
๐ python -m hedwig --quickstart # zero-config local mode
๐
python -m hedwig # daily ํ ํ์ดํ๋ผ์ธ
๐๏ธ python -m hedwig --weekly # weekly brief + macro + RLHF
โก python -m hedwig --critical-loop # critical ํด๋ง ๋ฐ๋ชฌ (20๋ถ ๊ฐ๊ฒฉ)
โฑ python -m hedwig --critical-interval 600 # ๊ฐ๊ฒฉ ์กฐ์
๐ฌ python -m hedwig --meta-cycle # meta-evolution 1ํ
๐งช python -m hedwig --dry-run # ์์ง๋ง (LLM ๋น์ฉ 0)
๐งน python -m hedwig --reset [scope] # ๋ฐ์ดํฐ ์ด๊ธฐํ (all/signals/evolution/chat)
๐ python -m hedwig --dashboard # ์น๋ง ๋ฐ๋ก ๊ธฐ๋
๐ก python -m hedwig --sources # ๋ฑ๋ก๋ 20๊ฐ ์์ค ์ถ๋ ฅ
๐ฌ python -m hedwig --onboard # CLI Socratic ์ธํฐ๋ทฐOPENAI_API_KEY=sk-...๐๏ธ ์ ํ (UI /setup ์์ ์ค์ )
# ์ ๊ทํ / ๊ฒ์ / ์์ค
JINA_API_KEY=... # 100ร rate limit on URLโMarkdown
EXA_API_KEY=... # live_search ๋๊ตฌ
SCRAPECREATORS_API_KEY=... # TikTok + Instagram ํ์ฑ
HEDWIG_PODCAST_FEEDS=url1|name1,url2|name2
HEDWIG_PODCAST_TRANSCRIBE=1 # OpenAI Whisper๋ก ์๋ ์๋ง
HEDWIG_BSKY_HANDLES=alice.bsky.social,bob.bsky.social
# ํ์ดํ๋ผ์ธ ๋ชจ๋
HEDWIG_PIPELINE=ensemble # default. 'single'๋ก legacy LLM-only
# Delivery (๋ชจ๋ ์ต์
)
SLACK_WEBHOOK_ALERTS=... SLACK_WEBHOOK_DAILY=...
DISCORD_WEBHOOK_ALERTS=... DISCORD_WEBHOOK_DAILY=...
SMTP_HOST=... SMTP_USER=... SMTP_PASS=... SMTP_FROM=...
# Storage (์๋ ๊ฐ์ง โ ๋ ๋ค ๋น์ฐ๋ฉด SQLite local)
SUPABASE_URL=... SUPABASE_KEY=...
HEDWIG_STORAGE=sqlite|supabase.venv/bin/python -m pytest tests/
# 562 passed โ
| ์ถ | ๐จ ๋ด์ค๋ ํฐ | ๐ฆ Hedwig |
|---|---|---|
| ๋๊ตฌ๋ฅผ ์ํ ํ๋ ์ด์ | ๋ง ๋ช โ ๊ฐ์ 1๊ฐ | ๋๋ง์ 1๊ฐ |
| ์ทจํฅ ํ์ต | โ๏ธ ์ ์ | ๐ ์๊ธฐ ์งํ (daily/weekly/monthly) |
| ์์ค ํตํฉ | 1-3๊ฐ ๋ถ์ผ | ๐ 20๊ฐ ํ๋ซํผ ํ ๋ฒ์ |
| ๋ฐ๋ ๊ด์ | ํธ์ง์ 1๋ช | ๐ Devil's Advocate ์๋ |
| ์๊ณ ๋ฆฌ์ฆ ์์ ๊ถ | ๋ฐํ์ ์์ฐ | ๐๏ธ algorithm.yaml = ๋ด ์์ฐ. export ๊ฐ๋ฅ |
๐ก ๋ด์ค๋ ํฐ๋ "๋จ์ด ๋ง๋ ๋ฉ๋ด", Hedwig๋ "๋ด๊ฐ ๋งค์ผ ๊น๋ ๋ถ์".
| ๋ฌธ์ | ๋ฌด์์ด ์๋ |
|---|---|
docs/VISION_v3.md |
9์์น / 6 ์ฐจ๋ณ์ถ / ์ ์ฒด ์ํคํ ์ฒ |
docs/HYBRID_ENSEMBLE.md |
์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ ํ ํ์ด์ง โ 2-stage + 6 component + ์๊ธฐ์งํ |
docs/phase_reports/principle_alignment.md |
์์น โ ์ฝ๋ ๋งคํ |
docs/phase_reports/sns_platform_gap.md |
Personal SNS Platform ์ ํ ๋ถ์ |
docs/phase8_prd.md |
SOTA ์ถ์ฒ ๋ชจ๋ธ ๋์ PRD |
docs/absorption_backlog.md |
ํก์ ๋๊ธฐ OSS + ๋ ผ๋ฌธ |
docs/LIBRARY_EXTRACTION.md |
hedwig-engine ๋ถ๋ฆฌ ๊ณํ |
seed.yaml |
Ouroboros Socratic ์ธํฐ๋ทฐ ๊ฒฐ๊ณผ๋ฌผ (ambiguity 0.12) |
| Project | ๋น๋ ค์จ ๊ฒ |
|---|---|
| ๐ง karpathy/autoresearch | Self-improvement ๋ฃจํ ํจํด |
| ๐ jina-ai/reader | URLโMarkdown ์ ๊ทํ |
| ๐ mvanhorn/last30days-skill | Multi-signal ์ค์ฝ์ด๋ง (L2 ํก์) |
| ๐๏ธ Ouroboros Socratic Interview | criteria ๋ช ๋ฃํ (ambiguity โค 0.2) |
| ๐ฆ Twitter the-algorithm ยท YouTube ranker ยท MMOE | 2-stage retrieval + ranking ๊ตฌ์กฐ |
| ๐ SIGIR / RecSys / NeurIPS oral papers | feature_suggest_from_papers ๋ฉํ ์งํ ์ฐ๋ฃ |
MIT
The algorithm that decides what information reaches you should belong to you.
๋น์ ์๊ฒ ๋ฟ๋ ์ ๋ณด๋ฅผ ์ ํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋น์ ๊ฒ์ด์ด์ผ ํฉ๋๋ค.