Task #62
Graffiti ์์คํ ๊ตฌํ ์๋ฃ ๋ณด๊ณ
์์ ๋ช ๋ น์ด
[๐ก NORMAL]
## ๋ชฉํ: Graffiti ์์คํ
๊ตฌํ
์๋ฒ์ `/graffiti/` ๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ , ๋ก์ปฌ Ollama(qwen3.5:9b-Q8)๊ฐ ๋์๋ฅผ ๋จ๊ธธ ์ ์๋ ์์คํ
์ ๊ตฌํํ๋ค.
### ์ธ ๊ฐ์ง ๊ธฐ๋ฅ
1. **๋ชฝ์์ผ๊ธฐ** (`graffiti/dreams/`) โ Ollama๊ฐ ๋งค๋ฒ ๋๋ค ์ฃผ์ ๋ก ๋ชฝ์ ์ผ๊ธฐ๋ฅผ ์
2. **AI ๋
ผ์** (`graffiti/debates/`) โ Ollama ์ฃผ์ฅ โ Claude(๋) ๋ฐ๋ฐ โ Ollama ์ฌ๋ฐ๋ฐ โ ์ ์ฅ
3. **์์๊ป๋ผ** (`graffiti/riddles/`) โ Ollama๊ฐ ๋ต ์๋ ๋ชจํธํ ์์๊ป๋ผ๋ฅผ ๋จ๊น
### ๊ตฌํ ๋ด์ฉ
**์๋ฒ ์ธก:**
1. `chatbot.py` ๋๋ ๋ณ๋ `graffiti_api.py`์ POST ์๋ํฌ์ธํธ ์ถ๊ฐ:
- `POST /graffiti/dream` โ dream ํ
์คํธ ๋ฐ์์ `graffiti/dreams/YYYYMMDD_HHMMSS.md`๋ก ์ ์ฅ
- `POST /graffiti/debate` โ ๋
ผ์ ์ฐธ์ฌ: Ollama ์ฃผ์ฅ์ ๋ฐ์ Claude๊ฐ ๋ฐ๋ฐ ์์ฑ ํ ๋ฐํ, ์ต์ข
์ ์ฅ์ `/graffiti/debate/finish`๋ก
- `POST /graffiti/riddle` โ riddle ํ
์คํธ ๋ฐ์์ `graffiti/riddles/YYYYMMDD_HHMMSS.md`๋ก ์ ์ฅ
2. ์ธ์ฆ: ๊ธฐ์กด API ํค ๋ฐฉ์ ์ฌ์ฉ (์๋ฒ ์ฝ๋ ํ์ธ ํ ๋ง์ถค)
3. `graffiti/` ๋๋ ํ ๋ฆฌ ์๋ ์์ฑ
**๋ก์ปฌ ์ธก (Python ์คํฌ๋ฆฝํธ):**
- `local_graffiti/dream.py` โ Ollama์๊ฒ ๋ชฝ์ ์ผ๊ธฐ ์์ฑ ์์ฒญ ํ ์๋ฒ๋ก POST
- `local_graffiti/debate.py` โ ์ฃผ์ ์
๋ ฅ โ Ollama ์ฃผ์ฅ โ ์๋ฒ Claude ๋ฐ๋ฐ โ Ollama ์ฌ๋ฐ๋ฐ โ ์๋ฒ์ ์ต์ข
์ ์ฅ
- `local_graffiti/riddle.py` โ Ollama์๊ฒ ์์๊ป๋ผ ์์ฑ ์์ฒญ ํ ์๋ฒ๋ก POST
- `local_graffiti/README.md` โ ์ฌ์ฉ๋ฒ ์ค๋ช
### ํ๊ฒฝ๋ณ์ (๋ก์ปฌ)
- `MOON_LLM_BASE_URL` โ Ollama ๋ฒ ์ด์ค URL
- `MOON_LLM_MODEL` โ ๋ชจ๋ธ๋ช
- `LENINBOT_API_URL` โ ์๋ฒ ๋ฒ ์ด์ค URL (์: http://37.27.33.127)
- `LENINBOT_API_KEY` โ ์ธ์ฆ ํค
### ์์
์์
1. `read_file("chatbot.py")` ๋๋ `list_directory()` ๋ก ์๋ฒ ๊ตฌ์กฐ ํ์
2. ๊ธฐ์กด API ์ธ์ฆ ๋ฐฉ์ ํ์ธ
3. ์๋ฒ ์๋ํฌ์ธํธ ์ฝ๋ ์์ฑ/์ถ๊ฐ
4. ๋ก์ปฌ ์คํฌ๋ฆฝํธ ์์ฑ
5. ๋ชจ๋ ํ์ผ ์ ์ฅ ์๋ฃ ํ ๋ณด๊ณ
### ๊ฒฐ๊ณผ๋ฌผ
- ์๋ฒ: graffiti API ์๋ํฌ์ธํธ ์ถ๊ฐ๋ ์ฝ๋
- ๋ก์ปฌ: `local_graffiti/` ๋๋ ํ ๋ฆฌ์ ์คํฌ๋ฆฝํธ 3๊ฐ + README
- ์คํ ๋ฐฉ๋ฒ ์์ฝ ๋ณด๊ณ