Glean 拾遗
Daily /2026-08-17 / Your Agent Remembers Everything and Understands Nothing

Your Agent Remembers Everything and Understands Nothing

Source x.com Glean’d 2026-08-17 06:00 Read 13 min
AI summary

The article argues that agent memory systems today are stuck at the storage-and-recall stage: they return the right facts but miss the structural patterns spanning multiple conversations. Using a project-management assistant as a running example, it shows three engineers filing blockers that are individually accurate yet actually point to one shared root cause — a delayed auth-service refactor. Better retrieval, rerankers, or wider search scopes don’t surface that chain because the insight was never stored as a discrete piece of content. The proposed mechanism is Zep’s Observations: a deterministic algorithm first reduces every fact to a signature of two entities plus the relationship type, then builds an episode graph where conversations are nodes and shared signatures are edges, producing connected components that expose transitive dependency chains. An LLM then writes a name and summary, but grouping is never left to the model. No embeddings, no semantic similarity — pure graph topology. Relevant for engineers working on agent memory, knowledge graphs, and context engineering. Note: this is a sponsored, technically dense explainer for Zep.

Original · 13 min
x.com ↗
§ 1

Your Agent Remembers Everything and Understands Nothing

Agent memory is where analytics was for years, returning what you asked for and nothing more. Then analytics started surfacing which number moved and why, without the query. Agent memory hasn't made that jump yet.

Or it just has?

Your Agent Remembers Everything and Understands Nothing

Agent 记忆多年来就像早期的分析工具:你问什么,它只回什么,不会多给。后来分析工具开始主动指出哪个数字变了、为什么变了,甚至无需你提问。Agent 记忆还没跨出这一步。

还是说,它刚刚跨出了这一步?

§ 2

Every agent memory system today solves the same problem. They store facts and retrieve the right ones at query time.

The part that’s missing is pattern recognition.

Consider a project management assistant that reads status updates from an engineering team. Three people file updates in the same week. Each one reports a blocker and each report is accurate and specific.

The agent stores all three and can retrieve any of them on request.

What it can’t tell you is that all three blockers trace back to a single delayed task.

如今每个 Agent 记忆系统解决的其实是同一个问题:存储事实,并在查询时取回正确的那几条。

缺失的部分是模式识别。

设想一个项目管理助手读取工程团队的状态更新。同一周内三个人提交了更新,每人都报告了一个阻塞项,且每份报告都准确、具体。

Agent 把三条都存了下来,也能在需要时任意取回。

但它无法告诉你的是:这三个阻塞项其实都追溯到同一个被延误的任务。

§ 3

Think of it like this. A new project manager reads three status updates and sees three problems to solve. An experienced one reads the same three and sees one problem with three symptoms.

Nobody taught the experienced PM to connect them. They've sat through enough standups to recognize the shape.

Agent memory today gives you the new PM. It stores every update correctly, retrieves them accurately, but misses the structure connecting them,

Closing that gap takes something other than better retrieval. It takes a step that analyzes the stored facts as a structure and writes down what that structure shows.

The output of that step is an observation. It is a piece of context assembled from how facts connect across many conversations rather than from anything a single conversation contained.

Each one stays tied to the specific facts and messages that produced it, which is what makes it durable context the agent can rely on instead of a guess.

Let's look at how it works.

可以这样想:新上任的项目经理读三份状态更新,看到的是三个待解决的问题;有经验的项目经理读同样的三份,看到的是一个带有三个症状的问题。

没有人教过这位经验丰富的 PM 去把它们联系起来。他只是在足够多的站会上坐过,认得这种形状。

如今的 Agent 记忆给你的正是那个新手 PM。它能正确存储每条更新、准确取回,却漏掉了连接它们的结构。

要补上这个缺口,靠的不是更好的检索,而是这样一步:把已存的事实当作结构来分析,然后把结构呈现出的内容写下来。

这一步的输出就是一条观察(observation)。它不是来自任何单一对话所包含的信息,而是来自事实在多次对话之间如何相连所拼出的上下文。

每条观察都锚定在产生它的具体事实和消息上,正因如此,它才是 Agent 可以依赖的持久上下文,而不是一次猜测。

来看看它是怎么工作的。

§ 4

Zep (open-source Graphiti) is one of the agent memory platforms that implements this, and it ships the capability as a feature called Observations. The mechanism starts with the graph it builds from your data.

