refactor: tighten master-agent memory ingestion

This commit is contained in:
kris
2026-04-01 06:42:41 +08:00
parent 60d69eb222
commit 1c45a88205
2 changed files with 56 additions and 6 deletions

View File

@@ -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,

View File

@@ -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);
});