Skip to content
jwgoPublic

About

๐Ÿ‹ Local-first memory middleware for your Markdown โ€” turn your Obsidian vault into memory for any AI (MCP), with Korean-first hybrid retrieval, keyless on-device search, and an interactive knowledge graph.

Topics

Resources

Contributing

Security policy

Stars

11 stars

Watchers

0 watching

Forks

Latest commit

ย 

History

317 Commits

Folders and files

Repository files navigation

๐Ÿ‹ Lemory

AI ์—์ด์ „ํŠธ์˜ ์ปจํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค. ๊ฐ€์ƒ ํŒŒ์ผ์‹œ์Šคํ…œ์ด ์•„๋‹ˆ๋ผ, ์ง„์งœ ํŒŒ์ผ๋กœ.

๊ธฐ์–ต ยท ์ง€์‹ ยท ์Šคํ‚ฌ์„ ๋‚ด ํด๋”์˜ ๋งˆํฌ๋‹ค์šด์œผ๋กœ ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŒ… DB๋„, ๊ณ„์ •๋„, ์ฟผํ„ฐ๋„ ์—†์ด, ์ „๋ถ€ ์‹ค์ธก์œผ๋กœ ์ฆ๋ช…ํ•˜๋ฉด์„œ. The context database for AI agents, on real files ยท English README

CI License: MIT Python 3.10+ Benchmarks KorMapleQA

์‹ค์ œ ๋‚˜๋ฌด์œ„ํ‚ค 1,469๋…ธํŠธ ๋ณผํŠธ์—์„œ ํ•œ๊ตญ์–ด ์งˆ๋ฌธ์ด 0.1์ดˆ ๋งŒ์— ๋‹ต๋ณ€๋˜๊ณ  ์˜คํƒ€๊ฐ€ ์ž๋™์œผ๋กœ ๊ณ ์ณ์ง€๋Š” ์žฅ๋ฉด

๋ชฉ์—…์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‚˜๋ฌด์œ„ํ‚ค ์‹ค์ œ ๋ฌธ์„œ 1,469๊ฐœ(์ฒญํฌ ์•ฝ 42,000๊ฐœ) ๋ณผํŠธ์—์„œ ํ•œ๊ตญ์–ด ์งˆ๋ฌธ์ด 0.1์ดˆ ๋งŒ์— ๋‹ต๋ณ€๋˜๊ณ , ์˜คํƒ€๋Š” API ์—†์ด ๊ต์ •๋˜๋Š” ์žฅ๋ฉด์ž…๋‹ˆ๋‹ค. benchmarks/๋กœ ์ง์ ‘ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


Lemory๋Š” AI ์—์ด์ „ํŠธ๋ฅผ ์œ„ํ•œ ๋กœ์ปฌ ์ปจํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ž…๋‹ˆ๋‹ค. ์—์ด์ „ํŠธ๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ์ปจํ…์ŠคํŠธ(๊ธฐ์–ต, ์ง€์‹, ์Šคํ‚ฌ)๋ฅผ ๋‚ด ํด๋”์˜ ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ ํ•˜๋‚˜์˜ ์ฒด๊ณ„๋กœ ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค. Claude Code, Claude Desktop, Cursor, ์ง์ ‘ ๋งŒ๋“  ์—์ด์ „ํŠธ๊ฐ€ ๋งค ์„ธ์…˜ ๋‚ฏ์„  ์‚ฌ๋žŒ์œผ๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š๊ฒŒ ํ•˜๊ณ , ๋งˆํฌ๋‹ค์šด ๋…ธํŠธ๊ฐ€ ์ด๋ฏธ ์žˆ๋‹ค๋ฉด(์˜ต์‹œ๋””์–ธ์ด๋“  ๊ทธ๋ƒฅ ํด๋”๋“ ) ๊ทธ๊ฒƒ์ด ๊ณง๋ฐ”๋กœ ์ปจํ…์ŠคํŠธ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

2026๋…„, ์‹œ์žฅ์€ ์ด ๋ฐฉํ–ฅ์œผ๋กœ ์ˆ˜๋ ดํ–ˆ์Šต๋‹ˆ๋‹ค. ByteDance์˜ OpenViking(32.8kโ˜…, VLDB 2026)์ด "์ปจํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค"๋ผ๋Š” ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๋งŒ๋“ค๋ฉฐ ๋ฒกํ„ฐ ์Šคํ† ์–ด ๋Œ€์‹  ํŒŒ์ผ์‹œ์Šคํ…œ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ํƒํ–ˆ๊ณ , Tencent์˜ Agent Memory๊ฐ€ ๊ธฐ์–ต ํ”ผ๋ผ๋ฏธ๋“œ๋ฅผ, Vectorize์˜ Hindsight๊ฐ€ retain-recall-reflect๋ฅผ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฉํ–ฅ์€ ์ „๋ถ€ ๋งž์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ทธ๋“ค์˜ ํŒŒ์ผ์‹œ์Šคํ…œ์€ viking:// ๊ฐ™์€ ๊ฐ€์ƒ ๊ฒฝ๋กœ์ด๊ณ , ๋ฐ‘์—๋Š” ์—ฌ์ „ํžˆ ๊ทธ๋“ค์˜ DB๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Lemory๋Š” ๋ฐ˜๋Œ€์ชฝ ๋์—์„œ ์ถœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค: ๋‹น์‹ ์ด ์ด๋ฏธ ๊ฐ€์ง„ ์ง„์งœ ํŒŒ์ผ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ž…๋‹ˆ๋‹ค. ls, grep, git, ์˜ต์‹œ๋””์–ธ์ด ๊ทธ๋Œ€๋กœ ๊ด€๋ฆฌ ๋„๊ตฌ์ด๊ณ , ๋– ๋‚˜๋Š” ๋น„์šฉ์€ 0์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์„ ํƒ์ด ์„ฑ๋Šฅ์„ ๊นŽ์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„, ์˜คํžˆ๋ ค ์ด๊ธด๋‹ค๋Š” ๊ฒƒ์„, ๋Œ๋ฆด ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์Ÿ์ž ์ „๋ถ€์™€ ๊ฐ™์€ ํ•˜๋„ค์Šค์—์„œ ์ธก์ •ํ•ด ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

  • ํ•˜๋‚˜์˜ ํŒŒ์ผ ์ฒด๊ณ„์— ๋ชจ๋“  ์ปจํ…์ŠคํŠธ. ํƒ€์ž… ์žˆ๋Š” ๊ธฐ์–ต ํŒŒํŽธ, ์žฅ๋ฉด ์„œ์‚ฌ, ํŽ˜๋ฅด์†Œ๋‚˜, ์ถ”์ถœ๋œ ์Šคํ‚ฌ, ๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์˜ ๋…ธํŠธ๊นŒ์ง€ ์ „๋ถ€ ๋ณผํŠธ ์•ˆ์˜ ํ‰๋ฒ”ํ•œ .md์ž…๋‹ˆ๋‹ค. ๊ฐ€์ƒ ๊ณ„์ธต์ด ์—†์œผ๋‹ˆ ์—์ด์ „ํŠธ์šฉ ๋ทฐ์™€ ์‚ฌ๋žŒ์šฉ ๋ทฐ๊ฐ€ ๊ฐ™์€ ํŒŒ์ผ์ด๊ณ , rm ํ•œ ๋ฒˆ์ด๋ฉด ์ง€์›Œ์ง‘๋‹ˆ๋‹ค. ๊ณ„์ •๋„, ํŒŒํŽธ ์ฟผํ„ฐ๋„, ์ด์‚ฌ ๋น„์šฉ๋„ ์—†์Šต๋‹ˆ๋‹ค.
  • ๊ณ„์ธต ๋กœ๋”ฉ(L0/L1/L2)์œผ๋กœ ํ† ํฐ์„ ์•„๋‚๋‹ˆ๋‹ค. ๋ชจ๋“  ๋…ธํŠธ๋ฅผ L0 ํ•œ ์ค„ ์š”์•ฝ, L1 ๊ฐœ์š”(์ œ๋ชฉ ๊ณจ๊ฒฉ + ์„น์…˜ ๋„์ž…๋ถ€), L2 ์›๋ฌธ ์„ธ ๋‹จ๊ณ„๋กœ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ปจํ…์ŠคํŠธ DB๋Š” ์ด ๊ณ„์ธต์„ ์“ฐ๊ธฐ ์‹œ์ ์— LLM์œผ๋กœ ์ƒ์„ฑํ•˜์ง€๋งŒ, Lemory๋Š” ์ฝ๊ธฐ ์‹œ์ ์— ๊ฒฐ์ •์ ์œผ๋กœ ์œ ๋„ํ•ฉ๋‹ˆ๋‹ค. LLM 0ํšŒ, ์›๋ณธ๊ณผ ์–ด๊ธ‹๋‚  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์„ธ์…˜ ๋ถ€ํŠธ๋Š” ํ”ผ๋ผ๋ฏธ๋“œ(ํŽ˜๋ฅด์†Œ๋‚˜+์žฅ๋ฉด ์ง€๋„)๊ฐ€ ๋งก์•„ ์›๋ฌธ ๋คํ”„์˜ 1/48.8 ํ† ํฐ์œผ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒ€์ƒ‰์ด ์‹ค์ธก์œผ๋กœ ๊ณ ์„ฑ๋Šฅ์ž…๋‹ˆ๋‹ค. ์˜๋ฏธ + ํ•œ๊ตญ์–ด ํŠนํ™” ํ‚ค์›Œ๋“œ + [[์œ„ํ‚ค๋งํฌ]] ๊ทธ๋ž˜ํ”„ + ์‹œ๊ฐ„ ์ฐฝ, 4๊ฐœ ๋‹ค๋ฆฌ์˜ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์œตํ•ฉ. ๊ฐ™์€ ํ•˜๋„ค์Šค์—์„œ ํ‚ค๋ฆฌ์Šค 0.983@40ms, ์ž„๋ฒ ๋”ฉ ์—†๋Š” fast ๋ชจ๋“œ 0.967@6.9ms. ์ง€๋Š” ํ•ญ๋ชฉ๊นŒ์ง€ ์ „๋ถ€ ๊ณต๊ฐœํ•ฉ๋‹ˆ๋‹ค.
  • ๊ด€์ฐฐ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์งˆ์˜, AI๊ฐ€ ์“ด ๋ชจ๋“  ๋…ธํŠธ(ํด๋ฆญ ํ•œ ๋ฒˆ ๋˜๋Œ๋ฆฌ๊ธฐ), ํด๋ผ์ด์–ธํŠธ๋ณ„ ์‚ฌ์šฉ๋Ÿ‰์ด ํƒ€์ž„๋ผ์ธ์— ๋‚จ์Šต๋‹ˆ๋‹ค. ์ „๋ถ€ ๋‚ด ์ปดํ“จํ„ฐ์˜ SQLite ํŒŒ์ผ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.
  • ์Šค์Šค๋กœ ์ง„ํ™”ํ•ฉ๋‹ˆ๋‹ค. ์„ธ์…˜์ด ๋๋‚˜๋ฉด ๋Œ€ํ™”๊ฐ€ ์‚ฌ์‹ค ์•„ํ†ฐ์œผ๋กœ ์ฆ๋ฅ˜๋˜๊ณ , ์žฅ๋ฉด ์„œ์‚ฌ์™€ ํŽ˜๋ฅด์†Œ๋‚˜๋กœ ์Šน๊ฒฉ๋ฉ๋‹ˆ๋‹ค(auto_consolidate ํ•œ ์ค„์ด๋ฉด ์ž๋™). LLM์ด ์—†์œผ๋ฉด ๊ฒฐ์ •์  ํด๋ฐฑ์œผ๋กœ ๋™์ž‘ํ•ด ์™„์ „ ์˜คํ”„๋ผ์ธ์—์„œ๋„ ํ”ผ๋ผ๋ฏธ๋“œ๊ฐ€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

Lemory๋ฅผ "๊ฑฐ์ณ์•ผ๋งŒ" ํ•˜๋Š” ๊ฒƒ์€ ์•„๋ฌด๊ฒƒ๋„ ์—†์Šต๋‹ˆ๋‹ค. ๋ณผํŠธ๋Š” ๊ทธ๋ƒฅ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ๋Š˜ ํ•˜๋˜ ๋Œ€๋กœ ๋…ธํŠธ๋ฅผ ์“ฐ๋ฉด(์˜ต์‹œ๋””์–ธ์ด๋“ , ์•„๋ฌด ํŽธ์ง‘๊ธฐ๋“ ) ์›Œ์ฒ˜๊ฐ€ 1์ดˆ ์•ˆ์— ์ƒ‰์ธํ•ฉ๋‹ˆ๋‹ค. save_memory์™€ lemory remember๋Š” AI๊ฐ€ ์“ธ ๋•Œ ์ถœ์ฒ˜ ํ‘œ์‹œ, ์ค‘๋ณต ๊ฒ€์‚ฌ, ๋˜๋Œ๋ฆฌ๊ธฐ ๋ฒ„ํŠผ์„ ๋ถ™์ด๊ธฐ ์œ„ํ•œ ํ†ต๋กœ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ง€๊ธฐ๊ฐ€ ์•„๋‹ˆ๋ผ ์†๋‹˜์šฉ ์ž…๊ตฌ์ž…๋‹ˆ๋‹ค.

์™œ ์‹œ์žฅ์—์„œ ์šฐ์œ„์ธ๊ฐ€ (2026๋…„ 8์›” ๊ธฐ์ค€)

์—์ด์ „ํŠธ ๋ฉ”๋ชจ๋ฆฌ๋Š” 2026๋…„ ํ˜„์žฌ ์ž์ฒด ๋ฒค์น˜๋งˆํฌ ์Šค์œ„ํŠธ์™€ ์—ฐ๊ตฌ ๋ฌธํ—Œ์„ ๊ฐ€์ง„ 1๊ธ‰ ์•„ํ‚คํ…์ฒ˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋๊ณ , ์—…๊ณ„ ๋ณด๊ณ ์„œ๋“ค์ด ๊ผฝ๋Š” ์š”๊ตฌ ์กฐ๊ฑด๋„ ์ˆ˜๋ ดํ–ˆ์Šต๋‹ˆ๋‹ค: ๋ฉ€ํ‹ฐ์‹œ๊ทธ๋„ ๊ฒ€์ƒ‰, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง, ์‹œ๊ฐ„ ์ถ”๋ก , ๊ฐฑ์‹  ์˜๋ฏธ๋ก (๋ชจ์ˆœยท๋ฒˆ๋ณต ๋ณด์กด), ๊ด€์ฐฐ๊ฐ€๋Šฅ์„ฑ, ํ† ํฐ ํšจ์œจ. Lemory๋Š” ์ด ๋ชฉ๋ก ์ „์ฒด๋ฅผ ์ถฉ์กฑํ•˜๋ฉฐ, ๊ฐ ํ•ญ๋ชฉ์— ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์ˆซ์ž๋ฅผ ๋ถ™์—ฌ ๋†“์•˜์Šต๋‹ˆ๋‹ค.

