更新memory读取机制,新增前需要先list阅读已有的内容
This commit is contained in:
@@ -240,9 +240,10 @@ export class LearningOrchestrator {
|
||||
traceId: input.requestContext.traceId,
|
||||
});
|
||||
try {
|
||||
const existingMemory = await this.loadMemoryContext(input.requestContext);
|
||||
await this.runtime.prompt(
|
||||
reviewSession.id,
|
||||
buildReviewPrompt({ focus, recentTurns }),
|
||||
buildReviewPrompt({ existingMemory, focus, recentTurns }),
|
||||
toRuntimeModel(input.model),
|
||||
);
|
||||
const messages = await this.runtime.messages(reviewSession.id, 20);
|
||||
@@ -312,6 +313,14 @@ export class LearningOrchestrator {
|
||||
});
|
||||
}
|
||||
|
||||
private async loadMemoryContext(context: ChatRequestContext) {
|
||||
const [userMemory, workspaceMemory] = await Promise.all([
|
||||
this.memoryStore.list("user", context.actorKey),
|
||||
this.memoryStore.list("workspace", context.projectKey),
|
||||
]);
|
||||
return { userMemory, workspaceMemory };
|
||||
}
|
||||
|
||||
private async applyMemoryProposal(
|
||||
input: TurnReviewInput,
|
||||
proposal: ReviewResult["memories"][number],
|
||||
@@ -440,9 +449,14 @@ const buildGatePrompt = ({ recentTurns }: { recentTurns: SessionTurnRecord[] })
|
||||
};
|
||||
|
||||
const buildReviewPrompt = ({
|
||||
existingMemory,
|
||||
focus,
|
||||
recentTurns,
|
||||
}: {
|
||||
existingMemory: {
|
||||
userMemory: Array<{ content: string; id: string }>;
|
||||
workspaceMemory: Array<{ content: string; id: string }>;
|
||||
};
|
||||
focus: GateResult["focus"];
|
||||
recentTurns: SessionTurnRecord[];
|
||||
}) => {
|
||||
@@ -452,6 +466,16 @@ const buildReviewPrompt = ({
|
||||
`Turn ${index + 1}\nUser: ${turn.userMessage}\nAssistant: ${turn.assistantMessage}\nTool calls: ${turn.toolCallCount}`,
|
||||
)
|
||||
.join("\n\n");
|
||||
const userMemoryBlock =
|
||||
existingMemory.userMemory.length > 0
|
||||
? existingMemory.userMemory.map((entry) => `- [${entry.id}] ${entry.content}`).join("\n")
|
||||
: "(empty)";
|
||||
const workspaceMemoryBlock =
|
||||
existingMemory.workspaceMemory.length > 0
|
||||
? existingMemory.workspaceMemory
|
||||
.map((entry) => `- [${entry.id}] ${entry.content}`)
|
||||
.join("\n")
|
||||
: "(empty)";
|
||||
return [
|
||||
"You are doing an internal self-improvement review for TJWaterAgent.",
|
||||
"Do NOT call any tools. Return JSON only. Do NOT wrap in markdown fences.",
|
||||
@@ -462,8 +486,17 @@ const buildReviewPrompt = ({
|
||||
"- Keep only stable user preferences, durable constraints, or stable workspace facts.",
|
||||
"- Use scope='user' for user preferences and constraints.",
|
||||
"- Use scope='workspace' for project or environment facts.",
|
||||
"- Read the existing memories first before proposing changes.",
|
||||
"- If a new lesson overlaps, refines, or supersedes an existing memory, prefer replace/remove using target_id instead of add.",
|
||||
"- Use add only when the lesson is genuinely new after reviewing the existing memory list.",
|
||||
"- Do not store one-off task outcomes, temporary facts, or speculative conclusions.",
|
||||
"",
|
||||
"Current persisted memories:",
|
||||
"[User memory]",
|
||||
userMemoryBlock,
|
||||
"[Workspace memory]",
|
||||
workspaceMemoryBlock,
|
||||
"",
|
||||
"Skill rules:",
|
||||
"- Save only reusable workflows, methods, or pitfalls that will help in future similar tasks.",
|
||||
"- Prefer append_pattern for concise reusable lessons.",
|
||||
|
||||
Reference in New Issue
Block a user