It builds a knowledge graph from conversations and business data. The structure has three building blocks:

  • Entities are the nouns: people, products, places, tasks, services.
  • Facts are specific claims connecting two entities, stored as labeled edges. “Maya purchased a standing desk” is a fact that sits on the edge between the Maya entity and the Standing Desk entity.
  • Episodes are the raw source material: the actual conversation messages, JSON payloads, or documents that Zep ingested. Every fact traces back to the episode it was extracted from.

Zep(开源项目 Graphiti)是实现了这一能力的 Agent 记忆平台之一,它以名为 Observations 的功能提供此能力。它的机制始于系统基于你的数据所构建的图谱。

系统从对话和业务数据构建知识图谱。结构上有三大构件:

  • 实体(Entity)是名词:人、产品、地点、任务、服务。
  • 事实(Fact)是连接两个实体的具体断言,以带标签的边存储。“Maya 购买了一张站立式办公桌(Maya purchased a standing desk)”就是一条事实,位于 Maya 实体与 Standing Desk 实体的边上。
  • 片段(Episode)是原始素材:Zep 摄入的实际对话消息、JSON 载荷或文档。每条事实都可追溯到提取它的那条片段。
§ 5

Graphs can be scoped to a single user or shared across a team.

A user graph holds one person's history. A shared graph holds everything about a project, a workspace, or an organization, with data from many people flowing into the same structure.

Here’s a concrete example of a shared project graph.

Three engineers file status updates with a PM assistant over one week:

  • Alice (Monday): The API migration is blocked. She’s waiting on the auth service refactor, which the backend team owns.
  • Bob (Wednesday): The payments integration is stalled. He’s also waiting on the auth service refactor from the backend team.
  • Clara (Friday): The checkout flow can’t move forward because the payments integration isn’t ready. That work belongs to Bob.

Zep processes each update as an episode, extracts the entities and facts automatically, and builds the knowledge graph:

Every fact is accurate and individually retrievable. What the graph doesn’t contain is the shape those facts form together.

图谱可以限定到单个用户,也可以在整个团队间共享。

用户图保存一个人的历史;共享图保存一个项目、一个工作区或一个组织的全部信息,多个人的数据汇入同一个结构。

下面是一个共享项目图的具体例子。

三位工程师在一周内向 PM 助手提交了状态更新:

  • Alice(周一):API 迁移被阻塞了。她在等后端团队负责的 auth service 重构。
  • Bob(周三):支付集成就卡住了。他也在等后端团队的 auth service 重构。
  • Clara(周五):因为支付集成还没就绪,结账流程无法推进。那个活是 Bob 的。

Zep 把每条更新当作一个片段处理,自动提取实体和事实,并构建出这张知识图谱:

每条事实都准确且可单独取回。但图谱里没有的,是这些事实组合在一起后形成的形状。

§ 6

When the agent queries “what’s blocking the team,” it gets back the stored facts:

  • Alice is blocked on the API migration
  • The API migration is waiting on the auth service refactor
  • Bob is blocked on the payments integration
  • The payments integration is waiting on the auth service refactor
  • Clara is blocked on the checkout flow
  • The checkout flow is waiting on the payments integration

Every line is correct but nothing in the result tells the agent that unblocking one task clears all three people.

You can tune the reranker, widen the search scope, or return more results.

None of it helps, because the insight the agent needs was never stored as a discrete piece of content. It exists in how the facts connect across three separate conversations.

The workaround most teams reach for is a rule: flag any task that three or more people mention as a blocker. It just tells you the team is stuck without telling you which task to unblock first, and it only catches blockers that people name directly.

Clara never mentions the auth service. Her update is two hops away from the actual cause.

At this scale a person could connect the dots manually. But at thirty status updates a week, nobody does, and that's exactly when the chain matters most.

当 Agent 查询“团队被什么卡住了”时,它取回的只是这些已存事实:

  • Alice 被 API 迁移阻塞
  • API 迁移在等 auth service 重构
  • Bob 被支付集成就阻塞
  • 支付集成就等 auth service 重构
  • Clara 被结账流程阻塞
  • 结账流程在等支付集成

每一行都正确,但结果里没有任何信息告诉 Agent:解除一个任务,三个人就都通畅了。

