memento-mcp-server 1.6.0 → 1.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/INSTALL.en.md +303 -303
- package/INSTALL.md +303 -303
- package/README.en.md +331 -330
- package/README.md +432 -432
- package/dist/algorithms/hybrid-search-engine.d.ts +114 -44
- package/dist/algorithms/hybrid-search-engine.d.ts.map +1 -1
- package/dist/algorithms/hybrid-search-engine.js +261 -235
- package/dist/algorithms/hybrid-search-engine.js.map +1 -1
- package/dist/algorithms/search-engine.d.ts +2 -14
- package/dist/algorithms/search-engine.d.ts.map +1 -1
- package/dist/algorithms/search-engine.js +43 -35
- package/dist/algorithms/search-engine.js.map +1 -1
- package/dist/algorithms/vector-search-engine-migration.d.ts +67 -0
- package/dist/algorithms/vector-search-engine-migration.d.ts.map +1 -0
- package/dist/algorithms/vector-search-engine-migration.js +196 -0
- package/dist/algorithms/vector-search-engine-migration.js.map +1 -0
- package/dist/algorithms/vector-search-engine-refactored.d.ts +56 -0
- package/dist/algorithms/vector-search-engine-refactored.d.ts.map +1 -0
- package/dist/algorithms/vector-search-engine-refactored.js +101 -0
- package/dist/algorithms/vector-search-engine-refactored.js.map +1 -0
- package/dist/algorithms/vector-search-engine.d.ts +9 -2
- package/dist/algorithms/vector-search-engine.d.ts.map +1 -1
- package/dist/algorithms/vector-search-engine.js +245 -121
- package/dist/algorithms/vector-search-engine.js.map +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +34 -11
- package/dist/client/index.js.map +1 -1
- package/dist/config/environment.d.ts +26 -0
- package/dist/config/environment.d.ts.map +1 -0
- package/dist/config/environment.js +103 -0
- package/dist/config/environment.js.map +1 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +29 -50
- package/dist/config/index.js.map +1 -1
- package/dist/config/vector-search.config.d.ts +25 -0
- package/dist/config/vector-search.config.d.ts.map +1 -0
- package/dist/config/vector-search.config.js +40 -0
- package/dist/config/vector-search.config.js.map +1 -0
- package/dist/database/init.d.ts.map +1 -1
- package/dist/database/init.js +154 -17
- package/dist/database/init.js.map +1 -1
- package/dist/database/migrate.d.ts +2 -1
- package/dist/database/migrate.d.ts.map +1 -1
- package/dist/database/migrate.js +191 -18
- package/dist/database/migrate.js.map +1 -1
- package/dist/database/schema.sql +234 -159
- package/dist/factories/hybrid-search.factory.d.ts +20 -0
- package/dist/factories/hybrid-search.factory.d.ts.map +1 -0
- package/dist/factories/hybrid-search.factory.js +57 -0
- package/dist/factories/hybrid-search.factory.js.map +1 -0
- package/dist/factories/spaced-repetition.factory.d.ts +48 -0
- package/dist/factories/spaced-repetition.factory.d.ts.map +1 -0
- package/dist/factories/spaced-repetition.factory.js +187 -0
- package/dist/factories/spaced-repetition.factory.js.map +1 -0
- package/dist/factories/vector-search.factory.d.ts +25 -0
- package/dist/factories/vector-search.factory.d.ts.map +1 -0
- package/dist/factories/vector-search.factory.js +47 -0
- package/dist/factories/vector-search.factory.js.map +1 -0
- package/dist/interfaces/database.interface.d.ts +36 -0
- package/dist/interfaces/database.interface.d.ts.map +1 -0
- package/dist/interfaces/database.interface.js +6 -0
- package/dist/interfaces/database.interface.js.map +1 -0
- package/dist/interfaces/spaced-repetition.interface.d.ts +63 -0
- package/dist/interfaces/spaced-repetition.interface.d.ts.map +1 -0
- package/dist/interfaces/spaced-repetition.interface.js +6 -0
- package/dist/interfaces/spaced-repetition.interface.js.map +1 -0
- package/dist/repositories/vector-performance.repository.d.ts +25 -0
- package/dist/repositories/vector-performance.repository.d.ts.map +1 -0
- package/dist/repositories/vector-performance.repository.js +134 -0
- package/dist/repositories/vector-performance.repository.js.map +1 -0
- package/dist/repositories/vector-search.repository.d.ts +43 -0
- package/dist/repositories/vector-search.repository.d.ts.map +1 -0
- package/dist/repositories/vector-search.repository.js +377 -0
- package/dist/repositories/vector-search.repository.js.map +1 -0
- package/dist/server/http-server.d.ts.map +1 -1
- package/dist/server/http-server.js +25 -24
- package/dist/server/http-server.js.map +1 -1
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +3 -1
- package/dist/server/index.js.map +1 -1
- package/dist/services/alert-notification-service.d.ts +16 -0
- package/dist/services/alert-notification-service.d.ts.map +1 -0
- package/dist/services/alert-notification-service.js +44 -0
- package/dist/services/alert-notification-service.js.map +1 -0
- package/dist/services/async-optimizer.d.ts +62 -8
- package/dist/services/async-optimizer.d.ts.map +1 -1
- package/dist/services/async-optimizer.js +137 -8
- package/dist/services/async-optimizer.js.map +1 -1
- package/dist/services/batch-scheduler.d.ts +6 -0
- package/dist/services/batch-scheduler.d.ts.map +1 -1
- package/dist/services/batch-scheduler.js +59 -19
- package/dist/services/batch-scheduler.js.map +1 -1
- package/dist/services/cache-service.d.ts +32 -0
- package/dist/services/cache-service.d.ts.map +1 -1
- package/dist/services/cache-service.js +81 -6
- package/dist/services/cache-service.js.map +1 -1
- package/dist/services/database-optimizer.js +63 -63
- package/dist/services/database-optimizer.js.map +1 -1
- package/dist/services/embedding-migration-service.d.ts +24 -0
- package/dist/services/embedding-migration-service.d.ts.map +1 -0
- package/dist/services/embedding-migration-service.js +360 -0
- package/dist/services/embedding-migration-service.js.map +1 -0
- package/dist/services/embedding-provider-factory.d.ts +12 -5
- package/dist/services/embedding-provider-factory.d.ts.map +1 -1
- package/dist/services/embedding-provider-factory.js +107 -26
- package/dist/services/embedding-provider-factory.js.map +1 -1
- package/dist/services/forgetting-policy-service.js +17 -17
- package/dist/services/gemini-embedding-service.d.ts +1 -1
- package/dist/services/gemini-embedding-service.d.ts.map +1 -1
- package/dist/services/gemini-embedding-service.js +25 -18
- package/dist/services/gemini-embedding-service.js.map +1 -1
- package/dist/services/memory-embedding-service.d.ts +8 -0
- package/dist/services/memory-embedding-service.d.ts.map +1 -1
- package/dist/services/memory-embedding-service.js +180 -71
- package/dist/services/memory-embedding-service.js.map +1 -1
- package/dist/services/migration-history-service.d.ts +14 -0
- package/dist/services/migration-history-service.d.ts.map +1 -0
- package/dist/services/migration-history-service.js +270 -0
- package/dist/services/migration-history-service.js.map +1 -0
- package/dist/services/migration-monitor-service.d.ts +24 -0
- package/dist/services/migration-monitor-service.d.ts.map +1 -0
- package/dist/services/migration-monitor-service.js +93 -0
- package/dist/services/migration-monitor-service.js.map +1 -0
- package/dist/services/model-availability-service.d.ts +22 -0
- package/dist/services/model-availability-service.d.ts.map +1 -0
- package/dist/services/model-availability-service.js +140 -0
- package/dist/services/model-availability-service.js.map +1 -0
- package/dist/services/openai-embedding-service.d.ts +36 -0
- package/dist/services/openai-embedding-service.d.ts.map +1 -0
- package/dist/services/openai-embedding-service.js +192 -0
- package/dist/services/openai-embedding-service.js.map +1 -0
- package/dist/services/performance-monitor.d.ts +154 -10
- package/dist/services/performance-monitor.d.ts.map +1 -1
- package/dist/services/performance-monitor.js +446 -60
- package/dist/services/performance-monitor.js.map +1 -1
- package/dist/services/spaced-repetition/interval-calculation.service.d.ts +38 -0
- package/dist/services/spaced-repetition/interval-calculation.service.d.ts.map +1 -0
- package/dist/services/spaced-repetition/interval-calculation.service.js +105 -0
- package/dist/services/spaced-repetition/interval-calculation.service.js.map +1 -0
- package/dist/services/spaced-repetition/optimal-interval.service.d.ts +56 -0
- package/dist/services/spaced-repetition/optimal-interval.service.d.ts.map +1 -0
- package/dist/services/spaced-repetition/optimal-interval.service.js +163 -0
- package/dist/services/spaced-repetition/optimal-interval.service.js.map +1 -0
- package/dist/services/spaced-repetition/performance-analysis.service.d.ts +48 -0
- package/dist/services/spaced-repetition/performance-analysis.service.d.ts.map +1 -0
- package/dist/services/spaced-repetition/performance-analysis.service.js +174 -0
- package/dist/services/spaced-repetition/performance-analysis.service.js.map +1 -0
- package/dist/services/spaced-repetition/priority-calculation.service.d.ts +53 -0
- package/dist/services/spaced-repetition/priority-calculation.service.d.ts.map +1 -0
- package/dist/services/spaced-repetition/priority-calculation.service.js +161 -0
- package/dist/services/spaced-repetition/priority-calculation.service.js.map +1 -0
- package/dist/services/spaced-repetition/recall-probability.service.d.ts +36 -0
- package/dist/services/spaced-repetition/recall-probability.service.d.ts.map +1 -0
- package/dist/services/spaced-repetition/recall-probability.service.js +88 -0
- package/dist/services/spaced-repetition/recall-probability.service.js.map +1 -0
- package/dist/services/spaced-repetition/review-scheduling.service.d.ts +43 -0
- package/dist/services/spaced-repetition/review-scheduling.service.d.ts.map +1 -0
- package/dist/services/spaced-repetition/review-scheduling.service.js +130 -0
- package/dist/services/spaced-repetition/review-scheduling.service.js.map +1 -0
- package/dist/services/spaced-repetition/spaced-repetition-container.d.ts +69 -0
- package/dist/services/spaced-repetition/spaced-repetition-container.d.ts.map +1 -0
- package/dist/services/spaced-repetition/spaced-repetition-container.js +136 -0
- package/dist/services/spaced-repetition/spaced-repetition-container.js.map +1 -0
- package/dist/services/unified-embedding-service.d.ts +3 -0
- package/dist/services/unified-embedding-service.d.ts.map +1 -1
- package/dist/services/unified-embedding-service.js +58 -62
- package/dist/services/unified-embedding-service.js.map +1 -1
- package/dist/services/vector-compatibility-service.d.ts +68 -0
- package/dist/services/vector-compatibility-service.d.ts.map +1 -0
- package/dist/services/vector-compatibility-service.js +373 -0
- package/dist/services/vector-compatibility-service.js.map +1 -0
- package/dist/services/vector-search/vector-index-manager.d.ts +27 -0
- package/dist/services/vector-search/vector-index-manager.d.ts.map +1 -0
- package/dist/services/vector-search/vector-index-manager.js +66 -0
- package/dist/services/vector-search/vector-index-manager.js.map +1 -0
- package/dist/services/vector-search/vector-performance-tester.d.ts +30 -0
- package/dist/services/vector-search/vector-performance-tester.d.ts.map +1 -0
- package/dist/services/vector-search/vector-performance-tester.js +87 -0
- package/dist/services/vector-search/vector-performance-tester.js.map +1 -0
- package/dist/services/vector-search/vector-search-container.d.ts +41 -0
- package/dist/services/vector-search/vector-search-container.d.ts.map +1 -0
- package/dist/services/vector-search/vector-search-container.js +74 -0
- package/dist/services/vector-search/vector-search-container.js.map +1 -0
- package/dist/services/vector-search/vector-search-facade.d.ts +63 -0
- package/dist/services/vector-search/vector-search-facade.d.ts.map +1 -0
- package/dist/services/vector-search/vector-search-facade.js +91 -0
- package/dist/services/vector-search/vector-search-facade.js.map +1 -0
- package/dist/services/vector-search/vector-search-result-normalizer.d.ts +6 -0
- package/dist/services/vector-search/vector-search-result-normalizer.d.ts.map +1 -0
- package/dist/services/vector-search/vector-search-result-normalizer.js +65 -0
- package/dist/services/vector-search/vector-search-result-normalizer.js.map +1 -0
- package/dist/services/vector-search/vector-search.service.d.ts +33 -0
- package/dist/services/vector-search/vector-search.service.d.ts.map +1 -0
- package/dist/services/vector-search/vector-search.service.js +149 -0
- package/dist/services/vector-search/vector-search.service.js.map +1 -0
- package/dist/tools/forget-tool.js +14 -14
- package/dist/tools/pin-tool.js +14 -14
- package/dist/tools/unpin-tool.js +21 -21
- package/dist/types/alerts.types.d.ts +26 -0
- package/dist/types/alerts.types.d.ts.map +1 -0
- package/dist/types/alerts.types.js +2 -0
- package/dist/types/alerts.types.js.map +1 -0
- package/dist/types/embedding-provider-monitoring.types.d.ts +24 -0
- package/dist/types/embedding-provider-monitoring.types.d.ts.map +1 -0
- package/dist/types/embedding-provider-monitoring.types.js +2 -0
- package/dist/types/embedding-provider-monitoring.types.js.map +1 -0
- package/dist/types/embedding.types.d.ts +36 -1
- package/dist/types/embedding.types.d.ts.map +1 -1
- package/dist/types/migration.types.d.ts +131 -0
- package/dist/types/migration.types.d.ts.map +1 -0
- package/dist/types/migration.types.js +6 -0
- package/dist/types/migration.types.js.map +1 -0
- package/dist/types/spaced-repetition.types.d.ts +61 -0
- package/dist/types/spaced-repetition.types.d.ts.map +1 -0
- package/dist/types/spaced-repetition.types.js +6 -0
- package/dist/types/spaced-repetition.types.js.map +1 -0
- package/dist/types/vector-search.types.d.ts +96 -0
- package/dist/types/vector-search.types.d.ts.map +1 -0
- package/dist/types/vector-search.types.js +2 -0
- package/dist/types/vector-search.types.js.map +1 -0
- package/dist/utils/configuration-validator.d.ts +23 -0
- package/dist/utils/configuration-validator.d.ts.map +1 -0
- package/dist/utils/configuration-validator.js +102 -0
- package/dist/utils/configuration-validator.js.map +1 -0
- package/dist/utils/database.d.ts.map +1 -1
- package/dist/utils/database.js +101 -95
- package/dist/utils/database.js.map +1 -1
- package/dist/utils/environment-check.d.ts +8 -0
- package/dist/utils/environment-check.d.ts.map +1 -0
- package/dist/utils/environment-check.js +25 -0
- package/dist/utils/environment-check.js.map +1 -0
- package/dist/utils/logger.d.ts +8 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +33 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +139 -125
- package/scripts/auto-setup.js +233 -233
- package/scripts/backup-daily.bat +28 -28
- package/scripts/backup-embeddings.js +108 -108
- package/scripts/check-db-integrity.js +93 -93
- package/scripts/debug-embeddings.js +184 -184
- package/scripts/direct-sql-migration.sql +36 -36
- package/scripts/docker-migration.sh +105 -105
- package/scripts/fix-migration.js +93 -93
- package/scripts/fix-vector-dimensions.js +206 -206
- package/scripts/migrate-embedding-data.js +307 -307
- package/scripts/regenerate-embeddings.js +144 -144
- package/scripts/restore-legacy.ps1 +60 -60
- package/scripts/run-migration.js +122 -122
- package/scripts/safe-migration.js +150 -150
- package/scripts/simple-migrate.js +41 -41
- package/scripts/simple-update.js +123 -123
- package/src/database/schema.sql +234 -159
- package/.cursor/rules/cache-management.mdc +0 -171
- package/.cursor/rules/database-schema.mdc +0 -344
- package/.cursor/rules/deployment.mdc +0 -596
- package/.cursor/rules/error-logging.mdc +0 -298
- package/.cursor/rules/forgetting-algorithms.mdc +0 -426
- package/.cursor/rules/http-server.mdc +0 -432
- package/.cursor/rules/hybrid-search.mdc +0 -424
- package/.cursor/rules/implementation.mdc +0 -369
- package/.cursor/rules/lightweight-embedding.mdc +0 -178
- package/.cursor/rules/mcp-client-development.mdc +0 -0
- package/.cursor/rules/mcp-server-development.mdc +0 -0
- package/.cursor/rules/mcp-tools-architecture.mdc +0 -205
- package/.cursor/rules/memento-memory-rule.mdc +0 -8
- package/.cursor/rules/memento-project-overview.mdc +0 -0
- package/.cursor/rules/memory-algorithms.mdc +0 -502
- package/.cursor/rules/monitoring.mdc +0 -622
- package/.cursor/rules/performance-alerts.mdc +0 -537
- package/.cursor/rules/performance-monitoring.mdc +0 -345
- package/.cursor/rules/performance-optimization.mdc +0 -563
- package/.cursor/rules/project-structure.mdc +0 -310
- package/.cursor/rules/testing.mdc +0 -473
- package/.dockerignore +0 -15
- package/.eslintrc.json +0 -34
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -51
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -45
- package/.github/ISSUE_TEMPLATE/question.md +0 -31
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -97
- package/AGENTS.md +0 -28
- package/CHANGELOG.md +0 -416
- package/CODE_OF_CONDUCT.md +0 -62
- package/CONTRIBUTING.md +0 -165
- package/DOCKER_SETUP_GUIDE.md +0 -84
- package/Dockerfile +0 -90
- package/backup/legacy-removal-20250930-201816/http-server-legacy.ts +0 -1068
- package/backup/legacy-removal-20250930-201816/rollback-to-legacy.ps1 +0 -46
- package/backup/legacy-removal-20250930-201816/rollback-to-legacy.sh +0 -48
- package/dist/server/index-backup.d.ts +0 -5
- package/dist/server/index-backup.d.ts.map +0 -1
- package/dist/server/index-backup.js +0 -793
- package/dist/server/index-backup.js.map +0 -1
- package/dist/server/index-refactored.d.ts +0 -6
- package/dist/server/index-refactored.d.ts.map +0 -1
- package/dist/server/index-refactored.js +0 -206
- package/dist/server/index-refactored.js.map +0 -1
- package/dist/services/performance-monitoring-integration.d.ts +0 -77
- package/dist/services/performance-monitoring-integration.d.ts.map +0 -1
- package/dist/services/performance-monitoring-integration.js +0 -177
- package/dist/services/performance-monitoring-integration.js.map +0 -1
- package/dist/test/debug-http-v2.d.ts +0 -5
- package/dist/test/debug-http-v2.d.ts.map +0 -1
- package/dist/test/debug-http-v2.js +0 -28
- package/dist/test/debug-http-v2.js.map +0 -1
- package/dist/test/performance-benchmark.d.ts +0 -57
- package/dist/test/performance-benchmark.d.ts.map +0 -1
- package/dist/test/performance-benchmark.js +0 -427
- package/dist/test/performance-benchmark.js.map +0 -1
- package/dist/test/test-alerts-direct.d.ts +0 -7
- package/dist/test/test-alerts-direct.d.ts.map +0 -1
- package/dist/test/test-alerts-direct.js +0 -101
- package/dist/test/test-alerts-direct.js.map +0 -1
- package/dist/test/test-batch-scheduler.d.ts +0 -2
- package/dist/test/test-batch-scheduler.d.ts.map +0 -1
- package/dist/test/test-batch-scheduler.js +0 -156
- package/dist/test/test-batch-scheduler.js.map +0 -1
- package/dist/test/test-client.d.ts +0 -5
- package/dist/test/test-client.d.ts.map +0 -1
- package/dist/test/test-client.js +0 -86
- package/dist/test/test-client.js.map +0 -1
- package/dist/test/test-embedding.d.ts +0 -6
- package/dist/test/test-embedding.d.ts.map +0 -1
- package/dist/test/test-embedding.js +0 -142
- package/dist/test/test-embedding.js.map +0 -1
- package/dist/test/test-error-logging.d.ts +0 -7
- package/dist/test/test-error-logging.d.ts.map +0 -1
- package/dist/test/test-error-logging.js +0 -105
- package/dist/test/test-error-logging.js.map +0 -1
- package/dist/test/test-forgetting.d.ts +0 -6
- package/dist/test/test-forgetting.d.ts.map +0 -1
- package/dist/test/test-forgetting.js +0 -154
- package/dist/test/test-forgetting.js.map +0 -1
- package/dist/test/test-gemini-embedding.d.ts +0 -7
- package/dist/test/test-gemini-embedding.d.ts.map +0 -1
- package/dist/test/test-gemini-embedding.js +0 -134
- package/dist/test/test-gemini-embedding.js.map +0 -1
- package/dist/test/test-http-server-v2-simple.d.ts +0 -6
- package/dist/test/test-http-server-v2-simple.d.ts.map +0 -1
- package/dist/test/test-http-server-v2-simple.js +0 -131
- package/dist/test/test-http-server-v2-simple.js.map +0 -1
- package/dist/test/test-http-server-v2.d.ts +0 -7
- package/dist/test/test-http-server-v2.d.ts.map +0 -1
- package/dist/test/test-http-server-v2.js +0 -529
- package/dist/test/test-http-server-v2.js.map +0 -1
- package/dist/test/test-lightweight-embedding.d.ts +0 -6
- package/dist/test/test-lightweight-embedding.d.ts.map +0 -1
- package/dist/test/test-lightweight-embedding.js +0 -189
- package/dist/test/test-lightweight-embedding.js.map +0 -1
- package/dist/test/test-m1-completion.d.ts +0 -7
- package/dist/test/test-m1-completion.d.ts.map +0 -1
- package/dist/test/test-m1-completion.js +0 -124
- package/dist/test/test-m1-completion.js.map +0 -1
- package/dist/test/test-memory-injection-prompt.d.ts +0 -2
- package/dist/test/test-memory-injection-prompt.d.ts.map +0 -1
- package/dist/test/test-memory-injection-prompt.js +0 -299
- package/dist/test/test-memory-injection-prompt.js.map +0 -1
- package/dist/test/test-performance-alerts.d.ts +0 -7
- package/dist/test/test-performance-alerts.d.ts.map +0 -1
- package/dist/test/test-performance-alerts.js +0 -109
- package/dist/test/test-performance-alerts.js.map +0 -1
- package/dist/test/test-performance-monitor.d.ts +0 -2
- package/dist/test/test-performance-monitor.d.ts.map +0 -1
- package/dist/test/test-performance-monitor.js +0 -182
- package/dist/test/test-performance-monitor.js.map +0 -1
- package/dist/test/test-performance-monitoring.d.ts +0 -6
- package/dist/test/test-performance-monitoring.d.ts.map +0 -1
- package/dist/test/test-performance-monitoring.js +0 -156
- package/dist/test/test-performance-monitoring.js.map +0 -1
- package/dist/test/test-search.d.ts +0 -5
- package/dist/test/test-search.d.ts.map +0 -1
- package/dist/test/test-search.js +0 -141
- package/dist/test/test-search.js.map +0 -1
- package/dist/test/test-simple-alerts.d.ts +0 -6
- package/dist/test/test-simple-alerts.d.ts.map +0 -1
- package/dist/test/test-simple-alerts.js +0 -106
- package/dist/test/test-simple-alerts.js.map +0 -1
- package/dist/test/test-vector-search-engine.d.ts +0 -2
- package/dist/test/test-vector-search-engine.d.ts.map +0 -1
- package/dist/test/test-vector-search-engine.js +0 -225
- package/dist/test/test-vector-search-engine.js.map +0 -1
- package/docker-compose.dev.yml +0 -50
- package/docker-compose.prod.yml +0 -77
- package/docker-compose.yml +0 -43
- package/docs/en/Memento-Goals.md +0 -217
- package/docs/en/Memento-M1-DetailSpecs.md +0 -130
- package/docs/en/Memento-Milestones.md +0 -135
- package/docs/en/Search-Ranking-Memory-Decay-Formulas.md +0 -177
- package/docs/en/api-reference.md +0 -658
- package/docs/en/architecture.md +0 -1302
- package/docs/en/developer-guide.md +0 -1005
- package/docs/en/user-manual.md +0 -595
- package/docs/ko/Memento-Goals.md +0 -217
- package/docs/ko/Memento-M1-DetailSpecs.md +0 -130
- package/docs/ko/Memento-Milestones.md +0 -134
- package/docs/ko/Search-Ranking-Memory-Decay-Formulas.md +0 -177
- package/docs/ko/api-reference.md +0 -658
- package/docs/ko/architecture.md +0 -1302
- package/docs/ko/developer-guide.md +0 -1006
- package/docs/ko/embedding-api-reference.md +0 -122
- package/docs/ko/embedding-configuration.md +0 -62
- package/docs/ko/embedding-performance-benchmark.md +0 -62
- package/docs/ko/embedding-service-guide.md +0 -314
- package/docs/ko/user-manual.md +0 -595
- package/env.example +0 -49
- package/install.sh +0 -191
- package/mcp-http-client.js +0 -218
- package/mcp.json +0 -0
- package/packages/mcp-client/docs/API-REFERENCE.md +0 -560
- package/packages/mcp-client/docs/BEST-PRACTICES.md +0 -564
- package/packages/mcp-client/docs/MIGRATION-GUIDE.md +0 -344
- package/packages/mcp-client/docs/PERFORMANCE-GUIDE.md +0 -476
- package/packages/mcp-client/docs/TROUBLESHOOTING.md +0 -564
- package/packages/mcp-client/package-lock.json +0 -907
- package/packages/mcp-client/package.json +0 -58
- package/packages/mcp-client/performance-optimizer.js +0 -428
- package/packages/mcp-client/test-basic.js +0 -65
- package/packages/mcp-client/test-integration.js +0 -366
- package/src/algorithms/forgetting-algorithm.spec.ts +0 -538
- package/src/algorithms/forgetting-algorithm.ts +0 -243
- package/src/algorithms/hybrid-search-engine.spec.ts +0 -484
- package/src/algorithms/hybrid-search-engine.ts +0 -489
- package/src/algorithms/search-engine.spec.ts +0 -429
- package/src/algorithms/search-engine.ts +0 -392
- package/src/algorithms/search-ranking.spec.ts +0 -293
- package/src/algorithms/search-ranking.ts +0 -407
- package/src/algorithms/spaced-repetition.spec.ts +0 -510
- package/src/algorithms/spaced-repetition.ts +0 -238
- package/src/algorithms/vector-search-engine.ts +0 -505
- package/src/client/index.spec.ts +0 -427
- package/src/client/index.ts +0 -222
- package/src/config/index.spec.ts +0 -339
- package/src/config/index.ts +0 -106
- package/src/database/init.spec.ts +0 -239
- package/src/database/init.ts +0 -130
- package/src/database/migrate.spec.ts +0 -293
- package/src/database/migrate.ts +0 -94
- package/src/database/migrations/001_add_embedding_metadata.sql +0 -29
- package/src/npm-client/context-injector.spec.ts +0 -335
- package/src/npm-client/context-injector.ts +0 -412
- package/src/npm-client/index.spec.ts +0 -108
- package/src/npm-client/index.ts +0 -96
- package/src/npm-client/memento-client.spec.ts +0 -549
- package/src/npm-client/memento-client.ts +0 -501
- package/src/npm-client/memory-manager.spec.ts +0 -374
- package/src/npm-client/memory-manager.ts +0 -414
- package/src/npm-client/types.spec.ts +0 -427
- package/src/npm-client/types.ts +0 -296
- package/src/npm-client/utils.spec.ts +0 -355
- package/src/npm-client/utils.ts +0 -423
- package/src/scripts/copy-assets.js +0 -37
- package/src/server/http-server.spec.ts +0 -648
- package/src/server/http-server.ts +0 -1030
- package/src/server/index-backup.ts +0 -875
- package/src/server/index-refactored.ts +0 -237
- package/src/server/index.spec.ts +0 -281
- package/src/server/index.ts +0 -347
- package/src/server/simple-mcp-server.spec.ts +0 -207
- package/src/server/simple-mcp-server.ts +0 -173
- package/src/services/async-optimizer.spec.ts +0 -569
- package/src/services/async-optimizer.ts +0 -484
- package/src/services/batch-scheduler.ts +0 -759
- package/src/services/cache-service.spec.ts +0 -372
- package/src/services/cache-service.ts +0 -434
- package/src/services/database-optimizer.spec.ts +0 -344
- package/src/services/database-optimizer.ts +0 -450
- package/src/services/embedding-provider-factory.ts +0 -173
- package/src/services/embedding-service.spec.ts +0 -342
- package/src/services/embedding-service.ts +0 -333
- package/src/services/error-logging-service.spec.ts +0 -416
- package/src/services/error-logging-service.ts +0 -383
- package/src/services/forgetting-policy-service.spec.ts +0 -140
- package/src/services/forgetting-policy-service.ts +0 -334
- package/src/services/gemini-embedding-service.spec.ts +0 -463
- package/src/services/gemini-embedding-service.ts +0 -283
- package/src/services/lightweight-embedding-service.spec.ts +0 -458
- package/src/services/lightweight-embedding-service.ts +0 -324
- package/src/services/memory-embedding-service.spec.ts +0 -417
- package/src/services/memory-embedding-service.ts +0 -289
- package/src/services/minilm-embedding-service.spec.ts +0 -104
- package/src/services/minilm-embedding-service.ts +0 -262
- package/src/services/performance-alert-service.spec.ts +0 -517
- package/src/services/performance-alert-service.ts +0 -477
- package/src/services/performance-monitor.spec.ts +0 -401
- package/src/services/performance-monitor.ts +0 -532
- package/src/services/performance-monitoring-integration.spec.ts +0 -478
- package/src/services/performance-monitoring-integration.ts.bak +0 -276
- package/src/services/unified-embedding-service.spec.ts +0 -224
- package/src/services/unified-embedding-service.ts +0 -255
- package/src/test/debug-http-v2.ts +0 -30
- package/src/test/embedding-integration-test.spec.ts +0 -295
- package/src/test/embedding-integration-test.ts +0 -295
- package/src/test/embedding-performance-benchmark.spec.ts +0 -354
- package/src/test/embedding-performance-benchmark.ts +0 -312
- package/src/test/performance-benchmark.ts +0 -565
- package/src/test/test-alerts-direct.ts +0 -136
- package/src/test/test-batch-scheduler-simple.spec.ts +0 -122
- package/src/test/test-batch-scheduler.spec.ts +0 -453
- package/src/test/test-batch-scheduler.ts +0 -182
- package/src/test/test-client.ts +0 -97
- package/src/test/test-embedding.ts +0 -153
- package/src/test/test-error-handling.spec.ts +0 -575
- package/src/test/test-error-logging.ts +0 -117
- package/src/test/test-forgetting.ts +0 -162
- package/src/test/test-gemini-embedding.ts +0 -159
- package/src/test/test-http-server-v2-simple.ts +0 -147
- package/src/test/test-http-server-v2.ts +0 -586
- package/src/test/test-hybrid-search-engine.spec.ts +0 -521
- package/src/test/test-integration-fixed.spec.ts +0 -612
- package/src/test/test-integration.spec.ts +0 -463
- package/src/test/test-lightweight-embedding.ts +0 -208
- package/src/test/test-m1-completion.spec.ts +0 -614
- package/src/test/test-m1-completion.ts +0 -141
- package/src/test/test-m1-integration.spec.ts +0 -514
- package/src/test/test-memory-injection-prompt.spec.ts +0 -650
- package/src/test/test-memory-injection-prompt.ts +0 -391
- package/src/test/test-performance-alerts.ts +0 -125
- package/src/test/test-performance-monitor-updates.spec.ts +0 -490
- package/src/test/test-performance-monitor.spec.ts +0 -284
- package/src/test/test-performance-monitor.ts +0 -228
- package/src/test/test-performance-monitoring.ts +0 -171
- package/src/test/test-search.ts +0 -151
- package/src/test/test-simple-alerts.ts +0 -136
- package/src/test/test-vector-search-engine.spec.ts +0 -408
- package/src/test/test-vector-search-engine.ts +0 -303
- package/src/tools/base-tool.ts +0 -189
- package/src/tools/cleanup-memory-tool.ts +0 -77
- package/src/tools/database-optimize-tool.ts +0 -79
- package/src/tools/error-stats.ts +0 -119
- package/src/tools/forget-tool.spec.ts +0 -613
- package/src/tools/forget-tool.ts +0 -454
- package/src/tools/forgetting-stats-tool.ts +0 -47
- package/src/tools/index.ts +0 -71
- package/src/tools/memory-injection-prompt.ts +0 -257
- package/src/tools/performance-alerts.ts +0 -226
- package/src/tools/performance-stats-tool.ts +0 -48
- package/src/tools/pin-tool.spec.ts +0 -497
- package/src/tools/pin-tool.ts +0 -277
- package/src/tools/recall-tool.spec.ts +0 -475
- package/src/tools/recall-tool.ts +0 -389
- package/src/tools/remember-tool.spec.ts +0 -469
- package/src/tools/remember-tool.ts +0 -112
- package/src/tools/resolve-error.ts +0 -69
- package/src/tools/tool-registry.ts +0 -417
- package/src/tools/types.ts +0 -63
- package/src/tools/unpin-tool.spec.ts +0 -549
- package/src/tools/unpin-tool.ts +0 -306
- package/src/types/embedding.types.ts +0 -78
- package/src/types/index.spec.ts +0 -420
- package/src/types/index.ts +0 -117
- package/src/utils/database.spec.ts +0 -77
- package/src/utils/database.ts +0 -458
- package/src/utils/stopwords.ts +0 -128
- package/start-docker-setup.bat +0 -38
- package/static/logo.png +0 -0
- package/static/memento_logo.svg +0 -2
- package/test-docker.js +0 -103
- package/tsconfig.json +0 -46
- package/vitest.config.ts +0 -23
package/docs/ko/Memento-Goals.md
DELETED
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
# Memento Goals
|
|
2
|
-
|
|
3
|
-
## 1. 목표 정리
|
|
4
|
-
|
|
5
|
-
**목표**: 에이전트가 대화/작업 맥락을 잃지 않도록, 사람의 기억 체계(작업기억·일화기억·의미기억·절차기억)를 모사한 스토리지+검색+요약+망각 메커니즘을 제공.
|
|
6
|
-
|
|
7
|
-
**비목표**: 초대규모 RAG 플랫폼, 범용 데이터레이크. 초기엔 개인/워크스페이스 단위의 장기 기억과 대화-세션 간 전이에 집중.
|
|
8
|
-
|
|
9
|
-
### 사람의 기억 모델에 대한 근거
|
|
10
|
-
|
|
11
|
-
- **일화(episodic)/의미(semantic) 분리**: Tulving 계보 – 일화는 사건, 의미는 지식. 두 체계는 상호의존적. [PMC](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2657600/) +1
|
|
12
|
-
|
|
13
|
-
- **작업기억(working memory)**: 중앙집행·음운고리·시공간 메모리 구성으로 "현재 처리 중인 정보"를 관리. [Simply Psychology](https://www.simplypsychology.org/working-memory.html) +1
|
|
14
|
-
|
|
15
|
-
- **망각/간격반복**: 에빙하우스 곡선과 "주기적 리마인드"가 장기 유지에 유리. [PMC](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2657600/) +1
|
|
16
|
-
|
|
17
|
-
### MCP 적용 근거
|
|
18
|
-
|
|
19
|
-
MCP는 Tools/Resources/Prompts를 표준으로 노출하고, 클라이언트(Claude, ChatGPT, Cursor 등)에서 쉽게 연결 가능. [WorkOS](https://workos.com/) +3, [Model Context Protocol](https://modelcontextprotocol.io/) +3
|
|
20
|
-
|
|
21
|
-
## 2. 시스템 개요(컴포넌트)
|
|
22
|
-
|
|
23
|
-
### Memory MCP Server
|
|
24
|
-
|
|
25
|
-
- **프로토콜**: MCP(spec 2025-03-26)
|
|
26
|
-
- **인터페이스**: tools(기억 쓰기·검색·고정·삭제 등), resources(읽기 전용 뷰), prompts(컨텍스트 주입 템플릿). [Model Context Protocol](https://modelcontextprotocol.io/) +1
|
|
27
|
-
|
|
28
|
-
### 스토리지
|
|
29
|
-
|
|
30
|
-
- **기본**: PostgreSQL + pgvector(벡터/메타/트랜잭션 같이 관리). [GitHub](https://github.com/pgvector/pgvector) +1
|
|
31
|
-
- **대안**: SQLite+FTS5(+lancedb)로 임베디드, 또는 Qdrant/Milvus로 분리
|
|
32
|
-
|
|
33
|
-
### 임베딩 & 요약
|
|
34
|
-
|
|
35
|
-
텍스트 임베딩 모델(문장 임베딩), "정보 압축 요약기(map-reduce)" 파이프라인.
|
|
36
|
-
|
|
37
|
-
### 스케줄러/워커
|
|
38
|
-
|
|
39
|
-
"수면 통합" 배치(야간 클러스터링·요약·규칙 추출), "망각/리뷰" 배치(재노출·삭제 후보 선정).
|
|
40
|
-
|
|
41
|
-
## 3. 데이터 모델(사람 기억에 대응)
|
|
42
|
-
|
|
43
|
-
### 핵심 테이블
|
|
44
|
-
|
|
45
|
-
#### memory_item
|
|
46
|
-
- `id`, `type`(working|episodic|semantic|procedural), `title`, `content`, `source`(chat|tool|file|url), `agent_id`, `user_id`, `project_id`
|
|
47
|
-
- `created_at`, `last_accessed_at`, `importance`(0~1), `pinned`(bool), `privacy_scope`(private|team|public), `origin_trace`(json)
|
|
48
|
-
|
|
49
|
-
#### memory_embedding
|
|
50
|
-
- `memory_id` FK, `embedding` vector, `dim`
|
|
51
|
-
|
|
52
|
-
#### memory_tag (N:N)
|
|
53
|
-
- 태그(예: tech:mariadb, pref:coffee, task:ads-settlement)
|
|
54
|
-
|
|
55
|
-
#### memory_link
|
|
56
|
-
- 기억 간 관계(cause_of, derived_from, duplicates, contradicts) – 의미적 연결망
|
|
57
|
-
|
|
58
|
-
#### feedback_event
|
|
59
|
-
- `memory_id`, `event`(used|edited|neglected|helpful|not_helpful), `score`, `ts`
|
|
60
|
-
|
|
61
|
-
### 작업기억(working) 버퍼
|
|
62
|
-
|
|
63
|
-
#### wm_buffer
|
|
64
|
-
- `session_id`, `items`(json), `token_budget`, `expires_at`
|
|
65
|
-
|
|
66
|
-
세션 종료/토큰 한도 초과 시 **일화(episodic)**으로 스냅샷 전환.
|
|
67
|
-
|
|
68
|
-
## 4. 검색·랭킹·망각(수식 포함)
|
|
69
|
-
|
|
70
|
-
### 4.1 검색 스코어
|
|
71
|
-
|
|
72
|
-
최종 점수 S:
|
|
73
|
-
|
|
74
|
-
```
|
|
75
|
-
S = α * relevance + β * recency + γ * importance + δ * usage - ε * duplication_penalty
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
- **relevance**: 코사인 유사도(임베딩) + keyword TF-IDF 보정
|
|
79
|
-
- **recency**: `exp(-λ * age_days)` (에빙하우스 계열 망각 함수를 응용; λ는 도메인별 튜닝) [PMC](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2657600/) +1
|
|
80
|
-
- **importance**: 명시/추론("사용자 선호·규칙·장기목표"는 가중치↑)
|
|
81
|
-
- **usage**: 조회·인용·재사용 빈도 로그 스케일
|
|
82
|
-
- **duplication_penalty**: 군집 내 유사 항목 중복 감점
|
|
83
|
-
|
|
84
|
-
### 4.2 망각·간격반복
|
|
85
|
-
|
|
86
|
-
- **소프트 삭제 후보 큐**: S가 낮고 `last_accessed_at` 오래된 항목 중 비핀(pinned)·비정책 항목
|
|
87
|
-
- **리텐션 정책**: 태그/스코프별 TTL(예: wm: 48시간, episodic: 90일, semantic: 무기한)
|
|
88
|
-
- **간격반복**: 중요도 상위 항목은 리뷰 이벤트(카드 형태 리마인드)를 생성해 재노출
|
|
89
|
-
|
|
90
|
-
### 4.3 의미 통합("수면 통합")
|
|
91
|
-
|
|
92
|
-
최근 episodic을 군집화→ 충돌/일관성 검사→ 규칙·사실 형태의 semantic 생성
|
|
93
|
-
|
|
94
|
-
CLS 가설(해마-네오코텍스 보완 학습)을 모티프로 "빠른 일화→느린 의미 통합"을 구현. [PubMed](https://pubmed.ncbi.nlm.nih.gov/) +1
|
|
95
|
-
|
|
96
|
-
## 5. MCP 인터페이스 설계(도구/리소스/프롬프트)
|
|
97
|
-
|
|
98
|
-
### 5.1 tools (요약된 시그니처)
|
|
99
|
-
|
|
100
|
-
#### remember
|
|
101
|
-
- **입력**: `content`, `type?`, `tags?`, `importance?`, `source?`, `privacy_scope?`
|
|
102
|
-
- **출력**: `memory_id`
|
|
103
|
-
|
|
104
|
-
#### recall
|
|
105
|
-
- **입력**: `query`, `filters?`(type/tags/time/project/agent), `limit?`
|
|
106
|
-
- **출력**: `items[]`(snippet, score, recall_reason)
|
|
107
|
-
|
|
108
|
-
#### pin / unpin
|
|
109
|
-
|
|
110
|
-
#### forget
|
|
111
|
-
- 하드/소프트 삭제 옵션, GDPR식 "지우기 권리" 지원
|
|
112
|
-
|
|
113
|
-
#### summarize_thread
|
|
114
|
-
- 현재 세션 로그→ wm_buffer 요약→ episodic 저장
|
|
115
|
-
|
|
116
|
-
#### link
|
|
117
|
-
- 기억 간 관계 생성(원인·파생·중복·모순)
|
|
118
|
-
|
|
119
|
-
#### export
|
|
120
|
-
- NDJSON/Markdown/CSV 내보내기
|
|
121
|
-
|
|
122
|
-
#### feedback
|
|
123
|
-
- 사용성/정확성 피드백 수집(helpful, not_helpful, 정답 첨부)
|
|
124
|
-
|
|
125
|
-
**MCP 스펙 근거**: 툴/리소스/프롬프트를 표준화해 클라이언트가 자동 발견·호출·구성. [Model Context Protocol](https://modelcontextprotocol.io/) +1
|
|
126
|
-
|
|
127
|
-
### 5.2 resources
|
|
128
|
-
|
|
129
|
-
- `memory/{id}`: 읽기 전용 단일 뷰
|
|
130
|
-
- `memory/search?query=...`: 최근 검색 결과 캐시 리소스(클라이언트 사이드 프리뷰에 유용)
|
|
131
|
-
|
|
132
|
-
### 5.3 prompts
|
|
133
|
-
|
|
134
|
-
#### memory_injection
|
|
135
|
-
- **설명**: "이번 턴 답변 전에 '상위 5개 관련 기억 요약'을 컨텍스트로 주입"
|
|
136
|
-
- **파라미터**: `query`, `token_budget`
|
|
137
|
-
|
|
138
|
-
MCP Prompts 기능으로 에이전트가 쉽게 가져다 씀. [Model Context Protocol](https://modelcontextprotocol.io/)
|
|
139
|
-
|
|
140
|
-
## 6. 에이전트 실행 플로우
|
|
141
|
-
|
|
142
|
-
1. **WM 적재**: 현재 사용자 메시지 + 직전 n턴 요약을 `wm_buffer`에 정리
|
|
143
|
-
2. **질의 구성**: `query = user_msg + task + wm_summary`
|
|
144
|
-
3. **recall 호출**:
|
|
145
|
-
- 필터: `project_id`, `tags`, `type in {semantic, episodic}`
|
|
146
|
-
- 1차 ANN(벡터) → 2차 rerank(BM25/keyword + rule match)
|
|
147
|
-
- 중복 제거 & 압축: map-reduce 요약, 충돌은 `link(contradicts)`로 기록
|
|
148
|
-
4. **프롬프트 주입**: `prompts.memory_injection`으로 상위 K개를 투입
|
|
149
|
-
5. **답변 생성 후**:
|
|
150
|
-
- `remember`로 새로운 사실/선호/결정 기록
|
|
151
|
-
- `feedback(helpful)` 신호 반영
|
|
152
|
-
6. **배치 작업(야간)**: 군집화·요약 통합·망각/리마인드 스케줄링
|
|
153
|
-
|
|
154
|
-
## 7. 최소기능(MVP) 스펙
|
|
155
|
-
|
|
156
|
-
- 기억 쓰기/읽기/검색/핀/삭제 툴
|
|
157
|
-
- 일화/의미 두 타입만 우선 지원(작업기억은 세션 캐시로)
|
|
158
|
-
- **스코어**: `S = 0.5*relevance + 0.2*recency + 0.2*importance + 0.1*usage`
|
|
159
|
-
- **리텐션**: episodic 90d, semantic 무기한, wm 48h
|
|
160
|
-
- **저장소**: Postgres+pgvector, ivfflat 인덱스, cosine 거리. [GitHub](https://github.com/pgvector/pgvector) +1
|
|
161
|
-
- MCP `prompts.memory_injection` 1종
|
|
162
|
-
|
|
163
|
-
## 8. 예시: TypeScript MCP 서버 스켈레톤
|
|
164
|
-
|
|
165
|
-
```typescript
|
|
166
|
-
// package: mcp-memory-server
|
|
167
|
-
import { Server } from "@modelcontextprotocol/sdk/server";
|
|
168
|
-
import { z } from "zod";
|
|
169
|
-
import { recall, remember, pin, unpin, forget, summarizeThread, link, exportMem, feedback } from "./tools";
|
|
170
|
-
|
|
171
|
-
const server = new Server({ name: "mcp-memory", version: "0.1.0" });
|
|
172
|
-
|
|
173
|
-
// Tools
|
|
174
|
-
server.tool("remember", {
|
|
175
|
-
schema: z.object({
|
|
176
|
-
content: z.string(),
|
|
177
|
-
type: z.enum(["episodic","semantic"]).default("episodic"),
|
|
178
|
-
tags: z.array(z.string()).optional(),
|
|
179
|
-
importance: z.number().min(0).max(1).default(0.5),
|
|
180
|
-
source: z.string().optional(),
|
|
181
|
-
privacy_scope: z.enum(["private","team","public"]).default("private")
|
|
182
|
-
}),
|
|
183
|
-
handler: remember
|
|
184
|
-
});
|
|
185
|
-
|
|
186
|
-
server.tool("recall", {
|
|
187
|
-
schema: z.object({
|
|
188
|
-
query: z.string(),
|
|
189
|
-
filters: z.object({
|
|
190
|
-
type: z.array(z.enum(["episodic","semantic"])).optional(),
|
|
191
|
-
tags: z.array(z.string()).optional(),
|
|
192
|
-
project_id: z.string().optional(),
|
|
193
|
-
time_from: z.string().optional(),
|
|
194
|
-
time_to: z.string().optional()
|
|
195
|
-
}).optional(),
|
|
196
|
-
limit: z.number().default(8)
|
|
197
|
-
}),
|
|
198
|
-
handler: recall
|
|
199
|
-
});
|
|
200
|
-
|
|
201
|
-
// ... pin/unpin/forget/summarizeThread/link/export/feedback 등록 ...
|
|
202
|
-
|
|
203
|
-
// Resources
|
|
204
|
-
server.resource("memory/{id}", async (params) => {/* read-only view */});
|
|
205
|
-
|
|
206
|
-
// Prompts
|
|
207
|
-
server.prompt("memory_injection", {
|
|
208
|
-
params: [{ name: "query", required: true }, { name: "token_budget", required: false }],
|
|
209
|
-
getPrompt: async ({ query, token_budget = 1200 }) => {
|
|
210
|
-
const items = await recall({ query, limit: 6 });
|
|
211
|
-
const summary = await compress(items, token_budget);
|
|
212
|
-
return [{ role: "system", content: `관련 장기기억 요약:\n${summary}` }];
|
|
213
|
-
}
|
|
214
|
-
});
|
|
215
|
-
|
|
216
|
-
server.start();
|
|
217
|
-
```
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
# MCP Memory Server M1 상세 설계 문서
|
|
2
|
-
|
|
3
|
-
## 1. 목적
|
|
4
|
-
|
|
5
|
-
본 단계(M1)는 개인 사용자가 로컬 환경에서 가볍게 실행할 수 있는 기억 보조 MCP 서버를 구현하는 것을 목표로 한다.
|
|
6
|
-
데이터베이스는 별도의 설치 없이 사용할 수 있는 SQLite 임베디드 DB를 사용하며, MCP 인터페이스를 통해 기억 저장, 검색, 삭제, 고정 등의 기본 기능을 제공한다.
|
|
7
|
-
|
|
8
|
-
## 2. 전체 아키텍처
|
|
9
|
-
|
|
10
|
-
- **클라이언트**: MCP를 지원하는 IDE(예: Cursor) 또는 AI Agent
|
|
11
|
-
- **서버**: MCP Memory Server (Node.js/TypeScript 기반)
|
|
12
|
-
- **스토리지**: SQLite 데이터베이스(memory.db 파일)
|
|
13
|
-
|
|
14
|
-
**구조**:
|
|
15
|
-
```
|
|
16
|
-
[Client/Agent] ↔ [MCP Memory Server] ↔ [SQLite DB (memory.db)]
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## 3. 기능 범위
|
|
20
|
-
|
|
21
|
-
### 기억 저장 (remember)
|
|
22
|
-
- **입력**: content, type, tags, importance, privacy_scope
|
|
23
|
-
- **출력**: memory_id
|
|
24
|
-
- **동작**: 텍스트를 DB에 저장하고, 임베딩 생성 후 벡터 컬럼에 기록
|
|
25
|
-
|
|
26
|
-
### 기억 검색 (recall)
|
|
27
|
-
- **입력**: query, filters(type, tags, date), limit
|
|
28
|
-
- **출력**: 관련 기억 목록
|
|
29
|
-
- **동작**: FTS5(키워드) + VSS(벡터 검색) 결합
|
|
30
|
-
|
|
31
|
-
### 기억 삭제 (forget)
|
|
32
|
-
- **소프트 삭제**: TTL 만료 시 자동 제거
|
|
33
|
-
- **하드 삭제**: 사용자가 직접 호출
|
|
34
|
-
|
|
35
|
-
### 기억 고정/해제 (pin/unpin)
|
|
36
|
-
- 특정 기억을 TTL, 망각 정책에서 제외
|
|
37
|
-
|
|
38
|
-
## 4. 데이터베이스 설계 (SQLite)
|
|
39
|
-
|
|
40
|
-
### 4.1 메인 테이블
|
|
41
|
-
|
|
42
|
-
```sql
|
|
43
|
-
CREATE TABLE memory_item (
|
|
44
|
-
id TEXT PRIMARY KEY,
|
|
45
|
-
type TEXT CHECK (type IN ('working','episodic','semantic','procedural')),
|
|
46
|
-
content TEXT,
|
|
47
|
-
importance REAL,
|
|
48
|
-
privacy_scope TEXT CHECK (privacy_scope IN ('private','team','public')) DEFAULT 'private',
|
|
49
|
-
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
50
|
-
last_accessed TIMESTAMP,
|
|
51
|
-
pinned BOOLEAN DEFAULT FALSE
|
|
52
|
-
);
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### 4.2 인덱스
|
|
56
|
-
|
|
57
|
-
#### FTS5 (텍스트 검색)
|
|
58
|
-
```sql
|
|
59
|
-
CREATE VIRTUAL TABLE memory_item_fts USING fts5(content);
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
#### VSS (벡터 검색, 1536차원 예시)
|
|
63
|
-
```sql
|
|
64
|
-
CREATE VIRTUAL TABLE memory_item_vss USING vss0(embedding(1536));
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
## 5. MCP 인터페이스 (M1 한정)
|
|
68
|
-
|
|
69
|
-
### Tools
|
|
70
|
-
- `remember(content, type?, tags?, importance?, privacy_scope?)`
|
|
71
|
-
- `recall(query, filters?, limit?)`
|
|
72
|
-
- `forget(id, hard?)`
|
|
73
|
-
- `pin(id)` / `unpin(id)`
|
|
74
|
-
|
|
75
|
-
### Resources
|
|
76
|
-
- `memory/{id}` (단일 기억 읽기)
|
|
77
|
-
|
|
78
|
-
### Prompts
|
|
79
|
-
- `memory_injection(query, token_budget)`
|
|
80
|
-
- 상위 5개 관련 기억을 요약하여 프롬프트에 주입
|
|
81
|
-
|
|
82
|
-
## 6. 망각 정책
|
|
83
|
-
|
|
84
|
-
- **작업기억 (working)**: 48시간 유지 후 삭제
|
|
85
|
-
- **일화기억 (episodic)**: 90일 유지
|
|
86
|
-
- **의미기억 (semantic)**: 무기한
|
|
87
|
-
- **고정(pin)**: 삭제 대상에서 제외
|
|
88
|
-
|
|
89
|
-
주기적으로 실행되는 배치 작업(cron job)으로 만료된 레코드 정리.
|
|
90
|
-
|
|
91
|
-
## 7. 동작 흐름
|
|
92
|
-
|
|
93
|
-
### 기억 저장
|
|
94
|
-
1. 사용자가 `remember` 호출
|
|
95
|
-
2. DB에 기록 → FTS5 인덱스 업데이트 → 임베딩 생성 후 VSS 테이블 기록
|
|
96
|
-
|
|
97
|
-
### 기억 검색
|
|
98
|
-
1. 사용자가 `recall` 호출
|
|
99
|
-
2. FTS5로 키워드 검색 → VSS로 벡터 검색 → 점수 합산 → 상위 K개 반환
|
|
100
|
-
|
|
101
|
-
### 망각/삭제
|
|
102
|
-
1. 배치 작업으로 TTL 만료 항목 삭제
|
|
103
|
-
2. 사용자가 `forget` 호출 시 즉시 제거
|
|
104
|
-
|
|
105
|
-
## 8. 운영 및 배포
|
|
106
|
-
|
|
107
|
-
- **실행 환경**: Node.js (v20 이상)
|
|
108
|
-
- **배포 방법**: 로컬 실행
|
|
109
|
-
```bash
|
|
110
|
-
node memory-server.js
|
|
111
|
-
```
|
|
112
|
-
- **DB 관리**: 단일 memory.db 파일 (로컬 저장소에 보관)
|
|
113
|
-
- **백업/복원**: 파일 복사로 처리 가능
|
|
114
|
-
|
|
115
|
-
## 9. 한계와 다음 단계 고려
|
|
116
|
-
|
|
117
|
-
**한계**: 단일 사용자 전용, 권한 관리 없음
|
|
118
|
-
|
|
119
|
-
**확장 고려**:
|
|
120
|
-
- M2에서 API Key 인증 추가
|
|
121
|
-
- SQLite 서버 모드 전환
|
|
122
|
-
- 팀 협업 가능하도록 ACL(user_id, privacy_scope) 활용 예정
|
|
123
|
-
|
|
124
|
-
## 10. 체크리스트
|
|
125
|
-
|
|
126
|
-
- [ ] SQLite DB 초기 스키마 생성 완료
|
|
127
|
-
- [ ] MCP Tools (remember, recall, forget, pin/unpin) 구현 완료
|
|
128
|
-
- [ ] FTS5 + VSS 기반 검색 정상 동작
|
|
129
|
-
- [ ] TTL 기반 망각 정책 배치 스크립트 적용
|
|
130
|
-
- [ ] 로컬 환경에서 MCP Client와 연동 테스트 완료
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
# 📄 MCP Memory Server 설계 및 마일스톤 문서
|
|
2
|
-
## 🎯 비전
|
|
3
|
-
|
|
4
|
-
사람의 기억 구조(작업기억·일화기억·의미기억)를 모방한 AI Agent 기억 보조 MCP 서버를 구현한다.
|
|
5
|
-
|
|
6
|
-
- 개인(MVP): 단일 SQLite 파일 기반, 로컬에서 가볍게 실행
|
|
7
|
-
- 팀: 내부망 전용 서버 + 단일 API Key, SQLite + 직렬화 큐
|
|
8
|
-
- 조직: Postgres + pgvector + JWT 인증, SSO/LDAP 연동
|
|
9
|
-
|
|
10
|
-
## 🛠 마일스톤 개요
|
|
11
|
-
|
|
12
|
-
| 단계 | 대상 | 스토리지 | 인증 | 보안 범위 | 운영 방식 |
|
|
13
|
-
|------|------|----------|------|-----------|-----------|
|
|
14
|
-
| M1 | 개인 | SQLite 임베디드 | 없음 | 로컬 | 로컬 실행 |
|
|
15
|
-
| M2 | 팀 | SQLite 서버 모드 (WAL + 직렬화 큐) | 단일 API Key | 내부망 전용 | Docker 단일 컨테이너 |
|
|
16
|
-
| M3 | 조직 초입 | Postgres + pgvector | JWT (사용자별 토큰) | 내부망 or VPN | Docker Compose (서버+DB) |
|
|
17
|
-
| M4 | 조직 확장 | Postgres + HA 구성 | JWT + RBAC + SSO/LDAP | 기업 보안 정책 준수 | Kubernetes/클라우드 RDS |
|
|
18
|
-
## ⚙️ 단계별 설계
|
|
19
|
-
|
|
20
|
-
### 🔹 M1. 개인용 (MVP)
|
|
21
|
-
|
|
22
|
-
- **DB**: SQLite (memory.db)
|
|
23
|
-
- **인덱스**: FTS5, sqlite-vec (벡터 검색)
|
|
24
|
-
- **MCP Tools**: remember, recall, forget, pin
|
|
25
|
-
- **망각 정책**: TTL 기반 (working 48h, episodic 90d, semantic 무기한)
|
|
26
|
-
- **운영**: 로컬 실행 (node memory-server.js)
|
|
27
|
-
|
|
28
|
-
### 🔹 M2. 팀 협업 (내부망 전용 서버)
|
|
29
|
-
|
|
30
|
-
- **DB**: SQLite (WAL 모드)
|
|
31
|
-
- **쓰기 처리**: 서버 레벨 큐잉 → 직렬화
|
|
32
|
-
- **읽기 처리**: 다중 동시 읽기 가능
|
|
33
|
-
- **인증**: 단일 API Key (API_KEY=team-secret-key)
|
|
34
|
-
- **보안**: 내부망 전용 (외부 포트 차단)
|
|
35
|
-
- **운영**: Docker 단일 컨테이너
|
|
36
|
-
|
|
37
|
-
```yaml
|
|
38
|
-
services:
|
|
39
|
-
memory-server:
|
|
40
|
-
build: .
|
|
41
|
-
ports:
|
|
42
|
-
- "8080:8080"
|
|
43
|
-
volumes:
|
|
44
|
-
- ./data:/app/data
|
|
45
|
-
environment:
|
|
46
|
-
- DB_PATH=/app/data/memory.db
|
|
47
|
-
- API_KEY=team-secret-key
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
- **ACL**: privacy_scope (private | team) 적용
|
|
51
|
-
|
|
52
|
-
### 🔹 M3. 조직 초입 (Postgres 전환)
|
|
53
|
-
|
|
54
|
-
- **DB**: Postgres 15+, pgvector 확장
|
|
55
|
-
|
|
56
|
-
**스키마**:
|
|
57
|
-
|
|
58
|
-
```sql
|
|
59
|
-
CREATE TABLE memory_item (
|
|
60
|
-
id UUID PRIMARY KEY,
|
|
61
|
-
user_id TEXT NOT NULL,
|
|
62
|
-
project_id TEXT,
|
|
63
|
-
type TEXT CHECK (type IN ('working','episodic','semantic','procedural')),
|
|
64
|
-
content TEXT,
|
|
65
|
-
importance REAL,
|
|
66
|
-
privacy_scope TEXT CHECK (privacy_scope IN ('private','team','public')) DEFAULT 'private',
|
|
67
|
-
created_at TIMESTAMPTZ DEFAULT now(),
|
|
68
|
-
last_accessed TIMESTAMPTZ,
|
|
69
|
-
embedding vector(1536),
|
|
70
|
-
content_tsv tsvector GENERATED ALWAYS AS (to_tsvector('english', content)) STORED
|
|
71
|
-
);
|
|
72
|
-
CREATE INDEX ON memory_item USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100);
|
|
73
|
-
CREATE INDEX ON memory_item USING GIN (content_tsv);
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
- **인증**: JWT 기반 사용자별 토큰 (user_id claim 포함)
|
|
77
|
-
- **보안**: 내부망 or VPN 제한
|
|
78
|
-
- **운영**: Docker Compose (Memory Server + Postgres)
|
|
79
|
-
|
|
80
|
-
### 🔹 M4. 조직 확장 (고가용성 + 기업 보안)
|
|
81
|
-
|
|
82
|
-
- **DB**: Postgres 클러스터 (HA 구성, 클라우드 RDS 가능)
|
|
83
|
-
- **인증**: JWT + RBAC + SSO/LDAP 연동
|
|
84
|
-
- **권한 모델**:
|
|
85
|
-
- privacy_scope: private/team/public
|
|
86
|
-
- project_id: 워크스페이스 단위
|
|
87
|
-
- RBAC(Role-Based Access Control) → 관리자/편집자/조회자
|
|
88
|
-
- **운영**: Kubernetes, Helm Chart 배포, 모니터링(Prometheus)
|
|
89
|
-
- **추가 기능**: 자동 아카이빙, 백업/복원, GDPR-style 삭제
|
|
90
|
-
|
|
91
|
-
## 📦 MCP 인터페이스 (공통)
|
|
92
|
-
|
|
93
|
-
### Tools
|
|
94
|
-
|
|
95
|
-
- `remember(content, type, tags?, importance?, privacy_scope?)`
|
|
96
|
-
- `recall(query, filters?, limit?)`
|
|
97
|
-
- `pin(id), unpin(id)`
|
|
98
|
-
- `forget(id, hard?)`
|
|
99
|
-
- `summarize_thread(session_id)`
|
|
100
|
-
- `link(src, dst, rel)`
|
|
101
|
-
- `export(format)`
|
|
102
|
-
- `feedback(memory_id, helpful?)`
|
|
103
|
-
|
|
104
|
-
### Resources
|
|
105
|
-
|
|
106
|
-
- `memory/{id}`
|
|
107
|
-
- `memory/search?query=...`
|
|
108
|
-
|
|
109
|
-
### Prompts
|
|
110
|
-
|
|
111
|
-
- `memory_injection(query, token_budget)` → 상위 K개 관련 기억 요약 주입
|
|
112
|
-
|
|
113
|
-
## 🔐 보안 모델 정리
|
|
114
|
-
|
|
115
|
-
- **M1**: 없음 (로컬 전용)
|
|
116
|
-
- **M2**: 단일 API Key (팀 공유)
|
|
117
|
-
- **M3**: JWT (사용자별 토큰, 조직 계정 서버 연동 가능)
|
|
118
|
-
- **M4**: JWT + RBAC + SSO/LDAP → 기업 보안 정책 준수
|
|
119
|
-
|
|
120
|
-
## 📑 마이그레이션 가이드 요약
|
|
121
|
-
|
|
122
|
-
1. SQLite에서 memory_item.csv 추출
|
|
123
|
-
2. Postgres에 스키마 생성 (pgvector, tsvector)
|
|
124
|
-
3. CSV import → `\copy`
|
|
125
|
-
4. embedding은 재계산 후 업데이트
|
|
126
|
-
5. MCP Memory Server의 DB 드라이버만 교체
|
|
127
|
-
|
|
128
|
-
## ✅ 체크리스트
|
|
129
|
-
|
|
130
|
-
- [ ] 개인용 SQLite 서버 완성
|
|
131
|
-
- [ ] 팀 단계 Docker 배포 + API Key 적용
|
|
132
|
-
- [ ] Postgres 마이그레이션 문서 완성
|
|
133
|
-
- [ ] 조직 단계 JWT 인증 연동
|
|
134
|
-
- [ ] SSO/LDAP 붙이는 로드맵 확정
|
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
# 검색 랭킹 및 망각을 위한 수식
|
|
2
|
-
|
|
3
|
-
## 1) 최종 랭킹 점수
|
|
4
|
-
|
|
5
|
-
$$S = \alpha \cdot \text{relevance} + \beta \cdot \text{recency} + \gamma \cdot \text{importance} + \delta \cdot \text{usage} - \varepsilon \cdot \text{duplication\_penalty}$$
|
|
6
|
-
|
|
7
|
-
**기본 계수(M1 추천)**: $\alpha=0.50$, $\beta=0.20$, $\gamma=0.20$, $\delta=0.10$, $\varepsilon=0.15$
|
|
8
|
-
|
|
9
|
-
**의미**: 후보 m에 대해 관련성(relevance)과 최근성(recency), 중요도(importance), 사용성(usage)을 올리고, 중복(duplication_penalty)을 깎는다.
|
|
10
|
-
|
|
11
|
-
**실무 팁**: 처음엔 위 기본값으로 시작 → A/B 테스트로 $\alpha$, $\beta$를 조정하고, 결과 다양성이 부족하면 $\varepsilon$를 키운다.
|
|
12
|
-
|
|
13
|
-
## 2) 관련성(relevance) 구성
|
|
14
|
-
|
|
15
|
-
$$\text{relevance} = w_e \cdot \text{sim}_e + w_k \cdot \text{bm25\_norm} + w_t \cdot \text{tag\_match} + w_p \cdot \text{title\_hit}$$
|
|
16
|
-
|
|
17
|
-
**기본 가중치(M1)**: $w_e=0.60$, $w_k=0.30$, $w_t=0.05$, $w_p=0.05$
|
|
18
|
-
|
|
19
|
-
### (1) 임베딩 유사도(코사인)
|
|
20
|
-
|
|
21
|
-
$$\text{sim}_e = \max(0, \cos(\mathbf{E}(q), \mathbf{E}(m)))$$
|
|
22
|
-
|
|
23
|
-
$\mathbf{E}(x)$는 임베딩 함수. 코사인 값이 음수가 나오는 모델이라면 0으로 클램프해 점수 음수화를 방지.
|
|
24
|
-
|
|
25
|
-
### (2) 키워드(BM25의 정규화)
|
|
26
|
-
|
|
27
|
-
$$\text{bm25\_norm} = \frac{\text{BM25}}{\text{BM25} + k_{\text{norm}}}$$
|
|
28
|
-
|
|
29
|
-
권장 $k_{\text{norm}}=2.0$. 어떤 쿼리든 [0,1]로 매핑해 다른 피처와 합치기 쉽다.
|
|
30
|
-
|
|
31
|
-
### (3) 태그 매칭(자카드 유사도)
|
|
32
|
-
|
|
33
|
-
$$\text{tag\_match} = \frac{|T_q \cap T_m|}{|T_q \cup T_m|}$$
|
|
34
|
-
|
|
35
|
-
쿼리 태그($T_q$)와 문서 태그($T_m$) 겹침 정도. 태그를 적극 쓰면 검색 품질이 눈에 띄게 오른다.
|
|
36
|
-
|
|
37
|
-
### (4) 타이틀 매치(정확·접두·N-gram 가산)
|
|
38
|
-
|
|
39
|
-
$$\text{title\_hit} = I_{\text{exact}} \cdot 1.0 + I_{\text{prefix}} \cdot 0.5 + I_{\text{ngram}} \cdot 0.2$$
|
|
40
|
-
|
|
41
|
-
$I_*$는 해당 조건 충족 시 1, 아니면 0. 세밀한 튜닝 구간.
|
|
42
|
-
|
|
43
|
-
### 후보 생성 팁(2단계 검색 권장)
|
|
44
|
-
|
|
45
|
-
1차(ANN): 임베딩 상위 $N_e$개, 2차(BM25): 키워드 상위 $N_k$개 → 합집합을 후보 세트로 만들고 위 relevance로 재랭킹.
|
|
46
|
-
|
|
47
|
-
## 3) 최근성(recency) = 반감기 기반 지수 감쇠
|
|
48
|
-
|
|
49
|
-
$$\text{recency} = \exp\left(-\frac{\ln(2) \cdot \text{age\_days}}{\text{half\_life}(\text{type})}\right)$$
|
|
50
|
-
|
|
51
|
-
- $\text{half\_life}(\text{working})=2$
|
|
52
|
-
- $\text{half\_life}(\text{episodic})=30$
|
|
53
|
-
- $\text{half\_life}(\text{semantic})=180$ (단위: 일)
|
|
54
|
-
|
|
55
|
-
**의미**: 각 타입별 기억의 반감기를 다르게 둬서, 작업기억은 빠르게 색이 바래고 의미기억은 오래 간다.
|
|
56
|
-
|
|
57
|
-
**튜닝**: 도메인이 빠르면(예: 이슈 대응 노트) half_life를 더 짧게, 지식 베이스는 더 길게.
|
|
58
|
-
|
|
59
|
-
## 4) 중요도(importance) = 사용자 가중 + 시스템 가중
|
|
60
|
-
|
|
61
|
-
$$\text{importance} = \text{clamp}(\text{imp\_user} + 0.20 \cdot \text{pinned} + \text{type\_boost}, 0, 1)$$
|
|
62
|
-
|
|
63
|
-
- $\text{imp\_user} \in [0,1]$: 사용자가 저장 시 준 중요도(기본 0.5)
|
|
64
|
-
- $\text{pinned} \in \{0,1\}$: 고정 시 1 (망각·감쇠에서 보호)
|
|
65
|
-
- $\text{type\_boost}$: semantic=+0.10, episodic=0.00, working=−0.05 (예시)
|
|
66
|
-
- $\text{clamp}(a,0,1)$: 0~1 범위로 자르기
|
|
67
|
-
|
|
68
|
-
**팁**: imp_user를 그대로 쓰기보단, 프로젝트별 정책(예: project:정산 +0.05)을 더해도 좋다.
|
|
69
|
-
|
|
70
|
-
## 5) 사용성(usage) = 로그 스케일 집계의 정규화
|
|
71
|
-
|
|
72
|
-
$$\text{usage\_raw} = \log(1 + \text{view\_cnt}) + 2 \cdot \log(1 + \text{cite\_cnt}) + 0.5 \cdot \log(1 + \text{edit\_cnt})$$
|
|
73
|
-
|
|
74
|
-
$$\text{usage} = \frac{\text{usage\_raw} - \text{min\_batch}}{\text{max\_batch} - \text{min\_batch} + \varepsilon}$$
|
|
75
|
-
|
|
76
|
-
$\text{cite\_cnt}$(재사용/인용) 가중치를 가장 높게. $\varepsilon$는 $1e-6$ 같은 작은 값.
|
|
77
|
-
|
|
78
|
-
**배치 정규화 이유**: 문서별 절대치 편차를 줄여 쿼리·세션마다 안정적 스케일을 보장.
|
|
79
|
-
|
|
80
|
-
## 6) 중복 패널티(duplication_penalty) = MMR식 다양성 제어
|
|
81
|
-
|
|
82
|
-
$$\text{duplication\_penalty} = \max_{j \in R} \text{sim}_e(m, j)$$
|
|
83
|
-
|
|
84
|
-
$R$: 이미 현재 결과 리스트에 선정된 항목 집합
|
|
85
|
-
|
|
86
|
-
**해석**: 새 후보 m이 기존 선정 결과와 가장 비슷한 정도를 패널티로 준다.
|
|
87
|
-
|
|
88
|
-
결과 다양성이 부족하면 $\varepsilon$(최종식의 계수)를 키우거나, 아래의 MMR 후처리를 사용.
|
|
89
|
-
|
|
90
|
-
### MMR 후처리(선택)
|
|
91
|
-
|
|
92
|
-
$$\text{MMR}(m) = \lambda \cdot S(m) - (1 - \lambda) \cdot \max_{j \in R} \text{sim}_e(m, j)$$
|
|
93
|
-
|
|
94
|
-
추천 $\lambda=0.8$. 최종 Top-K를 뽑을 때, S 점수에 다양성 항을 더 얹는 방식.
|
|
95
|
-
|
|
96
|
-
## 7) 망각(garbage collection)·리마인드(spaced review)
|
|
97
|
-
|
|
98
|
-
망각은 "삭제"만이 아니라 "재노출(복습)"도 포함한다. 점수 기반의 삭제 위험도와 리뷰 스케줄을 함께 쓰는 게 가장 안정적이다.
|
|
99
|
-
|
|
100
|
-
### 7.1 삭제 위험도(ForgetScore)
|
|
101
|
-
|
|
102
|
-
$$\text{ForgetScore} = u_1 \cdot (1 - \text{recency}) + u_2 \cdot (1 - \text{usage}) + u_3 \cdot \text{dup\_ratio} - u_4 \cdot \text{importance} - u_5 \cdot \text{pinned}$$
|
|
103
|
-
|
|
104
|
-
**기본 계수(M1)**: $u_1=0.35$, $u_2=0.25$, $u_3=0.20$, $u_4=0.15$, $u_5=0.30$
|
|
105
|
-
|
|
106
|
-
$\text{dup\_ratio}$: 군집 내 유사 항목 비중(없으면 duplication_penalty를 0~1로 정규화해 대체)
|
|
107
|
-
|
|
108
|
-
**해석**: 오래되고($1-\text{recency}↑$), 안 쓰이고($1-\text{usage}↑$), 중복 많을수록($\text{dup\_ratio}↑$) 지우기 쉽다. 중요하거나 핀인 항목은 보호.
|
|
109
|
-
|
|
110
|
-
### 삭제 정책(예시)
|
|
111
|
-
|
|
112
|
-
- **소프트 삭제 후보**: $\text{ForgetScore} \geq \theta_{\text{soft}}$ AND $\text{age\_days} \geq \text{TTL}_{\text{soft}}(\text{type})$
|
|
113
|
-
- **하드 삭제**: $\text{ForgetScore} \geq \theta_{\text{hard}}$ AND $\text{age\_days} \geq \text{TTL}_{\text{hard}}(\text{type})$
|
|
114
|
-
|
|
115
|
-
**권장값(M1)**:
|
|
116
|
-
- $\theta_{\text{soft}}=0.6$, $\theta_{\text{hard}}=0.8$
|
|
117
|
-
- $\text{TTL}_{\text{soft}}(\text{working})=2$, $\text{TTL}_{\text{soft}}(\text{episodic})=30$, $\text{TTL}_{\text{soft}}(\text{semantic})=\infty$
|
|
118
|
-
- $\text{TTL}_{\text{hard}}(\text{working})=7$, $\text{TTL}_{\text{hard}}(\text{episodic})=180$, $\text{TTL}_{\text{hard}}(\text{semantic})=\infty$
|
|
119
|
-
|
|
120
|
-
### 7.2 간격 반복(Spaced Review) 스케줄
|
|
121
|
-
|
|
122
|
-
$$p_{\text{recall}}(t) = \exp\left(-\frac{t}{\tau}\right)$$
|
|
123
|
-
|
|
124
|
-
$$\tau_{\text{next}} = \tau_{\text{prev}} \cdot (1 + a_1 \cdot \text{importance} + a_2 \cdot \text{usage} + a_3 \cdot \text{feedback\_helpful} - a_4 \cdot \text{feedback\_bad})$$
|
|
125
|
-
|
|
126
|
-
**추천 계수**: $a_1=0.6$, $a_2=0.4$, $a_3=0.5$, $a_4=0.7$
|
|
127
|
-
|
|
128
|
-
**의미**: 중요하고 자주 쓰이고, 유용하다고 표시된 기억은 **기억 반감기($\tau$)**가 늘어나서 리뷰 주기가 길어진다.
|
|
129
|
-
|
|
130
|
-
**스케줄링 조건(예시)**: $p_{\text{recall}}(t) \leq 0.7$가 되는 시점을 다음 리뷰 시점으로 잡아 리마인드 카드 발행.
|
|
131
|
-
|
|
132
|
-
### 간단 프리셋(복잡한 SM-2 대신 라이트 버전)
|
|
133
|
-
|
|
134
|
-
첫 저장 후 1일, 6일, 그 다음부터는 $\text{interval\_next} = \lceil \text{interval\_prev} \cdot (1 + 0.5 \cdot \text{importance} + 0.3 \cdot \text{usage}) \rceil$
|
|
135
|
-
|
|
136
|
-
## 8) 후보 생성, 재랭킹, 다양화 파이프라인(권장)
|
|
137
|
-
|
|
138
|
-
### CandidateGen
|
|
139
|
-
$$C = \text{TopN}_e(\text{ANN by sim}_e) \cup \text{TopN}_k(\text{BM25})$$
|
|
140
|
-
(권장 $N_e=50$, $N_k=50$)
|
|
141
|
-
|
|
142
|
-
### Feature Compute
|
|
143
|
-
각 $m \in C$에 대해 relevance, recency, importance, usage, duplication_penalty 계산
|
|
144
|
-
|
|
145
|
-
### Primary Score
|
|
146
|
-
$$S(m) = \alpha \cdot \text{relevance} + \beta \cdot \text{recency} + \gamma \cdot \text{importance} + \delta \cdot \text{usage} - \varepsilon \cdot \text{duplication\_penalty}$$
|
|
147
|
-
|
|
148
|
-
### Diversification (선택)
|
|
149
|
-
Greedy로 MMR 적용해 Top-K 생성
|
|
150
|
-
|
|
151
|
-
### Thresholding
|
|
152
|
-
$S(m) \geq \theta_{\text{keep}}$만 유지 (예: $\theta_{\text{keep}}=0.35$)
|
|
153
|
-
|
|
154
|
-
## 9) 정규화와 캘리브레이션
|
|
155
|
-
|
|
156
|
-
모든 부분 점수는 [0,1] 스케일을 유지하면 조합이 쉽다. 배치마다 분산이 큰 피처는 배치 정규화를 권장.
|
|
157
|
-
|
|
158
|
-
$$x_{\text{norm}} = \frac{x - \text{min\_batch}}{\text{max\_batch} - \text{min\_batch} + \varepsilon}$$
|
|
159
|
-
|
|
160
|
-
예: usage, duplication_penalty, bm25_norm에 적용
|
|
161
|
-
|
|
162
|
-
**장점**: 쿼리 편향, 컬렉션 편차를 줄여 점수 안정성↑
|
|
163
|
-
|
|
164
|
-
## 10) M1 기본 파라미터 표(요약)
|
|
165
|
-
|
|
166
|
-
| 항목 | 값 |
|
|
167
|
-
|------|-----|
|
|
168
|
-
| **최종식** | $\alpha=0.50$, $\beta=0.20$, $\gamma=0.20$, $\delta=0.10$, $\varepsilon=0.15$ |
|
|
169
|
-
| **relevance 가중** | $w_e=0.60$, $w_k=0.30$, $w_t=0.05$, $w_p=0.05$ |
|
|
170
|
-
| **recency** | $\text{half\_life}(\text{working})=2$, $\text{episodic}=30$, $\text{semantic}=180$ |
|
|
171
|
-
| **importance** | $\text{pinned}=+0.20$, $\text{type\_boost}(\text{semantic}=+0.10, \text{working}=-0.05)$ |
|
|
172
|
-
| **usage** | log 기반, 배치 정규화 |
|
|
173
|
-
| **duplication_penalty** | max sim to selected |
|
|
174
|
-
| **망각** | $\theta_{\text{soft}}=0.6$, $\theta_{\text{hard}}=0.8$, TTL_soft/hard 위 표 참조 |
|
|
175
|
-
| **리뷰** | $p_{\text{recall}}(t)=\exp(-t/\tau)$, 첫 1일→6일→가변 배수 |
|
|
176
|
-
|
|
177
|
-
이대로 구현하면 **M1(개인용)**에서 바로 쓸 수 있고, M2/M3로 갈 때는 계수만 재튜닝하면 된다.
|