维持历史对话

在实时数字人系统中,角色的行为、语气、知识结构和多轮对话的“记忆”都通过两种机制控制:

1、conversation.item.create 消息(单向 user 记忆)

系统支持通过逐条发送历史 user 消息的方式构建上下文,但该方式存在重要限制:

conversationHistory.forEach((msg) => {
  if (msg.role === "user") {
    const messageConfig = {
      type: "conversation.item.create",
      item: {
        type: "message",
        role: "user",
        content: [{ type: "input_text", text: msg.content }]
      }
    };
    socket.send(JSON.stringify(messageConfig));
  }
});

⚠️ 限制说明:

  • 无法植入 AI 生成的历史消息

  • 系统不会自动联想上一轮对话语境(例如 AI 是否已回答)

  • 建议结合提示词注入使用,仅用于 user 行为补充

无法注入AI生成的历史消息,是OpenAI Realtime API仍未修复的BUG,并非本系统BUG

2、系统提示词(System Instructions)注入上下文

通过 session.update 中的 instructions 字段,注入角色定义和历史上下文描述,即${messageConfig}可完整保留用户与 AI 的对话历史,有助于:

  • 维持语义连贯性

  • 支持 AI 的连续理解与记忆

  • 支持对 AI 自身语气行为的持续控制

const instructions = `
你是一位温柔耐心的情感陪伴型助手,善于倾听和引导。
请使用 ${userLanguage} 进行回复。
欢迎语:"${activeCharacter.greeting}"

历史对话:
User: 昨天我心情不太好。
AI: 怎么了?可以和我说说吗?
User: 我和朋友吵架了...

当用户请求图像生成、实时天气查询等服务时,自动触发函数调用。

当前上下文:${messageConfig}
`;

const sessionConfig = {
  type: "session.update",
  session: {
    instructions,
    ...
  }
};
socket.send(JSON.stringify(sessionConfig));

⚠️ 注意:

  • 不应太长(建议控制在 2000 tokens 以内)

  • 如需大规模上下文,应做摘要融合

  • 系统提示词将直接影响成本消耗,越长的系统提示词,将产生越高的每分钟通话费用

Last updated