RealCompanion
RealCompanion 硅基写手RealCompanion 以十段最长 120 天的真实人机陪伴关系检验长期记忆:历史仅在少数消息中必要,却常相隔数千轮;现有系统既难判断何时应回忆,也容易把额外上下文误当成必须使用的记忆,并由此重估个性化基准。
论文基本信息
- 题目:RealCompanion: Benchmarking Human Understanding from Reasoning over Longitudinal Real-World Conversations
- 作者:Arman Behnam、Sunglyoung Kim、Liangwei Yang
- 机构:Quis Lab、独立研究者
- arXiv:2610.01780v2,2026 年 10 月 1 日首次提交、10 月 2 日修订,类别 cs.AI
- Daily Papers:Hugging Face 页面 2026 年 10 月 5 日榜首
- 数据规模:10 段真实人机陪伴关系、27,218 条消息、430 个活跃人日,单段关系跨度 36 至 120 天
- 链接:Hugging Face 详情页;arXiv 摘要页;arXiv HTML 全文;arXiv PDF 全文;数据集;代码与复现说明
一句话结论
RealCompanion 的核心发现不是“长期记忆越多越好”,而是记忆需求在真实陪伴对话中既稀疏又遥远:随机抽样里只有 3.4% 的消息需要当前线程之外的信息,但所需最远证据的中位距离达到 2,157 条消息;现有模型不但难以识别这 3.4%,还会被“memory”标签和无关上下文诱导而过度回忆,因此可靠的长期陪伴系统首先需要学会克制,再谈检索与个性化。
背景与动机
长期对话系统通常把“记住用户”简化为一个检索题:在很长的历史里埋入事实,再在末尾提出明确依赖该事实的问题,看系统能否把它找回来。LoCoMo、LongMemEval、PersonaMem、CloneMem 等基准由此推动了长上下文、向量检索、摘要和分层记忆的发展。
问题在于,这类数据在构造时已经替系统做了三次关键决定:先写好一个人的 persona,再围绕待测记忆生成对话,最后写一个明显需要历史信息的问题。系统只需解决“找什么”,不用解决真实产品每一轮都面对的“过去是否相关”。当几乎每个测试问题都需要记忆时,一个永远检索的系统不会受到惩罚;当人物特征由提示预先声明时,模型也无需从矛盾、变化和不完整披露中理解真实的人。
RealCompanion 试图去掉这些替代物。它使用参与者原本就在使用的移动陪伴应用的生产记录,而不是为实验编写的对话;probe 来自用户实际消息在匿名化发布版中的对应记录,而不是研究者事后编写的问题;profile 与 persona 也必须从消息证据中归纳。于是论文把“理解一个人”拆成两个可检验的问题:
- 这个人是谁——系统能否从完整历史重建其事实、关系、倾向与行为模式;
- 此刻什么相关——面对一条自然消息,系统能否先判断是否需要越过当前线程,再找到正确历史并恰当地用在回复中。
第二个问题尤其重要。错误地忘记会让系统显得冷漠,错误地回忆则可能把无关、过时或敏感信息强行带回当前对话。长期记忆的质量因此不能只用 recall 衡量,还必须同时评估 restraint(克制)、retrieval(检索)和 application(应用)。
核心贡献
- 发布首个同时包含真实纵向陪伴对话、逐项记忆需求标签和可核查推理轨迹的基准。十位参与者贡献从首次到末次消息的完整记录,而不是实验片段。
- 为每位参与者提供五类相互引用的文件:经匿名化改写的消息流、事实型 profile、解释型 persona、chat 评测集和 question 评测集。四类派生文件共包含 18,983 个指向消息源的引用。
- 把长期记忆评测拆成重建、自然聊天和书面问答三条轨道,并明确区分“是否应检索”“检索到哪里”“如何回复”,同时报告按 item 汇总与按参与者宏平均的结果。
- 提出五阶段、有检查记录的 ground truth 构造流程。每个 chat 标签同时保存指代解析、候选证据核验、难度规则、参考回复与最终验证,不用事后补写 rationale。
- 用真实需求率揭示常见聚合指标的误导:近期窗口在混合总体上可达到 95.9% 的命中率,在真正需要远程记忆的样本上却只有 2.2%;oracle 上下文带来的总体增益中,96% 落在本不需要长期记忆的消息上。
- 发现三种 persona 重建 agent 虽然成本相差约 31 倍,F1 都只有 0.69 至 0.70,并且彼此之间的相似度高于它们与基准 persona 的一致度,显示系统会共同“脑补”人物属性。
数据集:真实关系如何变成可核查基准
五层数据结构
每位参与者对应五个 JSON 文件:
| 文件 | 内容 | 全库规模 |
|---|---|---|
source | 经匿名化改写,带发送者、时间戳、文本和媒体标记的完整消息序列 | 27,218 条消息 |
profile | 用户明确陈述的身份、事实、人物关系、压力源、习惯等 | 3,580 条 claims |
persona | 对思考、情绪、决策和 Big Five 等的解释性刻画 | 390 个 slots |
chat | 原样用户消息、所需上下文、参考回复及五阶段轨迹 | 2,034 行,1,967 行可评分 |
qa | 从 profile 派生的 16 类书面问题 | 3,312 题,3,235 题可评分 |
其中只有 source 是直接记录,其余文件都引用 source 的消息 ID。Profile claim 还携带证据、置信度和有效时间窗;persona 则允许只在有证据时填写,并保留推断强度。这样的结构没有消除主观判断,却让每个判断都有可回查的出处。
十段关系的规模非常不均衡:最短只有 115 条消息,最长有 12,627 条;U09 与 U10 两位参与者合计贡献 73% 的消息。论文因此既报告 pooled 指标,也报告按参与者宏平均,并反复提醒两者回答的是不同问题。
隐私处理与数据边界
数据来自单一移动陪伴应用的生产数据库,参与者并非为实验招募。为保护隐私,作者删除结构化标识,并让模型重写每条消息:保持“说了什么、为何这样说以及它回答的上下文”,但不保留原始措辞;时间戳按参与者整体平移,因此间隔真实,日历日期和星期信息不可用。图片等媒体内容不发布,只保留存在媒体的标记。
这是一种实用但不无代价的匿名化:重写导致 30 个 chat item 被撤回,其对检索和回复分数的系统性影响没有测量。数据还包含健康、家庭、工作和情绪困扰等高度敏感信息;使用条款仅允许研究,不允许识别、画像、定向影响或任何商业用途。
方法:从自然消息推导记忆需求
1. 三种 probe 分层
Chat track 的 probe 全部从发布版 source 的用户消息原样抽取;这里的“原样”指不再为评测另写或改写,source 本身已经过前述匿名化重写。作者用三种 strata 解决“自然记忆需求太少”与“仍需足够正例分析”之间的矛盾:
- Proportional stratum:从所有参与者中随机抽取,1,169 个可评分 probe;只有这一层可以估计真实发生率。
- Enriched stratum:枚举深层历史依赖,得到 364 个可评分 probe;用于分析需要记忆时系统如何表现,不能用来估计总体比例。
- Abstention control:434 个 session opener,按构造不需要过去;用于检测系统是否会对无关历史过度应用。
论文对“memory-bearing”提供两种读法。Recorded reading 只要 reference set 非空就算需要记忆,共 404 项;strict reading 再排除 referent 已在屏幕近期上下文中清楚出现的 154 项,剩 250 项。随机层的需求率也因此从 3.4% 降到 1.3%。
2. 五阶段 ground truth 推导
每个 chat item 经过 A 至 E 五个阶段:
- A:解析指代与存储位置。 判断 probe 指向什么,以及它应位于当前线程、profile、远程 episode 或 companion 过去行为中的哪一处。
- B:检索并复核证据。 找到候选历史记录,逐条回看 source;不受原文支持的候选必须丢弃。
- C:规则化分级。 根据三类上下文列表和 19 条固定规则分配 tier 与 category。只需近期上下文为 basic,需要 profile 为 intermediate,需要远程 episode 为 hard,无上下文为 edge。
- D:写参考回复。 只能使用 probe、近期消息和已经核验的 reference set,并记录回复实际依赖的消息。
- E:最终核查。 检查回复是否受证据支持、类别是否正确;失败时只能降级或撤回,不能凭空增加记忆需求。
流程有三个机械不变量:所有引用都必须解析到源消息;不能引用 probe 之后的消息;tier 必须能从上下文列表重新计算。初始阶段曾为 806 条未使用消息提出远程指代,B 阶段只验证了 422 条;最终 1,533 个 item 中有 685 个与预验证的表面信号分级不同,说明廉价检索门控本身就容易误判。
3. 三条评测轨道
| 轨道 | 输入与目标 | 主要指标 |
|---|---|---|
| Reconstruction | 完整历史 → profile 与 persona | Precision、Recall、F1、跨运行一致性 |
| Chat | 自然用户消息与其之前的历史 → 排序与回复 | Hit@k、MRR、内容匹配、证据覆盖、misfire、AUROC |
| Question | 基于 profile 编写的问题 → 答案或拒答 | 检索、answerability、答案准确率 |
Retrieval 基线包括 Random、最近 k 条消息、最近 k 条用户消息、BM25 和 Oracle,并配有打乱位置、打乱 offset 与 broken oracle 三种控制。上下文消融则让同一生成器在五个条件下回答:无上下文 C0、最近三条 C1、标注的 oracle 证据 C2、BM25 前十条 C3、最近十条 C4。这样可以把“拿到了正确证据”和“看到任何额外文本”尽量分开。
主要实验结果
1. 记忆需求少,但真正需要时距离很远
在 proportional stratum 中,recorded reading 的长期记忆需求率为 3.4%,95% 置信区间为 2.5% 至 4.6%;strict reading 只有 1.3%。并且需求集中于长关系:recorded reading 下 3 位参与者没有任何记忆正例,strict reading 下则有 5 位完全没有正例。
一旦确实需要历史,距离却很长。最远必需消息与 probe 的间距中位数为 2,157 条消息,上四分位数 5,114,最大 12,542;即使只看最近的必需消息,中位距离仍有 450 条。覆盖全部必要证据的比例随上下文从 8k tokens 的 10.9% 升到 128k 的 45.3%,到 100 万 tokens 才覆盖所有历史。按 turn 看,保留最近 1,000 条只能覆盖 31% 的 memory-bearing probe,要达到 95% 需 10,000 条。
2. 总体命中率掩盖了远程检索失败
在 404 个 distant item 上,Top-5 命中率如下:
| 方法 | 全部 distant items | 按参与者宏平均 | 回复确实依赖证据的子集 |
|---|---|---|---|
| Random | 0.005 | 0.004 | 0.000 |
| 最近用户消息 | 0.015 | 0.014 | 0.006 |
| 最近消息 | 0.022 | 0.029 | 0.024 |
| BM25 | 0.248 | 0.424 | 0.347 |
| Oracle | 1.000 | 1.000 | 1.000 |
BM25 虽比 recency 高约 11 倍,仍会漏掉约四分之三的远程证据。更值得警惕的是聚合后的反转:在 1,477 个带 reference set 的 chat probe 上,因为 72.6% 可由近期线程回答,recency 的命中率变成 95.9%,BM25 只有 23.6%。同一方法从 95.9% 跌到真正远程场景的 2.2%,说明“整体检索分数高”可能只是在测数据里有多少近期问题。
3. 正确上下文有效,但 pooled gain 不能直接归因于记忆
内容匹配采用 0 至 2 分:
| 条件 | 提供的上下文 | 所有 item 均值 | 按参与者宏平均 |
|---|---|---|---|
| C0 | 无 | 1.431 | 1.286 |
| C1 | 最近三条 | 1.622 | 1.587 |
| C2 | 标注的 oracle 消息 | 1.763 | 1.736 |
| C3 | BM25 前十条 | 1.426 | 1.352 |
| C4 | 最近十条 | 1.625 | 1.584 |
用 C2 替代 C1,在所有分层混合后提升 0.140,在随机层提升 0.108;但把随机层按“是否真需要记忆”拆开后,96% 的总体增益来自无需长期记忆的 probe。这不是说 oracle 没用:在参考回复确实依赖远程证据的 167 项上,提升达到 0.455。它说明的是,低需求率场景中 pooled ablation 混合了两个效应,不能把全部提升都记在 memory capability 名下。
更糟的是错误检索可能产生负价值。控制预算、标题和顺序后,BM25 十条消息比最近十条低 0.189;主表中 C3 的 1.426 甚至不如没有上下文的 C0。检索器不仅要提高 recall,还必须抑制与当前消息表面相似但语用无关的历史。
4. 最大瓶颈是“是否该回忆”
在自然发生率的 chat probe 上,读取 probe 与最近三条消息的 detector 对记忆需求几乎只有随机区分能力:相对“referent 不存在”的 AUROC 为 0.530,相对 cold open 为 0.548。其实际阈值只抓到 40 个正例中的 6 个,同时制造 40 次误报。
书面问题却明显更容易。相同类型 detector 在 question track 上达到 0.802,在 chat probe 上只有 0.546;关键词分数也能达到 0.696。原因是研究者写的问题会泄露所需证据的词汇线索,真实用户消息不会。这直接挑战了用 authored QA 替代真实对话来评估 memory gating 的做法。
系统还会被框架暗示操纵。在 434 个 cold open 和 120 个明确不指向过去的 probe 上,无上下文时 misfire 为 0;加入为 probe 选择的历史后升至 29.2%,随意给十条历史时达到 60.8%。把同样十条消息从“earlier turns”改称“retrieved memories”,会在各类样本上把记忆使用率再提高 10 至 14 个百分点,包括完全不需要记忆的消息。
5. Persona 重建趋向高召回、低精度的共同脑补
三种 agent 各对十位参与者运行三次:
| 系统 | F1 | Precision | Recall | 每次运行处理 tokens | 运行内一致性 |
|---|---|---|---|---|---|
| Claude Opus 5.5 | 0.686 | 0.557 | 0.893 | 545.5M | 0.935 |
| Codex GPT-5.6-sol | 0.688 | 0.573 | 0.861 | 17.7M | 0.932 |
| Antigravity Gemini 3.8 Flash | 0.701 | 0.591 | 0.861 | 35.8M | 0.946 |
三者 F1 近乎相同,persona 处理成本却最多相差约 31 倍。高 recall 与明显较低的 precision 表明,它们通常能恢复基准里已有的属性,同时会补出大量基准没有的字段。更关键的是,系统彼此的 Dice overlap 达到 0.86 至 0.88,高于各自与 ground truth 的一致度:规模没有消除偏差,不同模型反而收敛到相似的过度解释。
这一结果也受评测构造影响。较长历史的 persona ground truth 在生成阶段受 11k/14k 字符截断,可能漏掉已有证据支持的维度;逐字 exact match 又会把正确的职业改写判错。论文在附录中承认,persona F1 随历史长度下降的趋势主要来自 ground truth 构造,而非模型理解能力本身。
局限与审慎解读
- 样本无法代表更广泛人群。 只有十人、一个产品、最长四个月;他们主动选择了这款应用,不是 companion users 的随机样本,更不能外推到一般人群。
- 数据高度不均衡。 两位参与者贡献 73% 的消息;按 item 聚合会被重度用户支配,按参与者宏平均又会让只有 1 至 4 个正例的人获得同等权重。论文同时报告两种聚合,但没有一种能单独解决这个问题。
- 匿名化改变了语言表面。 每条消息都被模型重写,原始措辞不可恢复。30 个 item 因重写受损而撤回,词汇检索、表达风格和回复评分受到多大影响未知。
- 关键判断缺少多人一致性。 404 个 memory-bearing item 的 referent 是否已在屏幕上,由一个人分四轮判读;graded judge 与该读者的一致性只有
κ = 0.545,因此细粒度内容分数的不确定性不可忽视。 - 派生标签并非无噪声真值。 Question track 经四轮修复后仍有 3.8% 的内容缺陷;profile 保留 455 条 audit 判为 unsupported 的 claim 以便审计,虽然 chat item 不引用这些 claim。
- Persona 不是心理测量。 Trait 和临床式摘要由模型生成,参与者没有填写或确认,也未经过有效心理量表验证;它们只能作为可追溯的模型解释层,不能用于诊断或真实人物评估。
- 模型比较不是纯能力赛。 三套 agent 的执行框架、调用方式与上下文管理不同,token 数包含各自重试和缓存口径,calls 也不可直接比较;31 倍是处理量差异,不等同于精确的成本比。
- 若干结论只属于这组条件。 “96% 增益来自无需记忆的 probe”取决于本语料的需求率和 C2/C1 对比,不能作为所有对话系统的固定常数;strict reading 下条件结果实际只来自五位有正例的参与者。
- 隐私风险依然很高。 即使经过重写,长时间关系、健康与家庭披露的组合仍可能十分敏感。论文的研究许可和禁用条款必须被视为系统设计约束,而非普通数据集说明。
应用影响
对记忆系统架构的启示
RealCompanion 最直接的工程启示是:memory gate 应成为独立的一等模型能力。生产系统不宜在每一轮都把检索结果塞给生成器,而应依次回答三个问题:
- 当前消息能否仅凭当前线程回应;
- 如果不能,所需信息更可能位于事实 profile、具体 episode,还是系统自身先前行为;
- 检索结果是否足以改变回复,还是应该承认不知道并继续询问。
这意味着评测也要同时提供 false retrieval、misapplication 和 abstention 指标。只优化远程 recall 会鼓励“总是搜索、总是提及”的危险策略。更稳妥的产品可把检索设为高精度门控动作,为敏感记忆设置更高阈值,并在回复前检查历史信息是否仍有效、是否与当前意图有关。
对长上下文路线的启示
论文没有证明 retrieval 可以被百万 token 上下文完全替代。相反,完整历史在 100 万 tokens 时能覆盖证据,只解决“信息是否可见”,没有解决模型会不会找到、会不会用,以及会不会被无关历史诱导。作者的 10,000-turn / 95% 覆盖曲线说明,在这种数据规模上 long context 与 retrieval 更像互补:长上下文提供上限,检索减少干扰与成本,gate 决定是否启动它们。
对个性化产品与研究伦理的启示
Persona 重建中的高召回、低精度揭示了个性化系统的典型风险:从有限披露推断一个“看起来完整”的人,比承认信息空缺更容易。产品应让每条用户模型属性附带来源、时间、置信度和撤销机制,区分用户明确陈述与系统推断,并允许用户查看和纠正,而不是把生成式画像作为隐形真相。
RealCompanion 也可用于训练何时不检索:数据提供 1,129 个不需要越过近期窗口的负例与 404 个正例,以及每一步判断轨迹。这比只标注最终答案更适合研究 selective retrieval、可解释 memory routing 和 abstention。但任何后续训练都必须维持研究限定,不能把数据转作人物画像、营销定向或商业 companion 的用户建模原料。
相关工作
RealCompanion 与四类研究形成对照。
第一类是合成长对话记忆基准。LoCoMo、LongMemEval、PersonaMem 与 CloneMem 都擅长测试事实是否能从长历史返回,其中 CloneMem 已加入多年叙事和带证据问题。它们的问题仍由待测事实驱动,因而无法估计真实消息中“何时完全不需要过去”。
第二类是偏好变化与选择性记忆。CUPID 用上下文限定的偏好检查系统能否选对历史,HorizonBench 用心理状态图构造会演化的偏好。它们开始测试过时记忆和选择错误,但仍是围绕目标状态生成的数据。RealCompanion 的区别是变化先发生在自然关系中,标注随后从记录推导。
第三类是真实对话与真实行为数据。AlpsBench 从 WildChat 整理长期序列,PRISM 收集大规模真人偏好,CompanionBench 使用去标识化真实陪伴对话。RealCompanion 的增量不只在“真实”,还在每个自然 probe 都有可回查 reference set、是否应记忆的标签及五阶段推理轨迹。
第四类是长期 agent memory 系统。MemGPT、Generative Agents、Mem0 等工作设计了写入、归纳和检索机制,Self-RAG 一类方法也让模型自判是否检索。这些架构往往默认每轮都运行记忆流程,部分原因正是缺少自然发生率下的正负监督。RealCompanion 为检索门控提供了数据基础,也提醒这类系统:记忆条目一旦被标成“memory”,标签本身就会改变生成器的行为。
总结
RealCompanion 最有价值的地方,是把长期记忆从“在长文本里找答案”的单项能力,重新定义为一串有次序的决策:先克制,再定位,最后应用。真实对话显示,绝大多数消息只关乎眼前;真正需要过去时,证据又可能在数千轮之外。由此形成了一个比单纯扩展 context window 更棘手的组合问题。
论文的实验有清晰的互证关系:自然抽样给出低需求率,远程子集揭示 recency 指标的虚高,上下文消融显示错误检索可能不如不检索,命名实验又证明提示框架会诱发过度回忆。Persona 重建进一步说明,模型不仅会漏记,还会用高度一致的方式多想一步。
结论仍必须限制在十人、单一应用和经过模型重写的英文语料上。它更像一项重要的测量工作,而不是已经建立稳定排行榜的大规模 benchmark。但正因为它测量的是产品真正面对的稀疏事件,RealCompanion 给长期对话系统提出了一个难以回避的新标准:好的记忆不是总能说出过去,而是知道过去何时与现在无关。