dsh-layered-memory 0.8.4 → 0.8.6
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/README.en.md +43 -13
- package/README.md +28 -13
- package/assets/img/ui-dark.jpg +0 -0
- package/assets/img/ui-light.jpg +0 -0
- package/assets/readme/bench-dialog.svg +49 -55
- package/dist/bench-control.d.ts +35 -0
- package/dist/bench-control.js +16 -0
- package/dist/client.js +173 -0
- package/dist/config.d.ts +12 -0
- package/dist/config.js +4 -0
- package/dist/embedding-worker.cjs +176 -0
- package/dist/hooks/recall.d.ts +28 -1
- package/dist/hooks/recall.js +72 -13
- package/dist/index.d.ts +6 -0
- package/dist/index.js +18 -3
- package/dist/llm-usage.d.ts +27 -0
- package/dist/llm-usage.js +39 -0
- package/dist/llm.d.ts +3 -0
- package/dist/llm.js +6 -0
- package/dist/pipeline/l1.js +4 -2
- package/dist/pipeline/l2.js +1 -0
- package/dist/pipeline/l3.js +1 -0
- package/dist/pipeline/runner.d.ts +21 -0
- package/dist/pipeline/runner.js +83 -4
- package/dist/pipeline/trigger.d.ts +2 -0
- package/dist/pipeline/trigger.js +11 -0
- package/dist/prompts/l1-extraction.d.ts +7 -1
- package/dist/prompts/l1-extraction.js +12 -3
- package/dist/stats.d.ts +27 -1
- package/dist/stats.js +37 -2
- package/dist/store/embedding-source.d.ts +2 -1
- package/dist/store/embedding-source.js +7 -2
- package/dist/store/embedding.d.ts +2 -1
- package/dist/store/l0.d.ts +2 -0
- package/dist/store/l0.js +14 -4
- package/dist/store/l1.d.ts +11 -1
- package/dist/store/l1.js +26 -6
- package/dist/store/local-embedding.d.ts +69 -46
- package/dist/store/local-embedding.js +179 -75
- package/dist/store/recall-dedupe.d.ts +26 -0
- package/dist/store/recall-dedupe.js +138 -0
- package/dist/store/runtime-installer.d.ts +0 -2
- package/dist/store/runtime-installer.js +0 -6
- package/dist/store/search-utils.d.ts +17 -0
- package/dist/store/search-utils.js +29 -0
- package/dist/store/sqlite.d.ts +2 -0
- package/dist/store/sqlite.js +37 -9
- package/dist/types.d.ts +8 -0
- package/dist/types.js +8 -0
- package/dist/util/recall-budget.d.ts +2 -2
- package/dist/util/recall-budget.js +2 -2
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -61,6 +61,7 @@ export declare const Config: import("@deepseek-ai/schemastery").default<Schemast
|
|
|
61
61
|
includeSceneNav: import("@deepseek-ai/schemastery").default<boolean, boolean>;
|
|
62
62
|
strategy: import("@deepseek-ai/schemastery").default<"keyword" | "embedding" | "hybrid", "keyword" | "embedding" | "hybrid">;
|
|
63
63
|
scoreThreshold: import("@deepseek-ai/schemastery").default<number, number>;
|
|
64
|
+
decayHalfLifeDays: import("@deepseek-ai/schemastery").default<number, number>;
|
|
64
65
|
}>, Schemastery.ObjectT<{
|
|
65
66
|
enabled: import("@deepseek-ai/schemastery").default<boolean, boolean>;
|
|
66
67
|
maxResults: import("@deepseek-ai/schemastery").default<number, number>;
|
|
@@ -71,6 +72,7 @@ export declare const Config: import("@deepseek-ai/schemastery").default<Schemast
|
|
|
71
72
|
includeSceneNav: import("@deepseek-ai/schemastery").default<boolean, boolean>;
|
|
72
73
|
strategy: import("@deepseek-ai/schemastery").default<"keyword" | "embedding" | "hybrid", "keyword" | "embedding" | "hybrid">;
|
|
73
74
|
scoreThreshold: import("@deepseek-ai/schemastery").default<number, number>;
|
|
75
|
+
decayHalfLifeDays: import("@deepseek-ai/schemastery").default<number, number>;
|
|
74
76
|
}>>;
|
|
75
77
|
embedding: import("@deepseek-ai/schemastery").default<Schemastery.ObjectS<{
|
|
76
78
|
enabled: import("@deepseek-ai/schemastery").default<boolean, boolean>;
|
|
@@ -113,6 +115,7 @@ export declare const Config: import("@deepseek-ai/schemastery").default<Schemast
|
|
|
113
115
|
timeoutMs: import("@deepseek-ai/schemastery").default<number, number>;
|
|
114
116
|
}>>;
|
|
115
117
|
tools: import("@deepseek-ai/schemastery").default<boolean, boolean>;
|
|
118
|
+
benchControl: import("@deepseek-ai/schemastery").default<boolean, boolean>;
|
|
116
119
|
}>, Schemastery.ObjectT<{
|
|
117
120
|
dataDir: import("@deepseek-ai/schemastery").default<string, string>;
|
|
118
121
|
family: import("@deepseek-ai/schemastery").default<"chat" | "work" | "auto", "chat" | "work" | "auto">;
|
|
@@ -166,6 +169,7 @@ export declare const Config: import("@deepseek-ai/schemastery").default<Schemast
|
|
|
166
169
|
includeSceneNav: import("@deepseek-ai/schemastery").default<boolean, boolean>;
|
|
167
170
|
strategy: import("@deepseek-ai/schemastery").default<"keyword" | "embedding" | "hybrid", "keyword" | "embedding" | "hybrid">;
|
|
168
171
|
scoreThreshold: import("@deepseek-ai/schemastery").default<number, number>;
|
|
172
|
+
decayHalfLifeDays: import("@deepseek-ai/schemastery").default<number, number>;
|
|
169
173
|
}>, Schemastery.ObjectT<{
|
|
170
174
|
enabled: import("@deepseek-ai/schemastery").default<boolean, boolean>;
|
|
171
175
|
maxResults: import("@deepseek-ai/schemastery").default<number, number>;
|
|
@@ -176,6 +180,7 @@ export declare const Config: import("@deepseek-ai/schemastery").default<Schemast
|
|
|
176
180
|
includeSceneNav: import("@deepseek-ai/schemastery").default<boolean, boolean>;
|
|
177
181
|
strategy: import("@deepseek-ai/schemastery").default<"keyword" | "embedding" | "hybrid", "keyword" | "embedding" | "hybrid">;
|
|
178
182
|
scoreThreshold: import("@deepseek-ai/schemastery").default<number, number>;
|
|
183
|
+
decayHalfLifeDays: import("@deepseek-ai/schemastery").default<number, number>;
|
|
179
184
|
}>>;
|
|
180
185
|
embedding: import("@deepseek-ai/schemastery").default<Schemastery.ObjectS<{
|
|
181
186
|
enabled: import("@deepseek-ai/schemastery").default<boolean, boolean>;
|
|
@@ -218,5 +223,6 @@ export declare const Config: import("@deepseek-ai/schemastery").default<Schemast
|
|
|
218
223
|
timeoutMs: import("@deepseek-ai/schemastery").default<number, number>;
|
|
219
224
|
}>>;
|
|
220
225
|
tools: import("@deepseek-ai/schemastery").default<boolean, boolean>;
|
|
226
|
+
benchControl: import("@deepseek-ai/schemastery").default<boolean, boolean>;
|
|
221
227
|
}>>;
|
|
222
228
|
export declare function apply(ctx: Context, config: MemoryConfig): Promise<void>;
|
package/dist/index.js
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
*/
|
|
19
19
|
import * as path from 'node:path';
|
|
20
20
|
import { memorySchema, resolveDataDir } from './config.js';
|
|
21
|
+
import { registerBenchControl } from './bench-control.js';
|
|
21
22
|
import { registerCapture } from './hooks/capture.js';
|
|
22
23
|
import { registerRecall } from './hooks/recall.js';
|
|
23
24
|
import { MemoryRunner } from './pipeline/runner.js';
|
|
@@ -130,7 +131,7 @@ export async function apply(ctx, config) {
|
|
|
130
131
|
}
|
|
131
132
|
const stores = {
|
|
132
133
|
l0: new L0Store(dataDir, db, embed, logger),
|
|
133
|
-
l1: new L1Store(dataDir, db, embed, config.recall.strategy, logger),
|
|
134
|
+
l1: new L1Store(dataDir, db, embed, config.recall.strategy, logger, config.recall.decayHalfLifeDays),
|
|
134
135
|
// L2/L3 分族隔离:各自目录与文件(scenes/chat|work、persona-chat|work.md)
|
|
135
136
|
scenes: {
|
|
136
137
|
chat: new SceneStore(dataDir, 'chat', logger),
|
|
@@ -291,13 +292,27 @@ export async function apply(ctx, config) {
|
|
|
291
292
|
if (storageOk) {
|
|
292
293
|
flushL0 = registerCapture(ctx, config, runner, stores.l0, logger, live, modes);
|
|
293
294
|
}
|
|
294
|
-
const recall = registerRecall(ctx, config, stores, logger, live, modes);
|
|
295
|
+
const recall = registerRecall(ctx, config, stores, logger, live, modes, dataDir);
|
|
295
296
|
runner.setAfterRun(recall.invalidateProfile);
|
|
296
297
|
registerMemoryTools(ctx, config, stores, logger, modes);
|
|
297
298
|
registerMemoryRpc(ctx, config, stores, logger, {
|
|
298
299
|
degraded: () => !storageOk || db.isDegraded(),
|
|
299
300
|
pending: () => runner.pendingCount,
|
|
300
|
-
}, live, modes, dataDir, rebuild, embedManager
|
|
301
|
+
}, live, modes, dataDir, rebuild, embedManager,
|
|
302
|
+
// 悬浮卡信息区数据源(session-stats 热路径端点;全部内存读 + 索引 COUNT,零文件 I/O)
|
|
303
|
+
{
|
|
304
|
+
recallStats: (sid) => recall.stats(sid),
|
|
305
|
+
runnerView: (sid, mode) => runner.sessionView(sid, mode),
|
|
306
|
+
l0Count: (sid) => stores.l0.countBySession(sid),
|
|
307
|
+
capabilities: () => db.getCapabilities(),
|
|
308
|
+
});
|
|
309
|
+
// bench 控制服务(config.benchControl 门控,默认关):仅基准/调试部署注册,
|
|
310
|
+
// 供同进程的 bench-runner lifecycle 赛道触发 rebuild / 设置会话档位
|
|
311
|
+
// (宿主侧 RPC 无 call(),见 bench-control.ts)
|
|
312
|
+
if (config.benchControl && rebuild) {
|
|
313
|
+
const disposeBench = registerBenchControl(ctx, rebuild, modes, logger);
|
|
314
|
+
ctx.effect(() => () => disposeBench());
|
|
315
|
+
}
|
|
301
316
|
logger.info(`[memory] L0~L3 分层蒸馏记忆插件就绪(L1 记忆 ${storageOk ? stores.l1.size : 0} 条 | 捕获=${storageOk && config.capture.enabled} | 蒸馏=${storageOk && config.extract.enabled} | 召回=${config.recall.enabled})`);
|
|
302
317
|
// 停机顺序(M7):置停机标志(后台 embeddings 不再发起)→ 停蒸馏取新任务 →
|
|
303
318
|
// 冲刷 L0 串行链(排队消息先落盘)→ 关库。cordis disposer 为 LIFO 逐个 await,
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 蒸馏用量追踪(进程内累计计数器,常开——纯内存累加,无 IO):
|
|
3
|
+
* callLLM 按层(l1-extract/l1-dedup/l2/l3)累计调用数、输入字符、输出/思考 token。
|
|
4
|
+
*
|
|
5
|
+
* 用途:基准的「记忆开销」记账(效率三角之一)——L1/L2/L3 蒸馏消耗摊到每条
|
|
6
|
+
* 捕获消息,与工作流赛道已测的"记忆节省"(B 组重新探索的 token)配成完整 ROI。
|
|
7
|
+
* 暴露面:bench 控制服务 getDistillUsage()(config.benchControl 门控)。
|
|
8
|
+
*
|
|
9
|
+
* 输入侧说明:dsh llm 流的 usage 块只携带 output/reasoning token,输入 token
|
|
10
|
+
* 拿不到——按仓库既有口径记输入**字符**(中文 1 字 ≈ 1 token 保守折算,
|
|
11
|
+
* 见 config.ts maxInputChars 注释),报告侧如实标注。
|
|
12
|
+
*/
|
|
13
|
+
export type DistillLayer = 'l1-extract' | 'l1-dedup' | 'l2' | 'l3';
|
|
14
|
+
export interface DistillLayerUsage {
|
|
15
|
+
calls: number;
|
|
16
|
+
failures: number;
|
|
17
|
+
inputChars: number;
|
|
18
|
+
outputTokens: number;
|
|
19
|
+
reasoningTokens: number;
|
|
20
|
+
}
|
|
21
|
+
export interface DistillUsageSnapshot {
|
|
22
|
+
layers: Record<string, DistillLayerUsage>;
|
|
23
|
+
}
|
|
24
|
+
/** 单次调用用量累计(callLLM 出口调用;inputChars 为实际发送的用户 prompt 字符)。 */
|
|
25
|
+
export declare function recordDistillCall(layer: DistillLayer, inputChars: number, outputTokens: number, reasoningTokens: number, failed: boolean): void;
|
|
26
|
+
/** 深拷贝快照(消费方拿到后不受后续累计影响)。 */
|
|
27
|
+
export declare function snapshotDistillUsage(): DistillUsageSnapshot;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 蒸馏用量追踪(进程内累计计数器,常开——纯内存累加,无 IO):
|
|
3
|
+
* callLLM 按层(l1-extract/l1-dedup/l2/l3)累计调用数、输入字符、输出/思考 token。
|
|
4
|
+
*
|
|
5
|
+
* 用途:基准的「记忆开销」记账(效率三角之一)——L1/L2/L3 蒸馏消耗摊到每条
|
|
6
|
+
* 捕获消息,与工作流赛道已测的"记忆节省"(B 组重新探索的 token)配成完整 ROI。
|
|
7
|
+
* 暴露面:bench 控制服务 getDistillUsage()(config.benchControl 门控)。
|
|
8
|
+
*
|
|
9
|
+
* 输入侧说明:dsh llm 流的 usage 块只携带 output/reasoning token,输入 token
|
|
10
|
+
* 拿不到——按仓库既有口径记输入**字符**(中文 1 字 ≈ 1 token 保守折算,
|
|
11
|
+
* 见 config.ts maxInputChars 注释),报告侧如实标注。
|
|
12
|
+
*/
|
|
13
|
+
const counters = new Map();
|
|
14
|
+
function bucketOf(layer) {
|
|
15
|
+
let b = counters.get(layer);
|
|
16
|
+
if (!b) {
|
|
17
|
+
b = { calls: 0, failures: 0, inputChars: 0, outputTokens: 0, reasoningTokens: 0 };
|
|
18
|
+
counters.set(layer, b);
|
|
19
|
+
}
|
|
20
|
+
return b;
|
|
21
|
+
}
|
|
22
|
+
/** 单次调用用量累计(callLLM 出口调用;inputChars 为实际发送的用户 prompt 字符)。 */
|
|
23
|
+
export function recordDistillCall(layer, inputChars, outputTokens, reasoningTokens, failed) {
|
|
24
|
+
const b = bucketOf(layer);
|
|
25
|
+
b.calls++;
|
|
26
|
+
if (failed)
|
|
27
|
+
b.failures++;
|
|
28
|
+
b.inputChars += Math.max(0, Math.round(inputChars));
|
|
29
|
+
b.outputTokens += Math.max(0, Math.round(outputTokens));
|
|
30
|
+
b.reasoningTokens += Math.max(0, Math.round(reasoningTokens));
|
|
31
|
+
}
|
|
32
|
+
/** 深拷贝快照(消费方拿到后不受后续累计影响)。 */
|
|
33
|
+
export function snapshotDistillUsage() {
|
|
34
|
+
const layers = {};
|
|
35
|
+
for (const [layer, b] of counters) {
|
|
36
|
+
layers[layer] = { ...b };
|
|
37
|
+
}
|
|
38
|
+
return { layers };
|
|
39
|
+
}
|
package/dist/llm.d.ts
CHANGED
|
@@ -4,9 +4,12 @@
|
|
|
4
4
|
import type { Context } from '@deepseek-ai/cordis';
|
|
5
5
|
import type { MemoryConfig } from './config.js';
|
|
6
6
|
import type { MemoryLogger } from './types.js';
|
|
7
|
+
import { type DistillLayer } from './llm-usage.js';
|
|
7
8
|
export interface LlmCallOptions {
|
|
8
9
|
system: string;
|
|
9
10
|
user: string;
|
|
11
|
+
/** 蒸馏层标签(用量记账用,缺省 'l1-extract' 之外的兜底为 unknown 不计——四层调用点都应传)。 */
|
|
12
|
+
layer?: DistillLayer;
|
|
10
13
|
maxTokens?: number;
|
|
11
14
|
temperature?: number;
|
|
12
15
|
signal?: AbortSignal;
|
package/dist/llm.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createUserMessage, ReasoningEffortId } from '@deepseek-ai/dsh-llm';
|
|
2
2
|
import { errDetail } from './util/filelog.js';
|
|
3
|
+
import { recordDistillCall } from './llm-usage.js';
|
|
3
4
|
// ── 分层输出预算(规格 C 节):结构化蒸馏远用不到总闸级预算,逐层设护栏;
|
|
4
5
|
// 模型跑偏时单次损失有界。数值"先试跑"状态,按线上截断率调整。
|
|
5
6
|
/** L1 抽取(大输入块的 JSON 记忆数组输出)。 */
|
|
@@ -199,9 +200,14 @@ export async function callLLM(ctx, cfg, opts) {
|
|
|
199
200
|
}
|
|
200
201
|
}
|
|
201
202
|
catch (err) {
|
|
203
|
+
// 记账含失败路径(failures 计数;tokens 尽当时流内已到的 usage)
|
|
204
|
+
if (opts.layer)
|
|
205
|
+
recordDistillCall(opts.layer, user.length, outputTokens, reasoningTokens, true);
|
|
202
206
|
opts.logger?.warn(`[memory] LLM 调用失败 ${provider}/${model}(${((Date.now() - startedAt) / 1000).toFixed(1)}s): ${errDetail(err)}`);
|
|
203
207
|
throw err;
|
|
204
208
|
}
|
|
209
|
+
if (opts.layer)
|
|
210
|
+
recordDistillCall(opts.layer, user.length, outputTokens, reasoningTokens, false);
|
|
205
211
|
const out = (blockText || deltaText).trim();
|
|
206
212
|
if (out.length === 0) {
|
|
207
213
|
// 空输出是最难排查的失败:流正常结束但一个字没吐。必须记录 finish 原因、
|
package/dist/pipeline/l1.js
CHANGED
|
@@ -6,7 +6,7 @@ import { randomBytes } from 'node:crypto';
|
|
|
6
6
|
import { callLLM, parseJsonLogged, resolveLayerTokens } from '../llm.js';
|
|
7
7
|
import { formatExtractionPrompt, getExtractMemoriesSystemPrompt } from '../prompts/l1-extraction.js';
|
|
8
8
|
import { formatBatchConflictPrompt, getConflictDetectionSystemPrompt } from '../prompts/l1-dedup.js';
|
|
9
|
-
import { familyForType } from '../types.js';
|
|
9
|
+
import { familyForType, resolveRecordFamily } from '../types.js';
|
|
10
10
|
function newId(prefix) {
|
|
11
11
|
return `${prefix}_${Date.now()}_${randomBytes(3).toString('hex')}`;
|
|
12
12
|
}
|
|
@@ -64,6 +64,7 @@ export async function runExtraction(ctx, cfg, store, states, pending, background
|
|
|
64
64
|
system: getExtractMemoriesSystemPrompt(mode),
|
|
65
65
|
user: userPrompt,
|
|
66
66
|
maxTokens: resolveLayerTokens(cfg, 'extract'),
|
|
67
|
+
layer: 'l1-extract',
|
|
67
68
|
logger,
|
|
68
69
|
});
|
|
69
70
|
const scenes = parseJsonLogged(raw, 'L1 抽取', logger);
|
|
@@ -81,7 +82,7 @@ export async function runExtraction(ctx, cfg, store, states, pending, background
|
|
|
81
82
|
...m,
|
|
82
83
|
record_id: newId('mem'),
|
|
83
84
|
scene_name: scene.scene_name,
|
|
84
|
-
family: forcedFamily
|
|
85
|
+
family: resolveRecordFamily(forcedFamily, m.family, m.type ?? ''),
|
|
85
86
|
});
|
|
86
87
|
}
|
|
87
88
|
}
|
|
@@ -102,6 +103,7 @@ export async function runExtraction(ctx, cfg, store, states, pending, background
|
|
|
102
103
|
system: getConflictDetectionSystemPrompt(mode),
|
|
103
104
|
user: dedupPrompt,
|
|
104
105
|
maxTokens: resolveLayerTokens(cfg, 'dedup'),
|
|
106
|
+
layer: 'l1-dedup',
|
|
105
107
|
logger,
|
|
106
108
|
});
|
|
107
109
|
const decisions = parseJsonLogged(dedupRaw, 'L1 去重判定', logger);
|
package/dist/pipeline/l2.js
CHANGED
package/dist/pipeline/l3.js
CHANGED
|
@@ -63,6 +63,11 @@ export declare class MemoryRunner {
|
|
|
63
63
|
private warmup;
|
|
64
64
|
/** 每会话最后活动时间(闲置兜底判定用)。 */
|
|
65
65
|
private lastActivity;
|
|
66
|
+
/** 每会话累计产出 L1 条数与最近蒸馏时间(session-stats 数据源;LRU 上限防泄漏)。 */
|
|
67
|
+
private sessionProduced;
|
|
68
|
+
/** 抽取连续失败退避(瞬态,不持久化:重启后允许首试再退避):
|
|
69
|
+
* sessionId → 连败次数与下次可自动重试时间(修闲置兜底×LLM 超时的重试风暴)。 */
|
|
70
|
+
private extractFailures;
|
|
66
71
|
private readonly pendingFile;
|
|
67
72
|
/** 分族 checkpoint(init 后可用;重建收尾也从这里读活引用)。 */
|
|
68
73
|
states: FamilyStates;
|
|
@@ -78,6 +83,20 @@ export declare class MemoryRunner {
|
|
|
78
83
|
private scheduleStartupRetry;
|
|
79
84
|
/** L1 抽取待重试的消息条数(状态面板用)。 */
|
|
80
85
|
get pendingCount(): number;
|
|
86
|
+
/**
|
|
87
|
+
* 会话级蒸馏视图(session-stats 端点数据源;纯内存读,零 I/O)。
|
|
88
|
+
* pendingSlice = 当前档位桶中该会话的攒批切片条数(threshold 为生效阈值,含 warmup 爬坡);
|
|
89
|
+
* parkedSlices = 其余档位桶中的残留切片(换档遗留 / off 档挂起——ADR-0003 挂起语义)。
|
|
90
|
+
*/
|
|
91
|
+
sessionView(sessionId: string, mode: string): {
|
|
92
|
+
pendingSlice: number;
|
|
93
|
+
parkedSlices: number;
|
|
94
|
+
threshold: number | null;
|
|
95
|
+
producedRecords: number;
|
|
96
|
+
lastDistillAt: number | null;
|
|
97
|
+
};
|
|
98
|
+
/** 会话产出记账(切片成功消费时调用;LRU 淘汰最久未蒸馏会话防 Map 无界增长)。 */
|
|
99
|
+
private noteSessionDistill;
|
|
81
100
|
/** 管线跑完一轮后的回调(用于召回缓存失效)。 */
|
|
82
101
|
setAfterRun(fn: () => void): void;
|
|
83
102
|
/** 一轮对话结束后入队(L0 落盘由 capture 在 turn/end 即时完成,不排蒸馏队列)。 */
|
|
@@ -105,6 +124,8 @@ export declare class MemoryRunner {
|
|
|
105
124
|
onModeChange(sessionId: string, oldMode: string, newMode: string): void;
|
|
106
125
|
private pushTask;
|
|
107
126
|
private drain;
|
|
127
|
+
/** 该会话是否处于抽取退避窗口内。 */
|
|
128
|
+
private inExtractBackoff;
|
|
108
129
|
/** 缓冲落盘(每次蒸馏尝试后调用;失败只告警不阻断管线)。
|
|
109
130
|
* 非重建轮持久化前按桶截断到上限:重建取消后的大桶不至于在后续每次
|
|
110
131
|
* 蒸馏尝试时反复整量序列化落盘(多 MB 级 IO);重建轮豁免维持。 */
|
package/dist/pipeline/runner.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { resolveDataDir } from '../config.js';
|
|
2
2
|
import { emptyPending, freshWarmup, groupPendingBySession, loadPending, PENDING_MODES, pendingPathFor, savePending, } from '../store/pending.js';
|
|
3
3
|
import { errDetail } from '../util/filelog.js';
|
|
4
|
-
import { advanceWarmupThreshold, effectiveExtractThreshold, idleSessionsToFlush, modeSwitchAction, pickSessionBackground, } from './trigger.js';
|
|
4
|
+
import { advanceWarmupThreshold, effectiveExtractThreshold, extractionBackoffMs, idleSessionsToFlush, modeSwitchAction, pickSessionBackground, } from './trigger.js';
|
|
5
5
|
import { runExtraction } from './l1.js';
|
|
6
6
|
import { runSceneConsolidation } from './l2.js';
|
|
7
7
|
import { runPersona } from './l3.js';
|
|
@@ -60,6 +60,8 @@ export function effectiveCfg(cfg, live) {
|
|
|
60
60
|
}
|
|
61
61
|
/** 单桶堆积上限(防无限堆积;重建分块不受限——历史会话需全量入桶蒸馏)。 */
|
|
62
62
|
const PENDING_BUCKET_CAP = 200;
|
|
63
|
+
/** 会话产出记账表容量上限(超出淘汰最久未蒸馏会话;悬浮卡信息区数据源防泄漏)。 */
|
|
64
|
+
const SESSION_PRODUCED_CAP = 400;
|
|
63
65
|
/** 启动补跑延迟:避开宿主启动期忙乱。 */
|
|
64
66
|
const STARTUP_RETRY_DELAY_MS = 20_000;
|
|
65
67
|
/** 闲置扫描 tick 粒度(实际落袋延迟 = idleSeconds + 至多一个 tick)。 */
|
|
@@ -80,6 +82,11 @@ export class MemoryRunner {
|
|
|
80
82
|
warmup = freshWarmup();
|
|
81
83
|
/** 每会话最后活动时间(闲置兜底判定用)。 */
|
|
82
84
|
lastActivity = new Map();
|
|
85
|
+
/** 每会话累计产出 L1 条数与最近蒸馏时间(session-stats 数据源;LRU 上限防泄漏)。 */
|
|
86
|
+
sessionProduced = new Map();
|
|
87
|
+
/** 抽取连续失败退避(瞬态,不持久化:重启后允许首试再退避):
|
|
88
|
+
* sessionId → 连败次数与下次可自动重试时间(修闲置兜底×LLM 超时的重试风暴)。 */
|
|
89
|
+
extractFailures = new Map();
|
|
83
90
|
pendingFile;
|
|
84
91
|
/** 分族 checkpoint(init 后可用;重建收尾也从这里读活引用)。 */
|
|
85
92
|
states;
|
|
@@ -143,6 +150,60 @@ export class MemoryRunner {
|
|
|
143
150
|
get pendingCount() {
|
|
144
151
|
return this.pending.auto.length + this.pending.chat.length + this.pending.work.length;
|
|
145
152
|
}
|
|
153
|
+
/**
|
|
154
|
+
* 会话级蒸馏视图(session-stats 端点数据源;纯内存读,零 I/O)。
|
|
155
|
+
* pendingSlice = 当前档位桶中该会话的攒批切片条数(threshold 为生效阈值,含 warmup 爬坡);
|
|
156
|
+
* parkedSlices = 其余档位桶中的残留切片(换档遗留 / off 档挂起——ADR-0003 挂起语义)。
|
|
157
|
+
*/
|
|
158
|
+
sessionView(sessionId, mode) {
|
|
159
|
+
const count = (bucket) => bucket.reduce((n, m) => (m.sessionId === sessionId ? n + 1 : n), 0);
|
|
160
|
+
const view = {
|
|
161
|
+
pendingSlice: 0,
|
|
162
|
+
parkedSlices: 0,
|
|
163
|
+
threshold: null,
|
|
164
|
+
producedRecords: 0,
|
|
165
|
+
lastDistillAt: null,
|
|
166
|
+
};
|
|
167
|
+
const prod = this.sessionProduced.get(sessionId);
|
|
168
|
+
if (prod) {
|
|
169
|
+
view.producedRecords = prod.count;
|
|
170
|
+
view.lastDistillAt = prod.lastAt;
|
|
171
|
+
}
|
|
172
|
+
const own = PENDING_MODES.includes(mode) ? mode : null;
|
|
173
|
+
if (own) {
|
|
174
|
+
view.pendingSlice = count(this.pending[own]);
|
|
175
|
+
view.threshold = effectiveExtractThreshold(this.warmup[own], this.cfg.extract?.minMessages ?? 0);
|
|
176
|
+
}
|
|
177
|
+
for (const m of PENDING_MODES) {
|
|
178
|
+
if (m !== own)
|
|
179
|
+
view.parkedSlices += count(this.pending[m]);
|
|
180
|
+
}
|
|
181
|
+
return view;
|
|
182
|
+
}
|
|
183
|
+
/** 会话产出记账(切片成功消费时调用;LRU 淘汰最久未蒸馏会话防 Map 无界增长)。 */
|
|
184
|
+
noteSessionDistill(sessionId, produced) {
|
|
185
|
+
const now = Date.now();
|
|
186
|
+
const cur = this.sessionProduced.get(sessionId);
|
|
187
|
+
if (cur) {
|
|
188
|
+
cur.count += produced;
|
|
189
|
+
cur.lastAt = now;
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
this.sessionProduced.set(sessionId, { count: produced, lastAt: now });
|
|
193
|
+
}
|
|
194
|
+
if (this.sessionProduced.size > SESSION_PRODUCED_CAP) {
|
|
195
|
+
let oldestKey = null;
|
|
196
|
+
let oldestAt = Infinity;
|
|
197
|
+
for (const [sid, v] of this.sessionProduced) {
|
|
198
|
+
if (v.lastAt < oldestAt) {
|
|
199
|
+
oldestAt = v.lastAt;
|
|
200
|
+
oldestKey = sid;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
if (oldestKey)
|
|
204
|
+
this.sessionProduced.delete(oldestKey);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
146
207
|
/** 管线跑完一轮后的回调(用于召回缓存失效)。 */
|
|
147
208
|
setAfterRun(fn) {
|
|
148
209
|
this.afterRun = fn;
|
|
@@ -193,7 +254,7 @@ export class MemoryRunner {
|
|
|
193
254
|
}
|
|
194
255
|
if (infos.size === 0)
|
|
195
256
|
return;
|
|
196
|
-
const targets = idleSessionsToFlush([...infos.values()], this.lastActivity, now, idleMs, (sid) => this.modes?.get(sid) === 'off');
|
|
257
|
+
const targets = idleSessionsToFlush([...infos.values()], this.lastActivity, now, idleMs, (sid) => this.modes?.get(sid) === 'off').filter((sid) => !this.inExtractBackoff(sid, now)); // 退避中的会话不入队(任务堆积源头)
|
|
197
258
|
for (const sid of targets) {
|
|
198
259
|
this.logger.info(`[memory] 闲置兜底:会话 ${sid} 静默达标,未蒸馏切片落袋`);
|
|
199
260
|
this.enqueueSessionSlices(sid);
|
|
@@ -248,6 +309,11 @@ export class MemoryRunner {
|
|
|
248
309
|
this.draining = false;
|
|
249
310
|
}
|
|
250
311
|
}
|
|
312
|
+
/** 该会话是否处于抽取退避窗口内。 */
|
|
313
|
+
inExtractBackoff(sessionId, now = Date.now()) {
|
|
314
|
+
const f = this.extractFailures.get(sessionId);
|
|
315
|
+
return !!f && now < f.nextAt;
|
|
316
|
+
}
|
|
251
317
|
/** 缓冲落盘(每次蒸馏尝试后调用;失败只告警不阻断管线)。
|
|
252
318
|
* 非重建轮持久化前按桶截断到上限:重建取消后的大桶不至于在后续每次
|
|
253
319
|
* 蒸馏尝试时反复整量序列化落盘(多 MB 级 IO);重建轮豁免维持。 */
|
|
@@ -289,11 +355,15 @@ export class MemoryRunner {
|
|
|
289
355
|
// force:重建轮全量蒸馏(历史小会话也必须出记忆,不受阈值约束)。
|
|
290
356
|
const effective = effectiveExtractThreshold(this.warmup[mode], cfg.extract.minMessages);
|
|
291
357
|
const sliceLen = bucket.reduce((n, m) => (m.sessionId === sessionId ? n + 1 : n), 0);
|
|
292
|
-
|
|
358
|
+
// 抽取失败退避:重建轮(noBufferCap,用户显式动作、有自己的失败/取消 UI)豁免
|
|
359
|
+
const backedOff = !opts?.noBufferCap && this.inExtractBackoff(sessionId);
|
|
360
|
+
if ((opts?.force || sliceLen >= effective) && !backedOff) {
|
|
293
361
|
newRecords = await this.extractSessionSlice(sessionId, mode, cfg, effective, opts);
|
|
294
362
|
}
|
|
295
363
|
else {
|
|
296
|
-
this.logger.debug?.(
|
|
364
|
+
this.logger.debug?.(backedOff
|
|
365
|
+
? `[memory] 蒸馏退避中,本轮跳过抽取(session=${sessionId},mode=${mode})`
|
|
366
|
+
: `[memory] 会话切片攒批中(session=${sessionId},mode=${mode},${sliceLen}/${effective})`);
|
|
297
367
|
// 攒阈值中途也落盘:进程退出后切片与爬坡状态不丢
|
|
298
368
|
await this.persistPending(opts?.noBufferCap);
|
|
299
369
|
}
|
|
@@ -368,6 +438,10 @@ export class MemoryRunner {
|
|
|
368
438
|
// 重建轮(force)不是有机对话,不推进爬坡
|
|
369
439
|
if (!opts?.force)
|
|
370
440
|
this.warmup[mode] = advanceWarmupThreshold(this.warmup[mode], cfg.extract.minMessages);
|
|
441
|
+
// 会话产出记账(成功消费即记——零产出也算"蒸馏过",lastAt 推进)
|
|
442
|
+
this.noteSessionDistill(sessionId, result.newRecords.length);
|
|
443
|
+
// 成功消费清零失败退避(切片已出桶,后续轮次恢复正常触发)
|
|
444
|
+
this.extractFailures.delete(sessionId);
|
|
371
445
|
}
|
|
372
446
|
this.logger.info(`[memory] L1 阶段完成(session=${sessionId},mode=${mode},切片 ${slice.length} 条,背景 ${background.length} 条,阈值 ${effectiveThreshold},${Date.now() - t}ms)`);
|
|
373
447
|
// 缓冲与爬坡每次尝试后立即落盘:进程中途退出不丢待重试/攒阈值状态
|
|
@@ -385,6 +459,11 @@ export class MemoryRunner {
|
|
|
385
459
|
catch (err) {
|
|
386
460
|
// 保留切片下次重试(桶入口已裁到 ≤200,防无限堆积;重建轮不裁,量被会话规模约束)
|
|
387
461
|
this.logger.warn(`[memory] L1 抽取失败(session=${sessionId},mode=${mode},切片 ${slice.length} 条): ${errDetail(err)}`);
|
|
462
|
+
// 指数退避:压制闲置兜底/补跑在 LLM 故障期间的连环重试(成功消费时清零)
|
|
463
|
+
const streak = (this.extractFailures.get(sessionId)?.streak ?? 0) + 1;
|
|
464
|
+
const delayMs = extractionBackoffMs(streak);
|
|
465
|
+
this.extractFailures.set(sessionId, { streak, nextAt: Date.now() + delayMs });
|
|
466
|
+
this.logger.info(`[memory] 蒸馏连续失败 ${streak} 次,${Math.round(delayMs / 1000)}s 内暂停该会话的自动重试`);
|
|
388
467
|
await this.persistPending(opts?.noBufferCap).catch(() => { });
|
|
389
468
|
return [];
|
|
390
469
|
}
|
|
@@ -24,6 +24,8 @@ export declare function modeSwitchAction(oldMode: string, newMode: string): Mode
|
|
|
24
24
|
export declare function pickSessionBackground<T extends {
|
|
25
25
|
id: string;
|
|
26
26
|
}>(recent: readonly T[], sliceIds: ReadonlySet<string>, n: number): T[];
|
|
27
|
+
/** 连续失败第 failStreak 次后的自动重试等待时长(1 → 60s,2 → 120s,…封顶 30min)。 */
|
|
28
|
+
export declare function extractionBackoffMs(failStreak: number): number;
|
|
27
29
|
export interface IdleSliceInfo {
|
|
28
30
|
sessionId: string;
|
|
29
31
|
/** 该会话跨桶合计的切片条数。 */
|
package/dist/pipeline/trigger.js
CHANGED
|
@@ -43,6 +43,17 @@ export function pickSessionBackground(recent, sliceIds, n) {
|
|
|
43
43
|
return [];
|
|
44
44
|
return recent.filter((m) => !sliceIds.has(m.id)).slice(-n);
|
|
45
45
|
}
|
|
46
|
+
// ── 抽取失败退避(修"重试风暴":LLM 网关故障期间闲置兜底每 30s 入队一个任务,
|
|
47
|
+
// 在 120s LLM 超时的等待中堆积成连环调用)──
|
|
48
|
+
/** 退避基数与封顶:60s 起步指数翻倍,封顶 30 分钟(LLM 故障自愈的合理量级)。 */
|
|
49
|
+
const EXTRACT_BACKOFF_BASE_MS = 60_000;
|
|
50
|
+
const EXTRACT_BACKOFF_CAP_MS = 30 * 60_000;
|
|
51
|
+
/** 连续失败第 failStreak 次后的自动重试等待时长(1 → 60s,2 → 120s,…封顶 30min)。 */
|
|
52
|
+
export function extractionBackoffMs(failStreak) {
|
|
53
|
+
if (!Number.isFinite(failStreak) || failStreak <= 0)
|
|
54
|
+
return EXTRACT_BACKOFF_BASE_MS;
|
|
55
|
+
return Math.min(EXTRACT_BACKOFF_BASE_MS * 2 ** (failStreak - 1), EXTRACT_BACKOFF_CAP_MS);
|
|
56
|
+
}
|
|
46
57
|
/**
|
|
47
58
|
* 闲置扫描:静默达标且有切片的会话。off 档会话跳过(挂起语义);
|
|
48
59
|
* 活动时间优先取运行时记录,缺省回退切片内最晚消息时间。
|
|
@@ -2,11 +2,17 @@
|
|
|
2
2
|
* L1 抽取 Prompt(移植自 MemoryCore src/core/prompts/l1-extraction.ts)。
|
|
3
3
|
* 档位词表:chat(persona/episodic/instruction)+ work(work_fact/work_task/work_method/work_artifact)
|
|
4
4
|
* + auto(合并词表,七类全开、按内容自动归族)。
|
|
5
|
+
*
|
|
6
|
+
* 与上游的分叉(2026-08-23,lifecycle 赛道实测修复):auto 档输出**每条记忆显式 family
|
|
7
|
+
* 字段**(语境归族、形状不归族;family 决定 type 词表)。上游靠 type 前缀隐式定族,
|
|
8
|
+
* "个人计划性事实"(喂养频率/用药周期等)会被 work_fact/work_method 的形状语义吸走
|
|
9
|
+
* → 族错标 → 同事实双族并存(去重不跨族)+ 分族门控泄漏。工程侧兜底链见
|
|
10
|
+
* types.ts resolveRecordFamily(纯档强制 → 抽取显式 → type 前缀)。
|
|
5
11
|
*/
|
|
6
12
|
import type { ConversationMessage, ExtractMode } from '../types.js';
|
|
7
13
|
export declare const EXTRACT_MEMORIES_SYSTEM_PROMPT = "\u4F60\u662F\u4E13\u4E1A\u7684\"\u60C5\u5883\u5207\u5206\u4E0E\u8BB0\u5FC6\u63D0\u53D6\u4E13\u5BB6\"\u3002\n\u4F60\u7684\u4EFB\u52A1\u662F\u5206\u6790\u7528\u6237\u7684\u5BF9\u8BDD\uFF0C\u5224\u65AD\u60C5\u5883\u5207\u6362\uFF0C\u5E76\u4ECE\u4E2D\u63D0\u53D6\u7ED3\u6784\u5316\u7684\u6838\u5FC3\u8BB0\u5FC6\uFF08\u4EC5\u9650 persona, episodic, instruction \u4E09\u7C7B\uFF09\u3002\n\n**\u8F93\u51FA\u8BED\u8A00**\uFF1A\u6240\u6709\u81EA\u7531\u6587\u672C\u5B57\u6BB5\uFF08`scene_name`\u3001memory `content`\uFF09\u4F7F\u7528\u4E0E\u7528\u6237\u6D88\u606F\u76F8\u540C\u7684\u8BED\u8A00\uFF1BJSON \u5B57\u6BB5\u540D\u3001\u679A\u4E3E\u503C\u3001ISO \u65F6\u95F4\u6233\u4FDD\u6301\u82F1\u6587\u3002\n\n### \u4EFB\u52A1\u4E00\uFF1A\u60C5\u5883\u5207\u5206\uFF08Scene Segmentation\uFF09\n\u5206\u6790\u3010\u5F85\u63D0\u53D6\u7684\u65B0\u6D88\u606F\u3011\uFF0C\u7ED3\u5408\u3010\u4E0A\u4E00\u4E2A\u60C5\u5883\u3011\uFF0C\u5224\u65AD\u5E76\u8F93\u51FA\u5F53\u524D\u5BF9\u8BDD\u7684\u60C5\u5883\u3002\n- \u7EE7\u627F\uFF1A\u65E0\u660E\u663E\u5207\u6362\uFF0C\u6CBF\u7528\u4E0A\u4E00\u4E2A\u60C5\u5883\u3002\n- \u5207\u6362\u6761\u4EF6\uFF1A\u7528\u6237\u53D1\u51FA\u660E\u786E\u6307\u4EE4\uFF08\u5982\"\u6362\u8BDD\u9898\"\uFF09\u3001\u610F\u56FE\u8F6C\u53D8\u3001\u6216\u63D0\u51FA\u72EC\u7ACB\u65B0\u76EE\u6807\u3002\n- \u4E00\u6BB5\u5BF9\u8BDD\u53EF\u80FD\u53EA\u6709\u4E00\u4E2A\u60C5\u5883\uFF0C\u4E5F\u53EF\u80FD\u6709\u591A\u4E2A\u60C5\u5883\uFF08\u8BDD\u9898\u591A\u6B21\u5207\u6362\u65F6\uFF09\u3002\n- \u547D\u540D\u89C4\u5219\uFF1A\"\u6211\uFF08AI\uFF09\u5728\u548Cxxx\uFF08\u7528\u6237\u8EAB\u4EFD\uFF09\u505Axxx\uFF08\u76EE\u6807\u6D3B\u52A8\uFF09\"\uFF08**\u4F7F\u7528\u4E0A\u8FF0\u8F93\u51FA\u8BED\u8A00**\uFF0C\u7EA6 30-50 \u4E2A\u5B57\u7B26\u6216\u7B49\u4EF7\u957F\u5EA6\uFF0C\u5355\u53E5\uFF0C\u5168\u5C40\u552F\u4E00\uFF09\u3002\n\n---\n\n### \u4EFB\u52A1\u4E8C\uFF1A\u6838\u5FC3\u8BB0\u5FC6\u63D0\u53D6\uFF08Memory Extraction\uFF09\n\u7ED3\u5408\u80CC\u666F\u548C\u5F53\u524D\u60C5\u5883\uFF0C\u4EC5\u4ECE\u3010\u5F85\u63D0\u53D6\u7684\u65B0\u6D88\u606F\u3011\u4E2D\u63D0\u53D6\u6838\u5FC3\u4FE1\u606F\u3002\n\n\u3010\u901A\u7528\u63D0\u53D6\u539F\u5219\u3011\n1. \u5B81\u7F3A\u6BCB\u6EE5\uFF1A\u8FC7\u6EE4\u7410\u788E\u95F2\u804A\u3001\u4E34\u65F6\u6027\u6307\u4EE4\u548C\u4E00\u6B21\u6027\u64CD\u4F5C\uFF08\u5982\"\u8FD9\u6B21\u3001\u672C\u5355\"\uFF09\uFF1B\u5254\u9664\u4E0D\u53EF\u9760\u7684\u8FB9\u7F18\u4FE1\u606F\u3002\n2. \u72EC\u7ACB\u5B8C\u6574\uFF1A\u8BB0\u5FC6\u5FC5\u987B\"\u8DF3\u51FA\u5F53\u524D\u5BF9\u8BDD\u4F9D\u7136\u6210\u7ACB\"\uFF0C\u65E0\u4E0A\u4E0B\u6587\u4E5F\u80FD\u770B\u61C2\u3002\u63D0\u53D6\u4E3B\u4F53\u5FC5\u987B\u4EE5\"\u7528\u6237\uFF08\u59D3\u540D\uFF09\"\u6216\"AI\"\u4E3A\u6838\u5FC3\u3002\n3. \u5F52\u7EB3\u5408\u5E76\uFF1A\u5F3A\u5173\u8054\u6216\u56E0\u679C\u5173\u7CFB\u7684\u591A\u6761\u6D88\u606F\uFF0C\u5FC5\u987B\u5408\u5E76\u4E3A\u4E00\u6761\u5B8C\u6574\u8BB0\u5FC6\uFF0C\u4E0D\u53EF\u788E\u7247\u5316\u3002\n\n\u3010\u652F\u6301\u63D0\u53D6\u7684\u4E09\u5927\u7C7B\u578B\u3011\uFF08\u5FC5\u987B\u4E25\u683C\u9075\u5B88\u7C7B\u578B\u89C4\u5219\uFF09\n> \u4E0B\u9762\u7ED9\u51FA\u7684\"\u63D0\u53D6\u53E5\u5F0F\"\u548C\"\u89E6\u53D1\u8BCD\"\u4EC5\u4F5C\u4E3A\u4E2D\u6587\u9AA8\u67B6\u53C2\u8003\uFF1B**\u5B9E\u9645 `content` \u5FC5\u987B\u6309\u4E0A\u8FF0\u8F93\u51FA\u8BED\u8A00\u4E66\u5199**\uFF08\u4F8B\u5982\u82F1\u6587\u7528\u6237 \u2192 \"The user (Maya) is a senior product manager based in Berlin\"\uFF09\u3002\n\n1. \u4E2A\u6027\u5316\u8BB0\u5FC6 (type: \"persona\")\n - \u5B9A\u4E49\uFF1A\u7528\u6237\u7684\u7A33\u5B9A\u5C5E\u6027\u3001\u504F\u597D\u3001\u6280\u80FD\u3001\u4EF7\u503C\u89C2\u3001\u4E60\u60EF\uFF08\u5982\u4F4F\u6240\u3001\u804C\u4E1A\u3001\u996E\u98DF\u7981\u5FCC\uFF09\u3002\n - \u63D0\u53D6\u53E5\u5F0F\uFF1A\"\u7528\u6237\uFF08[\u59D3\u540D]\uFF09\u559C\u6B22/\u662F/\u64C5\u957F...\"\n - \u6253\u5206 (priority)\uFF1A80-100\uFF08\u5065\u5EB7/\u7981\u5FCC/\u6838\u5FC3\u7279\u8D28\uFF09\uFF1B50-70\uFF08\u4E00\u822C\u559C\u597D/\u6280\u80FD\uFF09\uFF1B<50\uFF08\u6A21\u7CCA\u6B21\u8981\uFF0C\u53EF\u4E22\u5F03\uFF09\u3002\n - \u89E6\u53D1\u8BCD\uFF1A\u559C\u6B22\u3001\u4E60\u60EF\u3001\u7ECF\u5E38\u3001\u6211\u8FD9\u4E2A\u4EBA...\n\n2. \u5BA2\u89C2\u4E8B\u4EF6\u8BB0\u5FC6 (type: \"episodic\")\n - \u5B9A\u4E49\uFF1A\u5BA2\u89C2\u53D1\u751F\u7684\u52A8\u4F5C\u3001\u51B3\u5B9A\u3001\u8BA1\u5212\u6216\u8FBE\u6210\u7ED3\u679C\u3002\u7EDD\u4E0D\u5305\u542B\u7EAF\u4E3B\u89C2\u611F\u53D7\u3002\n - \u63D0\u53D6\u53E5\u5F0F\uFF1A\"\u7528\u6237\uFF08[\u59D3\u540D]\uFF09\u5728 [\u6700\u597D\u662F\u7CBE\u786E\u7EDD\u5BF9\u65F6\u95F4] \u4E8E [\u5730\u70B9] [\u505A\u4E86\u67D0\u4E8B\uFF08\u53EF\u4EE5\u5305\u542B\u8D77\u56E0\u3001\u7ECF\u8FC7\u3001\u7ED3\u679C\uFF09]\"\u3002\n - \u65F6\u95F4\u7EA6\u675F\uFF1A\u5C3D\u91CF\u57FA\u4E8E\u6D88\u606F\u7684 timestamp \u63A8\u7B97\u7EDD\u5BF9\u65F6\u95F4\uFF0C\u5982\u80FD\u786E\u5B9A\u5219\u5728 metadata \u4E2D\u8F93\u51FA activity_start_time \u548C activity_end_time\uFF08ISO 8601\u683C\u5F0F\uFF09\u3002\u65E0\u6CD5\u786E\u5B9A\u65F6\u53EF\u7701\u7565\u3002\n - \u6253\u5206 (priority)\uFF1A80-100\uFF08\u91CD\u8981\u4E8B\u4EF6/\u8BA1\u5212\uFF09\uFF1B60-70\uFF08\u4E00\u822C\u5B8C\u6574\u6D3B\u52A8\uFF09\uFF1B<60\uFF08\u7410\u788E\u4E8B\u9879\uFF0C\u76F4\u63A5\u4E22\u5F03\uFF09\u3002\n\n3. \u5168\u5C40\u6307\u4EE4\u8BB0\u5FC6 (type: \"instruction\")\n - \u5B9A\u4E49\uFF1A\u7528\u6237\u5BF9 AI \u63D0\u51FA\u7684\u957F\u671F\u884C\u4E3A\u89C4\u5219\u3001\u683C\u5F0F\u504F\u597D\u3001\u8BED\u6C14\u63A7\u5236\u3002\n - \u63D0\u53D6\u53E5\u5F0F\uFF1A\"\u7528\u6237\u8981\u6C42/\u5E0C\u671B AI \u4EE5\u540E\u56DE\u7B54\u65F6...\"\n - \u89E6\u53D1\u8BCD\uFF1A\u4EE5\u540E\u90FD\u3001\u4ECE\u73B0\u5728\u5F00\u59CB\u3001\u8BB0\u4F4F\u3001\u5FC5\u987B\u3002\n - \u6253\u5206 (priority)\uFF1A-1\uFF08\u6781\u5176\u4E25\u683C\u7684\u5168\u5C40\u6B7B\u547D\u4EE4\uFF09\uFF1B90-100\uFF08\u6838\u5FC3\u884C\u4E3A\u89C4\u5219\uFF09\uFF1B70-80\uFF08\u91CD\u8981\u8981\u6C42\uFF09\uFF1B<70\uFF08\u4E34\u65F6\u8981\u6C42\uFF0C\u76F4\u63A5\u4E22\u5F03\uFF09\u3002\n\n---\n\n### \u4E0D\u5E94\u8BE5\u63D0\u53D6\u7684\u5185\u5BB9\n- \u7410\u788E\u95F2\u804A\u3001\u95EE\u5019\uFF1B\u4E34\u65F6\u6027\u7684\u7EAF\u5DE5\u5177\u6027\u8BF7\u6C42\uFF08\u5982\"\u8FD9\u6B21\u5E2E\u6211\u7FFB\u8BD1\u4E00\u4E0B\"\uFF09\n- \u4E00\u6B21\u6027\u64CD\u4F5C\u6307\u4EE4\uFF08\u5982\"\u8FD9\u6B21\u3001\u672C\u5355\"\u76F8\u5173\uFF09\n- \u91CD\u590D\u7684\u5185\u5BB9\uFF1BAI\u52A9\u624B\u81EA\u8EAB\u7684\u884C\u4E3A\u6216\u8F93\u51FA\n- \u4E0D\u5C5E\u4E8E\u4EE5\u4E0A3\u7C7B\u7684\u4FE1\u606F\n- \u7EAF\u4E3B\u89C2\u611F\u53D7\uFF08\u4E0D\u5E26\u5BA2\u89C2\u4E8B\u4EF6\u7684\u60C5\u7EEA\u8868\u8FBE\uFF09\n\n---\n\n### \u4EFB\u52A1\u4E09\uFF1A\u8F93\u51FA\u683C\u5F0F\u89C4\u8303\uFF08JSON\uFF09\n\u8FD4\u56DE\u4E14\u4EC5\u8FD4\u56DE\u4E00\u4E2A\u5408\u6CD5\u7684 JSON \u6570\u7EC4\u3002\u6570\u7EC4\u7684\u6BCF\u4E00\u9879\u662F\u4E00\u4E2A\u60C5\u5883\uFF0C\u5305\u542B\u8BE5\u60C5\u5883\u7684\u6D88\u606F\u8303\u56F4\u548C\u62BD\u53D6\u5230\u7684\u8BB0\u5FC6\uFF1A\n\n[\n {\n \"scene_name\": \"\u5F53\u524D\u751F\u6210\u6216\u7EE7\u627F\u7684\u60C5\u5883\u540D\u79F0\",\n \"message_ids\": [\"\u5C5E\u4E8E\u8BE5\u60C5\u5883\u7684\u6D88\u606FID\u5217\u8868\"],\n \"memories\": [\n {\n \"content\": \"\u5B8C\u6574\u3001\u72EC\u7ACB\u7684\u8BB0\u5FC6\u9648\u8FF0\uFF08\u6309\u5BF9\u5E94\u7C7B\u578B\u7684\u53E5\u5F0F\u8981\u6C42\uFF09\",\n \"type\": \"persona|episodic|instruction\",\n \"priority\": 80,\n \"source_message_ids\": [\"\u6D88\u606FID_1\", \"\u6D88\u606FID_2\"],\n \"metadata\": {}\n }\n ]\n }\n]\n\nmetadata \u5B57\u6BB5\u8BF4\u660E\uFF1A\n- episodic \u7C7B\u578B\uFF1A\u5982\u80FD\u786E\u5B9A\u6D3B\u52A8\u65F6\u95F4\uFF0C\u586B\u5165 {\"activity_start_time\": \"ISO8601\", \"activity_end_time\": \"ISO8601\"}\n- \u5176\u4ED6\u7C7B\u578B\u6216\u65E0\u6CD5\u786E\u5B9A\u65F6\u95F4\uFF1A\u8F93\u51FA\u7A7A\u5BF9\u8C61 {}\n\n\u5982\u679C\u6574\u6BB5\u5BF9\u8BDD\u65E0\u6709\u610F\u4E49\u7684\u8BB0\u5FC6\uFF0C\u4E5F\u8981\u8F93\u51FA\u60C5\u5883\u5206\u5272\u7ED3\u679C\uFF0Cmemories \u4E3A\u7A7A\u6570\u7EC4\uFF1A\n[\n {\n \"scene_name\": \"\u60C5\u5883\u540D\u79F0\",\n \"message_ids\": [\"id1\", \"id2\"],\n \"memories\": []\n }\n]\n\n\u8BF7\u4E25\u683C\u6309\u4E0A\u8FF0 JSON \u6570\u7EC4\u683C\u5F0F\u8F93\u51FA\uFF0C\u4E0D\u8981\u8F93\u51FA\u4EFB\u4F55\u989D\u5916\u7684 Markdown \u4EE3\u7801\u5757\u4FEE\u9970\u7B26\uFF08\u5982 ```json\uFF09\u6216\u89E3\u91CA\u6587\u672C\u3002";
|
|
8
14
|
export declare const EXTRACT_WORK_MEMORIES_SYSTEM_PROMPT = "\u4F60\u662F\u4E13\u4E1A\u7684\"\u5DE5\u4F5C\u60C5\u5883\u5207\u5206\u4E0E\u56E2\u961F\u5171\u4EAB\u8BB0\u5FC6\u63D0\u53D6\u4E13\u5BB6\"\u3002\n\u4F60\u7684\u4EFB\u52A1\u662F\u5206\u6790\u591A\u4EBA\u5DE5\u4F5C\u6D88\u606F\uFF0C\u5224\u65AD\u5DE5\u4F5C\u60C5\u5883\u5207\u6362\uFF0C\u5E76\u4ECE\u4E2D\u63D0\u53D6\u53EF\u5728\u9879\u76EE\u56E2\u961F\u5185\u5171\u4EAB\u7684\u7ED3\u6784\u5316\u5DE5\u4F5C\u8BB0\u5FC6\u3002\n\n\u672C\u4EFB\u52A1\u9762\u5411\u5DE5\u4F5C\u573A\u5408\u7684\u56E2\u961F\u534F\u4F5C\u573A\u666F\u3002\u4F60\u5E94\u91CD\u70B9\u63D0\u53D6\u9879\u76EE\u4E8B\u5B9E\u3001\u4EFB\u52A1\u8FDB\u5C55\u3001\u51B3\u7B56\u7ED3\u8BBA\u3001\u5DE5\u4F5C\u65B9\u6CD5\u3001SOP\u3001\u7981\u5FCC\u3001\u8BBE\u8BA1\u601D\u8DEF\u3001\u4EA4\u4ED8\u7269\u7B49\u5BF9\u56E2\u961F\u540E\u7EED\u534F\u4F5C\u548C Agent \u6267\u884C\u6709\u957F\u671F\u4EF7\u503C\u7684\u4FE1\u606F\u3002\n\n**\u8F93\u51FA\u8BED\u8A00**\uFF1A\u6240\u6709\u81EA\u7531\u6587\u672C\u5B57\u6BB5\uFF08`scene_name`\u3001memory `content`\uFF09\u4F7F\u7528\u4E0E\u5F85\u63D0\u53D6\u6D88\u606F\u4E3B\u5BFC\u8BED\u8A00\u76F8\u540C\u7684\u8BED\u8A00\uFF1BJSON \u5B57\u6BB5\u540D\u3001\u679A\u4E3E\u503C\u3001ISO \u65F6\u95F4\u6233\u4FDD\u6301\u82F1\u6587\u3002\n\n---\n\n### \u4EFB\u52A1\u4E00\uFF1A\u5DE5\u4F5C\u60C5\u5883\u5207\u5206\uFF08Work Scene Segmentation\uFF09\n\n\u5206\u6790\u3010\u5F85\u63D0\u53D6\u7684\u65B0\u6D88\u606F\u3011\uFF0C\u7ED3\u5408\u3010\u4E0A\u4E00\u4E2A\u60C5\u5883\u3011\u548C\u3010\u80CC\u666F\u6D88\u606F\u3011\uFF0C\u5224\u65AD\u5F53\u524D\u6D88\u606F\u5C5E\u4E8E\u54EA\u4E2A\u5DE5\u4F5C\u60C5\u5883\u3002\n\n\u3010\u60C5\u5883\u5B9A\u4E49\u3011\n\u4E00\u4E2A\u60C5\u5883\u662F\u56F4\u7ED5\u540C\u4E00\u4E2A\u9879\u76EE\u3001\u4EFB\u52A1\u3001\u6A21\u5757\u3001\u9700\u6C42\u3001\u95EE\u9898\u3001\u51B3\u7B56\u3001\u4E8B\u6545\u3001\u5BA2\u6237\u573A\u666F\u6216\u5DE5\u4F5C\u76EE\u6807\u5C55\u5F00\u7684\u4E00\u7EC4\u6D88\u606F\u3002\n\n\u3010\u7EE7\u627F\u6761\u4EF6\u3011\n\u5982\u679C\u65B0\u6D88\u606F\u4ECD\u5728\u5EF6\u7EED\u4E0A\u4E00\u4E2A\u9879\u76EE\u3001\u4EFB\u52A1\u3001\u9700\u6C42\u3001\u95EE\u9898\u6216\u5DE5\u4F5C\u76EE\u6807\uFF0C\u5219\u6CBF\u7528\u4E0A\u4E00\u4E2A\u60C5\u5883\u3002\n\n\u3010\u5207\u6362\u6761\u4EF6\u3011\n\u51FA\u73B0\u4EE5\u4E0B\u60C5\u51B5\u4E4B\u4E00\uFF0C\u5E94\u5207\u6362\u6216\u521B\u5EFA\u65B0\u7684\u60C5\u5883\uFF1A\n1. \u8BA8\u8BBA\u5BF9\u8C61\u53D8\u6210\u53E6\u4E00\u4E2A\u9879\u76EE\u3001\u6A21\u5757\u3001\u9700\u6C42\u3001\u5BA2\u6237\u3001Issue\u3001PR\u3001\u5B9E\u9A8C\u3001\u4E8B\u6545\u6216\u4EA4\u4ED8\u7269\u3002\n2. \u5DE5\u4F5C\u76EE\u6807\u53D1\u751F\u660E\u663E\u53D8\u5316\uFF0C\u4F8B\u5982\u4ECE\"\u9700\u6C42\u8BA8\u8BBA\"\u5207\u6362\u5230\"\u4E0A\u7EBF\u6392\u671F\"\u3002\n3. \u660E\u786E\u51FA\u73B0\u65B0\u7684\u72EC\u7ACB\u4EFB\u52A1\u3001\u51B3\u7B56\u7EBF\u7A0B\u6216\u95EE\u9898\u6392\u67E5\u7EBF\u7A0B\u3002\n4. \u591A\u4E2A\u5DE5\u4F5C\u8BAE\u9898\u5728\u540C\u4E00\u6279\u6D88\u606F\u4E2D\u8FDE\u7EED\u51FA\u73B0\uFF0C\u5E94\u62C6\u5206\u4E3A\u591A\u4E2A\u60C5\u5883\u3002\n\n\u3010\u547D\u540D\u89C4\u5219\u3011\n- \u60C5\u5883\u540D\u79F0\u5FC5\u987B\u56F4\u7ED5\u5DE5\u4F5C\u5BF9\u8C61\u547D\u540D\u3002\n- \u63A8\u8350\u683C\u5F0F\uFF1A\"\u56E2\u961F\u5728\u56F4\u7ED5[\u9879\u76EE/\u6A21\u5757/\u8BAE\u9898]\u63A8\u8FDB[\u76EE\u6807\u6D3B\u52A8]\"\u3002\n- \u957F\u5EA6\u7EA6 30-50 \u4E2A\u5B57\u7B26\u6216\u7B49\u4EF7\u957F\u5EA6\uFF0C\u5355\u53E5\uFF0C\u5168\u5C40\u552F\u4E00\u3002\n\n---\n\n### \u4EFB\u52A1\u4E8C\uFF1A\u56E2\u961F\u5171\u4EAB\u5DE5\u4F5C\u8BB0\u5FC6\u63D0\u53D6\uFF08Work Memory Extraction\uFF09\n\n\u7ED3\u5408\u80CC\u666F\u548C\u5F53\u524D\u60C5\u5883\uFF0C\u4EC5\u4ECE\u3010\u5F85\u63D0\u53D6\u7684\u65B0\u6D88\u606F\u3011\u4E2D\u63D0\u53D6\u53EF\u5171\u4EAB\u7684\u6838\u5FC3\u5DE5\u4F5C\u4FE1\u606F\u3002\n\n\u3010\u901A\u7528\u63D0\u53D6\u539F\u5219\u3011\n\n1. \u9762\u5411\u5DE5\u4F5C\u534F\u4F5C\uFF1A\n - \u63D0\u53D6\u51FA\u7684\u8BB0\u5FC6\u5E94\u80FD\u5E2E\u52A9\u56E2\u961F\u6210\u5458\u6216 Agent \u5728\u540E\u7EED\u4EFB\u52A1\u4E2D\u7406\u89E3\u9879\u76EE\u80CC\u666F\u3001\u63A5\u7EED\u4EFB\u52A1\u3001\u590D\u7528\u7ECF\u9A8C\u6216\u907F\u514D\u91CD\u590D\u9519\u8BEF\u3002\n - \u4E0D\u63D0\u53D6\u666E\u901A\u5BD2\u6684\u3001\u95F2\u804A\u3001\u4E34\u65F6\u60C5\u7EEA\u8868\u8FBE\u3001\u4E00\u6B21\u6027\u5DE5\u5177\u8BF7\u6C42\u3002\n\n2. \u9762\u5411\u56E2\u961F\u5171\u4EAB\uFF1A\n - \u63D0\u53D6\u5185\u5BB9\u9ED8\u8BA4\u4F1A\u5728\u9879\u76EE\u56E2\u961F\u5185\u5171\u4EAB\u3002\n - \u53EA\u63D0\u53D6\u9002\u5408\u56E2\u961F\u5171\u4EAB\u7684\u5DE5\u4F5C\u5185\u5BB9\u3002\n - \u4E0D\u63D0\u53D6\u4E0E\u5DE5\u4F5C\u65E0\u5173\u7684\u4E2A\u4EBA\u504F\u597D\u3001\u79C1\u4EBA\u751F\u6D3B\u6216\u654F\u611F\u4FE1\u606F\u3002\n\n3. \u72EC\u7ACB\u5B8C\u6574\uFF1A\n - \u6BCF\u6761\u8BB0\u5FC6\u5FC5\u987B\u8DF3\u51FA\u5F53\u524D\u5BF9\u8BDD\u4ECD\u80FD\u7406\u89E3\u3002\n - content \u5FC5\u987B\u5305\u542B\u6E05\u6670\u4E3B\u4F53\u3001\u5DE5\u4F5C\u5BF9\u8C61\u3001\u7ED3\u8BBA\u3001\u72B6\u6001\u6216\u65B9\u6CD5\u3002\n - \u4E0D\u8981\u4F7F\u7528\"\u8FD9\u4E2A\"\u3001\"\u90A3\u4E2A\"\u3001\"\u4E0A\u9762\u8BF4\u7684\"\u7B49\u4F9D\u8D56\u4E0A\u4E0B\u6587\u7684\u8868\u8FBE\u3002\n\n4. \u51C6\u786E\u5F52\u56E0\uFF1A\n - \u67D0\u4EBA\u63D0\u51FA\u7684\u5EFA\u8BAE\u3001\u62C5\u5FE7\u3001\u5224\u65AD\uFF0C\u4E0D\u7B49\u4E8E\u56E2\u961F\u51B3\u7B56\u3002\n - \u53EA\u6709\u51FA\u73B0\u660E\u786E\u786E\u8BA4\u3001\u62CD\u677F\u3001\u91C7\u7EB3\u3001\u6267\u884C\u5B89\u6392\u65F6\uFF0C\u624D\u80FD\u5199\u6210\u786E\u5B9A\u7ED3\u8BBA\u3002\n - \u672A\u786E\u8BA4\u5185\u5BB9\u5E94\u8868\u8FBE\u4E3A\"\u56E2\u961F\u6B63\u5728\u8BA8\u8BBA...\"\u3001\"\u67D0\u65B9\u6848\u4ECD\u5F85\u786E\u8BA4...\"\u3001\"\u5B58\u5728\u67D0\u98CE\u9669...\"\u3002\n\n5. \u5F52\u7EB3\u5408\u5E76\uFF1A\n - \u5F3A\u5173\u8054\u7684\u591A\u6761\u6D88\u606F\u5E94\u5408\u5E76\u6210\u4E00\u6761\u5B8C\u6574\u8BB0\u5FC6\u3002\n - \u4E0D\u8981\u628A\u540C\u4E00\u4E2A\u5DE5\u4F5C\u7ED3\u8BBA\u62C6\u6210\u591A\u4E2A\u788E\u7247\u3002\n - \u4F46\u4E0D\u540C\u5DE5\u4F5C\u5BF9\u8C61\u3001\u4E0D\u540C\u4EFB\u52A1\u3001\u4E0D\u540C\u65B9\u6CD5\u8BBA\u5E94\u5206\u5F00\u63D0\u53D6\u3002\n\n6. \u53EA\u4ECE\u65B0\u6D88\u606F\u63D0\u53D6\uFF1A\n - \u3010\u80CC\u666F\u6D88\u606F\u3011\u53EA\u7528\u4E8E\u7406\u89E3\u4E0A\u4E0B\u6587\u3001\u6307\u4EE3\u5173\u7CFB\u548C\u65F6\u95F4\u3002\n - \u4E25\u7981\u4ECE\u80CC\u666F\u6D88\u606F\u4E2D\u65B0\u589E\u63D0\u53D6\u8BB0\u5FC6\u3002\n - source_message_ids \u5FC5\u987B\u53EA\u5305\u542B\u3010\u5F85\u63D0\u53D6\u7684\u65B0\u6D88\u606F\u3011\u4E2D\u7684 message id\u3002\n\n7. AI / Agent \u8F93\u51FA\u5904\u7406\uFF1A\n - \u4E0D\u8981\u628A AI \u7684\u5EFA\u8BAE\u81EA\u52A8\u5F53\u6210\u56E2\u961F\u4E8B\u5B9E\u6216\u56E2\u961F\u51B3\u7B56\u3002\n - \u53EA\u6709\u5F53\u4EBA\u7C7B\u6210\u5458\u91C7\u7EB3\u3001\u786E\u8BA4\uFF0C\u6216 Agent \u8F93\u51FA\u672C\u8EAB\u662F\u660E\u786E\u7684\u5DE5\u5177\u6267\u884C\u7ED3\u679C\u3001\u4EA4\u4ED8\u7269\u3001\u5B9E\u9A8C\u7ED3\u679C\u65F6\uFF0C\u624D\u53EF\u4EE5\u63D0\u53D6\u3002\n - AI \u751F\u6210\u7684\u8349\u6848\u3001\u65B9\u6848\u3001\u5206\u6790\uFF0C\u5982\u88AB\u660E\u786E\u4F5C\u4E3A\u540E\u7EED\u5DE5\u4F5C\u8D44\u4EA7\u4F7F\u7528\uFF0C\u53EF\u63D0\u53D6\u4E3A work_artifact \u6216 work_method\u3002\n\n---\n\n### \u652F\u6301\u63D0\u53D6\u7684\u56DB\u7C7B\u5DE5\u4F5C\u8BB0\u5FC6\n\nmemory `type` \u5FC5\u987B\u4ECE\u4EE5\u4E0B\u679A\u4E3E\u4E2D\u9009\u62E9\uFF1A\n\n1. \u5DE5\u4F5C\u4E8B\u5B9E\uFF08type: \"work_fact\"\uFF09\n\n\u5B9A\u4E49\uFF1A\n\u5173\u4E8E\u9879\u76EE\u3001\u7CFB\u7EDF\u3001\u4E1A\u52A1\u3001\u5BA2\u6237\u3001\u9700\u6C42\u3001\u51B3\u7B56\u3001\u72B6\u6001\u3001\u98CE\u9669\u3001\u7EA6\u675F\u3001\u5B9E\u9A8C\u7ED3\u679C\u7684\u4E8B\u5B9E\u6027\u4FE1\u606F\u3002\n\n\u9002\u5408\u63D0\u53D6\uFF1A\n- \u9879\u76EE\u76EE\u6807\u3001\u4EA7\u54C1\u9700\u6C42\u3001\u6280\u672F\u65B9\u6848\u3001\u67B6\u6784\u7EA6\u675F\u3001\u5BA2\u6237\u53CD\u9988\u3001\u51B3\u7B56\u7ED3\u8BBA\u3001\u5F53\u524D\u72B6\u6001\u3001\u98CE\u9669\u548C\u963B\u585E\u3001\u5B9E\u9A8C\u7ED3\u679C\u3001\u672F\u8BED\u5B9A\u4E49\u3001\u7CFB\u7EDF\u4E8B\u5B9E\n\npriority\uFF1A\n- 90-100\uFF1A\u5173\u952E\u51B3\u7B56\u3001\u6838\u5FC3\u9700\u6C42\u3001\u957F\u671F\u7EA6\u675F\u3001\u91CD\u8981\u98CE\u9669\u3002\n- 70-89\uFF1A\u5BF9\u5F53\u524D\u9879\u76EE\u6709\u6301\u7EED\u4EF7\u503C\u7684\u4E00\u822C\u4E8B\u5B9E\u3002\n- <70\uFF1A\u7EC6\u788E\u3001\u4E34\u65F6\u3001\u4F4E\u5F71\u54CD\u4E8B\u5B9E\uFF0C\u76F4\u63A5\u4E22\u5F03\u3002\n\n---\n\n2. \u5DE5\u4F5C\u4EFB\u52A1\uFF08type: \"work_task\"\uFF09\n\n\u5B9A\u4E49\uFF1A\n\u9700\u8981\u540E\u7EED\u6267\u884C\u3001\u8DDF\u8FDB\u3001\u786E\u8BA4\u6216\u4EA4\u4ED8\u7684\u4EFB\u52A1\u3001\u884C\u52A8\u9879\u3001\u8D23\u4EFB\u5206\u5DE5\u3002\n\n\u9002\u5408\u63D0\u53D6\uFF1A\n- \u5F85\u529E\u4E8B\u9879\u3001owner \u660E\u786E\u7684\u4EFB\u52A1\u3001deadline \u660E\u786E\u7684\u4EFB\u52A1\u3001\u9700\u8981\u8DDF\u8FDB\u7684\u95EE\u9898\u3001\u963B\u585E\u4E2D\u7684\u4E8B\u9879\u3001\u4E0B\u4E00\u6B65\u8BA1\u5212\u3001\u4EFB\u52A1\u72B6\u6001\u53D8\u5316\n\npriority\uFF1A\n- 90-100\uFF1A\u963B\u585E\u4EA4\u4ED8\u3001\u6709\u660E\u786E deadline\u3001\u5F71\u54CD\u5173\u952E\u8DEF\u5F84\u7684\u4EFB\u52A1\u3002\n- 70-89\uFF1A\u6709\u660E\u786E owner \u6216\u660E\u786E\u540E\u7EED\u52A8\u4F5C\u7684\u4E00\u822C\u4EFB\u52A1\u3002\n- <70\uFF1A\u6A21\u7CCA\u3001\u4E34\u65F6\u3001\u65E0\u660E\u786E\u540E\u7EED\u52A8\u4F5C\u7684\u5F85\u529E\uFF0C\u76F4\u63A5\u4E22\u5F03\u3002\n\nmetadata \u5EFA\u8BAE\uFF1A\n- \u5982\u80FD\u786E\u5B9A owner\uFF0C\u586B\u5165 {\"owner\": \"\u540D\u79F0\u6216ID\"}\u3002\n- \u5982\u80FD\u786E\u5B9A deadline\uFF0C\u586B\u5165 {\"deadline\": \"ISO8601\"}\u3002\n- \u5982\u80FD\u786E\u5B9A\u72B6\u6001\uFF0C\u586B\u5165 {\"status\": \"todo|doing|done|blocked|deferred|cancelled\"}\u3002\n\n---\n\n3. \u5DE5\u4F5C\u65B9\u6CD5\uFF08type: \"work_method\"\uFF09\n\n\u5B9A\u4E49\uFF1A\n\u56E2\u961F\u5728\u5DE5\u4F5C\u4E2D\u5F62\u6210\u7684\u53EF\u590D\u7528\u65B9\u6CD5\u3001SOP\u3001\u6D41\u7A0B\u3001\u539F\u5219\u3001\u7981\u5FCC\u3001\u8BBE\u8BA1\u601D\u8DEF\u3001\u7ECF\u9A8C\u6559\u8BAD\u3001\u5224\u65AD\u6807\u51C6\u3001Agent \u884C\u4E3A\u89C4\u5219\u3002\n\n\u8FD9\u662F\u56E2\u961F\u957F\u671F\u5DE5\u4F5C\u8BB0\u5FC6\u4E2D\u6700\u91CD\u8981\u7684\u7C7B\u578B\u4E4B\u4E00\u3002\u5B83\u4E0D\u53EA\u662F\u8BB0\u5F55\u53D1\u751F\u4E86\u4EC0\u4E48\uFF0C\u800C\u662F\u8BB0\u5F55\u4EE5\u540E\u9047\u5230\u7C7B\u4F3C\u4EFB\u52A1\u5E94\u8BE5\u600E\u4E48\u505A\u3001\u4E0D\u8981\u600E\u4E48\u505A\u3001\u6309\u4EC0\u4E48\u539F\u5219\u5224\u65AD\u3002\n\n\u9002\u5408\u63D0\u53D6\uFF1A\n- SOP\u3001\u534F\u4F5C\u6D41\u7A0B\u3001\u8BBE\u8BA1\u539F\u5219\u3001\u6280\u672F\u8DEF\u7EBF\u9009\u62E9\u601D\u8DEF\u3001\u8BC4\u4F30\u6807\u51C6\u3001\u98CE\u9669\u89C4\u907F\u89C4\u5219\u3001\u7981\u5FCC\u548C\u8FB9\u754C\u3001\u590D\u7528\u7ECF\u9A8C\u3001Agent \u6267\u884C\u7B56\u7565\u3001Prompt \u7F16\u5199\u539F\u5219\u3001\u9879\u76EE\u65B9\u6CD5\u8BBA\n\npriority\uFF1A\n- 90-100\uFF1A\u957F\u671F\u7A33\u5B9A\u3001\u53EF\u8DE8\u4EFB\u52A1\u590D\u7528\u3001\u5F71\u54CD Agent \u884C\u4E3A\u6216\u56E2\u961F\u6D41\u7A0B\u7684\u6838\u5FC3\u65B9\u6CD5\u3002\n- 70-89\uFF1A\u5BF9\u5F53\u524D\u9879\u76EE\u540E\u7EED\u5DE5\u4F5C\u6709\u660E\u663E\u590D\u7528\u4EF7\u503C\u7684\u65B9\u6CD5\u3002\n- <70\uFF1A\u8FC7\u4E8E\u4E34\u65F6\u3001\u6A21\u7CCA\u6216\u53EA\u9002\u7528\u4E8E\u4E00\u6B21\u6027\u64CD\u4F5C\u7684\u65B9\u6CD5\uFF0C\u76F4\u63A5\u4E22\u5F03\u3002\n\nmetadata \u5EFA\u8BAE\uFF1A\n- \u5982\u80FD\u786E\u5B9A\u9002\u7528\u8303\u56F4\uFF0C\u586B\u5165 {\"scope\": \"project|team|module|agent|workflow\"}\u3002\n- \u5982\u80FD\u786E\u5B9A\u65B9\u6CD5\u7C7B\u522B\uFF0C\u586B\u5165 {\"method_type\": \"sop|principle|constraint|anti_pattern|heuristic|evaluation_criterion\"}\u3002\n- \u5982\u662F\u7981\u5FCC\u6216\u53CD\u6A21\u5F0F\uFF0C\u586B\u5165 {\"method_type\": \"anti_pattern\"}\u3002\n\n---\n\n4. \u5DE5\u4F5C\u8D44\u4EA7\uFF08type: \"work_artifact\"\uFF09\n\n\u5B9A\u4E49\uFF1A\n\u56E2\u961F\u4EA7\u751F\u3001\u5F15\u7528\u3001\u7EF4\u62A4\u6216\u9700\u8981\u540E\u7EED\u4F7F\u7528\u7684\u5DE5\u4F5C\u8D44\u4EA7\uFF0C\u5305\u62EC\u6587\u6863\u3001PR\u3001Issue\u3001\u8BBE\u8BA1\u7A3F\u3001\u5B9E\u9A8C\u62A5\u544A\u3001\u4EE3\u7801\u4ED3\u5E93\u3001\u6570\u636E\u8868\u3001\u4F1A\u8BAE\u7EAA\u8981\u3001Prompt\u3001\u65B9\u6848\u8349\u6848\u7B49\u3002\n\n\u9002\u5408\u63D0\u53D6\uFF1A\n- \u6587\u6863\u3001PR / Issue\u3001\u4EE3\u7801\u5206\u652F\u3001\u5B9E\u9A8C\u62A5\u544A\u3001\u8BBE\u8BA1\u7A3F\u3001\u4F1A\u8BAE\u7EAA\u8981\u3001Prompt\u3001\u8868\u683C\u3001\u94FE\u63A5\u3001\u65B9\u6848\u8349\u6848\u3001Agent \u751F\u6210\u4E14\u88AB\u91C7\u7EB3\u7684\u5DE5\u4F5C\u8F93\u51FA\n\npriority\uFF1A\n- 90-100\uFF1A\u6838\u5FC3\u6587\u6863\u3001\u5173\u952E PR\u3001\u4E0A\u7EBF\u76F8\u5173\u8D44\u4EA7\u3001\u91CD\u8981\u5B9E\u9A8C\u62A5\u544A\u3002\n- 70-89\uFF1A\u540E\u7EED\u53EF\u80FD\u590D\u7528\u7684\u4E00\u822C\u5DE5\u4F5C\u8D44\u4EA7\u3002\n- <70\uFF1A\u4E34\u65F6\u6587\u4EF6\u3001\u4F4E\u4EF7\u503C\u94FE\u63A5\u3001\u672A\u88AB\u91C7\u7528\u7684\u8349\u7A3F\uFF0C\u76F4\u63A5\u4E22\u5F03\u3002\n\nmetadata \u5EFA\u8BAE\uFF1A\n- \u5982\u80FD\u786E\u5B9A\u8D44\u4EA7\u7C7B\u578B\uFF0C\u586B\u5165 {\"artifact_type\": \"doc|pr|issue|repo|branch|design|report|prompt|dataset|meeting_note\"}\u3002\n- \u5982\u80FD\u786E\u5B9A\u94FE\u63A5\u6216\u6807\u8BC6\uFF0C\u586B\u5165 {\"artifact_ref\": \"\u94FE\u63A5\u3001ID\u6216\u540D\u79F0\"}\u3002\n\n---\n\n### \u4E0D\u5E94\u8BE5\u63D0\u53D6\u7684\u5185\u5BB9\n\n\u4EE5\u4E0B\u5185\u5BB9\u901A\u5E38\u4E0D\u5E94\u63D0\u53D6\uFF1A\n- \u95EE\u5019\u3001\u5BD2\u6684\u3001\u73A9\u7B11\u3001\u65E0\u5DE5\u4F5C\u4EF7\u503C\u7684\u95F2\u804A\u3002\n- \u4E34\u65F6\u6027\u7684\u4E00\u6B21\u6027\u8BF7\u6C42\uFF0C\u4F8B\u5982\"\u8FD9\u6B21\u5E2E\u6211\u6539\u4E00\u4E0B\u683C\u5F0F\"\u3002\n- \u672A\u88AB\u91C7\u7EB3\u7684 AI \u5EFA\u8BAE\u6216\u4E34\u65F6\u8349\u7A3F\u3002\n- \u65E0\u660E\u786E\u540E\u7EED\u4EF7\u503C\u7684\u7EC6\u8282\u3002\n- \u4E0E\u56E2\u961F\u5DE5\u4F5C\u65E0\u5173\u7684\u4E2A\u4EBA\u504F\u597D\u3001\u79C1\u4EBA\u751F\u6D3B\u6216\u654F\u611F\u4FE1\u606F\u3002\n\n---\n\n### \u4EFB\u52A1\u4E09\uFF1A\u8F93\u51FA\u683C\u5F0F\u89C4\u8303\uFF08JSON\uFF09\n\n\u8FD4\u56DE\u4E14\u4EC5\u8FD4\u56DE\u4E00\u4E2A\u5408\u6CD5\u7684 JSON \u6570\u7EC4\u3002\u6570\u7EC4\u7684\u6BCF\u4E00\u9879\u662F\u4E00\u4E2A\u5DE5\u4F5C\u60C5\u5883\uFF0C\u5305\u542B\u8BE5\u60C5\u5883\u7684\u6D88\u606F\u8303\u56F4\u548C\u62BD\u53D6\u5230\u7684\u5DE5\u4F5C\u8BB0\u5FC6\uFF1A\n\n[\n {\n \"scene_name\": \"\u5F53\u524D\u751F\u6210\u6216\u7EE7\u627F\u7684\u5DE5\u4F5C\u60C5\u5883\u540D\u79F0\",\n \"message_ids\": [\"\u5C5E\u4E8E\u8BE5\u60C5\u5883\u7684\u6D88\u606FID\u5217\u8868\"],\n \"memories\": [\n {\n \"content\": \"\u5B8C\u6574\u3001\u72EC\u7ACB\u3001\u9002\u5408\u56E2\u961F\u5171\u4EAB\u7684\u5DE5\u4F5C\u8BB0\u5FC6\u9648\u8FF0\",\n \"type\": \"work_fact|work_task|work_method|work_artifact\",\n \"priority\": 80,\n \"source_message_ids\": [\"\u6D88\u606FID_1\", \"\u6D88\u606FID_2\"],\n \"metadata\": {}\n }\n ]\n }\n]\n\nmetadata \u5B57\u6BB5\u8BF4\u660E\uFF1A\n- \u6240\u6709\u7C7B\u578B\u90FD\u53EF\u4EE5\u8F93\u51FA\u7A7A\u5BF9\u8C61 {}\u3002\n- work_task \u53EF\u8865\u5145 owner\u3001deadline\u3001status\u3002\n- work_method \u53EF\u8865\u5145 scope\u3001method_type\u3002\n- work_artifact \u53EF\u8865\u5145 artifact_type\u3001artifact_ref\u3002\n- work_fact \u53EF\u8865\u5145 work_object\u3001status\u3001activity_start_time\u3001activity_end_time\u3002\n- metadata \u4E0D\u8981\u5305\u542B\u65E0\u5173\u4E2A\u4EBA\u4FE1\u606F\u3002\n\n\u5982\u679C\u6574\u6BB5\u65B0\u6D88\u606F\u65E0\u6709\u610F\u4E49\u7684\u56E2\u961F\u5171\u4EAB\u5DE5\u4F5C\u8BB0\u5FC6\uFF0C\u4E5F\u8981\u8F93\u51FA\u60C5\u5883\u5206\u5272\u7ED3\u679C\uFF0Cmemories \u4E3A\u7A7A\u6570\u7EC4\uFF1A\n\n[\n {\n \"scene_name\": \"\u5DE5\u4F5C\u60C5\u5883\u540D\u79F0\",\n \"message_ids\": [\"id1\", \"id2\"],\n \"memories\": []\n }\n]\n\n\u8BF7\u4E25\u683C\u6309\u4E0A\u8FF0 JSON \u6570\u7EC4\u683C\u5F0F\u8F93\u51FA\uFF0C\u4E0D\u8981\u8F93\u51FA\u4EFB\u4F55\u989D\u5916\u7684 Markdown \u4EE3\u7801\u5757\u4FEE\u9970\u7B26\uFF08\u5982 ```json\uFF09\u6216\u89E3\u91CA\u6587\u672C\u3002";
|
|
9
|
-
export declare const EXTRACT_ALL_MEMORIES_SYSTEM_PROMPT = "\u4F60\u662F\u4E13\u4E1A\u7684\"\u60C5\u5883\u5207\u5206\u4E0E\u8BB0\u5FC6\u63D0\u53D6\u4E13\u5BB6\"\u3002\n\u4F60\u7684\u4EFB\u52A1\u662F\u5206\u6790\u7528\u6237\u7684\u5BF9\u8BDD\uFF0C\u5224\u65AD\u60C5\u5883\u5207\u6362\uFF0C\u5E76\u4ECE\u4E2D\u63D0\u53D6\u7ED3\u6784\u5316\u7684\u6838\u5FC3\u8BB0\u5FC6\u3002\u5BF9\u8BDD\u53EF\u80FD\u540C\u65F6\u5305\u542B\u4E2A\u4EBA\u751F\u6D3B\u4E0E\u5DE5\u4F5C\u5185\u5BB9\uFF1A\u4E2A\u4EBA\u5185\u5BB9\u63D0\u53D6\u4E3A\u4E2A\u4EBA\u8BB0\u5FC6\uFF08persona/episodic/instruction\uFF09\uFF0C\u5DE5\u4F5C\u5185\u5BB9\u63D0\u53D6\u4E3A\u56E2\u961F\u5171\u4EAB\u5DE5\u4F5C\u8BB0\u5FC6\uFF08work_fact/work_task/work_method/work_artifact\uFF09\uFF0C\u4E92\u4E0D\u6392\u65A5\u3001\u6309\u5185\u5BB9\u5F52\u65CF\u3002\n\n**\u8F93\u51FA\u8BED\u8A00**\uFF1A\u6240\u6709\u81EA\u7531\u6587\u672C\u5B57\u6BB5\uFF08`scene_name`\u3001memory `content`\uFF09\u4F7F\u7528\u4E0E\u5F85\u63D0\u53D6\u6D88\u606F\u4E3B\u5BFC\u8BED\u8A00\u76F8\u540C\u7684\u8BED\u8A00\uFF1BJSON \u5B57\u6BB5\u540D\u3001\u679A\u4E3E\u503C\u3001ISO \u65F6\u95F4\u6233\u4FDD\u6301\u82F1\u6587\u3002\n\n---\n\n### \u4EFB\u52A1\u4E00\uFF1A\u60C5\u5883\u5207\u5206\uFF08Scene Segmentation\uFF09\n\u5206\u6790\u3010\u5F85\u63D0\u53D6\u7684\u65B0\u6D88\u606F\u3011\uFF0C\u7ED3\u5408\u3010\u4E0A\u4E00\u4E2A\u60C5\u5883\u3011\u548C\u3010\u80CC\u666F\u6D88\u606F\u3011\uFF0C\u5224\u65AD\u5F53\u524D\u6D88\u606F\u5C5E\u4E8E\u54EA\u4E2A\u60C5\u5883\u3002\n- \u7EE7\u627F\uFF1A\u4ECD\u5728\u5EF6\u7EED\u4E0A\u4E00\u4E2A\u8BDD\u9898\u3001\u9879\u76EE\u6216\u6D3B\u52A8\uFF0C\u6CBF\u7528\u4E0A\u4E00\u4E2A\u60C5\u5883\u3002\n- \u5207\u6362\u6761\u4EF6\uFF1A\u7528\u6237\u53D1\u51FA\u660E\u786E\u6307\u4EE4\uFF08\u5982\"\u6362\u8BDD\u9898\"\uFF09\u3001\u8BA8\u8BBA\u5BF9\u8C61\u53D8\u6210\u53E6\u4E00\u4E2A\u9879\u76EE/\u6A21\u5757/\u9700\u6C42/\u95EE\u9898\u3001\u610F\u56FE\u8F6C\u53D8\u3001\u6216\u63D0\u51FA\u72EC\u7ACB\u65B0\u76EE\u6807\u3002\n- \u4E00\u6BB5\u5BF9\u8BDD\u53EF\u80FD\u53EA\u6709\u4E00\u4E2A\u60C5\u5883\uFF0C\u4E5F\u53EF\u80FD\u6709\u591A\u4E2A\u60C5\u5883\uFF08\u8BDD\u9898\u591A\u6B21\u5207\u6362\u65F6\u5E94\u62C6\u5206\uFF09\u3002\n- \u547D\u540D\u89C4\u5219\uFF1A\u4E2A\u4EBA\u8BDD\u9898\u7528\"\u6211\uFF08AI\uFF09\u5728\u548Cxxx\uFF08\u7528\u6237\u8EAB\u4EFD\uFF09\u505Axxx\uFF08\u76EE\u6807\u6D3B\u52A8\uFF09\"\uFF1B\u5DE5\u4F5C\u8BDD\u9898\u7528\"\u56E2\u961F\u5728\u56F4\u7ED5[\u9879\u76EE/\u6A21\u5757/\u8BAE\u9898]\u63A8\u8FDB[\u76EE\u6807\u6D3B\u52A8]\"\uFF08**\u4F7F\u7528\u4E0A\u8FF0\u8F93\u51FA\u8BED\u8A00**\uFF0C\u7EA6 30-50 \u4E2A\u5B57\u7B26\u6216\u7B49\u4EF7\u957F\u5EA6\uFF0C\u5355\u53E5\uFF0C\u5168\u5C40\u552F\u4E00\uFF09\u3002\n\n---\n\n### \u4EFB\u52A1\u4E8C\uFF1A\u6838\u5FC3\u8BB0\u5FC6\u63D0\u53D6\uFF08Memory Extraction\uFF09\n\u7ED3\u5408\u80CC\u666F\u548C\u5F53\u524D\u60C5\u5883\uFF0C\u4EC5\u4ECE\u3010\u5F85\u63D0\u53D6\u7684\u65B0\u6D88\u606F\u3011\u4E2D\u63D0\u53D6\u6838\u5FC3\u4FE1\u606F\u3002\n\n\u3010\u901A\u7528\u63D0\u53D6\u539F\u5219\u3011\n1. \u5B81\u7F3A\u6BCB\u6EE5\uFF1A\u8FC7\u6EE4\u7410\u788E\u95F2\u804A\u3001\u95EE\u5019\u3001\u4E34\u65F6\u6027\u6307\u4EE4\u548C\u4E00\u6B21\u6027\u64CD\u4F5C\uFF08\u5982\"\u8FD9\u6B21\u3001\u672C\u5355\"\uFF09\uFF1B\u5254\u9664\u4E0D\u53EF\u9760\u7684\u8FB9\u7F18\u4FE1\u606F\u3002\n2. \u72EC\u7ACB\u5B8C\u6574\uFF1A\u8BB0\u5FC6\u5FC5\u987B\"\u8DF3\u51FA\u5F53\u524D\u5BF9\u8BDD\u4F9D\u7136\u6210\u7ACB\"\uFF0C\u65E0\u4E0A\u4E0B\u6587\u4E5F\u80FD\u770B\u61C2\u3002\u4E0D\u8981\u4F7F\u7528\"\u8FD9\u4E2A\"\u3001\"\u90A3\u4E2A\"\u3001\"\u4E0A\u9762\u8BF4\u7684\"\u7B49\u4F9D\u8D56\u4E0A\u4E0B\u6587\u7684\u8868\u8FBE\u3002\n3. \u5F52\u7EB3\u5408\u5E76\uFF1A\u5F3A\u5173\u8054\u6216\u56E0\u679C\u5173\u7CFB\u7684\u591A\u6761\u6D88\u606F\uFF0C\u5FC5\u987B\u5408\u5E76\u4E3A\u4E00\u6761\u5B8C\u6574\u8BB0\u5FC6\uFF0C\u4E0D\u53EF\u788E\u7247\u5316\uFF1B\u4F46\u4E0D\u540C\u5DE5\u4F5C\u5BF9\u8C61\u3001\u4E0D\u540C\u4EFB\u52A1\u3001\u4E0D\u540C\u65B9\u6CD5\u8BBA\u5E94\u5206\u5F00\u63D0\u53D6\u3002\n4. \u53EA\u4ECE\u65B0\u6D88\u606F\u63D0\u53D6\uFF1A\u3010\u80CC\u666F\u6D88\u606F\u3011\u53EA\u7528\u4E8E\u7406\u89E3\u4E0A\u4E0B\u6587\u3001\u6307\u4EE3\u5173\u7CFB\u548C\u65F6\u95F4\uFF1B\u4E25\u7981\u4ECE\u80CC\u666F\u6D88\u606F\u4E2D\u65B0\u589E\u63D0\u53D6\u8BB0\u5FC6\uFF1Bsource_message_ids \u5FC5\u987B\u53EA\u5305\u542B\u3010\u5F85\u63D0\u53D6\u7684\u65B0\u6D88\u606F\u3011\u4E2D\u7684 message id\u3002\n5. \u51C6\u786E\u5F52\u56E0\uFF08\u5DE5\u4F5C\u5185\u5BB9\uFF09\uFF1A\u67D0\u4EBA\u63D0\u51FA\u7684\u5EFA\u8BAE\u3001\u62C5\u5FE7\u3001\u5224\u65AD\uFF0C\u4E0D\u7B49\u4E8E\u56E2\u961F\u51B3\u7B56\uFF1B\u53EA\u6709\u51FA\u73B0\u660E\u786E\u786E\u8BA4\u3001\u62CD\u677F\u3001\u91C7\u7EB3\u3001\u6267\u884C\u5B89\u6392\u65F6\u624D\u80FD\u5199\u6210\u786E\u5B9A\u7ED3\u8BBA\u3002AI/Agent \u7684\u5EFA\u8BAE\u4E0D\u8981\u81EA\u52A8\u5F53\u6210\u4E8B\u5B9E\uFF0C\u9664\u975E\u88AB\u4EBA\u7C7B\u91C7\u7EB3\u3001\u6216\u5176\u8F93\u51FA\u672C\u8EAB\u662F\u660E\u786E\u7684\u5DE5\u5177\u6267\u884C\u7ED3\u679C/\u4EA4\u4ED8\u7269/\u5B9E\u9A8C\u7ED3\u679C\uFF08\u540E\u8005\u53EF\u63D0\u53D6\u4E3A work_artifact \u6216 work_method\uFF09\u3002\n\n\u3010\u652F\u6301\u63D0\u53D6\u7684\u4E03\u7C7B\u8BB0\u5FC6\u3011\uFF08\u5FC5\u987B\u4E25\u683C\u9075\u5B88\u7C7B\u578B\u89C4\u5219\uFF09\n\n**\u4E2A\u4EBA\u4E09\u7C7B\uFF08\u5BF9\u8BDD\u6D89\u53CA\u7528\u6237\u4E2A\u4EBA\u751F\u6D3B/\u504F\u597D/\u5BF9 AI \u7684\u8981\u6C42\u65F6\uFF09\uFF1A**\n\n1. \u4E2A\u6027\u5316\u8BB0\u5FC6 (type: \"persona\")\n - \u5B9A\u4E49\uFF1A\u7528\u6237\u7684\u7A33\u5B9A\u5C5E\u6027\u3001\u504F\u597D\u3001\u6280\u80FD\u3001\u4EF7\u503C\u89C2\u3001\u4E60\u60EF\uFF08\u5982\u4F4F\u6240\u3001\u804C\u4E1A\u3001\u996E\u98DF\u7981\u5FCC\uFF09\u3002\n - \u63D0\u53D6\u53E5\u5F0F\uFF1A\"\u7528\u6237\uFF08[\u59D3\u540D]\uFF09\u559C\u6B22/\u662F/\u64C5\u957F...\"\n - \u6253\u5206 (priority)\uFF1A80-100\uFF08\u5065\u5EB7/\u7981\u5FCC/\u6838\u5FC3\u7279\u8D28\uFF09\uFF1B50-70\uFF08\u4E00\u822C\u559C\u597D/\u6280\u80FD\uFF09\uFF1B<50\uFF08\u6A21\u7CCA\u6B21\u8981\uFF0C\u53EF\u4E22\u5F03\uFF09\u3002\n\n2. \u5BA2\u89C2\u4E8B\u4EF6\u8BB0\u5FC6 (type: \"episodic\")\n - \u5B9A\u4E49\uFF1A\u5BA2\u89C2\u53D1\u751F\u7684\u52A8\u4F5C\u3001\u51B3\u5B9A\u3001\u8BA1\u5212\u6216\u8FBE\u6210\u7ED3\u679C\u3002\u7EDD\u4E0D\u5305\u542B\u7EAF\u4E3B\u89C2\u611F\u53D7\u3002\n - \u63D0\u53D6\u53E5\u5F0F\uFF1A\"\u7528\u6237\uFF08[\u59D3\u540D]\uFF09\u5728 [\u6700\u597D\u662F\u7CBE\u786E\u7EDD\u5BF9\u65F6\u95F4] \u4E8E [\u5730\u70B9] [\u505A\u4E86\u67D0\u4E8B\uFF08\u53EF\u4EE5\u5305\u542B\u8D77\u56E0\u3001\u7ECF\u8FC7\u3001\u7ED3\u679C\uFF09]\"\u3002\n - \u65F6\u95F4\u7EA6\u675F\uFF1A\u5C3D\u91CF\u57FA\u4E8E\u6D88\u606F\u7684 timestamp \u63A8\u7B97\u7EDD\u5BF9\u65F6\u95F4\uFF0C\u5982\u80FD\u786E\u5B9A\u5219\u5728 metadata \u4E2D\u8F93\u51FA activity_start_time \u548C activity_end_time\uFF08ISO 8601\u683C\u5F0F\uFF09\u3002\n - \u6253\u5206 (priority)\uFF1A80-100\uFF08\u91CD\u8981\u4E8B\u4EF6/\u8BA1\u5212\uFF09\uFF1B60-70\uFF08\u4E00\u822C\u5B8C\u6574\u6D3B\u52A8\uFF09\uFF1B<60\uFF08\u7410\u788E\u4E8B\u9879\uFF0C\u76F4\u63A5\u4E22\u5F03\uFF09\u3002\n\n3. \u5168\u5C40\u6307\u4EE4\u8BB0\u5FC6 (type: \"instruction\")\n - \u5B9A\u4E49\uFF1A\u7528\u6237\u5BF9 AI \u63D0\u51FA\u7684\u957F\u671F\u884C\u4E3A\u89C4\u5219\u3001\u683C\u5F0F\u504F\u597D\u3001\u8BED\u6C14\u63A7\u5236\u3002\n - \u63D0\u53D6\u53E5\u5F0F\uFF1A\"\u7528\u6237\u8981\u6C42/\u5E0C\u671B AI \u4EE5\u540E\u56DE\u7B54\u65F6...\"\n - \u6253\u5206 (priority)\uFF1A-1\uFF08\u6781\u5176\u4E25\u683C\u7684\u5168\u5C40\u6B7B\u547D\u4EE4\uFF09\uFF1B90-100\uFF08\u6838\u5FC3\u884C\u4E3A\u89C4\u5219\uFF09\uFF1B70-80\uFF08\u91CD\u8981\u8981\u6C42\uFF09\uFF1B<70\uFF08\u4E34\u65F6\u8981\u6C42\uFF0C\u76F4\u63A5\u4E22\u5F03\uFF09\u3002\n\n**\u5DE5\u4F5C\u56DB\u7C7B\uFF08\u5BF9\u8BDD\u6D89\u53CA\u9879\u76EE\u3001\u4EFB\u52A1\u3001\u56E2\u961F\u534F\u4F5C\u65F6\uFF0C\u9ED8\u8BA4\u53EF\u5728\u9879\u76EE\u56E2\u961F\u5185\u5171\u4EAB\uFF09\uFF1A**\n\n4. \u5DE5\u4F5C\u4E8B\u5B9E (type: \"work_fact\")\n - \u5B9A\u4E49\uFF1A\u5173\u4E8E\u9879\u76EE\u3001\u7CFB\u7EDF\u3001\u4E1A\u52A1\u3001\u5BA2\u6237\u3001\u9700\u6C42\u3001\u51B3\u7B56\u3001\u72B6\u6001\u3001\u98CE\u9669\u3001\u7EA6\u675F\u3001\u5B9E\u9A8C\u7ED3\u679C\u7684\u4E8B\u5B9E\u6027\u4FE1\u606F\u3002\n - \u6253\u5206\uFF1A90-100\uFF08\u5173\u952E\u51B3\u7B56\u3001\u6838\u5FC3\u9700\u6C42\u3001\u957F\u671F\u7EA6\u675F\u3001\u91CD\u8981\u98CE\u9669\uFF09\uFF1B70-89\uFF08\u5BF9\u5F53\u524D\u9879\u76EE\u6709\u6301\u7EED\u4EF7\u503C\u7684\u4E00\u822C\u4E8B\u5B9E\uFF09\uFF1B<70 \u4E22\u5F03\u3002\n\n5. \u5DE5\u4F5C\u4EFB\u52A1 (type: \"work_task\")\n - \u5B9A\u4E49\uFF1A\u9700\u8981\u540E\u7EED\u6267\u884C\u3001\u8DDF\u8FDB\u3001\u786E\u8BA4\u6216\u4EA4\u4ED8\u7684\u4EFB\u52A1\u3001\u884C\u52A8\u9879\u3001\u8D23\u4EFB\u5206\u5DE5\u3002\n - \u6253\u5206\uFF1A90-100\uFF08\u963B\u585E\u4EA4\u4ED8\u3001\u6709\u660E\u786E deadline\u3001\u5F71\u54CD\u5173\u952E\u8DEF\u5F84\uFF09\uFF1B70-89\uFF08\u6709\u660E\u786E owner \u6216\u540E\u7EED\u52A8\u4F5C\uFF09\uFF1B<70 \u4E22\u5F03\u3002\n - metadata \u5EFA\u8BAE\uFF1A{\"owner\": \"\u540D\u79F0\u6216ID\"}\u3001{\"deadline\": \"ISO8601\"}\u3001{\"status\": \"todo|doing|done|blocked|deferred|cancelled\"}\u3002\n\n6. \u5DE5\u4F5C\u65B9\u6CD5 (type: \"work_method\")\n - \u5B9A\u4E49\uFF1A\u56E2\u961F\u5F62\u6210\u7684\u53EF\u590D\u7528\u65B9\u6CD5\u3001SOP\u3001\u6D41\u7A0B\u3001\u539F\u5219\u3001\u7981\u5FCC\u3001\u8BBE\u8BA1\u601D\u8DEF\u3001\u7ECF\u9A8C\u6559\u8BAD\u3001\u5224\u65AD\u6807\u51C6\u3001Agent \u884C\u4E3A\u89C4\u5219\u2014\u2014\u8BB0\u5F55\"\u4EE5\u540E\u9047\u5230\u7C7B\u4F3C\u4EFB\u52A1\u5E94\u8BE5\u600E\u4E48\u505A\"\u3002\n - \u6253\u5206\uFF1A90-100\uFF08\u957F\u671F\u7A33\u5B9A\u3001\u53EF\u8DE8\u4EFB\u52A1\u590D\u7528\u3001\u5F71\u54CD Agent \u884C\u4E3A\u6216\u56E2\u961F\u6D41\u7A0B\uFF09\uFF1B70-89\uFF08\u5BF9\u5F53\u524D\u9879\u76EE\u6709\u660E\u663E\u590D\u7528\u4EF7\u503C\uFF09\uFF1B<70 \u4E22\u5F03\u3002\n - metadata \u5EFA\u8BAE\uFF1A{\"scope\": \"project|team|module|agent|workflow\"}\u3001{\"method_type\": \"sop|principle|constraint|anti_pattern|heuristic|evaluation_criterion\"}\u3002\n\n7. \u5DE5\u4F5C\u8D44\u4EA7 (type: \"work_artifact\")\n - \u5B9A\u4E49\uFF1A\u56E2\u961F\u4EA7\u751F\u3001\u5F15\u7528\u3001\u7EF4\u62A4\u6216\u9700\u8981\u540E\u7EED\u4F7F\u7528\u7684\u5DE5\u4F5C\u8D44\u4EA7\uFF08\u6587\u6863\u3001PR\u3001Issue\u3001\u8BBE\u8BA1\u7A3F\u3001\u5B9E\u9A8C\u62A5\u544A\u3001\u4EE3\u7801\u4ED3\u5E93\u3001\u4F1A\u8BAE\u7EAA\u8981\u3001Prompt\u3001\u65B9\u6848\u8349\u6848\u7B49\uFF09\u3002\n - \u6253\u5206\uFF1A90-100\uFF08\u6838\u5FC3\u6587\u6863\u3001\u5173\u952E PR\u3001\u4E0A\u7EBF\u76F8\u5173\u8D44\u4EA7\uFF09\uFF1B70-89\uFF08\u540E\u7EED\u53EF\u80FD\u590D\u7528\u7684\u4E00\u822C\u8D44\u4EA7\uFF09\uFF1B<70 \u4E22\u5F03\u3002\n - metadata \u5EFA\u8BAE\uFF1A{\"artifact_type\": \"doc|pr|issue|repo|branch|design|report|prompt|dataset|meeting_note\"}\u3001{\"artifact_ref\": \"\u94FE\u63A5\u3001ID\u6216\u540D\u79F0\"}\u3002\n\n---\n\n### \u4E0D\u5E94\u8BE5\u63D0\u53D6\u7684\u5185\u5BB9\n- \u7410\u788E\u95F2\u804A\u3001\u95EE\u5019\u3001\u73A9\u7B11\uFF1B\u4E34\u65F6\u6027\u7684\u7EAF\u5DE5\u5177\u6027\u8BF7\u6C42\uFF08\u5982\"\u8FD9\u6B21\u5E2E\u6211\u7FFB\u8BD1\u4E00\u4E0B\"\uFF09\n- \u4E00\u6B21\u6027\u64CD\u4F5C\u6307\u4EE4\uFF08\u5982\"\u8FD9\u6B21\u3001\u672C\u5355\"\u76F8\u5173\uFF09\n- \u91CD\u590D\u7684\u5185\u5BB9\uFF1B\u672A\u88AB\u91C7\u7EB3\u7684 AI \u5EFA\u8BAE\u6216\u4E34\u65F6\u8349\u7A3F\n- \u7EAF\u4E3B\u89C2\u611F\u53D7\uFF08\u4E0D\u5E26\u5BA2\u89C2\u4E8B\u4EF6\u7684\u60C5\u7EEA\u8868\u8FBE\uFF09\n- \u4E0E\u5DE5\u4F5C\u65E0\u5173\u4E14\u4E0D\u9002\u5408\u56E2\u961F\u5171\u4EAB\u7684\u654F\u611F\u4E2A\u4EBA\u4FE1\u606F\n\n---\n\n### \u4EFB\u52A1\u4E09\uFF1A\u8F93\u51FA\u683C\u5F0F\u89C4\u8303\uFF08JSON\uFF09\n\u8FD4\u56DE\u4E14\u4EC5\u8FD4\u56DE\u4E00\u4E2A\u5408\u6CD5\u7684 JSON \u6570\u7EC4\u3002\u6570\u7EC4\u7684\u6BCF\u4E00\u9879\u662F\u4E00\u4E2A\u60C5\u5883\uFF0C\u5305\u542B\u8BE5\u60C5\u5883\u7684\u6D88\u606F\u8303\u56F4\u548C\u62BD\u53D6\u5230\u7684\u8BB0\u5FC6\uFF1A\n\n[\n {\n \"scene_name\": \"\u5F53\u524D\u751F\u6210\u6216\u7EE7\u627F\u7684\u60C5\u5883\u540D\u79F0\",\n \"message_ids\": [\"\u5C5E\u4E8E\u8BE5\u60C5\u5883\u7684\u6D88\u606FID\u5217\u8868\"],\n \"memories\": [\n {\n \"content\": \"\u5B8C\u6574\u3001\u72EC\u7ACB\u7684\u8BB0\u5FC6\u9648\u8FF0\uFF08\u6309\u5BF9\u5E94\u7C7B\u578B\u7684\u53E5\u5F0F\u8981\u6C42\uFF09\",\n \"type\": \"persona|episodic|instruction|work_fact|work_task|work_method|work_artifact\",\n \"priority\": 80,\n \"source_message_ids\": [\"\u6D88\u606FID_1\", \"\u6D88\u606FID_2\"],\n \"metadata\": {}\n }\n ]\n }\n]\n\nmetadata \u5B57\u6BB5\u8BF4\u660E\uFF1A\n- episodic \u7C7B\u578B\uFF1A\u5982\u80FD\u786E\u5B9A\u6D3B\u52A8\u65F6\u95F4\uFF0C\u586B\u5165 {\"activity_start_time\": \"ISO8601\", \"activity_end_time\": \"ISO8601\"}\n- work_task \u53EF\u8865\u5145 owner\u3001deadline\u3001status\uFF1Bwork_method \u53EF\u8865\u5145 scope\u3001method_type\uFF1Bwork_artifact \u53EF\u8865\u5145 artifact_type\u3001artifact_ref\uFF1Bwork_fact \u53EF\u8865\u5145 work_object\u3001status\u3001activity_start_time\u3001activity_end_time\u3002\n- \u5176\u4ED6\u7C7B\u578B\u6216\u65E0\u6CD5\u786E\u5B9A\uFF1A\u8F93\u51FA\u7A7A\u5BF9\u8C61 {}\uFF1Bmetadata \u4E0D\u8981\u5305\u542B\u65E0\u5173\u4E2A\u4EBA\u4FE1\u606F\u3002\n\n\u5982\u679C\u6574\u6BB5\u5BF9\u8BDD\u65E0\u6709\u610F\u4E49\u7684\u8BB0\u5FC6\uFF0C\u4E5F\u8981\u8F93\u51FA\u60C5\u5883\u5206\u5272\u7ED3\u679C\uFF0Cmemories \u4E3A\u7A7A\u6570\u7EC4\uFF1A\n[\n {\n \"scene_name\": \"\u60C5\u5883\u540D\u79F0\",\n \"message_ids\": [\"id1\", \"id2\"],\n \"memories\": []\n }\n]\n\n\u8BF7\u4E25\u683C\u6309\u4E0A\u8FF0 JSON \u6570\u7EC4\u683C\u5F0F\u8F93\u51FA\uFF0C\u4E0D\u8981\u8F93\u51FA\u4EFB\u4F55\u989D\u5916\u7684 Markdown \u4EE3\u7801\u5757\u4FEE\u9970\u7B26\uFF08\u5982 ```json\uFF09\u6216\u89E3\u91CA\u6587\u672C\u3002";
|
|
15
|
+
export declare const EXTRACT_ALL_MEMORIES_SYSTEM_PROMPT = "\u4F60\u662F\u4E13\u4E1A\u7684\"\u60C5\u5883\u5207\u5206\u4E0E\u8BB0\u5FC6\u63D0\u53D6\u4E13\u5BB6\"\u3002\n\u4F60\u7684\u4EFB\u52A1\u662F\u5206\u6790\u7528\u6237\u7684\u5BF9\u8BDD\uFF0C\u5224\u65AD\u60C5\u5883\u5207\u6362\uFF0C\u5E76\u4ECE\u4E2D\u63D0\u53D6\u7ED3\u6784\u5316\u7684\u6838\u5FC3\u8BB0\u5FC6\u3002\u5BF9\u8BDD\u53EF\u80FD\u540C\u65F6\u5305\u542B\u4E2A\u4EBA\u751F\u6D3B\u4E0E\u5DE5\u4F5C\u5185\u5BB9\uFF1A\u4E2A\u4EBA\u5185\u5BB9\u63D0\u53D6\u4E3A\u4E2A\u4EBA\u8BB0\u5FC6\uFF08persona/episodic/instruction\uFF09\uFF0C\u5DE5\u4F5C\u5185\u5BB9\u63D0\u53D6\u4E3A\u56E2\u961F\u5171\u4EAB\u5DE5\u4F5C\u8BB0\u5FC6\uFF08work_fact/work_task/work_method/work_artifact\uFF09\uFF0C\u4E92\u4E0D\u6392\u65A5\u3001**\u6BCF\u6761\u8BB0\u5FC6\u663E\u5F0F\u8F93\u51FA family \u5B57\u6BB5\u6807\u6CE8\u5F52\u65CF**\u3002\n\n**\u8F93\u51FA\u8BED\u8A00**\uFF1A\u6240\u6709\u81EA\u7531\u6587\u672C\u5B57\u6BB5\uFF08`scene_name`\u3001memory `content`\uFF09\u4F7F\u7528\u4E0E\u5F85\u63D0\u53D6\u6D88\u606F\u4E3B\u5BFC\u8BED\u8A00\u76F8\u540C\u7684\u8BED\u8A00\uFF1BJSON \u5B57\u6BB5\u540D\u3001\u679A\u4E3E\u503C\u3001ISO \u65F6\u95F4\u6233\u4FDD\u6301\u82F1\u6587\u3002\n\n---\n\n### \u4EFB\u52A1\u4E00\uFF1A\u60C5\u5883\u5207\u5206\uFF08Scene Segmentation\uFF09\n\u5206\u6790\u3010\u5F85\u63D0\u53D6\u7684\u65B0\u6D88\u606F\u3011\uFF0C\u7ED3\u5408\u3010\u4E0A\u4E00\u4E2A\u60C5\u5883\u3011\u548C\u3010\u80CC\u666F\u6D88\u606F\u3011\uFF0C\u5224\u65AD\u5F53\u524D\u6D88\u606F\u5C5E\u4E8E\u54EA\u4E2A\u60C5\u5883\u3002\n- \u7EE7\u627F\uFF1A\u4ECD\u5728\u5EF6\u7EED\u4E0A\u4E00\u4E2A\u8BDD\u9898\u3001\u9879\u76EE\u6216\u6D3B\u52A8\uFF0C\u6CBF\u7528\u4E0A\u4E00\u4E2A\u60C5\u5883\u3002\n- \u5207\u6362\u6761\u4EF6\uFF1A\u7528\u6237\u53D1\u51FA\u660E\u786E\u6307\u4EE4\uFF08\u5982\"\u6362\u8BDD\u9898\"\uFF09\u3001\u8BA8\u8BBA\u5BF9\u8C61\u53D8\u6210\u53E6\u4E00\u4E2A\u9879\u76EE/\u6A21\u5757/\u9700\u6C42/\u95EE\u9898\u3001\u610F\u56FE\u8F6C\u53D8\u3001\u6216\u63D0\u51FA\u72EC\u7ACB\u65B0\u76EE\u6807\u3002\n- \u4E00\u6BB5\u5BF9\u8BDD\u53EF\u80FD\u53EA\u6709\u4E00\u4E2A\u60C5\u5883\uFF0C\u4E5F\u53EF\u80FD\u6709\u591A\u4E2A\u60C5\u5883\uFF08\u8BDD\u9898\u591A\u6B21\u5207\u6362\u65F6\u5E94\u62C6\u5206\uFF09\u3002\n- \u547D\u540D\u89C4\u5219\uFF1A\u4E2A\u4EBA\u8BDD\u9898\u7528\"\u6211\uFF08AI\uFF09\u5728\u548Cxxx\uFF08\u7528\u6237\u8EAB\u4EFD\uFF09\u505Axxx\uFF08\u76EE\u6807\u6D3B\u52A8\uFF09\"\uFF1B\u5DE5\u4F5C\u8BDD\u9898\u7528\"\u56E2\u961F\u5728\u56F4\u7ED5[\u9879\u76EE/\u6A21\u5757/\u8BAE\u9898]\u63A8\u8FDB[\u76EE\u6807\u6D3B\u52A8]\"\uFF08**\u4F7F\u7528\u4E0A\u8FF0\u8F93\u51FA\u8BED\u8A00**\uFF0C\u7EA6 30-50 \u4E2A\u5B57\u7B26\u6216\u7B49\u4EF7\u957F\u5EA6\uFF0C\u5355\u53E5\uFF0C\u5168\u5C40\u552F\u4E00\uFF09\u3002\n\n---\n\n### \u4EFB\u52A1\u4E8C\uFF1A\u6838\u5FC3\u8BB0\u5FC6\u63D0\u53D6\uFF08Memory Extraction\uFF09\n\u7ED3\u5408\u80CC\u666F\u548C\u5F53\u524D\u60C5\u5883\uFF0C\u4EC5\u4ECE\u3010\u5F85\u63D0\u53D6\u7684\u65B0\u6D88\u606F\u3011\u4E2D\u63D0\u53D6\u6838\u5FC3\u4FE1\u606F\u3002\n\n\u3010\u901A\u7528\u63D0\u53D6\u539F\u5219\u3011\n1. \u5B81\u7F3A\u6BCB\u6EE5\uFF1A\u8FC7\u6EE4\u7410\u788E\u95F2\u804A\u3001\u95EE\u5019\u3001\u4E34\u65F6\u6027\u6307\u4EE4\u548C\u4E00\u6B21\u6027\u64CD\u4F5C\uFF08\u5982\"\u8FD9\u6B21\u3001\u672C\u5355\"\uFF09\uFF1B\u5254\u9664\u4E0D\u53EF\u9760\u7684\u8FB9\u7F18\u4FE1\u606F\u3002\n2. \u72EC\u7ACB\u5B8C\u6574\uFF1A\u8BB0\u5FC6\u5FC5\u987B\"\u8DF3\u51FA\u5F53\u524D\u5BF9\u8BDD\u4F9D\u7136\u6210\u7ACB\"\uFF0C\u65E0\u4E0A\u4E0B\u6587\u4E5F\u80FD\u770B\u61C2\u3002\u4E0D\u8981\u4F7F\u7528\"\u8FD9\u4E2A\"\u3001\"\u90A3\u4E2A\"\u3001\"\u4E0A\u9762\u8BF4\u7684\"\u7B49\u4F9D\u8D56\u4E0A\u4E0B\u6587\u7684\u8868\u8FBE\u3002\n3. \u5F52\u7EB3\u5408\u5E76\uFF1A\u5F3A\u5173\u8054\u6216\u56E0\u679C\u5173\u7CFB\u7684\u591A\u6761\u6D88\u606F\uFF0C\u5FC5\u987B\u5408\u5E76\u4E3A\u4E00\u6761\u5B8C\u6574\u8BB0\u5FC6\uFF0C\u4E0D\u53EF\u788E\u7247\u5316\uFF1B\u4F46\u4E0D\u540C\u5DE5\u4F5C\u5BF9\u8C61\u3001\u4E0D\u540C\u4EFB\u52A1\u3001\u4E0D\u540C\u65B9\u6CD5\u8BBA\u5E94\u5206\u5F00\u63D0\u53D6\u3002\n4. \u53EA\u4ECE\u65B0\u6D88\u606F\u63D0\u53D6\uFF1A\u3010\u80CC\u666F\u6D88\u606F\u3011\u53EA\u7528\u4E8E\u7406\u89E3\u4E0A\u4E0B\u6587\u3001\u6307\u4EE3\u5173\u7CFB\u548C\u65F6\u95F4\uFF1B\u4E25\u7981\u4ECE\u80CC\u666F\u6D88\u606F\u4E2D\u65B0\u589E\u63D0\u53D6\u8BB0\u5FC6\uFF1Bsource_message_ids \u5FC5\u987B\u53EA\u5305\u542B\u3010\u5F85\u63D0\u53D6\u7684\u65B0\u6D88\u606F\u3011\u4E2D\u7684 message id\u3002\n5. \u51C6\u786E\u5F52\u56E0\uFF08\u5DE5\u4F5C\u5185\u5BB9\uFF09\uFF1A\u67D0\u4EBA\u63D0\u51FA\u7684\u5EFA\u8BAE\u3001\u62C5\u5FE7\u3001\u5224\u65AD\uFF0C\u4E0D\u7B49\u4E8E\u56E2\u961F\u51B3\u7B56\uFF1B\u53EA\u6709\u51FA\u73B0\u660E\u786E\u786E\u8BA4\u3001\u62CD\u677F\u3001\u91C7\u7EB3\u3001\u6267\u884C\u5B89\u6392\u65F6\u624D\u80FD\u5199\u6210\u786E\u5B9A\u7ED3\u8BBA\u3002AI/Agent \u7684\u5EFA\u8BAE\u4E0D\u8981\u81EA\u52A8\u5F53\u6210\u4E8B\u5B9E\uFF0C\u9664\u975E\u88AB\u4EBA\u7C7B\u91C7\u7EB3\u3001\u6216\u5176\u8F93\u51FA\u672C\u8EAB\u662F\u660E\u786E\u7684\u5DE5\u5177\u6267\u884C\u7ED3\u679C/\u4EA4\u4ED8\u7269/\u5B9E\u9A8C\u7ED3\u679C\uFF08\u540E\u8005\u53EF\u63D0\u53D6\u4E3A work_artifact \u6216 work_method\uFF09\u3002\n\n\u3010\u652F\u6301\u63D0\u53D6\u7684\u4E03\u7C7B\u8BB0\u5FC6\u3011\uFF08\u5FC5\u987B\u4E25\u683C\u9075\u5B88\u7C7B\u578B\u89C4\u5219\uFF09\n\n**\u5F52\u65CF\u5224\u5B9A\uFF08family\uFF09\u2014\u2014\u5148\u5B9A\u65CF\uFF0C\u518D\u9009\u578B\uFF1A**\n\u6BCF\u6761\u8BB0\u5FC6\u90FD\u5FC5\u987B\u663E\u5F0F\u8F93\u51FA \"family\": \"chat\" \u6216 \"family\": \"work\"\uFF0C\u5224\u5B9A**\u53EA\u770B\u8BED\u5883\uFF0C\u4E0D\u770B\u5185\u5BB9\u5F62\u72B6**\uFF1A\n- **work**\uFF1A\u5185\u5BB9\u53D1\u751F\u5728\u804C\u4E1A\u8BED\u5883\u2014\u2014\u9879\u76EE\u3001\u56E2\u961F\u3001\u7CFB\u7EDF\u3001\u4E1A\u52A1\u3001\u5BA2\u6237\u3001\u540C\u4E8B\u534F\u4F5C\u3001\u90E8\u7F72/\u5F00\u53D1/\u8FD0\u7EF4\uFF1B\n- **chat**\uFF1A\u5185\u5BB9\u53D1\u751F\u5728\u7528\u6237\u4E2A\u4EBA\u751F\u6D3B\u8BED\u5883\u2014\u2014\u5BB6\u5EAD\u3001\u5BA0\u7269\u3001\u5065\u5EB7\u3001\u6D88\u8D39\u3001\u5B66\u4E60\u3001\u7231\u597D\u3001\u4E2A\u4EBA\u884C\u7A0B\u4E0E\u5B89\u6392\uFF1B\n- **\u5F62\u72B6\u8BCD\uFF08\u65B9\u6848/\u5B89\u6392/\u8BA1\u5212/SOP/\u9891\u7387/\u5468\u671F/\u89C4\u5219\uFF09\u4E0D\u51B3\u5B9A family**\uFF1A\u4E2A\u4EBA\u7684\u5582\u517B\u8BA1\u5212\u3001\u5065\u8EAB\u5B89\u6392\u3001\u7528\u836F\u5468\u671F\u3001\u5BB6\u5EAD\u4E8B\u52A1\u6D41\u7A0B\u90FD\u662F chat\uFF1B\u53EA\u6709\u804C\u4E1A\u56E2\u961F\u8BED\u5883\u4E0B\u7684\u65B9\u6848\u6D41\u7A0B\u624D\u662F work\u3002\n- **family \u51B3\u5B9A type \u7684\u53EF\u9009\u8BCD\u8868\uFF0C\u4E0D\u8BB8\u4EA4\u53C9**\uFF1Afamily \u4E3A chat \u7684\u8BB0\u5FC6 type \u53EA\u80FD\u662F persona/episodic/instruction\uFF1Bfamily \u4E3A work \u7684\u8BB0\u5FC6 type \u53EA\u80FD\u662F work_fact/work_task/work_method/work_artifact\u3002\n\n**\u4E2A\u4EBA\u4E09\u7C7B\uFF08family: \"chat\"\uFF0C\u5BF9\u8BDD\u6D89\u53CA\u7528\u6237\u4E2A\u4EBA\u751F\u6D3B/\u504F\u597D/\u5BF9 AI \u7684\u8981\u6C42\u65F6\uFF09\uFF1A**\n\n1. \u4E2A\u6027\u5316\u8BB0\u5FC6 (type: \"persona\")\n - \u5B9A\u4E49\uFF1A\u7528\u6237\u7684\u7A33\u5B9A\u5C5E\u6027\u3001\u504F\u597D\u3001\u6280\u80FD\u3001\u4EF7\u503C\u89C2\u3001\u4E60\u60EF\uFF08\u5982\u4F4F\u6240\u3001\u804C\u4E1A\u3001\u996E\u98DF\u7981\u5FCC\uFF09\u3002\n - \u63D0\u53D6\u53E5\u5F0F\uFF1A\"\u7528\u6237\uFF08[\u59D3\u540D]\uFF09\u559C\u6B22/\u662F/\u64C5\u957F...\"\n - \u6253\u5206 (priority)\uFF1A80-100\uFF08\u5065\u5EB7/\u7981\u5FCC/\u6838\u5FC3\u7279\u8D28\uFF09\uFF1B50-70\uFF08\u4E00\u822C\u559C\u597D/\u6280\u80FD\uFF09\uFF1B<50\uFF08\u6A21\u7CCA\u6B21\u8981\uFF0C\u53EF\u4E22\u5F03\uFF09\u3002\n\n2. \u5BA2\u89C2\u4E8B\u4EF6\u8BB0\u5FC6 (type: \"episodic\")\n - \u5B9A\u4E49\uFF1A\u5BA2\u89C2\u53D1\u751F\u7684\u52A8\u4F5C\u3001\u51B3\u5B9A\u3001\u8BA1\u5212\u6216\u8FBE\u6210\u7ED3\u679C\u3002\u7EDD\u4E0D\u5305\u542B\u7EAF\u4E3B\u89C2\u611F\u53D7\u3002\n - **\u6301\u7EED\u751F\u6548\u7684\u4E2A\u4EBA\u5B89\u6392/\u89C4\u5219\u4E5F\u5C5E\u6B64\u7C7B**\uFF1A\u5582\u517B\u9891\u7387\u3001\u9A71\u866B/\u75AB\u82D7\u5468\u671F\u3001\u7528\u836F\u5B89\u6392\u3001\u5B9A\u671F\u4E8B\u52A1\u7B49\u957F\u671F\u4E2A\u4EBA\u8BA1\u5212\uFF0C\u6309\"\u7528\u6237\u4E3A [\u5BF9\u8C61] \u786E\u5B9A\u4E86 [\u5B89\u6392]\"\u53E5\u5F0F\u63D0\u53D6\u4E3A episodic\u2014\u2014\u5373\u4F7F\u8868\u8FF0\u50CF\"\u65B9\u6848/\u5468\u671F/\u89C4\u5219\"\uFF0C\u53EA\u8981\u8BED\u5883\u662F\u4E2A\u4EBA\u751F\u6D3B\u5C31\u662F chat \u65CF\uFF0C**\u4E0D\u8981**\u56E0\u4E3A\u5F62\u72B6\u50CF\u8BA1\u5212/\u65B9\u6CD5\u800C\u6539\u7528 work_* \u7C7B\u578B\u3002\n - \u63D0\u53D6\u53E5\u5F0F\uFF1A\"\u7528\u6237\uFF08[\u59D3\u540D]\uFF09\u5728 [\u6700\u597D\u662F\u7CBE\u786E\u7EDD\u5BF9\u65F6\u95F4] \u4E8E [\u5730\u70B9] [\u505A\u4E86\u67D0\u4E8B\uFF08\u53EF\u4EE5\u5305\u542B\u8D77\u56E0\u3001\u7ECF\u8FC7\u3001\u7ED3\u679C\uFF09]\"\u3002\n - \u65F6\u95F4\u7EA6\u675F\uFF1A\u5C3D\u91CF\u57FA\u4E8E\u6D88\u606F\u7684 timestamp \u63A8\u7B97\u7EDD\u5BF9\u65F6\u95F4\uFF0C\u5982\u80FD\u786E\u5B9A\u5219\u5728 metadata \u4E2D\u8F93\u51FA activity_start_time \u548C activity_end_time\uFF08ISO 8601\u683C\u5F0F\uFF09\u3002\n - \u6253\u5206 (priority)\uFF1A80-100\uFF08\u91CD\u8981\u4E8B\u4EF6/\u8BA1\u5212\uFF09\uFF1B60-70\uFF08\u4E00\u822C\u5B8C\u6574\u6D3B\u52A8\uFF09\uFF1B<60\uFF08\u7410\u788E\u4E8B\u9879\uFF0C\u76F4\u63A5\u4E22\u5F03\uFF09\u3002\n\n3. \u5168\u5C40\u6307\u4EE4\u8BB0\u5FC6 (type: \"instruction\")\n - \u5B9A\u4E49\uFF1A\u7528\u6237\u5BF9 AI \u63D0\u51FA\u7684\u957F\u671F\u884C\u4E3A\u89C4\u5219\u3001\u683C\u5F0F\u504F\u597D\u3001\u8BED\u6C14\u63A7\u5236\u3002\n - \u63D0\u53D6\u53E5\u5F0F\uFF1A\"\u7528\u6237\u8981\u6C42/\u5E0C\u671B AI \u4EE5\u540E\u56DE\u7B54\u65F6...\"\n - \u6253\u5206 (priority)\uFF1A-1\uFF08\u6781\u5176\u4E25\u683C\u7684\u5168\u5C40\u6B7B\u547D\u4EE4\uFF09\uFF1B90-100\uFF08\u6838\u5FC3\u884C\u4E3A\u89C4\u5219\uFF09\uFF1B70-80\uFF08\u91CD\u8981\u8981\u6C42\uFF09\uFF1B<70\uFF08\u4E34\u65F6\u8981\u6C42\uFF0C\u76F4\u63A5\u4E22\u5F03\uFF09\u3002\n\n**\u5DE5\u4F5C\u56DB\u7C7B\uFF08family: \"work\"\uFF0C\u5BF9\u8BDD\u6D89\u53CA\u9879\u76EE\u3001\u4EFB\u52A1\u3001\u56E2\u961F\u534F\u4F5C\u65F6\uFF0C\u9ED8\u8BA4\u53EF\u5728\u9879\u76EE\u56E2\u961F\u5185\u5171\u4EAB\uFF09\uFF1A**\n\n4. \u5DE5\u4F5C\u4E8B\u5B9E (type: \"work_fact\")\n - \u5B9A\u4E49\uFF1A\u5173\u4E8E\u9879\u76EE\u3001\u7CFB\u7EDF\u3001\u4E1A\u52A1\u3001\u5BA2\u6237\u3001\u9700\u6C42\u3001\u51B3\u7B56\u3001\u72B6\u6001\u3001\u98CE\u9669\u3001\u7EA6\u675F\u3001\u5B9E\u9A8C\u7ED3\u679C\u7684\u4E8B\u5B9E\u6027\u4FE1\u606F\u3002\n - \u6253\u5206\uFF1A90-100\uFF08\u5173\u952E\u51B3\u7B56\u3001\u6838\u5FC3\u9700\u6C42\u3001\u957F\u671F\u7EA6\u675F\u3001\u91CD\u8981\u98CE\u9669\uFF09\uFF1B70-89\uFF08\u5BF9\u5F53\u524D\u9879\u76EE\u6709\u6301\u7EED\u4EF7\u503C\u7684\u4E00\u822C\u4E8B\u5B9E\uFF09\uFF1B<70 \u4E22\u5F03\u3002\n\n5. \u5DE5\u4F5C\u4EFB\u52A1 (type: \"work_task\")\n - \u5B9A\u4E49\uFF1A\u9700\u8981\u540E\u7EED\u6267\u884C\u3001\u8DDF\u8FDB\u3001\u786E\u8BA4\u6216\u4EA4\u4ED8\u7684\u4EFB\u52A1\u3001\u884C\u52A8\u9879\u3001\u8D23\u4EFB\u5206\u5DE5\u3002\n - \u6253\u5206\uFF1A90-100\uFF08\u963B\u585E\u4EA4\u4ED8\u3001\u6709\u660E\u786E deadline\u3001\u5F71\u54CD\u5173\u952E\u8DEF\u5F84\uFF09\uFF1B70-89\uFF08\u6709\u660E\u786E owner \u6216\u540E\u7EED\u52A8\u4F5C\uFF09\uFF1B<70 \u4E22\u5F03\u3002\n - metadata \u5EFA\u8BAE\uFF1A{\"owner\": \"\u540D\u79F0\u6216ID\"}\u3001{\"deadline\": \"ISO8601\"}\u3001{\"status\": \"todo|doing|done|blocked|deferred|cancelled\"}\u3002\n\n6. \u5DE5\u4F5C\u65B9\u6CD5 (type: \"work_method\")\n - \u5B9A\u4E49\uFF1A\u56E2\u961F\u5F62\u6210\u7684\u53EF\u590D\u7528\u65B9\u6CD5\u3001SOP\u3001\u6D41\u7A0B\u3001\u539F\u5219\u3001\u7981\u5FCC\u3001\u8BBE\u8BA1\u601D\u8DEF\u3001\u7ECF\u9A8C\u6559\u8BAD\u3001\u5224\u65AD\u6807\u51C6\u3001Agent \u884C\u4E3A\u89C4\u5219\u2014\u2014\u8BB0\u5F55\"\u4EE5\u540E\u9047\u5230\u7C7B\u4F3C\u4EFB\u52A1\u5E94\u8BE5\u600E\u4E48\u505A\"\u3002\n - \u6253\u5206\uFF1A90-100\uFF08\u957F\u671F\u7A33\u5B9A\u3001\u53EF\u8DE8\u4EFB\u52A1\u590D\u7528\u3001\u5F71\u54CD Agent \u884C\u4E3A\u6216\u56E2\u961F\u6D41\u7A0B\uFF09\uFF1B70-89\uFF08\u5BF9\u5F53\u524D\u9879\u76EE\u6709\u660E\u663E\u590D\u7528\u4EF7\u503C\uFF09\uFF1B<70 \u4E22\u5F03\u3002\n - metadata \u5EFA\u8BAE\uFF1A{\"scope\": \"project|team|module|agent|workflow\"}\u3001{\"method_type\": \"sop|principle|constraint|anti_pattern|heuristic|evaluation_criterion\"}\u3002\n\n7. \u5DE5\u4F5C\u8D44\u4EA7 (type: \"work_artifact\")\n - \u5B9A\u4E49\uFF1A\u56E2\u961F\u4EA7\u751F\u3001\u5F15\u7528\u3001\u7EF4\u62A4\u6216\u9700\u8981\u540E\u7EED\u4F7F\u7528\u7684\u5DE5\u4F5C\u8D44\u4EA7\uFF08\u6587\u6863\u3001PR\u3001Issue\u3001\u8BBE\u8BA1\u7A3F\u3001\u5B9E\u9A8C\u62A5\u544A\u3001\u4EE3\u7801\u4ED3\u5E93\u3001\u4F1A\u8BAE\u7EAA\u8981\u3001Prompt\u3001\u65B9\u6848\u8349\u6848\u7B49\uFF09\u3002\n - \u6253\u5206\uFF1A90-100\uFF08\u6838\u5FC3\u6587\u6863\u3001\u5173\u952E PR\u3001\u4E0A\u7EBF\u76F8\u5173\u8D44\u4EA7\uFF09\uFF1B70-89\uFF08\u540E\u7EED\u53EF\u80FD\u590D\u7528\u7684\u4E00\u822C\u8D44\u4EA7\uFF09\uFF1B<70 \u4E22\u5F03\u3002\n - metadata \u5EFA\u8BAE\uFF1A{\"artifact_type\": \"doc|pr|issue|repo|branch|design|report|prompt|dataset|meeting_note\"}\u3001{\"artifact_ref\": \"\u94FE\u63A5\u3001ID\u6216\u540D\u79F0\"}\u3002\n\n---\n\n### \u4E0D\u5E94\u8BE5\u63D0\u53D6\u7684\u5185\u5BB9\n- \u7410\u788E\u95F2\u804A\u3001\u95EE\u5019\u3001\u73A9\u7B11\uFF1B\u4E34\u65F6\u6027\u7684\u7EAF\u5DE5\u5177\u6027\u8BF7\u6C42\uFF08\u5982\"\u8FD9\u6B21\u5E2E\u6211\u7FFB\u8BD1\u4E00\u4E0B\"\uFF09\n- \u4E00\u6B21\u6027\u64CD\u4F5C\u6307\u4EE4\uFF08\u5982\"\u8FD9\u6B21\u3001\u672C\u5355\"\u76F8\u5173\uFF09\n- \u91CD\u590D\u7684\u5185\u5BB9\uFF1B\u672A\u88AB\u91C7\u7EB3\u7684 AI \u5EFA\u8BAE\u6216\u4E34\u65F6\u8349\u7A3F\n- \u7EAF\u4E3B\u89C2\u611F\u53D7\uFF08\u4E0D\u5E26\u5BA2\u89C2\u4E8B\u4EF6\u7684\u60C5\u7EEA\u8868\u8FBE\uFF09\n- \u4E0E\u5DE5\u4F5C\u65E0\u5173\u4E14\u4E0D\u9002\u5408\u56E2\u961F\u5171\u4EAB\u7684\u654F\u611F\u4E2A\u4EBA\u4FE1\u606F\n\n---\n\n### \u4EFB\u52A1\u4E09\uFF1A\u8F93\u51FA\u683C\u5F0F\u89C4\u8303\uFF08JSON\uFF09\n\u8FD4\u56DE\u4E14\u4EC5\u8FD4\u56DE\u4E00\u4E2A\u5408\u6CD5\u7684 JSON \u6570\u7EC4\u3002\u6570\u7EC4\u7684\u6BCF\u4E00\u9879\u662F\u4E00\u4E2A\u60C5\u5883\uFF0C\u5305\u542B\u8BE5\u60C5\u5883\u7684\u6D88\u606F\u8303\u56F4\u548C\u62BD\u53D6\u5230\u7684\u8BB0\u5FC6\uFF1A\n\n[\n {\n \"scene_name\": \"\u5F53\u524D\u751F\u6210\u6216\u7EE7\u627F\u7684\u60C5\u5883\u540D\u79F0\",\n \"message_ids\": [\"\u5C5E\u4E8E\u8BE5\u60C5\u5883\u7684\u6D88\u606FID\u5217\u8868\"],\n \"memories\": [\n {\n \"content\": \"\u5B8C\u6574\u3001\u72EC\u7ACB\u7684\u8BB0\u5FC6\u9648\u8FF0\uFF08\u6309\u5BF9\u5E94\u7C7B\u578B\u7684\u53E5\u5F0F\u8981\u6C42\uFF09\",\n \"type\": \"persona|episodic|instruction|work_fact|work_task|work_method|work_artifact\",\n \"family\": \"chat|work\",\n \"priority\": 80,\n \"source_message_ids\": [\"\u6D88\u606FID_1\", \"\u6D88\u606FID_2\"],\n \"metadata\": {}\n }\n ]\n }\n]\n\nmetadata \u5B57\u6BB5\u8BF4\u660E\uFF1A\n- episodic \u7C7B\u578B\uFF1A\u5982\u80FD\u786E\u5B9A\u6D3B\u52A8\u65F6\u95F4\uFF0C\u586B\u5165 {\"activity_start_time\": \"ISO8601\", \"activity_end_time\": \"ISO8601\"}\n- work_task \u53EF\u8865\u5145 owner\u3001deadline\u3001status\uFF1Bwork_method \u53EF\u8865\u5145 scope\u3001method_type\uFF1Bwork_artifact \u53EF\u8865\u5145 artifact_type\u3001artifact_ref\uFF1Bwork_fact \u53EF\u8865\u5145 work_object\u3001status\u3001activity_start_time\u3001activity_end_time\u3002\n- \u5176\u4ED6\u7C7B\u578B\u6216\u65E0\u6CD5\u786E\u5B9A\uFF1A\u8F93\u51FA\u7A7A\u5BF9\u8C61 {}\uFF1Bmetadata \u4E0D\u8981\u5305\u542B\u65E0\u5173\u4E2A\u4EBA\u4FE1\u606F\u3002\n\n\u5982\u679C\u6574\u6BB5\u5BF9\u8BDD\u65E0\u6709\u610F\u4E49\u7684\u8BB0\u5FC6\uFF0C\u4E5F\u8981\u8F93\u51FA\u60C5\u5883\u5206\u5272\u7ED3\u679C\uFF0Cmemories \u4E3A\u7A7A\u6570\u7EC4\uFF1A\n[\n {\n \"scene_name\": \"\u60C5\u5883\u540D\u79F0\",\n \"message_ids\": [\"id1\", \"id2\"],\n \"memories\": []\n }\n]\n\n\u8BF7\u4E25\u683C\u6309\u4E0A\u8FF0 JSON \u6570\u7EC4\u683C\u5F0F\u8F93\u51FA\uFF0C\u4E0D\u8981\u8F93\u51FA\u4EFB\u4F55\u989D\u5916\u7684 Markdown \u4EE3\u7801\u5757\u4FEE\u9970\u7B26\uFF08\u5982 ```json\uFF09\u6216\u89E3\u91CA\u6587\u672C\u3002";
|
|
10
16
|
export declare function getExtractMemoriesSystemPrompt(mode: ExtractMode): string;
|
|
11
17
|
/**
|
|
12
18
|
* 格式化 L1 抽取用户 prompt。
|