`repos/` Agent Context / Memory 源码分析总览
1
# `repos/` Agent Context / Memory 源码分析总览
2
3
## 1. 分析范围
4
5
本目录覆盖 `E:\Agents\agent-memory\repos` 下 6 个仓库:
6
7
- `claude code`
8
- `codex`
9
- `hermes-agent`
10
- `langmem`
11
- `letta`
12
- `mem0`
13
14
目标不是复述项目说明,而是基于源码、测试、配置、migration、运行时路径解析逻辑,分析这些项目的:
15
16
- `context` 组装方式
17
- `summary / compaction` 机制
18
- `history` 与 `session/thread` 持久化
19
- `short-term memory` 与 `long-term memory`
20
- `检索路径`
21
- `state` / 存储后端
22
- 多 agent / 多线程 / 多 session 关系
23
24
## 2. 阅读方法
25
26
### 2.1 术语约定
27
28
- `context`:某一轮真正送进模型、或即将送进模型的可见上下文。
29
- `history`:消息历史、turn 历史、命令历史、thread transcript 等历史记录容器。
30
- `summary / compaction`:为缩短上下文窗口而进行的摘要、裁剪、压缩、窗口重写。
31
- `short-term memory`:面向当前 session/thread 的近程记忆,例如运行中缓存、当前会话摘要、最近消息窗口。
32
- `long-term memory`:跨 session/thread 持续存在、可被重新召回的记忆。
33
- `state`:除消息正文外的持久化运行时状态,例如 SQLite 元数据、线程表、job 表、路径布局、memory root。
34
35
### 2.2 证据原则
36
37
- 结论只以源码和测试为准。
38
- 如果某个行为主要由测试揭示,文档中会明确标成“测试验证到的行为”。
39
- 每份专题文档的每一节末尾都附有 `源码锚点`,用于回到实现位置核对。
40
41
## 3. 仓库分类
42
43
### 3.1 终端型 / 交互式 Agent Runtime
44
45
- [claude code](./claude%20code.md)
46
- [codex](./codex.md)
47
- [hermes-agent](./hermes-agent.md)
48
49
这三类项目都不是单一 memory 库,而是完整 agent runtime。阅读时要优先区分:
50
51
- 模型可见 `context`
52
- `history` / transcript
53
- 运行时 `state`
54
- 可跨会话复用的 memory
55
56
### 3.2 Memory / Context 工具库
57
58
- [langmem](./langmem.md)
59
- [mem0](./mem0.md)
60
61
这两类项目更像“可嵌入的 memory 能力层”:
62
63
- `langmem` 偏 `LangGraph/BaseStore` 场景,关注摘要节点、memory 抽取器、工具封装、命名空间与后台反射。
64
- `mem0` 偏“抽取式长期记忆”,关注向量库、SQLite 历史、实体链接、混合检索与 procedural memory。
65
66
### 3.3 Agent 平台 / 服务器型系统
67
68
- [letta](./letta.md)
69
70
`letta` 同时包含:
71
72
- block/core memory
73
- 会话与消息 ORM
74
- archive/passage 长期记忆
75
- 可选 git-backed memory
76
77
因此它既有 runtime,又有平台化持久层。
78
79
## 4. 文档树
80
81
```text
82
docs/
83
├─ 00-总览.md
84
├─ 01-横向对照.md
85
├─ claude code.md
86
├─ claude code/
87
│ ├─ 01-架构与范围.md
88
│ ├─ 02-context管理.md
89
│ ├─ 03-memory实现.md
90
│ ├─ 04-存储与状态.md
91
│ └─ 05-调用链、压缩与边界.md
92
├─ codex.md
93
├─ codex/
94
│ ├─ 01-架构与范围.md
95
│ ├─ 02-context管理.md
96
│ ├─ 03-memory实现.md
97
│ ├─ 04-存储与状态.md
98
│ └─ 05-调用链、压缩与边界.md
99
├─ hermes-agent.md
100
├─ hermes-agent/
101
│ ├─ 01-架构与范围.md
102
│ ├─ 02-context管理.md
103
│ ├─ 03-memory实现.md
104
│ ├─ 04-存储与状态.md
105
│ └─ 05-调用链、压缩与边界.md
106
├─ langmem.md
107
├─ langmem/
108
│ ├─ 01-架构与范围.md
109
│ ├─ 02-context管理.md
110
│ ├─ 03-memory实现.md
111
│ ├─ 04-存储与状态.md
112
│ └─ 05-调用链、压缩与边界.md
113
├─ letta.md
114
├─ letta/
115
│ ├─ 01-架构与范围.md
116
│ ├─ 02-context管理.md
117
│ ├─ 03-memory实现.md
118
│ ├─ 04-存储与状态.md
119
│ └─ 05-调用链、压缩与边界.md
120
├─ mem0.md
121
└─ mem0/
122
├─ 01-架构与范围.md
123
├─ 02-context管理.md
124
├─ 03-memory实现.md
125
├─ 04-存储与状态.md
126
└─ 05-调用链、压缩与边界.md
127
```
128
129
## 5. 推荐阅读顺序
130
131
### 5.1 先看横向共性
132
133
先读 [01-横向对照.md](./01-横向对照.md),建立下面几个问题的统一框架:
134
135
- 谁在组装模型可见 context
136
- 谁在维护历史
137
- 谁在做 compaction / summary
138
- 谁在保存 long-term memory
139
- 谁负责检索和召回
140
- 数据到底落在哪
141
142
### 5.2 再按类型深入
143
144
如果想看完整 agent runtime:
145
146
1. [claude code](./claude%20code.md)
147
2. [codex](./codex.md)
148
3. [hermes-agent](./hermes-agent.md)
149
150
如果想看 memory 能力库:
151
152
1. [langmem](./langmem.md)
153
2. [mem0](./mem0.md)
154
155
如果想看平台型实现:
156
157
1. [letta](./letta.md)
158
159
## 6. 快速索引
160
161
- `claude code`:`context.ts`、`utils/claudemd.ts`、`memdir/*`、`services/SessionMemory/*`
162
- `codex`:`codex-rs/core/src/codex.rs`、`context_manager/*`、`memories/*`、`state/*`
163
- `hermes-agent`:`run_agent.py`、`agent/*`、`plugins/memory/*`、`hermes_state.py`
164
- `langmem`:`short_term/summarization.py`、`knowledge/extraction.py`、`knowledge/tools.py`、`reflection.py`
165
- `letta`:`schemas/*`、`prompt_generator.py`、`services/*manager.py`、`context_window_calculator/*`
166
- `mem0`:`mem0/memory/main.py`、`storage.py`、`utils.py`、`configs/prompts.py`
167
168
## 7. 交叉阅读提示
169
170
- `claude code` 与 `codex` 都同时存在 `context`、`history`、`compaction` 和单独的 memory 管线,但设计边界不同。
171
- `hermes-agent` 与 `letta` 都有“多条并行 memory 路径”,前者偏插件 provider,后者偏平台内建模型。
172
- `langmem` 与 `mem0` 都是 memory 能力层,但 `langmem` 偏工作流节点与 store namespace,`mem0` 偏抽取、去重、检索与存储。
173