opcode-pg-memory 2.2.7 → 2.3.0
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/dist/cli.js +21 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -20981
- package/dist/index.js.map +1 -0
- package/dist/mcp-server.js +26 -6
- package/dist/mcp-server.js.map +1 -0
- package/dist/src/cache/semantic-cache.js +399 -0
- package/dist/src/cache/semantic-cache.js.map +1 -0
- package/dist/src/cli.js +404 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/config.d.ts +5 -0
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +89 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/db/init-db.js +545 -0
- package/dist/src/db/init-db.js.map +1 -0
- package/dist/src/hooks/message-part-updated.js +203 -0
- package/dist/src/hooks/message-part-updated.js.map +1 -0
- package/dist/src/hooks/message-updated.js +347 -0
- package/dist/src/hooks/message-updated.js.map +1 -0
- package/dist/src/hooks/session-compacting.js +179 -0
- package/dist/src/hooks/session-compacting.js.map +1 -0
- package/dist/src/hooks/session-completed.js +337 -0
- package/dist/src/hooks/session-completed.js.map +1 -0
- package/dist/src/hooks/session-created.js +206 -0
- package/dist/src/hooks/session-created.js.map +1 -0
- package/dist/src/hooks/tool-execute.js +267 -0
- package/dist/src/hooks/tool-execute.js.map +1 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +643 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/mcp/hindsight-reflect-omo.js +318 -0
- package/dist/src/mcp/hindsight-reflect-omo.js.map +1 -0
- package/dist/src/mcp/hindsight-reflect.js +838 -0
- package/dist/src/mcp/hindsight-reflect.js.map +1 -0
- package/dist/src/mcp/recall-memory-omo.js +263 -0
- package/dist/src/mcp/recall-memory-omo.js.map +1 -0
- package/dist/src/mcp/recall-memory.d.ts +6 -0
- package/dist/src/mcp/recall-memory.d.ts.map +1 -1
- package/dist/src/mcp/recall-memory.js +900 -0
- package/dist/src/mcp/recall-memory.js.map +1 -0
- package/dist/src/omo/adapter.js +583 -0
- package/dist/src/omo/adapter.js.map +1 -0
- package/dist/src/omo/types.js +44 -0
- package/dist/src/omo/types.js.map +1 -0
- package/dist/src/services/db-polling.d.ts +30 -0
- package/dist/src/services/db-polling.d.ts.map +1 -0
- package/dist/src/services/db-polling.js +97 -0
- package/dist/src/services/db-polling.js.map +1 -0
- package/dist/src/services/event-synchronizer.d.ts +15 -0
- package/dist/src/services/event-synchronizer.d.ts.map +1 -0
- package/dist/src/services/event-synchronizer.js +119 -0
- package/dist/src/services/event-synchronizer.js.map +1 -0
- package/dist/src/services/keyword.js +29 -0
- package/dist/src/services/keyword.js.map +1 -0
- package/dist/src/services/logger.js +42 -0
- package/dist/src/services/logger.js.map +1 -0
- package/dist/src/services/opencode-schema-adapter.d.ts +34 -0
- package/dist/src/services/opencode-schema-adapter.d.ts.map +1 -0
- package/dist/src/services/opencode-schema-adapter.js +96 -0
- package/dist/src/services/opencode-schema-adapter.js.map +1 -0
- package/dist/src/services/privacy.js +23 -0
- package/dist/src/services/privacy.js.map +1 -0
- package/dist/src/topic/segment-manager.js +447 -0
- package/dist/src/topic/segment-manager.js.map +1 -0
- package/dist/src/types.d.ts +20 -2
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +8 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/embedding.js +180 -0
- package/dist/src/utils/embedding.js.map +1 -0
- package/dist/src/utils/token-budget.js +152 -0
- package/dist/src/utils/token-budget.js.map +1 -0
- package/package.json +6 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;;;;;GAKG;AACH,8CAA4B;AAC5B,qCAAsC;AAA7B,iHAAA,OAAO,OAAA"}
|
package/dist/mcp-server.js
CHANGED
|
@@ -22497,6 +22497,11 @@ function getEmbeddingService() {
|
|
|
22497
22497
|
|
|
22498
22498
|
// src/mcp/recall-memory.ts
|
|
22499
22499
|
var logger = createLogger("recall-memory");
|
|
22500
|
+
var DEFAULT_DECAY_CONFIG = {
|
|
22501
|
+
enabled: true,
|
|
22502
|
+
factor: 0.99,
|
|
22503
|
+
maxAgeDays: 365
|
|
22504
|
+
};
|
|
22500
22505
|
var DEFAULT_CONFIG = {
|
|
22501
22506
|
weights: {
|
|
22502
22507
|
semantic: 0.5,
|
|
@@ -22504,7 +22509,8 @@ var DEFAULT_CONFIG = {
|
|
|
22504
22509
|
importance: 0.2
|
|
22505
22510
|
},
|
|
22506
22511
|
maxResults: 10,
|
|
22507
|
-
rerankEnabled: true
|
|
22512
|
+
rerankEnabled: true,
|
|
22513
|
+
decay: { ...DEFAULT_DECAY_CONFIG }
|
|
22508
22514
|
};
|
|
22509
22515
|
var TOPIC_FUSION_RATIO = 0.3;
|
|
22510
22516
|
var PER_STRATEGY_LIMIT = 20;
|
|
@@ -22533,7 +22539,7 @@ async function recallMemory(input, pool, config = {}) {
|
|
|
22533
22539
|
const strategies = input.retrieval_strategies || ["semantic", "bm25", "graph"];
|
|
22534
22540
|
const retrievalResults = await parallelRetrieve(input.query, fusedEmbedding, sessionId, strategies, pool, input.filters);
|
|
22535
22541
|
const mergedResults = mergeAndDeduplicate(retrievalResults);
|
|
22536
|
-
const scoredResults = calculateMultiDimensionalScores(mergedResults, fusedEmbedding, mergedConfig.weights);
|
|
22542
|
+
const scoredResults = calculateMultiDimensionalScores(mergedResults, fusedEmbedding, mergedConfig.weights, { ...DEFAULT_DECAY_CONFIG, ...mergedConfig.decay });
|
|
22537
22543
|
let filteredResults = applyFilters(scoredResults, input.filters);
|
|
22538
22544
|
if (input.rerank !== false && mergedConfig.rerankEnabled) {
|
|
22539
22545
|
filteredResults = await crossEncoderRerank(filteredResults, input.query);
|
|
@@ -23038,9 +23044,9 @@ function mergeAndDeduplicate(strategyResults) {
|
|
|
23038
23044
|
}
|
|
23039
23045
|
return merged;
|
|
23040
23046
|
}
|
|
23041
|
-
function calculateMultiDimensionalScores(facts, _queryEmbedding, weights) {
|
|
23047
|
+
function calculateMultiDimensionalScores(facts, _queryEmbedding, weights, decayConfig = DEFAULT_DECAY_CONFIG) {
|
|
23042
23048
|
const now = new Date;
|
|
23043
|
-
|
|
23049
|
+
let results = facts.map((fact) => {
|
|
23044
23050
|
const semanticScore = fact.relevanceScore;
|
|
23045
23051
|
const createdAt = new Date(fact.metadata.createdAt || fact._timestamp || Date.now());
|
|
23046
23052
|
const daysAgo = (now.getTime() - createdAt.getTime()) / (1000 * 60 * 60 * 24);
|
|
@@ -23048,11 +23054,25 @@ function calculateMultiDimensionalScores(facts, _queryEmbedding, weights) {
|
|
|
23048
23054
|
const importance = fact.metadata.importance || fact.metadata.weight || 3;
|
|
23049
23055
|
const importanceScore = Math.min(1, importance / 5);
|
|
23050
23056
|
const finalScore = weights.semantic * semanticScore + weights.recency * recencyScore + weights.importance * importanceScore;
|
|
23057
|
+
let relevanceScore = Math.round(finalScore * 1000) / 1000;
|
|
23058
|
+
if (decayConfig.enabled) {
|
|
23059
|
+
const metadata = fact.metadata || {};
|
|
23060
|
+
const lastSeen = metadata.createdAt || fact._timestamp || Date.now();
|
|
23061
|
+
const daysSinceLastSeen = (Date.now() - new Date(lastSeen).getTime()) / 86400000;
|
|
23062
|
+
if (metadata.tier !== "permanent") {
|
|
23063
|
+
const decayedWeight = relevanceScore * Math.pow(decayConfig.factor, daysSinceLastSeen);
|
|
23064
|
+
relevanceScore = Math.max(0.01, decayedWeight);
|
|
23065
|
+
if (daysSinceLastSeen > decayConfig.maxAgeDays && relevanceScore < 0.1) {
|
|
23066
|
+
relevanceScore = 0;
|
|
23067
|
+
}
|
|
23068
|
+
}
|
|
23069
|
+
}
|
|
23051
23070
|
return {
|
|
23052
23071
|
...fact,
|
|
23053
|
-
relevanceScore
|
|
23072
|
+
relevanceScore
|
|
23054
23073
|
};
|
|
23055
|
-
}).sort((a2, b2) => b2.relevanceScore - a2.relevanceScore);
|
|
23074
|
+
}).filter((r2) => r2.relevanceScore > 0).sort((a2, b2) => b2.relevanceScore - a2.relevanceScore);
|
|
23075
|
+
return results;
|
|
23056
23076
|
}
|
|
23057
23077
|
function applyFilters(facts, filters) {
|
|
23058
23078
|
if (!filters)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.SemanticCacheManager = void 0;
|
|
37
|
+
exports.queryWithCachePriority = queryWithCachePriority;
|
|
38
|
+
exports.createCacheManager = createCacheManager;
|
|
39
|
+
const crypto = __importStar(require("crypto"));
|
|
40
|
+
const DEFAULT_CONFIG = {
|
|
41
|
+
initialThreshold: 0.92,
|
|
42
|
+
adjustmentStep: 0.02,
|
|
43
|
+
minThreshold: 0.85,
|
|
44
|
+
maxThreshold: 0.97,
|
|
45
|
+
queryWindowSize: 100,
|
|
46
|
+
enabled: true
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* 语义缓存管理器
|
|
50
|
+
*
|
|
51
|
+
* 功能:
|
|
52
|
+
* 1. 使用 HNSW 索引实现亚 10ms 级检索
|
|
53
|
+
* 2. 动态阈值调整(初始 0.92,每 100 次查询根据命中率 ±0.02)
|
|
54
|
+
* 3. 与 DCP 协同,设置最高检索优先级
|
|
55
|
+
* 4. 缓存命中后直接返回,零 token 消耗
|
|
56
|
+
*/
|
|
57
|
+
class SemanticCacheManager {
|
|
58
|
+
pool;
|
|
59
|
+
config;
|
|
60
|
+
currentThreshold;
|
|
61
|
+
queryCount;
|
|
62
|
+
hitCount;
|
|
63
|
+
constructor(pool, config = {}) {
|
|
64
|
+
this.pool = pool;
|
|
65
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
66
|
+
this.currentThreshold = this.config.initialThreshold;
|
|
67
|
+
this.queryCount = 0;
|
|
68
|
+
this.hitCount = 0;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 检查缓存
|
|
72
|
+
*
|
|
73
|
+
* 流程:
|
|
74
|
+
* 1. 生成查询哈希
|
|
75
|
+
* 2. 使用 HNSW 索引快速检索候选
|
|
76
|
+
* 3. 检查相似度是否达到阈值
|
|
77
|
+
* 4. 更新命中统计
|
|
78
|
+
*/
|
|
79
|
+
async checkCache(queryText) {
|
|
80
|
+
if (!this.config.enabled) {
|
|
81
|
+
return { hit: false };
|
|
82
|
+
}
|
|
83
|
+
const startTime = Date.now();
|
|
84
|
+
try {
|
|
85
|
+
// 1. 生成查询哈希
|
|
86
|
+
const queryHash = this.generateQueryHash(queryText);
|
|
87
|
+
// 2. 首先尝试精确匹配(哈希匹配)
|
|
88
|
+
const exactMatch = await this.pool.query(`
|
|
89
|
+
SELECT id, response_text, hit_count, similarity_threshold
|
|
90
|
+
FROM semantic_cache
|
|
91
|
+
WHERE query_hash = $1 AND is_pruned = FALSE
|
|
92
|
+
`, [queryHash]);
|
|
93
|
+
if (exactMatch.rows.length > 0) {
|
|
94
|
+
const cached = exactMatch.rows[0];
|
|
95
|
+
// 更新命中统计
|
|
96
|
+
await this.recordHit(cached.id);
|
|
97
|
+
console.log(`[PG Memory] Cache HIT (exact): ${queryText.substring(0, 50)}...`);
|
|
98
|
+
return {
|
|
99
|
+
hit: true,
|
|
100
|
+
response: cached.response_text,
|
|
101
|
+
similarity: 1.0,
|
|
102
|
+
cached: true,
|
|
103
|
+
cacheId: cached.id
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
// 3. 语义相似度匹配
|
|
107
|
+
// 注意:实际应生成 embedding,这里简化处理
|
|
108
|
+
const queryEmbedding = await this.generateQueryEmbedding(queryText);
|
|
109
|
+
// 使用 HNSW 索引快速检索候选
|
|
110
|
+
const candidates = await this.pool.query(`
|
|
111
|
+
SELECT id, query_text, response_text, query_embedding <=> $1 as distance,
|
|
112
|
+
similarity_threshold
|
|
113
|
+
FROM semantic_cache
|
|
114
|
+
WHERE is_pruned = FALSE
|
|
115
|
+
ORDER BY query_embedding <=> $1
|
|
116
|
+
LIMIT 5
|
|
117
|
+
`, [queryEmbedding]);
|
|
118
|
+
// 4. 检查是否命中
|
|
119
|
+
for (const candidate of candidates.rows) {
|
|
120
|
+
const similarity = 1 - candidate.distance; // 距离转相似度
|
|
121
|
+
if (similarity >= this.currentThreshold) {
|
|
122
|
+
// 命中:更新统计
|
|
123
|
+
await this.recordHit(candidate.id);
|
|
124
|
+
const retrievalTime = Date.now() - startTime;
|
|
125
|
+
console.log(`[PG Memory] Cache HIT (semantic): similarity=${similarity.toFixed(3)}, time=${retrievalTime}ms`);
|
|
126
|
+
return {
|
|
127
|
+
hit: true,
|
|
128
|
+
response: candidate.response_text,
|
|
129
|
+
similarity,
|
|
130
|
+
cached: true,
|
|
131
|
+
cacheId: candidate.id
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// 未命中
|
|
136
|
+
await this.recordMiss();
|
|
137
|
+
console.log(`[PG Memory] Cache MISS: ${queryText.substring(0, 50)}...`);
|
|
138
|
+
return {
|
|
139
|
+
hit: false,
|
|
140
|
+
cached: false
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
console.error('[PG Memory] Cache check error:', error);
|
|
145
|
+
return { hit: false };
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* 存储缓存
|
|
150
|
+
*/
|
|
151
|
+
async storeCache(queryText, responseText, sessionId) {
|
|
152
|
+
if (!this.config.enabled) {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
try {
|
|
156
|
+
const queryHash = this.generateQueryHash(queryText);
|
|
157
|
+
const queryEmbedding = await this.generateQueryEmbedding(queryText);
|
|
158
|
+
// 检查是否已存在
|
|
159
|
+
const existing = await this.pool.query('SELECT id FROM semantic_cache WHERE query_hash = $1', [queryHash]);
|
|
160
|
+
if (existing.rows.length > 0) {
|
|
161
|
+
// 更新现有记录
|
|
162
|
+
await this.pool.query(`
|
|
163
|
+
UPDATE semantic_cache
|
|
164
|
+
SET response_text = $1,
|
|
165
|
+
hit_count = hit_count + 1,
|
|
166
|
+
last_hit_at = NOW(),
|
|
167
|
+
is_pruned = FALSE
|
|
168
|
+
WHERE id = $2
|
|
169
|
+
`, [responseText, existing.rows[0].id]);
|
|
170
|
+
return existing.rows[0].id;
|
|
171
|
+
}
|
|
172
|
+
// 创建新记录
|
|
173
|
+
const result = await this.pool.query(`
|
|
174
|
+
INSERT INTO semantic_cache (
|
|
175
|
+
query_hash, query_text, query_embedding, response_text,
|
|
176
|
+
similarity_threshold, session_id
|
|
177
|
+
) VALUES ($1, $2, $3, $4, $5, $6)
|
|
178
|
+
RETURNING id
|
|
179
|
+
`, [
|
|
180
|
+
queryHash,
|
|
181
|
+
queryText,
|
|
182
|
+
queryEmbedding,
|
|
183
|
+
responseText,
|
|
184
|
+
this.currentThreshold,
|
|
185
|
+
sessionId || null
|
|
186
|
+
]);
|
|
187
|
+
console.log(`[PG Memory] Cache stored: ${queryText.substring(0, 50)}...`);
|
|
188
|
+
return result.rows[0].id;
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
console.error('[PG Memory] Cache store error:', error);
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* 记录缓存命中
|
|
197
|
+
*/
|
|
198
|
+
async recordHit(cacheId) {
|
|
199
|
+
this.hitCount++;
|
|
200
|
+
this.queryCount++;
|
|
201
|
+
await this.pool.query(`
|
|
202
|
+
UPDATE semantic_cache
|
|
203
|
+
SET hit_count = hit_count + 1,
|
|
204
|
+
last_hit_at = NOW()
|
|
205
|
+
WHERE id = $1
|
|
206
|
+
`, [cacheId]);
|
|
207
|
+
await this.maybeAdjustThreshold();
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* 记录缓存未命中
|
|
211
|
+
*/
|
|
212
|
+
async recordMiss() {
|
|
213
|
+
this.queryCount++;
|
|
214
|
+
await this.maybeAdjustThreshold();
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* 动态调整阈值
|
|
218
|
+
*
|
|
219
|
+
* 策略:
|
|
220
|
+
* - 每 100 次查询检查一次
|
|
221
|
+
* - 命中率 < 30%:降低阈值(提高命中率)
|
|
222
|
+
* - 命中率 > 80%:提高阈值(提高精确度)
|
|
223
|
+
*/
|
|
224
|
+
async maybeAdjustThreshold() {
|
|
225
|
+
if (this.queryCount % this.config.queryWindowSize !== 0) {
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
const hitRate = this.hitCount / this.queryCount;
|
|
229
|
+
let adjustment = 'none';
|
|
230
|
+
let newThreshold = this.currentThreshold;
|
|
231
|
+
if (hitRate < 0.3 && this.currentThreshold > this.config.minThreshold) {
|
|
232
|
+
// 命中率过低,降低阈值
|
|
233
|
+
newThreshold = Math.max(this.config.minThreshold, this.currentThreshold - this.config.adjustmentStep);
|
|
234
|
+
adjustment = 'decrease';
|
|
235
|
+
}
|
|
236
|
+
else if (hitRate > 0.8 && this.currentThreshold < this.config.maxThreshold) {
|
|
237
|
+
// 命中率过高,提高阈值(避免过度匹配)
|
|
238
|
+
newThreshold = Math.min(this.config.maxThreshold, this.currentThreshold + this.config.adjustmentStep);
|
|
239
|
+
adjustment = 'increase';
|
|
240
|
+
}
|
|
241
|
+
if (adjustment !== 'none' && newThreshold !== this.currentThreshold) {
|
|
242
|
+
this.currentThreshold = newThreshold;
|
|
243
|
+
// 记录调整日志
|
|
244
|
+
await this.pool.query(`
|
|
245
|
+
INSERT INTO cache_threshold_log (threshold_value, hit_rate, query_count, adjustment_reason)
|
|
246
|
+
VALUES ($1, $2, $3, $4)
|
|
247
|
+
`, [
|
|
248
|
+
this.currentThreshold,
|
|
249
|
+
hitRate,
|
|
250
|
+
this.queryCount,
|
|
251
|
+
`auto_${adjustment}`
|
|
252
|
+
]);
|
|
253
|
+
console.log(`[PG Memory] Cache threshold adjusted: ${adjustment} to ${this.currentThreshold.toFixed(2)} (hit rate: ${(hitRate * 100).toFixed(1)}%)`);
|
|
254
|
+
}
|
|
255
|
+
// 重置计数器
|
|
256
|
+
this.hitCount = 0;
|
|
257
|
+
this.queryCount = 0;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* 生成查询哈希
|
|
261
|
+
*/
|
|
262
|
+
generateQueryHash(queryText) {
|
|
263
|
+
// 规范化查询文本
|
|
264
|
+
const normalized = queryText
|
|
265
|
+
.toLowerCase()
|
|
266
|
+
.replace(/\s+/g, ' ')
|
|
267
|
+
.trim();
|
|
268
|
+
return crypto
|
|
269
|
+
.createHash('sha256')
|
|
270
|
+
.update(normalized)
|
|
271
|
+
.digest('hex');
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* 生成查询向量
|
|
275
|
+
*
|
|
276
|
+
* 注意:实际应调用 embedding API
|
|
277
|
+
*/
|
|
278
|
+
async generateQueryEmbedding(queryText) {
|
|
279
|
+
// 实际应调用 embedding API
|
|
280
|
+
// 例如:return await openai.embeddings.create({ input: queryText, model: 'text-embedding-3-small' });
|
|
281
|
+
// 简化版:返回随机向量(仅用于演示)
|
|
282
|
+
return new Array(1536).fill(0).map(() => (Math.random() - 0.5) * 0.1);
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* 标记缓存为已压缩(DCP 协同)
|
|
286
|
+
*/
|
|
287
|
+
async markAsPruned(cacheId) {
|
|
288
|
+
await this.pool.query(`
|
|
289
|
+
UPDATE semantic_cache
|
|
290
|
+
SET is_pruned = TRUE
|
|
291
|
+
WHERE id = $1
|
|
292
|
+
`, [cacheId]);
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* 批量标记缓存为已压缩
|
|
296
|
+
*/
|
|
297
|
+
async markMultipleAsPruned(cacheIds) {
|
|
298
|
+
if (cacheIds.length === 0)
|
|
299
|
+
return;
|
|
300
|
+
await this.pool.query(`
|
|
301
|
+
UPDATE semantic_cache
|
|
302
|
+
SET is_pruned = TRUE
|
|
303
|
+
WHERE id = ANY($1)
|
|
304
|
+
`, [cacheIds]);
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* 获取缓存统计
|
|
308
|
+
*/
|
|
309
|
+
async getStats() {
|
|
310
|
+
const result = await this.pool.query(`
|
|
311
|
+
SELECT
|
|
312
|
+
COUNT(*) as total,
|
|
313
|
+
COUNT(*) FILTER (WHERE is_pruned = TRUE) as pruned,
|
|
314
|
+
COALESCE(SUM(hit_count), 0) as total_hits,
|
|
315
|
+
AVG(hit_count) as avg_hits
|
|
316
|
+
FROM semantic_cache
|
|
317
|
+
`);
|
|
318
|
+
return {
|
|
319
|
+
totalEntries: parseInt(result.rows[0].total, 10),
|
|
320
|
+
prunedEntries: parseInt(result.rows[0].pruned, 10),
|
|
321
|
+
totalHits: parseInt(result.rows[0].total_hits, 10),
|
|
322
|
+
currentThreshold: this.currentThreshold,
|
|
323
|
+
averageHitCount: parseFloat(result.rows[0].avg_hits || 0)
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* 清理过期缓存
|
|
328
|
+
*/
|
|
329
|
+
async cleanupExpiredCache(maxAgeDays = 30) {
|
|
330
|
+
const result = await this.pool.query(`
|
|
331
|
+
DELETE FROM semantic_cache
|
|
332
|
+
WHERE last_hit_at < NOW() - INTERVAL '${maxAgeDays} days'
|
|
333
|
+
AND hit_count < 5
|
|
334
|
+
RETURNING id
|
|
335
|
+
`);
|
|
336
|
+
console.log(`[PG Memory] Cleaned up ${result.rowCount} expired cache entries`);
|
|
337
|
+
return result.rowCount;
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* 获取当前阈值
|
|
341
|
+
*/
|
|
342
|
+
getCurrentThreshold() {
|
|
343
|
+
return this.currentThreshold;
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* 手动设置阈值
|
|
347
|
+
*/
|
|
348
|
+
async setThreshold(threshold) {
|
|
349
|
+
if (threshold < this.config.minThreshold || threshold > this.config.maxThreshold) {
|
|
350
|
+
throw new Error(`Threshold must be between ${this.config.minThreshold} and ${this.config.maxThreshold}`);
|
|
351
|
+
}
|
|
352
|
+
this.currentThreshold = threshold;
|
|
353
|
+
// 记录手动调整
|
|
354
|
+
await this.pool.query(`
|
|
355
|
+
INSERT INTO cache_threshold_log (threshold_value, adjustment_reason)
|
|
356
|
+
VALUES ($1, $2)
|
|
357
|
+
`, [threshold, 'manual']);
|
|
358
|
+
console.log(`[PG Memory] Cache threshold manually set to: ${threshold}`);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
exports.SemanticCacheManager = SemanticCacheManager;
|
|
362
|
+
/**
|
|
363
|
+
* 带缓存优先级的查询包装器
|
|
364
|
+
*
|
|
365
|
+
* 使用方式:
|
|
366
|
+
* 1. 首先检查语义缓存
|
|
367
|
+
* 2. 缓存命中:直接返回,零 token 消耗
|
|
368
|
+
* 3. 缓存未命中:执行实际查询,并存入缓存
|
|
369
|
+
*/
|
|
370
|
+
async function queryWithCachePriority(queryText, actualQuery, cacheManager, shouldCache) {
|
|
371
|
+
// 1. 首先检查语义缓存
|
|
372
|
+
const cacheResult = await cacheManager.checkCache(queryText);
|
|
373
|
+
if (cacheResult.hit && cacheResult.response) {
|
|
374
|
+
// 缓存命中:直接返回
|
|
375
|
+
return {
|
|
376
|
+
result: JSON.parse(cacheResult.response),
|
|
377
|
+
fromCache: true,
|
|
378
|
+
similarity: cacheResult.similarity
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
// 2. 缓存未命中:执行实际查询
|
|
382
|
+
const result = await actualQuery();
|
|
383
|
+
// 3. 存入缓存(如果符合条件)
|
|
384
|
+
const shouldStore = shouldCache ? shouldCache(result) : true;
|
|
385
|
+
if (shouldStore) {
|
|
386
|
+
await cacheManager.storeCache(queryText, JSON.stringify(result));
|
|
387
|
+
}
|
|
388
|
+
return {
|
|
389
|
+
result,
|
|
390
|
+
fromCache: false
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* 创建缓存管理器实例
|
|
395
|
+
*/
|
|
396
|
+
function createCacheManager(pool, config) {
|
|
397
|
+
return new SemanticCacheManager(pool, config);
|
|
398
|
+
}
|
|
399
|
+
//# sourceMappingURL=semantic-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-cache.js","sourceRoot":"","sources":["../../../src/cache/semantic-cache.ts"],"names":[],"mappings":"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"}
|