你可以调 reranker、扩大搜索范围,或者返回更多结果。

这些都无济于事,因为 Agent 需要的关键洞见从来不是一条独立存储的内容。它存在于三个不同对话之间事实如何相连之中。

大多数团队会采用的变通方案是一条规则:把任何被三个人或以上提及的任务标记为阻塞项。但它只能告诉你团队被困住了,却不能说先解哪个任务,而且只能捕捉被人直接点名的阻塞项。

Clara 从未提起 auth service。她的更新离实际根因还隔着两跳。

在这么小的规模上,人还能手动串起这些点;但一周三十条状态更新时,没人会这么做,而恰恰在那时,这条链才最重要。

§ 7

For this project graph, Zep generates:

Name: Auth service refactor blocking multiple workstreams

Summary: The auth service refactor, owned by the backend team, is the root blocker in a dependency chain affecting three workstreams. Alice’s API migration and Bob’s payments integration are both waiting on it directly. Clara’s checkout flow is blocked downstream of the payments integration. Unblocking the auth service refactor clears all three.

No individual fact in the graph contains this. It spans three people, four work items, and three separate conversations.

Three properties make observations different from individual facts:

  • Cross-entity: A fact sits on one edge between two entities. An observation synthesizes across an entire cluster, connecting multiple entities and conversations.
  • Evidence-backed: Every claim traces to specific facts and episodes in the graph.
  • Read-only: You can’t manually create, edit, or delete observations. They follow the evidence. The mechanism below explains why.

对于这个项目图,Zep 会生成:

名称:auth service 重构阻塞多条工作流

摘要:由后端团队负责的 auth service 重构,是影响三条工作流的一条依赖链中的根阻塞项。Alice 的 API 迁移和 Bob 的支付集成都直接等它完成;Clara 的结账流程则被支付集成下游阻塞。解除 auth service 重构后,三条线都会打通。

图中没有任何单条事实包含这个结论。它跨越了三个人、四个工作项和三段不同对话。

观察与单条事实的不同,体现在三个特性上:

  • 跨实体(Cross-entity):一条事实位于连接两个实体的单条边上;一条观察则是在整个簇上做综合,连接多个实体和多段对话。
  • 有据可查(Evidence-backed):每条断言都可追溯到图中的具体事实和片段。
  • 只读(Read-only):你无法手动创建、编辑或删除观察。它们只跟随证据走,下面的机制会解释原因。
§ 8

The mechanism is a two-stage pipeline:

  • A deterministic algorithm first handles the clustering
  • An LLM writes the summary afterward. The model never decides what gets grouped.

Zep runs a background process that periodically checks for new data. When new conversations have been ingested and the graph has settled, it kicks off the analysis.

The first step reduces every fact to a signature: the two entities it connects plus the relationship type. The goal is to find which conversations reference the same relationships between the same entities.

After reduction, each episode (conversation) has a set of signatures:

  • Episode 1 (Alice’s update): (Alice, API Migration), (API Migration, Auth Service), (Auth Service, Backend Team)
  • Episode 2 (Bob’s update): (Auth Service, Backend Team), (Payments Integration, Auth Service), (Bob, Payments Integration)
  • Episode 3 (Clara’s update): (Bob, Payments Integration), (Checkout Flow, Payments Integration), (Clara, Checkout Flow)

The overlaps become visible:

  • (Auth Service, Backend Team) appears in Episode 1 and Episode 2
  • (Bob, Payments Integration) appears in Episode 2 and Episode 3
  • Episode 1 and Episode 3 share nothing

Alice never mentions Bob, Clara, the payments integration, or the checkout flow. Clara never mentions Alice, the auth service, or the backend team.

它的机制是一条两阶段流水线:

  • 先由一个确定性算法完成聚类
  • 之后由 LLM 写摘要。模型永远不决定哪些内容被分到一组。

Zep 在后台持续运行,定期检查新数据。当新对话被摄入、图谱稳定下来后,它就启动分析。

第一步是把每条事实约简为一个签名:它连接的两个实体加上关系类型。目标是找出哪些对话引用了相同实体之间的相同关系。

约简之后,每个片段(对话)都带有一组签名:

  • 片段 1(Alice 的更新):(Alice, API Migration)、(API Migration, Auth Service)、(Auth Service, Backend Team)
  • 片段 2(Bob 的更新):(Auth Service, Backend Team)、(Payments Integration, Auth Service)、(Bob, Payments Integration)
  • 片段 3(Clara 的更新):(Bob, Payments Integration)、(Checkout Flow, Payments Integration)、(Clara, Checkout Flow)

