跳到主要内容

记忆与对话(TypeScript)

记忆层次

  • 短期:当前回合的工作记忆(messages、变量)。
  • 长期:摘要与关键事实,跨会话复用。

对话状态与裁剪

type Msg = { role: "user"|"ai"|"system"|"tool"; content: string };
type Conv = { messages: Msg[]; summary?: string };

const limitTokens = (msgs: Msg[], max = 8) => msgs.slice(-max);
const addMessage = (c: Conv, m: Msg): Conv => ({ ...c, messages: [...c.messages, m] });

摘要记忆

  • 当消息长度超限,将历史压缩为摘要,保留关键意图与事实。
const summarize = (msgs: Msg[]): string => {
const text = msgs.map(m => `${m.role}:${m.content}`).join("\n");
return text.slice(0, 120);
};

const ensureMemory = (c: Conv, max = 16): Conv => {
if (c.messages.length <= max) return c;
const summary = summarize(c.messages.slice(0, -max));
return { summary, messages: c.messages.slice(-max) };
};

工具消息整合

  • 将工具结果作为 tool role 注入,便于模型参考与溯源。
const addToolResult = (c: Conv, content: string): Conv =>
addMessage(c, { role: "tool", content });

建议

  • 定义一致的裁剪与摘要策略,避免上下文漂移。
  • 将关键事实写入长期存储,定期再整合到对话摘要中。