- 0. 论文信息
- 1. 这篇在解决什么问题?
- 2. 核心思路(一句话)
- 3. 方法(可复现视角)
- 4. 实验(把能复现的数字写全)
- 5. Tables(逐字抄表,便于复现对比)
- 6. 评估/判分(LongMemEval Judge)
- 7. 复现仍缺的一块:Prompt + 时间窗规则
- 8. Appendix A(Table 4)能看到什么?
0. 论文信息
- 标题:Chronos: Temporal-Aware Conversational Agents with Structured Event Retrieval for Long-Term Memory
- 链接:https://arxiv.org/abs/2603.16862(v1, 2026-03-17)
- 论文类型:arXiv preprint(cs.CL)
- 关键词:Long-term conversational memory / temporal reasoning / event extraction / agentic retrieval
1. 这篇在解决什么问题?
长时跨度(跨周/月)的对话记忆里,用户问题经常不是“我说过什么”,而是:
- 时间约束:上个月/最近/那次旅行后一周
- 更新追踪:偏好/事实被多次修改,需要选“最新的值”
- 跨会话聚合:某类事件在某段时间出现了多少次
- 多跳:先找到事件 A 的时间点,再围绕它二次检索
作者认为:
- 仅 turn-level retrieval(检索原始对话 turns)缺少可执行的时间结构;
- 纯 KG/全量事实抽取太重,且容易引入与当前问题无关的“context entropy”。
2. 核心思路(一句话)
双索引(turn calendar + event calendar):把对话里“能落到时间轴上的事情”抽成结构化事件用于时间过滤与聚合,同时保留原始 turns 作为语义上下文;查询时再用 dynamic prompting 给 agent 生成检索策略,让它通过工具调用循环完成多跳检索。
3. 方法(可复现视角)
下面按“要自己复现一个 Chronos”来写:数据结构、索引流程、查询流程、关键超参。
3.1 两个日历(两个索引)
A) Turn Calendar(原始对话索引)
存储单位:conversation exchange/turn。
建议最小字段(复现可用):
1
2
3
4
5
6
7
{
"session_id": "...",
"turn_id": "...",
"t_conv": "2025-01-02T10:03:00+08:00",
"speaker": "user|assistant",
"text": "...原始文本..."
}
向量索引用 embedding(text)。
B) Event Calendar(结构化事件索引)
事件抽取条件:必须有 <subject, verb, object> 三元组。
建议最小字段:
1
2
3
4
5
6
7
8
9
10
{
"session_id": "...",
"source_turn_ids": ["..."],
"event_id": "...",
"svo": {"subj": "...", "verb": "...", "obj": "..."},
"start_datetime": "...ISO8601...",
"end_datetime": "...ISO8601...",
"aliases": ["...", "..."],
"raw_evidence": "可选:触发该事件的原句"
}
论文要点(原文表述概括):
- “the extractor identifies events if they have all of the following: ⟨subject, verb, object⟩.”
- “Each event receives both start datetime and end datetime fields…”(datetime range)
- “the system generates 2-4 lexical aliases…”(2–4 个别名,尽量不同词汇)
注:论文未给出严格的时间窗映射规则表(例如“recently”=几天)。复现时需要你自己给一套可解释规则或再去看作者代码(若公开)。
3.2 Indexing:事件抽取与入库
Step 1:分 chunk
- 每个 session:最多 25 turns 一批
- 批与批之间 5-turn overlap
Step 2:对每个 chunk 调用 LLM 做 event extraction
输入:一段 turns + 每个 turn 的 t_conv。 输出:事件列表(每个事件带 SVO + datetime range + aliases)。
关键实现点(来自论文描述):
- 多分辨率时间归一:“preserves explicit dates exactly, calculates relative references from conversation timestamps, and resolves ambiguous temporal expressions to appropriate time ranges.”
- 对模糊表达(recently/last month):基于 t_conv 计算相对/居中的时间窗。
Step 3:分别入库
- Turn Calendar:embed turn text → vector index
- Event Calendar:embed(建议将 svo + aliases + 时间字段串起来)→ vector index
论文报告的 embedding:text-embedding-3-large。
3.3 Query-time:dynamic prompting + initial retrieval + agent loop
Chronos 的查询是“三段式”:先给 agent 一个比较强的 turn 种子上下文,再让 agent 工具调用在两条索引里补证据。
3.3.1 Dynamic Prompting(每题生成“检索计划”)
输入:用户问题 q。 输出:1–5 条 bullet,告诉 agent:
- 要找哪些实体/属性
- 时间范围/过滤条件
- 是否需要多跳
论文说明模板生成用一个小模型:Gemini 3 Flash。
论文没有给出 meta-prompt 的逐字文本;只说明“它要求抽取 targets(entities/attributes/temporal constraints/operations),并输出 1–5 条检索指导”,并给了一个示例输出。
3.3.2 Initial Retrieval(先从 Turn Calendar 预取上下文)
论文固定 pipeline:
- Turn Calendar dense retrieval:top 100(cosine similarity)
- Cross-encoder rerank:Cohere Rerank v3 对这 100 重排
- 取 top 15 turns
- context expansion:对每条 turn 加上同 session 中的前 1 条 + 后 1 条
- 按 session date 分组格式化
3.3.3 Chronos Agent(工具调用循环)
agent 以 ReAct 的“思考—调用—观察”循环工作。
工具(论文明确写了名字):
- Vector search:
search_turns,search_events - Grep search:
grep_turns,grep_events
论文里的实现细节:
- tool call “execute asynchronously with automatic retry logic”
- dense retrieval:agent 可选 top-k;并对 k=100 rerank
- rerank “applied to the original question rather than the agent’s query”
- agent 可以“iteratively constrain retrieval by datetime range”
4. 实验(把能复现的数字写全)
4.1 Benchmark:LongMemEvalS
- 总题数:500
- 6 类任务:KU / MS / SSA / SSP / SSU / TR
4.2 实验设置(论文写死的配置)
- Embedding:text-embedding-3-large
- Temperature:0(所有 generation calls)
- Rerank:Cohere Rerank v3
两种系统配置:
- Chronos Low:generation model = GPT-4o
- Chronos High:generation model = Claude Opus 4.6
4.3 结果(整体 + 分类型准确率)
Chronos Low:92.60%
- KU 96.15
- MS 91.73
- SSA 100.00
- SSP 80.00
- SSU 94.29
- TR 90.23
Chronos High:95.60%
- KU 100.00
- MS 88.72
- SSA 100.00
- SSP 100.00
- SSU 98.57
- TR 95.50
5. Tables(逐字抄表,便于复现对比)
Table 1: Chronos Low 与 SOTA 系统对比(LongMemEval)
| Method | Overall | KU | MS | SSA | SSP | SSU | TR | |—|—:|—:|—:|—:|—:|—:|—:| | Chronos Low (Ours) | 92.60 | 96.15 | 91.73 | 100.00 | 80.00 | 94.29 | 90.23 | | Honcho † | 90.40 | 94.87 | 84.96 | 96.43 | 90.00 | 94.29 | 88.72 | | EmergenceMem Internal | 86.00 | 83.33 | 81.20 | 100.00 | 60.00 | 98.57 | 85.71 | | Mastra | 84.80 | 85.90 | 79.70 | 82.14 | 73.33 | 98.57 | 85.71 | | Supermemory | 81.60 | 88.50 | 71.40 | 96.40 | 70.00 | 97.10 | 76.70 | | Hindsight ‡ | 83.60 | 84.60 | 79.70 | 94.60 | 66.70 | 95.70 | 79.70 | | Zep | 71.20 | 83.30 | 57.90 | 80.40 | 56.70 | 92.90 | 62.40 | | Full-context | 60.20 | 78.20 | 44.30 | 94.60 | 20.00 | 81.40 | 45.10 |
† Honcho evaluated on Claude Haiku 4.5, not GPT-4o, so results are not directly comparable.
‡ Hindsight evaluated with OSS-20B actor + OSS-120B judge; not directly comparable.
Table 2: 更强 LLM 配置下的系统对比
| Method | Overall | KU | MS | SSA | SSP | SSU | TR | |—|—:|—:|—:|—:|—:|—:|—:| | Chronos High (Ours) | 95.60 | 100.00 | 88.72 | 100.00 | 100.00 | 98.57 | 95.50 | | Honcho † | 92.60 | - | - | - | - | - | - | | Mastra | 92.80 | 94.90 | 87.20 | 96.40 | 90.00 | 97.10 | 94.00 | | Supermemory | 85.20 | 89.70 | 76.70 | 98.20 | 70.00 | 98.60 | 82.00 | | Hindsight ‡ | 91.40 | 94.90 | 87.20 | 96.40 | 80.00 | 97.10 | 91.00 |
† Category-level accuracy not reported.
‡ Evaluated with an OSS-120B judge model; not directly comparable.
Table 3: 消融实验(116 题样本)
| Model | Ablation | Overall | KU | MS | SSA | SSP | SSU | TR | |—|—|—:|—:|—:|—:|—:|—:|—:| | Chronos High | Chronos | 94.8 | 100.0 | 90.3 | 100.0 | 100.0 | 93.8 | 93.5 | | Chronos High | No Initial Retrieval | 91.4 | 100.0 | 80.6 | 100.0 | 85.7 | 93.8 | 93.5 | | Chronos High | No Dynamic Prompting | 94.8 | 100.0 | 87.1 | 100.0 | 100.0 | 93.8 | 96.8 | | Chronos High | No Rerank | 92.2 | 100.0 | 87.1 | 100.0 | 85.7 | 87.5 | 93.5 | | Chronos High | No Date Filter | 92.2 | 94.4 | 83.9 | 100.0 | 85.7 | 93.8 | 96.8 | | Chronos High | Grep Only (no vector) | 87.1 | 94.4 | 83.9 | 61.5 | 100.0 | 93.8 | 90.3 | | Chronos High | Vector Only (no grep) | 83.6 | 100.0 | 80.6 | 100.0 | 85.7 | 62.5 | 80.6 | | Chronos High | Turns Only (no events) | 92.2 | 94.4 | 87.1 | 100.0 | 85.7 | 87.5 | 96.8 | | Chronos Low | Chronos | 93.1 | 94.4 | 90.3 | 100.0 | 85.7 | 87.5 | 96.8 | | Chronos Low | No Initial Retrieval | 76.7 | 83.3 | 64.5 | 100.0 | 71.4 | 81.2 | 74.2 | | Chronos Low | No Dynamic Prompting | 78.4 | 83.3 | 77.4 | 100.0 | 42.9 | 93.8 | 67.7 | | Chronos Low | No Rerank | 81.0 | 77.8 | 74.2 | 100.0 | 85.7 | 87.5 | 77.4 | | Chronos Low | No Date Filter | 78.4 | 88.9 | 71.0 | 100.0 | 57.1 | 68.8 | 80.6 | | Chronos Low | Grep Only (no vector) | 77.6 | 100.0 | 64.5 | 53.8 | 100.0 | 87.5 | 77.4 | | Chronos Low | Vector Only (no grep) | 80.2 | 94.4 | 80.6 | 100.0 | 85.7 | 62.5 | 71.0 | | Chronos Low | Turns Only (no events) | 58.6 | 55.6 | 51.6 | 100.0 | 42.9 | 43.8 | 61.3 |
6. 评估/判分(LongMemEval Judge)
Chronos 的评估严格沿用 LongMemEval:
- agent 输出 hypothesis
- LLM judge 对比 hypothesis vs ground truth
- 按问题类别路由到不同 judge prompt(论文未给出逐字 judge prompt)
论文也提醒:LLM-as-judge 有波动,并给出若干 benchmark ground truth/ rubric 的问题样例。
7. 复现仍缺的一块:Prompt + 时间窗规则
论文里缺的(或至少没逐字公开的)关键材料: 1) dynamic prompting 的 meta-prompt 2) event extraction 的 prompt 3) temporal normalization 的“词 → 时间窗”规则表(recently/last month 等)
如果你要自己复现,我建议下一步补三件事:
- 定义一套可审计时间窗规则(我可以在后续一版里给出一套默认规则表 + 可配策略)。
- 写出可跑的 event extraction prompt(schema + few-shot + 去重约束)。
- 写出 dynamic prompting meta-prompt(输出 bullets,强制包含:targets / time filter / multi-hop plan)。
8. Appendix A(Table 4)能看到什么?
PDF/HTML 能抽到 Appendix A 的部分模型清单(表格未完全展开到每个数字):
- Claude Opus 4.6
- GPT-5-mini
- Claude Sonnet 4.5
- Claude Haiku 4.5
- GPT-5.2
- GPT-4o
- Claude Code Sonnet
一句话结论:Chronos 的核心不是“更强的 RAG”,而是把长期对话记忆里最难的部分(时间)做成可过滤的事件索引,再把检索策略做成每题自适应(dynamic prompting),最后用 agent loop 把多跳问题跑通;在 LongMemEvalS 上给出很硬的准确率支撑。