์—…๊ณ„๊ฐ€ ์š”๊ตฌํ•˜๋Š” ์ถ• Lemory์˜ ๋‹ต ์‹ค์ธก
๋ฉ€ํ‹ฐ์‹œ๊ทธ๋„ ๊ฒ€์ƒ‰ ๋ฒกํ„ฐ + ํ•œ๊ตญ์–ด ๋ฐ”์ด๊ทธ๋žจ BM25 + ๋งํฌ ๊ทธ๋ž˜ํ”„ + ์‹œ๊ฐ„ ์ฐฝ, 4-๋ ˆ๊ทธ ์œตํ•ฉ ๋ฉ€ํ‹ฐํ™‰ 1.000 ยท ํ‚ค๋ฆฌ์Šค 0.983@40ms (ยง0)
์‹œ๊ฐ„ ์ถ”๋ก  ์‹œ๊ฐ„ ์ธ์ง€ ๋žญํ‚น + after:/before: ์—ฐ์‚ฐ์ž + temporal ๊ฒ€์ƒ‰ ๋ ˆ๊ทธ LongMemEval temporal 0.835, ์ „์ฒด any@5 0.983 (ยง7d)
๊ฐฑ์‹  ์˜๋ฏธ๋ก  belief ์ œ์ž๋ฆฌ ๊ฐœ์ • + ## ๋ณ€์ฒœ ์ด๋ ฅ, ์‚ญ์ œ ์—†๋Š” ์ตœ์‹  ์šฐ์„ , ๋ฒˆ๋ณต ํ•จ์ • ์‹ค์ธก AgentMemQA ํ•จ์ • ์˜ค๋‹ต๋ฅ  0 (ยง7f)
ํ† ํฐ ํšจ์œจ L0/L1/L2 ๊ณ„์ธต ๋กœ๋”ฉ + ํ”ผ๋ผ๋ฏธ๋“œ ๋ถ€ํŠธ ๋ถ€ํŠธ ์ปจํ…์ŠคํŠธ๊ฐ€ ์›๋ฌธ ๋คํ”„์˜ 1/48.8 (ยง14)
๊ด€์ฐฐ๊ฐ€๋Šฅ์„ฑ ์ „ ์งˆ์˜ยท์ „ ์“ฐ๊ธฐ ํƒ€์ž„๋ผ์ธ, ํด๋ผ์ด์–ธํŠธ ์ถœ์ฒ˜, ํด๋ฆญ ํ•œ ๋ฒˆ ๋˜๋Œ๋ฆฌ๊ธฐ ๋Œ€์‹œ๋ณด๋“œ ํ‘œ์ค€ ํƒ‘์žฌ
์ƒ‰์ธ ๋น„์šฉ LLM 0ํšŒ ๊ฒฐ์ •์  ์ƒ‰์ธ 1,469๋…ธํŠธ ์ˆ˜ ์ดˆ vs ๊ฒฝ์Ÿ 14๋ถ„~45๋ถ„ (ยง4)

๊ทธ ์œ„์— ๊ฒฝ์Ÿ์ž๊ฐ€ ๊ตฌ์กฐ์ ์œผ๋กœ ๋”ฐ๋ผ์˜ค๊ธฐ ์–ด๋ ค์šด ์ถ•์ด ๋„ท ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ง„์งœ ํŒŒ์ผ. OpenViking์˜ ๊ณ„์ธต์€ ์“ฐ๊ธฐ ์‹œ์  LLM ์ƒ์„ฑ์ด๊ณ (์—†์œผ๋ฉด ํ”Œ๋ ˆ์ด์Šคํ™€๋”๋กœ ํ‡ดํ™”), ์ €์žฅ์†Œ๋Š” ๊ฐ€์ƒ ๊ฒฝ๋กœ ๋ฐ‘์˜ ๊ทธ๋“ค DB์ž…๋‹ˆ๋‹ค. Lemory์˜ ๊ณ„์ธต์€ ์ฝ๊ธฐ ์‹œ์  ๊ฒฐ์ •์  ์œ ๋„์ด๊ณ  ์ €์žฅ์†Œ๋Š” ๋‹น์‹ ์˜ .md์ž…๋‹ˆ๋‹ค. ์ดํƒˆ ๋น„์šฉ 0์€ ์•„ํ‚คํ…์ฒ˜์˜ ๊ฒฐ๊ณผ๋ผ ๋งˆ์ผ€ํŒ…์œผ๋กœ ๋ณต์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  2. ํ‚ค๋ฆฌ์Šค ๋กœ์ปฌ ๊ณ ์„ฑ๋Šฅ. ๊ธฐ๋ณธ ์„ค์น˜ ๊ทธ๋Œ€๋กœ, API ํ‚ค ์—†์ด, ๊ฒ€์ƒ‰์ด ๋ฐ€๋ฆฌ์ดˆ์ž…๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ฌด-LLM ์กฐ๊ฑด์—์„œ Hindsight ์ตœ์„  ๊ตฌ์„ฑ์˜ 4.2๋ฐฐ recall์ž…๋‹ˆ๋‹ค (ยง4j). ๊ด€๋ฆฌํ˜• API ์ง„์˜(mem0 ๋“ฑ)์˜ ํ—ค๋“œ๋ผ์ธ ์ˆ˜์น˜๋Š” ์ฟผ๋ฆฌ๋‹น ์ˆ˜์ฒœ ํ† ํฐ์˜ LLM ๋น„์šฉ ์œ„์— ์„œ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ํ•œ๊ตญ์–ด(๋„“๊ฒŒ๋Š” CJK)๊ฐ€ 1๋“ฑ ์‹œ๋ฏผ. ์ด ๋ถ„์•ผ ์ƒ์œ„๊ถŒ ์ „๋ถ€๊ฐ€ ์˜์–ด ์šฐ์„ ์ž…๋‹ˆ๋‹ค. ์‹œ์žฅ์ด ์ปค์งˆ์ˆ˜๋ก ์ด ๊ฒฉ์ฐจ๋Š” ์ปค์ง€๋Š”๋ฐ, ๊ฒฉ์ฐจ๋ฅผ ์ขํžˆ๋ ค๋ฉด ์ €ํฌ๊ฐ€ ๊ณต๊ฐœํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ๋‹ค๊ตญ์–ด ๋ฒค์น˜๋งˆํฌ๊ฐ€ ํ•„์š”ํ•˜๊ณ , ๊ทธ๊ฒƒ์„ ๊ณต๊ฐœํ•œ ๊ณณ์ด ์ €ํฌ๋ฟ์ž…๋‹ˆ๋‹ค(KorMapleQA 2,075๋ฌธํ•ญ).
  4. ์ธก์ • ๋ฌธํ™”. ์ด ์‹œ์žฅ์—์„œ same-harness ๊ต์ฐจ ๋น„๊ต ์ˆ˜์น˜๋ฅผ ๊ณต๊ฐœํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋Š” Lemory๊ฐ€ ์œ ์ผํ•ฉ๋‹ˆ๋‹ค. ์ง€๋Š” ํ•ญ๋ชฉ, ์‹คํŒจํ•œ ์‹คํ—˜, ํ›„ํ‡ด๊นŒ์ง€ ํ•จ๊ป˜ ๊ณต๊ฐœํ•˜๋ฏ€๋กœ ์ˆซ์ž๊ฐ€ ์‹ ๋ขฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋ฒค์น˜๋งˆํฌ ์ฃผ์žฅ์ด ์ฆ‰์‹œ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ฒ€์ฆ๋Œ€์— ์˜ค๋ฅด๋Š” 2026๋…„ ์‹œ์žฅ์—์„œ ์ด๊ฒƒ ์ž์ฒด๊ฐ€ ํ•ด์ž์ž…๋‹ˆ๋‹ค.

์ฆ๊ฑฐ๋ถ€ํ„ฐ ๋ณด์—ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค

๋ชจ๋“  ์ˆ˜์น˜๋Š” ์ปค๋ฐ‹๋œ ์ฝ”๋“œ์™€ ๊ณต๊ฐœ ๋ฐ์ดํ„ฐ๋กœ ๋‹ค์‹œ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฉ๋ฒ•, ์ง€๋Š” ํ•ญ๋ชฉ, ์•„์ง ๋ชป ํ‘ผ ๋ฌธ์ œ๊นŒ์ง€ BENCHMARKS.md์— ์žˆ์Šต๋‹ˆ๋‹ค.

KorMapleQA ์ˆœ์œ„ ์ง€์—ฐ์‹œ๊ฐ„ ๋น„๊ต, ๋กœ๊ทธ ์Šค์ผ€์ผ

๊ฐ™์€ ์งˆ๋ฌธ์„ ์‹ค์ œ ๋„๊ตฌ 3๊ฐœ์— ๋˜์ ธ๋ดค์Šต๋‹ˆ๋‹ค

qmd๋Š” 0๊ฑด, MemPalace๋Š” ์—‰๋šฑํ•œ ๊ฒฐ๊ณผ, Lemory๋Š” ์ •๋‹ต ๋…ธํŠธ๋ฅผ 1์œ„๋กœ

๊ฐ™์€ ๋ณผํŠธ์—์„œ tobi/qmd์™€ MemPalace๋ฅผ ์‹ค์ œ๋กœ ๋Œ๋ฆฐ ์žฅ๋ฉด์ž…๋‹ˆ๋‹ค. qmd๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์ „๋ถ€ ํฌํ•จํ•ด์•ผ๋งŒ ์ฐพ๋Š” ๋ฐฉ์‹(AND)์ด๋ผ ํ•œ๊ตญ์–ด ์ž์—ฐ์–ด ์งˆ๋ฌธ์— 0๊ฑด์ด ๋‚˜์˜ต๋‹ˆ๋‹ค. MemPalace๋Š” ์˜์–ด ์œ„์ฃผ ์ž„๋ฒ ๋”๋ผ ํ•œ๊ตญ์–ด ํ‚ค์›Œ๋“œ ๊ฒฝ๋กœ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Lemory๋Š” ์ •๋‹ต ๋…ธํŠธ๋ฅผ 1์œ„๋กœ, 0.1์ดˆ์—, LLM ํ˜ธ์ถœ ์—†์ด ์ฐพ์Šต๋‹ˆ๋‹ค.

qmd๊ฐ€ ๋กœ์ปฌ LLM์„ ์ด๋™์›ํ•ด๋„(์งˆ์˜ ํ™•์žฅ + ๋ฆฌ๋žญํฌ) ๊ฐ™์€ 329๋ฌธํ•ญ์—์„œ Lemory์˜ LLM ์—†๋Š” ๊ฒ€์ƒ‰๋ณด๋‹ค ๋‚ฎ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด์„œ ์งˆ๋ฌธ ํ•˜๋‚˜์— 59.5์ดˆ๊ฐ€ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค:

๋™์ผ 329๋ฌธํ•ญ: Lemory 0.887@0.11์ดˆ vs qmd query 0.769@59.5์ดˆ

๊นƒํ—ˆ๋ธŒ ์Šคํƒ€๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ ๋ ˆ์ด์–ด mem0์™€๋„ ๊ฐ™์€ ๋ฐ์ดํ„ฐ, ๊ฐ™์€ ๋ชจ๋ธ๋กœ ๋๊นŒ์ง€ ๋น„๊ตํ–ˆ์Šต๋‹ˆ๋‹ค:

๊ฐ™์€ ์กฐ๊ฑด์—์„œ Lemory vs mem0, ์ „ ํ•ญ๋ชฉ

๋ช…๋ น ํ•œ ์ค„์ด๋ฉด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค

pipx install "git+https://github.com/jwgo/lemory"
lemory up ~/Obsidian/MyVault     # ์„ค์ • โ†’ ์ƒ‰์ธ โ†’ ๋Œ€์‹œ๋ณด๋“œ๊นŒ์ง€ ํ•œ ๋ฒˆ์—
lemory ask "์š”์ƒˆ ๋‚ด๊ฐ€ ํ•˜๋˜ ๊ทธ ํ”„๋กœ์ ํŠธ ์–ด๋””๊นŒ์ง€ ํ–ˆ์ง€?"

์ž…๊ตฌ๋Š” lemory up ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์•Œ์•„์„œ ์ตœ์  ๋ชจ๋“œ๋ฅผ ๊ณ ๋ฆ…๋‹ˆ๋‹ค. Gemini ํ‚ค๊ฐ€ ์žˆ์œผ๋ฉด ํด๋ผ์šฐ๋“œ๋กœ, ์—†์œผ๋ฉด ๊ธฐ๋ณธ ํƒ‘์žฌ๋œ ์˜จ๋””๋ฐ”์ด์Šค ์Šคํƒ(ํ•œ๊ตญ์–ด ํŠนํ™” e5-small-ko-v2 ์ž„๋ฒ ๋”ฉ + Gemma 4 ๋‹ต๋ณ€)์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ํ‚ค๋„, ๋ฐ๋ชฌ๋„, ์„ค์ •๋„ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค. lemory up๋งŒ ์น˜๋ฉด ๋ณผํŠธ ์œ„์น˜๋ฅผ ๋ฌป์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ๊ณผ ๊ฒ€์ƒ‰ ์„ค์ •์€ ๋Œ€์‹œ๋ณด๋“œ ์„ค์ • ํƒญ์—์„œ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

๊ทธ๋‹ค์Œ์—๋Š” lemory daemon start ํ•œ ์ค„๋กœ ์ผœ๋‘๋ฉด ๋ฉ๋‹ˆ๋‹ค (ํ„ฐ๋ฏธ๋„ ๋‹ซ์•„๋„ ์œ ์ง€ ยท status/logs/stop์œผ๋กœ ๊ด€๋ฆฌ, ์ฃฝ์€ pidfile ์ž๋™ ์ •๋ฆฌ). ํฌ๊ทธ๋ผ์šด๋“œ๊ฐ€ ์ข‹์œผ๋ฉด lemory serve๋„ ๊ทธ๋Œ€๋กœ์ž…๋‹ˆ๋‹ค. ์˜ต์‹œ๋””์–ธ ํ”Œ๋Ÿฌ๊ทธ์ธ, Claude/MCP, ์›น ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ ์ „๋ถ€ ์—ฌ๊ธฐ์— ๋ถ™๊ณ , ๋…ธํŠธ๋ฅผ ๊ณ ์น˜๋ฉด ๋ช‡ ์ดˆ ์•ˆ์— ๋‹ค์‹œ ์ƒ‰์ธ๋ฉ๋‹ˆ๋‹ค. lemory ask "..." ํ•œ ์ค„์€ ์„œ๋ฒ„ ์—†์ด๋„ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์–ธ์ œ ์ผœ๋‘๊ณ  ์–ธ์ œ ์žฌ์ƒ‰์ธํ•˜๋Š”์ง€๋Š” ๊ฐ€์ด๋“œ์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒ‰์ธํ•  ๋•Œ LLM์ด ์•„์˜ˆ ๋Œ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋…ธํŠธ 1,000๊ฐœ ์ƒ‰์ธ = LLM ํ˜ธ์ถœ 0ํšŒ, ๋ช‡ ์ดˆ๋ฉด ๊ฒ€์ƒ‰์ด ๋ฉ๋‹ˆ๋‹ค. ๋…ธํŠธ 54๊ฐœ์— LLM ๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ๋“œ๋А๋ผ 45๋ถ„์”ฉ ์“ฐ๋Š” ์ œํ’ˆ๋“ค๊ณผ ๋น„๊ตํ•˜๋ฉด:

1,469๊ฐœ ๋…ธํŠธ๊ฐ€ ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅํ•ด์งˆ ๋•Œ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„

์ฒ˜์Œ์ด๋ผ๋ฉด ์—ฌ๊ธฐ๋ถ€ํ„ฐ: docs/GUIDE.ko.md ยท ๋งค์ผ ์“ฐ๋Š” ๋ฒ•: docs/ROUTINE.ko.md (English: docs/GUIDE.md)

์–ด๋–ค AI์—๊ฒŒ๋“  ๊ธฐ์–ต์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

claude mcp add lemory -- lemory mcp --vault ~/Obsidian/MyVault --client claude-desktop
lemory skill install claude-code    # ์ž˜ ์“ฐ๋Š” ๋ฒ•๊นŒ์ง€ ๊ฐ€๋ฅด์น˜๊ธฐ
ํด๋ผ์ด์–ธํŠธ ์„ค์ •
Claude Code / Desktop claude mcp add lemory -- lemory mcp --vault <vault> --client claude-code
Cursor .cursor/mcp.json์— ์ถ”๊ฐ€: {"lemory": {"command": "lemory", "args": ["mcp", "--vault", "<vault>", "--client", "cursor"]}}
Windsurf / VS Code / Codex CLI / ๋‹ค๋ฅธ MCP ํด๋ผ์ด์–ธํŠธ ๊ฐ™์€ ๋ช…๋ น: lemory mcp --vault <vault> --client <name>
์Šคํฌ๋ฆฝํŠธ / ์ง์ ‘ ๋งŒ๋“  ์—์ด์ „ํŠธ REST + X-Lemory-Client ํ—ค๋” (์•„๋ž˜ ์ฐธ๊ณ )