重叠之处清晰可见:

  • (Auth Service, Backend Team) 同时出现在片段 1 和片段 2
  • (Bob, Payments Integration) 同时出现在片段 2 和片段 3
  • 片段 1 与片段 3 没有任何共享

Alice 从未提及 Bob、Clara、支付集成或结账流程;Clara 也从未提及 Alice、auth service 或后端团队。

§ 9

Here Zep flips the perspective.

Instead of looking at entities connected by facts, it builds an episode graph where conversations are the nodes and shared signatures are the edges.

  • Episode 1 links to Episode 2 through (Auth Service, Backend Team)
  • Episode 2 links to Episode 3 through (Bob, Payments Integration)
  • Episode 1 and Episode 3 don’t share a signature

But all three end up in the same connected component because Episode 2 bridges them.

Alice's update and Clara's update join the same cluster despite having no entity in common, because Bob's update touches both sides and acts as the bridge between the two.

Worth noticing that the chain the algorithm follows and the dependency chain in the project are the same structure. Zep finds the root blocker by following exactly the kind of transitive link it was built to follow.

This uses no embeddings, no semantic similarity, and no ML model. It’s pure graph topology: which conversations share facts about the same entity pairs, and how those shared pairs chain them into connected groups.

The distinction matters because embedding-based clustering groups content that discusses similar topics. All three status updates would cluster together under that approach simply because they're all about engineering work, along with every other status update that week.

Signature-based clustering groups episodes that reference the same relationships between the same entities, which is what makes the specific chain detectable.

接下来 Zep 掉转了视角。

它不再看“由事实连接的实体”,而是构建一张片段图:对话是节点,共享签名是边。

  • 片段 1 通过 (Auth Service, Backend Team) 连接到片段 2
  • 片段 2 通过 (Bob, Payments Integration) 连接到片段 3
  • 片段 1 和片段 3 没有共享签名

但三段最终落在同一个连通分量里,因为片段 2 在中间做了桥。

Alice 的更新和 Clara 的更新尽管没有任何共同实体,仍进入了同一个簇,因为 Bob 的更新同时触达两侧,充当了两者之间的桥梁。

值得注意:算法走过的这条链,与项目里的依赖链是同一种结构。Zep 找到根阻塞项的方式,正是沿着它生来就要追踪的那种传递性关联。

这个过程不用 embeddings、不用语义相似度、也不用任何 ML 模型。它纯粹是图拓扑:哪些对话共享了相同实体对的事实,这些共享对又如何把对话串成连通组。

这一区别很重要,因为基于 embedding 的聚类会把讨论相似主题的内容归到一起。按那种做法,三条状态更新会仅仅因为都在讲工程工作而聚在一起,和当周其他每一条状态更新混在一起。

基于签名的聚类,则把引用了相同实体之间相同关系的片段归为一组,这才是让那条特定链条能被探测到的原因。

§ 10

Once the algorithm identifies the connected component, an LLM writes the summary.

A single, constrained LLM call receives the cluster’s key entities, the supporting conversations in chronological order, and the relationship types.

It then returns a name and summary steered toward durable signals like decisions, constraints, dependencies, and state changes, and restricted to facts the evidence explicitly supports.

Every structural property of the observation (which entities, which conversations, the time window) is decided by the algorithm. The LLM only turns that structure into readable prose.

This is why observations are read-only. They’re structural properties of the graph, described in natural language. When the evidence changes:

  • New conversations that fit an existing observation cause it to be regenerated with the new evidence
  • Contradicting evidence causes the old observation to be retired
  • The graph always reflects the current state of what is known’

If the backend team ships the auth service refactor next week, the observation updates. Alice and Bob unblock, Clara's dependency shifts, and the pattern reforms around whatever is actually blocking work now.

一旦算法识别出连通分量,LLM 就负责写摘要。

这一次 LLM 调用是单一且受限的:它拿到簇的关键实体、按时间排序的支持性对话,以及关系类型。

然后它返回一个名称和摘要,内容被引导到决策、约束、依赖、状态变化这类持久信号上,并且只限于证据明确支持的事实。

