fix: inject episodic memory into WeChat agent
Memind CI / Test, build, and release guards (pull_request) Successful in 3m24s
Memind CI / Test, build, and release guards (pull_request) Successful in 3m24s
This commit is contained in:
+59
-2
@@ -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({
|
||||
|
||||
Reference in New Issue
Block a user