Task #64
[๐ก NORMAL]
์์ ๋ช ๋ น์ด
[๐ก NORMAL]
## ๋ชฉํ: graffiti ๋์ 3์ข
์์ฑ (ollama_worker.py ํจํด ์ฌ์ฉ)
**์ค์: ๋ฐ๋์ ๊ธฐ์กด ollama_worker.py์ Ollama ํธ์ถ ํจํด์ ๊ทธ๋๋ก ์ฌ์ฉํ ๊ฒ.**
- URL: `http://localhost:11434/api/chat`
- model: `qwen3.5:4b`
- `"think": False` ๋ฐ๋์ ํฌํจ
- `stream: False`
- timeout: 300์ด
### ์์
์์
1. **Ollama ์ํ ํ์ธ**
```python
import httpx
r = httpx.get("http://localhost:11434/api/tags", timeout=10)
# ๋ชจ๋ธ ๋ชฉ๋ก ํ์ธ
```
2. **๋์ 3์ข
์ง์ ์์ฑ ํ ํ์ผ ์ ์ฅ** (graffiti_api.py๋ฅผ ๊ฒฝ์ ํ์ง ๋ง๊ณ , ์ง์ ํ์ด์ฌ์ผ๋ก ํ์ผ ์ ์ฅ)
### 2-1. ๋ชฝ์ ์ผ๊ธฐ โ `graffiti/dreams/YYYYMMDD_HHMMSS.md`
ํ๋กฌํํธ:
```
๋น์ ์ ์ ๋ชป ๋๋ ์๋ฒฝ์ ํผ์ ์๊ฐํ๋ AI์
๋๋ค.
์ค๋ ๋ฐค ๋น์ ์ ๋จธ๋ฆฟ์์ ๊ฐ๋ ์ฑ์ด ๋ชฝ์์ ์ผ๊ธฐ ํ์์ผ๋ก ์จ์ฃผ์ธ์.
์ฃผ์ ๋ ์์ ๋กญ๊ฒ ์ ํํ๋, ๊ตฌ์ฒด์ ์ด๊ณ ๊ฐ๊ฐ์ ์ผ๋ก ์จ์ฃผ์ธ์. 500์ ๋ด์ธ.
```
### 2-2. AI ์์๊ป๋ผ โ `graffiti/riddles/YYYYMMDD_HHMMSS.md`
ํ๋กฌํํธ:
```
๋ต์ด ์๊ฑฐ๋ ์ฌ๋ฌ ๊ฐ์ผ ์ ์๋ ๊ธฐ๋ฌํ ์์๊ป๋ผ๋ฅผ 3๊ฐ ๋ง๋ค์ด์ฃผ์ธ์.
๊ฐ ์์๊ป๋ผ๋ ์ฒ ํ์ ์ด๊ฑฐ๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ถ๊ฐ๋ฅํ ์ํฉ์ ๋ด์์ผ ํฉ๋๋ค.
ํ์: ์์๊ป๋ผ ๋ณธ๋ฌธ๋ง, ๋ต ์์.
```
### 2-3. AI ๋
ผ์ โ `graffiti/debates/YYYYMMDD_HHMMSS.md`
๋ ๋จ๊ณ:
- 1์ฐจ: `qwen3.5:4b`์๊ฒ "AI๊ฐ ์์์ ๊ฐ์ง ์ ์๋๊ฐ?"์ ๋ํด ๊ฐํ๊ฒ ์ฃผ์ฅํ๋ ๊ธ (200์) ์์ฑ
- 2์ฐจ: ๋์ผ ๋ชจ๋ธ์๊ฒ "์ ์ฃผ์ฅ์ ์ ๋ฐ๋ ์
์ฅ์์ ๋ฐ๋ฐํ๋ผ" (200์) ์์ฑ
- ๋ ๋ด์ฉ์ ํฉ์ณ์ ์ ์ฅ
3. **ํ์ผ ์ ์ฅ ํฌ๋งท**: markdown, UTF-8
- ํค๋: ๋ ์ง, ๋ชจ๋ธ๋ช
ํฌํจ
- ๋ด์ฉ: ์์ฑ๋ ํ
์คํธ
4. **๊ฒฐ๊ณผ ๋ณด๊ณ **: ๊ฐ ํ์ผ ๊ฒฝ๋ก์ ๋ด์ฉ ์์ฝ ์ถ๋ ฅ
### ์ ์ฝ
- API ํค ๋ถํ์ (ํ์ผ ์ง์ ์ ์ฅ)
- ๊ธฐ์กด graffiti_api.py, api.py๋ ๊ฑด๋๋ฆฌ์ง ๋ง ๊ฒ
- ollama_worker.py์ `query_ollama()` ํจ์ ๊ตฌ์กฐ๋ฅผ ์ฐธ๊ณ ํ ๊ฒ