爱意满满的作品展示区。
xuxin123122

OpenTalking 记忆库功能实践:让开源实时数字人跨 session 记住用户偏好

  •  
  •   xuxin123122 · 3h 25m ago · 100 views

    最近我们在 OpenTalking 里推进了一版记忆库能力,目标不是让数字人简单“多存几条聊天记录”,而是解决一个更实际的问题:实时数字人能不能在不同 session 之间记住用户偏好、称呼、项目背景和长期上下文。Github 搜 datascale-ai/opentalking 。

    OpenTalking 本身是一个开源实时数字人对话编排框架,主要负责把 LLM 、TTS 、STT 、WebRTC 、数字人驱动模型和前端交互串起来。之前它更偏实时链路验证:用户说一句话,LLM 回答,TTS 合成音频,再驱动数字人口型和画面。这个链路跑通以后,很快会遇到一个产品问题:每次新开会话,数字人都像第一次见你。

    所以这次记忆库的重点是跨 session 的长期记忆。

    思路图

    OpenTalking 负责实时对话链路、数字人播放链路、session scope 、角色 persona 、前端挂载和记忆注入策略。

    Mem0 负责长期记忆的抽取、存储、去重、向量化、实体关联和检索召回。

    一次对话大概是这样流转的:

    1. 用户创建 session 时,可以选择是否挂载记忆库。

    2. OpenTalking 把 user_id 、agent_id 、run_id 和业务 metadata 传给 Mem0 。

    3. 用户输入进来后,OpenTalking 先判断这轮是否需要读取长期记忆。

    4. 如果需要,就用当前问题去 Mem0 search ,并带上用户、角色、记忆库等过滤条件。

    5. Mem0 返回相关记忆后,OpenTalking 把它临时注入到 LLM 上下文里。

    6. LLM 生成回答,再进入 TTS 、字幕、WebRTC 和数字人驱动链路。

    7. 回复完成后,再把本轮对话异步交给 Mem0 add ,让 Mem0 自己抽取该长期保存的事实。

    这里比较关键的一点是:现在不应该再把记忆库理解成“本地表里存原文,再自己做关键词检索”。Mem0 最新的记忆算法更像一个专门的 memory layer 。写入时,它会从对话中抽取可长期保留的事实;读取时,不只是向量召回,而是结合 semantic search 、BM25 keyword 、entity matching 、reranker 等多种信号。

    Mem0 新算法里还有一个重要变化:记忆是 ADD-only 的。也就是说,它不会简单覆盖旧记忆,而是把新的事实追加进去,再在检索阶段根据时间、实体和相关性把更合适的记忆排到前面。这个设计对长期数字人很有价值,因为用户状态本来就是会变化的。

    目前这个功能还在持续完善中,后续会继续补充前端记忆库管理、聊天记录导入、多记忆库挂载、知识库和记忆库协同、引用展示,以及让记忆进一步影响语气、表情和数字人表达。

    如果你也在做数字人、长期记忆、RAG 、企业知识库或者多模态交互,欢迎交流。OpenTalking 的方向不是只做一个能说话的 demo ,而是把实时数字人从“能回答”逐步推进到“能带着长期上下文持续服务”。

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4133 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 05:32 · PVG 13:32 · LAX 22:32 · JFK 01:32
    ♥ Do have faith in what you're doing.