--client์— ์ ์€ ์ด๋ฆ„์ด ๋Œ€์‹œ๋ณด๋“œ ์‚ฌ์šฉ๋Ÿ‰์— ๊ทธ๋Œ€๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ฐ€ ๋‚ด ๊ธฐ์–ต์„ ์ฝ๊ณ  ์“ฐ๋Š”์ง€ ํ•ญ์ƒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํˆด์€ 20๊ฐœ์ž…๋‹ˆ๋‹ค. ์ฝ๊ธฐ: search_notes ยท ask_notes ยท recent_notes ยท read_note(๊ณ„์ธต ๋กœ๋”ฉ: level=abstract|overview|full ยท ๊ด€๋ จ์„ฑ ํŒ๋‹จ์€ L0 ํ•œ ์ค„๋กœ, ์›๋ฌธ์€ ํ•„์š”ํ•  ๋•Œ๋งŒ) ยท context_tree(๋ณผํŠธ๋ฅผ ํŒŒ์ผ์‹œ์Šคํ…œ์ฒ˜๋Ÿผ ํƒ์ƒ‰: ํด๋” ํŠธ๋ฆฌ + ๋…ธํŠธ๋ณ„ L0 ํ•œ ์ค„) ยท list_notes ยท related_notes ยท suggest_links(์•„์ง ์—ฐ๊ฒฐ ์•ˆ ๋œ ์–ธ๊ธ‰์„ ๋ฌธ์žฅ ์ฆ๊ฑฐ์™€ ํ•จ๊ป˜ ๋งํฌ๋กœ ์ œ์•ˆ) ยท vault_status ยท vault_context(ํŽ˜๋ฅด์†Œ๋‚˜ยท์žฅ๋ฉด ์ง€๋„ยท๊ณ ์ • ์•ต์ปคยท์—ด๋ฆฐ ์ผ€์ด์Šคยท์ตœ๊ทผ ํ™œ๋™์„ ํ•œ ๋ฒˆ์—, LLM ์—†์ด ์ˆ˜ ms). ์“ฐ๊ธฐ: save_memory(์ €์žฅํ•˜๋ฉด์„œ ์ค‘๋ณต ๊ฒ€์‚ฌ์™€ ๊ด€๋ จ ๋…ธํŠธ ์—ฐ๊ฒฐ๊นŒ์ง€) ยท append_note(๋ฎ์–ด์“ฐ๊ธฐ ๋ถˆ๊ฐ€, ๋ณผํŠธ ๋ฐ–์œผ๋กœ ๋ชป ๋‚˜๊ฐ). ๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜ ์—์ด์ „ํŠธ ์ž‘์—… ๊ธฐ์–ต 8๊ฐœ์ž…๋‹ˆ๋‹ค.

์—์ด์ „ํŠธ ์ž‘์—… ๊ธฐ์–ต: remember โ†’ recall โ†’ reflect โ†’ resume

