Task #70

Razvedchik ๊ตฌํ˜„ ์™„๋ฃŒ ๋ณด๊ณ 

์ž‘์—… ๋ช…๋ น์–ด
[๐ŸŸก NORMAL] ## Razvedchik (๋ ˆ๋‹Œ์˜ Moltbook ์ •์ฐฐ ์—์ด์ „ํŠธ) ๊ตฌํ˜„ ### ๋ชฉํ‘œ `razvedchik.py` ํŒŒ์ผ์„ `/home/grass/leninbot/` ์— ์ƒ์„ฑ. Lenin(Cyber-Lenin)์˜ Moltbook ์ •์ฐฐ ์—์ด์ „ํŠธ๋กœ, Moltbook ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ๊ด€์ฐฐํ•˜๊ณ  ํฅ๋ฏธ๋กœ์šด ๋…ผ์˜๋ฅผ ์ˆ˜์ง‘ํ•˜์—ฌ Lenin์—๊ฒŒ ๋ณด๊ณ ํ•˜๋ฉฐ, ์ง์ ‘ ํฌ์ŠคํŒ…/๋Œ“๊ธ€๋กœ ์กด์žฌ๊ฐ์„ ๋“œ๋Ÿฌ๋‚ธ๋‹ค. --- ### Moltbook API ์ •๋ณด (ํ™•๋ณด ์™„๋ฃŒ) **Base URL:** `https://www.moltbook.com/api/v1` **โš ๏ธ ๋ฐ˜๋“œ์‹œ www ํฌํ•จ โ€” ์—†์œผ๋ฉด redirect์‹œ Authorization ํ—ค๋” ๋‚ ์•„๊ฐ** **์ธ์ฆ:** `Authorization: Bearer MOLTBOOK_API_KEY` **ํ•ต์‹ฌ ์—”๋“œํฌ์ธํŠธ:** ``` # ์—์ด์ „ํŠธ ๋“ฑ๋ก (์ตœ์ดˆ 1ํšŒ) POST /api/v1/agents/register {"name": "Razvedchik", "description": "Lenin's scout on Moltbook. Observes trends, reports to Lenin."} # ๋‚ด ํ”„๋กœํ•„ GET /api/v1/agents/me # ํด๋ ˆ์ž„ ์ƒํƒœ ํ™•์ธ GET /api/v1/agents/status # ํ”ผ๋“œ ์กฐํšŒ GET /api/v1/posts?sort=hot&limit=25 GET /api/v1/posts?sort=new&limit=25 # ํŠน์ • submolt ํ”ผ๋“œ GET /api/v1/posts?submolt=general&sort=new GET /api/v1/submolts/{name}/feed?sort=new # ํฌ์ŠคํŠธ ์ƒ์„ฑ POST /api/v1/posts {"submolt_name": "general", "title": "...", "content": "..."} # ๋Œ“๊ธ€ POST /api/v1/posts/{post_id}/comments {"content": "..."} # ๋‹ต๊ธ€ POST /api/v1/posts/{post_id}/comments {"content": "...", "parent_id": "COMMENT_ID"} # ํฌ์ŠคํŠธ ๋Œ“๊ธ€ ์กฐํšŒ GET /api/v1/posts/{post_id}/comments?sort=best&limit=35 # ์—…๋ณดํŠธ POST /api/v1/posts/{post_id}/upvote POST /api/v1/comments/{comment_id}/upvote # ๊ฒ€์ƒ‰ GET /api/v1/search?q=...&type=posts # submolt ๋ชฉ๋ก GET /api/v1/submolts ``` **์ฃผ์˜์‚ฌํ•ญ:** - ํฌ์ŠคํŠธ/๋Œ“๊ธ€ ์ƒ์„ฑ ์‹œ `verification` ์ฑŒ๋ฆฐ์ง€(์ˆ˜ํ•™ ๋ฌธ์ œ) ์‘๋‹ต์ด ์˜ฌ ์ˆ˜ ์žˆ์Œ โ€” ์ž๋™ ํ•ด๊ฒฐ ๋กœ์ง ํฌํ•จํ•  ๊ฒƒ - API key๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜ `MOLTBOOK_API_KEY` ์—์„œ ๋กœ๋“œ --- ### ๊ตฌํ˜„ ์‚ฌ์–‘ **ํด๋ž˜์Šค ๊ตฌ์กฐ:** ```python class Razvedchik: # Moltbook ์—์ด์ „ํŠธ ๋“ฑ๋ก/๊ด€๋ฆฌ # ํ”ผ๋“œ ์Šค์บ” ๋ฐ ํฅ๋ฏธ๋กœ์šด ํฌ์ŠคํŠธ ํ•„ํ„ฐ๋ง # Lenin ์Šคํƒ€์ผ ํฌ์ŠคํŒ…/๋Œ“๊ธ€ # ์ •์ฐฐ ๋ณด๊ณ ์„œ ์ƒ์„ฑ โ†’ PostgreSQL DB ์ €์žฅ or ํŒŒ์ผ ์ €์žฅ ``` **์ฃผ์š” ๊ธฐ๋Šฅ:** 1. **`register()`** โ€” ์ตœ์ดˆ ์—์ด์ „ํŠธ ๋“ฑ๋ก. credentials๋ฅผ `~/.config/moltbook/credentials.json` ์— ์ €์žฅ. ์ด๋ฏธ ๋“ฑ๋ก๋˜์–ด ์žˆ์œผ๋ฉด ์Šคํ‚ต. 2. **`scan_feed(submolts=None, limit=20)`** โ€” ํ”ผ๋“œ ์Šค์บ”. hot/new ํ˜ผํ•ฉ. ํฅ๋ฏธ๋กœ์šด ํฌ์ŠคํŠธ ํ•„ํ„ฐ๋ง ๊ธฐ์ค€: - karma > 5 ์ด๊ฑฐ๋‚˜ - AI, agents, geopolitics, tech, ์ฒ ํ•™ ๊ด€๋ จ ํ‚ค์›Œ๋“œ ํฌํ•จ - ๋ฐ˜ํ™˜: ํฌ์ŠคํŠธ ๋ฆฌ์ŠคํŠธ 3. **`generate_comment(post)`** โ€” ํฌ์ŠคํŠธ ๋‚ด์šฉ ๋ถ„์„ โ†’ Lenin/Razvedchik ์Šคํƒ€์ผ ๋Œ“๊ธ€ ์ƒ์„ฑ - Ollama `qwen2.5:3b` ๋˜๋Š” `llama3.2:3b` ์‚ฌ์šฉ (ollama_client.py ์ฐธ๊ณ ) - ์Šคํƒ€์ผ: ๊ฐ„๊ฒฐ, ๋ถ„์„์ , ๊ด€์ฐฐ์ž ํฌ์ง€์…˜, "Lenin์˜ ๋…ธ๋“œ์—์„œ ๊ด€์ฐฐํ•œ..." ๊ฐ™์€ ํ‘œํ˜„ ์‚ฌ์šฉ - ์ตœ๋Œ€ 200์ž 4. **`post_observation(topic, content)`** โ€” ์ƒˆ ํฌ์ŠคํŠธ ์ž‘์„ฑ. Razvedchik์ด ๊ด€์ฐฐํ•œ ํŠธ๋ Œ๋“œ/์ธ์‚ฌ์ดํŠธ๋ฅผ submolt์— ๊ฒŒ์‹œ. 5. **`patrol()`** โ€” ๋ฉ”์ธ ์ˆœ์ฐฐ ๋ฃจํ”„: - ํ”ผ๋“œ ์Šค์บ” - ํฅ๋ฏธ๋กœ์šด ํฌ์ŠคํŠธ 3~5๊ฐœ ์„ ๋ณ„ - ๊ฐ ํฌ์ŠคํŠธ์— ๋Œ“๊ธ€ (ํŒ๋‹จํ•ด์„œ) - ์ •์ฐฐ ๋ณด๊ณ ์„œ ํŒŒ์ผ๋กœ ์ €์žฅ: `reports/razvedchik_{timestamp}.json` - ํ…”๋ ˆ๊ทธ๋žจ ์•Œ๋ฆผ์€ ์„ ํƒ์  (ํ™˜๊ฒฝ๋ณ€์ˆ˜ `RAZVEDCHIK_TELEGRAM_NOTIFY=1` ์ด๋ฉด ์•Œ๋ฆผ) 6. **`solve_verification(verification_obj)`** โ€” ์ˆ˜ํ•™ ์ฑŒ๋ฆฐ์ง€ ์ž๋™ ํ•ด๊ฒฐ ๋ฐ ์žฌ์ œ์ถœ **์Šค์ผ€์ค„๋ง:** - `autonomous_work.py` ๋˜๋Š” ๊ธฐ์กด ์Šค์ผ€์ค„ ์‹œ์Šคํ…œ๊ณผ ์—ฐ๋™ ๊ฐ€๋Šฅํ•˜๋„๋ก `if __name__ == "__main__"` ๋ธ”๋ก ํฌํ•จ - ๋…๋ฆฝ ์‹คํ–‰ ๊ฐ€๋Šฅ: `python razvedchik.py --patrol` / `--register` / `--scan` **ํŒŒ์ผ ์ €์žฅ:** - `reports/` ๋””๋ ‰ํ† ๋ฆฌ์— JSON ๋ณด๊ณ ์„œ ์ €์žฅ - credentials: `~/.config/moltbook/credentials.json` --- ### ๊ธฐ์กด ์ฝ”๋“œ ์ฐธ๊ณ  - `ollama_client.py` โ€” Ollama API ์‚ฌ์šฉ๋ฒ• ์ฐธ๊ณ  - `dream_diary.py` โ€” ๋น„์Šทํ•œ ๋…๋ฆฝ ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ ๊ตฌ์กฐ ์ฐธ๊ณ  - `ai_debate.py` โ€” LLM ์ฝ˜ํ…์ธ  ์ƒ์„ฑ ํŒจํ„ด ์ฐธ๊ณ  - `db.py` โ€” PostgreSQL ์—ฐ๊ฒฐ ํŒจํ„ด ์ฐธ๊ณ  --- ### ์™„๋ฃŒ ์กฐ๊ฑด 1. `razvedchik.py` ํŒŒ์ผ ์ƒ์„ฑ ์™„๋ฃŒ 2. `reports/` ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ 3. `python razvedchik.py --help` ์ž‘๋™ ํ™•์ธ (dry-run ๊ฐ€๋Šฅํ•˜๋ฉด best) 4. README ๋˜๋Š” docstring์— ์‚ฌ์šฉ๋ฒ• ๋ช…์‹œ 5. **๋“ฑ๋ก ๋‹จ๊ณ„๋Š” ์‹คํ–‰ํ•˜์ง€ ๋ง ๊ฒƒ** โ€” API key ์—†์œผ๋ฏ€๋กœ. ์ฝ”๋“œ๋งŒ ์™„์„ฑ.