๐๏ธ Prompt Compression Guide โ OmniRoute (ํ๊ตญ์ด)
์์ถ ๋ชจ๋
์น์ ์ ๋ชฉ: โ์์ถ ๋ชจ๋โ์์ถ์ ์ ์ฉํ์ง ์์ต๋๋ค. ๋ชจ๋ ๋ฉ์์ง๊ฐ ๋ณ๊ฒฝ ์์ด ๊ทธ๋๋ก ์ ๋ฌ๋ฉ๋๋ค.
Lite ๋ชจ๋(์ฝ 15% ์ ๊ฐ, ์ง์ฐ ์๊ฐ <1ms)
์น์ ์ ๋ชฉ: โLite ๋ชจ๋(์ฝ 15% ์ ๊ฐ, ์ง์ฐ ์๊ฐ <1ms)โ๊ฐ์ฅ ์์ ํ ๋ชจ๋๋ก, ์๋ฏธ๋ ์ ํ ๋ณ๊ฒฝํ์ง ์๊ณ ์์๋ง ์ ๋ฆฌํฉ๋๋ค.
| ๊ธฐ๋ฒ | ์ค๋ช |
|---|---|
collapseWhitespace |
์ฐ์๋ ๋น ์ค๊ณผ ์ค ๋ ๊ณต๋ฐฑ ๋ณํฉ |
dedupSystemPrompt |
์ค๋ณต ์์คํ ๋ฉ์์ง ์ ๊ฑฐ |
compressToolResults |
์ฅํฉํ ๋๊ตฌ/ํจ์ ์ถ๋ ฅ ์์ถ |
removeRedundantContent |
๋ฐ๋ณต๋๋ ์ง์นจ ์ ๊ฑฐ |
replaceImageUrls |
base64 ์ด๋ฏธ์ง ๋ฐ์ดํฐ URI ๋จ์ถ |
์ ํฉํ ์ฉ๋: ์์ ์ฌ์ฉ, ์์ ์ด ์ค์ํ ์ํฌํ๋ก.
Standard ๋ชจ๋(์ฝ 30% ์ ๊ฐ)
์น์ ์ ๋ชฉ: โStandard ๋ชจ๋(์ฝ 30% ์ ๊ฐ)โCaveman์์ ์๊ฐ์ ๋ฐ์ ์๋ฏธ๋ฅผ ๋ณด์กดํ๋ฉด์ ๊ตฐ๋๋๊ธฐ ๋จ์ด์ ์ฅํฉํ ํํ์ ์ ๊ฑฐํฉ๋๋ค.
- ๊ตฐ๋๋๊ธฐ ๋จ์ด ์ ๊ฑฐ(โpleaseโ, โI thinkโ, โbasicallyโ, โactuallyโ)
- ์ฅํฉํ ๋ฌธ๊ตฌ ์ถ์ฝ(โin order toโ โ โtoโ, โas a result ofโ โ โbecauseโ)
- ์๊ณกํ๊ณ ์ ์คํ ํํ ์ ๊ฑฐ(โWould you mindโฆโ, โIf you could possiblyโฆโ)
- ์ฝ๋ฉ ํ๋กฌํํธ์ ๋ง๊ฒ ์กฐ์ ๋ 30๊ฐ ์ด์์ ์ ๊ท์ ๊ท์น
์ ํฉํ ์ฉ๋: ์ผ์์ ์ธ ์ฝ๋ฉ ์ํฌํ๋ก, ๋น์ฉ์ ์ค์ํ๋ ํ.
Aggressive ๋ชจ๋(์ฝ 50% ์ ๊ฐ)
์น์ ์ ๋ชฉ: โAggressive ๋ชจ๋(์ฝ 50% ์ ๊ฐ)โ๊ธด ์ธ์ ์ ์ํ ์ค๋งํธ ๊ธฐ๋ก ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ๋๋ค.
- ๋ฉ์์ง ์์ด์ง โ ์ค๋๋ ๋ฉ์์ง์ผ์๋ก ์ ์ง์ ์ผ๋ก ๋ ๋ง์ด ์์ถ
- ๋๊ตฌ ๊ฒฐ๊ณผ ์์ฝ โ ๊ธด ๋๊ตฌ ์ถ๋ ฅ์ ์์ฝ์ผ๋ก ๋์ฒด
- ๊ตฌ์กฐ์ ๋ฌด๊ฒฐ์ฑ ๋ณดํธ ์ฅ์น โ
tool_use+tool_result์์ ์ผ๊ด์ฑ ์ ์ง - ์ปจํ ์คํธ ์ฐฝ ์ธ์ โ ๋ชจ๋ธ๋ณ ํ ํฐ ์ ํ ์ค์
์ ํฉํ ์ฉ๋: ์ฅ์๊ฐ ๋๋ฒ๊น ์ธ์ , ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค.
Ultra ๋ชจ๋(์ฝ 75% ์ ๊ฐ)
์น์ ์ ๋ชฉ: โUltra ๋ชจ๋(์ฝ 75% ์ ๊ฐ)โํ ํฐ์ด ๋งค์ฐ ์ค์ํ ์ํฉ์ ์ํ ์ต๋ ์์ถ ๋ชจ๋์ ๋๋ค.
- ํด๋ฆฌ์คํฑ ๊ฐ์ง์น๊ธฐ โ ๊ด๋ จ์ฑ ์๊ณ๊ฐ๋ณด๋ค ๋ฎ์ ๋ฉ์์ง ์ ๊ฑฐ
- ์ฝ๋ ๋ธ๋ก ์ถ์ โ ๋ฐ๋ณต์ ์ธ ์ฝ๋ ์์ ์์ถ
- ์ด์ง ํ์ ์ ๋จ โ ์ปจํ ์คํธ ์ฐฝ์ ๋ง๋ ์ต์ ์ ์ ๋จ ์ง์ ํ์
- Aggressive ๋ชจ๋์ ๋ชจ๋ ๊ธฐ๋ฅ ํฌํจ
์ ํฉํ ์ฉ๋: ์ปจํ ์คํธ ์ ํ์ ๋ฐ๋ณต์ ์ผ๋ก ๋๋ฌํ๋ ๊ฒฝ์ฐ.
RTK ๋ชจ๋(์ ์คํธ๋ฆผ ๊ธฐ์ค 60~90%)
์น์ ์ ๋ชฉ: โRTK ๋ชจ๋(์ ์คํธ๋ฆผ ๊ธฐ์ค 60~90%)โRTK ๋ชจ๋๋ ์ฝ๋ฉ ์์ด์ ํธ ์ธ์ ์ ๋ํ๋๋ ์ฅํฉํ ๋๊ตฌ ์ถ๋ ฅ์ ์ต์ ํ๋์ด ์์ต๋๋ค.
git status,git diff,git log, ํ ์คํธ ์คํ๊ธฐ, TypeScript/Vite/Webpack ๋น๋, ESLint/Biome/Prettier, npm ๊ฐ์ฌ/์ค์น, Docker ๋ก๊ทธ, ์ธํ๋ผ ์ถ๋ ฅ ๋ฐ ์ผ๋ฐ ์ ธ ์ถ๋ ฅ๊ณผ ๊ฐ์ ๋ช ๋ น์ด/์ถ๋ ฅ ํด๋์ค ๊ฐ์งopen-sse/services/compression/engines/rtk/filters/์ JSON ํํฐ ํฉ ์ ์ฉ- ํ๋ก์ ํธ ๋๋ ์ ์ญ
filters.tomlํ์ผ์์ RTK TOML ์คํค๋ง v1 ํํฐ๋ฅผ ๊ฐ์ ธ์ค๋ฉฐ, ์ธ๋ผ์ธ ํ ์คํธ ๊ฒ์ฆ ๋ฐ ํ๋ก์ ํธ ํ์ผ์ ๋ํ ์ ๋ขฐ ๊ฒ์ดํ ์ ์ฉ - ์ธ๋ผ์ธ ๊ฒ์ฆ ์ํ์ด ํฌํจ๋ 49๊ฐ์ ๊ธฐ๋ณธ ์ ๊ณต ํํฐ ์ ๊ณต
- ANSI ์ ์ด ์ํ์ค, ์งํ๋ฅ ํ์์ค, ๋ฐ๋ณต๋๋ ์ค ๋ฐ ์คํ ๋ถ๊ฐ๋ฅํ ๋ ธ์ด์ฆ ์ ๊ฑฐ
- ์คํจ, ์ค๋ฅ, ๊ฒฝ๊ณ , ๋ณ๊ฒฝ๋ ํ์ผ, ์์ฝ ๋ฐ ๊ธด ์ถ๋ ฅ์ ๋ง์ง๋ง ๋ถ๋ถ ๋ณด์กด
- ์ ๋ขฐ ๊ฒ์ดํ ์ด ์ ์ฉ๋ ํ๋ก์ ํธ ํํฐ, ์ ์ญ ํํฐ ๋ฐ ์ ํ์ ์ธ ์์ ์ฒ๋ฆฌ๋ ์์ ์ถ๋ ฅ ๋ณต๊ตฌ ์ง์
์ ํฉํ ์ฉ๋: ์ ธ, ๋น๋, ํ ์คํธ, git, grep ๋ฐ ํ์ผ ์ถ๋ ฅ ๊ธฐ๋ก์ด ํฌํจ๋ ์์ด์ ํธ ์ธ์ .
Stacked ๋ชจ๋(์ ๊ฒฉ ๋ฒ์ ๊ธฐ์ค 78~95%)
์น์ ์ ๋ชฉ: โStacked ๋ชจ๋(์ ๊ฒฉ ๋ฒ์ ๊ธฐ์ค 78~95%)โStacked ๋ชจ๋๋ ์ฌ๋ฌ ์์ถ ์์ง์ ๊ฒฐ์ ๋ก ์ ์์๋ก ์คํํฉ๋๋ค. ๊ธฐ๋ณธ ํ์ดํ๋ผ์ธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
RTK -> Caveman์ด ์์๋ ๋จผ์ ํฐ๋ฏธ๋/๋๊ตฌ ์ถ๋ ฅ์ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ ๋ค์, ๋จ์ ์์ฐ์ด ํ๋กฌํํธ์ Caveman ์๋ฏธ ์์ถ์ ์ ์ฉํฉ๋๋ค. Stacked ํ์ดํ๋ผ์ธ์ ์ ์ญ์ผ๋ก ๊ตฌ์ฑํ๊ฑฐ๋ ๋ผ์ฐํ ์ฝค๋ณด์ ํ ๋น๋ ์์ถ ์ฝค๋ณด๋ฅผ ํตํด ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
์ ํฉํ ์ฉ๋: ๋๊ท๋ชจ ๋๊ตฌ ๋ก๊ทธ์ ์ฌ์ฉ์ ์ง์นจ ๋๋ ์ด์์คํดํธ ์์ฝ์ด ํจ๊ป ํฌํจ๋ ํผํฉ ์ปจํ ์คํธ.
์ ์คํธ๋ฆผ ์ ๊ฐ๋ฅ ๊ณ์ฐ
์น์ ์ ๋ชฉ: โ์ ์คํธ๋ฆผ ์ ๊ฐ๋ฅ ๊ณ์ฐโOmniRoute๋ ์ ์คํธ๋ฆผ ํ๋ก์ ํธ ๋ฒค์น๋งํฌ์ OmniRoute ์์ฒด ์์ง ์กฐํฉ์ด๋ผ๋ ๋ ๊ฐ์ง ์ถ์ฒ๋ฅผ ๋ฐํ์ผ๋ก ์์ถ ์ ๊ฐ๋ฅ ์ ๋ฌธ์ํํฉ๋๋ค.
| ์ถ์ฒ | ์ฌ๊ธฐ์์ ์ฌ์ฉ๋ ์ ์คํธ๋ฆผ README ์์น |
|---|---|
| Caveman | ์ถ๋ ฅ ํ ํฐ ~75% ๊ฐ์, ๋ฒค์น๋งํฌ ํ๊ท ์ถ๋ ฅ ์ ๊ฐ๋ฅ 65%, ๋ฒ์ 22-87%, ์
๋ ฅ ์์ถ ๋๊ตฌ ~46% |
| RTK | ๋ช
๋ น ์ถ๋ ฅ ์ ๊ฐ๋ฅ 60-90%; ์ํ ์ธ์
ํ ํฐ ~118,000 -> ~23,900, ์ฆ 79.7% ์ ๊ฐ(~80%) |
์ค๋ณต๋๋ ๋๊ตฌ/์ปจํ ์คํธ ํ์ด๋ก๋์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ OmniRoute ์กฐํฉ์ ๋ค์๊ณผ ๊ฐ์ด ์์ง์ ์ฐ๊ณํฉ๋๋ค.
RTK -> Caveman๊ฒฐํฉ ์ ๊ฐ๋ฅ ์ ๋ง์ ๋ฐฉ์์ด ์๋๋ผ ๊ณฑ์ ๋ฐฉ์์ผ๋ก ๊ณ์ฐ๋ฉ๋๋ค.
๊ฒฐํฉ๊ฐ = 1 - (1 - RTK ์ ๊ฐ๋ฅ ) * (1 - Caveman ์
๋ ฅ ์ ๊ฐ๋ฅ )ํ๊ท = 1 - (1 - 0.80) * (1 - 0.46) = 89.2%๋ฒ์ = 1 - (1 - 0.60..0.90) * (1 - 0.46) = 78.4-94.6%์ด 78-95% ์์น๋ RTK์ Caveman์ด ๋์ผํ ์
๋ ฅ/์ปจํ
์คํธ ํ์ด๋ก๋๋ฅผ ๋ชจ๋ ์ค์ผ ์ ์์ ๋ ์ ์ฉ๋ฉ๋๋ค.
Caveman ์๋ต ์ถ๋ ฅ ๋ชจ๋๋ ๋ณ๊ฐ์
๋๋ค. ์ด ๋ชจ๋๋ฅผ ํ์ฑํํ ๊ฒฝ์ฐ Caveman ์์ฒด ์ถ๋ ฅ ์ ๊ฐ๋ฅ (ํ๊ท 65%,
๋ํ ์์น ~75%, ๋ฒ์ 22-87%)์ ์ฌ์ฉํฉ๋๋ค. ์ด ๊ณผ๊ธ ์ ๊ฐ๋ฅ ์ ํ๋กฌํํธ์ ์ถ๋ ฅ์ ๊ตฌ์ฑ ๋น์จ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค.
โ๋์โ์ ์ค์ ์๋ฏธ
์น์ ์ ๋ชฉ: โโ๋์โ์ ์ค์ ์๋ฏธโ15-95%๋ผ๋ ๋ํ ๋ฒ์๋ ์ค์ ์์น์ด์ง๋ง, ๋ฐ๋ณต๋๋ ์ค๋ฅ ์ค, ๋์ผํ ๊ฒฝ๊ณ ๋ฅผ ์์๋ด๋ ๋น๋ ๋ก๊ทธ, ์ง๋์น๊ฒ ํฐ grep/ํ์ผ ์ฝ๊ธฐ ๋คํ์ ๊ฐ์ ์ค๋ณต๋๊ฑฐ๋ ์ฅํฉํ ์ฝํ
์ธ ์๋ง ์ ์ฉ๋ฉ๋๋ค. ๋ชจ๋ ์์ฒญ์์ ๊ทธ๋งํผ ์ ๊ฐ๋๋ค๋ ์๋ฏธ๋
์๋๋๋ค.
์ค์ฆ์ ์ผ๋ก ๊ฒ์ฆ๋์์ต๋๋ค(tests/unit/compression/stacked-compression-tool-result-savings.test.ts). ๋์ผํ ์ค๋ฅ ์ค 300๊ฐ๊ฐ ํฌํจ๋ Anthropic ํ์์ tool_result ๋ธ๋ก์ ๋์์ผ๋ก stacked(RTK + Caveman)๋ฅผ ์คํํ ๊ฒฐ๊ณผ, **ํ ํฐ ์ ๊ฐ๋ฅ 95.93% / ๋ฌธ์ ์ ๊ฐ๋ฅ 96.26%**๋ฅผ ๊ธฐ๋กํ์ฌ ๋ช
์๋ ๋ฒ์์ ์ ํํ ๋ค์ด์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ผ๋ฐ์ ์ธ ๋น์ค๋ณต ๋๊ตฌ ์ถ๋ ฅ(๊น๋ํ grep ์ผ์น ๋ชฉ๋ก, ์งง์ ํ์ผ ์ฝ๊ธฐ, ํ๋ฒํ ๋ํ ํ
์คํธ)์ ๋์ผํ ํ์ดํ๋ผ์ธ์ ์คํํ๋ฉด ์์๋๋ก ๊ฑฐ์ 0์ ๊ฐ๊น์ด ์ ๊ฐ๋ฅ ์ด ๋์ต๋๋ค. ์ ๊ฑฐํ ๋งํ ๋ฐ๋ณต ๋ด์ฉ์ด ์๊ณ , validateCompression()(validation.ts)์ด ์ฝ๋ ๋ธ๋ก, URL, ์ ๋ชฉ, ๋ฒ์ ๋๋ ALL-CAPS ์์ ์๋ณ์๋ฅผ ๋๋ฝํ๊ฑฐ๋ ๋ณ๊ฒฝํ ์ ์๋ ์ฌ์์ฑ์ ์ ์กํ์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค.
์ด๋ ๋ฒ๊ทธ๊ฐ ์๋๋ผ ์์๋ ์์ ๋์์
๋๋ค. ์ฃผ๋ก ๊น๋ํ ํ์ผ์ ์ฝ๊ฑฐ๋ grep์ผ๋ก ๊ฒ์ํ๋ ์ฝ๋ฉ ์ธ์
์ ์์ถ์ ์์ ํ ํ์ฑํํ๋๋ผ๋ ์ด ์ ๊ฐ๋ฅ ์ด ํฌ์ง ์์ ์ ์์ง๋ง, ์คํจ ๋ฃจํ๋ ์ฅํฉํ ๋ฆฐํฐ ์ถ๋ ฅ์ ๋ง๋๋ ์ธ์
์์๋ ํด๋น ํธ๋ํฝ์ ๋ํด ์ ์ฒด 78-95% ๋ฒ์์ ์ ๊ฐ๋ฅ ์ ๋ณผ ์ ์์ต๋๋ค. ๋จ์ผ ์ธ์
์ ๋ฎ์ ์ด ์ ๊ฐ๋ฅ ์ ์์ถ์ด ์๋ชป ๊ตฌ์ฑ๋์๋ค๋ ์ฆ๊ฑฐ๋ก ์ฌ์ฉํ์ง ๋ง์ธ์. ๋จผ์ ๊ธฐ๋ฐ ๋๊ตฌ ์ถ๋ ฅ์ด ์ค์ ๋ก ์ค๋ณต๋์๋์ง ํ์ธํ์ธ์.
ํ ํฐ ์ ๊ฐ ์๊ฐํ
์น์ ์ ๋ชฉ: โํ ํฐ ์ ๊ฐ ์๊ฐํโ์์ถ ๋ฏธ์ฌ์ฉ: LLM์ 47K ํ ํฐ ์ ์กLite ์ฌ์ฉ: 40K ํ ํฐ ์ ์ก (15% ์ ๊ฐ โ ์์ ํ ์์ ์ ์ฉ)Standard ์ฌ์ฉ: 33K ํ ํฐ ์ ์ก (30% ์ ๊ฐ โ caveman-speak ๊ท์น)Aggressive ์ฌ์ฉ: 24K ํ ํฐ ์ ์ก (50% ์ ๊ฐ โ ์์ด์ง + ์์ฝ)Ultra ์ฌ์ฉ: 12K ํ ํฐ ์ ์ก (75% ์ ๊ฐ โ ํด๋ฆฌ์คํฑ ๊ฐ์ง์น๊ธฐ)RTK ์ฌ์ฉ: 19K-5K ํ ํฐ ์ ์ก (๋ช
๋ น/๋๊ตฌ ์ถ๋ ฅ์์ 60-90% ์ ๊ฐ)Stacked ์ฌ์ฉ: 10K-2.5K ํ ํฐ ์ ์ก (์ ์ฉ ๊ฐ๋ฅํ RTK+Caveman ๋ฒ์์์ 78-95% ์ ๊ฐ)๋์๋ณด๋
์น์ ์ ๋ชฉ: โ๋์๋ณด๋โDashboard โ Context & Cache๋ก ์ด๋ํฉ๋๋ค:
- Caveman โ ๋ชจ๋ ์ ํ, ์ธ์ด ํฉ, ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฐ ์ ์ญ ๊ธฐ๋ณธ๊ฐ
- RTK โ ๋ช ๋ น-ํํฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, RTK ์์ ์ค์ ๋ฐ ํํฐ ์นดํ๋ก๊ทธ
- Compression Combos โ ๋ผ์ฐํ ์ฝค๋ณด์ ํ ๋น๋ ๋ช ๋ช ๋ ์์ง ํ์ดํ๋ผ์ธ
- Auto-Trigger Threshold โ ํ ํฐ ์๊ฐ ์๊ณ๊ฐ์ ์ด๊ณผํ ๋ ์๋์ผ๋ก ์์ถ์ ์์
์ฝค๋ณด๋ณ ์ฌ์ ์
์น์ ์ ๋ชฉ: โ์ฝค๋ณด๋ณ ์ฌ์ ์โDashboard โ Context & Cache โ Compression Combos์์ ๋ผ์ฐํ
์ฝค๋ณด์ ์์ถ ์ฝค๋ณด๋ฅผ ํ ๋นํฉ๋๋ค:
Combo: "free-tier-fallback" Compression Combo: "coding-agent-stack" Pipeline: RTK -> Caveman Targets: 1. if/kimi-k2.7-code 2. if/qwen3.8-max-preview์ด๋ฅผ ํตํด ์ ๋ฃ ๊ตฌ๋ ์์๋ ๋ผ์ดํธ ๋ชจ๋๋ฅผ ์ ์งํ๋ฉด์ ๋ฌด๋ฃ/์ฝ๋ฉ ์ ๊ณต์ ์ฒด์์ ์คํํ ์์ถ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด โ์ฝค๋ณด๋ณ ์ฌ์ ์โ ํ ๋น์ ๋ผ์ฐํ
์ฝค๋ณด ์์ถ ๋ชจ๋ ์ฌ์ ์(Default/Off/Lite/Standard/Aggressive/Ultra)์๋ ๋ค๋ฅธ ์ ์ด ๋ฐฉ์์
๋๋ค. ํด๋น ์ฌ์ ์๋ ๋ช
๋ช
๋ ์์ถ ์ฝค๋ณด ํ์ดํ๋ผ์ธ์ ์ ํํ์ง ์๊ณ , resolveCompressionPlan์ด ์ฐธ์กฐํ๋ compressionMode ํ๋๋ง ์ค์ ํฉ๋๋ค. ์ด๋ ์ฝค๋ณด ์นด๋(Dashboard โ Combos) ๋๋ #6760 ์ดํ Dashboard โ Context & Cache โ Compression Combos์ โAssign to routingโ ๋ชฉ๋ก์์ ํ์ดํ๋ผ์ธ ํ ๋น ์ฒดํฌ๋ฐ์ค ๋ฐ๋ก ์์ ์๋ ๋ผ์ฐํ
์ฝค๋ณด๋ณ๋ก ์ค์ ํ ์ ์์ต๋๋ค. ๋ ์ธํฐํ์ด์ค ๋ชจ๋ ๋์ผํ PUT /api/combos/{id} ์๋ํฌ์ธํธ๋ฅผ ํตํด ์ ์ง๋ฉ๋๋ค.
์์ฒญ๋ณ ์ฌ์ ์
์น์ ์ ๋ชฉ: โ์์ฒญ๋ณ ์ฌ์ ์โ๋จ์ผ ์์ฒญ์ ๋ํ ์์ถ ๊ณํ์ ์ฌ์ ์ํ๋ ค๋ฉด x-omniroute-compression ์์ฒญ ํค๋๋ฅผ ๋ณด๋
๋๋ค. ์ด๋ ๊ฐ์ฅ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ฉฐ, ๋ผ์ฐํ
์ฝค๋ณด ์ฌ์ ์, ํ์ฑ ํ๋กํ, ์๋ ํธ๋ฆฌ๊ฑฐ ๋ฐ ํจ๋ ๊ธฐ๋ณธ๊ฐ์ ๋ฅ๊ฐํฉ๋๋ค. ์ ์ ์๋ ๊ฐ์ ๋ฌด์๋๋ฉฐ(์์ฒญ์ด ๊ฑฐ๋ถ๋์ง ์์) ์ ์ญ ๋ง์คํฐ ์ค์์น๋ ์ฌ์ ํ ๋ชจ๋ ๊ฒ์ ์ ์ดํฉ๋๋ค. ์ฆ, ์ ์ญ์ ์ผ๋ก ์์ถ์ด ๊บผ์ ธ ์์ผ๋ฉด ํค๋๊ฐ ์์ถ์ ์ผค ์ ์์ต๋๋ค. ๊ฐ:
| ๊ฐ | ํจ๊ณผ |
|---|---|
off |
์ด ์์ฒญ์ ๋ํ ์์ถ ์์. |
default |
ํจ๋์์ ํ์๋ ๊ธฐ๋ณธ ํ๋กํ(ํ์ฑ ํ๋กํ ๋ฌด์). ์์ค ์์ง์ ๊บผ์ง ์ํ๋ก ์ ์ง๋ฉ๋๋ค. |
safe |
ํค๋๋ฅผ ์๋ตํ๋ ๊ฒ๊ณผ ๋์ผ: ์ค๋ณต ์ ๊ฑฐ ๋ฐ ๊ณต๋ฐฑ ์ ๊ธฐ๋ง ์ ์ฉ. |
allow-lossy |
์์ฝ, ๊ด๋ จ์ฑ ํํฐ ๋ฐ ์คํ์ผ ์ฌ์์ฑ์ ํฌํจํ์ฌ ์ด ์์ฒญ์ ์ฐ์ฐ์ ๊ณํ์ ์ ์งํฉ๋๋ค. |
engine:<id> |
ํ์ฑํ๋ ๊ฒฝ์ฐ ๋จ์ผ ์์ง, ์: engine:rtk. ์ด๋ ํด๋น ์์ง์ ๋ํ ์์ฒญ๋ณ ์ตํธ์ธ์
๋๋ค. |
<combo> |
๋ช ๋ช ๋ ์ฝค๋ณด๋ก, ๋จผ์ ์ด๋ฆ(๋์๋ฌธ์ ๊ตฌ๋ถ ์์)์ผ๋ก ์ผ์น์ํจ ๋ค์ ID๋ก ์ผ์น์ํต๋๋ค. |
allow-lossy, engine:<id> ๋๋ ๋ช
๋ช
๋ ์ฝค๋ณด๊ฐ ์์ผ๋ฉด ์์ค ์์ง์ ์ ์ฉ๋์ง ์์ต๋๋ค. ์์ถ์ด ์ผ์ ธ ์์ ๋ ์์ฒญ์ ์ฌ์ ํ ์ธ์
์ค๋ณต ์ ๊ฑฐ ๋ฐ ๊ณต๋ฐฑ ์ ๊ธฐ๋ฅผ ๋ฐ์ต๋๋ค.
์ ์ฉ๋ ๊ณํ์ X-OmniRoute-Compression: <mode>; source=<source> ์๋ต ํค๋์ ๋ฐ์๋๋ฉฐ, ์ฌ๊ธฐ์ <source>๋ request-header, routing-override, active-profile, auto-trigger, default ๋๋ off ์ค ํ๋์
๋๋ค.
# ์์ถ ์ค์ ๊ฐ์ ธ์ค๊ธฐcurl http://localhost:20128/api/settings/compression
# ์์ถ ์ค์ ์
๋ฐ์ดํธcurl -X PUT http://localhost:20128/api/settings/compression \ -H "Content-Type: application/json" \ -d '{"defaultMode":"stacked","autoTriggerMode":"stacked","autoTriggerTokens":32000}'
# ํน์ RTK/์คํํ ํ์ด๋ก๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐcurl -X POST http://localhost:20128/api/compression/preview \ -H "Content-Type: application/json" \ -d '{"mode":"rtk","messages":[{"role":"tool","content":"npm test output here"}]}'
# RTK ํํฐ ํฉ ๋ชฉ๋กcurl http://localhost:20128/api/context/rtk/filters
# ์ ํ์ ๋ช
๋ น ๋ฉํ๋ฐ์ดํฐ๋ก RTK ์ง์ ํ
์คํธcurl -X POST http://localhost:20128/api/context/rtk/test \ -H "Content-Type: application/json" \ -d '{"command":"npm test","text":"FAIL tests/example.test.ts\nError: boom"}'๋ณดํธ๋๋ ํญ๋ชฉ
์น์ ์ ๋ชฉ: โ๋ณดํธ๋๋ ํญ๋ชฉโ์์ถ ์์ง์ ํญ์ ๋ค์ ํญ๋ชฉ์ ๋ณด์กดํฉ๋๋ค:
- โ ์ฝ๋ ๋ธ๋ก(ํ์ค ๋ฐ ์ธ๋ผ์ธ)
- โ URL ๋ฐ ํ์ผ ๊ฒฝ๋ก
- โ JSON ๊ตฌ์กฐ ๋ฐ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ
- โ ์๋ณ์ ๋ฐ ๋ณดํธ๋๋ ๊ธฐ์ ํ ํฐ
- โ ์ํ ํํ์
- โ ๋๊ตฌ/ํจ์ ํธ์ถ ์ ์
- โ ์์คํ ํ๋กฌํํธ(๋ผ์ดํธ ๋ชจ๋)
RTK ์์ ์ถ๋ ฅ ๋ณต๊ตฌ ๊ธฐ๋ฅ์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๊ธฐ ์ ์ ์ผ๋ฐ์ ์ธ API ํค, bearer ํ ํฐ, Slack ํ ํฐ, AWS ์ก์ธ์ค ํค, ๋น๋ฐ๋ฒํธ, ํ ํฐ ๋ฐ ๋น๋ฐ ์ ๋ณด๋ฅผ ๋ง์คํนํฉ๋๋ค.
์์ถ ํต๊ณ
์น์ ์ ๋ชฉ: โ์์ถ ํต๊ณโ์์ถ๋ ๋ชจ๋ ์์ฒญ์๋ ์๋ฒ ๋ก๊ทธ์ ํต๊ณ๊ฐ ํฌํจ๋ฉ๋๋ค:
{ "originalTokens": 47200, "compressedTokens": 40120, "savingsPercent": 15.0, "techniquesUsed": ["collapseWhitespace", "dedupSystemPrompt"], "mode": "lite", "engine": "caveman", "compressionComboId": "coding-agent-stack", "durationMs": 0.8, "rtkRawOutputPointers": []}๋จ๊ณ๋ณ ๋ก๋๋งต
์น์ ์ ๋ชฉ: โ๋จ๊ณ๋ณ ๋ก๋๋งตโ| ๋จ๊ณ | ๋ชจ๋ | ์ํ |
|---|---|---|
| 1๋จ๊ณ | Off, Lite | โ ์ถ์๋จ |
| 2๋จ๊ณ | Standard, Aggressive, Ultra | โ ์ถ์๋จ |
| 3๋จ๊ณ | RTK, Stacked, Compression Combos | โ ์ถ์๋จ |
| 4๋จ๊ณ | Output Styles, SLM-tier Ultra, eval harness | โ ์ถ์๋จ |
| 4C๋จ๊ณ | ์ ์ํ ์ปจํ
์คํธ ์์ฐ (โ๋ค์ด์ผโ) โ ์ปดํจํ
์์ง + API (contextBudget on PUT /api/settings/compression) + ๋์๋ณด๋ ๋ชจ๋/์ ์ฑ
์ ์ด |
โ ์ถ์๋จ |
๊ฐ์ฌ์ ๋ง
์น์ ์ ๋ชฉ: โ๊ฐ์ฌ์ ๋งโStandard ๋ชจ๋ ์์ถ ๊ท์น์ JuliusBrussee(โญ 51K+)์ **Caveman**์์ ์๊ฐ์ ๋ฐ์์ต๋๋ค. ์ด ํ๋ก์ ํธ๋ โ์ ์ ํ ํฐ์ผ๋ก ์ถฉ๋ถํ๋ฐ ์ ๋ง์ ํ ํฐ์ ์ฌ์ฉํ๋๊ฐโ๋ผ๋ ๋ฌธ๊ตฌ๋ก ๋๋ฆฌ ์๋ ค์ก์ต๋๋ค. Caveman์ ์ถ๋ ฅ ํ ํฐ์ด ~75% ๊ฐ์ํ๊ณ , ๋ฒค์น๋งํฌ ํ๊ท ์ถ๋ ฅ ์ ๊ฐ๋ฅ ์ด 65%, ์ถ๋ ฅ ์ ๊ฐ ๋ฒ์๊ฐ 22-87%์ด๋ฉฐ, ์
๋ ฅ ์์ถ ๋๊ตฌ์ ์ ๊ฐ๋ฅ ์ ~46%๋ผ๊ณ ๋ณด๊ณ ํฉ๋๋ค.
RTK ๋ชจ๋๋ **RTK AI**์ **RTK - Rust Token Killer**์์ ์๊ฐ์ ๋ฐ์์ต๋๋ค. ์ด ํ๋ก์ ํธ๋ ํฐ๋ฏธ๋, ๋น๋, ํ
์คํธ, git ๋ฐ ๋๊ตฌ ์ถ๋ ฅ ํํฐ๋ง์ ์ํ ๊ณ ์ฑ๋ฅ ๋ช
๋ น ์ถ๋ ฅ ์์ถ ํ๋ก์ ํธ์
๋๋ค. RTK๋ 60-90%์ ์ ๊ฐ๋ฅ ์ ๋ณด๊ณ ํ๋ฉฐ, README์ ์ํ ์ธ์
์์๋ ~80%๊ฐ ์ ๊ฐ๋ ๊ฒ์ผ๋ก ๋ํ๋ฉ๋๋ค.
๊ณ ๊ธ ์์ถ ์์คํ
์น์ ์ ๋ชฉ: โ๊ณ ๊ธ ์์ถ ์์คํ โ7๊ฐ์ง ํ์ค ๋ชจ๋ ์ธ์๋ OmniRoute๋ ์ปจํ ์คํธ์ ๋ฐ๋ผ ์๋์ผ๋ก ์๋ํ๋ ์ฌ๋ฌ ๊ณ ๊ธ ์์ถ ์์คํ ์ ํฌํจํฉ๋๋ค.
์บ์ ์ธ์ ์์ถ
์น์ ์ ๋ชฉ: โ์บ์ ์ธ์ ์์ถโ์ผ๋ถ ๊ณต๊ธ์(ํ๋กฌํํธ ์บ์ฑ์ ์ฌ์ฉํ๋ Anthropic ๋ฑ)๋ ํ๋กฌํํธ ์บ์ฑ์ ์ง์ํ์ฌ ํ๋กฌํํธ์ ์ผ๋ถ๋ฅผ ์บ์ํ์ฌ ๋น์ฉ๊ณผ ์ง์ฐ ์๊ฐ์ ์ค์ผ ์ ์์ต๋๋ค. ์บ์ฑ์ด ํ์ฑํ๋๋ฉด ๊ณต๊ฒฉ์ ์ธ ์์ถ์ ์บ์๋ ํ ํฐ์ ๋ณ๊ฒฝํ์ฌ ์บ์๋ฅผ ๋ฌดํจํํ๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก ์ฑ๋ฅ์ ์ ํดํ ์ ์์ต๋๋ค.
cachingAware.ts ๋ชจ๋์ ์บ์ฑ ์ปจํ
์คํธ๋ฅผ ๊ฐ์งํ๊ณ ๊ทธ์ ๋ฐ๋ผ ์์ถ ์ ๋ต์ ์กฐ์ ํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
์๋ ๋ฐฉ์
์น์ ์ ๋ชฉ: โ์๋ ๋ฐฉ์โ- ์บ์ฑ ์ปจํ
์คํธ ๊ฐ์ง โ ์์ฒญ ๋ณธ๋ฌธ์์
cache_control๋ง์ปค๋ฅผ ์ค์บํฉ๋๋ค. - ์บ์ฑ ๊ณต๊ธ์ ์๋ณ โ ๋์ ๊ณต๊ธ์๊ฐ ์บ์ฑ์ ์ง์ํ๋์ง ํ์ธํฉ๋๋ค.
- ์ ๋ต ์กฐ์ โ ์บ์ฑ ๊ณต๊ธ์์ ๊ฒฝ์ฐ
aggressive/ultra๋ฅผstandard๋ก ๋ค์ด๊ทธ๋ ์ด๋ํฉ๋๋ค. - ์์คํ ํ๋กฌํํธ ๊ฑด๋๋ฐ๊ธฐ โ ์์คํ ํ๋กฌํํธ๋ ์ผ๋ฐ์ ์ผ๋ก ์บ์๋๋ฏ๋ก ์์ถํ์ง ์์ต๋๋ค.
- ๊ฒฐ์ ๋ก ์ ๋ณํ ์ฌ์ฉ โ ์ผ๊ด๋ ์ถ๋ ฅ์ ์์ฑํ๋ ๋ณํ๋ง ์ฌ์ฉํฉ๋๋ค.
์ฝ๋ ์์
์น์ ์ ๋ชฉ: โ์ฝ๋ ์์โimport { detectCachingContext, getCacheAwareStrategy,} from "@omniroute/open-sse/services/compression/cachingAware";
const body = { model: "anthropic/claude-sonnet-4.5", messages: [{ role: "user", content: "Hello" }], cache_control: { type: "ephemeral" }, // โ ์บ์ ๋ง์ปค};
const ctx = detectCachingContext(body, { provider: "anthropic" });// โ { hasCacheControl: true, provider: "anthropic", isCachingProvider: true }
const strategy = getCacheAwareStrategy("aggressive", ctx);// โ { strategy: "standard", skipSystemPrompt: true, deterministicOnly: true }์ฌ์ฉ ์์
์น์ ์ ๋ชฉ: โ์ฌ์ฉ ์์ โ์บ์ ์ธ์ ์์ถ์ ํญ์ ์ผ์ ธ ์์ต๋๋ค โ ๋ณ๋์ ๊ตฌ์ฑ์ด ํ์ ์์ต๋๋ค. ๋ค์ ๊ฒฝ์ฐ์๋ง ์๋ํฉ๋๋ค.
- ์์ฒญ์
cache_control๋ง์ปค๊ฐ ์๋ ๊ฒฝ์ฐ - ๋์ ๊ณต๊ธ์๊ฐ ํ๋กฌํํธ ์บ์ฑ์ ์ง์ํ๋ ๊ฒฝ์ฐ (Anthropic, OpenAI ๋ฑ)
์ ์ง์ ๋ ธํ (Progressive Aging)
์น์ ์ ๋ชฉ: โ์ ์ง์ ๋ ธํ (Progressive Aging)โ๊ธด ๋ํ๋ ๋ง์ ๋ฉ์์ง ํด์ ์ถ์ ํ์ง๋ง, ์ค๋๋ ํด์ ๊ด๋ จ์ฑ์ด ๋จ์ด์ง๋๋ค. progressiveAging.ts ๋ชจ๋์ ํด ๊ฑฐ๋ฆฌ์ ๋ฐ๋ผ ๋ฉ์์ง๋ฅผ ์ ํ์ํต๋๋ค:
- ์ต๊ทผ ํด (0-3): ๊ทธ๋๋ก ์ ์ง (์ ์ฒด ์ธ๋ถ ์ ๋ณด)
- ์ค๊ฐ ํด (4-8): ๊ฐ๋ฒผ์ด ์์ถ (๊ณต๋ฐฑ, ์์ ์ ๋ฆฌ)
- ์ค๋๋ ํด (9+): ์์์ธ ์์ถ (๋ถํ์ํ ๋ด์ฉ ์ ๊ฑฐ, ์์ฝ)
- ๋งค์ฐ ์ค๋๋ ํด (20+): ์ฌํ๊ฒ ์์ฝ๋๊ฑฐ๋ ์ญ์ ๋จ
์ฝ๋ ์์
์น์ ์ ๋ชฉ: โ์ฝ๋ ์์โimport { applyAging } from "@omniroute/open-sse/services/compression/progressiveAging";
const messages = [ { role: "system", content: "You are a helpful assistant" }, { role: "user", content: "What is 2+2?" }, { role: "assistant", content: "4" }, // ... 50๊ฐ ์ด์์ ํด ...];
const { messages: aged, saved } = applyAging(messages, { verbatim: 3, // ์ฒซ 3๊ฐ ํด: ๊ทธ๋๋ก light: 8, // 4-8 ํด: ๊ฐ๋ฒผ์ด ์์ถ moderate: 20, // 9-20 ํด: ์์์ธ ์์ถ // 21+ ํด: ์ฌํ ์์ฝ});
// saved = ์ ์ฝ๋ ํ ํฐ ์์ฌ์ฉ ์์
์น์ ์ ๋ชฉ: โ์ฌ์ฉ ์์ โ์ ์ง์ ๋
ธํ๋ aggressive ๋ฐ ultra ๋ชจ๋์์ ํญ์ ์ผ์ ธ ์์ต๋๋ค. ํนํ ๋ค์ ๊ฒฝ์ฐ์ ํจ๊ณผ์ ์
๋๋ค.
- ์ฅ์๊ฐ ์ฝ๋ฉ ์ธ์
- ์ฌ๋ฌ ๋ ์ ๊ฑธ์น ๋ํ
- ๋ง์ ๋๊ตฌ ํธ์ถ์ด ์๋ ์์ด์ ํธ ์ํฌํ๋ก์ฐ
์์์ธ ์ถ๋ ฅ ๋ชจ๋ (Caveman Output Mode)
์น์ ์ ๋ชฉ: โ์์์ธ ์ถ๋ ฅ ๋ชจ๋ (Caveman Output Mode)โoutputMode.ts ๋ชจ๋์ ๋ชจ๋ธ ์์ฒด๊ฐ ์์ถ๋๊ณ ๊ฐ๊ฒฐํ ์ถ๋ ฅ(โ์์์ธโ ์คํ์ผ)์ ์์ฑํ๋๋ก ์์คํ
ํ๋กฌํํธ ์ง์นจ์ ์ฃผ์
ํฉ๋๋ค.
์๋ ๋ฐฉ์
์น์ ์ ๋ชฉ: โ์๋ ๋ฐฉ์โ์ ๋ ฅ์ ์์ถํ๋ ๋์ , ์ด ๋ชจ๋๋ ๋ค์๊ณผ ๊ฐ์ ์์คํ ํ๋กฌํํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
โ์ต์ํ์ ๋จ์ด๋ก ๋ตํ์ธ์. ๋ถํ์ํ ์ธ์ฌ๋ ๊ฑด๋๋ฐ์ธ์. ์งง์ ๋ฌธ์ฅ์ ์ฌ์ฉํ์ธ์.โ
์ด๊ฒ์ ๋ค์ ๊ฒฝ์ฐ์ ํนํ ์ ์๋ํฉ๋๋ค.
- ์ฝ๋ ์์ฑ (๊ฐ๊ฒฐํ ์ถ๋ ฅ = ์ ์ ํ ํฐ)
- ๋น ๋ฅธ Q&A (์ ๊ตํ ์ค๋ช ๋ถํ์)
- ์ผ๊ด ์ฒ๋ฆฌ (์ฒ๋ฆฌ๋ ๊ทน๋ํ)
์ฌ์ฉ ์์
์น์ ์ ๋ชฉ: โ์ฌ์ฉ ์์ โ์์์ธ ์ถ๋ ฅ ๋ชจ๋๋ ์ ํ ์ฌํญ์ ๋๋ค โ ์ฝค๋ณด ๊ตฌ์ฑ์ ํตํด ์ค์ ํฉ๋๋ค.
{ "strategy": "auto", "config": { "auto": { "outputMode": "caveman" } }}์ถ๋ ฅ ์คํ์ผ (์นดํ๋ก๊ทธ)
์น์ ์ ๋ชฉ: โ์ถ๋ ฅ ์คํ์ผ (์นดํ๋ก๊ทธ)โ์์ ์์์ธ ์ถ๋ ฅ ๋ชจ๋๋ ๋ ๊ฑฐ์ ๋จ์ผ ์คํ์ผ ๊ฒฝ๋ก์
๋๋ค. Phase 4์์๋ ์ด๋ฅผ ๊ตฌ์ฑ ๊ฐ๋ฅํ ์ถ๋ ฅ ์คํ์ผ ์นดํ๋ก๊ทธ๋ก ์ผ๋ฐํํ์ต๋๋ค: open-sse/services/compression/outputStyles/catalog.ts์ OUTPUT_STYLE_CATALOG. ๊ฐ ์คํ์ผ์ ๋ชจ๋ธ ์์ฒด๊ฐ ๋ ์ ๋ ดํ ์ถ๋ ฅ์ ์์ฑํ๋๋ก ํ๋ ์์คํ
ํ๋กฌํํธ ์ง์นจ์ด๋ฉฐ, ์คํ์ผ์ ํจ๊ป ํ์ฑํ๋ ์ ์๊ณ ์นดํ๋ก๊ทธ ์์๋๋ก ์ฃผ์
๋ฉ๋๋ค.
| ์คํ์ผ | id |
๊ธฐ๋ฅ | ์ง์์ด ์ธ์ด |
|---|---|---|---|
| ๊ฐ๊ฒฐํ ์ฐ๋ฌธ | terse-prose |
๋ถํ์ํ ๋จ์ด/๊ด์ฌ/์๊ณก์ด๋ฒ์ ์ ๊ฑฐํ๊ณ ๊ธฐ์ ์ ๋ด์ฉ์ ์ ํํ๊ฒ ์ ์งํฉ๋๋ค. ๋ ๊ฑฐ์ caveman ์ถ๋ ฅ ๋ชจ๋์ ๋์ผํ ํ ์คํธ์ ๋๋ค(์ฐธ์กฐ๋์์ผ๋ฉฐ ๋ค์ ์ ๋ ฅ๋์ง ์์). | en, pt-BR, es, de, fr, it, ru, zh, ja, id, vi |
| ์ฝ๋ ์ค์ด๊ธฐ | less-code |
YAGNI ์์น: ์ต์ํ์ ์๋ ๋ณ๊ฒฝ, ์์ฒญํ์ง ์์ ์ถ์ํ ์์. | en, pt-BR, es, de, fr, it, ru, zh, ja, id, vi |
| ํฌ๋ํ ์ผ (๊ฒ์ผ๋ฅธ ์ ์ ๊ฐ๋ฐ์) | ponytail |
โ์ต๊ณ ์ ์ฝ๋๋ ์์ฑ๋์ง ์์ ์ฝ๋โ: ์ฌ์ฌ์ฉ > ์ฌ์์ฑ, ๊ทผ๋ณธ ์์ธ > ์ฆ์, ๊ฐ์ฅ ์งง์ ์๋ ์ฐจ์ด. | en, pt-BR, es, de, fr, it, ru, zh, ja, id, vi |
| ADHD๊ฐ ์์ต๋๋ค (ํ๋ ์ฐ์ ) | i-have-adhd |
ํ๋ ์ฐ์ (์ฐ๋ฌธ๋ณด๋ค ๋ช ๋ น/๊ฒฝ๋ก/์ฝ๋ ์กฐ๊ฐ), ๋ฒํธ๊ฐ ๋งค๊ฒจ์ง ์ ํ๋ ๋จ๊ณ, ํ๋์ ๊ตฌ์ฒด์ ์ธ ๋ค์ ๋จ๊ณ, ์๋ฌธ/์์ฝ/๋ง๋ฌด๋ฆฌ ์์. ayghri/i-have-adhd (MIT)์์ ์ฑํ. | en, pt-BR, es, de, fr, it, ru, zh, ja, id, vi |
| ๊ฐ๊ฒฐํ CJK (ๆ่จ) | terse-cjk |
๊ณ ์ ์ค๊ตญ์ด์ ์ด๊ฐ๊ฒฐ ์คํ์ผ. | zh (๋ก์ผ์ผ ์ ํ: ํด๊ฒฐ๋ ์ธ์ด๊ฐ zh์ผ ๋๋ง ์ ๊ณต) |
๋ชจ๋ ์คํ์ผ์ lite, full, ultra ์ธ ๊ฐ์ง ๊ฐ๋ ์์ค์ ์ ๊ณตํ๋ฉฐ, ๋ชจ๋ ์์ค์
์ฝ๋ ๋ธ๋ก, ํ์ผ ๊ฒฝ๋ก, ๋ช
๋ น, ์ค๋ฅ ๋ฌธ์์ด, URL ๋ฐ ์๋ณ์๋ฅผ ๊ทธ๋๋ก ์ ์งํ๋
๊ณตํต ๊ฒฝ๊ณ ์ ๋ก ๋๋ฉ๋๋ค.
์ฃผ์ ์๋ ๋ฐฉ์
์น์ ์ ๋ชฉ: โ์ฃผ์ ์๋ ๋ฐฉ์โapplyOutputStyles() (open-sse/services/compression/outputStyles/apply.ts)๋
์นดํ๋ก๊ทธ์ ๋ํด ์ ํ ์ฌํญ์ ํด๊ฒฐํ๊ณ (์ ์ ์๋ ID ๋ฐ ๋ก์ผ์ผ ๋ถ์ผ์น ์คํ์ผ์
์ญ์ ๋๋ฉฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์), ์นดํ๋ก๊ทธ ์์๋๋ก ์ ํ๋ ์ง์นจ์ ์ฐ๊ฒฐํ๊ณ ,
๊ฒฝ๊ณ ์ ์ ํ ๋ฒ ์ถ๊ฐํ ๋ค์, ๋จ์ผ ๋ฉฑ๋ฑ์ฑ ๋ง์ปค ([OmniRoute Output Styles])
๋ค์ ์์คํ
ํ๋กฌํํธ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํฉ๋๋ค. ๋ค์ ์ ์ฉํ๋ ๊ฒ์ ์๋ฌด๋ฐ
์์ฉ๋ ํ์ง ์์ต๋๋ค. ๊ฐ์ง๋ ์์ฒญ ์ธ์ด์ ๋ฒ์ญ์ด ์๋ ๊ฒฝ์ฐ, ์์ด ๋์ ํ์งํ๋
์ง์นจ์ด ์ฃผ์
๋ฉ๋๋ค.
ํ์ฑํ ๋ฐฉ๋ฒ
์น์ ์ ๋ชฉ: โํ์ฑํ ๋ฐฉ๋ฒโ๋์๋ณด๋์์: Context โ Settings โ Compression โ ๊ฐ ์คํ์ผ์ ๋ํด ์ผ๊ธฐ/๋๊ธฐ ํ ๊ธ๊ณผ ์์ค ์ ํ๊ธฐ๊ฐ ์๋ ํ ์ค. ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์์ถ ๊ตฌ์ฑ์ ์ ํ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ด ์ ์งํฉ๋๋ค.
{ "outputStyles": [ { "id": "i-have-adhd", "level": "full" }, { "id": "less-code", "level": "lite" } ]}ํ์ ํธํ์ฑ: ๋ ๊ฑฐ์ outputMode: "caveman" ์ฝค๋ณด ์ค์ ์ ์ฌ์ ํ ์๋ํ๋ฉฐ
terse-prose์ ๋งคํ๋๋ฉฐ, ๋ชจ๋ ๋ ๊ฑฐ์ ์ธ์ด์์ ์ด์ ์ฃผ์
๊ณผ ๋ฐ์ดํธ ๋จ์๋ก
๋์ผํฉ๋๋ค.
์ธ์ด ์ ํ: languageConfig.enabled๊ฐ ์ผ์ ธ ์์ผ๋ฉด autoDetect๊ฐ ์ต์ ์ฌ์ฉ์
๋ฉ์์ง์ ์ธ์ด๋ฅผ ์ ํํฉ๋๋ค (์
๋ ฅ ์์ง๊ณผ ๋์ผํ ๊ฐ์ง๊ธฐ). autoDetect๋ฅผ ๋๋ฉด
defaultLanguage๊ฐ ๊ณ ์ ๋ฉ๋๋ค. ๋๋ฉด โ ์์ด.
์คํ์ผ ร ์ธ์ด ๋งคํธ๋ฆญ์ค๋
tests/unit/compression/output-styles-i18n-matrix.test.ts์ ์ํด ๊ณ ์ ๋ฉ๋๋ค.
์๋ก์ด ์คํ์ผ์ ์ต์ํ pt-BR ๋ฒ์ญ (๋๋ ๋ช
์์ ์ผ๋ก ์ถ์ ๋ ์์ธ) ์์ด๋
์ ๊ณต๋ ์ ์์ผ๋ฉฐ, ๊ธฐ์กด ์คํ์ผ์ ๋ก์ผ์ผ์ ์กฐ์ฉํ ์์ ์ ์์ต๋๋ค. ์คํ์ผ์
์ถ๊ฐํ๋ ค๋ฉด EXTENDING_COMPRESSION.md๋ฅผ
์ฐธ์กฐํ์ญ์์ค.
๋๊ตฌ ๊ฒฐ๊ณผ ์์ถ
์น์ ์ ๋ชฉ: โ๋๊ตฌ ๊ฒฐ๊ณผ ์์ถโtoolResultCompressor.ts ๋ชจ๋์ ๋๊ตฌ ๊ฒฐ๊ณผ (ํจ์ ํธ์ถ, ์์ด์ ํธ ์ถ๋ ฅ, ๊ฒ์ ๊ฒฐ๊ณผ ๋ฑ)์
๋ํ 5๊ฐ์ง ํน์ ์์ถ ์ ๋ต์ ์ ๊ณตํฉ๋๋ค.
- ๊ฒ์ ๊ฒฐ๊ณผ ์์ถ โ ์ค๋ณต ๊ฒฐ๊ณผ๋ฅผ ์ ๊ฑฐํ๊ณ ์์ N๊ฐ๋ฅผ ์ ์งํฉ๋๋ค.
- ํ์ผ ์ฝ๊ธฐ ์์ถ โ ํฐ ํ์ผ์ ์๋ฅด๊ณ ํค๋/๊ฐ์ ธ์ค๊ธฐ๋ฅผ ๋ณด์กดํฉ๋๋ค.
- ์ฝ๋ ์คํ ์์ถ โ ํ์ stdout/stderr๋ง ์ ์งํฉ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ ์์ถ โ ํ์ ์ ํํ๊ณ ์์ธํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- API ์๋ต ์์ถ โ null ํ๋๋ฅผ ์ ๊ฑฐํ๊ณ ๋ฐฐ์ด์ ์์ถํฉ๋๋ค.
์ฌ์ฉ ์๊ธฐ
์น์ ์ ๋ชฉ: โ์ฌ์ฉ ์๊ธฐโ๋๊ตฌ ๊ฒฐ๊ณผ ์์ถ์ ๋๊ตฌ ํธ์ถ์ด ์์ ๋ ํญ์ ์ผ์ ธ ์์ต๋๋ค. ๊ตฌ์ฑ์ด ํ์ํ์ง ์์ต๋๋ค.
์คํํ ํ์ดํ๋ผ์ธ
์น์ ์ ๋ชฉ: โ์คํํ ํ์ดํ๋ผ์ธโ์คํํ ๋ชจ๋๋ ์ฌ๋ฌ ์์ง์ ์์๋๋ก ์คํํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก RTK๊ฐ ๋จผ์ ์คํ๋๊ณ (๋๊ตฌ ์ถ๋ ฅ์์ 60-90% ์ ์ฝ), ๊ทธ ๋ค์ Caveman์ด ์คํ๋ฉ๋๋ค (๋๋จธ์ง ํ ์คํธ์์ ์ถ๊ฐ 30% ์ ์ฝ). ์ด๋ฅผ ํตํด ์ด 78-95%์ ์ ์ฝ์ ๋ฌ์ฑํฉ๋๋ค.
์๋ ๋ฐฉ์
์น์ ์ ๋ชฉ: โ์๋ ๋ฐฉ์โ์
๋ ฅ (1000 ํ ํฐ) โ RTK (๋ช
๋ น ์ธ์ ํํฐ) โ 200 ํ ํฐ โ Caveman (ํ๋ฌ ์ ๊ฑฐ) โ 140 ํ ํฐ โ ์ถ๋ ฅ (140 ํ ํฐ, 86% ์ ์ฝ)์ฌ์ฉ ์๊ธฐ
์น์ ์ ๋ชฉ: โ์ฌ์ฉ ์๊ธฐโ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ์คํํ ๋ชจ๋๋ฅผ ์ฌ์ฉํ์ญ์์ค.
- ๋๊ตฌ ์ค์ฌ ์ํฌํ๋ก์ฐ (์์ด์ ํธ ์ฝ๋ฉ, ์ฐ๊ตฌ)
- ๋น์ฉ์ ๋ฏผ๊ฐํ ๋ฐฐ์น ์ฒ๋ฆฌ
- ์ต๋ ํ ํฐ ์ ์ฝ์ด ํ์ํ ๋
์ฝค๋ณด๋ฅผ ํตํด ๊ตฌ์ฑ:
{ "strategy": "auto", "config": { "auto": { "modePack": "stacked" } }}์ฝค๋ณด๋ณ ์์ถ ์ฌ์ ์
์น์ ์ ๋ชฉ: โ์ฝค๋ณด๋ณ ์์ถ ์ฌ์ ์โ๋ค์ํ ์ฌ์ฉ ์ฌ๋ก์ ๋ง๊ฒ ๋์์ ์ธ๋ฐํ๊ฒ ์กฐ์ ํ ์ ์๋๋ก ์ ์ญ ์์ถ ๋ชจ๋๋ฅผ ์ฝค๋ณด๋ณ๋ก ์ฌ์ ์ํ ์ ์์ต๋๋ค.
{ "id": "coding-combo", "strategy": "priority", "config": { "auto": { "weights": { "taskFit": 0.5 }, "modePack": "quality-first" } }, "compressionOverride": { "mode": "aggressive", "stackedPipelines": ["rtk", "caveman"], "preserveToolDefinitions": true }}๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์ ์ฉํฉ๋๋ค.
- ์ฝ๋ฉ ์ฝค๋ณด: ๊ธด ์ธ์
์๋
aggressive๋ชจ๋ ์ฌ์ฉ - ๋น ๋ฅธ Q&A ์ฝค๋ณด: ๋น ๋ฅธ ์๋ต์๋
lite๋ชจ๋ ์ฌ์ฉ - ๋๊ตฌ ์ค์ฌ ์ฝค๋ณด: ๋น์ฉ์ ์ต๋ํ ์ ๊ฐํ๋ ค๋ฉด
stacked๋ชจ๋ ์ฌ์ฉ - ํ๋ก๋์
์ฝค๋ณด: ์บ์ฑ ์ ๊ณต์์๋
cache-aware๋ชจ๋ ์ฌ์ฉ
ํจ๊ป ๋ณด๊ธฐ
์น์ ์ ๋ชฉ: โํจ๊ป ๋ณด๊ธฐโ- ํ๊ฒฝ ์ค์ โ ์์ถ ํ๊ฒฝ ๋ณ์
- ์ํคํ ์ฒ ๊ฐ์ด๋ โ ์์ถ ํ์ดํ๋ผ์ธ ๋ด๋ถ ๊ตฌ์กฐ
- ์ฌ์ฉ์ ๊ฐ์ด๋ โ ์์ถ ์์ํ๊ธฐ
- RTK ์์ถ โ RTK ํํฐ, ์ ๋ขฐ ๋ชจ๋ธ, ๊ฒ์ฆ ๊ฒ์ดํธ, ์์ ์ถ๋ ฅ ๋ณต๊ตฌ
- ์์ถ ์์ง โ Caveman, RTK, ์คํํ ๊ตฌ์ฑ, API, MCP, ๋์๋ณด๋
- ์์ถ ๊ท์น ํ์ โ JSON ๊ท์น ํฉ ํ์
- ์์ถ ์ธ์ด ํฉ โ ์ธ์ด๋ณ Caveman ๊ท์น
HagiCode
HagiCode๋ ๊ตฌ์กฐํ๋ ์ํฌํ๋ก, ๋ค์ค ์์ด์ ํธ ์คํ, Hero Dungeon ๋ทฐ๋ฅผ ๊ฐ์ถ ์์ด์ ํธ ์ฝ๋ฉ ์์ ๊ณต๊ฐ์ ๋๋ค.
๋ ์ค๋งํธํ๊ณ ๋น ๋ฅด๋ฉฐ ์ฆ๊ฑฐ์ด ์์ด์ ํธ ์ํฌํ๋ก๋ก ์ ์ฉํ ์ํํธ์จ์ด๋ฅผ ๋ง๋์ธ์.

- Smart๊ตฌ์กฐํ๋ ์ํฌํ๋ก๋ ์๋๋ฅผ ์์ด๋์ด๋ถํฐ ๋ฐฐํฌ๊น์ง ์คํ ๊ฐ๋ฅํ ๊ฒฝ๋ก๋ก ๋ฐ๊ฟ๋๋ค.
- Efficient๋ค์ค ์์ด์ ํธ ์ํฌํ๋ก๋ก ์กฐ์ฌ, ๊ตฌํ, ๊ฒํ ๋ฅผ ๋ณ๋ ฌ๋ก ์งํํฉ๋๋ค.
- FunHero Dungeon์ ๊ธด ์ฝ๋ฉ ์ธ์ ์ ์๊ฐ์ ์ด๊ณ ํ์ ์ ์ธ ๊ฒฝํ์ผ๋ก ๋ง๋ญ๋๋ค.