๐ก ํ์ค ์์ฝ: LLM์๊ฒ ์ฅ๊ธฐ ๊ธฐ์ต์ ์ฌ์ด์ฃผ๋ ์ปค์คํ ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์ด ๊ตฌ์ถ ๋ฐฉ๋ฒ์ ๋ค๋ฃน๋๋ค. DSPy์ Qdrant๋ฅผ ํ์ฉํด ๊ธฐ์ต์ ์ถ๊ฐ(ADD), ์์ (UPDATE), ์ญ์ (DELETE)ํ๋ ์์ด์ ํธ ์ํฌํ๋ก์ฐ๋ฅผ ๊ตฌํํฉ๋๋ค. Mem0 ๋ ผ๋ฌธ์์ ์๊ฐ์ ๋ฐ์ ๊ตฌ์กฐ์ ๋๋ค.
๋ฐฐ๊ฒฝ
RAG(๊ฒ์ ์ฆ๊ฐ ์์ฑ)๋ง์ผ๋ก๋ ๋ถ์กฑํฉ๋๋ค. ์ฌ์ฉ์์์ ์ด์ ๋ํ ๋งฅ๋ฝ์ ๊ธฐ์ตํ๊ณ , ์ ๋ณด๊ฐ ๋ฐ๋๋ฉด ๊ธฐ์ต์ ์ ๋ฐ์ดํธํ๋ '์ง์ง ๊ธฐ์ต'์ด ํ์ํฉ๋๋ค. ๋จ์ํ ๋ชจ๋ ๋ํ ๋ก๊ทธ๋ฅผ ๋ฃ๋ ๊ฒ ์๋๋ผ, ํ์ํ ์ฌ์ค๋ง ์ถ์ถํด์ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ '๋ฉ๋ชจ๋ฆฌ ๋งค๋์ '๊ฐ ์์ด์ผ ๋ ๋๋ํ ์์ด์ ํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
๐ ํต์ฌ ์ ๋ฆฌ
- ๋ฉ๋ชจ๋ฆฌ ์๋ช ์ฃผ๊ธฐ: ๊ธฐ์ต์ ์์ฑ(Create)๋ฟ๋ง ์๋๋ผ ์์ (Update), ์ญ์ (Delete)๊ฐ ๊ฐ๋ฅํด์ผ ํฉ๋๋ค. (์: "์ฐจ๋ฅผ ์ข์ํด" -> "์ด์ ์ฐจ ์ซ์ดํด"๋ก ๋ณ๊ฒฝ ์ ๊ธฐ์กด ๊ธฐ์ต ์ญ์ /์์ )
- ์ํคํ
์ฒ:
- Response Agent: ์ฌ์ฉ์ ์ง๋ฌธ์ ๋ต๋ณ
- Memory Manager Agent: ๋ํ ๋ด์ฉ์ ๋ถ์ํด ๊ธฐ์ต์ ๊ด๋ฆฌ (DSPy ReAct ์ฌ์ฉ)
- Vector DB (Qdrant): ๊ธฐ์ต ์ ์ฅ์
- ํต์ฌ ๋๊ตฌ:
add_memory: ์๋ก์ด ์ฌ์ค ์ ์ฅupdate_memory: ๊ธฐ์กด ๊ธฐ์ต ์์ (์ค๋๋ ๊ฒ ์ญ์ + ์ ๊ฒ ์ถ๊ฐ)delete_memory: ๋ ์ด์ ์ ํจํ์ง ์์ ๊ธฐ์ต ์ญ์ no_op: ๋ณ๊ฒฝ ์ฌํญ ์์
MAX5์ ์๊ฐ ๐ฏ
๐จ๐ป ๋ฐ์ด๋ธ ์ฝ๋ฉ ๋ ์ํผ
Claude Code์๊ฒ ์๋ ํ๋กฌํํธ๋ก ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋์ ๋ง๋ค์ด๋ฌ๋ผ๊ณ ํด๋ณด์ธ์.
DSPy์ Qdrant๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ 'MemoryManager' ํด๋์ค๋ฅผ ๋ง๋ค์ด์ค.
๋ค์ ๊ธฐ๋ฅ์ ํฌํจํด์ผ ํด:
1. `add_memory(text)`: ํ
์คํธ๋ฅผ ์๋ฒ ๋ฉํด์ Qdrant์ ์ ์ฅ
2. `search_memory(query)`: ์ง๋ฌธ๊ณผ ๊ด๋ จ๋ ๊ธฐ์ต ๊ฒ์
3. `update_memory(old_id, new_text)`: ๊ธฐ์กด ๊ธฐ์ต ID๋ก ์ฐพ์์ ๋ด์ฉ์ ์
๋ฐ์ดํธ
ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ: dspy-ai, qdrant-client, fastembed
๐ธ ์ฌ์ด๋ ํ๋ก์ ํธ ์์ด๋์ด
์ด ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์ด๋ฅผ ํ์ฉํด '๋๋ฅผ ๊ธฐ์ตํ๋ ์์ด ํํ ํํฐ'๋ฅผ ๋ง๋ค์ด๋ณด์ธ์. ๋ด๊ฐ ํ๋ ธ๋ ๋ฌธ๋ฒ, ๋ด๊ฐ ์ข์ํ๋ ์ฃผ์ , ์ง๋๋ฒ์ ํ๋ ์ด์ผ๊ธฐ๋ฅผ ๊ธฐ์ตํด์ ๋จผ์ ๋ง์ ๊ฑธ์ด์ฃผ๋ ์์ด์ ํธ๋ ๊ธฐ์กด ์๋น์ค์ ํ์คํ ์ฐจ๋ณ์ ์ด ๋ ๊ฒ์ ๋๋ค.