fix: inject episodic memory into WeChat agent
Memind CI / Test, build, and release guards (pull_request) Successful in 3m24s

This commit is contained in:
john
2026-07-22 13:41:40 +08:00
parent 881f70f4bf
commit 5242cbf08b
3 changed files with 159 additions and 2 deletions
+59 -2
View File
@@ -235,7 +235,7 @@ async function executeSessionReply(
requestId,
prompt,
metadata = {},
{ submitReply = null } = {},
{ submitReply = null, prepareUserMessage = null } = {},
) {
const eventsResponse = await apiFetch(`/sessions/${sessionId}/events`, {
method: 'GET',
@@ -246,7 +246,10 @@ async function executeSessionReply(
throw new Error(text || '无法建立公众号消息事件流');
}
const userMessage = createUserMessage(prompt, metadata);
let userMessage = createUserMessage(prompt, metadata);
if (prepareUserMessage) {
userMessage = (await prepareUserMessage(userMessage)) ?? userMessage;
}
if (submitReply) {
await submitReply({ sessionId, requestId, userMessage });
} else {
@@ -1504,6 +1507,7 @@ export function createWechatMpService({
scheduleService = null,
wechatScheduleLlmConfigService = null,
llmProviderService = null,
chatIntentRouter = null,
onPageGenerated = null,
applySessionLlmProvider = null,
refreshSessionSnapshot = null,
@@ -2232,6 +2236,49 @@ export function createWechatMpService({
}
};
const prepareWechatAgentUserMessage = async ({ userId, sessionId, userMessage }) => {
if (
!chatIntentRouter?.resolveAgentMemoryContext
|| !chatIntentRouter?.applyAgentOrchestration
) {
return userMessage;
}
const displayText = String(
userMessage?.metadata?.displayText
?? messageVisibleText(userMessage),
).trim();
try {
const memoryContext = await chatIntentRouter.resolveAgentMemoryContext({
userId,
sessionId,
text: displayText,
forceDeepReasoning: false,
});
if (
!memoryContext?.injectionEnabled
|| !Array.isArray(memoryContext.memories)
|| memoryContext.memories.length === 0
) {
return userMessage;
}
return chatIntentRouter.applyAgentOrchestration(
userMessage,
{
route: 'agent_orchestration',
reason: '微信服务号消息由 Agent 处理',
source: 'wechat_mp',
},
{ memoryContext },
);
} catch (err) {
logger.warn?.(
'WeChat MP agent memory resolve skipped:',
err instanceof Error ? err.message : err,
);
return userMessage;
}
};
const runIntentMessage = async ({ inbound, intent, user }) => {
const wechatIntent = classifyWechatIntent(intent);
const mediaAnalysisEnabled = isWechatMediaGrayUser(user, config.mediaAnalysisGrayUsers);
@@ -2294,6 +2341,11 @@ export function createWechatMpService({
agentPrompt,
buildIntentMetadata(intent, { mediaAnalysisEnabled, imagePolicy }),
{
prepareUserMessage: (userMessage) => prepareWechatAgentUserMessage({
userId: user.userId,
sessionId,
userMessage,
}),
submitReply: submitSessionReply
? ({ requestId: replyRequestId, userMessage }) =>
submitSessionReply({
@@ -2496,6 +2548,11 @@ export function createWechatMpService({
retryPrompt,
buildIntentMetadata(intent, { mediaAnalysisEnabled, imagePolicy }),
{
prepareUserMessage: (userMessage) => prepareWechatAgentUserMessage({
userId: user.userId,
sessionId,
userMessage,
}),
submitReply: submitSessionReply
? ({ requestId: replyRequestId, userMessage }) =>
submitSessionReply({