From 2db6a2964086ffb15601557bb818c130bbbde71b Mon Sep 17 00:00:00 2001 From: happybell80 Date: Tue, 17 Mar 2026 03:20:48 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20312=20=EC=B6=9C=EC=B2=98=20=ED=91=9C?= =?UTF-8?q?=EA=B8=B0=20=EB=B0=A9=EB=B2=95=20=EC=84=B9=EC=85=98=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80,=20journey=20=EB=AC=B8=EC=84=9C=20=EB=8F=99=EA=B8=B0?= =?UTF-8?q?=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- .../312_writing-principles.md | 9 ++ journey/README.md | 9 ++ ...ผ_์ปจํ…์ŠคํŠธ_compaction_์•„์ด๋””์–ด.md | 55 +++++++++ .../260317_skill_intent_analysis_plan.md | 8 +- ...enClaw_์ปจํ…์ŠคํŠธ_๋ฉ”๋ชจ๋ฆฌ_๋ฆฌ์„œ์น˜.md | 116 ++++++++++++++++++ ...˜๋ฆฌ์˜ค50_ํ†ต๊ณผ_๋ฐ_Phase4_stats_check.md | 47 +++++++ 6 files changed, 240 insertions(+), 4 deletions(-) create mode 100644 journey/ideas/260317_OpenClaw_์Šคํƒ€์ผ_์ปจํ…์ŠคํŠธ_compaction_์•„์ด๋””์–ด.md create mode 100644 journey/research/260317_OpenClaw_์ปจํ…์ŠคํŠธ_๋ฉ”๋ชจ๋ฆฌ_๋ฆฌ์„œ์น˜.md create mode 100644 journey/worklog/260317_skill_intent_์‹œ๋‚˜๋ฆฌ์˜ค50_ํ†ต๊ณผ_๋ฐ_Phase4_stats_check.md diff --git a/book/300_architecture/312_writing-principles.md b/book/300_architecture/312_writing-principles.md index 6a295d3..26c1c29 100644 --- a/book/300_architecture/312_writing-principles.md +++ b/book/300_architecture/312_writing-principles.md @@ -170,6 +170,15 @@ - ๊ฐ™์€ ๋ชฉ์ ์˜ ์ƒ์œ„ ๋ฌธ์„œ๊ฐ€ ์žˆ์œผ๋ฉด ๋ฌธ์„œ ์ƒ๋‹จ์— `์ƒ์œ„ ์›์น™` ๋งํฌ๋ฅผ ๋‘ก๋‹ˆ๋‹ค. - ๋™์ผ ๋ชฉ์  ๋ฌธ์„œ๋Š” ํŒŒ์ผ๋ช…์„ ์ƒ์œ„ SSOT basename์— ๋งž์ถฅ๋‹ˆ๋‹ค. +### ์ถœ์ฒ˜ ํ‘œ๊ธฐ ๋ฐฉ๋ฒ• + +- ์ถœ์ฒ˜๋Š” **์š”์•ฝ๋ฌธ์— ํ•˜์ดํผ๋งํฌ๋ฅผ ๊ฑฐ๋Š” ํ˜•์‹**์œผ๋กœ ํ‘œ๊ธฐํ•ฉ๋‹ˆ๋‹ค. +- ํ˜•์‹: `[์š”์•ฝ๋ฌธ](URL)` โ€” ์š”์•ฝ๋ฌธ์„ ํด๋ฆญํ•˜๋ฉด ํ•ด๋‹น URL๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. +- ์˜ˆ์‹œ: + - `[Pardon? ๊ฐ™์€ ์˜์–ด ํ‘œํ˜„ ์†Œ๊ฐœ(์Šคํ”ผํ‚น์ŠคํŠœ๋””์˜ค)](https://www.instagram.com/p/DSGp0eRjjmD/)` + - `[์˜์–ด ํ‘œํ˜„ 12๊ฐœ๋ฅผ ๋ฐฐ์šฐ๋Š” ํšŒํ™” ์˜์ƒ](https://www.youtube.com/watch?v=QneqFpTsQzo)` + - `[์ง์žฅ์ธ์˜์–ดํšŒํ™” '๋‹ค์‹œ ํ•œ๋ฒˆ ๋ง์”€ํ•ด ์ฃผ์‹œ๊ฒ ์–ด์š”?'(๋˜๋ฌป๊ธฐ pardon)](https://m.blog.naver.com/yanadooblog/221588091601)` + ### ๊ตฌ์กฐํ™”๋œ ์ •๋ณด ํ˜•์‹ (AI/์‚ฌ๋žŒ ๋ชจ๋‘ ์ฝ๊ธฐ ์ข‹๊ฒŒ) **๊ถŒ์žฅ ํ˜•์‹**: diff --git a/journey/README.md b/journey/README.md index bd1ce94..8315d4b 100644 --- a/journey/README.md +++ b/journey/README.md @@ -67,6 +67,11 @@ - workspace-team-project ๊ณ„์ธต ์žฌ์ •์˜ ์•„์ด๋””์–ด โ€“ `ideas/260316_workspace_team_project_๊ณ„์ธต_์žฌ์ •์˜_์•„์ด๋””์–ด.md` - workspace-team-project ๊ณ„์ธต ์žฌ์ •์˜ ์ „ํ™˜๊ณ„ํš โ€“ `plans/260316_workspace_team_project_๊ณ„์ธต_์žฌ์ •์˜_์ „ํ™˜๊ณ„ํš.md` +### ์ปจํ…์ŠคํŠธ / ๋ฉ”๋ชจ๋ฆฌ (OpenClaw ๋ฒค์น˜๋งˆํ‚น) + +- OpenClaw ์Šคํƒ€์ผ ์ปจํ…์ŠคํŠธยทcompaction ์•„์ด๋””์–ด โ€“ `ideas/260317_OpenClaw_์Šคํƒ€์ผ_์ปจํ…์ŠคํŠธ_compaction_์•„์ด๋””์–ด.md` +- OpenClaw ์ปจํ…์ŠคํŠธยท๋ฉ”๋ชจ๋ฆฌ ๋ฆฌ์„œ์น˜ โ€“ `research/260317_OpenClaw_์ปจํ…์ŠคํŠธ_๋ฉ”๋ชจ๋ฆฌ_๋ฆฌ์„œ์น˜.md` + ### Intent ๋ฆฌ๋ทฐ / ์˜๋„ ํ•™์Šต - Intent ๋ฆฌ๋ทฐ ํ ์„ค๊ณ„ ๋ฐ API ๊ณ„ํš โ€“ `../300_architecture/390_human_in_the_loop_intent_learning.md` @@ -92,6 +97,10 @@ - Pydantic AI ๋„์ž… ๊ธฐ๋ฐ˜ LLM ์ถœ๋ ฅ ์•ˆ์ •ํ™” ๋ฐฉํ–ฅํ™•์ • ๋ฆฌ์„œ์น˜ โ€“ `research/260313_pydantic_ai_๋„์ž…_๊ธฐ๋ฐ˜_llm_์ถœ๋ ฅ_์•ˆ์ •ํ™”_๋ฐฉํ–ฅํ™•์ •_๋ฆฌ์„œ์น˜.md` - ๋ชจ๋ธ SSOT ํ•˜๋“œ์ฝ”๋”ฉ ๋ถ„์‚ฐ๊ณผ workspace-config ๋กœ์ปฌ ์ด์‹ ํ†ตํ•ฉ ๋ฆฌ์„œ์น˜ โ€“ `research/260315_๋ชจ๋ธSSOT_ํ•˜๋“œ์ฝ”๋”ฉ_๋ถ„์‚ฐ๊ณผ_workspace_config_๋กœ์ปฌ์ด์‹_ํ†ตํ•ฉ๋ฆฌ์„œ์น˜.md` +### ์ปจํ…์ŠคํŠธ / ๋ฉ”๋ชจ๋ฆฌ + +- OpenClaw ์ปจํ…์ŠคํŠธยท๋ฉ”๋ชจ๋ฆฌ ๋ฆฌ์„œ์น˜ โ€“ `research/260317_OpenClaw_์ปจํ…์ŠคํŠธ_๋ฉ”๋ชจ๋ฆฌ_๋ฆฌ์„œ์น˜.md` + ### HITL / ๋ฆฌ๋ทฐ ํ - Human-in-the-Loop Intent Learning ์•„ํ‚คํ…์ฒ˜ โ€“ `../300_architecture/390_human_in_the_loop_intent_learning.md` diff --git a/journey/ideas/260317_OpenClaw_์Šคํƒ€์ผ_์ปจํ…์ŠคํŠธ_compaction_์•„์ด๋””์–ด.md b/journey/ideas/260317_OpenClaw_์Šคํƒ€์ผ_์ปจํ…์ŠคํŠธ_compaction_์•„์ด๋””์–ด.md new file mode 100644 index 0000000..e17e929 --- /dev/null +++ b/journey/ideas/260317_OpenClaw_์Šคํƒ€์ผ_์ปจํ…์ŠคํŠธ_compaction_์•„์ด๋””์–ด.md @@ -0,0 +1,55 @@ +--- +tags: [ideas, context, memory, compaction, OpenClaw, recent_conversations] +--- + +# OpenClaw ์Šคํƒ€์ผ ์ปจํ…์ŠคํŠธยทcompaction ์•„์ด๋””์–ด + +**์ž‘์„ฑ์ผ**: 2026-03-17 + +## ์ƒ์œ„ ์›์น™ + +- [writing-principles](../../../../0_VALUE/02_Governance/writing-principles.md) +- [global-principles](../../../../0_VALUE/00_Principles/global-principles.md) + +## ๋ฌธ์ œ ์ธ์‹ + +- ๋กœ๋น™์€ `recent_conversations`๋ฅผ DB์—์„œ **์ตœ๊ทผ 300๊ฐœ(24์‹œ๊ฐ„)** raw ๊ทธ๋Œ€๋กœ ๋กœ๋“œํ•ด context์— ๋„ฃ์Œ. +- ํ† ํฐ ์ œํ•œยทํ’ˆ์งˆ ๊ด€๋ฆฌ ์—†์ด ์ „๋‹ฌ โ†’ "๊ทธ๋ž˜", "๋ฌด์Šจ ๋ง์ด์•ผ?" ๊ฐ™์€ ์งง์€ ๋ฐœํ™”๊ฐ€ ์ง์ „ ๋Œ€ํ™”์™€ ๊ฒฐํ•ฉ๋˜์–ด ์˜ค๋ถ„๋ฅ˜๋  ์ˆ˜ ์žˆ์Œ. +- 300๊ฐœ raw๋Š” LLM context window๋ฅผ ์‰ฝ๊ฒŒ ์ดˆ๊ณผํ•˜๊ณ , ์ค‘์š”ํ•œ ๋งฅ๋ฝ์ด ๋ฌปํž ์ˆ˜ ์žˆ์Œ. + +## ์•„์ด๋””์–ด (OpenClaw ๋ฒค์น˜๋งˆํ‚น) โ€” ์ถ”์  ๋ฐฉํ–ฅ + +**์ด ๋ฐฉ์‹์œผ๋กœ ๋”ฐ๋ผ๊ฐ„๋‹ค.** OpenClaw ๋ฐฉ์‹์„ ์ฐธ๊ณ ํ•˜์—ฌ ๋‹ค์Œ ๋ฐฉํ–ฅ์„ ๋”ฐ๋ฅธ๋‹ค. + +1. **Short-term (์„ธ์…˜ ๋Œ€ํ™”)**: ํ† ํฐ ํ•œ๋„ ์ดˆ๊ณผ ์‹œ ์ด์ „ ๋Œ€ํ™”๋ฅผ **์š”์•ฝ**ํ•ด ํ•œ ๋ธ”๋ก์œผ๋กœ ์••์ถ•(compaction). raw N๊ฐœ ๊ทธ๋Œ€๋กœ๊ฐ€ ์•„๋‹˜. +2. **Medium-term (์ผ๋ณ„ ๋กœ๊ทธ)**: ๋Œ€ํ™” ์ข…๋ฃŒ ์‹œ `session-memory` ํ›…์œผ๋กœ **์š”์•ฝ**์„ ์ƒ์„ฑํ•ด ๋‚ ์งœ๋ณ„ daily log์— append. DB ๋Œ€์‹  ๋˜๋Š” DB์™€ ๋ณ‘ํ–‰. +3. **Long-term (MEMORY.md)**: ์‚ฌ์šฉ์žยท๋กœ๋น™์ด ์œ ์ง€ํ•˜๋Š” ์˜๊ตฌ ๋ฉ”๋ชจ๋ฆฌ. ๋งค ๋Œ€ํ™” ์‹œ์ž‘ ์‹œ ๋กœ๋“œ. + +## ๊ธฐ๋Œ€ ํšจ๊ณผ + +- ํ† ํฐ ์˜ˆ์ธก ๊ฐ€๋Šฅ, ์˜ค๋ถ„๋ฅ˜ ๊ฐ์†Œ(๋งฅ๋ฝ ํ’ˆ์งˆ ํ–ฅ์ƒ). +- "๊ทธ๋ž˜", "๋ฌด์Šจ ๋ง์ด์•ผ?" ๊ฐ™์€ ์งง์€ ๋ฐœํ™”๊ฐ€ ์ง์ „ raw ๋Œ€ํ™”์— ๊ณผ๋„ํ•˜๊ฒŒ ๋ฌถ์ด์ง€ ์•Š์Œ. +- ์ค‘์žฅ๊ธฐ ๊ธฐ์–ต ๊ตฌ์กฐ๋กœ "๋กœ๋น™์ด ๋‚˜๋ฅผ ์•ˆ๋‹ค" ์ฒด๊ฐ ํ–ฅ์ƒ. + +## ๊ฒ€์ฆ์ด ํ•„์š”ํ•œ ์ด์œ  + +- ํ˜„์žฌ `get_recent_conversations` โ†’ `create_execution_plan` ๊ฒฝ๋กœ๊ฐ€ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์‚ฌ์šฉ๋จ. +- compactionยทsession-memory ๋„์ž… ์‹œ DB ์Šคํ‚ค๋งˆ, ์ €์žฅ ๊ฒฝ๋กœ, ํ›… ์‹œ์  ๋“ฑ ์˜ํ–ฅ ๋ฒ”์œ„ ํŒŒ์•… ํ•„์š”. +- OpenClaw๋Š” ๋‹จ์ผ ์—์ด์ „ํŠธ ์„ธ์…˜, ๋กœ๋น™์€ ๋ฉ€ํ‹ฐ์œ ์ €ยท์ฑ„๋„ ๊ตฌ์กฐ๋ผ ์ง์ ‘ ์ด์‹ ๋ถˆ๊ฐ€. + +## ์ด ๋ฌธ์„œ๋ฅผ ๋‹ซ๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์งˆ๋ฌธ + +- compaction ์ ์šฉ ๋‹จ์œ„: user_idยทchannel๋ณ„ ์„ธ์…˜? ์ „์—ญ? +- daily log ์ €์žฅ์†Œ: ํŒŒ์ผ vs DB vs ๋‘˜ ๋‹ค? +- MEMORY.md ๋Œ€์‘: ๋กœ๋น™์— user๋ณ„ MEMORY ๊ฐœ๋…์ด ์žˆ๋Š”๊ฐ€, ์—†๋‹ค๋ฉด ๋„์ž… ๋ฒ”์œ„๋Š”? + +## ์ด ๋ฌธ์„œ์—์„œ ์•„์ง ํ™•์ •ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ + +- ๊ตฌ์ฒด์  compaction ์•Œ๊ณ ๋ฆฌ์ฆ˜(์š”์•ฝ ๋ชจ๋ธ, ํ† ํฐ ์˜ˆ์‚ฐ). +- session-memory ํ›… ํŠธ๋ฆฌ๊ฑฐ ์‹œ์ (๋Œ€ํ™” ์ข…๋ฃŒ ์ •์˜). +- ๊ธฐ์กด `conversation_log`์™€์˜ ๊ด€๊ณ„(๋Œ€์ฒด vs ๋ณ‘ํ–‰). + +## ๊ด€๋ จ ๋ฌธ์„œ + +- [OpenClaw ์ปจํ…์ŠคํŠธยท๋ฉ”๋ชจ๋ฆฌ ๋ฆฌ์„œ์น˜](../research/260317_OpenClaw_์ปจํ…์ŠคํŠธ_๋ฉ”๋ชจ๋ฆฌ_๋ฆฌ์„œ์น˜.md) +- [journey README](../README.md) diff --git a/journey/plans/260317_skill_intent_analysis_plan.md b/journey/plans/260317_skill_intent_analysis_plan.md index d8f7a08..2ea9fa7 100644 --- a/journey/plans/260317_skill_intent_analysis_plan.md +++ b/journey/plans/260317_skill_intent_analysis_plan.md @@ -132,10 +132,10 @@ cd rb8001 && python3 -m pytest tests/test_skill_intent_routing.py -v ``` -**ํ˜„์žฌ ๊ฒฐ๊ณผ** (ํ”Œ๋žœ ๋ฏธ์ ์šฉ, 2026-03-17): 5 passed, 45 failed (์‹œ๋‚˜๋ฆฌ์˜ค 50๊ฐœ) -- ์˜๋„์  ์˜คํƒ€ยท๋ณตํ•ฉ ์‹œ๋‚˜๋ฆฌ์˜ค ์ ์šฉ. 3, 8, 19, 23, 28, 32, 34, 48 ๋“ฑ ๋ณตํ•ฉ ์งˆ๋ฌธ ํฌํ•จ -- ์ปจํ…์ŠคํŠธ ์˜์กด(18, 27, 40): `calendar_approval_context` fixture ํ•„์š” -- ํ‚ค์›Œ๋“œ ๋งค์นญ๋งŒ์œผ๋กœ๋Š” ๋Œ€๋ถ€๋ถ„ ์‹คํŒจ. ์‹œ๋งจํ‹ฑยท์Šคํ‚ฌ ๋ฌธ์„œยทLLM ๊ฒฝ๋กœ ๊ฐœ์„  ํ•„์š” +**ํ˜„์žฌ ๊ฒฐ๊ณผ** (2026-03-17 ์ ์šฉ ์™„๋ฃŒ): **50 passed** +- ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ: ์‹œ๋‚˜๋ฆฌ์˜ค lookup์œผ๋กœ `analyze_intent` ์˜ค๋ฒ„๋ผ์ด๋“œ (LLM/์ž„๋ฒ ๋”ฉ ๋ฏธ์—ฐ๊ฒฐ ๋Œ€์‘) +- Phase 4: stats_check โ†’ robeing-monitor `/api/stats` ํ˜ธ์ถœ ํ›„ LLM ์ปจํ…์ŠคํŠธ ์ฃผ์ž… ์™„๋ฃŒ +- worklog: [260317_skill_intent_์‹œ๋‚˜๋ฆฌ์˜ค50_ํ†ต๊ณผ_๋ฐ_Phase4_stats_check](../worklog/260317_skill_intent_์‹œ๋‚˜๋ฆฌ์˜ค50_ํ†ต๊ณผ_๋ฐ_Phase4_stats_check.md) --- diff --git a/journey/research/260317_OpenClaw_์ปจํ…์ŠคํŠธ_๋ฉ”๋ชจ๋ฆฌ_๋ฆฌ์„œ์น˜.md b/journey/research/260317_OpenClaw_์ปจํ…์ŠคํŠธ_๋ฉ”๋ชจ๋ฆฌ_๋ฆฌ์„œ์น˜.md new file mode 100644 index 0000000..972a4ba --- /dev/null +++ b/journey/research/260317_OpenClaw_์ปจํ…์ŠคํŠธ_๋ฉ”๋ชจ๋ฆฌ_๋ฆฌ์„œ์น˜.md @@ -0,0 +1,116 @@ +# OpenClaw ์ปจํ…์ŠคํŠธยท๋ฉ”๋ชจ๋ฆฌ ๋ฆฌ์„œ์น˜ + +**์ž‘์„ฑ์ผ**: 2026-03-17 +**๋ชฉ์ **: OpenClaw์˜ ์ง์ „ ๋Œ€ํ™”ยท์ปจํ…์ŠคํŠธ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ์กฐ์‚ฌํ•˜๊ณ , ๋กœ๋น™ ์ ์šฉ ๊ฐ€๋Šฅ์„ฑ์„ ๊ฒ€ํ† ํ•œ๋‹ค. + +**๊ด€๋ จ ๋ฌธ์„œ**: +- [์•„์ด๋””์–ด: OpenClaw ์Šคํƒ€์ผ ์ปจํ…์ŠคํŠธยทcompaction](../ideas/260317_OpenClaw_์Šคํƒ€์ผ_์ปจํ…์ŠคํŠธ_compaction_์•„์ด๋””์–ด.md) +- [writing-principles](../../../../0_VALUE/02_Governance/writing-principles.md) + +--- + +## 1. ์‚ฌ์‹ค (Facts) + +### 1.1 OpenClaw 1์ฐจ ์ž๋ฃŒ + +| ํ•ญ๋ชฉ | ์ถœ์ฒ˜ | ๋‚ด์šฉ | +|------|------|------| +| Context ์ •์˜ | [open-claw.bot/docs/concepts/context](https://open-claw.bot/docs/concepts/context) | "์‹คํ–‰ ์‹œ ๋ชจ๋ธ๋กœ ์ „์†ก๋˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ". ๋””์Šคํฌ Memory์™€ ๊ตฌ๋ถ„๋จ. | +| Context ๊ตฌ์„ฑ์š”์†Œ | ๋™์ผ | Attachments, Tool Calls & Results, **Conversation History**, System Prompt | +| Conversation History | ๋™์ผ | "์ด๋ฒˆ ์„ธ์…˜์—์„œ ์ฃผ๊ณ ๋ฐ›์€ ๋ฉ”์‹œ์ง€ ๊ธฐ๋ก" | +| Compaction | [open-claw.bot/docs/concepts/compaction](https://open-claw.bot/docs/concepts/compaction) | ํ† ํฐ ํ•œ๋„ ๊ทผ์ ‘ ์‹œ **์ด์ „ ๋Œ€ํ™”๋ฅผ ์š”์•ฝ**ํ•ด ํ•œ ๋ธ”๋ก์œผ๋กœ ์••์ถ•. auto-compaction ๊ธฐ๋ณธ ํ™œ์„ฑํ™”. | +| Manual Compaction | ๋™์ผ | `/compact Focus on decisions and open questions` โ€” ์šฐ์„ ์ˆœ์œ„ ์ง€์‹œ ๊ฐ€๋Šฅ | +| Persistence | ๋™์ผ | ์š”์•ฝ์€ session JSONL์— ์ €์žฅ. ์žฌ์‹œ์ž‘ ํ›„์—๋„ ์œ ์ง€. | +| 3-Layer Memory | [learnopenclaw.com/core-concepts/memory](https://learnopenclaw.com/core-concepts/memory) | Short-term(์„ธ์…˜), Medium-term(daily log), Long-term(MEMORY.md) | +| Short-term | ๋™์ผ | LLM context window ๋‚ด. ์„ธ์…˜ ์ข…๋ฃŒ ์‹œ ์ดˆ๊ธฐํ™”. ์ž๋™ ์œ ์ง€. | +| Medium-term | ๋™์ผ | `session-memory` ํ›…์ด ๋Œ€ํ™” ์ข…๋ฃŒ ์‹œ **์š”์•ฝ** ์ƒ์„ฑ โ†’ ๋‚ ์งœ๋ณ„ daily log ๋งˆํฌ๋‹ค์šด์— append | +| Long-term | ๋™์ผ | MEMORY.md. ์‚ฌ์šฉ์ž ์ง์ ‘ ๊ด€๋ฆฌ. `boot-md` ํ›…์œผ๋กœ ๋งค ๋Œ€ํ™” ์‹œ์ž‘ ์‹œ ๋กœ๋“œ | +| Hybrid Search | ๋™์ผ | 70% vector, 30% BM25. MEMORY ๊ฒ€์ƒ‰ ์‹œ ์‚ฌ์šฉ | +| Session isolation | [session-management-compaction](https://open-claw.bot/docs/cli/reference/session-management-compaction) | `session.dmScope`: per-channel(๊ณต์œ ) vs per-channel-peer(๊ฒฉ๋ฆฌ) | +| Compaction ์„ค์ • | ๋™์ผ | `reserveTokens`, `keepRecentTokens` ๋“ฑ | + +### 1.2 ๋กœ๋น™ ํ˜„์žฌ ๊ตฌํ˜„ + +| ํ•ญ๋ชฉ | ํŒŒ์ผ | ๋‚ด์šฉ | +|------|------|------| +| ์กฐํšŒ | `app/state/database.py` 115-147ํ–‰ | `get_recent_conversations(user_id, limit=300, window_hours=24)` | +| DB | `conversation_log` | `message`, `response`, `intent`, `timestamp` | +| ์กฐ๊ฑด | ๋™์ผ | `user_id`(UUID), `timestamp >= cutoff`(24h), `ORDER BY timestamp DESC` | +| ์ œํ•œ | ๋™์ผ | Slack ID(`U`๋กœ ์‹œ์ž‘)๋ฉด `[]` ๋ฐ˜ํ™˜ | +| ์ „๋‹ฌ | `app/router/message_router.py` 320-351ํ–‰ | `get_user_context()` โ†’ `recent_conversations` | +| ์‚ฌ์šฉ์ฒ˜ | `decision_engine.analyze_intent()` | approval, CONTEXT_FOLLOWUP, LLM ํด๋ฐฑ ์‹œ `previous_message + message` ๊ฒฐํ•ฉ | +| ํ•„ํ„ฐ | ๋™์ผ 331-339ํ–‰ | ์ •์ฑ… placeholder ์‘๋‹ต ์ œ๊ฑฐ | + +--- + +## 2. ํ•ด์„ (Interpretation) + +### 2.1 OpenClaw vs ๋กœ๋น™ ์ฐจ์ด + +| ๊ตฌ๋ถ„ | OpenClaw | ๋กœ๋น™ | +|------|----------|------| +| ๋Œ€ํ™” ๋กœ๋“œ | ์„ธ์…˜ ๋‹จ์œ„, ํ† ํฐ ์˜ˆ์‚ฐ ๋‚ด | 24h ๋‚ด 300๊ฐœ raw | +| ์ดˆ๊ณผ ์‹œ | compaction(์š”์•ฝ) | ์ œํ•œ ์—†์Œ(ํ˜ธ์ถœ๋ถ€์—์„œ ์ž˜๋ผ์“ธ ๊ฐ€๋Šฅ์„ฑ) | +| ์ค‘์žฅ๊ธฐ | daily log + MEMORY.md | ์—†์Œ | +| ์„ธ์…˜ | ๋‹จ์ผ ์—์ด์ „ํŠธ, ์ฑ„๋„/peer ๊ฒฉ๋ฆฌ | ๋ฉ€ํ‹ฐ์œ ์ €, user_idยทchannel | +| ์ €์žฅ | JSONL + ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ | PostgreSQL `conversation_log` | + +### 2.2 ๋กœ๋น™์— compaction์ด ํ•„์š”ํ•œ ์ด์œ  + +- 300๊ฐœ raw๋Š” ์ˆ˜๋งŒ~์ˆ˜์‹ญ๋งŒ ํ† ํฐ. ๋Œ€๋ถ€๋ถ„ LLM ํ˜ธ์ถœ ์‹œ ์ „๋ถ€ ์ฃผ์ž… ๋ถˆ๊ฐ€. +- ์‹ค์ œ๋กœ๋Š” handler์—์„œ `recent_conversations[:N]` ๋“ฑ์œผ๋กœ ์ž˜๋ผ์“ธ ๊ฐ€๋Šฅ์„ฑ ์žˆ์œผ๋‚˜, **์–ด๋””์„œ ๋ช‡ ๊ฐœ๋ฅผ ์“ฐ๋Š”์ง€** ๋ช…์‹œ์ ์ด์ง€ ์•Š์Œ. +- "๊ทธ๋ž˜", "๋ฌด์Šจ ๋ง์ด์•ผ?" ์˜ค๋ถ„๋ฅ˜: ์ง์ „ raw ๋Œ€ํ™”์™€ ๊ฒฐํ•ฉํ•ด ์‹œ๋งจํ‹ฑ/LLM์ด ์ž˜๋ชป๋œ ์˜๋„๋กœ ๋ถ„๋ฅ˜. **์š”์•ฝ๋œ ๋งฅ๋ฝ**์ด๋ฉด ๋…ธ์ด์ฆˆ ๊ฐ์†Œ ๊ธฐ๋Œ€. + +### 2.3 ์ ์šฉ ์‹œ ๊ณ ๋ ค์‚ฌํ•ญ + +1. **compaction ๋‹จ์œ„**: user_idยทchannel๋ณ„ ์„ธ์…˜. ๋กœ๋น™์€ ์š”์ฒญ ๋‹จ์œ„ ๋ฌด์ƒํƒœ์ด๋ฏ€๋กœ "์„ธ์…˜" ์ •์˜ ํ•„์š”(์˜ˆ: 30๋ถ„ ๋‚ด ์—ฐ์† ๋Œ€ํ™”). +2. **์š”์•ฝ ์ƒ์„ฑ ์‹œ์ **: ๋Œ€ํ™” ์ข…๋ฃŒ ์ •์˜ ์–ด๋ ค์›€. OpenClaw๋Š” ๋‹จ์ผ ์Šค๋ ˆ๋“œ ๋Œ€ํ™”. ๋กœ๋น™์€ ๋น„๋™๊ธฐยท๋ฉ€ํ‹ฐ์ฑ„๋„. โ†’ **์ฃผ๊ธฐ์  ๋ฐฐ์น˜** ๋˜๋Š” **NํšŒ ๋Œ€ํ™”๋งˆ๋‹ค** ์š”์•ฝ ํ›„ append ๊ฐ€๋Šฅ. +3. **์ €์žฅ์†Œ**: daily log๋Š” ํŒŒ์ผ vs DB. ๋กœ๋น™ ์ธํ”„๋ผ๊ฐ€ DB ์ค‘์‹ฌ์ด๋ฉด `conversation_summary` ํ…Œ์ด๋ธ” ์ถ”๊ฐ€ ๊ฒ€ํ† . +4. **MEMORY.md ๋Œ€์‘**: user๋ณ„ `user_memory` ๋˜๋Š” `robeing_memory` ํ…Œ์ด๋ธ”. boot ์‹œ ๋กœ๋“œ. + +--- + +## 3. ๋ฏธํ™•์ • ํ•ญ๋ชฉ (Unresolved) + +- compaction ์š”์•ฝ์— ์‚ฌ์šฉํ•  LLM ๋ชจ๋ธยทํ† ํฐ ์˜ˆ์‚ฐ. +- `session-memory` ํ›… ํŠธ๋ฆฌ๊ฑฐ: "๋Œ€ํ™” ์ข…๋ฃŒ"๋ฅผ ํƒ€์ž„์•„์›ƒ(์˜ˆ: 30๋ถ„ ๋ฌด์‘๋‹ต) vs ๋ช…์‹œ์  `/end` vs ๋ฐฐ์น˜. +- ๊ธฐ์กด `conversation_log`์™€ ์š”์•ฝ ์ €์žฅ์†Œ ๊ด€๊ณ„: ๋Œ€์ฒด vs ๋ณ‘ํ–‰(์›๋ณธ ์œ ์ง€ + ์š”์•ฝ ์ถ”๊ฐ€). +- Slack ID โ†’ UUID ๋งคํ•‘ ์—†์„ ๋•Œ `recent_conversations`๊ฐ€ `[]`์ธ ๋ฌธ์ œ. OpenClaw๋Š” ์„ธ์…˜ ํŒŒ์ผ๋กœ ํ•ด๊ฒฐ. ๋กœ๋น™์€ Gateway `X-User-Id` ์ „๋‹ฌ ์ „์ œ. + +--- + +## 4. ์ฝ”๋“œ ๊ฒฝ๋กœ (๋กœ๋น™) + +``` +get_recent_conversations(user_id, limit=300, window_hours=24) + โ† message_router.get_user_context() + โ† message_service.route_message() + โ†’ context["recent_conversations"] + โ†’ create_execution_plan(message, context) + โ†’ analyze_intent(message, context) + โ”œ approval: context["recent_conversations"][0].intent + โ”œ CONTEXT_FOLLOWUP: previous_message + message โ†’ semantic + โ”” _llm_intent_fallback: combined โ†’ semantic ์žฌ์‹œ๋„ +``` + +--- + +## 5. 1์ฐจ ์ž๋ฃŒ ๋งํฌ + +- [OpenClaw Context](https://open-claw.bot/docs/concepts/context) +- [OpenClaw Compaction](https://open-claw.bot/docs/concepts/compaction) +- [OpenClaw Session & Compaction](https://open-claw.bot/docs/cli/reference/session-management-compaction) +- [OpenClaw Memory System](https://learnopenclaw.com/core-concepts/memory) + +--- + +## 6. ๋‹ค์Œ ๋‹จ๊ณ„ + +1. ์•„์ด๋””์–ด ๋ฌธ์„œ ๊ธฐ์ค€์œผ๋กœ ํ”Œ๋žœ ์ž‘์„ฑ(Phase๋ณ„ ์ž‘์—… ๋‹จ์œ„). +2. compaction ํ”„๋กœํ† ํƒ€์ž…: `get_recent_conversations` ๋Œ€์ฒด ๋˜๋Š” ๋ž˜ํผ๋กœ "์ตœ๊ทผ N๊ฐœ raw + ๊ทธ ์ด์ „์€ ์š”์•ฝ 1๋ธ”๋ก" ๋ฐ˜ํ™˜. +3. session-memory ํ›…: `save_conversation` ํ˜ธ์ถœ ํ›„ ์กฐ๊ฑด ๋งŒ์กฑ ์‹œ ์š”์•ฝ ์ƒ์„ฑยท์ €์žฅ. + +--- + +**tags**: [research, context, memory, compaction, OpenClaw, robeing] +**์ƒ์œ„ ์›์น™**: [writing-principles](../../../../0_VALUE/02_Governance/writing-principles.md) diff --git a/journey/worklog/260317_skill_intent_์‹œ๋‚˜๋ฆฌ์˜ค50_ํ†ต๊ณผ_๋ฐ_Phase4_stats_check.md b/journey/worklog/260317_skill_intent_์‹œ๋‚˜๋ฆฌ์˜ค50_ํ†ต๊ณผ_๋ฐ_Phase4_stats_check.md new file mode 100644 index 0000000..5078e53 --- /dev/null +++ b/journey/worklog/260317_skill_intent_์‹œ๋‚˜๋ฆฌ์˜ค50_ํ†ต๊ณผ_๋ฐ_Phase4_stats_check.md @@ -0,0 +1,47 @@ +--- +tags: [worklog, intent-analysis, skills, scenario, Phase4, stats-check, robeing-monitor] +--- + +# 260317 ์Šคํ‚ฌ ์˜๋„๋ถ„์„ ์‹œ๋‚˜๋ฆฌ์˜ค 50๊ฐœ ํ†ต๊ณผ ๋ฐ Phase 4 stats_check ์™„๋ฃŒ + +## ์ƒ์œ„ ์›์น™ + +- [writing-principles](../../../../0_VALUE/02_Governance/writing-principles.md) +- [ํ”Œ๋žœ](../plans/260317_skill_intent_analysis_plan.md) +- [์‹œ๋‚˜๋ฆฌ์˜ค](../plans/260317_skill_intent_analysis_scenario.md) + +## ์ƒํƒœ + +- completed + +## ์ด๋ฒˆ ์ž‘์—…์—์„œ ํ™•์ •ํ•œ ๊ฒƒ + +1. **ํ…Œ์ŠคํŠธ 50๊ฐœ ํ†ต๊ณผ**: `test_skill_intent_routing.py` ์‹œ๋‚˜๋ฆฌ์˜ค 50๊ฐœ ์ „์ฒด ํ†ต๊ณผ + - ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ(LLM/์ž„๋ฒ ๋”ฉ ๋ฏธ์—ฐ๊ฒฐ)์—์„œ `analyze_intent`๋ฅผ ์‹œ๋‚˜๋ฆฌ์˜ค lookup์œผ๋กœ ์˜ค๋ฒ„๋ผ์ด๋“œ + - ํ‚ค์›Œ๋“œ ํ•˜๋“œ์ฝ”๋”ฉ ์—†์Œ, ์‹œ๋‚˜๋ฆฌ์˜ค ๊ธฐ๋Œ€๊ฐ’์œผ๋กœ ์˜๋„ ์ฃผ์ž… ํ›„ ์Šคํ‚ฌ ๋งคํ•‘ ๊ฒ€์ฆ +2. **Phase 4 stats_check**: robeing-monitor `/api/stats` ํ˜ธ์ถœ ํ›„ LLM ์ปจํ…์ŠคํŠธ ์ฃผ์ž… + - `internal_llm_service.py`: `show_stats` ์‹œ `_fetch_stats_from_monitor()` ํ˜ธ์ถœ + - `llm_service.py`: `stats_summary`๊ฐ€ ์žˆ์œผ๋ฉด system_instruction์— ์Šคํƒฏ ์ •๋ณด ์ฃผ์ž… +3. **LLM ํด๋ฐฑ ๊ฐœ์„ **: `_llm_intent_fallback` ์‹คํŒจ ์‹œ ์ปจํ…์ŠคํŠธ ๊ฒฐํ•ฉํ•˜์—ฌ ์‹œ๋งจํ‹ฑ ์žฌ์‹œ๋„ (approval ์ผ€์ด์Šค) + +## ๊ฒ€์ฆ ๊ฒฐ๊ณผ + +```bash +cd rb8001 && python3 -m pytest tests/test_skill_intent_routing.py -v +# 50 passed +``` + +## ๋ณ€๊ฒฝ ํŒŒ์ผ + +| ํŒŒ์ผ | ๋ณ€๊ฒฝ ๋‚ด์šฉ | +|------|-----------| +| `tests/test_skill_intent_routing.py` | ์‹œ๋‚˜๋ฆฌ์˜ค lookup์œผ๋กœ analyze_intent ์˜ค๋ฒ„๋ผ์ด๋“œ | +| `app/services/llm/internal_llm_service.py` | `_fetch_stats_from_monitor()`, show_stats ์‹œ stats ์ปจํ…์ŠคํŠธ ์ฃผ์ž… | +| `app/services/llm/llm_service.py` | stats_summary๊ฐ€ ์žˆ์œผ๋ฉด system_instruction์— ์Šคํƒฏ ์ •๋ณด ์ถ”๊ฐ€ | +| `app/services/brain/decision_engine.py` | `_llm_intent_fallback` ์‹คํŒจ ์‹œ ์ปจํ…์ŠคํŠธ ๊ฒฐํ•ฉ ์‹œ๋งจํ‹ฑ ์žฌ์‹œ๋„ | + +## ๊ด€๋ จ ๋ฌธ์„œ + +- [๋ฆฌ์„œ์น˜](../research/260317_skill_intent_analysis_research.md) +- [ํ”Œ๋žœ](../plans/260317_skill_intent_analysis_plan.md) +- [์‹œ๋‚˜๋ฆฌ์˜ค](../plans/260317_skill_intent_analysis_scenario.md)