AI ์์ด์ ํธ๋ฅผ ์ํ ํ๊ตญ์ด ์ต์ ํ Context Database
ํ ํฐ ์๋ชจ๋ฅผ ์ต๋ 91% ์ ๊ฐํ๋ ์ค๋งํธ ๋ฉ๋ชจ๋ฆฌ ์์คํ .
์ ์ฅยท๊ฒ์ยท์์ถยท๊ณ์ธตํยท์์นด์ด๋ธ๊น์ง ์์ ์๋ํ.
| ๊ธฐ๋ฅ | ํ ์ค ์ค๋ช |
|---|---|
| ------ | ----------- |
| ๐ ์๋ฒ ๋ฉ ์๋ฏธ ๊ฒ์ | ํค์๋๊ฐ ์๋๋ผ ์๋ฏธ๋ก ์ฐพ์ต๋๋ค |
| ๐ ์ค๋ณต ์๋ ๋ณํฉ | ๋น์ทํ ๋ฉ๋ชจ๋ฆฌ ์์์ ํฉ์ณ์ค๋๋ค |
| ๐ ๋ฉ๋ชจ๋ฆฌ ๊ณ์ธตํ | Hot โ Warm โ Cold ์๋ ๊ด๋ฆฌ |
| ๐๏ธ ์๋ ์์นด์ด๋ธ | 30์ผ ๋ฌต์ ๋ฉ๋ชจ๋ฆฌ ์๋ ์ ๋ฆฌ |
| ๐ WAL ํ๋กํ ์ฝ | ์ ์ฅ ๋จผ์ , ์๋ต ๋์ค โ ์ ์ค ์ ๋ก |
| ๐ท๏ธ ์ํฐํฐ ์ถ์ถ | ์ฌ๋ยท๋ธ๋๋ยท์ ํ ์๋ ํ๊น |
| ๐ ๋ค๊ตญ์ด ์ง์ | ํ๊ตญ์ด(konlpy) + ์์ด(nltk) |
# Fireworks API ํค (์๋ฒ ๋ฉ ๊ฒ์์ฉ)
export FIREWORKS_API_KEY="your-key"
# Windows PowerShell
$env:FIREWORKS_API_KEY="your-key"
from token_saver.client import TokenSaverKorean
# ์ด๊ธฐํ (์๋์ผ๋ก workspace ํ์ง)
client = TokenSaverKorean()
# ์ ์ฅ โ ์๋ฒ ๋ฉ ์๋ ์์ฑ + ์ค๋ณต ์ ์๋ ๋ณํฉ
client.save_memory(
uri="biz/daily_sales",
content="์ค๋ ๋งค์ถ 500๋ง์, ROAS 5.83",
category="biz"
)
# ๊ฒ์ โ ํค์๋ + ์๋ฒ ๋ฉ ํ์ด๋ธ๋ฆฌ๋
results = client.find("๋งค์ถ ํํฉ", use_embedding=True)
# ํฐ์ด ํต๊ณ
stats = client.get_tier_stats()
# โ {'hot': 14, 'warm': 0, 'cold': 0, 'archive': 0}
# ๋ง๋ฃ ๋ฉ๋ชจ๋ฆฌ ์ ๋ฆฌ
client.cleanup_expired(days=30)
๋ง์คํฐ: "๋ฅํฐ๋ ์ด๋ ROAS ๊ธฐ์ตํด"
โ ๋ณด๋ผ: memory_store(uri="memories/drlady/roas", content="ROAS 5.83...")
๋ง์คํฐ: "์ ๋ฒ์ ๋ง์ผํ
์ ๋ต ๋ญ์์ง?"
โ ๋ณด๋ผ: memory_recall(query="๋ง์ผํ
์ ๋ต")
| ์๋๋ฆฌ์ค | ๊ธฐ์กด ํ ํฐ | TokenSaver | ์ ๊ฐ์จ |
|---|---|---|---|
| ---------- | ----------- | ------------ | -------- |
| ์ ์ฒด Context ๋ก๋ | 50,000 | 4,500 | 91% |
| ํ๊ตญ์ด ๊ฒ์ | 20,000 | 2,000 | 90% |
| ๋ฉ๋ชจ๋ฆฌ ์์ถ | 30,000 | 3,500 | 88% |
์๋์ผ๋ก ์ค์๋์ ๋ฐ๋ผ ํฐ์ด๋ฅผ ๊ด๋ฆฌํฉ๋๋ค:
| ํฐ์ด | ๊ธฐ๊ฐ | ์ ์ฅ ๋ฐฉ์ |
|---|---|---|
| ------ | ------ | ----------- |
| ๐ฅ Hot | 7์ผ ๋ด | ์ ์ฒด ๋ด์ฉ + ์๋ฒ ๋ฉ |
| ๐ก๏ธ Warm | 30์ผ ๋ด | ์์ฝ + ์๋ฒ ๋ฉ |
| โ๏ธ Cold | 30์ผ+ | ํค์๋๋ง (์์ถ) |
| ๐๏ธ Archive | 30์ผ ๋ฏธ์ ์ | ๊ฒ์์์ ์ ์ธ |
# ์๋ ์น๊ฒฉ/๊ฐ๋ฑ โ ์ ๊ทผํ ์๋ก Hot์ผ๋ก ์ฌ๋ผ๊ฐ
client.save_memory("test", "๋ด์ฉ") # โ Hot
# 30์ผ ํ ์๋ โ Cold
# ๋ค์ ๊ฒ์ํ๋ฉด โ Warm โ Hot
ํค์๋ ๋งค์นญ + ์๋ฒ ๋ฉ ์ ์ฌ๋๋ฅผ ๊ฒฐํฉํ ํ์ด๋ธ๋ฆฌ๋ ๊ฒ์:
results = client.find(
query="๊ด๊ณ ํจ์จ ๊ฐ์ ",
limit=5,
use_embedding=True # ์๋ฒ ๋ฉ ๊ฒ์ ON
)
# ๊ฒฐ๊ณผ: ํค์๋ ์ ์ + ์๋ฒ ๋ฉ ์ ์ = ์ต์ข
์์
# "ROAS ์ต์ ํ ๋ฐฉ๋ฒ" (12.45์ )
# "๊ด๊ณ ์์ฌ ์ฑ๊ณผ ๋ถ์" (9.91์ )
API ์คํจ ์ ์๋์ผ๋ก ํค์๋ ๊ฒ์์ผ๋ก ํด๋ฐฑ โ ์ ๋ ์ ๋๊น.
๋น์ทํ ๋ด์ฉ์ด๋ฉด ์๋ก ๋ง๋ค์ง ์๊ณ ๊ธฐ์กด ๊ฒ์ ์ ๋ฐ์ดํธ:
# ์ฒซ ์ ์ฅ
client.save_memory("biz/roas", "ROAS 5.83", category="biz")
# ๋น์ทํ ๋ด์ฉ ์ฌ์ ์ฅ โ ์๋ ๋ณํฉ (์ฝ์ฌ์ธ > 0.85)
client.save_memory("biz/roas", "ROAS 6.12๋ก ์์น", category="biz")
# โ ๊ฐ์ URI์ ๋ฒ์ ์
๊ทธ๋ ์ด๋ (v1 โ v2)
์ ์ฅ ์ ์ฌ๋ยท๋ธ๋๋ยท์ ํ์ ์๋์ผ๋ก ์ธ์:
entities = client.extract_entities("๊น๋ช
์ง ๋ํ๊ฐ ๋ฅํฐ๋ ์ด๋ ๋ฆฌ์ฅฌ-ํก์ค ์ถ์")
# โ {'persons': ['๊น๋ช
์ง'], 'brands': ['๋ฅํฐ๋ ์ด๋'], 'products': ['๋ฆฌ์ฅฌ-ํก์ค']}
{
"embedding": {
"dense": {
"provider": "fireworks",
"model": "qwen3-embedding-8b",
"dimension": 768
}
},
"language": "auto",
"token_optimization": {
"enabled": true,
"target_reduction": 0.91
}
}
| ๊ธฐ๋ฅ | ์ค๋ช |
|---|---|
| ------ | ------ |
| WAL ํ๋กํ ์ฝ | ์๋ต ์ ์ ๋จผ์ ์ ์ฅ โ ํฌ๋์ํด๋ ์ ์ค ์์ |
| ์๋ ๋ฐฑ์ | ์์ ์ ์๋ณธ ๋ฐฑ์ ๋ณด๊ด |
| ์๋ฒ ๋ฉ ํด๋ฐฑ | API ์ฅ์ ์ ํค์๋ ๊ฒ์์ผ๋ก ์๋ ์ ํ |
| ํ์ํธํ | v1 ๋ฐ์ดํฐ ๊ทธ๋๋ก ์ฌ์ฉ ๊ฐ๋ฅ |
| ํจํค์ง | ์ฉ๋ | ํ์? |
|---|---|---|
| -------- | ------ | ------- |
| konlpy | ํ๊ตญ์ด ํํ์ ๋ถ์ | ๊ถ์ฅ |
| nltk | ์์ด NLP | ๊ถ์ฅ |
| FIREWORKS_API_KEY | ์๋ฒ ๋ฉ ๊ฒ์ | ์๋ฒ ๋ฉ ์ฌ์ฉ ์ |
> konlpy/nltk ์์ด๋ ์๋ํฉ๋๋ค (๊ธฐ๋ณธ ํ ํฌ๋์ด์ ์ฌ์ฉ).
MIT License โ ์์ ๋กญ๊ฒ ์ฌ์ฉ, ์์ , ๋ฐฐํฌ ๊ฐ๋ฅ.
TokenSaver Korean v2.0
์๋ฒ ๋ฉ ๊ฒ์ ยท ์ค๋ณต ๋ณํฉ ยท ๋ฉ๋ชจ๋ฆฌ ๊ณ์ธตํ ยท ์๋ ์์นด์ด๋ธ
ํ๊ตญ์ด ์ฐ์ , ์์ด ์ง์, OpenClaw ์ต์ ํ
ๅ ฑ 1 ไธช็ๆฌ