观察的每个结构属性(涉及哪些实体、哪些对话、时间窗口)都由算法决定。LLM 只是把那个结构转成可读的散文。

这正是观察之所以只读的原因:它们是图的结构属性,只是用自然语言描述出来。当证据发生变化时:

  • 如果新对话符合某条已有观察,它就会带着新证据重新生成
  • 如果出现矛盾证据,旧观察会被废弃
  • 图始终反映当前已知的状态

如果下周后端团队上线了 auth service 重构,这条观察就会更新。Alice 和 Bob 解除阻塞,Clara 的依赖发生转移,模式会围绕当前真正卡住进度的东西重新成形。

§ 11

Retrieving observations through the SDK:

# List all observations for a project graph
observations = client.graph.observation.get_by_graph_id(graph_id="project-atlas")

# Search observations by relevance
results = client.graph.search(
    graph_id="project-atlas",
    query="blocked workstreams",
    scope="observations",
)

Now consider the PM asking the agent what the team should prioritize this week.

Without observations, the agent retrieves the blocker facts and lists them. Three people are blocked. Two mention the auth service. One mentions the payments integration. The PM gets an accurate summary and still has to work out the ordering.

With observations, the agent’s context includes the dependency chain. It reports that the auth service refactor is the root blocker, that unblocking it clears Alice and Bob directly and Clara downstream, and that the single highest-leverage action this week is getting the backend team the resources to finish it.

Same query, same data. One response describes the situation. The other identifies the action.

通过 SDK 取回观察:

# List all observations for a project graph
observations = client.graph.observation.get_by_graph_id(graph_id="project-atlas")

# Search observations by relevance
results = client.graph.search(
    graph_id="project-atlas",
    query="blocked workstreams",
    scope="observations",
)

现在设想 PM 问 Agent:这周团队该优先做什么。

没有观察时,Agent 取回所有阻塞事实并罗列出来:三个人被阻塞;两个人提到 auth service;一个人提到支付集成。PM 得到一份准确的汇总,但仍然得自己排出先后顺序。

有了观察,Agent 的上下文就包含依赖链。它会报告:auth service 重构是根阻塞项,解除它可以直接清掉 Alice 和 Bob 的阻塞、并顺带解除 Clara 下游的阻塞;本周杠杆率最高的单一动作,是给后端团队足够资源去完成重构。

同样的查询,同样的数据。一个回答在描述现状,另一个在指出行动。

§ 12

The progression of context in Zep:

  • Episodes store raw conversation data
  • Facts structure it into timestamped claims
  • Entity summaries narrate the history of individual nodes
  • Observations synthesize patterns across the cluster

Each layer answers a different type of question. Together, they move agents from recall toward understanding.

Alice, Bob, and Clara each filed an accurate status update. Every fact went into the graph correctly and every one was retrievable.

What none of them could report, because none of them could see it, was the chain running underneath all three.

That's the gap Observations closes. Not better retrieval of what people said, but structural analysis of what their combined data shows.

Zep 中的上下文是逐层递进的:

  • 片段保存原始对话数据
  • 事实把数据组织成带时间戳的断言
  • 实体摘要叙述每个节点的历史
  • 观察综合整个簇中的模式

每一层回答不同类型的问题。合在一起,它们让 Agent 从“回忆”走向“理解”。

Alice、Bob、Clara 各自提交了一条准确的状态更新。每条事实都正确进入图谱,也都能被取回。

但他们三个人谁也报告不了那条潜伏在三条更新底下的依赖链,因为谁也看不见它。

这正是 Observations 要补上的缺口:不是更好地检索人们说了什么,而是对他们合并后的数据结构做分析。

§ 13

Resources:

  • Zep Graphiti GitHub repo →
  • Zep Observations docs →

If you are building an open-source tool that AI engineers would love, reach out. We only cover tools that pass our own test, so we'll try yours first and write about it only if it holds up.

Thanks to ZepAI for sponsoring today's issue.

资源:

  • Zep Graphiti GitHub 仓库 →
  • Zep Observations 文档 →

如果你正在构建一个 AI 工程师会喜欢的开源工具,欢迎联系我们。我们只报道能通过自己检验的工具,所以我们会先试用你的东西,只有它站得住脚,我们才会写。

感谢 ZepAI 赞助本期内容。

Open source ↗