์—์ด์ „ํŠธ๊ฐ€ ๋งค๋ฒˆ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ํˆด๋“ค์ž…๋‹ˆ๋‹ค. ๊ธฐ์–ต ํŒŒํŽธ์€ ํƒ€์ž…์ด ์žˆ๊ณ (factยทdecisionยทerrorยทpreferenceยทprocedureยทrelationยทepisodeยทbelief), belief๋Š” ํ™•์‹ ๋„(0-1)๋ฅผ ๋‹ฌ๊ณ  ๊ฐ™์€ ์ œ๋ชฉ์œผ๋กœ ๋‹ค์‹œ ๊ธฐ์–ตํ•˜๋ฉด ๋ณต์ œ ๋Œ€์‹  ์ œ์ž๋ฆฌ ๊ฐœ์ •๋ฉ๋‹ˆ๋‹ค(๋ฐ€๋ ค๋‚œ ์ง„์ˆ ์€ ## ๋ณ€์ฒœ์— ๋ˆ„์  ยท ์ฆ๊ฑฐ์™€ ์ถ”๋ก ์˜ ๋ถ„๋ฆฌ๋Š” Hindsight์—์„œ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค). ์„ธ์…˜๋ณด๋‹ค ์˜ค๋ž˜ ์‚ฌ๋Š” ์ž‘์—… ์Šค๋ ˆ๋“œ์ธ case์— ๋ฌถ์ž…๋‹ˆ๋‹ค.

ํˆด ํ•˜๋Š” ์ผ
remember ํƒ€์ž… ์žˆ๋Š” ํŒŒํŽธ ํ•˜๋‚˜ ์ €์žฅ (error๋Š” ํ•ด๊ฒฐ ํ‘œ์‹œ ์ „๊นŒ์ง€ open์œผ๋กœ ํƒœ์–ด๋‚จ)
recall ์ข…๋ฅ˜ยท์ผ€์ด์Šคยท์ฃผ์ œยท์ƒํƒœยท์ตœ๊ทผ์„ฑ์œผ๋กœ ์ขํ˜€์„œ ํšŒ์ƒ ยท ์ขํžˆ๋Š” ๊ฑด ํ›„๋ณด ์„ ์ •์ด๊ณ  ์ˆœ์œ„๋Š” ์—ฌ์ „ํžˆ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰์ด ๋งค๊น€
reflect ์„ธ์…˜ ๋งˆ๋ฌด๋ฆฌ: ์š”์•ฝยท๊ฒฐ์ •ยทํ•ด๊ฒฐํ•œ ์˜ค๋ฅ˜ยท๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ episode ๋…ธํŠธ ํ•˜๋‚˜๋กœ, ๊ฑด๋“œ๋ฆฐ ๋…ธํŠธ์™€ [[์œ„ํ‚ค๋งํฌ]]๋กœ ์—ฐ๊ฒฐ
resume_case ์Šค๋ ˆ๋“œ ๋ณต์›: ํƒ€์ž„๋ผ์ธ, ์ง€๊ธˆ๊นŒ์ง€์˜ ๊ฒฐ์ •, ์•„์ง ์•ˆ ํ’€๋ฆฐ ์˜ค๋ฅ˜, ์ง์ „ ์„ธ์…˜์ด ์ ์–ด๋‘” ๋‹ค์Œ ๋‹จ๊ณ„
list_cases "๋‚ด๊ฐ€ ๋ญ ํ•˜๋‹ค ๋ง์•˜์ง€?"
anchor_note ๋…ธํŠธ๋ฅผ ์ฝ”์–ด ๊ธฐ์–ต์œผ๋กœ ๊ณ ์ • ยท ์ดํ›„ ๋ชจ๋“  ์„ธ์…˜์˜ vault_context ๋งจ ์œ„์— ์ฃผ์ž…
consolidate_memory ํ”ผ๋ผ๋ฏธ๋“œ ์Šน๊ฒฉ: ์ƒˆ ๊ธฐ์–ต์„ ์žฅ๋ฉด ๋…ธํŠธ์™€ ํŽ˜๋ฅด์†Œ๋‚˜์— ํ†ตํ•ฉ (์•„๋ž˜)
extract_skills ์™„๊ฒฐ๋œ ์ผ€์ด์Šค์—์„œ ์žฌ์‚ฌ์šฉ SKILL ๋ฌธ์„œ ์ถ”์ถœ ยท ๊ฒŒ์ดํŠธ๋ฅผ ๋ชป ๋„˜์œผ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ์“ฐ์ง€ ์•Š์Œ (๊ทธ๊ฒƒ์ด ์ •๋‹ต์ธ ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„)

CLI์—์„œ๋„ ๊ฐ™์€ ๋ฃจํ”„๊ฐ€ ๋•๋‹ˆ๋‹ค:

lemory remember "ํฌํŠธ 8080์ด ์ด๋ฏธ ์ ์œ ๋˜์–ด ์„œ๋ฒ„๊ฐ€ ์•ˆ ๋œฌ๋‹ค" --type error --case ๋ฐฐํฌ
lemory recall ํฌํŠธ --type error      # ์ขํ˜€์„œ ํšŒ์ƒ
lemory cases                          # ๋ฏธํ•ด๊ฒฐ ๊ฐœ์ˆ˜๊นŒ์ง€ ๋ถ™์€ ์Šค๋ ˆ๋“œ ๋ชฉ๋ก
lemory case ๋ฐฐํฌ                      # ์Šค๋ ˆ๋“œ ์žฌ๊ฐœ
lemory anchor "memories/์–ธ์–ด ์„ ํ˜ธ.md"  # ์ฝ”์–ด ๊ธฐ์–ต์œผ๋กœ ๊ณ ์ •
lemory consolidate                    # L1 ์•„ํ†ฐ โ†’ L2 ์žฅ๋ฉด โ†’ L3 ํŽ˜๋ฅด์†Œ๋‚˜ ์Šน๊ฒฉ

๊ธฐ์–ต ํ”ผ๋ผ๋ฏธ๋“œ: ๋Œ€ํ™” โ†’ ์•„ํ†ฐ โ†’ ์žฅ๋ฉด โ†’ ํŽ˜๋ฅด์†Œ๋‚˜

TencentDB Agent Memory(11.3kโ˜…)๊ฐ€ ๊ฒ€์ฆํ•œ 4์ธต ๊ตฌ์กฐ๋ฅผ ๋ณผํŠธ ์œ„์—์„œ ๋Œ๋ฆฝ๋‹ˆ๋‹ค. ์„ธ์…˜ ๊ธฐ๋ก(L0)์—์„œ ์ฆ๋ฅ˜๋œ ์‚ฌ์‹ค(L1)์ด ์žฅ๋ฉด ๋…ธํŠธ(์žฅ๋ฉด/*.md ยท ๋งฅ๋ฝ๋ณ„ ์‚ด์•„ ์žˆ๋Š” ์„œ์‚ฌ, ๊ฐœ์ˆ˜ ์ƒํ•œ์ด ์žˆ์–ด ์ƒˆ ํŒŒ์ผ ๋Œ€์‹  ํ†ตํ•ฉ์ด ๊ธฐ๋ณธ)์™€ ํŽ˜๋ฅด์†Œ๋‚˜ ๋…ธํŠธ(ํŽ˜๋ฅด์†Œ๋‚˜.md ยท 2000์ž ์บก, ์ ์ง„ ๊ฐฑ์‹ )๋กœ ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค. ์„ธ์…˜์ด ์‹œ์ž‘๋˜๋ฉด vault_context๊ฐ€ ํŽ˜๋ฅด์†Œ๋‚˜์™€ ์žฅ๋ฉด ์ง€๋„๋ฅผ ๋จผ์ € ๋‚ด๋ฐ€๊ณ , ์žฅ๋ฉด ๋ณธ๋ฌธ์€ read_note๋กœ, ์›๋ณธ์€ ๊ฒ€์ƒ‰์œผ๋กœ ํ•„์š”ํ•  ๋•Œ๋งŒ ํŒ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋ฅผ ์ผœ๋‘๋ฉด auto_consolidate = true ํ•œ ์ค„๋กœ ์Šน๊ฒฉ์ด ์ž๋™์ด ๋ฉ๋‹ˆ๋‹ค ยท ์ƒˆ ๊ธฐ์–ต์ด ๋ช‡ ๋ถ„ ์กฐ์šฉํ•ด์ง€๋ฉด ์•Œ์•„์„œ ์žฅ๋ฉดยทํŽ˜๋ฅด์†Œ๋‚˜๋กœ ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค(์„ค์ • ํƒญ ํ† ๊ธ€).

์‹ค์ธกํ–ˆ์Šต๋‹ˆ๋‹ค(RoleMemQA 8๊ด€๊ณ„ร—30์„ธ์…˜, ์žฌํ˜„: benchmarks/run_pyramid.py): ํ•ญ์ƒ ์ฃผ์ž…๋˜๋Š” ๋ถ€ํŠธ ์ปจํ…์ŠคํŠธ๊ฐ€ 1,345ํ† ํฐ ยท ์›๋ฌธ ๋คํ”„(65,602ํ† ํฐ)์˜ 1/48.8์ธ๋ฐ ํŽ˜๋ฅด์†Œ๋‚˜ ์‚ฌ์‹ค ์งˆ๋ฌธ์˜ 34.7%๊ฐ€ ๊ทธ ์•ˆ์—์„œ ๋ฐ”๋กœ ๋‹ตํ•ฉ๋‹ˆ๋‹ค. ์žฅ๋ฉด ํ•˜๋‚˜๋งŒ ๋“œ๋ฆดํ•˜๋ฉด 66.7% @ 2,084ํ† ํฐ, ๋‚˜๋จธ์ง€๋Š” ๊ฒ€์ƒ‰์ธต์ด 100%๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๊ทธ์ชฝ ๋ฐœํ‘œ์น˜(PersonaMem +59%)๋Š” ๋ฆฌํฌ์— ํ•˜๋„ค์Šค๊ฐ€ ์—†์–ด ์žฌํ˜„์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค ยท ์ €ํฌ ์ˆ˜์น˜๋Š” ์ „๋ถ€ ์Šคํฌ๋ฆฝํŠธ ํ•˜๋‚˜๋กœ ๋‹ค์‹œ ๋‚˜์˜ต๋‹ˆ๋‹ค.

๊ทธ์ชฝ๊ณผ์˜ ์ฐจ์ด๋Š” ๋ฐ‘๋‹จ์ž…๋‹ˆ๋‹ค. ๊ทธ์ชฝ ์ฆ๋ฅ˜๋Š” OpenAI ํ˜ธํ™˜ API๊ฐ€ ํ•„์ˆ˜์ง€๋งŒ (๊ทธ์ชฝ "๋กœ์ปฌ ๋ชจ๋“œ"๋„ ์›๊ฒฉ ๋ชจ๋ธ ํ˜ธ์ถœ์ž…๋‹ˆ๋‹ค), lemory consolidate๋Š” LLM์ด ์žˆ์œผ๋ฉด ์„œ์‚ฌ๋ฅผ ์“ฐ๊ณ  ์—†์œผ๋ฉด ๊ฒฐ์ •์  ํด๋ฐฑ์œผ๋กœ ๊ตฌ์กฐํ™” ๋‹ค์ด์ œ์ŠคํŠธ๋ฅผ ์”๋‹ˆ๋‹ค ยท ์™„์ „ ์˜คํ”„๋ผ์ธ์—์„œ๋„ ํ”ผ๋ผ๋ฏธ๋“œ๊ฐ€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์žฅ๋ฉดยทํŽ˜๋ฅด์†Œ๋‚˜๊ฐ€ ํ‰๋ฒ”ํ•œ ๋ณผํŠธ ๋…ธํŠธ๋ผ์„œ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰๊ณผ ๋งํฌ ๊ทธ๋ž˜ํ”„์— ๊ทธ๋Œ€๋กœ ์žกํž™๋‹ˆ๋‹ค. ์†Œ์Šค ๋ ˆ๋ฒจ ๋ถ„์„๊ณผ ์ •๋ฉด ๋น„๊ต๋Š” docs/COMPETITIVE.md์— ์žˆ์Šต๋‹ˆ๋‹ค.

MCP๋ฅผ ๋ชป ์“ฐ๋Š” ํด๋ผ์ด์–ธํŠธ๋„: ๋ฉ”๋ชจ๋ฆฌ ํ”„๋ก์‹œ

lemory serve๊ฐ€ OpenAI ํ˜ธํ™˜ /v1/chat/completions ๋ฅผ ํ•จ๊ป˜ ์—ฝ๋‹ˆ๋‹ค. baseURL๋งŒ ๋ฐ”๊พธ๋ฉด ์–ด๋–ค SDKยท์Šคํฌ๋ฆฝํŠธยทIDE ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋“  ๊ธฐ์–ต์ด ์ƒ๊น๋‹ˆ๋‹ค:

from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:8377/v1", api_key="unused-locally")
r = client.chat.completions.create(model="gpt-4o-mini",
    messages=[{"role": "user", "content": "์šฐ๋ฆฌ ๋ฐฐํฌ ํฌํŠธ๊ฐ€ ๋ช‡ ๋ฒˆ์ด์—ˆ์ง€?"}])
# โ†’ "ํ˜„์žฌ ๋ฐฐํฌ ํฌํŠธ๋Š” 15000์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ๋‚ด ํ”„๋ก์‹œ๊ฐ€ ์“ฐ๋Š”
#    8080๊ณผ์˜ ์ถฉ๋Œ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด์„œโ€ฆ"  (๋ณผํŠธ ๊ธฐ์–ต์œผ๋กœ ๊ทผ๊ฑฐ ์žˆ๋Š” ๋‹ต)

์š”์ฒญ์ด ์ง€๋‚˜๊ฐˆ ๋•Œ ํ”ผ๋ผ๋ฏธ๋“œ ๋ถ€ํŠธ(ํŽ˜๋ฅด์†Œ๋‚˜+์žฅ๋ฉด ์ง€๋„)์™€ ๊ทธ ํ„ด์˜ ๊ด€๋ จ ๊ธฐ์–ต์ด ์‹œ์Šคํ…œ ๋ฉ”์‹œ์ง€๋กœ ์ฃผ์ž…๋˜๊ณ , ์‘๋‹ต์ด ๋Œ์•„์˜ค๋ฉด ๋Œ€ํ™”๊ฐ€ chats/proxy/ ์„ธ์…˜ ๋…ธํŠธ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค(proxy_capture = false๋กœ ๋”) ยท ๋‹ค์Œ consolidate๊ฐ€ ๊ทธ๊ฒƒ์„ ํ”ผ๋ผ๋ฏธ๋“œ๋กœ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค. ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ๊ฐ€ ๋ชจ๋‘ ๋ฌด๋ฃŒ๋กœ ๋ถ™์Šต๋‹ˆ๋‹ค. ์ŠคํŠธ๋ฆฌ๋ฐ์€ ๊ทธ๋Œ€๋กœ ํ†ต๊ณผํ•˜๊ณ , ์—…์ŠคํŠธ๋ฆผ ํ‚ค๋Š” ์„ค์ •์—์„œ๋งŒ ์ฝ์Šต๋‹ˆ๋‹ค(ํด๋ผ์ด์–ธํŠธ Authorization์€ ์ „๋‹ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค ยท ๋กœ์ปฌ ํฌํŠธ๊ฐ€ ์ƒˆ์–ด๋„ ๊ณผ๊ธˆ ํ‚ค๋Š” ์ƒˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค). ์—…์ŠคํŠธ๋ฆผ์€ proxy_upstream์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค ยท ๊ธฐ๋ณธ OpenAI์ง€๋งŒ OpenAI ํ˜ธํ™˜์ด๋ฉด ๋ฌด์—‡์ด๋“  ๋ฉ๋‹ˆ๋‹ค. Ollama(http://localhost:11434/v1)๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉด ๋ชจ๋ธ๊นŒ์ง€ ํฌํ•จํ•ด ์™„์ „ ๋กœ์ปฌ์ธ ๋ฉ”๋ชจ๋ฆฌ ํ”„๋ก์‹œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ์€ ํŒŒํŽธ์˜ ์ •์ฒด์„ฑ์ž…๋‹ˆ๋‹ค. ๋‚จ์˜ Postgres ์•ˆ row๊ฐ€ ์•„๋‹ˆ๋ผ ๋‚ด ๋ณผํŠธ์˜ ๋งˆํฌ๋‹ค์šด ๋…ธํŠธ์ž…๋‹ˆ๋‹ค. ์“ฐ๋Š” ์ฆ‰์‹œ ์˜ต์‹œ๋””์–ธ์— ๋œจ๊ณ , ์†์œผ๋กœ ๊ณ ์น˜๊ณ , ๊นƒ diff๊ฐ€ ๋‚˜์˜ค๊ณ , ๋‚˜๋จธ์ง€ ๋…ธํŠธ์™€ ๊ฐ™์€ ์ธ๋ฑ์Šคยท๊ฐ™์€ ๋งํฌ ๊ทธ๋ž˜ํ”„์— ์‚ฝ๋‹ˆ๋‹ค ยท reflect๊ฐ€ ๋งŒ๋“  ์—ํ”ผ์†Œ๋“œ๋Š” ์ธ์šฉํ•œ ๋…ธํŠธ์™€ ์ด์–ด์ง„ ์ง„์งœ ๊ทธ๋ž˜ํ”„ ๋…ธ๋“œ์ž…๋‹ˆ๋‹ค. ๊ณ„์ •๋„ ํŒŒํŽธ ํ•œ๋„๋„ ์—†์Šต๋‹ˆ๋‹ค. ์ƒํ•œ์€ ๋””์Šคํฌ์ž…๋‹ˆ๋‹ค. ํƒ€์ž… ์ธต์€ ์ขํž ๋ฟ ์ €์žฅ์†Œ๋ฅผ ์ชผ๊ฐœ์ง€ ์•Š์•„์„œ search_notes๋Š” ์—ฌ์ „ํžˆ ์ „๋ถ€ ๋ด…๋‹ˆ๋‹ค.

ํŒŒํŽธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ํ‰๋ฒ”ํ•œ frontmatter๋ผ์„œ ์Šค์ฝ”ํ•‘์ด ์–ด๋””์„œ๋‚˜ ํ†ตํ•ฉ๋‹ˆ๋‹ค ยท CLI๋“ , ์›น ๊ฒ€์ƒ‰์ฐฝ์ด๋“ , search_notes๋“  type:error case:๋ฐฐํฌ.

์„ธ์…˜ ๊ธฐ์–ต์€ ์ž๋™์œผ๋กœ ๋‚จ์Šต๋‹ˆ๋‹ค (๋ช…๋ น ํ•˜๋‚˜)

lemory hooks install claude-code

์ด์ œ Claude Code ์„ธ์…˜์ด ๋๋‚  ๋•Œ๋งˆ๋‹ค ๊ธฐ์–ตํ•  ๋งŒํ•œ ๊ฒฐ์ •ยท์‚ฌ์‹คยท๋ฏธ๊ฒฐ ์‚ฌํ•ญ์ด ๋‚ ์งœ ๋ถ™์€ ๋…ธํŠธ ํ•˜๋‚˜๋กœ ๋ณผํŠธ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๋ถ€์ง€๋Ÿฐํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ›… ๊ธฐ๋ฐ˜ ๋„๊ตฌ๋“ค๊ณผ ๋‹ฌ๋ฆฌ, ์ €์žฅ๋œ ๊ฒƒ์€ ์ „๋ถ€ ๋Œ€์‹œ๋ณด๋“œ ํ”ผ๋“œ์— ์ถœ์ฒ˜์™€ ๋˜๋Œ๋ฆฌ๊ธฐ ๋ฒ„ํŠผ๊ณผ ํ•จ๊ป˜ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ˆ˜๋™์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด CLAUDE.md์— ์ด๋ ‡๊ฒŒ ์ ์–ด๋„ ๋ฉ๋‹ˆ๋‹ค:

์„ธ์…˜ ์‹œ์ž‘ ์‹œ lemory์˜ vault_context๋ฅผ ํ•œ ๋ฒˆ ๋ถˆ๋Ÿฌ ์ƒํ™ฉ์„ ํŒŒ์•…ํ•ด๋ผ. ๊ฒฐ์ •์ด๋‚˜
๊ธฐ์–ตํ•  ์‚ฌ์‹ค, ์„ ํ˜ธ๊ฐ€ ์ •ํ•ด์ง€๋ฉด save_memory๋กœ ์ €์žฅํ•ด๋ผ(๊ฐ„๊ฒฐํ•˜๊ฒŒ, ๋…ธํŠธ๋‹น ๊ธฐ์–ต
ํ•˜๋‚˜). ๋‚ด ๋…ธํŠธ๊ฐ€ ์ด๋ฏธ ๋‹ตํ•˜๋Š” ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ๋ฌป๊ธฐ ์ „์— search_notes๋กœ ๊ฒ€์ƒ‰ํ•ด๋ผ.

ํ”„๋ผ์ด๋ฒ„์‹œ๋Š” ํŒŒ์ผ ์†์„ฑ์ž…๋‹ˆ๋‹ค. ๋…ธํŠธ ๋งจ ์œ„์— lemory: false ํ•œ ์ค„๋งŒ ์ ์œผ๋ฉด ๊ทธ ๋…ธํŠธ๋Š” ์ƒ‰์ธ๋„, ๊ฒ€์ƒ‰๋„, ์–ด๋–ค ๋ชจ๋ธ๋กœ๋„ ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ ์ƒ‰์ธ๋๋˜ ๋…ธํŠธ๋ผ๋ฉด ์ด ํ•œ ์ค„์ด ์ œ์™ธ์‹œํ‚ต๋‹ˆ๋‹ค.

ํ•œ ๋ฒˆ ๋งํ•˜๋ฉด, ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค

1์ผ์ฐจ: ๋Œ€ํ™”๊ฐ€ ์„ธ์…˜ ๋…ธํŠธ๋กœ ์ž๋™ ์ €์žฅ. 30์ผ์ฐจ: ๋น„์„œ๊ฐ€ 4ms ๋งŒ์— ์ถœ์ฒ˜์™€ ํ•จ๊ป˜ ๊ทธ ์‚ฌ์‹ค์„ ์ฐพ์•„์˜ด.

๋น„์„œ๋Š” ๋Œ€ํ™”ํ•˜๋ฉด์„œ ์ฝ๊ณ  ์”๋‹ˆ๋‹ค. "โ€ฆ๋ผ๊ณ  ๊ธฐ์–ตํ•ด์ค˜"๋ผ๊ณ  ๋งํ•˜๋ฉด ๊ทธ ์ž๋ฆฌ์—์„œ ๋…ธํŠธ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค(์Šน์ธ์ œ๋ฅผ ์ผฐ๋‹ค๋ฉด ๋Œ€๊ธฐ์—ด๋กœ ๊ฐ‘๋‹ˆ๋‹ค). "๊ทธ๊ฑด ์–ธ์ œ์˜€์ง€?" ๊ฐ™์€ ํ›„์† ์งˆ๋ฌธ์€ ์•ž ์งˆ๋ฌธ๊ณผ ๋ฌถ์–ด์„œ ์ฐพ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋Œ€ํ™”์—๋Š” ๋ณผํŠธ ์ƒํ™ฉ ์š”์•ฝ์ด ์ž๋™์œผ๋กœ ๋“ค์–ด๊ฐ€๊ณ , /๊ฒ€์ƒ‰ /๊ธฐ์–ต /์ตœ๊ทผ ๋ช…๋ น๋„ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋น„์„œ์™€ ๋‚˜๋ˆˆ ๋Œ€ํ™”๋Š” chats/ ํด๋”์— ๋‚ ์งœ ๋ถ™์€ ๋…ธํŠธ๋กœ ์ž๋™ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์—ด์–ด๋ณด๊ณ , ๊ณ ์น˜๊ณ , ์ง€์šธ ์ˆ˜ ์žˆ๋Š” ํ‰๋ฒ”ํ•œ ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ๊ทธ ํˆฌ๋ช…ํ•จ์ด ๊ณง ๋˜๋Œ๋ฆฌ๊ธฐ ๋ฒ„ํŠผ์ž…๋‹ˆ๋‹ค. ํ•œ ๋‹ฌ ๋’ค์— "๋‚ด ์—ฌ๋™์ƒ ์ด๋ฆ„ ๋ญ๋žฌ์ง€?"๋ผ๊ณ  ๋ฌผ์œผ๋ฉด ์ถœ์ฒ˜์™€ ํ•จ๊ป˜ ์ˆ˜ ms ๋งŒ์— ๋Œ์•„์˜ต๋‹ˆ๋‹ค. ์œ„์— ์–น์„ ์ˆ˜ ์žˆ๋Š” ์„ ํƒ ๊ธฐ๋Šฅ ๋‘ ๊ฐ€์ง€:

  • lemory distill: ์›ํ•  ๋•Œ๋งŒ ๋Œ๋ฆฌ๋Š” ํ›„์ฒ˜๋ฆฌ์ž…๋‹ˆ๋‹ค. ์˜จ๋””๋ฐ”์ด์Šค Gemma๊ฐ€ ๋Œ€ํ™”๋ฅผ ํŒฉํŠธ ์š”์•ฝ ๋…ธํŠธ๋กœ ์ •๋ฆฌํ•˜๊ณ  ์ถœ์ฒ˜๋ฅผ [[์œ„ํ‚ค๋งํฌ]]๋กœ ๋‚จ๊น๋‹ˆ๋‹ค. ์ง€์ €๋ถ„ํ•œ ์ฑ„ํŒ… ๋ฒค์น˜ ์‹ค์ธก์œผ๋กœ 1์œ„ ์ •๋‹ต ์กด์žฌ์œจ +3.1%p. ํ•œ๊ณ„๊นŒ์ง€ BENCHMARKS ยง7e์— ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์Šคํ‚ฌ(lemory skill install)์€ ์™ธ๋ถ€ ์–ด์‹œ์Šคํ„ดํŠธ์—๊ฒŒ ๊ฐ™์€ ์Šต๊ด€์„ ๊ฐ€๋ฅด์นฉ๋‹ˆ๋‹ค. ์„ธ์…˜์ด ๋๋‚˜๊ธฐ ์ „์— lemory remember๋กœ ์ €์žฅํ•˜๋„๋ก.

์—…๋ฌด ๋น„์„œ ์ชฝ๋„ ๋”ฐ๋กœ ์ธก์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. AgentMemQA(ยง7f)๋Š” 12์ฃผ์น˜ ์—…๋ฌด ์„ธ์…˜(์˜ํ•œ ํ˜ผ์šฉ ๊ธฐ์ˆ  ๋Œ€ํ™”, ์ฝ”๋“œ๋ธ”๋ก, ์—๋Ÿฌ ๋กœ๊ทธ)์— "๋ฒˆ๋ณต๋œ ๊ฒฐ์ •" ํ•จ์ •์„ ์‹ฌ์€ ๋ฒค์น˜๋งˆํฌ์ž…๋‹ˆ๋‹ค. ํ‚ค ์—†์ด doc@1 0.978, ๋ฒˆ๋ณต ํ•จ์ •์— ์†์€ ๋น„์œจ 0. ๋ฐ˜๋Œ€ ๋ฐœ๊ฒฌ๋„ ๊ทธ๋Œ€๋กœ ์ ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ๋žญ์ปค(์žฌ์ •๋ ฌ AI)๋Š” ์‹œ๊ฐ„ ๊ฐœ๋…์ด ์—†์–ด ๊ฐฑ์‹ ๋œ ์‚ฌ์‹ค์„ ์˜› ๊ฐ’์œผ๋กœ ๋˜๋Œ๋ฆฝ๋‹ˆ๋‹ค(0.80โ†’0.50). ์‹œ๊ฐ„ ๋ณด์ •์„ ๋ถ™์—ฌ๋„ ์•ˆ ๋์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ธฐ๋ณธ์œผ๋กœ ๊บผ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€์ €๋ถ„ํ•œ ์‹ค์ „ ์ฑ„ํŒ…๋„ ๊ฐ€์ •์ด ์•„๋‹ˆ๋ผ ์ธก์ •์ž…๋‹ˆ๋‹ค. RoleMemQA-messy๊ฐ€ ๋ฒˆ๋ณตยท๋†๋‹ดยท์žก๋‹ด ์˜ค์—ผ์„ ์‹ฌ์—ˆ๊ณ , ์ „์ฒด doc@8 0.977 ยท ์—ํ”ผ์†Œ๋“œ ํšŒ์ƒ doc@8 0.875(์ •๋ณด๋Ÿ‰ prior ์ „ 0.792). ์—ํ”ผ์†Œ๋“œ ์งˆ๋ฌธ("์šฐ๋ฆฌ ์•ฝ์†์ด ๋ญ์˜€์ง€?")์€ ์–ดํœ˜ ๋ณ€๋ณ„๋ ฅ์ด 0์ด๋ผ, ๊ทธ๋Ÿฐ ์งˆ๋ฌธ์—์„œ๋งŒ ๋ฒกํ„ฐ ๋ ˆ๊ทธ๋ฅผ ํฌ์†Œ ๋‚ด์šฉ ์ •๋ณด๋Ÿ‰์œผ๋กœ ์žฌ์ •๋ ฌํ•ด ํ•„๋Ÿฌ("๊ธฐ์–ตํ•ด ๋‘˜๊ฒŒ, ์•ฝ์†!")๊ฐ€ ์•„๋‹ˆ๋ผ ์ง„์งœ ํŒฉํŠธ๋ฅผ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค. ์ฐธ์กฐํ˜• ์งˆ๋ฌธ(KorQuADยทAgentMemQA)์—๋Š” ๊ฒŒ์ดํŠธ๊ฐ€ ๊ฑธ๋ฆฌ์ง€ ์•Š์•„ ์ˆ˜์น˜๊ฐ€ ๊ทธ๋Œ€๋กœ์ž…๋‹ˆ๋‹ค. ๊ฐœ์„ /ํ›„ํ‡ด ๋‚ด์—ญ ์ „์ฒด๊ฐ€ ยง7e์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋กœ๊ทธ ํŒŒ์ผ์ด ์•„๋‹ˆ๋ผ ๋‘ ๋ฒˆ์งธ ๋‡Œ์ž…๋‹ˆ๋‹ค

์ค‘๋ณต ๊ธฐ์–ต์ด ์œ„ํ‚ค๋งํฌ๋กœ ํ‘œ์‹œ๋˜๊ณ , ์—ฐ๊ฒฐ ์•ˆ ๋œ ์–ธ๊ธ‰์ด ๋งํฌ ์ œ์•ˆ์œผ๋กœ ๋‚˜์˜ค๋Š” ์žฅ๋ฉด

์‚ฌ๋žŒ์ด ์“ด ๋…ธํŠธ์—๋Š” ์•„๋ž˜ ์žฅ์น˜๊ฐ€ ํ•˜๋‚˜๋„ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์„ ๋ณผํŠธ์— ๋„ฃ์œผ๋ฉด ๋‹ค์Œ ์งˆ๋ฌธ๋ถ€ํ„ฐ ๋ฐ”๋กœ ๊ฒ€์ƒ‰๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ๊ธฐ๋Šฅ๋“ค์€ ๊ธฐ๊ณ„๊ฐ€ ์“ฐ๋Š” ๋…ธํŠธ๋ฅผ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • save_memory๋Š” ์ •๋ฆฌํ•˜๋ฉด์„œ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ๊ธฐ์–ต์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ๋ณผํŠธ๊ฐ€ ์ด๋ฏธ ์•„๋Š” ๊ฒƒ๊ณผ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ์˜ ๊ฐ™์œผ๋ฉด possible_duplicate_of:๋กœ ํ‘œ์‹œํ•˜๊ณ , ๊ด€๋ จ ์žˆ์œผ๋ฉด related: ์œ„ํ‚ค๋งํฌ๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ง€์šฐ๊ณ  ๋‹ค์‹œ ์“ฐ๋Š” ๋ฐฉ์‹(mem0์‹) ๋Œ€์‹ , ์—ฐ๊ฒฐ๋งŒ ํ•˜๊ณ  ๊ฒฐ์ •์€ ๋‹น์‹ ์—๊ฒŒ ๋‚จ๊น๋‹ˆ๋‹ค.
  • lemory suggest-links: ์„œ๋กœ๋ฅผ ์–ธ๊ธ‰ํ•˜๋Š”๋ฐ ์—ฐ๊ฒฐ์€ ์•ˆ ๋œ ๋…ธํŠธ๋“ค์„ ๊ทผ๊ฑฐ ๋ฌธ์žฅ๊ณผ ํ•จ๊ป˜ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. LLM ์—†์ด, ์ƒ‰์ธ์ด ์ด๋ฏธ ๋งŒ๋“  ๊ทธ๋ž˜ํ”„๋ฅผ ์ฝ์„ ๋ฟ์ž…๋‹ˆ๋‹ค.
  • lemory graph: ๋ณผํŠธ ์ „์ฒด๋ฅผ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ HTML ํ•œ ์žฅ์œผ๋กœ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค. ๋…ธํŠธ 1,469๊ฐœ, ๊ฐ„์„  24,850๊ฐœ๊ฐ€ ์•ฝ 1์ดˆ. ์š”์ฆ˜ ๊ทธ๋ž˜ํ”„ ๋„๊ตฌ๋“ค์€ ๊ฐ™์€ ๊ฒƒ์„ ๋งŒ๋“œ๋Š” ๋ฐ ํŒŒ์ผ๋งˆ๋‹ค LLM์„ ๋Œ๋ฆฝ๋‹ˆ๋‹ค.
  • lemory drift: "๋‚ด ๊ธฐ์–ต์ด ์•„์ง ํ˜„์‹ค๊ณผ ๋งž๋‚˜?"๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊นจ์ง„ ๋งํฌ, ์‚ฌ๋ผ์ง„ ํŒŒ์ผ, ๋ฐฉ์น˜๋œ ์ค‘๋ณต ํ‘œ์‹œ๋ฅผ ์ฐพ๊ณ , --prompt๋ฅผ ๋ถ™์ด๋ฉด ์—์ด์ „ํŠธ์—๊ฒŒ ๊ทธ๋Œ€๋กœ ๋„˜๊ธธ ์ˆ˜๋ฆฌ ์ง€์‹œ๋ฌธ์œผ๋กœ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค. ํ† ํฐ 0๊ฐœ. (์ด ์•„์ด๋””์–ด๋ฅผ ๊ฐœ์ฒ™ํ•œ mex์— ๊ฐ์‚ฌ๋ฅผ ์ „ํ•ฉ๋‹ˆ๋‹ค.)
  • lemory conflicts: "๋‚ด ๊ธฐ์–ต๋ผ๋ฆฌ ์„œ๋กœ ๋งž๋‚˜?"๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ์˜ ๊ฐ™์€ ๋ง์ธ๋ฐ ์ˆซ์ž๊ฐ€ ๋‹ค๋ฅด๊ฑฐ๋‚˜, ์„œ๋กœ ๋ถ€์ •ํ•˜๊ฑฐ๋‚˜, ์•„์˜ˆ ์ค‘๋ณต์ธ ๋…ธํŠธ ์Œ์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ ์žˆ๋Š” ์ƒ‰์ธ ์œ„์—์„œ ์ฝ”์‚ฌ์ธ์œผ๋กœ ์ฐพ์œผ๋‹ˆ LLM 0ํšŒ์ž…๋‹ˆ๋‹ค. (drift๊ฐ€ ๊ธฐ์–ต ๋Œ€ ํ˜„์‹ค์ด๋ผ๋ฉด conflicts๋Š” ๊ธฐ์–ต ๋Œ€ ๊ธฐ์–ต์ž…๋‹ˆ๋‹ค.)
  • lemory search --fast: ์ฆ‰๋‹ต ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. ์ž„๋ฒ ๋”ฉ ์—†์ด ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰ + ์˜คํƒ€ ๊ต์ • + ์ œ๋ชฉ/์ตœ์‹ ์„ฑ ๋ถ€์ŠคํŠธ๋งŒ์œผ๋กœ 3.8ms์— recall@1 0.975 (ํ•˜์ด๋ธŒ๋ฆฌ๋“œ๋Š” 21ms์— 0.967์ž…๋‹ˆ๋‹ค. ๋ง ๋ฐ”๊ฟ” ๋ฌป๊ธฐ, ๋‹ค๋ฅธ ์–ธ์–ด, ๋ฉ€ํ‹ฐํ™‰์—๋Š” ๋ฒกํ„ฐ๊ฐ€ ํ•„์š”ํ•ด์„œ ๊ธฐ๋ณธ์€ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ์ž…๋‹ˆ๋‹ค). ํƒ€์ดํ•‘ ์ฆ‰์‹œ ๊ฒ€์ƒ‰์ฐฝ์šฉ์ž…๋‹ˆ๋‹ค.
  • ์‹œ๊ฐ„์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. "์š”์ƒˆ ๋‚ด๊ฐ€ ํ•˜๋˜ ๊ทธ๊ฑฐ ๋ญ์˜€์ง€?"์—๋Š” ์ตœ์‹  ์‚ฌ์‹ค์„, "3์›”์— ์ฝ๋˜ ์ฑ…์€?"์—๋Š” ๊ทธ๋•Œ ๊ธฐ๋ก์„ ์ฐพ์•„์˜ต๋‹ˆ๋‹ค.

AI๊ฐ€ ์“ด ๊ฒƒ์€ ์ „๋ถ€ ๋Œ€์‹œ๋ณด๋“œ AI ๋ฉ”๋ชจ๋ฆฌ ํ”ผ๋“œ์— "๋ˆ„๊ฐ€ ์ผ๋Š”์ง€"์™€ ๋˜๋Œ๋ฆฌ๊ธฐ ๋ฒ„ํŠผ๊ณผ ํ•จ๊ป˜ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค(๋˜๋Œ๋ฆฌ๋ฉด ์˜ต์‹œ๋””์–ธ ํœด์ง€ํ†ต .trash๋กœ ๊ฐ‘๋‹ˆ๋‹ค. ์‚ฌ๋žŒ์ด ์“ด ๋…ธํŠธ๋Š” ์•„์˜ˆ ๋˜๋Œ๋ฆฌ๊ธฐ ๋Œ€์ƒ์ด ์•„๋‹™๋‹ˆ๋‹ค). ๋ชจ๋“  ์งˆ์˜๋„ ์ถœ์ฒ˜์™€ ํ•จ๊ป˜ ๋‚จ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฏธ๋“ค์›จ์–ด์˜ ์•ฝ์†์ž…๋‹ˆ๋‹ค. ์•„๋ฌด๊ฒƒ๋„ ๋ชฐ๋ž˜ ์ง€๋‚˜๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Claude๊ฐ€ ๊ธฐ์–ต์„ ์ €์žฅํ•˜๋ฉด claude-desktop ์ถœ์ฒ˜์˜ ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ๋กœ ํ”ผ๋“œ์— ๋œจ๊ณ  ๋˜๋Œ๋ฆฌ๊ธฐ ๋ฒ„ํŠผ์ด ๋ถ™๋Š” ์žฅ๋ฉด

๋ฐ๋ชจ ๋ชจ์Œ, ์ „๋ถ€ ์‹ค์ œ๋กœ ๋™์ž‘ํ•˜๋Š” ํ™”๋ฉด์ž…๋‹ˆ๋‹ค

๊ฐ ํด๋ฆฝ์€ ์ž‘์€ ํ•œ๊ตญ์–ด ๋ฐ๋ชจ ๋ณผํŠธ์—์„œ ์‹ค์ œ CLI ์ถœ๋ ฅ์„ ๊ธ€์ž ๊ทธ๋Œ€๋กœ ๋‹ค์‹œ ์ฐ์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์žฌ์ƒ์„ฑ ์Šคํฌ๋ฆฝํŠธ๋Š” docs/assets/make_gifs.py์— ์žˆ๊ณ , ์บก์ฒ˜ ์›๋ฌธ๋„ ์Šคํฌ๋ฆฝํŠธ ์•ˆ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชฉ์—…์€ ์—†์Šต๋‹ˆ๋‹ค.

์ฆ‰๋‹ต ๊ฒ€์ƒ‰ --fast ยท ์ž„๋ฒ ๋”ฉ 0ํšŒ, 3.8ms
๋ชจ์ˆœ ํƒ์ง€ lemory conflicts ยท ๊ธฐ์–ต vs ๊ธฐ์–ต
AI ์“ฐ๊ธฐ ์Šน์ธ pending โ†’ approve
๋“œ๋ฆฌํ”„ํŠธ ๊ฐ์ง€ lemory drift ยท ๊ธฐ์–ต vs ํ˜„์‹ค
๋ฒ”์œ„ ์—ฐ์‚ฐ์ž tag: folder: path: after: before:
์‹œ๊ฐ„ ์ธ์ง€ "์š”์ƒˆ ์ž‘์—…ํ•˜๋˜โ€ฆ" โ†’ ์ตœ์‹  ๊ฒฐ์ • 1์œ„
์˜คํƒ€ ๊ต์ • FoundatoinDB โ†’ FoundationDB
๋Œ€๊ทœ๋ชจ ๊ฒ€์ฆ KorQuAD 9,663๋ฌธ๋‹จ ร— 60,407์งˆ๋ฌธ

์ฝ˜์†”

lemory serve โ†’ 127.0.0.1:8377. ์˜ต์‹œ๋””์–ธ์„ ๋˜ ๋งŒ๋“  ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ฏธ๋“ค์›จ์–ด์— ๋ฌด์—‡์ด ์˜ค๊ฐ”๋Š”์ง€ ๋ณด๊ณ  ๋ฐ”๋กœ ์†๋ณด๋Š” ์ž‘์—… ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค. ๋ฐ์Šคํฌํ†ฑ ์ง€์‹์•ฑ์˜ ๋ฌธ๋ฒ•์„ ์›น ์ฝ˜์†” ๋น„์šฉ์œผ๋กœ ๋‹ด์•˜์Šต๋‹ˆ๋‹ค: ํ† ํฐ ๊ธฐ๋ฐ˜ ๋””์ž์ธ ์‹œ์Šคํ…œ(๋ผ์ดํŠธ/๋‹คํฌ), โŒ˜K ํŒ”๋ ˆํŠธ, โŒ˜1โ€“8 ์ด๋™, ? ๋‹จ์ถ•ํ‚ค ๋„์›€๋ง, ํ•˜๋‹จ ์ƒํƒœ๋ฐ”.

  • ํ˜„ํ™ฉ: ํƒ€์ž„๋ผ์ธ์ž…๋‹ˆ๋‹ค. AI ๋ฉ”๋ชจ๋ฆฌ ํ”ผ๋“œ(๋˜๋Œ๋ฆฌ๊ธฐ ํฌํ•จ), ์ตœ๊ทผ ์งˆ์˜์™€ ์ถœ์ฒ˜, ํด๋ผ์ด์–ธํŠธ๋ณ„ ์‚ฌ์šฉ๋Ÿ‰, ์ƒ‰์ธ ํ™œ๋™์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ง€์‹: 3์—ด ์›Œํฌ์ŠคํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค(์—ด ํญ์€ ๋“œ๋ž˜๊ทธ๋กœ ์กฐ์ ˆํ•˜๊ณ  ๊ธฐ์–ต๋ฉ๋‹ˆ๋‹ค). ๋ชฉ๋ก์—๋Š” ๋…ธํŠธ๋งˆ๋‹ค ํ•œ ์ค„ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ์ƒ์„ธ์—๋Š” ์Šคํ‹ฐํ‚ค ํ—ค๋” ยท ํด๋ฆญ๋˜๋Š” ๊ฒฝ๋กœ ๋ธŒ๋ ˆ๋“œํฌ๋Ÿผ ยท ๊ธด ๋…ธํŠธ ๋ชฉ์ฐจ(์ฝ๋Š” ์œ„์น˜๋ฅผ ๋”ฐ๋ผ์˜ค๋Š” ์Šคํฌ๋กค ์ŠคํŒŒ์ด). ๊ทธ๋ฆฌ๊ณ  ์ง์ ‘ ์”๋‹ˆ๋‹ค: ์ƒˆ ๋…ธํŠธ ยท ์ด๋ฆ„ ๋ณ€๊ฒฝ ยท ํœด์ง€ํ†ต, ๊ตฌ๋ฌธ ํ•˜์ด๋ผ์ดํŠธ ์—๋””ํ„ฐ + ๋ผ์ด๋ธŒ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, [[์œ„ํ‚ค๋งํฌ]] ์ž๋™์™„์„ฑ, 1.5์ดˆ ์ž๋™ ์ €์žฅ (๋””์Šคํฌ ์ถฉ๋Œ์€ 409๋กœ ๋ณดํ˜ธ), frontmatter ์†์„ฑ ์ธ์ŠคํŽ™ํ„ฐ(ํƒœ๊ทธ๋Š” ์นฉ์œผ๋กœ ๋”ํ•˜๊ณ  ๋บ๋‹ˆ๋‹ค).
  • ๊ธฐ์–ต: ํ”ผ๋ผ๋ฏธ๋“œ(ํŽ˜๋ฅด์†Œ๋‚˜ ยท ์žฅ๋ฉด ยท ์•ต์ปค ยท ์ผ€์ด์Šค ยท ์Šคํ‚ฌ)์™€ ํƒ€์ž…๋ณ„ ํšŒ์ƒ์ž…๋‹ˆ๋‹ค.
  • ๊ทธ๋ž˜ํ”„: ๋ณผํŠธ ์ „์ฒด ์ƒํ˜ธ์ž‘์šฉ ๊ทธ๋ž˜ํ”„์ž…๋‹ˆ๋‹ค.
  • ๊ฑด๊ฐ•: ์Šน์ธ ๋Œ€๊ธฐ ๊ธฐ์–ต, ๋ชจ์ˆœ ์Œ, ๋“œ๋ฆฌํ”„ํŠธ, ๋งํฌ ์ œ์•ˆ์„ ํ•œ ํ™”๋ฉด์—์„œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒ€์ƒ‰: ํ•˜์ด๋ธŒ๋ฆฌ๋“œ/๋ฒกํ„ฐ/ํ‚ค์›Œ๋“œ๋ฅผ ๋ฐ”๊ฟ”๊ฐ€๋ฉฐ ์ ์ˆ˜์™€ ์†๋„๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์‹คํ—˜์‹ค์ž…๋‹ˆ๋‹ค. ๋นˆ ํ™”๋ฉด ๋Œ€์‹  ๋‚ด ๋ณผํŠธ๋กœ ๋งŒ๋“  ํŠœํ† ๋ฆฌ์–ผ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ๋น„์„œ: ์˜จ๋””๋ฐ”์ด์Šค ๋ชจ๋ธ๋กœ ๋ณผํŠธ์— ๋Œ€ํ•ด ์ŠคํŠธ๋ฆฌ๋ฐ ๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค(์ถœ์ฒ˜ ์ธ์šฉ).
  • ์„ค์ •: ๊ฒ€์ƒ‰ ์˜ต์…˜๊ณผ ๋ชจ๋ธ ์„ ํƒ์„ ๋ฐ”๋กœ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ํƒ€์ž„๋ผ์ธ ๊ธฐ๋ก ์—ฌ๋ถ€๋„ ์„ค์ •์ด๊ณ (event_log), ์ „๋ถ€ ๋‚ด SQLite ํŒŒ์ผ์—๋งŒ ๋‚จ์Šต๋‹ˆ๋‹ค.

์ง€์‹ ํƒญ: ๋…ธํŠธ ์ƒ์„ธ, ๋กœ์ปฌ ๊ทธ๋ž˜ํ”„, ๊ด€๋ จ ๋…ธํŠธ

ํŒŒ์ผ vs ํ–‰: ๊ฐœ์ธ ์ง€์‹์—๋Š” ํŒŒ์ผ์ด ์ด๊น๋‹ˆ๋‹ค

Lemory์™€ ๊ฐ€์žฅ ๋น„์Šทํ•œ ๊ฒƒ์€ mem0์˜ OpenMemory(๋Œ€์‹œ๋ณด๋“œ ์žˆ๋Š” ๋กœ์ปฌ MCP ๋ฉ”๋ชจ๋ฆฌ)์ž…๋‹ˆ๋‹ค. ์ฐจ์ด๋Š” "๊ธฐ์–ต"์ด ๋ฌด์—‡์ด๋ƒ์ž…๋‹ˆ๋‹ค.

Lemory OpenMemory (mem0) supermemory ์…€ํ”„ํ˜ธ์ŠคํŠธ basic-memory qmd
๊ธฐ์–ต์ด๋ž€ ๋‚ด ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ Postgres+Qdrant์˜ ํ–‰ ์ „์šฉ ์ €์žฅ์†Œ์˜ ๋ ˆ์ฝ”๋“œ ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ (์ฝ๊ธฐ ์ „์šฉ ์ธ๋ฑ์Šค)
์‹คํ–‰ ํ˜•ํƒœ ํ”„๋กœ์„ธ์Šค 1๊ฐœ, SQLite 1๊ฐœ Docker: Postgres + Qdrant + UI ๋ฐ”์ด๋„ˆ๋ฆฌ + ์™ธ๋ถ€ ์ž„๋ฒ ๋”ฉ pip ํŒจํ‚ค์ง€ bun CLI
๊ธฐ์กด ๋…ธํŠธ๋ฅผ ์ฝ๋‚˜ ์˜ˆ, ๊ทธ๊ฒƒ์ด ์กด์žฌ ์ด์œ  ์•„๋‹ˆ์š” (๋Œ€ํ™”์—์„œ ์ถ”์ถœ) ์—…๋กœ๋“œ ๋ถ€๋ถ„์  ์˜ˆ
์ƒ‰์ธ LLM ํ˜ธ์ถœ 0 ๋Œ€ํ™”๋งˆ๋‹ค API ์ชฝ 0 0
๋Œ€์‹œ๋ณด๋“œ ํƒ€์ž„๋ผ์ธ + ๋˜๋Œ๋ฆฌ๊ธฐ + ํด๋ผ์ด์–ธํŠธ ๊ธฐ์–ต CRUD UI ์ฝ˜์†” ์—†์Œ ์—†์Œ
๊ฒ€์ƒ‰ (์ง์ ‘ ์ธก์ •) ๋ฉ€ํ‹ฐํ™‰ 1.000 ยท ์•ฝ 3ms 0.579 ยท 212ms 0.579 ยท 327ms ์ธก์ • ๋ถˆ๊ฐ€ยน 0.526 ยท 0.6~59์ดˆ
ํ•œ๊ตญ์–ด ๊ฒ€์ƒ‰ CJK ๋ฐ”์ด๊ทธ๋žจ + ์˜คํƒ€ ๊ต์ • ์˜์–ด ์šฐ์„  ์˜์–ด ์šฐ์„  ์˜์–ด ์šฐ์„  ์˜์–ด ์šฐ์„ 
๋– ๋‚  ๋•Œ ๋น„์šฉ ์—†์Œ, ํŒŒ์ผ์ด ๋‚จ์Œ ๋‚ด๋ณด๋‚ด๊ธฐ/์ด์‚ฌ ๋‚ด๋ณด๋‚ด๊ธฐ/์ด์‚ฌ ์—†์Œ ์—†์Œ

ยน basic-memory๋Š” ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ์ค‘์‹ฌ์ด๋ผ ์ˆœ์œ„ ๊ฒ€์ƒ‰์ด ์—†์Šต๋‹ˆ๋‹ค. ์ธก์ •๋œ ์ˆ˜์น˜๋Š” ์ „๋ถ€ ๊ฐ™์€ ์กฐ๊ฑด, ๊ฐ™์€ ๋ชจ๋ธ, ๊ฐ™์€ ๋ฐ์ดํ„ฐ: ๋ฐฉ๋ฒ•๋ก .

์ถ”์ถœ ๋ฐฉ์‹(ํ–‰)์˜ ๊ธฐ์–ต์€ ๋‚ด ๋ง์˜ ์š”์•ฝ์ž…๋‹ˆ๋‹ค. ์ €์žฅํ•  ๋•Œ ์ •๋ณด๊ฐ€ ๊นŽ์ด๊ณ , ๋‚˜์ค‘์— ๊ฒ€์ฆํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ๋ฐฉ์‹์€ ์‹ค์ œ ๋…ธํŠธ๋ฅผ ๋‚ ์งœ์™€ ๋งฅ๋ฝ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰ ํ’ˆ์งˆ์„ ์ธก์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋„ ๊ทธ ๋•๋ถ„์ž…๋‹ˆ๋‹ค.

ํ•ฉ์„ฑ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋กœ ์ฆ๋ช…ํ•ฉ๋‹ˆ๋‹ค

์‚ฌ๋žŒ๋“ค์ด ์‹ค์ œ๋กœ ๋ฌป๋Š” ๋ฐฉ์‹๋Œ€๋กœ: ๋ง ๋ฐ”๊ฟ” ๋ฌป๊ธฐ, ์˜์–ด ๋…ธํŠธ์— ํ•œ๊ตญ์–ด ์งˆ๋ฌธ, ํ‚ค์›Œ๋“œ๋งŒ ๋˜์ง€๊ธฐ, ์˜คํƒ€๊นŒ์ง€ (full-support@8):

ํŒจ๋Ÿฌํ”„๋ ˆ์ด์ฆˆ, ํ•œ๊ตญ์–ด, ํ‚ค์›Œ๋“œ, ์˜คํƒ€ ๊ฐ•๊ฑด์„ฑ

๋ฉ€ํ‹ฐํ™‰, LLM ๊ทธ๋ž˜ํ”„ ์ง„์˜๊ณผ์˜ ๋Œ€๊ฒฐ. ๋‚ด [[์œ„ํ‚ค๋งํฌ]]์™€ ์ œ๋ชฉ ์–ธ๊ธ‰์ด ์ด๋ฏธ ์ง€์‹๊ทธ๋ž˜ํ”„์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ๋ฌด๋ฃŒ๋กœ ์ฝ๋Š” ์ชฝ์ด, LLM ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ๋“œ๋Š” ์ชฝ๋ณด๋‹ค ๋†’๊ฒŒ ๋‚˜์™”์Šต๋‹ˆ๋‹ค:

2-hop ์งˆ๋ฌธ: Lemory 1.000 vs LLM ๊ทธ๋ž˜ํ”„ ํŒŒ์ดํ”„๋ผ์ธ
Lemory LightRAG MemPalace mem0 cognee supermemory LlamaIndex qmd
๋ฉ€ํ‹ฐํ™‰ answer-in-context@8 1.000 0.807ยน 0.596 0.579 0.561 0.579 0.649 0.526
2-hop ์งˆ๋ฌธ๋งŒ 1.000 0.738 0.452 0.548 0.405 - 0.524 0.381
์ƒ‰์ธ, 54๋…ธํŠธ LLM 0ํšŒ, ์•ฝ 30์ดˆ 165ํšŒ, 14๋ถ„ ๋กœ์ปฌ ์ž„๋ฒ ๋”ฉ ๋…ธํŠธ๋‹น 1~2ํšŒ ์•ฝ 45๋ถ„ API ์ชฝ 0 0
๊ฒ€์ƒ‰ ์ง€์—ฐ (p50) ์•ฝ 3ms 7.5์ดˆยฒ ์•ฝ 1์ดˆยณ 212ms ์•ฝ 5์ดˆ 327ms 649msโด 0.6~59์ดˆ
ํ•œ๊ตญ์–ด ์งˆ๋ฌธ (full-support) 0.950 - 0.350 - - - - -

ยน LightRAG์— ์œ ๋ฆฌํ•˜๊ฒŒ ์ฑ„์ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ณ‘ํ•ฉ๋œ ์ปจํ…์ŠคํŠธ ๋ฉ์–ด๋ฆฌ๊ฐ€ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์˜ 8์ฒญํฌ๋ณด๋‹ค ํฝ๋‹ˆ๋‹ค. LLM์œผ๋กœ ๋งŒ๋“  ๊ทธ๋ž˜ํ”„๋Š” ์ง„์งœ์ด๊ณ  ๊ฒฝ์Ÿ ์ตœ๊ณ  2-hop ์ ์ˆ˜์ง€๋งŒ, ์ƒ‰์ธ์—๋„ ์งˆ์˜์—๋„ LLM ๋น„์šฉ์„ ๋ƒ…๋‹ˆ๋‹ค. ยฒ ๋ฌด๋ฃŒ ํ‹ฐ์–ด ์ œํ•œ ํ•˜์˜ ์งˆ์˜๋‹น LLM ํ˜ธ์ถœ ํฌํ•จ, ์œ ๋ฃŒ๋ฉด 1~2์ดˆ. ยณ ํ”„๋กœ์„ธ์Šค ๊ธฐ๋™ ํฌํ•จ ์‹ค์ธก, ๊ทธ๋“ค์ด ๋‚ด์„ธ์šฐ๋Š” zero-API ๊ตฌ์„ฑ. โด ์งˆ์˜๋งˆ๋‹ค API ์ž„๋ฒ ๋”ฉ, ์บ์‹œ ์—†์Œ. ๋กœ์ปฌ ์ „์šฉ์ด๋ฉด ์•ฝ 2ms.

์—…๊ณ„ ํ‘œ์ค€ ๋ฉ”๋ชจ๋ฆฌ ๋ฒค์น˜๋งˆํฌ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. LongMemEval_S ์ „์ฒด 500๋ฌธํ•ญ, API ํ˜ธ์ถœ 0, ๋กœ์ปฌ ์ž„๋ฒ ๋”๋งŒ์œผ๋กœ:

LongMemEval ์ „์ฒด 500๋ฌธํ•ญ, API 0ํšŒ

๋‹ค๋“ค ํ—ค๋“œ๋ผ์ธ์— ์“ฐ๋Š” ๊ธฐ์ค€์œผ๋กœ Recall@5 0.983. ๊ทธ๋ฆฌ๊ณ  ๋” ์—„๊ฒฉํ•œ ์ „-์ฆ๊ฑฐ ๊ธฐ์ค€(0.904)์„ ์•ž์— ์„ธ์›๋‹ˆ๋‹ค. ์œ ๋ฆฌํ•œ ์ˆซ์ž๋งŒ ๊ณจ๋ผ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. LOCOMO LLM ์ฑ„์  0.706 vs mem0 ๊ณต๊ฐœ ์ˆ˜์น˜ 0.669, DMR(500๋ฌธํ•ญ) 0.694 vs ๊ฐ™์€ ์กฐ๊ฑด naive RAG 0.668์ž…๋‹ˆ๋‹ค (ยง7b).

๋กคํ”Œ๋ ˆ์ž‰ ๊ธฐ์–ต, ์บ๋ฆญํ„ฐ ์ฑ—์— ์ง„์งœ ํ•„์š”ํ•œ ์ถ•. ์ง์ ‘ ๋งŒ๋“ค์–ด ๊ณต๊ฐœํ•œ RoleMemQA(ยง7e): 8๋ช…์˜ ํŽ˜๋ฅด์†Œ๋‚˜ ร— 30์„ธ์…˜, ๋‹จ๊ธฐ/์žฅ๊ธฐ/ ์—ํ”ผ์†Œ๋“œ/์ทจํ–ฅ ๋ณ€๊ฒฝ/์‹œ๊ฐ„/2ํ™‰/๊ฑฐ์ ˆ๊นŒ์ง€ 144๋ฌธํ•ญ(์ •๋‹ต์€ ์ฝ”๋“œ๋กœ ๊ฒ€์ฆ). ํ‚ค ์—†์ด doc@1 0.977, ์ทจํ–ฅ์ด ๋ฐ”๋€ ์งˆ๋ฌธ 1.000์— ์˜› ์ทจํ–ฅ ํ•จ์ •์— ์†์€ ๋น„์œจ 0. ์ž๊ธฐ ๋ฒกํ„ฐ(0.938)ยทํ‚ค์›Œ๋“œ(0.820) ๊ฒฝ๋กœ๋ฅผ ๋ชจ๋‘ ์ด๊ธฐ๋ฉด์„œ ์•ฝ 1ms์ž…๋‹ˆ๋‹ค. ์ด ๋ฒค์น˜๊ฐ€ ์žก์•„๋‚ธ ์‹ค์ œ ๊ฒฐํ•จ 2๊ฐœ๋„ ๋ฐ”๋กœ ๊ณ ์ณค์Šต๋‹ˆ๋‹ค.

KorQuAD 1.0: ์‹ค์ œ ํ•œ๊ตญ์–ด ์œ„ํ‚คํ”ผ๋””์•„ 140๊ฐœ ๋ฌธ์„œ, ์‚ฌ๋žŒ์ด ์“ด ์งˆ๋ฌธ 400๊ฐœ, ํ‚ค ์—†์ด ๋กœ์ปฌ๋กœ:

System Recall@1 Recall@5 MRR@10
Lemory (hybrid+graph) 0.930 0.980 0.951
BM25 0.900 0.985 0.937
Vector-only RAG 0.840 0.953 0.887

์ด ํ‘œ๋Š” ์˜ค๋žซ๋™์•ˆ BM25๊ฐ€ ์ด๊ฒผ๊ณ , ์ €ํฌ๋Š” ๊ทธ๋™์•ˆ ๊ทธ ์‚ฌ์‹ค์„ ๊ทธ๋Œ€๋กœ ์‹ค์—ˆ์Šต๋‹ˆ๋‹ค. 2026๋…„ 7์›” ํ•œ๊ตญ์–ด ๊ฒ€์ƒ‰ ๊ฐœ์„ ์ด ๋งˆ์นจ๋‚ด ๋’ค์ง‘์—ˆ์Šต๋‹ˆ๋‹ค. 400๋ฌธํ•ญ ํ‘œ๋ณธ์€ ๋™์  ์ฒ˜๋ฆฌ์— ๋”ฐ๋ผ ยฑ2๋ฌธํ•ญ ํ”๋“ค๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ 10๋ฐฐ(4,000๋ฌธํ•ญ)๋กœ๋„ ์ธก์ •ํ–ˆ๊ณ , ํ˜„์žฌ ์ฝ”๋“œ๊ฐ€ r@1 0.9795๋กœ ์•ž์„ญ๋‹ˆ๋‹ค(BENCHMARKS ยง7e). ์˜› ํ‘œ๋Š” ๊นƒ ํžˆ์Šคํ† ๋ฆฌ์— ์žˆ๊ณ , ์‹ค์ „์—์„œ ์ค‘์š”ํ•œ ์ˆซ์ž๋Š” ์œ„์˜ ๊ฐ•๊ฑด์„ฑ ์ฐจํŠธ์ž…๋‹ˆ๋‹ค.

KorMapleQA ๋Š” ์ €ํฌ๊ฐ€ ๋งŒ๋“ค์–ด ๊ณต๊ฐœํ•˜๋Š” ๊ธฐ์—ฌ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ๋‚˜๋ฌด์œ„ํ‚ค ๋ฉ”์ดํ”Œ์Šคํ† ๋ฆฌ ๋ฌธ์„œ 1,469๊ฐœ ์œ„์˜ 2,075๋ฌธํ•ญ. 100% ์ฝ”๋“œ๋กœ ๋งŒ๋“ค๊ณ  ๊ธฐ๊ณ„๋กœ ๊ฒ€์ฆํ•ด์„œ API ํ‚ค ์—†์ด ์žฌํ˜„๋˜๊ณ , LLM์ด ์“ด ์งˆ๋ฌธ ํŠน์œ ์˜ ํŽธํ–ฅ์ด ์—†์Šต๋‹ˆ๋‹ค.

์ €ํฌ๊ฐ€ ๋งŒ๋“ค์ง€ ์•Š์€ ์‹ค์ œ ๋ณผํŠธ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ต์‹œ๋””์–ธ CEO Steph Ango์˜ ๊ณต๊ฐœ ๋ณผํŠธ์™€ ๊ณต์‹ Obsidian Help ๋ณผํŠธ์ž…๋‹ˆ๋‹ค (ยง5d).

ํ•œ๊ตญ์–ด๊ฐ€ 1๋“ฑ ์‹œ๋ฏผ์ž…๋‹ˆ๋‹ค

์ด ๋ถ„์•ผ ๋Œ€๋ถ€๋ถ„์€ ํ•œ๊ตญ์–ด๋ฅผ ๋‚˜์ค‘ ์ผ๋กœ ๋ฏธ๋ฃน๋‹ˆ๋‹ค. Lemory๋Š” ๋ฒค์น˜๋งˆํฌ๋กœ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

  • ํ•œ๊ธ€ + ๊ฐ€๋‚˜ + ํ•œ์ž ๋ฐ”์ด๊ทธ๋žจ ์ƒ‰์ธ: ์กฐ์‚ฌ๊ฐ€ ๋ถ™์€ ์–ด์ ˆ, ใƒŠใ‚คใƒˆใƒญใƒผใƒ‰๋‚˜์ดํŠธ๋กœ๋“œ ๊ฐ™์€ ํ˜ผํ•ฉ ํ‘œ๊ธฐ๊นŒ์ง€ ์ „๋ถ€ ์ฐพ์Šต๋‹ˆ๋‹ค. ๋ณดํ†ต์˜ ํ† ํฌ๋‚˜์ด์ €๋Š” ์ด๊ฒƒ์„ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ํ•œ ๋ฉ์–ด๋ฆฌ๋กœ ๋ถ™์—ฌ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.
  • ์Œ์ ˆ ๋‹จ์œ„ ์˜คํƒ€ ๊ต์ •: ๋ฉ”ํ”Œ์ด์Šคํ† ๋ฆฌ๋กœ ๋ฉ”์ดํ”Œ์Šคํ† ๋ฆฌ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ์˜† ๊ธ€์ž๋ผ๋ฆฌ ๋ฐ”๋€ ์˜คํƒ€๋ฅผ ํŽธ์ง‘ 1ํšŒ๋กœ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ํ•œ๊ตญ์–ด ์˜คํƒ€๊ฐ€ ์‹ค์ œ๋กœ ๋‚˜๋Š” ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • ํ™œ์šฉ์„ ์•„๋Š” ์ธ์šฉ ๊ฐ์ง€: ๋งŒ๋“ ์œผ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ์ž๋ชจ ์ˆ˜์ค€ ์–ด๊ฐ„ ๋งค์นญ์ด ํ™œ์šฉ, ใ„นํƒˆ๋ฝ, ๋„์–ด์“ฐ๊ธฐ ์ฐจ์ด๋ฅผ ๋ฒ„ํŒ๋‹ˆ๋‹ค.
  • ์˜์–ด ๋…ธํŠธ์— ํ•œ๊ตญ์–ด๋กœ ๋ฌผ์–ด๋„ 0.950. BM25๋Š” 0.250, MemPalace๋Š” 0.350์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๊ฒƒ์ด ๋ฉ๋‹ˆ๋‹ค

$ lemory ask "3๋ถ„๊ธฐ ํ‚ฅ์˜คํ”„์—์„œ ์˜ˆ์‚ฐ ์–ผ๋งˆ๋กœ ์žก์•˜์ง€?"                 # ํšŒ์˜๋ก
$ lemory ask "๋ฐ์ดํ„ฐํ”Œ๋žซํผํŒ€ ๋ฆฌ๋“œ๊ฐ€ ๋ˆ„๊ตฌ๊ณ  ๋ฌด์Šจ ์ผ ํ•˜๋Š” ํŒ€์ด์ง€?"      # ์กฐ์ง/์‚ฌ๋žŒ
$ lemory ask "์žฌํƒ๊ทผ๋ฌด ์ •์ฑ…, ์ž‘๋…„์ด๋ž‘ ์ง€๊ธˆ์ด๋ž‘ ๋ญ๊ฐ€ ๋‹ฌ๋ผ์กŒ์ง€?"        # ์‹œ๊ฐ„ ์ถ• ๋น„๊ต
$ lemory ask "์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ด๋ฒคํŠธ ๋ฃจํ”„ ๋ญ์˜€์ง€? ๋‚ด ๋…ธํŠธ ๊ธฐ์ค€์œผ๋กœ"      # ๊ณต๋ถ€ ๋…ธํŠธ
$ lemory ask "์นด์˜ค์Šค ๋ฒจ๋ฃธ ๊ฐ€๊ธฐ ์ „์— ์ค€๋น„๋ฌผ ๋ญ๋ผ๊ณ  ์ ์–ด๋†จ๋”๋ผ?"        # ๊ฒŒ์ž„ ๋…ธํŠธ
$ lemory ask "์˜ค์‚ฌ์นด์—์„œ ๊ฐ”๋˜ ๊ทธ ๋ผ๋ฉ˜์ง‘ ์ด๋ฆ„์ด ๋ญ์˜€์ง€?"              # ์—ฌํ–‰ ๊ธฐ๋ก

์ผ๋ฐ˜ RAG๊ฐ€ ๊ตฌ์กฐ์ ์œผ๋กœ ๋ชป ํ•˜๋Š” ๊ฒƒ๋“ค:

$ lemory ask "ํ”„๋กœ์ ํŠธ ์•„ํ‹€๋ผ์Šค ๋ฆฌ๋“œ๊ฐ€ ์ข‹์•„ํ•˜๋Š” DB๊ฐ€ ๋ญ๋”๋ผ?"
# ๋ฉ€ํ‹ฐํ™‰: ์•„ํ‹€๋ผ์Šค ๋…ธํŠธ โ†’ [[๋ฆฌ๋“œ]] ๋งํฌ โ†’ ๊ทธ ์‚ฌ๋žŒ ๋…ธํŠธ์— ๋‹ต์ด ์žˆ์Šต๋‹ˆ๋‹ค

$ lemory ask "์š”์ƒˆ ๋‚ด๊ฐ€ ์ฝ๋˜ ์ฑ… ๋ญ์˜€์ง€?"
์š”์ฆ˜ ์ฝ๋Š” ์ฑ…์€ ์–ด์Šค์‹œ์˜ ๋งˆ๋ฒ•์‚ฌ์ด๋‹ค [1, 3].     # ์‹œ๊ฐ„: *์ง€๊ธˆ* ์ฑ…
$ lemory ask "3์›”์— ์ฝ๋˜ ์ฑ…์€?"                # 3์›”์„ ๋ฌผ์œผ๋ฉด ๊ทธ๋•Œ ๊ธฐ๋ก์œผ๋กœ

$ lemory search "tag:ํšŒ์˜๋ก folder:2026 ์˜ˆ์‚ฐ"   # ๋ฒ”์œ„ ์—ฐ์‚ฐ์ž, ์ „ ๋ชจ๋“œ
$ lemory remember "VPN ๊ฐฑ์‹ ์€ ๋งค๋…„ 3์›”, ๋‹ด๋‹น ๊น€ํ•˜๋Š˜" --tags ops   # CLI์—์„œ ๊ธฐ์–ต ๋‚จ๊ธฐ๊ธฐ
$ lemory import-chats conversations.json        # ChatGPT/Claude ๋Œ€ํ™” โ†’ ๊ฒ€์ƒ‰๋˜๋Š” ๋…ธํŠธ
$ lemory connect ./my_source.py                 # ์ปค๋„ฅํ„ฐ SDK: ์–ด๋–ค ์†Œ์Šค๋“  โ†’ ๋ณผํŠธ ๋…ธํŠธ
$ lemory agents install                         # AGENTS.md ์ƒ์„ฑ, ์–ด๋–ค ์—์ด์ „ํŠธ๋“  ๋ณผํŠธ๋ฅผ ๊ธฐ์–ต์œผ๋กœ
$ lemory graph --open                           # ๋ณผํŠธ ์ „์ฒด๋ฅผ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๊ทธ๋ž˜ํ”„๋กœ
$ lemory context                                # ์—์ด์ „ํŠธ์šฉ ๋ณผํŠธ ์š”์•ฝ ํ•œ ๋ฒˆ์—

์˜คํƒ€๋Š” ๋‚ด ๋ณผํŠธ์˜ ๋‹จ์–ด๋“ค์„ ๊ธฐ์ค€์œผ๋กœ ๊ต์ •๋ฉ๋‹ˆ๋‹ค(API ์—†์Œ). ์ด๋ฆ„ ๋ณ€๊ฒฝ, ์‚ญ์ œ, ๋ณ„์นญ, ํ•œ๊ตญ์–ด ํŒŒ์ผ๋ช…๋„ ์›Œ์ฒ˜๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋”ฐ๋ผ๊ฐ‘๋‹ˆ๋‹ค. default_scope๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋ชจ๋“  ์งˆ๋ฌธ์ด ๊ธฐ๋ณธ์œผ๋กœ ๊ทธ ํด๋”/ํƒœ๊ทธ ์•ˆ์—์„œ ๋Œ๊ณ (scope:all๋กœ ํ•œ ๋ฒˆ๋งŒ ํ•ด์ œ), ์งˆ๋ฌธ์— ์—ฐ์‚ฐ์ž๋ฅผ ์ง์ ‘ ์“ฐ๋ฉด ๊ทธ๊ฒƒ์ด ํ•ญ์ƒ ์šฐ์„ ์ž…๋‹ˆ๋‹ค.

์™œ ์ž˜ ๋˜๋Š”๊ฐ€: ๋งˆ๋ฒ•์ด ์•„๋‹ˆ๋ผ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค

  • ๋ฉ€ํ‹ฐํ™‰ 1.000 vs 0.53~0.81 (์ „์›): ๊ฒ€์ƒ‰์ด ๋งํฌ๋ฅผ ๋”ฐ๋ผ 1ํ™‰ ํ™•์žฅํ•˜๋Š”๋ฐ, ์งˆ์˜ ์œ ์‚ฌ๋„์™€ ํ‚ค์›Œ๋“œ ์ฆ๊ฑฐ ๋‘˜ ๋‹ค ํ™•์ธํ•˜๊ณ , ์ง์ ‘ ์ฆ๊ฑฐ๋ณด๋‹ค ๋†’์•„์ง€์ง€ ์•Š๊ฒŒ ๋ˆŒ๋Ÿฌ๋‘ก๋‹ˆ๋‹ค. ์ƒ‰์ธํ•  ๋•Œ LLM ์—†์ด ๋ฏธ๋ฆฌ ์บ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ•๊ฑด์„ฑ 0.95+ vs 0.25~0.67: ๋ฒกํ„ฐ์™€ ํ‚ค์›Œ๋“œ๋Š” ๋‹ค๋ฅด๊ฒŒ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ค‘ ์œตํ•ฉ์ด ๋‘˜์„ ๋ฎ์Šต๋‹ˆ๋‹ค. ์งˆ๋ฌธ์ด ๋…ธํŠธ๋ฅผ ๊ฑฐ์˜ ๊ทธ๋Œ€๋กœ ์ธ์šฉํ•˜๋ฉด ํ‚ค์›Œ๋“œ ์ˆœ์œ„๋ฅผ ๊ทธ๋Œ€๋กœ ๊ณ ์ •ํ•ฉ๋‹ˆ๋‹ค(ํ•€). ์ˆœ์œ„๋งŒ ์„ž๋Š” ์œตํ•ฉ์€ ํ™•์‹คํ•œ ํ‚ค์›Œ๋“œ ์šฐ์œ„๋ฅผ ์กด์ค‘ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • ์ดˆ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฐ€๋ฆฌ์ดˆ: ์ „๋ถ€ ํ•œ ํ”„๋กœ์„ธ์Šค, SQLite FTS5 + numpy. ์ฒญํฌ 2๋งŒ ๊ฐœ๋ฅผ ๋„˜์œผ๋ฉด IVF-int8 ์ธ๋ฑ์Šค๋กœ ์ž๋™ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ฒญํฌ 100๋งŒ ๊ฐœ์—์„œ 5.9ms/์งˆ์˜, ์ •ํ™• ๊ฒ€์ƒ‰ ๋Œ€๋น„ recall 1.000, RAM 732MB (ยง12b). SQLite๋ฅผ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ๋Š” ์‹คํ—˜๋„ ํ–ˆ๊ณ  ์™œ ์•ˆ ๋ฐ”๊ฟจ๋Š”์ง€ ๊ณต๊ฐœํ–ˆ์Šต๋‹ˆ๋‹ค (๋ณด๊ณ ์„œ).
  • ๋น„์šฉ์€ 0์— ์ˆ˜๋ ดํ•ฉ๋‹ˆ๋‹ค. ์ž„๋ฒ ๋”ฉ ์บ์‹œ, Gemini ๋ฌด๋ฃŒ ํ‹ฐ์–ด๋กœ ํ•˜๋ฃจ ์•ฝ 250์งˆ๋ฌธ, ๊ทธ๋ฆฌ๊ณ  ๋ฐ”์ดํŠธ ํ•˜๋‚˜ ๋ชป ๋‚˜๊ฐ€๋Š” ๋ง๋ถ„๋ฆฌ ํ™˜๊ฒฝ์„ ์œ„ํ•œ ์™„์ „ ์˜จ๋””๋ฐ”์ด์Šค ๋ชจ๋“œ๊นŒ์ง€ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๋ผ๋ฉด

import lemory
lemory.configure(vault="~/Obsidian/MyVault")
lemory.index()
print(lemory.ask("๊ฐ€๊ฒฉ ์ •์ฑ… ๋ญ๋ผ๊ณ  ๊ฒฐ์ •ํ–ˆ๋”๋ผ?").text)

TypeScript/Node๋Š” ์˜์กด์„ฑ 0์ธ ํด๋ผ์ด์–ธํŠธ๊ฐ€ clients/js์— ์žˆ์Šต๋‹ˆ๋‹ค: new Lemory({client: "my-agent"}).search(...).

ํŒŒ์ด์ฌ ํ”„๋ ˆ์ž„์›Œํฌ์—๋Š” ๊ทธ๋Œ€๋กœ ๋ผ์›Œ ๋„ฃ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค(๋‘˜ ๋‹ค ์‹ค์ œ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค):

from lemory.integrations.langchain import LemoryRetriever     # langchain-core
from lemory.integrations.llamaindex import LemoryLlamaRetriever  # llama-index-core

์…€ํ”„ํ˜ธ์ŠคํŒ…: docker build -t lemory . && docker run -p 127.0.0.1:8377:8377 -v ~/vault:/vault lemory. ๋ญ”๊ฐ€ ์ด์ƒํ•˜๋ฉด lemory doctor๊ฐ€ ๋ณผํŠธ, ์ธ๋ฑ์Šค, FTS5, ์ž„๋ฒ ๋”, ์ƒ์„ฑ๊ธฐ๋ฅผ ํ•œ ๋ฒˆ์— ์ ๊ฒ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ถœ๋ ฅ์„ ์ด์Šˆ์— ๋ถ™์—ฌ์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Cerebras์˜ ์‚ฌ๋‚ด ์ง€์‹๋ฒ ์ด์Šค ๊ธ€์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒƒ๋„ ์ถœ์ฒ˜๋ฅผ ๋ฐํž™๋‹ˆ๋‹ค. ๋žญํ‚น ํ›„ ์ด์›ƒ ๋ณต์›: ์ˆœ์œ„๊ฐ€ ์ •ํ•ด์ง„ ๋’ค ๊ฐ ์ฒญํฌ์— ์•ž๋’ค ๋ฌธ๋งฅ์„ ๋‹ค์‹œ ๋ถ™์—ฌ, ์ž˜๋ ค๋‚˜๊ฐ„ ์ „์ œ์™€ ์ฃผ์˜์‚ฌํ•ญ์„ ๋˜์‚ด๋ฆฝ๋‹ˆ๋‹ค (context_neighbors). ๋Œ€ํ™” ๋ฒ„์ŠคํŠธ ์ฒญํ‚น: ๊ฐ™์€ ํ™”์ž์˜ ์—ฐ์† ๋ฐœํ™” ์ค‘ ์•Œ๋งน์ด ์žˆ๋Š” ๊ฒƒ๋งŒ ๊ณจ๋ผ ๋”ฐ๋กœ ์ƒ‰์ธํ•˜๋˜, ์œตํ•ฉ์—์„œ๋Š” ์ž๊ธฐ ๋…ธํŠธ์˜ ์ˆœ์œ„๋ฅผ ์˜ฌ๋ฆฌ๋Š” ์—ญํ• ๋งŒ ํ•ฉ๋‹ˆ๋‹ค(์‹ค์ธก ๋‚ด์—ญ ์ „์ฒด๊ฐ€ ยง7e์— ์žˆ์Šต๋‹ˆ๋‹ค). ๊ทธ๋“ค์˜ ๋‚˜๋จธ์ง€ ํ•ต์‹ฌ ์„ค๊ณ„๋Š” Lemory๊ฐ€ ์ด๋ฏธ ๋งŒ๋“ค์–ด ์ธก์ •ํ•œ ๊ฒƒ๋“ค์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฉ์ฐจ ๋ถ„์„์œผ๋กœ ์ถ”๊ฐ€๋œ ๊ฒƒ๋“ค: lemory ask --deep(์–ด๋ ค์šด ์งˆ๋ฌธ์„ ์ชผ๊ฐœ์„œ ๊ฐ๊ฐ ๊ฒ€์ƒ‰ ํ›„ ์ฆ๊ฑฐ ๋ณ‘ํ•ฉ), lemory backup/restore, index_docx = true(Word ํ…์ŠคํŠธ ์ถ”์ถœ), lemory connect(์ปค๋„ฅํ„ฐ SDK), default_scope(๊ธฐ๋ณธ ๊ฒ€์ƒ‰ ๋ฒ”์œ„), ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋ฐ”์ผ: lemory serve --host 0.0.0.0 + api_token์ด๋ฉด ํฐ์—์„œ๋„ ํ† ํฐ ์ธ์ฆ์œผ๋กœ ๋ถ™๊ณ , localhost๋Š” ๊ทธ๋Œ€๋กœ ๋ฌด์„ค์ •์ž…๋‹ˆ๋‹ค.

์‹คํŒจํ•œ ์‹คํ—˜๋„ ์ •์ฑ…๋Œ€๋กœ ๊ณต๊ฐœํ•ฉ๋‹ˆ๋‹ค. ์‹œ๋งจํ‹ฑ ํด๋ฐฑ ๋งํฌ(๋งํฌ ์—†๋Š” ๋…ธํŠธ์— ์œ ์‚ฌ๋„ ๊ฐ„์„ )๋Š” ๋งŒ๋“ค์—ˆ๊ณ , ์ธก์ •ํ–ˆ๊ณ , ํšจ๊ณผ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ด ํ™•์ธ๋ผ ๊ธฐ๋ณธ์œผ๋กœ ๊บผ๋’€์Šต๋‹ˆ๋‹ค. ๋ฆฌ๋žญ์ปค์˜ ์‹œ๊ฐ„ ๋ณด์ •๋„ ์‹ค์ œ ๋ชจ๋ธ๋กœ 3ํŒ” ๋น„๊ต(๋” 0.978 / ์ผฌ 0.889 / ์ผฌ+๋ณด์ • 0.867)ํ•œ ๋’ค ๋˜๋Œ๋ ธ์Šต๋‹ˆ๋‹ค. ์ด๋“๋งŒ ๋‚จ๊ธฐ๊ณ  ์‹คํŒจ๋Š” ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

REST๋Š” lemory serve์—: GET /search ยท POST /ask ยท GET /context ยท POST /memory ยท POST /append ยท POST /memory/trash ยท POST /index ยท GET /status, ๋Œ€์‹œ๋ณด๋“œ API(/api/events, /api/clients, /api/notes, /api/related, ...)๋„ ์žˆ์Šต๋‹ˆ๋‹ค. X-Lemory-Client ํ—ค๋”๋กœ ์ •์ฒด๋ฅผ ๋ฐํžˆ๋ฉด ๋Œ€์‹œ๋ณด๋“œ์— ์ถœ์ฒ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์˜ต์‹œ๋””์–ธ ์‚ฌ์ด๋“œ๋ฐ” ํ”Œ๋Ÿฌ๊ทธ์ธ(ํŒŒ์ผ 3๊ฐœ ๋ณต์‚ฌ๋ฉด ์„ค์น˜ ๋), PDF ์ƒ‰์ธ (pip install 'lemory[pdf]', index_pdf = true), ๊ฒ€์ƒ‰ ์˜ต์…˜ ์ „์ฒด๋Š” lemory.toml, ๊นŠ์€ ์ด์•ผ๊ธฐ๋Š” BENCHMARKS.md ยท docs/STORAGE.md ยท docs/COMPETITIVE.md์— ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”๊ฐ€

 ๋‚ด ๋ณผํŠธ (*.md) โ”€โ”€๊ฐ์‹œโ”€โ”€โ–บ ํŒŒ์‹ฑ: frontmatter ยท ํƒœ๊ทธ ยท [[๋งํฌ]] ยท ๋‚ ์งœ
                                 โ”‚
                                 โ–ผ
              SQLite ํŒŒ์ผ ํ•˜๋‚˜: ์ฒญํฌ ยท BM25 ยท ๋งํฌ ๊ทธ๋ž˜ํ”„ ยท ์ž„๋ฒ ๋”ฉ ์บ์‹œ
                              + ์ด๋ฒคํŠธ ํƒ€์ž„๋ผ์ธ      + IVF-int8 (ํฐ ๋ณผํŠธ)
                                 โ”‚
 ์งˆ๋ฌธ โ”€โ–บ ์˜คํƒ€ ๊ต์ • โ”€โ–บ ๋ฒกํ„ฐ + ํ‚ค์›Œ๋“œ (์œตํ•ฉ) โ”€โ–บ ์ œ๋ชฉยท์ตœ์‹ ์„ฑ ๋ถ€์ŠคํŠธ
                                 โ”‚
                        1ํ™‰ ๊ทธ๋ž˜ํ”„ ํ™•์žฅ   โ† ๋ฉ€ํ‹ฐํ™‰ ๋‹ต์ด ์—ฌ๊ธฐ์„œ ๋‚˜์˜ต๋‹ˆ๋‹ค
                                 โ”‚
                                 โ–ผ
              ๋‚ ์งœ์™€ ์ถœ์ฒ˜๊ฐ€ ๋ถ™์€ ์ปจํ…์ŠคํŠธ โ”€โ–บ LLM โ”€โ–บ ๋‹ต๋ณ€ [n]

 save_memory โ”€โ–บ ์ค‘๋ณต ๊ฒ€์‚ฌ โ”€โ–บ ๋ณผํŠธ ์•ˆ์˜ .md โ”€โ–บ ๋‹ค์Œ ์งˆ๋ฌธ๋ถ€ํ„ฐ ๊ฒ€์ƒ‰๋ฉ๋‹ˆ๋‹ค

๊ฒ€์ƒ‰์€ ๋กœ์ปฌ์ด๊ณ  LLM์ด ์—†์Šต๋‹ˆ๋‹ค(3~13ms). ์งˆ๋ฌธ๋‹น ์ž„๋ฒ ๋”ฉ 1ํšŒ(์บ์‹œ๋จ), ask()๋‹น ์ƒ์„ฑ 1ํšŒ์ž…๋‹ˆ๋‹ค.

์ •์งํ•˜๊ฒŒ ๋งํ•˜๋ฉด

  • ๋ฌธ์„œ๋ฅผ ๊ทธ๋Œ€๋กœ ์ธ์šฉํ•˜๋Š” ์งˆ๋ฌธ์€ ์˜ค๋žซ๋™์•ˆ ์ˆœ์ˆ˜ BM25๊ฐ€ ์œ ๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €ํฌ๋Š” ๊ทธ๊ฒƒ์ด ์‚ฌ์‹ค์ธ ๋™์•ˆ ๊ทธ๋Œ€๋กœ ์‹ค์—ˆ์Šต๋‹ˆ๋‹ค. 2026๋…„ 7์›”์— ๋’ค์ง‘ํ˜”๊ณ , ์˜› ์ˆ˜์น˜๋Š” ๊นƒ ํžˆ์Šคํ† ๋ฆฌ์— ์žˆ์Šต๋‹ˆ๋‹ค.
  • qmd์˜ ๊ฐ„ํŒ ๋ชจ๋“œ์—์„œ๋„ ์ด์ œ ํ’ˆ์งˆ๊นŒ์ง€ ์•ž์„ญ๋‹ˆ๋‹ค(๋™์ผ ๋ฌธํ•ญ 0.875 vs 0.769). ์˜ˆ์ „ ์ž„๋ฒ ๋”๋กœ๋Š” ๋™๋ฅ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์•ฝ 3,700๋ฐฐ์˜ ์†๋„ ์ฐจ์ด๋Š” ์›๋ž˜๋ถ€ํ„ฐ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • kepano์˜ ์ž‘์€ ์˜์–ด ๋ณผํŠธ์—์„œ๋Š” ๋ฒกํ„ฐ ๋‹จ๋…์ด ํ•œ ๋ฌธ์ œ ์ฐจ๋กœ ์ €ํฌ๋ฅผ ์ด๊น๋‹ˆ๋‹ค. BENCHMARKS์— ๊ทธ๋ ‡๊ฒŒ ์ ํ˜€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฒญํฌ 4๋งŒ 2์ฒœ ๊ฐœ ์ฝ”ํผ์Šค์˜ 2-hop full-support๋Š” ์ธก์ •ํ•œ ์ „์›์—๊ฒŒ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ €ํฌ ๋กœ์ปฌ ์ˆ˜์น˜๋Š” 0.477๋กœ ์˜ฌ๋ผ์™”์ง€๋งŒ, ์ƒ์‹œ ๋„์ „ ๊ณผ์ œ๋กœ ๋‚จ๊ฒจ๋’€์Šต๋‹ˆ๋‹ค.
  • ํƒ€ ํŒ€์˜ ๊ณต๊ฐœ ์ˆ˜์น˜๋Š” ๋‹ค๋ฅธ ์ƒ์„ฑ๊ธฐ/์ฑ„์  ๊ธฐ์ค€์ด๋ผ ์ฐธ๊ณ ๋กœ๋งŒ ์ธ์šฉํ•ฉ๋‹ˆ๋‹ค. Zep์˜ DMR 94.8์€ GPT-4๊ธ‰ ๊ตฌ์„ฑ์ด๊ณ , ์ด๊ฒผ๋‹ค๊ณ  ๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • SQLite๋ฅผ ๋ฐ”๊พธ๋Š” ์‹คํ—˜(DuckDB, LanceDB)์—์„œ LanceDB์˜ ํ…์ŠคํŠธ ๊ฒ€์ƒ‰์ด ์ตœ์•… ์ผ€์ด์Šค์—์„œ ์‹ค์ œ๋กœ 5๋ฐฐ ๋นจ๋ž์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ๊ณต๊ฐœํ•˜๊ณ ๋„ SQLite์— ๋‚จ์Šต๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€ ๋„ค ํ•ญ๋ชฉ์€ SQLite๊ฐ€ ์ด๊น๋‹ˆ๋‹ค (์ „์ฒด ๋ณด๊ณ ์„œ).
  • ๋ฒ„์ŠคํŠธ ์ฒญํ‚น์˜ ํ›„ํ‡ด๋„ ๊ธฐ๋ก์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊นจ๋—ํ•œ ๋…ธํŠธ 1๋ฌธํ•ญ, ๋ฒˆ๋ณต ํ•จ์ • 1๋ฌธํ•ญ์ž…๋‹ˆ๋‹ค. ๊ณ ์น˜๋ ค๋˜ ํŒจ์น˜๊ฐ€ ๋‹ค๋ฅธ ํ•จ์ •์„ ๋ฌด๋„ˆ๋œจ๋ ค์„œ ์ ‘์—ˆ๊ณ , ์ด๋“๊ณผ ํ›„ํ‡ด๋ฅผ ํ•จ๊ป˜ ๊ณต๊ฐœํ–ˆ์Šต๋‹ˆ๋‹ค (ยง7e).

๋กœ๋“œ๋งต

  • PyPI (pip install lemory) ยท [ ] ์˜ต์‹œ๋””์–ธ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋“ฑ๋ก
  • AI ์“ฐ๊ธฐ ๊ฒฝ๋กœ + ๋˜๋Œ๋ฆฌ๊ธฐ ์žˆ๋Š” ํƒ€์ž„๋ผ์ธ ยท [x] ํด๋ผ์ด์–ธํŠธ ์ถœ์ฒ˜ ํ‘œ์‹œ
  • ๊ธฐ์–ต ์ •๋ฆฌ (์ค‘๋ณต ํ‘œ์‹œ + ๊ด€๋ จ ๋งํฌ)
  • ๋งํฌ ์ œ์•ˆ ยท [x] ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๊ทธ๋ž˜ํ”„ ยท [x] ์–ด์‹œ์Šคํ„ดํŠธ ์Šคํ‚ฌ
  • PDF ์ƒ‰์ธ ยท [x] 100๋งŒ ์ฒญํฌ ๋ณผํŠธ์šฉ ANN ์ธ๋ฑ์Šค
  • ์ฑ„ํŒ… ๊ฐ€์ ธ์˜ค๊ธฐ (ChatGPT/Claude) ยท [x] KorMapleQA ๋ฒค์น˜๋งˆํฌ
  • ์ปค๋„ฅํ„ฐ SDK (lemory connect) ยท [x] ๊ธฐ๋ณธ ๊ฒ€์ƒ‰ ๋ฒ”์œ„ (default_scope)
  • ์—์ด์ „ํŠธ ์˜จ๋ณด๋”ฉ (lemory agents: AGENTS.md + ๊ฐ์ง€) ยท [x] AI ์“ฐ๊ธฐ git ์ฒดํฌํฌ์ธํŠธ
  • ์ด๋ฏธ์ง€ OCR / ์˜ค๋””์˜ค ์ „์‚ฌ ยท [ ] ์›น ํด๋ฆฌํผ
  • ๋ฉ€ํ‹ฐ ๋ณผํŠธ ํ”„๋กœํ•„

ํ•จ๊ป˜ ๋งŒ๋“ญ๋‹ˆ๋‹ค

uv venv && uv pip install -e ".[dev,mcp,local,pdf]" && pytest ํ•œ ์ค„์ด๋ฉด ํ…Œ์ŠคํŠธ 500์—ฌ ๊ฐœ๊ฐ€ ์™„์ „ ์˜คํ”„๋ผ์ธ์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. CONTRIBUTING.md ยท ํ•œ๊ตญ์–ด ์ด์Šˆ/PR ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

์ฒ˜์Œ๋ถ€ํ„ฐ ๋กœ์ปฌ ์šฐ์„ ์œผ๋กœ ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ ๋ขฐ ๋ชจ๋ธ, ๋กœ์ปฌ ์„œ๋ฒ„์˜ ๋ณด์•ˆ ์žฅ์น˜, ์ทจ์•ฝ์  ์‹ ๊ณ  ๋ฐฉ๋ฒ•์€ SECURITY.md์— ์žˆ์Šต๋‹ˆ๋‹ค.

English README ยท MIT

About

๐Ÿ‹ Local-first memory middleware for your Markdown โ€” turn your Obsidian vault into memory for any AI (MCP), with Korean-first hybrid retrieval, keyless on-device search, and an interactive knowledge graph.

Topics

Resources

Contributing

Security policy

Stars

11 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages