refactor: tighten master-agent memory ingestion
This commit is contained in:
@@ -3942,6 +3942,23 @@ function normalizeAutoMemoryText(value: string | undefined) {
|
||||
.trim();
|
||||
}
|
||||
|
||||
function isLowValueAutoMemoryText(text: string) {
|
||||
const normalized = normalizeAutoMemoryText(text);
|
||||
if (!normalized) {
|
||||
return true;
|
||||
}
|
||||
if (normalized.length < 10) {
|
||||
return true;
|
||||
}
|
||||
if (/^(好的|收到|明白|继续|先这样|可以|行|没问题|辛苦了|谢谢|了解|嗯嗯)$/i.test(normalized)) {
|
||||
return true;
|
||||
}
|
||||
if (/(马上|稍后|回头|等下|一会|临时|先看下|先试试|先这样)/i.test(normalized)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function inferAutoMemoryType(text: string): MasterMemoryType | null {
|
||||
if (!text.trim()) return null;
|
||||
if (/(微信|wechat|中文回复|中文沟通|UI风格|交互风格|偏好|习惯|默认)/i.test(text)) {
|
||||
@@ -4120,15 +4137,20 @@ function autoCaptureMasterAgentMemoriesInState(
|
||||
|
||||
const createdOrUpdated: MasterAgentMemory[] = [];
|
||||
const combined = [requestText, replyText].filter(Boolean).join(" ");
|
||||
const preferenceType = inferAutoMemoryType(requestText);
|
||||
const preferenceCandidate = isLowValueAutoMemoryText(requestText) ? "" : requestText;
|
||||
const projectCandidate = isLowValueAutoMemoryText(replyText) ? combined : replyText || combined;
|
||||
const preferenceType = inferAutoMemoryType(preferenceCandidate);
|
||||
|
||||
if (preferenceType === "user_preference" || preferenceType === "workflow_rule") {
|
||||
if (
|
||||
preferenceCandidate &&
|
||||
(preferenceType === "user_preference" || preferenceType === "workflow_rule")
|
||||
) {
|
||||
createdOrUpdated.push(
|
||||
upsertAutoMasterMemoryInState(state, {
|
||||
account: input.account,
|
||||
scope: "global",
|
||||
title: buildAutoMemoryTitle(preferenceType),
|
||||
content: requestText,
|
||||
content: preferenceCandidate,
|
||||
memoryType: preferenceType,
|
||||
tags: preferenceType === "user_preference" ? ["用户偏好"] : ["工作方式"],
|
||||
sourceMessageId: input.sourceMessageId,
|
||||
@@ -4137,15 +4159,15 @@ function autoCaptureMasterAgentMemoriesInState(
|
||||
}
|
||||
|
||||
const referencedProject = detectReferencedProjectForMemory(state, combined);
|
||||
const projectType = inferProjectAutoMemoryType(replyText) ?? inferProjectAutoMemoryType(combined);
|
||||
if (referencedProject && projectType) {
|
||||
const projectType = inferProjectAutoMemoryType(projectCandidate) ?? inferProjectAutoMemoryType(combined);
|
||||
if (referencedProject && projectType && !isLowValueAutoMemoryText(projectCandidate)) {
|
||||
createdOrUpdated.push(
|
||||
upsertAutoMasterMemoryInState(state, {
|
||||
account: input.account,
|
||||
scope: "project",
|
||||
projectId: referencedProject.projectId,
|
||||
title: buildAutoMemoryTitle(projectType, referencedProject.projectName),
|
||||
content: replyText || requestText,
|
||||
content: projectCandidate,
|
||||
memoryType: projectType,
|
||||
tags: [referencedProject.projectName, referencedProject.alias],
|
||||
sourceMessageId: input.sourceMessageId,
|
||||
|
||||
@@ -57,3 +57,31 @@ test("主 Agent 完成对话后会自动沉淀用户偏好和项目记忆", asyn
|
||||
assert.match(globalMemory?.content ?? "", /微信式交互|中文回复/);
|
||||
assert.match(projectMemory?.content ?? "", /boss 项目当前进度已更新/);
|
||||
});
|
||||
|
||||
test("主 Agent 不会把低价值短句和瞬时安排自动写入记忆", async () => {
|
||||
await setup();
|
||||
|
||||
const task = await queueMasterAgentTask({
|
||||
projectId: "master-agent",
|
||||
requestMessageId: "msg-user-2",
|
||||
requestText: "好的,先这样,稍后我再看。",
|
||||
executionPrompt: "prompt",
|
||||
requestedBy: "17600003315",
|
||||
requestedByAccount: "17600003315",
|
||||
deviceId: "master-agent-openai",
|
||||
});
|
||||
|
||||
await completeMasterAgentTask({
|
||||
taskId: task.taskId,
|
||||
deviceId: "master-agent-openai",
|
||||
status: "completed",
|
||||
replyBody: "好的,稍后继续。",
|
||||
});
|
||||
|
||||
const memories = await listUserMasterMemories("17600003315", { includeArchived: false });
|
||||
const noisyMemory = memories.find(
|
||||
(memory) => (memory.content ?? "").includes("先这样") || (memory.content ?? "").includes("稍后继续"),
|
||||
);
|
||||
|
||||
assert.equal(noisyMemory, undefined);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user